Only discard rasterization if no fragment shader and the Depth/Stencil tests are both disabled (Vulkan backend)

…ell as there being no pixel shader)
Fixes #issue
PR checklist:

[ ] make succeeds (on *nix)
[ ] make reftests succeeds
[x] tested examples with the following backends: vulkan
[x] rustfmt run on changed code

We need to double check with Vulkan spec on what is the expected behavior when the fragment shader is not set. IIRC, it's D3D that allows no fragment shader, but Vulkan expects it anyway, even if empty.

From the Spec:  "...and fragment shaders, if present, operating on fragments generated by Rasterization." seems to imply that fragment shaders are optional. Also, the VkGraphicsPipelineCreateInfo valid usage states that only a stage with VK_SHADER_STAGE_VERTEX_BIT is required.

Right. We need more info though: fragment shadersbeing optional is not enough, we need to find out what the spec does in this case.

On Mar 6, 2019, at 10:45, Forest Collins Sharp<EMAIL_ADDRESS>wrote:
From the Spec: "...and fragment shaders, if present, operating on fragments generated by Rasterization." seems to imply that fragment shaders are optional. Also, the VkGraphicsPipelineCreateInfo valid usage states that only a stage with VK_SHADER_STAGE_VERTEX_BIT is required.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

Some more info from the Spec (9.2.1. Valid Combinations of Stages for Graphics Pipelines):
"If a fragment shader is omitted, fragment color outputs have undefined values, and the fragment depth value is unmodified. This can be useful for depth-only rendering."
It then goes to provide an example of depth-only rendering, which requires

Vertex Shader
VkPipelineVertexInputStateCreateInfo
VkPipelineInputAssemblyStateCreateInfo
VkPipelineViewportStateCreateInfo
VkPipelineRasterizationStateCreateInfo
VkPipelineMultisampleStateCreateInfo
VkPipelineDepthStencilStateCreateInfo

Thanks!
Bors r+

On Mar 6, 2019, at 16:37, Forest Collins Sharp<EMAIL_ADDRESS>wrote:
Some more info from the Spec (9.2.1. Valid Combinations of Stages for Graphics Pipelines):
"If a fragment shader is omitted, fragment color outputs have undefined values, and the fragment depth value is unmodified. This can be useful for depth-only rendering."
It then goes to provide an example of depth-only rendering, which requires
Vertex Shader
VkPipelineVertexInputStateCreateInfo
VkPipelineInputAssemblyStateCreateInfo
VkPipelineViewportStateCreateInfo
VkPipelineRasterizationStateCreateInfo
VkPipelineMultisampleStateCreateInfo
VkPipelineDepthStencilStateCreateInfo
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.


[PROTOTYPE] Spike: merging History & Notes pages

This spike follows the 'wrapper' pattern established by Document::PaginatedHistory and Document::PaginatedHistory. This approach allows us to encapsulate a regular ActiveRecord query object, while providing custom objects as the result set for rendering to the view.
How to view it
You need the "Preview design system" permission enabled so you can view the standalone 'History' page.
Example URL path: /government/admin/editions/1350491/history

Screenshot (click to expand)

New concept: Document Timeline
This spike introduces a new concept called a Document ‘Timeline’ – this is a representation of the History (Versions) and Notes (Editorial Remarks) of a Document, combined into one chronological list.
How does the data get combined?
I've used a union query to merge the queries for Document#edition_versions and Document#editorial_remarks into one result set, sorted by creation date. This provides a single chronological timeline of ‘history’ and ‘note’ entries.
Union queries aren't natively supported by Active Record. While it's possible to extend Active Record to support union queries, that starts to make things more complicated than they really need to be. We have a very specific use case for union queries, so it seems simpler to perform the query manually rather than bending Active Record to support it.
Both queries need to return the same columns so they can be merged. So we return three fields that exist in both tables: id, created_at, and model_name (so we know which table the record came from). We include created_at so the list can be sorted chronologically.
Rendering in the view
When rendering these items to the view, we need more than just the three fields returned by the union query.
The Document::Timeline#entries method returns a list of 'proper' ActiveRecord objects for the current page of the timeline. These entries will either be AuditTrailEntry (History) objects or EditorialRemark (Note) objects. The view then uses existing partials to render each type of timeline entry.
Other things to note

The render_timeline helper is part of the Documents Helper, even though the Controller action exists in Editions. Should we settle on one place for this? Ideally it’d be modelled so that it belongs to either the Document or the Edition.
Document::PaginatedTimeline#entries currently creates N+1 queries, one for each timeline item (version or remark) rendered on the page. This could (and should) be avoided with some extra work.
I've enabled ‘prepared queries’ in the MySQL database adapter config. This allows us to safely escape parameters in SQL queries (avoiding SQL injection attacks). They’re currently disabled in Whitehall (which is the Rails default), but will be enabled by default in Rails 7.2 so should be a non-controversial change.
For now, I've hardcoded the is_first_edition:, previous_version: params on the AuditTrailEntry object. The Document::PaginatedTimeline will need to replicate some of the functionality of Document::PaginatedHistory so that these values are set correctly. These need to be provided so that AuditTrailEntry#action is determined correctly.
I've not written any tests in this spike.

Trello: https://trello.com/c/CccmjGTQ/750-techspike-into-combining-notes-history
⚠ This repo is Continuously Deployed: make sure you follow the guidance ⚠

The work for this has been completed and merged into main


community-operators poison-pill-operator (0.1.1)

/merge possible

Closing due to https://github.com/operator-framework/community-operators/issues/4159. Thanks for understanding.


Add salinity restoring file generation

This script processes and smooths sea water salinity data from the initial conditions NetCDF files generated using https://github.com/COSIMA/initial_conditions_access-om2 . It applies a uniform smoothing filter to the surface layer (0m depth) of the salinity for each month and concatenates the smoothed data into a single output NetCDF file.

Thanks @ezhilsabareesh8 - I will review soon.
I assume this uses the hh5 conda/analysis module ?
If you run black on the script and commit the change, then the formatting test should pass.
From the Readme:
Python scripts are formatted using the black formatter. This is enforced using a github action running on pull requests. You will need to have pre-commit and black installed in your python environment. It is included in the conda/analysis enviornments in hh5, otherwise it can be installed through pip or conda. Then run pre-commit install once to ensure your commits have black run on them before committing.

Thanks @anton-seaice, I just reformatted it using black.

Have a look now @ezhilsabareesh8 - this should work if we fix the time:units attribute in the source data

This change will contribute to https://github.com/COSIMA/access-om3/issues/207

Lets park this until

[ ] https://github.com/COSIMA/initial_conditions_access-om2/issues/6
[ ] https://github.com/COSIMA/initial_conditions_access-om2/issues/7
[ ] https://github.com/COSIMA/initial_conditions_access-om2/issues/3

are completed, and then we can finish this review.

@anton-seaice I noticed that the time variable was changed to match the initial conditions, but the salinity restoring should actually begin at the middle of each month. In my original code, I had overwritten the time variable with:
times[:] = np.arange(0.5, 12.5, 1)  # Time values from 0.5 to 11.5
times.units = "months since 0001-01-01 00:00:00"

Could you please revert the changes made to the time variable in this commit 8b0c207?


Mention redcap data import when mentioning haven package

There is a package REDCapR that can be used for interacting with these sources. Here is a vignette about how this package works: https://cran.r-project.org/web/packages/REDCapR/vignettes/BasicREDCapROperations.html

https://cran.r-project.org/web/packages/REDCapR/vignettes/workflow-read.html


Use Jekyll link tag once github-pages upgrades Jekyll to v4

https://jekyllrb.com/docs/liquid/tags/#links

Fixed in https://github.com/berkeley-cdss/berkeley-class-site/pull/28


requesting things of airlock users

add a subcommand that sends a user a dm and removes them from the onboarding queue, for purposes of requesting things like avatar changes

resolved by f6863aff3bb27d9b0c8d4af33d958e838321428d


Add cypress tests

Acceptance Criteria

Tests can be run with npx cypress test
Tests are covering
Tests succeed

Moved to done so I'm closing it.


[usbdev] Move VBUS detection pin to an MIO

The ASIC was missing a connection for the VBUS detection, so the MIO
adds that. In addition, the FPGAs connect the two VBUS detection sources
to IOR0 and IOR1--Software will have to select the correct I/O based on
the use_uphy value.
Moving to an MIO brings straightforward options for a simple constant
via periph_insel if OT is completely bus-powered, in addition to
making it available to both power domains for usbdev.
Takes care of #6043. Tested the hello_usbdev example on the CW310.

The DIF came in because we have been supporting a somewhat quirky setup where USB can come from on-board transceivers or the PMOD, so if we are to keep that, we have to dynamically detect the correct pinmux configuration.

@a-will do you want me to help look at the verilator failures?

@mdhayter FYI

@a-will do you want me to help look at the verilator failures?

It looks like I simply didn't notice that the verilator chip-level is not autogenerated. Hooking up the MIO in the RTL is no problem, but I haven't checked the software side yet.

this lgtm. Just to double check, since the physical location of the pins are the same for fpga, the PMOD connector boards don't really have to be updated right?
It's just a matter of software muxing the sense pin to the right place (when it's fpga)

Right, the physical locations are the same, and the port is merely renamed (though the software muxing part is true of all targets, not just the FPGA :) ). I pulled out IOR0 and IOR1 on the FPGA because I don't know any better, haha. I have yet to get familiar with the banking, but at least it looks to be on the right rail for detecting VBUS in deep sleep.

@a-will do you want me to help look at the verilator failures?

It looks like I simply didn't notice that the verilator chip-level is not autogenerated. Hooking up the MIO in the RTL is no problem, but I haven't checked the software side yet.

this lgtm. Just to double check, since the physical location of the pins are the same for fpga, the PMOD connector boards don't really have to be updated right?
It's just a matter of software muxing the sense pin to the right place (when it's fpga)

Right, the physical locations are the same, and the port is merely renamed (though the software muxing part is true of all targets, not just the FPGA :) ..Oh! But perhaps you meant that the software needs to detect whether the on-board phy or pmod is active, then choose the correct MIO, and if so, yes, that's true.). I pulled out IOR0 and IOR1 on the FPGA because I don't know any better, haha. I have yet to get familiar with the banking, but at least it looks to be on the right rail for detecting VBUS in deep sleep.

ah if you want to limit it to fpga, we have enums that basically inform the build process which platform we are using (dv vs verilator vs fpga), and you can just qualify it under fpga.  Is that what you want?

For csr_rw_test in DV, do I need to do anything in this PR to avoid bogus failures? In #10358, I'm seeing such a failure, and without knowing anything about how the tests are set up, I'm suspecting a randomized test on the pinmux has leftover state that influences the test for usbdev. Would that be possible?

For (chip-level) csr_rw_test in DV, do I need to do anything in this PR to avoid bogus failures? In #10358, I'm seeing such a failure, and without knowing anything about how the tests are set up, I'm suspecting a randomized test on the pinmux has leftover state that influences the test for usbdev. Would that be possible?

Yup, that seems to be what's happening. Made an exception for the usbstat CSR for all tests. Thanks for the help @weicaiyang !


Add a way to supress the warnings from the GC

Long story short, the code is fine, the GC still complains, is there a way to suppress the warnings from the GC ?

Please show an examples of warnings to be suppressed.

@akzhan  GC Warning: Repeated allocation of very large block This error

I don't think you can disable them, they are written from the GC code, not from crystal code. So unless there is a way to tell the GC crystal to disable warning, there is no way to hide them..

Boehm GC does allow to handle/ignore warnings. See https://github.com/ivmai/bdwgc/blob/master/include/gc.h#L1262-L1277
That being said, if GC complains you will eventually run into memory issues.

That's cool , thanks kostya
Can those be used too ?
unmapping threshold is 1.

GC_FIND_LEAK - Turns on GC_find_leak and thus leak detection. Forces a

collection at program termination to detect leaks that would

otherwise occur after the last GC.

GC_FINDLEAK_DELAY_FREE - Turns on deferred freeing of objects in the

leak-finding mode (see the corresponding macro

description for more information).

GC_ABORT_ON_LEAK - Causes the application to be terminated once leaked or

smashed objects are found.

It could be useful to try and debug the warnings

Looks like issue should be closed, because functionality already provided by BWGC

Can we close this?

I think GC_LARGE_ALLOC_WARN_INTERVAL is the solution here.


Cherry pick/update main readme

Could you update the description with the original PR number this commit is from?


[release-1.3] Prevent duplicate envoy filters when proxy ns equals root config ns

This is an automated cherry-pick of #16403

@istio-testing: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

integ-new-install-k8s-presubmit-tests-release-1.3
3850eaf82784180007fb91e2af8e2afd9d136dec
link
/test integ-new-install-k8s-presubmit-tests-release-1.3

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@istio-testing: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

integ-new-install-k8s-presubmit-tests-release-1.3
3850eaf82784180007fb91e2af8e2afd9d136dec
link
/test integ-new-install-k8s-presubmit-tests-release-1.3

integ-security-k8s-presubmit-tests-release-1.3
3850eaf82784180007fb91e2af8e2afd9d136dec
link
/test integ-security-k8s-presubmit-tests-release-1.3

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

/retest


added folder for Org data and comment

added folder for Org data and comment
tested

Good find. In the Finder this folder is shown as "OneDrive", but in the terminal the Org name is also shown. <>/Library/CloudStorage/OneDrive-*".
You have to be cautious before removing this folder, because data that has not been synced is removed. I have seen users that do not auto-start the OneDrive app, so sometimes they are working for days/weeks without uploading their files.

@erikstam What do you think?
Is the OneDrive folder considered as cache files and can be removed without issues?
OR
Because of the possibility of non-uploaded files we have to be carefull and can not be removed?

We can also make two labels; microsoftonedrive and microsoftonedrive_user_data (or any other name)
the latter includes the removal of the sync folder, which (to my experience) fixes sync errors, but with possible data loss .
So the admin can choose which option is best for their needs.


Fabric-networking-api-v1 is not working. 1.20.1

The Bren mod uses the same fabric-networking-api-v1 libraries that are present in FFAPI 1.20.1
https://modrinth.com/mod/bren
https://www.curseforge.com/minecraft/mc-mods/bren
https://github.com/SniffVillage/Bren
But these libraries do not work at all in the game. Although everything should work fine.
What could go wrong?
The location of the network class?
A mod problem? Or FFAPI?
What can be done to identify the exact problem?
I've checked almost all the code of the mod and FFAPI and found nothing that doesn't match.
Code for a mod that doesn't work:
https://github.com/SniffVillage/Bren/blob/main/src/main/java/nl/sniffiandros/bren/common/network/NetworkUtils.java
The classes used are from FFAPI library:
https://github.com/Sinytra/ForgifiedFabricAPI/blob/1.20.1/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/networking/v1/PacketByteBufs.java
https://github.com/Sinytra/ForgifiedFabricAPI/blob/1.20.1/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/networking/v1/ServerPlayNetworking.java
I know that Sinytra won't update as often anymore to fix small mods, but maybe it's possible to fix this bug without modifying files from FFAPI side?
Video

Nah bren mod is completely abandoned. No way author will make any compatiblity by himself


fixes axios call for writing submissions

Description
PR description: what did you do?

fixes axios endpoint for writing submissions

Type of change
Please delete options that are not relevant.

[x] Bug fix (non-breaking change which fixes an issue)

Change Status

[x] Complete, tested, ready to review and merge

40% test coverage is required for main branch
Has This Been Tested

[ ] Yes
[ ] No
[x] Not necessary

Checklist

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[ ] My code has been reviewed by at least two peers
[x] I have commented my code, particularly in hard-to-understand areas
[x] My changes generate no new warnings
[x] There are no merge conflicts

was hititng a mock endpoint by mistake


added a confirmation email after changing password

Related Issuse
added a confirmation email after changing password
Closes: #240
Describe the changes you've made
A clear and concise description of what you have done to successfully close your assigned issue. Any new files? or anything you feel to let us know!
Checklist:

[x] My code follows the style guidelines of this project.
[x] I have performed a self-review of my own code.
[x] I have commented my code, particularly in hard-to-understand areas.
[ ] I have made corresponding changes to the documentation.
[x] My changes generate no new warnings.

Screenshots

Original
Updated

original screenshot
updated screenshot

@khannakshat7 please review my PR


Update sidebar to declare the about as safe string

Allows you to add links into your about paragraph

Thanks!


How to disable auto correction in OuterHTML when doing some changes in the node

I'm very new to HTML Agility Pack.
I only tried changing some attributes inside the nodes which contains i18n attributes and replace them with translation attribute instead.
When I tried to get the outerHTML of the document, the attributes have changed as expected but there are some changes that html agility pack auto corrected.
Is there a way to disable the auto correction?
Here is my code snippet:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.Load(file);

HtmlNodeCollection i18nNodes = doc.DocumentNode.SelectNodes("//*[@i18n]");

if (i18nNodes != null)
{
	foreach (HtmlNode node in i18nNodes)
	{
		node.Attributes.Add("translation", node.Attributes["i18n"].Value);
		node.Attributes.Remove("i18n");
	}
}

// Do export the changed html to new html file
// doc.DocumentNode.OuterHtml

Here are the before and after changes:
before:
<ng-container *ngIf="!settingsLoaded">

				<mat-progress-bar mode="determinate" [value]="settingsProgress"></mat-progress-bar>

				{{settingsError}}

				Loading...

</ng-container>
<ng-container *ngIf="settingsLoaded">
	<app-header [(navigationState)]="navigationState" *ngIf="(authService.isAuthenticated() | async) === true && isNavigationVisible()"></app-header>
	<mat-sidenav-container>
		<mat-sidenav  mode="side" [opened]="(authService.isAuthenticated() | async) === true && isNavigationVisible()">

							people

								Alliance

		</mat-sidenav>
		<mat-sidenav-content id="content-wrapper" [ngClass]="{'anonymous': !(authService.isAuthenticated() | async) || !isNavigationVisible()}">
			<router-outlet></router-outlet>
		</mat-sidenav-content>
	</mat-sidenav-container>
</ng-container>

after:
<ng-container *ngif="!settingsLoaded">

				<mat-progress-bar mode="determinate" [value]="settingsProgress"></mat-progress-bar>

				{{settingsError}}

				Loading...

</ng-container>
<ng-container *ngif="settingsLoaded">
	<app-header [(navigationstate)]="navigationState" *ngif="(authService.isAuthenticated() | async) === true && isNavigationVisible()"></app-header>
	<mat-sidenav-container>
		<mat-sidenav mode="side" [opened]="(authService.isAuthenticated() | async) === true && isNavigationVisible()">

							people

								Alliance

		</mat-sidenav>
		<mat-sidenav-content id="content-wrapper" [ngclass]="{'anonymous': !(authService.isAuthenticated() | async) || !isNavigationVisible()}">
			<router-outlet></router-outlet>
		</mat-sidenav-content>
	</mat-sidenav-container>
</ng-container>

To enumerate the auto corrections made:

The ngIf and other attributes are now lower-cased
hidden becomes hidden=""
<path> nodes that are self closed <path /> now becomes </path>

These are just what I observed.
I only want what I change to be affected by the outerHTML.

Hello @rgalapate ,

The ngIf and other attributes are now lower-cased

It's possible to keep casing with the following options:
var doc = new HtmlAgilityPack.HtmlDocument();
doc.OptionOutputOriginalCase = true;

hidden becomes hidden=""
I don't think that's currently possible.

 nodes that are self closed  now becomes
Since that's a SVG attribute, it's currently not possible.

Let me know if that answer correctly to your question.
Best Regards,
Jonathan

The answer is fine.
Thanks 👍


Support for "system" messages

Implement new "system message" cell prototype
Provide appropriate API for dealing with this, where sender is @"JSQMessagesSystemSender"

Hi Jesses.
I've done that all 4 steps. It seem work, but i have one question that how i can make this message alway center align in view like "time label" ( don't care about avatar size).
Thanks. Eric

@trungnguyen1791 Have you managed to fix this? I'm running in to the same problem and can't find a way to solve this issue. Any suggestions @jessesquires

I'm looking for solution to center align this system messages too. I was going to use bubbles with zero content size and popuate system message text to the cell top label. @jessesquires Is that appropriate way?

@matthijsotterloo  Currently i managed it manually in "CellForItemAtIndexPath" using this "systemMsg.messageLabel.textInsets".
For example. My avatar size is (30,30). So i will check when avatar is enable or not then configure the corresponding textInsets value .
if (avatarEnable) {
systemMsg.messageLabel.textInsets = UIEdgeInsetsMake(0, 15, 0, 0);
}else {
systemMsg.messageLabel.textInsets = UIEdgeInsetsMake(0, -17, 0, 0);
}

@trungnguyen1791:
Have you managed to implement system messages?
Is there a branch somewhere I could use?
I am new to this kind of thing, so sorry for asking stupid questions.

Does anyone have a solution for how to implement @jessesquires's answer in Swift for system messages?

@zigdanis that worked perfectly for me so go for it!

Looking to implement these status messages but having a few issues creating a new Media Item class - would anyone be willing to post some code examples? Cheers!

Hi guys. I've implemented system message using JSQMessage subclass:
class SystemMessage: NSObject, JSQMessageData {

    var systemMessage = ""

    func senderId() -> String! {
        return "1337"
    }

    func senderDisplayName() -> String! {
        return ""
    }

    func date() -> Date! {
        return Date()
    }

    func isMediaMessage() -> Bool {
        return true
    }

    func messageHash() -> UInt {
        return UInt(self.systemMessage.hash)
    }

    func media() -> JSQMessageMediaData! {
        return SystemMessageData()
    }

    convenience init(withSystemMessage message: String) {
        self.init()
        self.systemMessage = message
    }

}

class SystemMessageData: NSObject, JSQMessageMediaData {

    func mediaView() -> UIView! {
        return UIView()
    }

    func mediaViewDisplaySize() -> CGSize {
        return CGSize(width: 1, height: 0)
    }

    func mediaPlaceholderView() -> UIView! {
        return UIView()
    }

    func mediaHash() -> UInt {
        return 0
    }
}

After that, when you implement delegate methods, return 0 height for bubble-top and return correct values for cell-top. You'll see system messages similar to timestamps.

At the same time I can implement JSQMessage update with enum for (Text, Media, System) types. This will allow system messages out of the box.

@bearclough Small fix:
func messageHash() -> UInt {
    return UInt(abs(self.systemMessage.hash))
}

Just in case hash return a negative value.
Your class works perfect!

Guys is there an easy way to add system message like adding timestamp?
@bernikowich have you got an example code for system message?

Hello everyone!
I'm sorry to inform the community that I'm officially deprecating this project. 😢 Please read my blog post for details:
http://www.jessesquires.com/blog/officially-deprecating-jsqmessagesviewcontroller/
Thus, I'm closing all issues and pull requests and making the necessary updates to formally deprecate the library. I'm sorry if this is unexpected or disappointing. Please know that this was an extremely difficult decision to make. I'd like to thank everyone here for contributing and making this project so great. It was a fun 4 years. 😊
Thanks for understanding,
— jsq


default replicas to 1 / pointer replicas

While we default to 1 replica through the StatefulSet, this is not the case when reconciling. This is the reason why upstream controllers/resources have the replicas as a pointer, to be able to distinguish from set/unset to default to 1 on unset, but allow to scale to 0.
Fortunately this does not mean a breaking change for users, as parsing manifests will work the same way, but it does require a change in the struct itself. This applies to the Prometheus and Alertmanger TPR.
@fabxc

I always thought of the replicas field as being required. On lookup, it's not documented as that though.
In general this seems fine to do – especially as we cannot validate required fields anyway.


[Bug]Solve the problem of poor judgment of initialization status

Problem Summary:
During on k8s mode usage, when a task is submitted to k8s and the task fails to run/task fails to initialize, the status change on the streamx page remains in the initialized state.
What is changed and how it works?
Proposal: xxx
Feel free to ping committers for the review!
Contribution Checklist

Make sure that the pull request corresponds to a GITHUB issue.

Name the pull request in the form "[Feature] [component] Title of the pull request", where Feature can be replaced by Hotfix, Bug, etc.

Minor fixes should be named following this pattern: [hotfix] [docs] Fix typo in README.md doc.

Purpose of this pull request

@wolfboys  PTAL

LGTM


include   babel-plugin-react-css-modules

it's possible to include this package in oder to not use 'eject' to support css modules ?
or what is the best method to use it with create-react-app, i think this package must support any type of css-modules packages.

No, it's not. Sorry!
See https://github.com/facebookincubator/create-react-app/pull/2285 for updates.

thanks, but the discussion is long and confused, it's support if i name  my files with   .module.css ?

That is the current proposal, yes.

nice, thanks

@webmobiles It will be once that pull request is merged. That's just regular CSS Modules though—you wouldn't be able to use the styleName prop that babel-plugin-react-css-modules allows.

thanks no problem , just need simple support for css modules.


Quirks for FeiBit light switches

FNB56-ZSW01LX2.0
FNB56-ZSW02LX2.0
FNB56-ZSW03LX2.0

Switches also marketed by ZemiSmart under the KS-811 model

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

16 of 16 (100.0%)  changed or added relevant lines in 2 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.06%) to 71.63%

Totals

Change from base Build<PHONE_NUMBER>:
0.06%

Covered Lines:
5282

Relevant Lines:
7374

💛  - Coveralls

Codecov Report

Merging #1745 (34f1dd9) into dev (b98948e) will increase coverage by 0.06%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##              dev    #1745      +/-   ##
==========================================
+ Coverage   71.56%   71.63%   +0.06%
==========================================
  Files         239      241       +2
  Lines        7358     7374      +16
==========================================
+ Hits         5266     5282      +16
  Misses       2092     2092

Impacted Files
Coverage Δ

zhaquirks/feibit/__init__.py
100.00% <100.00%> (ø)

zhaquirks/feibit/fnb56.py
100.00% <100.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

We’re these not working as is? I only see profile swaps from ZLL to ZHA. This shouldn’t be needed. What is the difference in experience in ZHA with and without this change?

@dmulcahey Thanks for taking a look.
I admit this was a break glass attempt to get a switch working and I don't understand myself why it helped.
These switches have been working well for me in Deconz for years.
I switched over to ZHA via Raspbee a couple months ago and had about 12 of them working OOTB, though ZHA tends to show some irrelevant options.
Last week I added two more of these switches (2x1 gang) in one room and only one would work at a time- really weird.
I have multiple working routers in the same room and more in adjacent rooms so I didn't suspect any reception issues.
Replacing the HW didn't make any difference and I successfully paired the same HW somewhere else.
I originally thought the issue was some routing limitation since this was probably my 33rd device on the network. I tried adding via a working device in the room, etc. but it doesn't seem to mean anything with a zigpy-deconz backend? Everything always shows as connected directly to the coordinator.
When nothing worked, I wrote a custom quirk, originally not even swapping from ZLL to ZHA. Only when I made the swap to ZHA, did I manage to successfully pair both switches in the room.
Since it worked I figured I'd share. Maybe there is some added or different resilience/retry logic which only takes effect via the ZHA code path?

Routers will change that limit. I am at 160 devices in prod

I really have no idea- I've got some 20+ routers out of ~32/33 devices.
The error messages I'm getting look the same as before but on a different device in a completely different part of the house:
2022-09-12 21:04:55.377 WARNING (MainThread) [homeassistant.components.zha.core.channels.base] [0xFE79:2:0x0006]: async_initialize: all attempts have failed: [DeliveryError('[0xfe79:2:0x0006]: Message send failure'), DeliveryError('[0xfe79:2:0x0006]: Message send failure'), DeliveryError('[0xfe79:2:0x0006]: Message send failure'), DeliveryError('[0xfe79:2:0x0006]: Message send failure')]

This time, the misbehaving device is a E220-KR4N0Z0-HA power strip which has an annoying issue of showing as lights rather than sockets/switches so maybe a quirk is a good idea anyway. I'll try one locally and see if the problems shift to some other quirkless device again.

Circling back, I wrote up a custom quirk for the now misbehaving devices here: #1749 and now they are all paired again without issues. I really don't know how/if the quirks are making a difference but it seems to do something.

I see you also removed the LevelControl cluster. Currently tracking a similar issue here: https://github.com/zigpy/zha-device-handlers/issues/1188#issuecomment-1371281949
Was the problem that the devices showed a brightness slider in HA, even though they only switch on/off?

Changing ZLL to ZH can making problems then its some fundamental different how the mesh is working but the device is still doing there thing so if its one ZLL router its still doing the router things "ala ZLL" but ZHA is thinking its one ZH router.


New option: hide slider tails

It could be optional to cut these off.
Screenshot from jupyter_compare_view.

These bits exist because the image has quite a large transparent border. The slider goes from the top of the image to the bottom.
Therefore, I think this should be handled on the Python side of Jupyter compare_view.

Thanks! It's actually caused by Matplotlib not filling the whole image canvas in imshow. I will update the notebook soon.


Remove ENABLE_VC_BUILD from vercel deployment guide

What kind of changes does this PR include?

Minor content fixes (broken links, typos, etc.)

Description
Removed the bullet point because the environment variable is not needed anymore. See https://github.com/withastro/astro/pull/4020

Looks great! Thanks for being on top of that, @mayank99!  🥳


fix: slider disabled state opacity issue

Fix

added opacity for the disabled state.

Slider Thumb is not looking similar to theme

Also need to add cursor: not-allowed in disabled state for Slider Track and Slider Thumb


Minimal feature set

[x] List prime numbers up to n
[x] Count prime numbers up to n
[x] List first n prime numbers
[x] Calculate nth prime number
[x] Loop over prime numbers without bound

I think these are the most important features and would suffice for most uses. http://primesieve.org/api/

I think these are the most important features and would suffice for most uses. http://primesieve.org/api/

You are right, these are the most important features. But as adding other functions (e.g. the k-tuplet counting functions) is very simple I will probably fork your project and add these myself.
A few suggestions:

I think we should name the API functions the same way they are named in the C/C++ library. E.g. for primesieve::count_primes() we should name the Python function primesieve.count_primes(). This will reduce the confusion of the users.

Currently you are using the primesieve C bindings. I know Cython also supports C++ and the std::vector class which is quite handy. Using the primesieve C bindings there are no exceptions whereas if we use the primesieve C++ library we have proper exceptions (Cython supports C++ exceptions as far as I remember). What is the reason you chose primesieve.h over primesieve.hpp in your wrapper? Do you see any advantage in using the primesieve C bindings instead of the primesieve C++ library?

Great! Go for it. Thanks, I agree both. I'm very impressed with Cython. Tutorial was in C, but makes sense to use C++.

Top features done. Changed to use C++. Corrected function names to match C++.


[DCOS-38519] fix flakiness in test_zzzrecovery.test_shutdown_host_teardown

Increasing the count of world pods to minimize risk of tasks on shut down host. Adding install/uninstall helper with options as well for the tests

Specifically, we saw a case where the 2 world tasks were placed on the same agents as the scheduler and package registry. By increasing the number of world tasks to 3, that should ensure that at least one of them is not colocated with the scheduler or package registry (because the world tasks are each placed on unique agents)


Set up first version of GitHub actions

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@e2929de). Click here to learn what that means.
The diff coverage is n/a.

@@           Coverage Diff            @@
##             master     #58   +/-   ##
========================================
  Coverage          ?   5.31%
  Complexity        ?      20
========================================
  Files             ?      26
  Lines             ?     979
  Branches          ?     135
========================================
  Hits              ?      52
  Misses            ?     915
  Partials          ?      12

Flag
Coverage Δ
Complexity Δ

unittests
5.31% <0.00%> (?)
0.00% <0.00%> (?%)

Flags with carried forward coverage won't be shown. Click here to find out more.

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e2929de...8bae092. Read the comment docs.


[outreachy] Registry: tooltips for category names and other labels that mey require a description

Outreachy task for @crocmons
Based on your user experience report, please provide the following suggested improvement via a PR:

Offer tooltips or short descriptions that explain what each category means, and what a user should expect from components labeled under them. For example, clarifying what a "Collector" does versus an "Application Integration" would help users understand the context better.

If you are unsure what a category means yourself provide a sample text in your PR and I can help making suggestions

@svrnm - keep in mind that there might be UX issues on mobile wrt tool tips.


ORCA ECP format and ORCA basis format official support

Hi BSE developers,
Could you please kindly add ORCA ECP format and ORCA basis format official support in BSE. ORCA basis format is as same as Gamess-US basis format but combined with a different ECP format, Here is the example ECP in ORCA format:
NewECP V
  N_core 10
  lmax f
  s 2
   1 14.4900000000<PHONE_NUMBER>000 2
   2  6.5240000000  19.8313750000 2
  p 2
   1 14.3000000000<PHONE_NUMBER>000 2
   2  6.0210000000  12.5703100000 2
  d 2
   1 17.4800000000 -19.2196570000 2
   2  5.7090000000  -0.6427750000 2
  f 1
   1  1.0000000000   0.0000000000 2
end

Thanks! This should be relatively straightforward, since I have already written the GAMESS US format.

I've written a tentative implementation of the ECP part. Unfortunately, it is not documented on the website (that I could find). Could you test the following block and see if it works?

Great! It is now in the library and should be available on the website in the next week or so (I will post here when it is there)

Hi, was it implemented for ORCA?
Run:
"$ bse convert-basis --in-fmt orca BS.orc --out-fmt gaussian BS.gbs"
Output:
I get the message:"Unknown file format to read 'orca'"
testing for "nwchem" works fine
Full Output:
[]$ bse convert-basis --in-fmt orca BS.orc --out-fmt gaussian BS.gbs
Traceback (most recent call last):
File "/home/akaushan/anaconda3/bin/bse", line 8, in
sys.exit(run_bse_cli())
File "/home/akaushan/anaconda3/lib/python3.7/site-packages/basis_set_exchange/cli/bse_cli.py", line 154, in run_bse_cli
output = bse_cli_handle_subcmd(args)
File "/home/akaushan/anaconda3/lib/python3.7/site-packages/basis_set_exchange/cli/bse_handlers.py", line 225, in bse_cli_handle_subcmd
return handler_mapargs.subcmd
File "/home/akaushan/anaconda3/lib/python3.7/site-packages/basis_set_exchange/cli/bse_handlers.py", line 193, in _bse_cli_convert_basis
convert.convert_formatted_basis_file(args.input_file, args.output_file, args.in_fmt, args.out_fmt)
File "/home/akaushan/anaconda3/lib/python3.7/site-packages/basis_set_exchange/convert.py", line 57, in convert_formatted_basis_file
as_component=False)
File "/home/akaushan/anaconda3/lib/python3.7/site-packages/basis_set_exchange/readers/read.py", line 135, in read_formatted_basis_file
raise RuntimeError("Unknown file format to read '{}'".format(basis_fmt))
RuntimeError: Unknown file format to read 'orca'

@Mircaz Looks like the orca (and GAMESS) readers haven't been implemented. I have created an issue for that: https://github.com/MolSSI-BSE/basis_set_exchange/issues/116

Thank you, bennybp!


Types of optional arguments not inferred correctly

🔎 Search Terms
"optional" "arguments" "inference" "generic" "narrowing" "parameters"
🕗 Version & Regression Information

This is the behavior in every version I tried, and I reviewed the FAQ for entries about optional parameters

(tested on latest minor version of v3, v4, and v5)
⏯ Playground Link
https://www.typescriptlang.org/play?target=99&jsx=0&ts=5.3.2#code/PTAECECcHsGsFMB2p4A8CGBbADgG3qAO4CWALgBagDG0iAJmcberqKQJ7bwDOAULwDMAroiqkmyTOwBiIsRIAUqAPwAuUIiGYARvEgBKdRy7QBoVClSkkdbqBF14A4onh1Qy0N1KQXAc1B1TR09UABvXlAo0GIzJVAAXiT7eicXN31wyOicmkRvUAAvRPNQEFAASVJQWERoQjtjeFNSpISUx2dXd3I9eAAaUG0hau9iXFZCdERSRuhQSHhSIUhkdA0tXUhsnKjygGFoR1ABaEgiXuQLYjs60aFsPGI3Hd3F5dXQACIAFU4CACCXwA3K8AL4oXDcAgRXbRA5HAinc6ES6lG5eB5PF5wqLvFZXUAAKlAACZgWUwABRDA4fCDdjQITUaYLJYE0DrBgCAR9GZsf6gXqLcG8MH8PIFRbcIS4UgARnU3l8iAC7SkslE4loCn0FJy5QqAHJ3GguGI2OQMbQCKR5roBVx3Og7Otlf5eJLqtLZaRSUFNqF1TI5NrEAoAKx6g1gH5Wuw2x08ahnRZiXDsfj8coABXQkHELAzRDOsH8liweHgEtoBWw+cLE3YAHVS+X2gpOuhfQA1FhCeBqDYhAyJAB8WSisVAnac3blfdwA8SyQcaW6mVh0Xxny+dytqq+2Qh8ChMNeO+QXd7-erUXF4t45QAEn0htAKJzFknnbdA+cAB8vB8fxBlRYgqEoDF0GqfAXWqGhIDTUhBmGao7k5OxlVoAIXRiBCmVwdxdE9WtqjQeUSnrAtiCLFs21VBR5X0Uj8nI1BSSohtaKbVtIDLRiWKzcooDgJAKzpatPVwF07BzAAeAAtCdYS9SAhDEM4Z0KdRFM3bJJWgfAADpcGgPwFEKFjQAffgmlAH4SjCTl1HlR8vVAaBsDDFgSnkgANEofjHWcBHnUhFwHId-MyBIVOyadQvCyKCDaDp1wySdt3ZT5XEIUAFMcoC1y6NwQpK9I6GsmzIWhLK8Ry5A8oK+SitAfyQuvBdb2q2ynzAcAP0oFoKB4Ah81tf5fxatqKu6MdjNAfrKkcOjBlGk5iEgApE24chCOIyanUwpbc1a0AgOCLYJ2mdwNuhPJ3ETJpf2WwqLvS0q6AW0AASheZ0CoKh4G89BtHwEtZUO5btCGoZ4HLF6TveoCOo+lHPsqsdWIKBUSi8nzcCYgAWFiPL9fHvIkFhdSAA
💻 Code
// Broken example with conditional types

function myFunction(x?: number): typeof x extends undefined ? string : number {
    if (x === undefined) {
        const z = x // It knows typeof x === undefined here, but still wants to return a number
        // Code for when x is not supplied
        return "Type A";
    } else {
        // Code for when x is supplied
        return x * 2; // Example, you can return a different type here
    }
}

const result1: string = myFunction();     // I'd expect this one to be typed as a string
const result2: number = myFunction(5);    // This one types correctly

// Partially working example

const partiallyWorking = (defaultValue?: number) => {
  if (defaultValue === undefined) {
    return "nothing"
  } else {
    return defaultValue
  }
}

// Here both are typed as number | string, which is at least correct, but not as strong as it could be
const ex1 = partiallyWorking(1)
const ex2 = partiallyWorking()

// Broken example

class P<Z> {
 constructor (z: Z) {
  console.log(z)
 }
}

type T = { a: 1}

const optional = <X = T>(defaultValue?: X) => {
  if (defaultValue === undefined) {
    return new P<T | undefined>(undefined)
  } else {
    return new P<T | X>(defaultValue)
  }
}

// Both of these are typed as P<T | undefined>.
// Ideally, the first one should be typed as
// P<T | number> and the second one typed as
// P<T | undefined>. Also acceptable would be
// both being typed as P<T | X> | P<T | undefined>
const t1 = optional(14)
const t2 = optional()

🙁 Actual behavior
Specifically in the third case, the return type was incorrectly narrowed to the wrong value.
🙂 Expected behavior
The function's return type should either be the union of the two possible return cases, or it should be narrowed based on the value of the optional argument.
Additional information about the issue
No response

Sounds like a duplicate of #33912.

There are a few small things at play here, but the big thing is mainly https://github.com/microsoft/TypeScript/issues/33912. Currently, TypeScript doesn't support annotating a function's return type with a conditional type, and relating control flow types to that return type.
The other small things to note here:

typeof is eager. That means that when you write function myFunction(x?: number): typeof x extends undefined ? string : number { ... }, TypeScript will eagerly resolve typeof x to whatever type x has at that position, which in this case is number | undefined. So effectively, this is the same as if you had written function myFunction(x?: number): number | undefined extends undefined ? string : number { ... }. The conditional type in turn resolves to its false branch, number. So, in the end, it's as if you had written function myFunction(x?: number): number { ... }.

The broken example of a function returning P<T | undefined> works that way because TypeScript thinks the type parameter Z doesn't affect assignability of P<Z>, so in fact, all of the following are assignable to each other: P<number>, P<string>, P<unknown>.
Therefore, when TypeScript infers a return type for optional, the return type is the union of the types of both return statements, i.e. P<T | undefined> | P<T | X>, but that in turn simplifies to just P<T | undefined>.
If you change the P class to one where TypeScript thinks the type parameter Z will influence assignability, that simplification goes away and the return type is inferred as P<T | undefined> | P<T | X>.
Example in playground

Thank you


Replaced rawgit.com urls with combinatronics.com urls.

Combinatronics.com is a drop in replacement for rawgit.com which is EOL.

Thanks, but it looks like the PR is empty? Where was rawgit.com being used?


votes does not support email

I have a forum where some users has registered their account using email.
When importing votes, the corresponding user is got by _imported_pid, but that kind of user was not imported. We should get the user by their email.

fixed by this pull request


Obvious auth should have whole request obj

Only have remote address is not enough.

Coverage remained the same at 92.455% when pulling 2733707cca0ec98cfbc926dc86aefda08814813f on haocenxu:patch-1 into 6677e1b293abbd9883d63633d765b85b942494b7 on vpulim:master.


"$100" is not rendered correctly

My markdown file is this:
---
title: Hello world!
publish_date: 2022-05-29
---

It costs about $100 to buy a new computer.

but it is rendered to:

It costs about

00 to buy a new computer.

Do you have any idea?
I also tested deno-gfm. input:
import { CSS, render } from<EMAIL_ADDRESS>const markdown = "It costs about $100 to buy a new computer.";
const body = render(markdown);
console.log(body)

output:

It costs about $100 to buy a new computer.

Already fixed in https://github.com/nanojsx/nano/issues/113, waiting on release of nanossr

Thanks for resolving this!


Adds simple d.ts file for TypeScript

This adds a simple TypeScript definition. There's probably a better way of doing this — namely, adding a typings.json file, pulling in the parent glob's d.ts, and then extending that — but this'll suffice for most purposes.

Hold up on merging this, I may have done this wrong...

oh my ... I totally screwed this up ... shouldn't have been merging from GH ...

Thanks for merging! 😄 🎉


Fix: Undefined upon Paste. (fireCallbacksForOps)

Bug:

Paste text content into editor in 'markdown' mode.
Uncaught TypeError: Cannot read property 'call' of undefined

fireCallbacksForOps	@	codemirror.js:3030
endOperation	@	codemirror.js:3040
runInOp	@	codemirror.js:3179
handlePaste	@	codemirror.js:1153
(anonymous function)	@	codemirror.js:1255

Fix:

Added a check for undefined.

Simply pasting something into http://codemirror.net/mode/markdown doesn't trigger this. Could you give me more detailed instructions for reproducing the problem?

Browser: Chrome 48.0.2564.116 (64-bit)
OS: Mac OS X El Capitan - 10.11.2
CodeMirror version: ^5.10.0
Using react-codemirror wrapper, it's possible the issue could be the way they're passing things down.
 It looks like someone, react-codemirror or your own code, might be registering undefined as an event handler, which is a bug in that code, not in CodeMirror, and should be fixed at that point.


Different Time Based Execution Checks for Production& Validation

When building a block we need to have stricter validation than when validating a block previously built or slower nodes might reject valid blocks.
Building a block includes:

push_transaction
produce_block

Validating a block occurs when we receive a block from someone else, in this case we assume that our machine is 4x slower and therefore give transactions 4x the runtime before we consider rejecting the block.

[ ] add command line argument to change runtime length checks on push_block
[ ] add command line argument to change default runtime length checks for push_transaction
[ ] add command line argument to set runtime length checks on produce_block

These settings will be helpful for producers to tune their filtering without risking unnecessary forks.

Putting in plumbing for configuring and passing different execution times.
Received block transaction exectuion time and transaction execution time will be configured in chain_plugin,  create block transaction execution time will be configured in producer_plugin.
Assuming initialize and replay will use the received block execution time.
Not currently giving control to set execution time for init (i.e. setcode), it is still set to the original values(since it wasn't mentioned here).
Should be pushing shortly.


Is it possible to train the ESMFold model based on the openfold ？

Thanks for releasing the ESMFold code for structure prediction！
However, I wonder what is the best way to train the ESMFold from the scratch. To be specific, I want to finetune the ESMFold model based on the ESM2 weights. I notice that the ESMFold code partly relies on openfold, and I want to know whether is it possible to train the ESMFold model based on the openfold.
Hope for your suggestions. Thanks in advance!

Hey! Our training code is not released. It's already trained on esm2-3B.


[NTR] fetal hepatobiliary progenitor cell

Cc @pnejad
Stemming from a request from a Human Cell Atlas curator (https://github.com/HumanCellAtlas/ontology/issues/72):
Preferred term label:
fetal hepatobiliary progenitor cell
Synonyms
exact synonym: fetal hepatobiliary hybrid progenitor cell
related or narrow synonym (as it’s an abbreviation): HHyP cell
Definition (free text, please give PubMed ID in format PMID:XXXXXX)
A progenitor cell with hepatic and biliary lineage potential, identified in mouse and human, and anatomically restricted to the ductal plate of fetal liver.
PMID:31350390
Parent cell type term (check the hierarchy here https://www.ebi.ac.uk/ols/ontologies/cl):
subclass of progenitor cell
What is the anatomical structure that the cell is a part of? Please check Uberon: https://www.ebi.ac.uk/ols/ontologies/uberon
part of UBERON:0004820 bile duct epithelium
part of UBERON:0000323 late embryo
Your nano-attribution (ORCID)
https://orcid.org/0000-0002-3163-0115
Any additional notes or concerns
subset tag: added_for_HCA
I’m unsure about axiomatising any of the markers listed in the paper. If we did add any, it should be as (‘has plasma membrane part' some [appropriate PRO ID]), but probably avoiding equivalences? @dosumis @addiehl please.

Note for self and FYI @pnejad:
I'll add 'fetal hepatobiliary progenitor cell' as soon as the CL editors resolve an issue with merging CL files.
I added the question about markers for discussion at the next CL meeting. Depending on resolution, I might add axioms to the new term, but I'll aim to create the new term first and add details later if I can't do both at once.

Note for self and FYI @pnejad:
I'll add 'fetal hepatobiliary progenitor cell' as soon as the CL editors resolve an issue with merging CL files.
I added the question about markers for discussion at the next CL meeting. Depending on resolution, I might add axioms to the new term, but I'll aim to create the new term first and add details later if I can't do both at once.

Are markers required to distinguish from other, similar cell types?
We probably don't have sufficient logic available for an equivalentClass definition if we need to define wrt developmental potential.

Are markers required to distinguish from other, similar cell types?
We probably don't have sufficient logic available for an equivalentClass definition if we need to define wrt developmental potential.

@dosumis

Are markers required to distinguish from other, similar cell types?

Not in this case, no. I noticed some mentions of (potentially not even unique) markers in the paper, hence my question. I'll add the term without markers - better anyway as they could be of limited use in this case. Thanks!

We probably don't have sufficient logic available for an equivalentClass definition if we need to define wrt developmental potential.

@dosumis

Are markers required to distinguish from other, similar cell types?

Not in this case, no. I noticed some mentions of (potentially not even unique) markers in the paper, hence my question. I'll add the term without markers - better anyway as they could be of limited use in this case. Thanks!

We probably don't have sufficient logic available for an equivalentClass definition if we need to define wrt developmental potential.

[ ] Paola to look for a better anatomy term

[ ] Paola to look for a better anatomy term

Note for self: do not close this ticket untill all items in https://github.com/obophenotype/cell-ontology/pull/964#issuecomment-791452632 have been addressed.

Hi @pnejad ,
The new term is CL_0009013 (fetal hepatobiliary progenitor cell).
It will be available at the next CL release (not sure when that'll be, but I'll push for a release soon).
It will then be automatically brought into HCAO via its subset tag.
Quick notes for self:

[ ] When Uberon is next released, replace CL_0009013 (fetal hepatobiliary progenitor cell) part of bile duct with part of ductal plate
[ ] Fix synonym HHyP cell (abbreviation/acronym)
[ ] Add taxon note as appropriate (found/present in Mammalia)

Note to self - waiting for Uberon release

Depends on #1255 .


Change ModuleGroupMap to ModuleSet

This will allow a person's module to have multiple groups (Labs, Tutorials, Lecture etc..) instead of only having 1.

Codecov Report

Merging #192 (e36aaa7) into master (81301eb) will decrease coverage by 0.02%.
The diff coverage is 35.29%.

@@             Coverage Diff              @@
##             master     #192      +/-   ##
============================================
- Coverage     51.64%   51.62%   -0.03%
- Complexity      605      613       +8
============================================
  Files           125      125
  Lines          2612     2623      +11
  Branches        336      342       +6
============================================
+ Hits           1349     1354       +5
- Misses         1181     1186       +5
- Partials         82       83       +1

Impacted Files
Coverage Δ

...java/seedu/edrecord/logic/commands/AddCommand.java
80.00% <0.00%> (ø)

...du/edrecord/logic/commands/DeleteGradeCommand.java
0.00% <0.00%> (ø)

...du/edrecord/logic/commands/DeleteGroupCommand.java
0.00% <0.00%> (ø)

...u/edrecord/logic/commands/DeleteModuleCommand.java
0.00% <0.00%> (ø)

...va/seedu/edrecord/logic/commands/GradeCommand.java
0.00% <0.00%> (ø)

...ava/seedu/edrecord/logic/commands/MoveCommand.java
0.00% <0.00%> (ø)

...a/seedu/edrecord/logic/commands/RemoveCommand.java
0.00% <0.00%> (ø)

src/main/java/seedu/edrecord/model/Model.java
100.00% <ø> (ø)

...eedu/edrecord/model/person/AssignmentGradeMap.java
31.81% <0.00%> (ø)

...java/seedu/edrecord/model/util/SampleDataUtil.java
7.69% <0.00%> (ø)

... and 12 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 81301eb...e36aaa7. Read the comment docs.


Traditional Chinese support

Thank you @rynecheow . Added for 4.0.7

I've a problem with readme merging into 4.0.7 branch.
Can you repost this PR directly in feature/4.0.7 branch? thx

Sure.
On Thu, Oct 20, 2016 at 8:05 PM, Daniele Margutti<EMAIL_ADDRESS>wrote:

I've a problem with readme merging into 4.0.7 branch.
Can you repost this PR directly in feature/4.0.7 branch? thx
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/malcommac/SwiftDate/pull/309#issuecomment-255087080,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ADCPcVKn-5hufL2THJDLi0NsptYvxvMZks5q11jrgaJpZM4KbJjb
.

Okay I'll close this; you can open a new PR on feature/4.0.7 and I'll merge it.
Thank you again.

Alright.


Utf8YamlEmitter.BeginScalar | Scalar tags are not written when the CurrentState is BlockMappingValue

The Issue
When emitting a simple YAML struct, I noticed my tags were written (prefixed) before the wrong values. When writing any value scalar the tag is not written, but the tag is written the next time a Sequence is written.
Looking into it further, I found out that the CurrentState when writing the scalar values was EmitState.BlockMappingValue, which skips writing the tag. See Utf8YamlEmitter.BeginScalar >
Is there a reason EmitState.BlockMappingValue does not write the current tag when EmitState.FlowMappingValue and EmitState.None do?
I am new to the codebase so I might be doing something wrong, but it seems odd.
Proposed Solution
Include EmitState.BlockMappingValue in the case with EmitState.FlowMappingValue and EmitState.None so the tag is written.
If this should not be done, I would appreciate some pointers on how this should be correctly handled.

[!NOTE]
If it's easier, I'd be happy to make a PR.

I found another instance of this issue in the EmitState.FlowSequenceEntry case.
Tags are not written before scalar values in flow sequences.
Proposed Solution
https://github.com/ArchLeaders/VYaml/commit/57585f3fc9d91768281f9bea71ad42849a131a9a

Tag emitter support is very limited and, as you point out, incomplete.
First, I only supported tagging to BlockMapping to support Union.
All cases should be supported, but it was put on the back burner.
If possible, could you please share some sample code that shows unintended behaviour?
This would make it easier to work with.

Here's a sample with each of the issues above.
There is also one additional issue where block sequence elements are written out of the sequence if a tag is set before the element.
Utf8YamlEmitter emitter = new(writer);

emitter.BeginMapping();
{
    emitter.WriteString("A1");
    emitter.Tag("!a1");
    emitter.WriteFloat(float.Pi); // !a1 is skipped and written later

    emitter.WriteString("NoTag1");
    emitter.BeginSequence(SequenceStyle.Flow); // !a1 is written here instead of after A1:
    {
        emitter.Tag("!a2"); // This tag is ignored unless the sequence style is Block
        emitter.WriteString("A2");
    }
    emitter.EndSequence();

    emitter.WriteString("NoTag2");
    emitter.BeginSequence(SequenceStyle.Block); // !a2 is not written here like it was for !a1 (because of the SequenceStyle)
    {
        emitter.Tag("!a3"); // This tag is written, but it breaks the sequence
        emitter.WriteString("A3"); // This is written outside of the sequence
    }
    emitter.EndSequence();
}
emitter.EndMapping();

Here is the real output:
A1: 3.1415927
NoTag1: !a1 [A2]
NoTag2:
- !a3
A3

This is the desired output:
A1: !a1 3.1415927
NoTag1: [!a2 A2]
NoTag2:
- !a3 A3

Please let me know if you need anything else.
Thanks for your amazing work on this library.

Thanks! I'm working on #98.

Merged #98 . Thanks a lot.


[BUG] node drop on o.o.cluster.routing.allocation.decider.MockDiskUsagesIT.testRerouteOccursOnDiskPassingHighWatermark

Describe the bug
Caught on PR #1902 . Another failure that can't be reproduced! (╯°□°)╯︵ ┻━┻
REPRODUCE WITH: ./gradlew ':server:internalClusterTest' --tests "org.opensearch.cluster.routing.allocation.decider.MockDiskUsagesIT.testRerouteOccursOnDiskPassingHighWatermark" -Dtests.seed=994DB46D3A71E388 -Dtests.security.manager=true -Dtests.jvm.argline="-XX:TieredStopAtLevel=1 -XX:ReservedCodeCacheSize=64m" -Dtests.locale=pt -Dtests.timezone=Asia/Tel_Aviv -Druntime.java=17

Looks like a node timeout issue at MockDiskUsagesIT.java#L166
1> [2022-01-14T19:03:26,620][WARN ][o.o.c.NodeConnectionsService] [node_t1] failed to connect to {node_t0}{C3fT4Fp9SjmjuepSij5_0Q}{IqnPkDZ7TZu52WOm_HWKOA}{<IP_ADDRESS>}{<IP_ADDRESS>:43583}{dimr}{shard_indexing_pressure_enabled=true} (tried [1] times)
  1> org.opensearch.transport.ConnectTransportException: [node_t0][<IP_ADDRESS>:43583] connect_exception

Gave up after one try... valiant effort （。々°）
To Reproduce
Another failure that can't be reproduced! (╯°□°)╯︵ ┻━┻
Expected behavior
No node drops...happy WIFi happy LIFi
Plugins
All core opensearch
Screenshots
Host/Environment (please complete the following information):

PR #1902

Additional context
Add any other context about the problem here.
relates #1715

Not able to reproduce even after 20K iterations.
Given the issue was very generic(node timeout) & not specific to the test, resolving this as one-off case.


Hope to support ollama

Wdym?

I think he means having the website connect to ollama

Ohh. Is it possible without installing anything?
Because if something would need to be installed to make this connection work, then why not just install one of many front ends that are available?

Yeah ollama would have to be installed and running. It's a good question you ask. Maybe they like this front end more than the others?


INVALID_NONCE

I was running Java API SimpleBench.java, which basically repeats calling one contract, and got INVALID_NONCE errors.
Seems like the pending state resets after every new best block. It keeps all accepted transaction in the pool but does not update the state accordingly, thus new transactions are being rejected because the state nonce and transaction nonce do not match.
Need confirmation from @JayT106
Assigning nonce = 4284
Assigning nonce = 4285
Assigning nonce = 4286
Assigning nonce = 4287
Assigning nonce = 4288
Assigning nonce = 4289
Assigning nonce = 4290
Assigning nonce = 4291
Assigning nonce = 4292
Assigning nonce = 4293
Assigning nonce = 4294
Assigning nonce = 4295
Assigning nonce = 4296
Assigning nonce = 4297
Assigning nonce = 4298
Assigning nonce = 4299
Assigning nonce = 4300
Assigning nonce = 4301
Assigning nonce = 4302
Assigning nonce = 4303
Assigning nonce = 4304
Assigning nonce = 4305
Assigning nonce = 4306
Assigning nonce = 4307
18-03-14 11:34:00.108 INFO  DB   [ConsHdr]: worldState.sync()
18-03-14 11:34:00.108 INFO  DB   [ConsHdr]: flush all databases
18-03-14 11:34:00.115 INFO  DB   [ConsHdr]: RepositoryImpl.flush took 5 ms
18-03-14 11:34:00.119 INFO  CONS [ConsHdr]: block sealed <num=151, hash=234808, diff=16, tx=46>
Assigning nonce = 4308
18-03-14 11:34:00.154 ERROR GEN  [TransactionExecThread]: Rejected due to: INVALID_NONCE, nonce = 4308
Assigning nonce = 4309
18-03-14 11:34:00.206 ERROR GEN  [TransactionExecThread]: Rejected due to: INVALID_NONCE, nonce = 4309
Assigning nonce = 4310
18-03-14 11:34:00.258 ERROR GEN  [TransactionExecThread]: Rejected due to: INVALID_NONCE, nonce = 4310
Assigning nonce = 4311
18-03-14 11:34:00.311 ERROR GEN  [TransactionExecThread]: Rejected due to: INVALID_NONCE, nonce = 4311
Assigning nonce = 4312
18-03-14 11:34:00.363 ERROR GEN  [TransactionExecThread]: Rejected due to: INVALID_NONCE, nonce = 4312
Assigning nonce = 4313

When I run batch transactions with JSON RPC (locally on a single node) the kernel is showing INVALID NONCE consistently:

Close issue.


Sampling explanation

I think it better to put sampling figure before goal statement.

Thanks! Yeah I think LaTeX shuffled the order to save space. I've forced the goal statements section to a new page now.


Rework Game Code With HTML Canvas

We should drop our current code and work with Canvas. It is way easier to display units and other sprites onscreen.

https://www.w3schools.com/graphics/canvas_intro.asp
https://www.w3schools.com/graphics/game_canvas.asp
https://www.w3schools.com/graphics/game_intro.asp

Created a new branch for this approach. Already removed many unnecessary files and simplify the overall markup.
Current TODO list

[X] Remove unnecessary files
[ ] Display game assets onscreen

I tested canvas over the last couple of days, and it isn't the proper solution. As far as I currently know, we should combine 'static' HTML pages and the canvas element. It should create the best player experience.

Watched the first episodes of this tutorial series and using HTML canvas might be a good way to create the game after all... 😄


WASM audio too much play calls for AudioContext

Bevy version
0.11.0
What you did
I compile my game to WASM.
When I try to play my games on mobile browser I noticed intemittent/broken sound.
On desktop browser everything "works" well.
Additional information
I investigated the issue.
First of all I created some patches audio_context_patch.js for original AudioContext
const audioContextList = [];

function constructorPatch(obj, key) {
    obj[key] = new Proxy(obj[key], {
        construct(target, args) {
            const audioContext = new target(...args);
            audioContextList.push(audioContext);
            return audioContext;
        },
        apply(target, thisArg, args) {
            console.log(`patch apply ${key}`);
            return Reflect.apply(target, thisArg, args);
        },
    });
}

constructorPatch(globalThis, 'AudioContext');
constructorPatch(AudioBufferSourceNode.prototype, 'start');

const userInputEventNames = [
    "mousedown",
    "pointerdown",
    "touchdown",
    "keydown",
];

function resumeAudioContexts() {
    console.log('resumeAudioContexts');
    let count = 0;
    audioContextList.forEach((context) => {
        if (context.state !== "running") {
            context.resume();
        } else {
            count++;
        }
    });
    if (count > 0 && count === audioContextList.length) {
        userInputEventNames.forEach((eventName) => {
            document.removeEventListener(eventName, resumeAudioContexts);
        });
    }
}

userInputEventNames.forEach((eventName) => {
    document.addEventListener(eventName, resumeAudioContexts);
});

Above code does 2 things:

Resume AudioContext when user "interacted" with the page some how
Make interceptor/patch for play() method for AudioBufferSourceNode

For example you can compile to WASM the simplest audio example:
//! This example illustrates how to load and play an audio file.

use bevy::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_systems(Startup, setup)
        .run();
}

fn setup(asset_server: Res<AssetServer>, mut commands: Commands) {
    commands.spawn(AudioBundle {
        source: asset_server.load("sounds/Windless Slopes.ogg"),
        ..default()
    });
}

compile to WASM is pretty straightforward:

Add WebAssembly support to your Rust installation

rustup target install wasm32-unknown-unknown

Install wasm-bindgen CLI

cargo install wasm-bindgen-cli

compile to WASM

wasm-bindgen --no-typescript --out-name wasm_bindgen_core --out-dir dist/ --target web target/wasm32-unknown-unknown/release/....your_file_name....wasm

run compiled example with following index.html:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport"
    content="width=device-width, height=device-height, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" />
  <title>Example</title>
</head>

<body>
  <script src="./audio_context_patch.js"></script>
  <script type="module" src="./wasm_bindgen_core.js"></script>
</body>

</html>

notice that audio_context_patch.js must be before regular wasm_bindgen_core.js to apply patches.
As a result in browser console I see following:

AudioBufferSourceNode.play() keeps calling each frame again and again!
This is too overwhelming for mobile browser, that is why I hear corrupted sound.
This is appropriate for desktop browser some-how, probably because of performant CPU.
Navigating through the call stack of WASM shows not much for me:
real (wasm_bindgen_core.js:199)
requestAnimationFrame (async)
(anonymous) (wasm_bindgen_core.js:399)
handleError (wasm_bindgen_core.js:227)
imports.wbg.__wbg_requestAnimationFrame_d082200514b6674d (wasm_bindgen_core.js:398)
$winit::platform_impl::platform::event_loop::runner::Shared<T>::apply_control_flow::hf7f85fd12e8e3b67 (wasm_bindgen_core_bg.wasm:0x4218f2)
$winit::platform_impl::platform::event_loop::runner::Shared<T>::run_until_cleared::h52fc249ce9680fb7 (wasm_bindgen_core_bg.wasm:0x4e3100)
$winit::platform_impl::platform::backend::timeout::AnimationFrameRequest::new::{{closure}}::hf77d92138eacb4da (wasm_bindgen_core_bg.wasm:0x783754)
$wasm_bindgen::convert::closures::invoke0_mut::hf7a6e5275be6b226 (wasm_bindgen_core_bg.wasm:0x7b5f70)
...
and the same loop again and again
...

I didn't investigate bevy 0.10.1 the same way however I heared the same corrupted sound in mobile browser - so I think this issue persisted a long time ago, nobody tested sound in mobile browser.

Thanks for the investigation!
Bevy uses the rodio crate for audio, which itself relies on the cpal crate
You can find the code used in WASM here: https://github.com/RustAudio/cpal/blob/master/src/host/webaudio/mod.rs
And maybe a related issue https://github.com/RustAudio/cpal/issues/780
Long term plan I think is to use an AudioWorklet, but as far as I know no one started work on that.

Further investigation showed that cpal creates AudioBufferSourceNode for small chunks of byte data.
So for each byte chunk
audioBufferSourceNode = audioContext.createBufferSource()
audioBufferSourceNode.buffer = ...
audioContext.connect(audioBufferSourceNode)
audioBufferSourceNode.play()
audioBufferSourceNode.onended = ... repeat above again
And the same again and again.
So I think this is affordable for desktop browser but too much for mobile browser

I believe someone attempted to fix this here:
https://github.com/RustAudio/cpal/pull/774
But the PR got stalled on another controversial change that it was making.
Since then, another non-controversial part of that PR was broken out into a separate PR by someone else and successfully merged.


Include relevant package docs in Python distribution

Currently things like the license, contributors doc, and README aren't included in the source distribution on PyPI. People installing from this location have to pull in the license manually, and OS packagers would need to do the same for the rest of the docs.

Thanks for the heads-up!  I'll get this corrected shortly.

From: Jon McKenzie<EMAIL_ADDRESS>Sent: Monday, November 7, 2016 2:06:57 PM
To: godaddy/Thespian
Subject: [godaddy/Thespian] Include relevant package docs in Python distribution (#25)
Currently things like the license, contributors doc, and README aren't included in the source distribution on PyPI. People installing from this location have to pull in the license manually, and OS packagers would need to do the same for the rest of the docs.

You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHubhttps://github.com/godaddy/Thespian/issues/25, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AFX0bhk6g1OXGGTty-2NhgZRumg4i1SFks5q75LxgaJpZM4Krt4d.

Thanks for the quick reply!


Go through M2 isActive results in IGV

To-Do:

Generate vcf of false negative sites missed by active region determination.
Generate list of all active regions.
Look at false negatives in IGV.
Look at active regions that don't contain a truth variant in IGV.
Get ideas.

Done -- see all the new issues.


LESQ-1088: Updated sign up page copy

Description
Music year: 1971
Figma: https://www.figma.com/design/fxWHjjNzvbbc0J38pM3Kti/Log-in?node-id=3330-8406&m=dev
Design:

🎨  I diverged from the design in a few places:

The copy colour is #222 or text-primary — i think the use of #000 in Figma was a bug
The "No pupils" banner has a border — this is consistent with the design kit and storybook components
The "No pupils" banner uses the "info" icon from the design kit and storybook — looks like the one in the design is from an obsolete design file?

⚠ We have limited control over the login box itself so this PR is only intended to update the heading and subheading copy of that component, everything else is out of scope

[x] change title to ‘Create a free account”
[x] change subheading to: ‘Sign up to Oak to continue’
[x] Add "No pupil accounts, sorry" banner
[x] Add copy under the acorn

How to test

Go to https://deploy-preview-2851--oak-web-application.netlify.thenational.academy/sign-up
You should see the new copy changes

Screenshots
How it used to look (delete if n/a):

How it should now look:

Checklist

[ ] Added or updated tests where appropriate
[ ] Manually tested across browsers / devices
[ ] Considered impact on accessibility
[ ] Design sign-off
[ ] Approved by product owner
[ ] Does this PR update a package with a breaking change

@Monika-Koziol i've updated the border and padding so things now match up with the design kit.

:tada: This PR is included in version 1.577.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Separate Sign and Verify to provide a minimal surface for the verification Library

Utilitary function should be separed from operational ones.

ecdsa separated from ecdsa_utils


File POST route now adding to status

Coverage increased (+0.08%) to 93.812% when pulling be82038d1eeddbd655a85bc8668fac98cb642322 on nassir-issue108 into be2fc5526cb2d8c7409ab76956fec613ba24cb99 on staging-branch.


[otbn] Remove defunct TODOs

Removed TODO about the separate reset values for imem/dmem scrambling key and nonce is now tracked in this issue: https://github.com/lowRISC/opentitan/issues/18267


Match tracers to concentrations when parsing infusate

Summary Change Description
When parsing infusate strings, the list of tracers must be the same length as the list of concentrations. Prior to this PR, the loading code would end with a TypeError: expected string or bytes-like object as it attempted to peform a regex match on a None value:
Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/home/lparsons/mambaforge/envs/tracebase/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/home/lparsons/mambaforge/envs/tracebase/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/lparsons/mambaforge/envs/tracebase/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/lparsons/mambaforge/envs/tracebase/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "/home/lparsons/Documents/projects/tracebase/DataRepo/management/commands/load_study.py", line 168, in handle
    call_command(
  File "/home/lparsons/mambaforge/envs/tracebase/lib/python3.8/site-packages/django/core/management/__init__.py", line 181, in call_command
    return command.execute(*args, **defaults)
  File "/home/lparsons/mambaforge/envs/tracebase/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "/home/lparsons/Documents/projects/tracebase/DataRepo/management/commands/load_animals_and_samples.py", line 137, in handle
    loader.load_sample_table(
  File "/home/lparsons/Documents/projects/tracebase/DataRepo/utils/sample_table_loader.py", line 214, in load_sample_table
    raise e
  File "/home/lparsons/Documents/projects/tracebase/DataRepo/utils/sample_table_loader.py", line 193, in load_sample_table
    self.load_data(data)
  File "/home/lparsons/Documents/projects/tracebase/DataRepo/utils/sample_table_loader.py", line 249, in load_data
    infusate_rec = self.get_or_create_infusate(rownum, row)
  File "/home/lparsons/Documents/projects/tracebase/DataRepo/utils/sample_table_loader.py", line 421, in get_or_create_infusate
    infusate_data_object = parse_infusate_name(infusate_str, tracer_concs)
  File "/home/lparsons/Documents/projects/tracebase/DataRepo/utils/infusate_name_parser.py", line 83, in parse_infusate_name
    "tracer": parse_tracer_string(tracer_string),
  File "/home/lparsons/Documents/projects/tracebase/DataRepo/utils/infusate_name_parser.py", line 104, in parse_tracer_string
    match = re.search(TRACER_ENCODING_PATTERN, tracer)
  File "/home/lparsons/mambaforge/envs/tracebase/lib/python3.8/re.py", line 201, in search
    return _compile(pattern, flags).search(string)
TypeError: expected string or bytes-like object

This PR now exists with a more informative exception:
	Tracers: ['a-ketoglutarate-[13C5]', 'arginine-[13C6,15N4]', 'aspartate-[13C4,15N1]', 'glycine-[13C2,15N1]', 'leucine-[13C6,15N1]']
	Concentration values: [100.0, 4.0, 4.5, 2.48, 14.0, 11.0]

Affected Issue Numbers
Code Review Notes
Checklist

[ ] Changes have been added to the Unreleased section in the changelog.md.
[x] All issue requirements satisfied (or no linked issues)
[x] Linting passes.
[x] Migrations created & committed (or no model changes)
Tests

[ ] Tests implemented (or no code changes)
[ ] All tests pass
[ ] All example load tests pass (remotely) (or their failures predated and are unrelated to this branch)

I'm confused by the failing tests atm. Seems unrelated to this small change.

Without having looked at the code, I'm fairly confident that this is related to the validation database.  If you rebase off of one of my later PRs, I bet that would fix it.  The infusate/tracer/tracer-label code wasn't handling the validation database updates correctly. It's oversights like that why I agreed to remove the validation database, as they are hard to identify.
I actually fixed validation database stuff I encountered before I got things working without it, just so tests would pass.

@hepcat72 Thanks for the info. I'm still a bit confused, as this was branched off the most recent main. Is that actually failing atm? I thought it was working according to the most recent test runs on main that I saw.

@hepcat72 Thanks for the info. I'm still a bit confused, as this was branched off the most recent main. Is that actually failing atm? I thought it was working according to the most recent test runs on main that I saw.

main is passing afaik.  But it still has the validation database, and it still has a bug that I'd found (and fixed in my PR series) in the infusate/tracer/label code related to what database the code in those models is operating on.  This is a new error you are raising, and my suspicion is that it's taking info from the validation database and checking against info in the default database, or vice versa - but that's just a hunch.  Let me look a little deeper.

Oh geez.  I was assuming it was a more complex error.  It's not.  Take this test for example:
    def test_malformed_tracer_parsing_with_null_isotopic_specification(self):
        """Test empty labels list"""
        name = "lysine-[]"
        with self.assertRaisesRegex(TracerParsingError, "cannot be parsed"):
            _ = parse_infusate_name(name)

It's expecting a TracerParsingError, which would be raised downstream of the error you're raising.  But it's not passing in any concentrations: parse_infusate_name(name), which the method sets a default for of empty list:
def parse_infusate_name(
    infusate_string: str, concentrations: List[int] = []
) -> InfusateData:

The other tests are similar.  If you just add concentrations to the calls to parse_infusate_name in those tests, they should work.

The point being that parse_infusate_name was written to work with or without concentrations supplied.  Since your new code makes concentrations effectively required, you should remove the default defined in the method definition.

...either that or handle the check upstream of parse_infusate_name.  Not sure if there exists code that would break if concentrations becomes a required input.

The point being that parse_infusate_name was written to work with or without concentrations supplied. Since your new code makes concentrations effectively required, you should remove the default defined in the method definition.

Yikes, I guess it's a more complex method than I assumed. Thanks for digging into it!
I decided to continue to allow the concentrations to be optional. I also added some info the docstring to (hopefully) make the usage a bit clearer. Sorry for the goof!

The point being that parse_infusate_name was written to work with or without concentrations supplied. Since your new code makes concentrations effectively required, you should remove the default defined in the method definition.

Yikes, I guess it's a more complex method than I assumed. Thanks for digging into it!
I decided to continue to allow the concentrations to be optional. I also added some info the docstring to (hopefully) make the usage a bit clearer. Sorry for the goof!

NBD.  I've been there.  But, I think that to not confuse an intentional call with unintentionally empty concentrations and a call where concentrations are left out, the default should be changed to None - and if it's not None, perform the check.
Besides, I since learned the hard way that parameters in method definitions are actually global variables, and their values can stick around.  It's driven me crazy during testing before until I figured it out and I now have a new rule of never setting a method parameter default to [] or {}.  Set it to None, then set the intended default inside the method.

I think that to not confuse an intentional call with unintentionally empty concentrations and a call where concentrations are left out, the default should be changed to None - and if it's not None, perform the check.

Thinking about it, I would argue that we should require concentrations in this method and do away with the defaults entirely.

Concentrations are ultimately required to store the Infusate: https://github.com/Princeton-LSI-ResearchComputing/tracebase/blob/f1ff09463f1dd46175a7cb699d5dc8589ade3ae9/DataRepo/models/infusate_tracer.py#L22-L27
The method is only called once outside of tests and concentrations are passed in: https://github.com/Princeton-LSI-ResearchComputing/tracebase/blob/f1ff09463f1dd46175a7cb699d5dc8589ade3ae9/DataRepo/utils/sample_table_loader.py#L388

If people agree, I'll update this PR to:

[ ] require concentrations
[ ] fix the tests
[ ] add a test for the new matching data check

I think that to not confuse an intentional call with unintentionally empty concentrations and a call where concentrations are left out, the default should be changed to None - and if it's not None, perform the check.

Thinking about it, I would argue that we should require concentrations in this method and do away with the defaults entirely.

Concentrations are ultimately required to store the Infusate: https://github.com/Princeton-LSI-ResearchComputing/tracebase/blob/f1ff09463f1dd46175a7cb699d5dc8589ade3ae9/DataRepo/models/infusate_tracer.py#L22-L27
The method is only called once outside of tests and concentrations are passed in: https://github.com/Princeton-LSI-ResearchComputing/tracebase/blob/f1ff09463f1dd46175a7cb699d5dc8589ade3ae9/DataRepo/utils/sample_table_loader.py#L388

If people agree, I'll update this PR to:

[ ]  require concentrations
[ ]  fix the tests
[ ]  add a test for the new matching data check

Yeah, I think that makes sense, though I haven't looked at all the calls to the parsing method. I can't think of a valid case where we wouldn't have concentrations.

However, I have a larger overall concern. I alluded to it earlier: method parameters are in effect, global/class variables. We should never set a mutable default value in the method definition

Excellent point @hepcat72! For people looking for another explanation (and some additional potential "gotchas"), see https://docs.python-guide.org/writing/gotchas/#mutable-default-arguments. I'll get this updated and ping all when it's ready.

But if you follow that though up the chain, the check should actually be done inside Infusate.clean(). THEN, the requirement could actually be written into the models. And in fact, we probably should have something there. EDIT: I said InfusateTracer.clean() before, but that's only 1 tracer vs one concentration.

Thinking about it more, I'm not actually sure where in the models you could put the requirement.  The InfusateTracer records are created in InfusateQuerySet.get_or_create_infusate(), which takes an InfusateData object, which creates the initial relationship.  So having the check in its construction makes sense, but there's got to be a model way of enforcing things.  The InfusateTracer model requires an infusate, tracer, and concentration, and that must be a unique combo (via the UniqueConstraint in that model), but we don't have a thing that raises an error if you have the same infusate and tracer linked twice with 2 different concentrations, e.g.:

infusate1, tracer1, concentration=2.0
infusate1, tracer1, concentration=3.0

I don't think there's anything to prevent that relationship from existing.  So I think we should have an additional UniqueConstraint, making the Meta.constraints look like this:
        constraints = [
            models.UniqueConstraint(
                fields=["infusate", "tracer", "concentration"],
                name="unique_infusate_concentration",
            )
            models.UniqueConstraint(
                fields=["infusate", "tracer"],
                name="unique_infusate_tracer",
            )
        ]

That would protect us from having too many concentrations.  And I think we're protected from too few concentrations because InfusateTracer.concentration is required (i.e. null=False).  However, it depends on how you loop when creating the records, so you would have to have a check outside of the model...

Actually, I don't think we even need concentration in the uniqueconstraint...

        constraints = [
            models.UniqueConstraint(
                fields=["infusate", "tracer"],
                name="unique_infusate_tracer",
            )
        ]

Actually, I don't think we even need concentration in the uniqueconstraint...

        constraints = [
            models.UniqueConstraint(
                fields=["infusate", "tracer"],
                name="unique_infusate_tracer",
            )
        ]

I agree with you. Just went through InfusateQuerySet.get_or_create_infusate()  code to have a better understanding of the issue.
It also made me think if we should re-evaluate the workflow for creating a new infusate .
current workflow:
create infusate, then loop through parsed infusate_tracer list to create records in Tracer and InfusateTracer.
I think it's better to get_or_create tracers (and tracerlabels) before creating an infusate. Currently, infusate.name was left out when creating an infusate record because tracer records may not be in database. If there is an issue with creating tracer/tracelabel, we should resolve it before creating infusate. It could simplify how we keep names consistent for infusates and tracers.
I prefer the following order for loading infusate data:
Compound  =>  Tracer  =>  TracerLabel  =>  Infusate => InfusateTracer

@hepcat72 @fkang-pu Revisiting this PR. After looking through the comments, I believe the one thing to add for this PR before merging would be to remove concentration from the UniqueConstraint in InfusateTracer to prevent duplicate tracers in the same infusate with different concentrations, like @hepcat72 specified. Do we agree that we should change that constraint in this PR, then merge?
       constraints = [
            models.UniqueConstraint(
                fields=["infusate", "tracer"],
                name="unique_infusate_tracer",
            )
        ]

@hepcat72 @fkang-pu Revisiting this PR. After looking through the comments, I believe the one thing to add for this PR before merging would be to remove concentration from the UniqueConstraint in InfusateTracer to prevent duplicate tracers in the same infusate with different concentrations, like @hepcat72 specified. Do we agree that we should change that constraint in this PR, then merge?
       constraints = [
            models.UniqueConstraint(
                fields=["infusate", "tracer"],
                name="unique_infusate_tracer",
            )
        ]

Sounds a good plan to me.

@hepcat72 @fkang-pu Revisiting this PR. After looking through the comments, I believe the one thing to add for this PR before merging would be to remove concentration from the UniqueConstraint in InfusateTracer to prevent duplicate tracers in the same infusate with different concentrations, like @hepcat72 specified. Do we agree that we should change that constraint in this PR, then merge?
       constraints = [
            models.UniqueConstraint(
                fields=["infusate", "tracer"],
                name="unique_infusate_tracer",
            )
        ]

That's definitely a good change to make.  But with the current changes on main (i.e. if you brought your branch up to date), this code will circumvent AggregatedErrors exception buffering and stop loading of a sample table on an offending row.  So I suggest catching and buffering that exception where it is called from sample_table_loader.  Just look at the other instances of calls to self.aggregated_errors_object.buffer_error when called inside an except block.
I also think it would be "nice to have" 2 things, if you feel so inclined:

Instead of doing this check in the parse code, perform the check and raise the error inside Infusate.clean().
Add the relevant data to the exception object (the concentrations list and the tracer_strings list). Doing it that way would allow classes higher up the stack to handle the exception differently, e.g. collecting all the data from similar exceptions and creating a combined exception, as I did for other exceptions.

That's definitely a good change to make. But with the current changes on main (i.e. if you brought your branch up to date), this code will circumvent AggregatedErrors exception buffering and stop loading of a sample table on an offending row. So I suggest catching and buffering that exception where it is called from sample_table_loader. Just look at the other instances of calls to self.aggregated_errors_object.buffer_error when called inside an except block.

The function parse_infusate_name already raises the same exception under some circumstances, this adds a new check to raise the same error. If I'm understanding correctly, you are saying som the sample_table_loader should be made aware of this exception explicitly so it can properly handle it. Can you help me understand raising this exception under this new circumstance means that we should add new checks upstream?

I also think it would be "nice to have" 2 things, if you feel so inclined:

Instead of doing this check in the parse code, perform the check and raise the error inside Infusate.clean().

That does make some sense, but seems a bit late. Also, the infusate_tracer allows empty or null concentrations, so I think this business rule (concentrations matching tracers) belongs at the parsing stage.

Add the relevant data to the exception object (the concentrations list and the tracer_strings list). Doing it that way would allow classes higher up the stack to handle the exception differently, e.g. collecting all the data from similar exceptions and creating a combined exception, as I did for other exceptions.

We can certainly do this, though I'm wary of having code in multiple places that has to be aware of such specifics (a special case of Infusate parsing error). There are tradeoffs to maintenance with this, but we can do it if it adds value.

That's definitely a good change to make. But with the current changes on main (i.e. if you brought your branch up to date), this code will circumvent AggregatedErrors exception buffering and stop loading of a sample table on an offending row. So I suggest catching and buffering that exception where it is called from sample_table_loader. Just look at the other instances of calls to self.aggregated_errors_object.buffer_error when called inside an except block.

The function parse_infusate_name already raises the same exception under some circumstances, this adds a new check to raise the same error.

You're right.  I didn't realize that.  It does currently stop loading if that error is raised, which I overlooked during the refactor.  The error is caught and buffered in the load_sample_table, but it is still preventing more errors from being caught on subsequent rows.  It should be caught and buffered so that the loop can continue.  That said, the tracers often repeat in the file, so I no longer think you should add the catch in this PR.  I'll create an issue and add it later.
But for the purposes of understanding my suggestion, I will address your questions related to this...

If I'm understanding correctly, you are saying som the sample_table_loader should be made aware of this exception explicitly so it can properly handle it.

I didn't say that.  I said that this exception should be caught so that it can be buffered (which doesn't require knowledge of the exception being raised) in order to not stop AggregatedErrors from collecting as many errors as it can and report them at the end of the script.  It should be catching and buffering every error, though there are cases where some errors are completely fatal and should stop processing and there are cases where some errors would trigger other errors.

Can you help me understand raising this exception under this new circumstance means that we should add new checks upstream?

This is a time-saving refactor.  It prevents users and curators from encountering a scenario like this:

Run the load/validate
It hits an error and stops after say 3 minutes
User/curator fixes the error and runs again
It hits a new error after say 4 minutes
...

Take a look at the except blocks I suggested, you'll see that it is catching any exception and buffering it.  There are some specific cases where it does use some specific knowledge of the error to prevent a cascade of meaningless errors, but conversely - that's not something that parse_infusate_name should know about either.  If such a scenario can't be handled in parse_infusate_name and it can't be handled in the caller, what design pattern can handle that?  The loading code is handling a lot of data.  It should know about the relationships of that data.  If one piece of data causes an error, the loading code should know what other data is dependent on that data so it can skip cascading errors.

I also think it would be "nice to have" 2 things, if you feel so inclined:

Instead of doing this check in the parse code, perform the check and raise the error inside Infusate.clean().

That does make some sense, but seems a bit late. Also, the infusate_tracer allows empty or null concentrations, so I think this business rule (concentrations matching tracers) belongs at the parsing stage.

Looking at the code a bit deeper, trying to create a record without a concentration or without a tracer should raise an error anyway, so the issue is just making sure no data is skipped (if the list lengths don't match).  I would argue that the parser shouldn't even be taking the list of concentrations.  That's outside the scope of "parsing".  I feel like, unless we add concentrations to the string that it's parsing, it should just be returning data derived from the string and the calling code should be adding the concentrations (either into the typeddict or just supplied to a custom get_or_create method, like we have).
The database code would definitely throw a validation error either way if a create is called with a null concentration or a null tracer, but making sense of that error without the context of the 2 lists can be confusing, so raising an error if the lengths don't match is useful, but thinking about it further, it's not something a clean method can do - I just don't think it's a "parsing error".

Add the relevant data to the exception object (the concentrations list and the tracer_strings list). Doing it that way would allow classes higher up the stack to handle the exception differently, e.g. collecting all the data from similar exceptions and creating a combined exception, as I did for other exceptions.

We can certainly do this, though I'm wary of having code in multiple places that has to be aware of such specifics (a special case of Infusate parsing error). There are tradeoffs to maintenance with this, but we can do it if it adds value.

Just to reiterate what I said above - I didn't propose writing-in knowledge of infusate parsing errors in upstream code.  If that was necessary, I'd agree with you that it would be a maintenance issue, but I think you misunderstood what I was saying.  In fact, thinking about this specific instance more... the calling code doesn't even need to know anything about the exception.  All it would need to know is that the string and concentration list it sent to parse_infusate_name causes an error.  If it sees the same scenario again, it could skip trying to load those rows and move on to prevent repeated errors.  However, it would need to have a general understanding that all other data in the row that is dependent on the infusate should not be attempted to be loaded.  E.g. It could try and load the treatment to catch any errors associated with that, but all other data on the row links to the infusate.