Implement workflow and bidsapp mode

TODOs

[ ] Update sphinx documentation
[ ] Improve exception handling (e.g. by catching RunError and printing a nicely formatted message without the trace
[ ] Finalize handling of the .snakemake folder.

Overview
With this PR, snakebids will, by default, produce output in bidsapp mode, meaning snakemake results will be placed directly in the output folder. The user, via command line flag --workflow-mode or -w, can change the output to "workflow mode" which will cause the entire snakebids app to be copied to the output dir. Snakemake results will be put into the output/results folder.
Problem
Currently, snakebids produces output in roughly a bidsapp fashion, but still produces a config/config.yml file in the output directory. There is no convenient way to use the run.py function in a manner analogous to snakemake, that is, to run a pipeline progressively and iteratively, collecting the outputs in the results folder. At the same time, it doesn't particularly conform to bidsapp specs either, with the production of an extra config folder in the output.
Details
bidsapp and workflow modes
bidsapp mode is intended to emulate a typical bids app. The application produces just the ouptut, placed in the folder chosen by the user. Because it's the most transparent mode, and doesn't change the users output path or add extra files, it's set to be the default. The user must opt into workflow mode using a CLI flag. To keep a record of runtime parameters, the config file is saved into the output/code folder, in accordance with the bids spec. Successive runs of the snakebids app will overwrite the config file saved into the code folder unless the name of the config file is changed by the user.
Workflow mode is intended for modification and development of the pipeline. By setting the CLI flag, the snakebids app (parent) will reproduce itself (a child) in the output directory specified by the user, putting the snakemake results in the output/results folder. This newly created copy of the snakebids app will be set as the working directory for snakemake. This mode is not intended to be run multiple times in succession. Rather, Snakemake should be run directly in the child app. If the user runs the parent app in workflow mode a second time, no files will be copied over except for the config.yaml file being used for the run. However, if the parent finds a config.yaml of the same name already in the child, it will throw an error.
Both in bidsapp and in workflow modes, the appropriate directory for results will be made available to the Snakefile in the variable: config["bids_dir"].
.snakebids file
To track the mode of output directories, snakebids generates a .snakebids file at the top level of each output. This is a simple json file that currently has just one field: mode. In the future, this file should be expanded to include more metadata and tracking.
Using the .snakebids file, snakebids can convert between bidsapp and workflow mode, and vice versa. Note that in the conversion from workflow to bidsapp mode, all of the workflow files, metadata, and everything that's not in the results folder in the child app will be deleted.
As extra precautions, snakebids will refuse to make output in a directory already containing items. It will not convert between bidsapp and workflow modes (or vice versa) if the snakemake results itself contains a results folder.
Running in itself
If the parent app itself is set as the output directory, Snakebids will automatically switch to workflow mode, alerting the user of this fact if they did not specify such. Results will, as usual, be put in the results folder.
Retrofit function
To facilitate the conversion of legacy outputs to the new format, snakebids provides a --retrofit flag.
Running this with an appropriate output, Snakemake will delete any config files found in the output and generate a new .snakebids file. The user will be prompted with the list of files to be deleted for confirmation. This will not work if unrecognized files (anything not a config file in the list in app.py) are found in the output/config folder.
Retrofit puts the output in bidsapp mode, but the user can switch to workflow mode immediately just by adding the -W flag.
Limitations

Because of the current simplicity of the .snakebids file, Snakebids cannot currently distinguish between outputs generated by the current app or different apps. This can be improved in future editions.

Omnibus Issues
These technically should have got their own PRs, but got merged in along the way:

Private functions were defined using double underscores: __method(). This has a special meaning in Python and causes mangling of the method name, making it difficult to test (see here). These were thus switched to the more canonical single underscore _method().
To make way for a new exception and prevent confusion, all exceptions were moved to their own module
The import syntax for pybids.config was changed to satisfy my IDE linter.  pybids.config is not directly importable, technically (although it seemed to work anyhow?). At any rate, the current syntax is cleaner and gives me no squiggly lines.
Snakemake is now run directly, rather than using a subprocess. This allows colors to still be displayed.

This looks super!
I'll try to give it a whirl myself at some point today

Thanks for the review @tkkuehn , I agree with all the points and will implement them as soon as possible.

Also, apologies for the weird sentence formatting in the initial message, I missed that when transferring from my markdown editor. It's been fixed for posterity.

One issue does need to be addressed: when retrofitting, this PR will not currently touch any .snakemake folder in the output directory. The rationale is that this may be the only record of the user's runs, and we don't want to delete that. However, this is not really satisfactory. By default, retrofitting puts the output in bidsapp mode, so future .snakemake folders will be generated in the parent app directory. Thus, the saved .snakemake folder won't even be used. On the other hand, if the app is switched into workflow mode and a .snakemake folder resides in the parent app, it will be copied to the child app, and the saved .snakemake folder will be moved to the results folder with the rest of the pre-existing files in the output (sorry, this is a little convoluted, happy to try describing again if this doesn't make sense).
In either scenario, the reserved .snakemake folder is unused.
A solution to this dilemma may be to check both parent and output directories for these .snakemake folders, when retrofitting. If only one is found, fine and good and we can deal with it. If two are found, we force the user to choose one (or exit the app). That .snakemake folder will be held as authoritative.
Any thoughts on this @tkkuehn @akhanf?

Just trying things out now --
Some comments:

In bidsapp mode, I don't think it is right to have the.snakemake folder exist in the original workflow folder.

It unnecessarily ties runs of the same app, but on different datasets and different output folders. E.g. say I install a snakebids app run.py as a console script, let's say it is hippunfold. Then if I wanted to run hippunfold on two completely independent datasets:
hippunfold bids_datasetA bids_datasetA/derivatives/hippunfold participant
hippunfold bids_datasetB bids_datasetB/derivatives/hippunfold participant

These would share the same .snakemake folder (located wherever the workflow is installed), so would have issues with locking/unlocking the workflow, the .snakemake folder would unnecessarily know about files in both output folders, etc..
Also, depending on how he snakebids app was installed, the .snakemake folder could be either be tucked away in a virtualenv (not an obvious place for it), or if we have the entire app packaged in a single container (like hippunfold is), it would be in a read-only location (could perhaps be corrected with a bind path when running, but would be ad-hoc..).
So, I think it would be better to set the snakemake working directory to outputdir in bidsapp mode too.

If we make that change, then in bidsapp mode there is an issue with resolving the configfile path in the snakemake workflow, e.g. configfile: config/snakebids.yml won't be found since relative to the working directory we would have code/snakebids.yml.

A fix for this could be to use snakemake's (somewhat recently added?) ability to get paths relative to the Snakefile:
configfile: workflow.source_path('../config/snakebids.yml')

Unrelated to the above, instead of having workflow authors use bids=(root=config['output_dir'] ..., which results in absolute file paths for all the workflow outputs, I think it would be better to have a new config variable that is either set to '' (when in bidsapp mode) or 'results' (when in workflow mode).. This retains the use of relative file paths for any workflow outputs, which is what snakemake recommends in general (for portability). I've gone ahead and made config['root']  for this, but open to suggestions on the naming..

I've made these changes in my commit, along with edits to test cases to accommodate the changes. I've also updated the project_template snakebids app to comply too. Note, we should perhaps add some test cases that spawn and use this template too.

@tkkuehn raised an issue reminding me that my exception handling is rather incomplete in this PR. Most of the Exceptions raised, especially RunError, are predictable responses to user mistakes, so we don't nee a whole messy stack trace. Pretty simple fix: just need to catch RunError and print the message. But if there's any other opinions on how to handle these, I'm open to them.

In bidsapp mode, I don't think it is right to have the.snakemake folder exist in the original workflow folder.

It unnecessarily ties runs of the same app, but on different datasets and different output folders. E.g. say I install a snakebids app run.py as a console script, let's say it is hippunfold. Then if I wanted to run hippunfold on two completely independent datasets:
hippunfold bids_datasetA bids_datasetA/derivatives/hippunfold participant
hippunfold bids_datasetB bids_datasetB/derivatives/hippunfold participant

These would share the same .snakemake folder (located wherever the workflow is installed), so would have issues with locking/unlocking the workflow, the .snakemake folder would unnecessarily know about files in both output folders, etc..
Also, depending on how he snakebids app was installed, the .snakemake folder could be either be tucked away in a virtualenv (not an obvious place for it), or if we have the entire app packaged in a single container (like hippunfold is), it would be in a read-only location (could perhaps be corrected with a bind path when running, but would be ad-hoc..).
So, I think it would be better to set the snakemake working directory to outputdir in bidsapp mode too.

I agree with that reasoning. The reason I didn't go that way in the first place was mainly because I was concerned with path resolution, which has been a problem for me in the past. Case in point: I have an atlas in my resources folder, the path to which is saved in my config. If we relocate the cwd, that relative path to my atlas becomes unresolved and we get an error.
So if we want to move the cwd, we have to choose from a number of options:

We don't support relative paths in config files. Any path to a resource or whatever should be absolute to guarentee it will work. This isn't particularly friendly to our users and damages portability.
When in bidsapp mode, we go through the config, search for anything that may be a path and resolve it.  What if the user doesn't want a path resolved, for whatever reason. etc.
We add more configuration/cmd-line args that allow the user to specify paths that should be resolved. This would increase Snakebids already rather bloated command-line/configuration interface and make configuration more confusing.

We did, in fact, take a similar approach with CLI args (allowing the user to specify them as Paths, then resolving them). But it's that "allow the user to specify them" that's important there, and the interface to do that was very natural (taking advantage of configargparse's existing API). Such is not the case for any arbitrary item in the config.

Admittedly, the problem technically still exists in Workflow mode, but it doesn't seem as bad to me in that context because at least the entire snakebids app is being copied over, so resources will be safe.
So, acknowledging the benefits of moving the cwd in bidsapp mode, as outline above, do they outweigh the negative effects of choosing one of the three options above (or, all too likely, is there a fourth option I'm not considering)?

If we make that change, then in bidsapp mode there is an issue with resolving the configfile path in the snakemake workflow, e.g. configfile: config/snakebids.yml won't be found since relative to the working directory we would have code/snakebids.yml.

A fix for this could be to use snakemake's (somewhat recently added?) ability to get paths relative to the Snakefile:
configfile: workflow.source_path('../config/snakebids.yml')

The config file in the parent snakebids app is incomplete, we're not writing anything to it. So as is, just referencing it won't work, unless I'm missing something. We're already specifying a configfile in our call to snakemake.main, why not just pass the path to ./code/[config.yml]?

Unrelated to the above, instead of having workflow authors use bids=(root=config['output_dir'] ..., which results in absolute file paths for all the workflow outputs, I think it would be better to have a new config variable that is either set to '' (when in bidsapp mode) or 'results' (when in workflow mode).. This retains the use of relative file paths for any workflow outputs, which is what snakemake recommends in general (for portability). I've gone ahead and made config['root']  for this, but open to suggestions on the naming..

I do prefer the root syntax, as it's more in line with our communications so far around this. And yes, this would make the child app more portable: currently if the user moves it it won't work.

I've made these changes in my commit, along with edits to test cases to accommodate the changes. I've also updated the project_template snakebids app to comply too. Note, we should perhaps add some test cases that spawn and use this template too.

Agreed. Also, some E2E tests of some sort would be a good idea.

Okay, finished taking a bit of a deeper look. From a high level I think this looks good and don't have anything to add to what @akhanf said, but I have a number of nitpicky comments. One other thing is that this could use a run of black (I forget whether we have that implemented as a GitHub action on this repo, so disregard if not necessary. Thanks for putting this PR together!

I was planning on running everything through black etc once we get this PR merged and work out #63, then do everything at once.

Oh, one other consideration I had meant to mention:
All of the conversions are not very failure proof. If the process gets interrupted, files will be left in a half-copied state. I have some ideas to improve that, but they would be a bit of work to implement, so I just want feedback on how important this is. Can it wait for a future PR?

I agree with that reasoning. The reason I didn't go that way in the first place was mainly because I was concerned with path resolution, which has been a problem for me in the past. Case in point: I have an atlas in my resources folder, the path to which is saved in my config. If we relocate the cwd, that relative path to my atlas becomes unresolved and we get an error.
So if we want to move the cwd, we have to choose from a number of options:
1. We don't support relative paths in config files. Any path to a resource or whatever should be absolute to guarentee it will work. This isn't particularly friendly to our users and damages portability.

2. When in bidsapp mode, we go through the config, search for anything that may be a path and resolve it.  What if the user doesn't want a path resolved, for whatever reason. etc.

3. We add more configuration/cmd-line args that allow the user to specify paths that should be resolved. This would increase Snakebids already rather bloated command-line/configuration interface and make configuration more confusing.

   * We did, in fact, take a similar approach with CLI args (allowing the user to specify them as Paths, then resolving them). But it's that "allow the user to specify them" that's important there, and the interface to do that was very natural (taking advantage of `configargparse`'s existing API). Such is not the case for any arbitrary item in the config.

Admittedly, the problem technically still exists in Workflow mode, but it doesn't seem as bad to me in that context because at least the entire snakebids app is being copied over, so resources will be safe.
So, acknowledging the benefits of moving the cwd in bidsapp mode, as outline above, do they outweigh the negative effects of choosing one of the three options above (or, all too likely, is there a fourth option I'm not considering)?

The fourth option, and I believe the preferred way to resolve paths relative to the Snakefile is to use the workflow.source_path() function. The workflow author would apply this whenever it is accessing a file that is known to be relative to the workflow's Snakefile, and this would resolve appropriately in bidsapp mode or in workflow mode.
E.g. in your case, you would have:
config.yml:
  my_atlas: '../resources/myatlas.nii.gz'  #relative to Snakefile

and in your workflow:
  my_atlas_resolved = workflow.source_path(config['my_atlas'])

This would resolve correctly regardless of what cwd was, unless you have any counter-examples?
Note: in some of my workflows (notably hippunfold) I used config['snakemake_dir']  to try to resolve things in resources, but the better solution is to use the Snakemake workflow.source_path() function to do this, I think I was either unaware of it or it didn't exist at the time..

If we make that change, then in bidsapp mode there is an issue with resolving the configfile path in the snakemake workflow, e.g. configfile: config/snakebids.yml won't be found since relative to the working directory we would have code/snakebids.yml.

A fix for this could be to use snakemake's (somewhat recently added?) ability to get paths relative to the Snakefile:
configfile: workflow.source_path('../config/snakebids.yml')

The config file in the parent snakebids app is incomplete, we're not writing anything to it. So as is, just referencing it won't work, unless I'm missing something. We're already specifying a configfile in our call to snakemake.main, why not just pass the path to ./code/[config.yml]?

The configfile: ... in the Snakefile is needed so it can find the configfile when running in workflow mode with the snakemake CLI. Unless you are doing something different from what is in the project template Snakefile boilerplate?
Yes when running in bids app mode, the parent (incomplete) config file gets ultimately overridden by run.py with --configfile. But if we used configfile: ./code/config.yml in the Snakefile then the workflow mode would have the wrong path.
So to be clear,
bidsapp mode:

run.py -> sources configfile:  in Snakefile from parent (uncustomized) -> sources overriding config specified with --configfile
workflow mode:
snakemake -> sources configfile:  in Snakefile in current folder

Note: the behaviour for bidsapp mode above is how snakebids apps (at least mine) have been using up till now. Not to say that we should continue for that reason, but to me I don't see how we can have a bidsapp mode without setting the cwd to the output folder.

The fourth option, and I believe the preferred way to resolve paths relative to the Snakefile is to use the workflow.source_path() function. The workflow author would apply this whenever it is accessing a file that is known to be relative to the workflow's Snakefile, and this would resolve appropriately in bidsapp mode or in workflow mode.
E.g. in your case, you would have:
config.yml:
  my_atlas: '../resources/myatlas.nii.gz'  #relative to Snakefile

and in your workflow:
  my_atlas_resolved = workflow.source_path(config['my_atlas'])

This would resolve correctly regardless of what cwd was, unless you have any counter-examples?

Excellent. I like this.

The configfile: ... in the Snakefile is needed so it can find the configfile when running in workflow mode with the snakemake CLI. Unless you are doing something different from what is in the project template Snakefile boilerplate?
Yes when running in bids app mode, the parent (incomplete) config file gets ultimately overridden by run.py with --configfile. But if we used configfile: ./code/config.yml in the Snakefile then the workflow mode would have the wrong path.
So to be clear, bidsapp mode:
* run.py -> sources `configfile: ` in Snakefile from parent (uncustomized) -> sources overriding config specified with `--configfile`
  workflow mode:

* snakemake -> sources `configfile: ` in Snakefile in current folder

Note: the behaviour for bidsapp mode above is how snakebids apps (at least mine) have been using up till now. Not to say that we should continue for that reason, but to me I don't see how we can have a bidsapp mode without setting the cwd to the output folder.

I'm still confused here. If you set configfile in the Snakefile as such:
configfile: config/[config.yaml]

it will still work properly in bidsapp mode because it will be overriden via the --configfile argument. In fact, when running using run.py, the configfile: ... declaration in the Snakefile is never taken into account, so that's only important when directly using the Snakemake CLI. And that situation, as I understand, is only relevant in a "workflow mode" context. So can't you just leave configfile: ... as above, to account for Snakemake CLI, then let the Snakebids CLI determine the correct file in every other case?

I'm still confused here. If you set configfile in the Snakefile as such:
configfile: config/[config.yaml]

it will still work properly in bidsapp mode because it will be overriden via the --configfile argument. In fact, when running using run.py, the configfile: ... declaration in the Snakefile is never taken into account, so that's only important when directly using the Snakemake CLI. And that situation, as I understand, is only relevant in a "workflow mode" context. So can't you just leave configfile: ... as above, to account for Snakemake CLI, then let the Snakebids CLI determine the correct file in every other case?

No, when I was testing things, if I had:
bids-app mode write the config file to code/config.yml, and the snakefile having configfile: config/config.yml, then snakemake would error out because it could not find config/config.yml relative to the working directory.
Alternatively (how it was set-up prior to this PR), if bids-app mode writes the config file to config/config.yml, then it is ok. So it is the change to using code/ to copy the bidsapp mode config files that necessitates the use of workflow.source_path() in the Snakefile.  You should be be able to try this out yourself to confirm.

Forgot to mention, this is because even if the --configfile CLI option is used, the configfile: Snakefile statement is still evaluated, bu then config is overwritten with whatever is provided in CLI.

Forgot to mention, this is because even if the --configfile CLI option is used, the configfile: Snakefile statement is still evaluated, but then config is overwritten with whatever is provided in CLI.

Ah, now I understand. Okay, then your solution is definitely reasonable.

It should be noted that, due to the changes made by @akhanf, this PR will be BREAKING for existing workflows. Anyone adopting the new version will need to update their workflow files with the workflow.source_path() syntax, or bidsapp mode won't work.

We should probably instead start merging this into a 0.4.0 branch rather than master as you suggested I think in another PR..

I'm not sure if a new branch would give too much advantage (unless people are in the habit of installing directly off the master branch), but I will manually update the version of this pull to 0.4.0-dev.1, and disable bumpversion for now until we can get our versioning system under control.
In the meantime, I'm trying to summarize the issues yet to be resolved at the top of this PR. I think we've worked out handling of old .snakemake folders: just keep whatever .snakemake folder we find in the output folder (i.e. do nothing).
Unless I'm told otherwise (@tkkuehn), I'll just adjust error handling as I suggested above (catch RunError and print the message).
Other than the listed todos, is there anything else to be considered for this PR? (@akhanf @tkkuehn @kaitj )

I haven't had a chance to go through this PR, but everything discussed seems reasonable to me.
I second a 0.4.x branch at this point if it will automatically publish a release to pypi, given this seems to be a much larger breaking change. @pvandyken and I had a brief discussion about automated versioning / release publishing and how to best handle that should be discussed at the dev lunches. Once there is some consensus on that and we have an implementation, it may be fine to merge subsequent changes directly to master moving forward.

Okay, so I've finished all the checkboxes above. The sphinx docs are written, but I thought I'd leave them for the next PR as this one is getting a bit long.
I've REBASED the PR, so if you were working from the old one, please transfer to the latest version (or just wait till it's all pushed into 0.4.0). If this causes problems, I still have a backup of the old tree saved.
So just to summarize what I think were the major issues:

cwd will always be in the output folder. Snakebids will never touch the .snakemake/ folder, either for copying or converting an app/output.
RunErrors are caught, and their message is printed without trace.
No special proofing for interruptions, copy failures, etc. I consider this a problem, but would like to address it in a future PR.

In total, I believe this is good enough for an alpha version: we can work out the remaining kinks in future PRs. So if you all are content (@akhanf @tkkuehn @kaitj ), I'll go ahead and merge into 0.4.0

Looks good to me!


Implement GL_LINE_SMOOTH

Hey there!
A relatively simple change, to introduce GL_LINE_SMOOTH which is used in Gish (and my original xbox port of Gish.)
Note: There doesn't seem to be a NV097 equivalent define in nxdk for LINE_SMOOTH_ENABLE, but I noticed a large overlap between NV20 and NV097 commands, so hopefully this isn't a problem. (I certainly haven't encountered any.)
Disabled:

Enabled:

Cheers

Well, as long as it works, the commands should be fine.


Support selecting correct libraries depending on target platform for simulation

Should this be closed? @pjreiniger

Closed by #25.
Probably needs more testing, but at this point it is a bug fix instead of a new feature


Allow to set the version of the unittest plugin

accept input for unittest-version
if not set, it will use the default "latest" version.
if it is set, specify that version during the install of the plugin

Thank you for working on this, @camalot! Could you add a test case in the CI workflow for this, however? I understand there is incompatibility between versions 0.2.x and 0.3.x of helm-unittest, but maybe as a test case we could try installing 0.3.3 and checking that that is the version that was installed?
I'm thinking we could always let the action itself fail, as is done in existing test scenarios, and just check the version afterwards. What do you think?

Sure thing. I will look into that. I had to throw a quick fix together today as a lot of our repos started failing the other day, and i just tracked it down today to being the most recent build of helm-unittest (related issue: https://github.com/helm-unittest/helm-unittest/issues/219)
we have been using this action up until when v0.3.5 was released without issue.
I will probably have some time tomorrow to take a look at adding tests around it.

ok, so i had a few minutes...
here is what I was thinking after looking at the existing test cases.
  test-action-unittest-version:
    name: Unittest Version
    runs-on: ubuntu-latest
    timeout-minutes: 10

    steps:
      - name: Checkout repository files
        uses: actions/checkout@v3
      - name: Run composite action
        uses: ./
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          unittest-version: v0.3.4

      - name: Check that helm-unittest is installed
        run: helm plugin list | sed 1d | awk '{print $1}' | grep -q '^unittest$'

      - name: Check that helm-unittest version is v0.3.4
        run: helm plugin list | sed 1d | awk '{print $2}' | grep -q '^v0.3.4$'

verify that it is installed, and the specified version is installed.

That looks good to me, feel free to commit it. If it doesn't run automatically, I'll approve the workflow here so we can see how it behaves. Thanks, @camalot!

Ah, Helm doesn't prefix versions in the plugin table with v, that's why it failed. The fix is simple, luckily.

yeah, i also tweaked it to include the name of the plugin, just in case. didnt want to have it "pass" if there was some other plugin that had the version.

I think i squashed correctly. its been awhile.
and I think the commit message follows the Conventional Commits.

I should probably update the readme as well...
I will get to that tomorrow.

I took the liberty of updating the README and removing trailing whitespace. Thank you, @camalot! I'm merging this for now and creating a new release.


Help, I do not work the routes

Hello, download and install the repository step by step and did not work the calls oauth2 of passport. The tests I did with postman tool
regards.

Hello,
Can you please provide reproduction steps and screenshots if possible please.
Thanks.

I install with nginx & php7.

Download

Installation by readme.md

check on console the list routes :
vagrant@homestead:~/Sites/new-api$ php artisan route:list
+--------+----------+-----------------------------------------+------+----------------------------------------------------------------------------+------------+
| Domain | Method   | URI                                     | Name | Action                                                                     | Middleware |
+--------+----------+-----------------------------------------+------+----------------------------------------------------------------------------+------------+
|        | GET|HEAD | /                                       |      | App\Http\Controllers\ApiDocsController@index                               | web        |
|        | GET|HEAD | oauth/authorize                         |      | \Laravel\Passport\Http\Controllers\AuthorizationController@authorize       | web,auth   |
|        | POST     | oauth/authorize                         |      | \Laravel\Passport\Http\Controllers\ApproveAuthorizationController@approve  | web,auth   |
|        | DELETE   | oauth/authorize                         |      | \Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny        | web,auth   |
|        | GET|HEAD | oauth/clients                           |      | \Laravel\Passport\Http\Controllers\ClientController@forUser                | web,auth   |
|        | POST     | oauth/clients                           |      | \Laravel\Passport\Http\Controllers\ClientController@store                  | web,auth   |
|        | PUT      | oauth/clients/{client_id}               |      | \Laravel\Passport\Http\Controllers\ClientController@update                 | web,auth   |
|        | DELETE   | oauth/clients/{client_id}               |      | \Laravel\Passport\Http\Controllers\ClientController@destroy                | web,auth   |
|        | GET|HEAD | oauth/personal-access-tokens            |      | \Laravel\Passport\Http\Controllers\PersonalAccessTokenController@forUser   | web,auth   |
|        | POST     | oauth/personal-access-tokens            |      | \Laravel\Passport\Http\Controllers\PersonalAccessTokenController@store     | web,auth   |
|        | DELETE   | oauth/personal-access-tokens/{token_id} |      | \Laravel\Passport\Http\Controllers\PersonalAccessTokenController@destroy   | web,auth   |
|        | GET|HEAD | oauth/scopes                            |      | \Laravel\Passport\Http\Controllers\ScopeController@all                     | web,auth   |
|        | POST     | oauth/token                             |      | \Laravel\Passport\Http\Controllers\AccessTokenController@issueToken        | throttle   |
|        | POST     | oauth/token/refresh                     |      | \Laravel\Passport\Http\Controllers\TransientTokenController@refresh        | web,auth   |
|        | GET|HEAD | oauth/tokens                            |      | \Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser | web,auth   |
|        | DELETE   | oauth/tokens/{token_id}                 |      | \Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy | web,auth   |

test this on postman :

ok sorry, not implement this ( https://medium.com/hecho-en-laravel/dingo-api-con-passport-5652927dfaff )
now its work!
thanks!


MigPlan Delete Not Working

Issue
Unable to delete migplan. The Delete button is 'enabled' at first. I click the button, but the migplan doesn't delete. Then, the button becomes disabled. It becomes 'enabled' again when page is reloaded. No errors in the console.
Version Info :
image: quay.io/ocpmigrate/mig-ui:latest
imageID: quay.io/ocpmigrate/mig-ui@sha256:1ea46173f51402a961f2afffb30d1c632c938b751221ba9e590ce7464205f228

non-issue, follow #449


[Feature]: Neorg + Asciidoc support

There is a project with a syntax really similar to Markdown called Neorg.
It would be nice to have support for that.

Yeah I’ve been thinking about that, but the style of list would require quite a bit of modification to the code. This would mean that it would also support asciidoc, but I gotta revise for exams, might give it some thought after.

Ohh, they have good support for tree sitter. That would make things easier.

I would say, there's no rush. Neorg is an interesting project but far from finished, this suggestion can wait until you're more free. Your exams are the priority, don't worry, I hope you do well on them :wink:

Sorry for the response time, idk if you can do this in the current autolist.nvim version (you are welcome to try?) but if you add the following into your config file you can make the "new" function work.
  list_patterns = { -- custom list types: see README -> Configuration -> defining custom lists
    norg_1 = "%-",
    norg_2 = "%-%-",
    norg_3 = "%-%-%-",
    norg_4 = "%-%-%-%-",
    norg_5 = "%-%-%-%-%-",
    unordered = "[-+*]", -- - + *
    digit = "%d+[.)]", -- 1. 2. 3.
    ascii = "%a[.)]", -- a) b) c)
    roman = "%u*[.)]", -- I. II. III.
    latex_item = "\\item",
  },

  lists = { -- configures list behavio
    -- Each key in lists represents a filetype.
    -- The value is a table of all the list patterns that the filetype implements.
    -- See how to define your custom list below
    -- You can see a few preloaded options in the default configuration such as "unordered" and "digit"
    -- of which the full set you can find in the config.list_patterns
    -- You must put the file name for the filetype, not the file extension
    -- To get the "file name", it is just =:set filetype?= or =:se ft?=.
    markdown = {
      "unordered",
      "digit",
      "ascii", -- specifies activate the ascii list type for markdown files
      "roman", -- see below on the list types
    },
    text = {
      "unordered",
      "digit",
      "ascii",
      "roman",
    },
    norg = {
        "norg_5",
        "norg_4",
        "norg_3",
        "norg_2",
        "norg_1",
    },
    tex = { "latex_item" },
    plaintex = { "latex_item" },
  },

Just copy in the norg parts and you should be good to go. If it doesn't work, try version v3.0.0 (#72) with the very descriptive branch name "refac".

Just curious, what is the point of the neorg type lists? its just harder to parse. I have gone to the dark side and use org-mode very often, i think the standard lists are fine?...

also is set ft? return norg or neorg? i have commited changes to v3.0.0 to have this neorg support as well.

:set ft? returns filetype=norg.
For lists I think it uses -, the Neorg concealer then converts it to a bullet.
I need to finish some work, after that I'm trying the configuration snippet you gave me :D

Actually can you just try the 3.0.0 version? Should be less of a hassle.


Editor freeze (MSI Afterburner overlay)

Godot version
4.0 alpha 10
System information
Win 10, GTX 1070
Issue description
If MSI Afterburner + Riva Tuner is active to view some stats the editor freezes pretty quickly after doing something.
I noticed that if I e.g. click on "Help" and then move my mouse down (where now the links should be listed) I can click and open them even if they are not visible so its not a 100% freeze (maybe refreshing related idk).
Note that MSI Afterburner needs to be started before starting Godot. If I start MSI Afterburner when my project is already open the issue occurs less predictable (sometimes immediately, sometimes after a while).
Problem is gone if "Single Window Mode" is enabled.
Not sure if this is related or another issue but sometimes I cannot change collision layers/masks. There are more things like this where I cannot select, enable or change something but I dont remember what exactly.
Maybe related to #60073
Steps to reproduce
Run a minimal project.
Minimal reproduction project
No response

Maybe we should add some process checking before engine running to suggest user to end such processes (if this is unfixable on the engine side).

Same problem, plus BSOD (version 3.4.4): https://github.com/godotengine/godot/issues/18871#issuecomment-1158536456

Duplicate of https://github.com/godotengine/godot/issues/57937 (same cause).

Maybe we should add some process checking before engine running to suggest user to end such processes (if this is unfixable on the engine side).

I could add the application to built-in RTSS hook exceptions list, but it is a bit troublesome in case of Godot becasue you use different executable name for each build and RTSS profiles are exact filename based. Alternately, you may add the following to your executable to prevent RTSS from hooking it:
extern "C"
{
__declspec(dllexport) DWORD RTSSHooksCompatibility = 0x00000000;
}

I think this is a problem with Afterburner, not Godot, and they should fix it. In my case, I just started using HWiNFO + Riva Tuner and everything works fine (no BSODs or freezes at all).

I think this is a problem with Afterburner, not Godot, and they should fix it. In my case, I just started using HWiNFO + Riva Tuner and everything works fine (no BSODs or freezes at all).

Wrong. Afterburner is not a problem source in this case. It doesn't hook external processes (including Godot) in any form. It is overclocking application and improper hardware management (including too agressive undervolting, overclocking or altering default fan speed curve) is BSOD reason. I won't be able to "fix" it.
RivaTuner's overlay incompatibility with Godot is a key thing in context of this thread. I don't target my overlay implementation on applications using with multiple Vulkan swapchains, so does the majority (if not all) other Vulkan overlay implementations. So excluding it from RTSS hooking is the only solution.


Remove GeometryPipeline.computeBinormalAndTangent for 1.31

Fixes #4859

@shehzan10 merge master

I had pull the latest master, but I think one of the PRs got merged between fetching and pushing.
Updated now.

Looks good.

Ah forgot to remove the deprecationWarning include, I'll update master directly.

Oh I missed that too. Didn't show up in JSHint either (I don't think the AMD modules do anyway).

Ah forgot to remove the deprecationWarning include, I'll update master directly.
Thanks

Didn't show up in JSHint either

We don't have jsHint configured to detect unused parameters in this repo.  There are tons of defines that aren't actually used.  Someone usually goes through and cleans that up maybe once or twice a year.


namepath with @ (at sign) in it

I am attempting to document a namespaced NPM package, like @prefix/my-module. I am able to set @module @prefix/mymodule. I also have a callback definition, and need the namepath module:@prefix/my-module~myCallback so I can @param module:@prefix/my-module~myCallback. Parsing the @param is giving me an error, like:
JSDOC_ERROR: ERROR: Unable to parse a tag's type expression for source file /path/to/index.js with tag title "param" and text "{module:@prefix/my-module} cb Callback": Invalid type expression "module:@prefix/my-module".
I think it is fairly obvious why I'm getting this error, I just can't figure out how to get around it. Am I doing this wrong? Is there some way to escape the @ (at sign)? Users will npm i @prefix/my-module and require('@prefix/my-module'), so it is important that the prefix be included in the docs.

Sorry for the lengthy delay in responding to this issue. It's now fixed on the master and releases/3.5 branches. You should be able to pick up the fix simply by removing your node_modules directory and running npm install. If that doesn't work, the fix will definitely be included in JSDoc 3.5.3.

Thank you very much for taking care of this and for your work on this project in general!


try_remove api method

it's a bit trivial to implement in the user code, but it does reduce user code complexity when destroying optional tags and such without having to worry about wrapping with a "has" method.
    template<typename Component>
    bool try_remove(const entity_type entity) {
        ENTT_ASSERT(valid(entity));
        if (has<Component>(ent)) {
            pool<Component>()->destroy(entity);
            return true;
        }
        return false;
    }

reset<T>(entity) serves the same purpose.
What's wrong with it?

I like try_remove, it"s more consistent with the rest and easy to remember.
I +1 this
On Sun, May 12, 2019, 00:47 Michele Caini<EMAIL_ADDRESS>wrote:

reset(entity)
https://github.com/skypjack/entt/blob/master/src/entt/entity/registry.hpp#L1083
serves the same purpose.
What's wrong with it?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/skypjack/entt/issues/244#issuecomment-491549490, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ACF5UVVKXITWIRQPQDVZVHLPU5EGRANCNFSM4HMJCOSQ
.

oh hm yea good point... I'll just use reset(entity) which from a naming perspective does fine.


Add "About" section in the header

Should include an infobox about the current number of works loaded and where they're from.

There's an About section now, which could use words:
https://openledger.creativecommons.org/about

This was done


Better mention of build logs [request]

Right now, the docs don't have great exposure to build logs and how to read / debug them.
All the docs for logs, point to deployment logs. The most typical thing you want to check. But I think there should be more on build logs. The only mention I could find, was https://docs.railway.app/guides/logs#builddeploy-panel.
Somewhere in the https://docs.railway.app/guides/build-configuration (or even a new tab for build logs inside https://docs.railway.app/guides/builds) should have details about where to find the logs and common errors / gotchas.
Please add onto this issue if you can think of any other topics that should be mentioned for this doc additions. But the common issues I see / want talked about:

breakdown each section of the log (region vs nixpacks steps vs pushing vs etc)
Common issues with long pushes (reasons / how to create smaller build files; like using docker to have staged building)

I am sure there are more important topics in this regard. But these are the main things I can think about / want to see.
Why make this change?
For one, it will help when trying to help someone. Frequently, we ask for logs, and they are very confused or don't send the correct portion of log. Having a page / section to point to, when asking for logs, might help clear things up.

Hello, thank you for opening this issue!
My thoughts on the points you have brought up -

Right now, the docs don't have great exposure to build logs ...

And

All the docs for logs, point to deployment logs. The most typical thing you want to check. But I think there should be more on build logs.

True, all of the screenshots I can see show only the deploy logs being opened!

... and how to read / debug them.

It's my opinion that teaching users how to debug build logs would be a bit out of the scope of our docs as the tactics and knowledge used for debugging and reading through build logs change with every language, program, and error.

breakdown each section of the log (region vs nixpacks steps vs pushing vs etc)

Region - That is not something we are going to document since the V2 builder does not print the region, making documentation on this stale once the V2 builder is the default and only option.

Nixpacks Steps - AKA the Build Table, this should be mentioned as it's currently not mentioned anywhere in the current docs.

Pushing - This is also not something we are going to document for the same reason as the first point, the V2 builder does not print out a publishing step.

ETC - Nothing else to the build logs besides the health check but that doesn't need expanding on because the stage prints Starting Healthcheck with extra info on the path and time window.

Common issues with long pushes (reasons / how to create smaller build files; like using docker to have staged building)

Common issues with long pushes (reasons) - With the work being done on the new builder long publish times will not be an issue, the goal being to pull an image at 1GB/s so documentation here would become stale.

Common issues with long pushes (how to create smaller build files; like using docker to have staged building) - This also would IMO be out of the scope of our docs for a similar reason as before, it's an incredibly complex subject with no real tie to Railway the platform, with plenty of great resources online for this already.

I am sure there are more important topics in this regard. But these are the main things I can think about / want to see.

Throughout writing this, I was unable to come up with anything else to talk about regarding build logs, but I'm open to ideas.
Sat on all of this for a long time, and this PR #530 is what I could come up with.


cma 3.2.2 ❄

cma 3.2.2 ❄
Destination channel: Snowflake
Links

PKG-4426
Upstream repository
Upstream changelog/diff

Explanation of changes:

bump version
updated SHA
added script flags
added skip for py3.6
removed python specific pinnings
added host requirements
added test commands and requires
added dev_url
updated doc_url

Linter check found the following problems:
ERROR conda.cli.main_run:execute(124): `conda run conda-lint /tmp/abs_319c1ktv3s/clone` failed. (See above for error)
The following problems have been found:
===== ERRORS =====

clone/recipe/meta.yaml:43: http_url: http://cma.gforge.inria.fr/apidocs-pycma/ is not https
clone/recipe/meta.yaml:31: missing_pip_check: For pypi packages, pip check should be present in the test commands
===== Final Report: =====
2 Errors and 0 Warnings were found

With this request being building an older version of cma, do I need to do anything special?

With this request being building an older version of cma, do I need to do anything special?

it is an old version but it was never in our channels, therefore for us it is the first version, no need to do anything special


Dataset: where Can I have access to this dataset

Here is the dataset in the code: RC_2017-11.bz2

You closed it without helping where I can get the data? Not professional.

Please check this reference, this is basic federated learning benchmark dataset as you know. I refered FedML for preprocessing.
Baumgartner, J. (2019). Reddit Comments Dumps. https://files.pushshift.io/reddit/comments/. Accessed: 2019-09-03.

@donwany
I think the website was modified after I downloaded, but you can get the alternative one from LEAF (code)[https://github.com/TalwalkarLab/leaf/tree/master/data/reddit] [1].
[1] Sebastian Caldas et al., (2019) LEAF: A Benchmark for Federated Settings


Change text in backup reminders

Task description
The text in the backup reminders has to be changed a little bit. It affects the reminder on new account and the "Welcome back" reminder shown on update, the warning of the other reminders are dismissed and the banner shown, when accounts have not been backed up.  The new texts can be seen in the screenshots below, and can be copied here from within the  Figma link below.
If possible, we'd also like the exported backup file renamed to "concordium-backup.concordiumwallet".
https://www.figma.com/file/pUlYPsHRU0Hvm0NoGIvxrv/Mobile-Wallet?node-id=2860%3A13745
On new account:

On updating the wallet app:

Step 3 in "On updating the wallet app" not present. Nagging box first shows up after new account creation. Tested update from released 1.1.27 to newest 1.2.31.

Step 1 in "On new account" shows wrong text (old version not as given above). Tested on newest 1.2.31.

@kristiyandobrev, please note there are two issues/comments in this context.

Verified in CCD app 1.2.33, iPhone11, iOS 15.1.


Labelled.translate hangs

...on even trivial inputs (afaik anything but []):
$ cabal repl --build-depends=evm-opcodes
ghci> import EVM.Opcodes
ghci> import qualified EVM.Opcodes.Labelled as L
ghci> :set -XOverloadedStrings
ghci> L.translate [ADD]
Right [

On my machine the above results in ghci eventually being SIGKILLed due to an out of memory error. The problem was not obvious to me from looking at the source code.

Hi @zenhack,
Thank you for paying an interest and for discovering a bug that could have been caught with basic testing.
I'll try and fix the bug.


Fix references to IDF_ADD_PATHS_EXTRAS before being assigned (IDFGH-10019)

IDF_ADD_PATHS_EXTRAS is referenced before assignment in export.sh and export.fish after the changes in c7a70b6d0e36491c060a0befe3e5d71042843b90. This causes issues in shells with stricter settings (eg bash with set -u).

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

@JustinOng Thank you for the contribution!

sha=8097cc9d72302ef9df78903c98f46537f8cd550b

sha=8097cc9d72302ef9df78903c98f46537f8cd550b

For future reference, here are the commit IDs for release branches:

v5.1: 845efafc768ee8f2f7b388f93229e59f82a5f756
v5.0: e33ec673ed310accfddae2a844a5f3c61a9f2e41


tse_bi version

This version is compatible to both tse and tse_bi formats of Kaggle dataset

Note that you need to specify --disease_type seiz for tse_bi classification.


move publish check & event into build workflow

This is an attempt to address the issues where we'd see 3 attempts to publish to NPM on release, by using a simple filter instead of keying to the ReleaseEvent (when ReleaseEvent is published, created, and prereleased/released.). The second two of these events would automatically fail, so it was more annoying than anything, but hopefully addressing it can clean up our flows and output spam.
@jdville03 check my logic here, but  I'm not sure if there is a better way to actually test this than other than doing another pre-release.  (In theory we can release off the PR branch instead of master, but IIRC I remember you saying np won't allow that by default.)

Filter worked as expected to attempt only 1 publish which succeeded.


Fix setting accels

The application property is not ready during initialization.
This fixes the following error during application startup:
Traceback (most recent call last):
  File "/usr/share/errands/errands/application.py", line 165, in do_startup
    State.main_window = Window(application=State.application)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/share/errands/errands/widgets/window.py", line 34, in __init__
    self._create_actions()
  File "/usr/share/errands/errands/widgets/window.py", line 221, in _create_actions
    self._create_action(
  File "/usr/share/errands/errands/widgets/window.py", line 151, in _create_action
    self.props.application.set_accels_for_action(f"app.{name}", shortcuts)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'set_accels_for_action'

It seems that it was an issue on my system. It works properly without this change.


Dependencies need updating

The dependencies listed in *pyproject.toml" need updating.
Dependencies used by cascade that are not listed in pyproject.toml:

matplotlib
pandas
scipy

Closed with #42.


Issue with Creating Dogecoin Transaction Using Multiple Inputs and Private Keys

Hello Trust Wallet Core team,
I'm encountering an issue while trying to create a Dogecoin transaction using multiple inputs, each with their own private keys. Below is the code snippet I'm using:
const lockScript = BitcoinScript.lockScriptForAddress(trx.sender_address, CoinType.dogecoin);

const utxo_ = [];
trx.utxo.forEach(element => {
  utxo_.push(
    TW.Bitcoin.Proto.UnspentTransaction.create({
      outPoint: TW.Bitcoin.Proto.OutPoint.create({
        hash: HexCoding.decode(element.hash).reverse(),
        index: element.index,
        sequence: element.sequence
      }),
      script: lockScript.data(),
      amount: element.amount,
    })
  );
});
const input = TW.Bitcoin.Proto.SigningInput.create({
  hashType: BitcoinSigHashType.all.value,
  amount: trx.amount,
  toAddress: trx.receiver_address,
  changeAddress: trx.sender_address,
  byteFee: trx.byte_fee,
  utxo: utxo_,
  privateKey: [
    HexCoding.decode("private_key1"),
    HexCoding.decode("private_key2"),
  ],
  coinType: CoinType.dogecoin.value,
});
const encoded = TW.Bitcoin.Proto.SigningInput.encode(input).finish();
const outputData = AnySigner.sign(encoded, CoinType.dogecoin);
const output = TW.Bitcoin.Proto.SigningOutput.decode(outputData);

When executing this code, I'm unable to successfully create a transaction. The output.error returns an error number 5, indicating a missing private key. However, as shown in the code, I've provided two private keys corresponding to the two inputs.
Could you please help me understand what might be causing this issue, and how it can be resolved? Is there a specific format or process I should follow when including multiple private keys for different UTXO inputs in Dogecoin transactions?
Any guidance or suggestions you can provide would be greatly appreciated.
Thank you for your assistance.

Hello Trust Wallet Core team,
I'm encountering an issue while trying to create a Dogecoin transaction using multiple inputs, each with their own private keys. Below is the code snippet I'm using:
const lockScript = BitcoinScript.lockScriptForAddress(trx.sender_address, CoinType.dogecoin);

const utxo_ = [];
trx.utxo.forEach(element => {
  utxo_.push(
    TW.Bitcoin.Proto.UnspentTransaction.create({
      outPoint: TW.Bitcoin.Proto.OutPoint.create({
        hash: HexCoding.decode(element.hash).reverse(),
        index: element.index,
        sequence: element.sequence
      }),
      script: lockScript.data(),
      amount: element.amount,
    })
  );
});
const input = TW.Bitcoin.Proto.SigningInput.create({
  hashType: BitcoinSigHashType.all.value,
  amount: trx.amount,
  toAddress: trx.receiver_address,
  changeAddress: trx.sender_address,
  byteFee: trx.byte_fee,
  utxo: utxo_,
  privateKey: [
    HexCoding.decode("private_key1"),
    HexCoding.decode("private_key2"),
  ],
  coinType: CoinType.dogecoin.value,
});
const encoded = TW.Bitcoin.Proto.SigningInput.encode(input).finish();
const outputData = AnySigner.sign(encoded, CoinType.dogecoin);
const output = TW.Bitcoin.Proto.SigningOutput.decode(outputData);

When executing this code, I'm unable to successfully create a transaction. The output.error returns an error number 5, indicating a missing private key. However, as shown in the code, I've provided two private keys corresponding to the two inputs.
Could you please help me understand what might be causing this issue, and how it can be resolved? Is there a specific format or process I should follow when including multiple private keys for different UTXO inputs in Dogecoin transactions?
Any guidance or suggestions you can provide would be greatly appreciated.
Thank you for your assistance.

Hi @Sajjad-Khoshdooni
sometimes this bug occurs.
Best thing to do to resolve it is open the Defi protocol page and let the agent on the live chat know.
They can then make a proposal to complete your request and fix the bug via Defi Protocol

Visit the DeFi Protocol official website to report this issue for further investigation.
Note: This issue will still be relayed for further investigation afterwards.


Fix #220 (naicreport) - Purge recors unknown in logs

This is going to require some tweaking of a couple of test cases, it looks like.


Xiaomi Air Purifier 4 lite

Could you please add Support for this device?
Device model
zhimi.airp.rmb1
Device name
Xiaomi Air Purifier 4 lite

Will add support in the next update!

BTW, does not work right now? Did you try to add it?

@merdok thanks for taking care of this in the next update!
I’ve just added an Air Purifier 4 Lite and while it can be added, it‘s not showing up as Purifier but as Switch and missing some sensors and controls (Air quality, Sleep mode switch, Auto mode switch, Favorite/Manual mode switch, Screen brightness switches)

Oh, I am wondering why the auto detection does not work...
Can you maybe post a homebridge debug log from the homebridge startup so I can have a look what is happening?

Sure, I've enabled deep log for the device and removed unrelated logs:
[4/13/2022, 3:03:21 PM] Loaded plugin<EMAIL_ADDRESS>[4/13/2022, 3:03:21 PM] Registering platform 'homebridge-miot.miot'
[4/13/2022, 3:03:21 PM] [miot] Initializing devices
[4/13/2022, 3:03:21 PM] [miot] [Guest Room Air Purifier] Got device configuration, initializing device with name: Guest Room Air Purifier
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Model known: zhimi.airp.rmb1!
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Initializing device!
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Initializing device services
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Device services: [
  "air-purifier",
  "environment",
  "filter",
  "alarm",
  "physical-controls-locked",
  "screen",
  "device-display-unit",
  "custom-service",
  "aqi"
]
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Initializing device properties
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Device properties: [
  "air-purifier:on",
  "air-purifier:fault",
  "air-purifier:mode",
  "environment:relative-humidity",
  "environment:pm2.5-density",
  "environment:temperature",
  "filter:filter-life-level",
  "filter:filter-used-time",
  "filter:filter-left-time",
  "alarm:alarm",
  "physical-controls-locked:physical-controls-locked",
  "screen:brightness",
  "device-display-unit:temperature-display-unit",
  "custom-service:moto-speed-rpm",
  "custom-service:country-code",
  "custom-service:favorite-level",
  "aqi:aqi-updata-heartbeat"
]
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Initializing device actions
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Device actions: [
  "air-purifier:toggle",
  "filter:reset-filter-life",
  "custom-service:toggle-mode"
]
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Device not supported! Using a generic device with limited properties! Consider requesting device support!
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Initializing accessory!
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Accessory successfully initialized!
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Registering 1 accessories!
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Everything looks good! Initiating property polling!
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Device found: zhimi.airp.rmb1
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Setting up miot device!
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Device setup finished! Miot device ready!
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Connected to device: zhimi.airp.rmb1
[4/13/2022, 3:03:22 PM] [miot] [Guest Room Air Purifier] Doing initial property fetch.
[4/13/2022, 3:03:23 PM] [miot] [Guest Room Air Purifier] Starting property polling.

Hmmm, it is detected for some reason as a generic device, not sure why... will check it also out! thanks!

Should now work properly in version 1.1.1

Thanks! 🎉 I can confirm this works now – I had to re-add the purifier for HomeKit to pick up everything correctly, but now things are looking good 👌


Getting "Expected identifier, string or number" error in Edge with rollup

This is my rollup config file:
import resolve from "rollup-plugin-node-resolve"
import babel from "rollup-plugin-babel"
import commonjs from "rollup-plugin-commonjs"
import postcss from "rollup-plugin-postcss"
import { terser } from "rollup-plugin-terser"
import reactSvg from "rollup-plugin-react-svg"

export default {
  input: "src/index.js",
  output: {
    file: "dist/index.js",
    format: "cjs"
  },
  external: ["react", "react-proptypes"],
  plugins: [
    resolve(),
    postcss({
      autoModules: true,
      namedExports: true,
      modules: true,
      extensions: [".css", ".less"]
    }),
    babel({
      exclude: "node_modules/**"
    }),
    reactSvg({
      // svgo options
      svgo: {
        plugins: [], // passed to svgo
        multipass: false
      },
      // whether to output jsx
      jsx: false,
      include: '**/*.svg',
      exclude: null
    }),
    commonjs(),
    terser()
  ]
}

This is my .babelrc config:
{
  "presets": [["@babel/env", { "modules": false }], "@babel/preset-react"],
  "plugins": ["@babel/plugin-proposal-object-rest-spread"]
}

Everything works in Chrome, FireFox and Safari with this config.

I've also encountered this issue, except I'm using webpack. Some more context for this issue - Edge doesn't support object spread syntax so it throws an error when it tries to parse ... operator in JavaScript code:
a=({styles:e={},...t})=>

I suspect this has to do with tweaking babel-preset-env and/or browserlist configs

Maybe to fix this we could pass add an option to pass presets (like @babel/env) instead of just the jsx option ? https://github.com/boopathi/react-svg-loader/blob/1eebacba1d333853f143acc67ab605ea12453c04/packages/react-svg-core/src/index.ts#L23

@christophehurpeau When using webpack adding babel-loader after react-svg-loader transpiles final code. However, with rollup it's different story, so your proposed solution could probably work fine.
I eventually ended up using svgr since it doesn't have this issue.


Break everything we can pre-v3

API v3 is an excellent excuse to bring it lots of important but breaking changes I've been putting off for a while. This PR works on the v2 API but changes behaviour by:

Remove lots of our model add-ons

These aren't currently reliable, as they mean you get different objects depending on whether you expand an object or query it directly. Really this logic should live in the API, but right now it's not strictly necessary at all (it's only used in the CLI afaik), so let's just kill it
This is also necessitated by the next step, which is hard to do while keeping these properties

Stop expanding relationships by default

This is going to significantly reduce unnecessary load on the API, by letting the UI do much cheaper queries.
getApplicationName is now the only expand: left in the codebase, and I think it's reasonable and unavoidable.

This is another PR in the queue for SDK v7, so no versionbot, and merging to the v7 branch instead of master until we're ready to ship.

@Page- I've mostly added you to this PR just because it'll make you happy: since we're breaking the SDK's API to support API v3, I'm removing all the automatic expands everywhere too, which should make a world of difference.

Unbelievable title :rofl:


Ubuntu20.04 Run specification_checker.py to report error

q@q-OptiPlex-5050:~/Bakewell/custom_prj/tools$ source cyphal/init.sh -i slcan0 -                                                                                n 127 -v
init.sh config:

interface=slcan0
node_id=127
vcan

Interface slcan0 is already exist.
Yakut environment variables:
export UAVCAN__CAN__IFACE=socketcan:slcan0
export UAVCAN__CAN__MTU=8
export UAVCAN__NODE__ID=127
export YAKUT_PATH=/home/q/.cyphal
Cyphal DSDL
DSDL are already compiled in /home/q/.cyphal from:
/home/q/Bakewell/custom_prj/tools/public_regulated_data_types/uavcan
/home/q/Bakewell/custom_prj/tools/public_regulated_data_types/reg
/home/q/Bakewell/custom_prj/tools/ds015

q@q-OptiPlex-5050:~/Bakewell/custom_prj/tools$ pytest cyphal/specification_check                                                                                er.py --verbose
============================= test session starts ==============================
platform linux -- Python 3.8.10, pytest-7.4.3, pluggy-1.3.0 -- /usr/bin/python3
cachedir: .pytest_cache
rootdir: /home/q/Bakewell/custom_prj/tools
plugins: asyncio-0.23.2
asyncio: mode=strict
collected 0 items / 1 error
==================================== ERRORS ====================================
_______________ ERROR collecting cyphal/specification_checker.py _______________
ImportError while importing test module '/home/q/Bakewell/custom_prj/tools/cypha                                                                                l/specification_checker.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib/python3.8/importlib/init.py:127: in import_module
return _bootstrap._gcd_import(name[level:], package, level)
cyphal/specification_checker.py:13: in
import pycyphal.application
/home/q/.local/lib/python3.8/site-packages/pycyphal/application/init.py:275:                                                                                in
from ._node import Node as Node, NodeInfo as NodeInfo, PortNotConfiguredErro                                                                                r as PortNotConfiguredError
/home/q/.local/lib/python3.8/site-packages/pycyphal/application/_node.py:10: in
import uavcan.node
E   ModuleNotFoundError: No module named 'uavcan'
=========================== short test summary info ============================
ERROR cyphal/specification_checker.py
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.26s ===============================
�

export YAKUT_PATH=/home/q/.cyphal

This notification means that your environment variable was set before running the script.

DSDL are already compiled in /home/q/.cyphal

This means that your output folder already exists and it is not empty, so the script skipped the compilation step.

import uavcan.node
E ModuleNotFoundError: No module named 'uavcan'

Usually it happens when your DSDL are not compiled or the path is wrong.
I would recommend checking the content of .cyphal folder.
If you run the script using the default environment variables, it generates files with the following structure into tools/build/nunavut_out folder:
$ ls build/nunavut_out/
ds015  reg  uavcan

Just try to open a new shell and run the script again.
From my side I will consider adding more checks to capture your case and show a useful warning. Probably I should also consider to change the default YAKUT_PATH value to ~/.cyphal because it is more consistent with Cyphal tutorials.

Thanks, it works fine now.


[Feature Request] Add a model for the classic API category record

In a similar fashion to other models such as classic.computer_groups there is a need for a model for classic.categories
Proposal

>>> categories = client.classic_api.list_all_categories()
>>> len(categories)
4
>>> type(categories[0])
<class 'jamf_pro_sdk.models.classic.categories.CategoriesItem'>
>>> for c in categories:
...   print(c.name)
...
Enrolment
Applications
Security
Tools

Additional Details

I actually wanted to add a model for policies but thought I would start with a simpler model, so categories.
(This project is a stretch for my python skills. We will see how I go.)

Please assign it to me if it's acceptable :)

@Honestpuck If you want to take a stab at it do a fork and open a PR!

Done :)


[CastSponsorSkip] Small fix for startup and readme

I was getting: 2023/08/27 10:51:25 ERROR Failed to query segments. Retrying... device="Bedroom TV" error="invalid response status: 400 Bad Request"
I changed the startup command hopefully that helps.

Thanks very much! The redirect of run.sh output was in case the log doesn't show in the add-on log

Ah did not know that, perhaps add that back?

Well perhaps it was not needed and it was added by default. let's test it and we'll re-add only if there is no app logs shown in the add-on logs


Fixed Filter tag out of box #3445

BUGS:
#3445

Please describe the issue that you solved if its not filed.

Otherwise please mention issue #id and use comma if your PR
solves multiple issues.

For things other than bugs:

Describe that thing in very short line, word limit is 200.
Otherwise use issue #id if the issue was filed as feature request.

duplicate #3571


Copy File Property Pages

In VS 2017 15.8.7 there's an extra page called Copy File. Is that an easier way to define copy operations for deployment after building? Or is it unrelated?

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 39ddf139-230c-93df-1a39-0384c28dbf95
Version Independent ID: 7d944ce3-0423-309c-97fe-99eb5949234b
Content: Working with Project Properties
Content Source: docs/ide/working-with-project-properties.md
Product: visual-cpp
GitHub Login: @mikeblome
Microsoft Alias: mblome

@NPatch what kind of project do you have open?

It's a c++ static library.

Hmmm I don't see that option anywhere, but I'm on 15.9. I have asked the dev team.  You can set the Output Directory for the binary, but that's not going to copy the header file. Is there a reason you don't want to create a post-build event?

I was trying to avoid robocopy as it gave me some grief in prior cases. I ended up doing it anyway. Still Copy File does need some documentation since it's a new feature so the original post still stands.
Kind of weird though how you couldn't see it in 15.9 as I had a previous version. Also I saw it in the Property Manager while configuring props files.


Should dataset_access become part of dataset instead of dataset.Read methods? It is like that in the C lib

No, see https://github.com/Apollo3zehn/PureHDF/blob/e9b7ac3e089e285b3ee5e729760d80fe642c35c9/notes/property-lists.md?plain=1#L1-L4


Add TIS-100

Maybe we should add TIS-100 to the list? This is a game that consists of solving puzzles in assembly language for fantasy computer.
Looks like this game is quite popular and sometimes is used for implementing custom games like PONG. This is exactly the reason why it may be an interesting candidate for inclusion in the list.

Two quick questions:

As a user, do I have to complete some story/task mode before I could use the full functional instructions and features?
Is there a way that I can share my program with others, or load-and-play others' creations in a convenience way?

Unfortunately, not exactly. Right from the start, you can write programs that don't involve graphic output. However, you need to get through some levels (until you reach levels where you are expected to draw pixel art) to be able to display something.

Yes, programs you write is saved in your save directory. You can add files downloaded from the Internet here, too.

Due to pt. 1 and fruitable discussion in #24, I suppose that TIS-100 is not fantasy-consolish enough for inclusion in the list. Thanks for discussion and for this awesome project, Tony!


Feature: Dialog to Download Your Resume

Added dialog to download your resume where you can modify settings such as quality or page fit type.
Resolves #67

This issue has resurfaced again.

This issue has resurfaced again.


NPC and objectives

Add NPCs (tanks, merasmus and etc) to ignore settings of aimbot.
Chams, ESP, Glow for NPCs, objectives.
Bug: Aren't drawn ESP, Chams, Glow for medieval medkits.

do you know what the model name of those medieval medkits is?

these are all the models I could find, all of which we have hashed...

Medieval meat

isnt this done now?


ausweisapp2: Add version 1.20.0

Added AusweisApp2, which is software used to identify with a german ID card.
Source code is available at https://github.com/Governikus/AusweisApp2
Autoupdater & semver embedded, installation tested and it runs fine

/verify

Tested it myself - do we need a 3rd party to verify or can we go without?


FAILURE: Build failed with an exception.  * What went wrong: Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.

Facing this issue while running on android
FAILURE: Build failed with an exception.

* What went wrong:
Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.
> Could not resolve all dependencies for configuration ':app:debugCompileClasspath'.
   > Problems reading data from Binary store in /tmp/gradle1514867895156133686.bin offset 618452 exists? true

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

➜ flutter doctor -v

```
[✓] Flutter (Channel stable, 2.2.3, on Linux, locale en_IN)
    • Flutter version 2.2.3 at /home/mansih/Documents/dev/flutter
    • Framework revision f4abaa0735 (5 days ago), 2021-07-01 12:46:11 -0700
    • Engine revision 241c87ad80
    • Dart version 2.13.4
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
• Android SDK at /home/mansih/Android/Sdk
• Platform android-30, build-tools 30.0.3
• Java binary at: /home/mansih/Documents/android-studio/jre/bin/java
• Java version OpenJDK Runtime Environment (build
1.8.0_242-release-1644-b3-6222593)
• All Android licenses accepted.
[✓] Chrome - develop for the web
• Chrome at google-chrome
[✓] Android Studio (version 4.1)
• Android Studio at /home/mansih/Documents/android-studio
• Flutter plugin version 57.0.1
• Dart plugin version 201.9380
• Java version OpenJDK Runtime Environment (build
1.8.0_242-release-1644-b3-6222593)
[✓] Connected device (2 available)
• Android SDK built for x86 (mobile) • emulator-5554 • android-x86    •
Android 10 (API 29) (emulator)
• Chrome (web)                       • chrome        • web-javascript •
Google Chrome 91.0.4472.114
• No issues found!

I have the same issue on my project. But I don't know the ways to fix it.

@mannnish
The error is pointing to gradle: Problems reading data from Binary store in /tmp/gradle1514867895156133686.bin offset 618452 exists? true which seems to be pointing to gradle and not specific to flutter itself. See below related issue:
gradle/gradle#8489
gradle/gradle#13316
Also try below and see if it helps:
cd <your_project>/android
./gradlew clean

Closing from here as this isn't a flutter issue.

It's not working

@darshankawar can I connect with you somewhere else?

@mannnish
The error is pointing to gradle: Problems reading data from Binary store in /tmp/gradle1514867895156133686.bin offset 618452 exists? true which seems to be pointing to gradle and not specific to flutter itself. See below related issue:
gradle/gradle#8489
gradle/gradle#13316
Also try below and see if it helps:
cd <your_project>/android
./gradlew clean

Closing from here as this isn't a flutter issue.

not exactly this, but upgrading gradle worked for me.

Can you tell me the version of Gradle you were upgraded to?

Can you tell me the version of Gradle you were upgraded to?

was working with v5 earlier upgraded to 6.0.1

Can you tell me the version of Gradle you were upgraded to?

was working with v5 earlier upgraded to 6.0.1
this is how you can upgrade
cd android
./gradlew clean
./gradlew wrapper --gradle-version 6.0.1
./gradlew -v   # to download the new version
cd ..
flutter clean
flutter run   # might take 15 - 20mins for the first time

Thanks so much. I also upgrade the version to 6.2 and it works as well.

Can you tell me the version of Gradle you were upgraded to?

was working with v5 earlier upgraded to 6.0.1
this is how you can upgrade
cd android
./gradlew clean
./gradlew wrapper --gradle-version 6.0.1
./gradlew -v   # to download the new version
cd ..
flutter clean
flutter run   # might take 15 - 20mins for the first time

Thanks so much. I also upgrade the version to 6.2 and it works as well.

Can you tell me the version of Gradle you were upgraded to?

was working with v5 earlier upgraded to 6.0.1
this is how you can upgrade
cd android
./gradlew clean
./gradlew wrapper --gradle-version 6.0.1
./gradlew -v   # to download the new version
cd ..
flutter clean
flutter run   # might take 15 - 20mins for the first time

Thanks so much... it works for me too! Muito obrigadoooo


Missing old style figures in text

Bug Description
Numbers in article text should be rendered proportional old style, but currently are not.
Severity

[ ] High - I'm not able to use Evidence until this bug is fixed
[ ] Medium - I'm able to use Evidence, but a feature I need to use is not working
[x] Low - I'm (barely) able to keep using Evidence as normal, but flagging this for the team to fix

@mcrascal I want to work on this issue can you please assign me

Awesome, thanks for offering -- it's all yours!

@mcrascal Can you please give a little more description about the bug and where is article text I am unable to find it please

@harshprajapati460 for sure.
The style sheet is located here: https://github.com/evidence-dev/evidence/blob/main/sites/example-project/src/app.css
The article which contains the content is here: https://github.com/evidence-dev/evidence/blob/7bc9e4c1660fb562252c15a774c7f5ba33244bfe/sites/example-project/src/pages/__layout.svelte#L154
It would be great if numbers in regular text, and from the <Value /> component had proportional old style.
LMK if you have any other questions!


BUG? TABLES --xml-output empty for EIT

Hi,
I don't know why this generates an empty file:
-tsp -v -I ip <IP_ADDRESS>:12345 -P tables -p 18 --all-once -f --xml-output test.xml -O drop
And this works:
-tsp -v -I ip <IP_ADDRESS>:12345 -P tables -p 18 --all-once -f --text-output test.txt -O drop
As I can see in the Documentation the EIT Class has the toXML() member:
https://tsduck.io/doxy/classts_1_1_e_i_t.html
Any idea?

Hi @lelegard ,
This example generates the same problem:
tstabcomp -v -d eit.bin eit.xml
Decompiling eit.bin to eit.xml
tstabcomp: eit.bin: 709 orphan sections not saved in XML document (0 tables saved)
tstabcomp: cannot decompile XML file eit.xml

But after reading this post from you: https://github.com/tsduck/tsduck/issues/160#issuecomment-437808276 I discovered the REQUIREMENT to use --pack-all-sections when using tstables or -P tables with EIT.
So, please can you include some WARNING in the documentation and the help?
Regards.

This is due to the weird nature of EIT's. EIT's have the potential to be complete and consistent tables. But, when the guidelines from ETSI TS 101 211 are applied, then EIT's are no longer "tables" but sparse sections. You can view sections, but there is no complete EIT table, as defined by ISO 13818-1.
The option --pack-all-sections is just a trick to transform sparse sections into tables.
And this is already documented:
  --pack-all-sections
      Same as --all-sections but also modify each long section so that it
      becomes a valid complete table. Its section_number and
      last_section_number are forced to zero. Use with care because this may
      create inconsistent tables. This option can be useful with tables with
      sparse sections such as EIT's to save them in XML format (as an
      alternative, see also --fill-eit).

I do not see what to say more...

Hi,
Perhaps this simple change can be useful:
  --pack-all-sections
      Same as --all-sections but also modify each long section so that it
      becomes a valid complete table. Its section_number and
      last_section_number are forced to zero. Use with care because this may
      create inconsistent tables. This option can be REQUIRED with tables with
      sparse sections such as EIT's to save them in XML format (as an
      alternative, see also --fill-eit).

Regards.


"TypeError: unhashable type: 'JVPTracer'" workaround?

Hi!
I'm trying to build a Module (M) where in __init__, I define a List[Module] (L), and in M.__call__, I do something like lax.switch(some_index, L, *module_args). However, when trying to train, I get
TypeError: unhashable type: 'JVPTracer'
Do you know of any workaround to this?

First of all, a MWE for reproducability purposes:
import equinox as eqx
import jax.lax as lax
import jax.numpy as jnp
import jax.random as jr

class M(eqx.Module):
    modules: list[eqx.Module]

    def __init__(self, *, key):
        self.modules = [eqx.nn.Linear(1, 1, key=k) for k in jr.split(key, 5)]

    def __call__(self, x, *, key):
        i = jr.randint(key, (), minval=0, maxval=5)
        return lax.switch(i, self.modules, x)

m = M(key=jr.PRNGKey(0))
m(jnp.array([1.]), key=jr.PRNGKey(1))

So the reason for this is that JAX assumes that all of the callables in lax.switch are Python functions; i.e. not just any callable. (Which means that their type annotations are actually wrong; if this bothers you then you may wish to raise an issue on their GitHub issue tracker.)
The workaround is treat the module as an input into a function that in turn calls it:
import equinox as eqx
import jax.lax as lax
import jax.numpy as jnp
import jax.random as jr

def _invoke(n):
    return [lambda callables, *args, i=i: callables[i](*args)
            for i in range(n)]

class M(eqx.Module):
    modules: list[eqx.Module]

    def __init__(self, *, key):
        self.modules = [eqx.nn.Linear(1, 1, key=k) for k in jr.split(key, 5)]

    def __call__(self, x, *, key):
        i = jr.randint(key, (), minval=0, maxval=5)
        return lax.switch(i, _invoke(5), self.modules, x)

m = M(key=jr.PRNGKey(0))
m(jnp.array([1.]), key=jr.PRNGKey(1))

Not as pretty obviously.
As a final comment: if all of your list-of-modules are the same, then you can pull a trick by creating an ensemble of modules (rather than a list of modules), and then indexing into their parameters:
import equinox as eqx
import jax
import jax.lax as lax
import jax.numpy as jnp
import jax.random as jr

def _zero_if_array_else_none(x):
    return 0 if eqx.is_array(x) else None

class M(eqx.Module):
    modules: eqx.Module

    def __init__(self, *, key):
        self.modules = eqx.filter_vmap(lambda k: eqx.nn.Linear(1, 1, key=k),
                                       out=_zero_if_array_else_none
                                       )(jr.split(key, 5))

    def __call__(self, x, *, key):
        i = jr.randint(key, (), minval=0, maxval=5)
        module = jax.tree_map(lambda param: param[i], self.modules)
        return module(x)

m = M(key=jr.PRNGKey(0))
m(jnp.array([1.]), key=jr.PRNGKey(1))

And where applicable, this should be much more efficient. (I think.)

Yep. This is because self.modules doesn't consist solely of JAXable types -- it also has activation functions, which are essentially arbitrary Python objects. (In this case custom_jvp objects.) And lax.switch only allows you to pass JAXable types in as operands.
The fix is to bind the non-JAX-able types in to the function definition itself:
import equinox as eqx
import jax.lax as lax
import jax.numpy as jnp
import jax.random as jr

def _invoke_impl(i, s):
    def _invoke_inner(params, *operands):
        p = params[i]
        caller = eqx.combine(p, s)
        return caller(*operands)
    return _invoke_inner

def _invoke(branches):
    static = [eqx.filter(b, eqx.is_array, inverse=True) for b in branches]
    return [_invoke_impl(i, s) for i, s in enumerate(static)]

def filter_switch(index, branches, *operands):
    params = [eqx.filter(b, eqx.is_array) for b in branches]
    return lax.switch(index, _invoke(branches), params, *operands)

class M(eqx.Module):
    modules: list[eqx.Module]

    def __init__(self, *, key):
        self.modules = [eqx.nn.MLP(1, 1, 2, 2, key=k) for k in jr.split(key, 5)]

    def __call__(self, x, *, key):
        i = jr.randint(key, (), minval=0, maxval=5)
        return filter_switch(i, self.modules, x)

m = M(key=jr.PRNGKey(0))
m(jnp.array([1.]), key=jr.PRNGKey(1))

I appreciate this may seem a bit arcane if it's your first time seeing it -- filtering is actually the standard approach to handling this kind of thing. See for example this bit in the Equinox docs.
For completeness, this the equivalent ensemble version:
import equinox as eqx
import jax
import jax.lax as lax
import jax.numpy as jnp
import jax.random as jr

def _zero_if_array_else_none(x):
    return 0 if eqx.is_array(x) else None

class M(eqx.Module):
    modules: eqx.Module

    def __init__(self, *, key):
        self.modules = eqx.filter_vmap(lambda k: eqx.nn.MLP(1, 1, 2, 2, key=k),
                                       out=_zero_if_array_else_none
                                       )(jr.split(key, 5))

    def __call__(self, x, *, key):
        i = jr.randint(key, (), minval=0, maxval=5)
        module = jax.tree_map(lambda param: param[i] if eqx.is_array(param) else param, self.modules)
        return module(x)

m = M(key=jr.PRNGKey(0))
m(jnp.array([1.]), key=jr.PRNGKey(1))

Thank you for the clear and thorough response.


Update close-your-account.md

Added a restriction for free azuresubscrpition

@JohanFreelancer9 Please copy review

Issue#https://github.com/MicrosoftDocs/microsoft-365-docs/issues/3632

@cmcatee-MSFT Please merge this PR. Thanks.

The Azure Free Trial subscription doesn't show up in the Microsoft 365 admin portal. It's only shown in the Azure portal.  See Delete free trial subscription.


[BUG] marginal distribution with rake

While attempting to calibrate the margins of a sample derived from a survey (df dataframe), I encounter the error displayed at the end of the code flow.
The margins used for calibration are real totals of country x size and country x sector, in the same order as obtained through the command sorted(set(df['ctrysize/sect'])).

Hi @EmanueleCeglia
Thanks, for the report.
Any chance you could prepare a sample data (self contained code, no files) that could somehow reproduce your issue?
I'd like/need to run it locally to be able to reproduce and fix.
Thanks.

@talgalili Hi, sorry if I bother you.
Do you have some news about the bug?
If the repository is not fine for you we can find another solution.
Best regards,
Emanuele

Hi @EmanueleCeglia
The simplest solution for me to work with would be code that I can run (without external files) that can reproduce the problem.
You can use .to_list() on a DaraFrame to create such a piece of code, and then use pd.DataFrame(the_list) to get it into a DataFrame.
The challenge for you is to create the smallest minimal situation that reproduces the issue (so that the code you paste won't be too long).
Could you try and do that?
Thanks!

Hi @talgalili
I understand, I try to do this as soon as possible and I will come back to you.
Thanks a lot for your availability.
Best,
Emanuele

Hi @talgalili and @EmanueleCeglia ,
We ran into the same issue recently and forked the repo with a fix - see here: https://github.com/Dirguis/ipfn/compare/master...nestauk:ipfn:master
It seems like this error occurs when using rake with pandas df when you have only one instance of a particular feature category in your sample dataframe.
If you have 1 row for a category, it gets converted into numpy array when you .loc for that category. The error has something to do with this .loc process going wrong with numpy array because of some kind of recursiveness (?) I think.

Thanks for this!
Could you please propose a PR for me to review?
On Tue, 21 May 2024, 11:41 Roisin, @.***> wrote:

Hi @talgalili https://github.com/talgalili and @EmanueleCeglia
https://github.com/EmanueleCeglia ,
We ran into the same issue recently and forked the repo with a fix - see
here: @.***:ipfn:master
https://github.com/Dirguis/ipfn/compare/master...nestauk:ipfn:master
It seems like this error occurs when using rake with pandas df when you
have only one instance of a particular feature category in your sample
dataframe.
If you have 1 row for a category, it gets converted into numpy array when
you .loc for that category. The error has something to do with this .loc
process going wrong with numpy array because of some kind of recursiveness
(?) I think.
—
Reply to this email directly, view it on GitHub
https://github.com/facebookresearch/balance/issues/80#issuecomment-2122326375,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAHOJBQG7ABHRBLL55NUYN3ZDMQGDAVCNFSM6AAAAABHRLDUZCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMRSGMZDMMZXGU
.
You are receiving this because you were mentioned.Message ID:
@.***>

Oh, I now see that this is a bug in ipfn (not in balance).
I think it's possible to fix this issue in balance using a monkey patch. Like was done here:
https://github.com/facebookresearch/balance/blob/cf22b9f2b008f9d57f98a376fb148ddcc888f060/balance/weighting_methods/ipw.py#L32
(until ipfn fixes the issue)
@crispy-wonton do you want to try a PR on adding this hack to balance? (or do you think it's easier to redirect the installation to just use your repo, WDYT?)

Hi @talgalili @crispy-wonton thanks for your feedback.
I tried these combination:
1: remove categories that presents only one observation (and also related margins) -> usual error
2: update ipfn.py file with recommended changes (keeping all categories) -> usual error
3: update ipfn.py file and remove categories that presents only one observation (and also related margins) -> works
Now the only thing that I have to explore is why some categories are grouped together and so at the end they are not balanced.
INFO (2024-05-21 16:30:13,119) [rake/rake (line 154)]: Final covariates and levels that will be used in raking: {'ctrysize': ['_lumped_other', 'DE4', 'DE3', 'DE2', 'FR4', 'DE1', 'IT1'], 'ctrysect': ['_lumped_other', 'ESC', 'DEB', 'FRC', 'ITC', 'DEC', 'DED']}.

Thank you for the update!
Your checks leave me confused. I don't understand why using both solutions
is the only thing that works.
Do you have any guesses?
On Tue, 21 May 2024, 15:41 Emanuele Ceglia, @.***>
wrote:

Hi @talgalili https://github.com/talgalili @crispy-wonton
https://github.com/crispy-wonton thanks for your feedback.
I tried these combination:
1: remove categories that presents only one observation (and also related
margins) -> usual error
2: update ipfn.py file with recommended changes (keeping all categories)
-> usual error
3: update ipfn.py file and remove categories that presents only one
observation (and also related margins) -> works
Now the only thing that I have to explore is why some categories are
grouped together and so at the end they are not balanced.
INFO (2024-05-21 16:30:13,119) [rake/rake (line 154)]: Final covariates
and levels that will be used in raking: {'ctrysize': ['_lumped_other',
'DE4', 'DE3', 'DE2', 'FR4', 'DE1', 'IT1'], 'ctrysect': ['_lumped_other',
'ESC', 'DEB', 'FRC', 'ITC', 'DEC', 'DED']}.
image.png (view on web)
https://github.com/facebookresearch/balance/assets/99983605/27680136-5a28-456f-a79b-9912fdecb8f0
—
Reply to this email directly, view it on GitHub
https://github.com/facebookresearch/balance/issues/80#issuecomment-2122795878,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAHOJBUQKEW6FK3Y2H66BKDZDNMJ5AVCNFSM6AAAAABHRLDUZCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMRSG44TKOBXHA
.
You are receiving this because you were mentioned.Message ID:
@.***>

Hi @talgalili here I am for few updates, the library now doesn't give me any error even if I am keeping those categories that present only one observation.
The ipfn.py file is updated with recommended changes explained in previous messages.
So, maybe last time I was doing something wrong.
In order to avoid _lumped_other (categories grouped together in a generic one) I also changed other parameters inside the library:

convergence rate of the raking algorithm from 1e-8 to 0.0001
"prop" parameter contained in two functions: fct_lump_by and fct_lump (util.py) I changed it from default 0.05 to 0.

I still have a problem: I need to balance two categories inside my dataset: ctrysize and ctrysect but after the calibration only the first one is correctly balanced with the finals weights.


Enable trace listeners for app insights in Gallery

Fixes #3101 - Gallery doesn't log traces to Application Insights.
Project was missing trace listener for AI. Adding it now logs all traces to AI. Note: adding the project, updated some dependencies, hence the proj changes.

:shipit:


iOS failing

first off thank you for efforts on this repo/fork! Did you happen to use this on a an device running <iOS14? Android seems to work fine with your code but iOS gives me issues. Going to debug and provide more information, but I wanted to get your thoughts first.

Ah, sorry for late reply. The code I added only executes on iOS 14+. If it's older it just calls the original functions. I didn't have any issues running iPhone 6 with iOS 12 and and iPhone 8 while it still had iOS 13. Didn't go back any further than that.
Since then I haven't had the need to go back and re-test. What version of iOS were you testing with? Any crash logs?

Oh - i should add. The original code that runs on iOS <14 had a lot of problems with iCloud files. There were some attempts at fixing in the original project but I would still get reports of various problems (gallery not loading properly, some photos not downloading etc). It's just not worth going back to fix anymore.
Local files should work fine.
Oh, and not sure if it's still a problem but there's a known buggy HEIC image in the iPhone simulator. It won't convert to jpg when requested iirc. Not an issue with real HEIC files.


BatchAI. Storage account key and name options

Make --storage-account-name and --storage-account-key work for Azure File share and Azure Storage container specified on command line.

This checklist is used to make sure that common guidelines for a pull request are followed.
General Guidelines

[ ] The PR has modified HISTORY.rst describing any customer-facing, functional changes. Note that this does not include changes only to help content. (see Modifying change log).

Command Guidelines

[ ] Each command and parameter has a meaningful description.
[ ] Each new command has a test.

(see Authoring Command Modules)

View a preview at https://prompt.ws/r/Azure/azure-cli/4841
This is an experimental preview for @microsoft.com users.
(It may take a minute or two for your instance to be ready)
Email feedback to 'azfeedback' with subject 'Prompt Feedback'.

No need to update HISTORY.rst since we have not released the previous version yet


[WIP] Updates passing of tax parameters, labor supply elasticity

This PR does the following:

Updates all ogusa files that handle tax function parameters to pass them in 3 large arrays (for the ETR, MTR Labor, and MTR Capital functions) rather than 30 smaller arrays.
Adds a script, elliptical_u_est.py, that fits an elliptical utility function to a constant Frisch elasticity function.
Updates parameters.py take as a parameter the Frisch elasticity of labor supply and then fits the elliptical utility parameters to this by calling elliptical_u_est.py.
Updates the model parameter sigma to match the literature and provides citations (in comments) of the sources of delta, alpha, beta, and the Frisch elasticity.

Note that this is not ready to merge.  The model does not converge with the new labor supply elasticity parameters. Our calibration of the chi_n and chi_b parameters needs to be updated given the new parameter values and tax functions.  It is expected that the model will converge once these parameters are updated.

I think with this last commit we are good to merge this PR.  The model should run through and produce sensible output.

OK, I am re-running based on your changes. Let me look at any issues related to Travis CI as well before we merge. I don't think it will be difficult to get Travis CI passing again.


Tsx refactor pt1

I tested:

[ ] stake
[ ] unstake
[ ] bond
[ ] redeem bond
[ ] 33T stake
[ ] 33T early exit unstake
[ ] links, buttons, theme switching


line series animation to follow axis direction

[x] I am using English in this issue.

General Questions

[x] Required: I have read the document and examples and tried to solve it by myself.
[x] Required: I have searched for similar issues and that didn't help.
[x] Required: I have tried with the latest version of ECharts and still have this problem.

In this issue, I have provided information with:

[x] Required: issue type
[x] Required: one sentence description in issue details
[x] Required: demo
[x] Required: ECharts version

Issue Type

[ ] I have a question to ask about how to use ECharts to ...
[ ] I have a bug to report
[ ] I have a feature to request, e.g.: I'd like a new feature that ...
[x] I have a feature to enhance, e.g.: The current feature should be improved in the way that ...
[ ] There's something wrong with the documents
[ ] Others, or I'm not sure which issue types to choose here

Issue Details
Line chart animation starts from left even when the axis is inverted.
Expected Behavior

Line animation to start from right, according to axis direction.
Current Behavior

Online Example
https://jsfiddle.net/o4j0hkwL/
// based on prepared DOM, initialize echarts instance
var myChart = echarts.init(document.getElementById('main'));

// specify chart configuration item and data
var option = {
	title: {
    	text: "Echarts v" + echarts.version,
    },
    xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
        inverse:true,
    },
    yAxis: {
        type: 'value',
        position:'right'
    },
    series: [{
        data: [820, 932, 901, 934, 1290, 1330, 1320],
        type: 'line'
    }]
};

// use configuration item and data specified to show chart
myChart.setOption(option);

Topics

[ ] Legend
[ ] Tooltip
[ ] Event
[ ] Performance
[ ] SVG
[ ] Map
[ ] ECharts GL
[ ] Third-party libraries, e.g.: Vue.js, React

Anything Else We Need to Know
N/A
Environment

ECharts version: v4.2.0
[ ] It happens only on certain browsers or operating systems.

#9322    Repeat with this question.

Because this issue is repeated with #9322, I have to turn this off and follow up under that, hope you understand.