ENH: add ability to delete individual series, studies, patients

Add to the browser Remove button the information that it will
delete all selected series, studies, patients.
Add support for right click custom context menus in the
patient, study, series tables. Translate the local points
to global ones in terms of the table view and signal
right clicked with the global position so that the browser
can position the context menu appropriately.
Add the context menu to the DICOM browser to allow
deleting at just one level, with selection information.
Using the UIDs for now, but since they're not shown in
the tables, it can be changed.
Added a test for the DICOM browser, with the ability
to open it in interactive mode to test the right clicks.
Slicer bug:
http://www.na-mic.org/Bug/view.php?id=3792
When Slicer makes a custom DICOM browser, it moves the table views
directly into the new window, extracting them from the DICOM
table.
With this change, the table view takes care of mapping the point to
global, the table manager propagates the signal as a table specific
XRightClicked signal, and the browser responds to it with a table
specific context menu.
Slicer Issue #3792

Looks good to me!
@nolden @AndreasFetzer do you want to have a look?

Nicole and I just discussed this and we'll plan to merge it if we haven't heard an objection in a few days.

Hi Steve, sorry for the late response. He had a deadline on monday. I will have a look at it today.

The code looks good.
I have one remark:
In the context menu, the selected UIDs are displayed but are not displayed in the table views. Thus it is a useless information from an user's point of view since you cannot tell whether the right UID is selected.
I would suggest to display e.g. Patientname / Study or Series description instead of that in the context menu.

Thanks for the review! I'll update the informational string on the pop up menu to show your suggested fields.

@naucoin I tested with the current Slicer trunk and have this compile error. Did you see this? Probably not related to your change, but will need to be addressed anyway.
[ 75%] Building CXX object Modules/Loadable/Models/Widgets/CMakeFiles/qSlicerModelsModuleWidgets.dir/qMRMLModelDisplayNodeWidget.cxx.o
/Users/fedorov/github/Slicer/Modules/Loadable/Models/Widgets/qMRMLModelDisplayNodeWidget.cxx:82:31: error:
      no member named 'setNoneEnabled' in 'ctkVTKDataSetArrayComboBox'
  this->ActiveScalarComboBox->setNoneEnabled(true);
  ~~~~~~~~~~~~~~~~~~~~~~~~~~  ^
1 error generated.

Must be related to pull request #589
@lassoan what should Andrey do?

Ah, probably Nicole (or I) should rebase....

CTK was changed so you need to start a build at the top level (not just in the slicer-build subdirectory)

I've had to add some methods to the ctkDICOMDatabase in order to get at the descriptors, so I'm adding some extra testing as well. I should finish up on Monday.

@AndreasFetzer Let me know if the names and descriptions in the second commit are better.

@naucoin have you tested with a Slicer build, is it working there?

I had tested it in Slicer with a data set that had all the fields set, but in the database test I added it worked for one field empty, but I didn't update the browser test. Thanks for the report, I'll get it fixed ASAP.

I rebased and fixed the empty label bug here:
https://github.com/naucoin/CTK/tree/3792-unable-to-remove-one-series-of-an-exam-rebase

Ok, this one works fine with Slicer, thanks!
It seems to work great!
Few suggestion I have is to remove the list of selected items from the popup, and remove "Cancel" option. The first one looks more like debugging, and can be overwhelming when the number of selected rows is large. The "Cancel" option is unusual to see in a popup menu. One click outside to cancel is equal to clicking cancel option, so the benefit is unclear.

If you want to communicate to the user the fact that several items will be deleted, maybe it is better to just say "Delete <#number> selected <series|studies|patients>".

The pop up covers some of the selected rows, so I wanted to give the user some feedback about what was going to be deleted.
Good point about the Cancel, I'll remove it.

The pop up covers some of the selected rows, so I wanted to give the user some feedback about what was going to be deleted.

I still think it is not a good idea to include those names in the popup. Also note that if you remove these "Selected" pieces, the popup will cover much less.

+1 for "Delete <#number> selected series".
If you would like, you could still show a confirmation popup listing the
series with the option of not showing it the following time ...
On Wed, Aug 26, 2015 at 4:44 PM, Andrey Fedorov<EMAIL_ADDRESS>wrote:

The pop up covers some of the selected rows, so I wanted to give the user
some feedback about what was going to be deleted.
I still think it is not a good idea to include those names in the popup.
Also note that if you remove these "Selected" pieces, the popup will cover
much less.
—
Reply to this email directly or view it on GitHub
https://github.com/commontk/CTK/pull/587#issuecomment-135165497.

--
+1<PHONE_NUMBER>

If you would like, you could still show a confirmation popup listing the
series with the option of not showing it the following time ...

+1

I'm personally fine if the consensus is to just show the number of items to be deleted, I'm going to be out of the office tomorrow through Monday so any new iterations may end up waiting until next week.

I'll have to revisit this next week, I've encountered a bug where the mouse clicks are behaving oddly (takes two left clicks to select, the right click only works on the patients table).

Sounds good. Have good travel and talk to you next week.
Jc
On Wed, Aug 26, 2015 at 5:58 PM, Nicole Aucoin<EMAIL_ADDRESS>wrote:

I'll have to revisit this next week, I've encountered a bug where the
mouse clicks are behaving oddly (takes two left clicks to select, the right
click only works on the patients table).
—
Reply to this email directly or view it on GitHub
https://github.com/commontk/CTK/pull/587#issuecomment-135182797.

--
+1<PHONE_NUMBER>

Ditto!

Sent from my mobile device
On Aug 26, 2015 6:02 PM, "Jean-Christophe Fillion-Robin" <
<EMAIL_ADDRESS>wrote:

Sounds good. Have good travel and talk to you next week.
Jc
On Wed, Aug 26, 2015 at 5:58 PM, Nicole Aucoin<EMAIL_ADDRESS>wrote:

I'll have to revisit this next week, I've encountered a bug where the
mouse clicks are behaving oddly (takes two left clicks to select, the
right
click only works on the patients table).
—
Reply to this email directly or view it on GitHub
https://github.com/commontk/CTK/pull/587#issuecomment-135182797.

--
+1<PHONE_NUMBER>
—
Reply to this email directly or view it on GitHub
https://github.com/commontk/CTK/pull/587#issuecomment-135184742.

@naucoin can you also add the capability to export selected stuff? So the idea would be to add "Export to file system" option to popup, and when clicked, show Directory open dialog, and when selected, just copy the files from their current location to the user specified location. While doing this, we can also create a user-readable patient/study/series hierarchy of the directories for the exported stuff.
I thought this is a very similar feature to be added in the same PR, or feel free to create a new PR.

+1 on this feature.
For reference on the structure of the output directory you can look at this
dicomsort code [1].  It has a very configurable method for defining the
naming, but in practice 99% of the time people will be fine with the
default structure so I'd suggest just starting with this format or
something similar:
targetDir +
'/%PatientName/%StudyDesciption-%StudyDate/%SeriesDescription-%SeriesNumber-%InstanceNumber.dcm'
[1] https://github.com/pieper/dicomsort
On Mon, Aug 31, 2015 at 9:03 AM, Andrey Fedorov<EMAIL_ADDRESS>wrote:

@naucoin https://github.com/naucoin can you also add the capability to
export selected stuff? So the idea would be to add "Export to file system"
option to popup, and when clicked, show Directory open dialog, and when
selected, just copy the files from their current location to the user
specified location. While doing this, we can also create a user-readable
patient/study/series hierarchy of the directories for the exported stuff.
I thought this is a very similar feature to be added in the same PR, or
feel free to create a new PR.
—
Reply to this email directly or view it on GitHub
https://github.com/commontk/CTK/pull/587#issuecomment-136364820.

@naucoin if you follow @pieper advice on the directory structure, it probably makes sense to convert to ASCII and remove special characters first.

Agreed with @fedorov here's a routine you can inspire from:
https://github.com/pieper/dicomsort/blob/master/dicomsort.py#L99-L108
On Mon, Aug 31, 2015 at 10:32 AM, Andrey Fedorov<EMAIL_ADDRESS>wrote:

@naucoin https://github.com/naucoin if you follow @pieper
https://github.com/pieper advice on the directory structure, it
probably makes sense to convert to ASCII and remove special characters
first.
—
Reply to this email directly or view it on GitHub
https://github.com/commontk/CTK/pull/587#issuecomment-136389217.

@naucoin I would suggest you integrate your current work and create an other PR.
@pieper Thanks for pointing out that useful snippet.
This made me think about the following ...
What are the best practice regarding DICOM name clean up ? ... I anticipate copy/pasting the code pointed by @pieper to cause us trouble moving forward (aka maintenance pain + bug hard to find). What do you think if we add a function to pydicom, DCMTK or CTK or in some other a common location ... ?

@jcfr - agreed, it is a tricky thing to make useful filenames from dicom
elements.  The heuristic in the code I pointed to is the best I could come
up with at the time, and of course it is very much OS platform dependent
(even dependent on the specific filesystem where you are trying to write)
and I didn't find a perfect guideline to follow.  So I would argue the
right place to add this logic would be in Qt and/or in python's os module
and then make use of it from DICOM.  As a practical matter probably CTK
Core is a logical place for us to put the logic.
On Mon, Aug 31, 2015 at 11:54 AM, Jean-Christophe Fillion-Robin <
<EMAIL_ADDRESS>wrote:

@naucoin https://github.com/naucoin I would suggest you integrate your
current work and create an other PR.
@pieper https://github.com/pieper Thanks for pointing out that useful
snippet.
This made me think about the following ...
What are the best practice regarding DICOM name clean up ? ... I
anticipate copy/pasting the code pointed
https://github.com/pieper/dicomsort/blob/master/dicomsort.py#L99-L108
by @pieper https://github.com/pieper to cause us trouble moving forward
(aka maintenance pain + bug hard to find). What do you think if we add a
function to pydicom, DCMTK or CTK or in some other a common location ... ?
—
Reply to this email directly or view it on GitHub
https://github.com/commontk/CTK/pull/587#issuecomment-136413693.

Just a note to Nicole, please make sure you augment that code with the conversion to ASCII. Things like superscripts are not uncommon in study descriptions.

The export will definitely be a separate issue and pull request, please create a new issue or bug and assign it to me.
Taking another look at the right click issues to get this pull request finished up.

Here is the issue: http://www.na-mic.org/Bug/view.php?id=3163. I know it is assigned to Csaba, and he did a lot of work on this in the Subject hierarchy, but I also think Isaiah was looking for something much simpler, without any edits to the DICOM, just context menu and export to directory.

There are several data repositories (Slicer scene in memory, Slicer scene on disk, DICOM database, DICOM files not indexed by DICOM database) and altogether 12 possible save/load/import/export operations between them. Csaba implemented these two "DICOM export" operations:

export from "Slicer scene in memory" to DICOM files not indexed by DICOM database
save from "Slicer scene in memory" to DICOM database

Andras, the functionality suggested here is the standard DICOM export that is available in all PACS workstations: locate files in the database, and copy to the user-specified location. I agree there are many options. I think this feature will fill an important gap.

Yes, I completely agree. I just wanted to clarify that the scope of Csaba's work was different.

I re-rebased this branch, fixed the right click bug and added a confirmation dialogue with the patient name, study or series description:
https://github.com/naucoin/CTK/tree/3792-unable-to-remove-one-series-of-an-exam-rebase
I also updated the browser test to avoid the copy/link on import pop up.
Any feedback on that branch? I'll want to squash it and make a new pull request, closing this one.

@naucoin thanks! I will run rebuild overnight and plan to test tomorrow.

Build finished quicker than I thought.
Looks great to me in Slicer and is ready to merge AFAIK! Nice work! :+1:

@naucoin To facilitate review, I created a new PR based on the new branch 3792-unable-to-remove-one-series-of-an-exam-rebase. I am closing this one.

See https://github.com/commontk/CTK/pull/597

I had wanted to squash it down to one commit before making a pull request, will you still want me to do that before it gets integrated?


Investigate and resolve performance bottleneck

There's a noticeable speed issue in the current implementation. Investigate the root cause of this performance bottleneck and implement optimizations to improve overall system speed. Likely this can be improved through synergy with the NRT repo.
Should get input from @mmcdermott

Currently, a significant portion of data processing logic resides in the collate function. To improve efficiency, I should move this logic into the workers' code by running the process functions (like process_triplet) in the get_item function rather than sequentially in the collate function. This should distribute the workload more evenly and potentially improve performance.


[5.1] Add zip function to Collection

Inspired by Ruby and Python: http://apidock.com/ruby/Array/zip
The TL;DR is it lets you "zip" together the items from multiple collections at the same index.
So zipping [1, 2, 3] with [4, 5, 6] would give you:
[
  [1, 4],
  [2, 5],
  [3, 6]
]

Stumbled upon the need for this when working on an Exercism.io problem where you needed to calculate the Hamming distance between two DNA strands.
A zip function gives you a cool solution like this:
function hamming($strandA, $strandB) {
    return (new Collection(str_split($strandA)))
        ->zip(str_split($strandB))
        ->map(function ($item) { return $item[0] === $item[1] ? 0 : 1; })
        ->sum();
}

Generally just nice for being able to declaratively iterate over multiple arrays at once :+1:

Hmmm, cool. "zip" seems like an odd name. It looks like we're building matrices to me. Not sure this belongs in the core. What common use cases are there?

Yeah I just used zip because that's what other languages call it:
https://docs.python.org/3.3/library/functions.html#zip
http://ruby-doc.org/core-2.2.1/Enumerable.html#method-i-zip
There's probably not a ton of really common uses, but I ran into the one I mentioned in the PR description the other day and when I noticed other languages had this built-in it seemed like an interesting candidate to propose at least.
It's useful as a general functional tool for any situation where you'd otherwise need to iterate over all of the elements in one array and compare the element at the current index to an element in a different array at the same index.
For example, without a zip, the solution to that Hamming distance problem ends up looking like this:
function hamming($strandA, $strandB) {
    $strandA = strsplit($strandA);
    $strandB = strsplit($strandB);

    $result = 0;

    for ($i = 0; $i < count($strandA); $i++) {
        $result += $strandA[$i] === $strandB[$i] ? 0 : 1;
    }

    return $result;
}

Just another tool really that plays really nicely with map and reduce when trying to come up with interesting functional/transformative solutions.

:+1: from me.
The name zip is pretty common in functional land, so should be fine for this class.
@adamwathan What's your thought on handling different length arrays? They seem to be kept in this case, and "holes" are filled with NULL values. I know that Scala simply cuts off the tail when one array is longer than the other - did you take this behaviour from another language or what's the rationale behind that decision?

@franzliedke I chose to mimic the Ruby behavior as that's what I was most familiar with, but I'm pretty new to functional stuff and could easily be persuaded if more experienced people have decided that the other approach is the better way to go :+1: I believe Python works the same way Scala does too.

One other point of discussion, right now I'm returning all of the tuples as Collection instances, anyone have a good argument for just using arrays or do we think collections are the way to go?

Okay, good to know. I don't know, either. ;)

Elixir works the same way as Scala/Python too, looks like Ruby might be the odd one out.

Relevant: http://jessepollak.me/whats-up-with-zip/
My opinion after reading that article is to keep the current implementation, which behaves like Ruby in the sense that the collection you call zip on is the collection that determines the length. Essentially lets you get both behaviors by just calling zip on the smaller or longer collection depending on what you need.
It's also the least horrible to implement :)

I thinking this "zipping" functionality is not something that needs to be in the collection class, but who am I to say :smile:
As for your hamming function, might I suggest this:
function hamming($strandA, $strandB)
{
	return array_sum(array_map(function($a, $b)
	{
		return $a === $b ? 0 : 1;
	}, str_split($strandA), str_split($strandB)));
}


Allow DoNothingIntent and DoNothingAndStopPropagationIntent to be used in a const environment

This PR adds an instance static member to DoNothingIntent and DoNothingAndStopPropagationIntent. Although both classes are const, they only expose factory constructors which can not be used in const environments.
Pre-launch Checklist

[ ] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[ ] I read the Tree Hygiene wiki page, which explains my responsibilities.
[ ] I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
[ ] I signed the CLA.
[ ] I listed at least one issue that this PR fixes in the description above.
[ ] I updated/added relevant documentation (doc comments with ///).
[ ] I added new tests to check the change I am making, or this PR is test-exempt.
[ ] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

You could something like:
class Foo {
  const factory Foo() = Foo._;

  const Foo._();
}

Then you don't need instance

I honestly didn't know that was a thing. Learning something everyday!


Add Electrex Pico D4

Signed-off-by: Richard Hartmann<EMAIL_ADDRESS>

@rfc1036 I started pulling your configuration in. See the #TODO markers for open questions.
Some notes:

Added prefix
Switched from legacy R/S/T phase naming to 1/2/3
help strings need to be the same within the same metricname
Restructured some of the metric names, and fixed typos


Correction for raw affiliation Department of Women's Studies at Lakehead University.

Correction needed for raw affiliation Department of Women's Studies at Lakehead University.
raw_affiliation_name: Department of Women's Studies at Lakehead University.
new_rors: 023p7mg82
previous_rors:
works_examples: W4255220252
contact: 38929bb70d3f2d138027a326186f75a3:9697e12f @ ourresearch.org

This issue was accepted and ingested by the OpenAlex team on 2024-10-09. The new affiliations should be visible within the next 7 days.


Cross nixos aarch64 2018 08 05

Motivation for this change
Things done

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[ ] NixOS
[ ] macOS
[ ] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[ ] Fits CONTRIBUTING.md.

why is switch-to-configuration change reverted?

This looks like an accidental use of the "open PR" function from the branch of another user's fork.
I'll close this, assuming so. If I'm wrong, re-open.
For the record, I've been gathering fixes for cross-compiling the image.

@samueldr well at least raspberrypi-wireless was an issue I faced, so a fix for that would be awesome.

I know for a fact that this PR is old content from @ElvishJerricco. Maybe he could open a PR with the change? Or alternatively you could, @danbst?
I would, but prefer not doing a PR I have not tested personally. Though here the change looks self-contained and safe.


Glob patterns for file/directory exclusion/inclusion

As a user,
  I want to do fine-grained exclusion and inclusion of files and directories using glob patterns
So that,
  I can exclude branches of code or irrelevant files in file monitoring or focus on specific tests

Possible packages for glob parsing:

https://github.com/gobwas/glob
https://github.com/bmatcuk/doublestar

Would a more coarse approach of enabling multiple [dir] inputs help here, as an intermediate step towards glob-based includes?


App freezes for a moment when starting recording

I am trying to record ARSKView with RecordAR. The problem I am facing is that every time I call RecordAR.record() the app freezes for a moment. Also, text-to-speech pronunciation is very laggy if I call it right after the record function.
Is there any way to avoid this issue? I couldn't find any possible way to prevent this issue in docs and in the internet. Any feedback is highly appreciated, thank you!

Did you try dispatching record() call to background queue? I'm having same issue with freeze, that's first thing I wanna try.

If you're looking for a workaround, running .prepare, .record, .cancel as initialisation sequence makes subsequent .record calls work without significant freezes. To avoid freeze on initialisation you can just run it on concurrent queue. Works for me with ARVideoKit 1.6.0

Try to call record with viewDidLoad. It's work for me. Issue looks like specific initialisation when first time starting record.
let recThread = Thread() {
self.recorder?.record()
sleep(1)
self.recorder?.stop()
}
recThread.name = "rec"
recThread.start()

I am trying to record ARSKView with RecordAR. The problem I am facing is that every time I call RecordAR.record() the app freezes for a moment. Also, text-to-speech pronunciation is very laggy if I call it right after the record function.
Is there any way to avoid this issue? I couldn't find any possible way to prevent this issue in docs and in the internet. Any feedback is highly appreciated, thank you!

I have the same problem did you find something ?

I have the same problem :(((


Create an og image.    so that it will look good in FB while sharing the link.

Currently, when sharing the link on fb, it won't generate any images because there is no og:image defined

Thanks @stultus! There is already an issue opened for this - #95.


ISPN: switch to initialize with customeized configuration

We want to configure ISPN more flexibly, especially for distributed ISPN usage, so this change will use customized configuration as first one for initialization.
Note that the classpath one still needs a simple transport definition here to avoid that "Transport not defined" exception, but we can define the global one in customized file for extension.

Agree, so the fix should only just reset cluster.xml to the simple one. Will update later.


Move pipeline URL from '/_ah/pipeline' to something else

Hello,
The Pipeline library will not work on AppEngine using Managed VMs. I opened a support case on the matter and was immediately shutdown and pointed to this document: https://cloud.google.com/appengine/docs/python/config/appconfig?hl=en#Python_app_yaml_Reserved_URLs
Ironically, on AppEngine this caveat doesn't seem to affect the Pipeline API, however, it does on Managed VM. I don't know if Google will ever allow the Pipeline API to work on Managed VM using the '/_ah/pipeline' path, but for now, I think moving the Pipeline API to default to another path is required.
To get the Pipeline API working on Managed VM, I had to update all my code starting pipelines to pass in the option base_path parameter to the start() function. If the code is updated to reflect a new default path (e.g. I used /_pipeline), then the Pipeline API should work fine in both AppEngine and Managed VMs.

Wow, took me a few days to stumble on this being the root cause.
To be more precise, I believe AppEngine just 403s any request to the /_ah/ prefix that doesn't have admin privileges set up. So from a browser, /_ah/pipeline/list will work fine, but the task queue items of /_ah/pipeline/run will fail (since as the pipeline documentation states, these prefixes should not be hidden behind login: admin).
Anyways, very much agree with this proposed patch/fix, thanks for doing this and writing it up.


lantz_subcommand type entry_points fix

Checklist

[ ] Used a personal fork of the feedstock to propose changes
[ ] Bumped the build number (if the version is unchanged)
[ ] Reset the build number to 0 (if the version changed)
[ ] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[ ] Ensured the license file is being packaged.

lantz_subcommand type entry_points fix
add test for lantz_subcommands

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

@conda-forge-admin, please rerender

Hi! This is the friendly automated conda-forge-linting service.
I wanted to let you know that I linted all conda-recipes in your PR (recipe) and found some lint.
Here's what I've got...
For recipe:

Non noarch packages should have python requirement without any version constraints.
Non noarch packages should have python requirement without any version constraints.

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe) and found it was in an excellent condition.

@conda-forge-admin, please rerender

The issue with type name entry_points failing is due to installed packages having the wrong versioning number on pip from what is actually installed.
$ lantz sims fungen tcp --help -vv
usage: lantz [-h] [{}]
lantz: error: argument subcommand: invalid choice: 'sims' (choose from )

This is due to:
>>> get_subcommands()
({}, {'config': "(pyusb 0.0.0 (.../miniconda3/envs/nspyre-test/lib/python3.8/site-packages), Requirement.parse('pyusb>=1.1.0'), {'lantz-drivers'})", 'sims': "(pyusb 0.0.0 (.../miniconda3/envs/nspyre-test/lib/python3.8/site-packages), Requirement.parse('pyusb>=1.1.0'), {'lantz-drivers'})", 'qtdemo': "(PyQt5 5.12.3 (.../miniconda3/envs/nspyre-test/lib/python3.8/site-packages), Requirement.parse('pyqt5>=5.15.1'))", 'ino': "(pyusb 0.0.0 (.../miniconda3/envs/nspyre-test/lib/python3.8/site-packages), Requirement.parse('pyusb>=1.1.0'), {'lantz-drivers'})"})

This issue has been report on pyusb-feedstock: https://github.com/conda-forge/pyusb-feedstock/issues and is an updated version of pyqt5 is needed on conda-forge. Nothing needs to be done here.


NestedLoopJoin will panic when right child contains RepartitionExec

Describe the bug
A clear and concise description of what the bug is.
When I work on #4866, I find some NestedLoopJoins will panic.
# create tables -- t.csv is an empty file.
❯ CREATE EXTERNAL TABLE t1 (t1_id INT, t1_name text, t1_int INT) STORED AS CSV LOCATION 't.csv';
❯ CREATE EXTERNAL TABLE t2 (t2_id INT, t2_name text, t2_int INT) STORED AS CSV LOCATION 't.csv';
# target_partitions
> set datafusion.execution.target_partitions = 4;

❯ explain select * from t1 inner join t2 on t1.t1_id > t2.t2_id where t1.t1_id > 10 and t2.t2_int > 10;
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| plan_type     | plan                                                                                |
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| logical_plan  | Projection: t1.t1_id, t1.t1_name, t1.t1_int, t2.t2_id, t2.t2_name, t2.t2_int                                                                                |
|               |   Inner Join:  Filter: t1.t1_id > t2.t2_id                                                                                |
|               |     Filter: t1.t1_id > Int32(10)                                                                                |
|               |       TableScan: t1 projection=[t1_id, t1_name, t1_int], partial_filters=[t1.t1_id > Int32(10)]                                                                       |
|               |     Filter: t2.t2_int > Int32(10)                                                                                |
|               |       TableScan: t2 projection=[t2_id, t2_name, t2_int], partial_filters=[t2.t2_int > Int32(10)]                                                                      |
| physical_plan | ProjectionExec: expr=[t1_id@0 as t1_id, t1_name@1 as t1_name, t1_int@2 as t1_int, t2_id@3 as t2_id, t2_name@4 as t2_name, t2_int@5 as t2_int]                         |
|               |   NestedLoopJoinExec: join_type=Inner, filter=BinaryExpr { left: Column { name: "t1_id", index: 0 }, op: Gt, right: Column { name: "t2_id", index: 1 } }              |
|               |     CoalesceBatchesExec: target_batch_size=8192                                                                                |
|               |       FilterExec: t1_id@0 > 10                                                                                |
|               |         RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1                                                                                |
|               |           CsvExec: files={1 group: [[home/work/tools/datafusion-test-data/join-context/t1.csv]]}, has_header=false, limit=None, projection=[t1_id, t1_name, t1_int]   |
|               |     CoalescePartitionsExec                                                                                |
|               |       CoalesceBatchesExec: target_batch_size=8192                                                                                |
|               |         FilterExec: t2_int@2 > 10                                                                                |
|               |           RepartitionExec: partitioning=RoundRobinBatch(4), input_partitions=1 -- panic in RepartitionExec                                                                                |
|               |             CsvExec: files={1 group: [[home/work/tools/datafusion-test-data/join-context/t1.csv]]}, has_header=false, limit=None, projection=[t2_id, t2_name, t2_int] |
|               |                                                                                |
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+

This sql will panic:
❯ select * from t1 inner join t2 on t1.t1_id > t2.t2_id where t1.t1_id > 10 and t2.t2_int > 10;
thread 'tokio-runtime-worker' panicked at 'partition not used yet', /home/work/arrow-datafusion/datafusion/core/src/physical_plan/repartition/mod.rs:426:14
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'tokio-runtime-worker' panicked at 'partition not used yet', /home/work/arrow-datafusion/datafusion/core/src/physical_plan/repartition/mod.rs:426:14
thread 'tokio-runtime-worker' panicked at 'partition not used yet', /home/work/arrow-datafusion/datafusion/core/src/physical_plan/repartition/mod.rs:426:14
thread 'tokio-runtime-worker' panicked at 'partition not used yet', /home/work/arrow-datafusion/datafusion/core/src/physical_plan/repartition/mod.rs:426:14
thread 'tokio-runtime-worker' panicked at 'partition not used yet', /home/work/arrow-datafusion/datafusion/core/src/physical_plan/repartition/mod.rs:426:14
thread 'tokio-runtime-worker' panicked at 'partition not used yet', /home/work/arrow-datafusion/datafusion/core/src/physical_plan/repartition/mod.rs:426:14
thread 'tokio-runtime-worker' panicked at 'partition not used yet', /home/work/arrow-datafusion/datafusion/core/src/physical_plan/repartition/mod.rs:426:14
thread 'tokio-runtime-worker' panicked at 'partition not used yet', /home/work/arrow-datafusion/datafusion/core/src/physical_plan/repartition/mod.rs:426:14
thread 'tokio-runtime-worker' panicked at 'partition not used yet', /home/work/arrow-datafusion/datafusion/core/src/physical_plan/repartition/mod.rs:426:14
0 rows in set. Query took 0.015 seconds.

To Reproduce
See above.
Expected behavior
The join should work.
It seems the partition of right child may execute one more time in NestedLoopJoin, if it has multiple output partitions. It is ok in most time, but when meets RepartitionExec it will panic.
Additional context
Add any other context about the problem here.

@ygf11 Do you find the root cause why the panic happened?
It seems the partition of right child may execute one more time in NestedLoopJoin, if it has multiple output partitions. It is ok in most time, but when meets RepartitionExec it will panic.

From your example, the left side is partitioned and the right side is required single-partitioned.
The output partition should be consistent with left side.
The right single-partition will be executed one more time, is it not allowed to be called multiple times?  Maybe it is the point why it caused panic
@alamb

The right single-partition will be executed one more time,

@liukun4515, that is the cause.

RepartitionExec

Yes, we got the same reason, but I don't know why the RepartitionExec can not be called twice for the same partition.
Other physicalexec have the same behavior? @alamb

RepartitionExec

Yes, we got the same reason, but I don't know why the RepartitionExec can not be called twice for the same partition. Other physicalexec have the same behavior?

The Repartition Exec share a global state of
/// Inner state that is initialized when the first output stream is created.
    state: Arc<Mutex<RepartitionExecState>>,

the state will shared between multiple runtime/coroutine context, if one coroutine execute the partition 1, and other coroutine can not execute the partition 1 again.

Other physicalexec have the same behavior?

I don't know if there is other physical plan has the same behavior.
but maybe executing the same partition one more time is not a good idea, it will waste a lot of time, a better way is to cache the result(OnceFut), or only call once.
NestedLoopJoinExec will sometimes build-left, and sometimes build-right now, currently they are using the same logic, the right way is  to give build-left a logic to handle join, and give build-right another logic.
The bug of example is the case of build-right, I see the NestedLoopJoinStream is using build-left logic.
I think maybe the it is an another cause. @liukun4515 @alamb

NestedLoopJoinExec will sometimes build-left, and sometimes build-right now, and they are using the same logic, I think a better way is to give build-left a logic to handle join, and give build-right another logic. Then the partitions of the non-build-side can be executed only once.

Let me explain more.
The main difference is the way of iteration.
For build-left, left has a single partition, right has multiple partitions. The iteration will be like:
// Given a partition number - x
// execute right-partition-x
for batch in right-partition-x {
   join(batch, left-data-(single partition))
}

For build-right, left has multiple partitions, right has a single partition. The iteration will be like:
// Given a partition number - x
// execute left-partition-x
for batch in left-partition-x {
   join(batch, right-data(single partition))
}

If we use build-left logic for build-right(issue-example), then:
// Given a partition number - x
// Execute right-partition-x --- right partition is a single partition and execute many times
for batch in right-partition-x {
   join(batch, left-data)
}

Other physicalexec have the same behavior?

I don't know if there is other physical plan has the same behavior. but maybe executing the same partition one more time is not a good idea, it will waste a lot of time, a better way is to cache the result(OnceFut), or only call once.
NestedLoopJoinExec will sometimes build-left, and sometimes build-right now, and they are using the same logic, I think a better way is to give build-left a logic to handle join, and give build-right another logic. Then the partitions of the non-build-side can be executed only once.
The bug of example is the case of build-right, I see the NestedLoopJoinStream is using build-left logic.
I think maybe it is an another cause. @liukun4515 @alamb

I think the build-side and probe-side are the concept for the Hash-Join.
In the NLJ, we need the outer-side/outer table and inner-side/inner table.
  for out-row in outer-table
    for inner-row in inner-table
       check-join

The inner table will be traveled many times in the most basic implementation.
In the current implementation, the left table is the outer table, the right table is the inner table.
For the inner join with multi left partition and single right partition:
for left-partition-x in left multi partition:
   join(load-left(left-partition-x), load-right(single-right-partition))

I think this implementation of iter is matched with the algorithm of the NLJ.

I think we can change the function distribution_from_join_type
        JoinType::Inner | JoinType::Left | JoinType::LeftSemi | JoinType::LeftAnti => {
            // need the left data, and the right should be one partition
            vec![
                Distribution::UnspecifiedDistribution,
                Distribution::SinglePartition,
            ]
        }

to
JoinType::Inner | JoinType::Left | JoinType::LeftSemi | JoinType::LeftAnti => {
            // need the left data, and the right should be one partition
            vec![
                Distribution::SinglePartition,
                Distribution::SinglePartition,
            ]
        }

temporarily If we can not support executing multi times for one physical executor for the same partition.
It will not block your fix for the issue https://github.com/apache/arrow-datafusion/pull/4866
cc @ygf11

Thanks for response @liukun4515. I think I find the way to fix this bug.

In the current implementation, the left table is the outer table, the right table is the inner table.

IMOP, The relationship between inner/outer table and left/right table is not fixed, it is decided by the required distribution(join type).
For right/right-semi/right-anti joins,

left is the single partition side.
right is the multiple partition side.
the output partition count is the same as right table.

The algorithm will be like:
for x in 0..output-partition-count:
   join(right-partition(x), single-left-partition)

we can see left table will be visited one more time, and right table will be visited only once.
That means right is the outer table side, and left is the inner table side in nested loop join.

The inner table will be traveled many times in the most basic implementation.

Yes, visiting a relation many time is a common operation.
In datafusion, other physical plans also have similar requirement, like CrossJoinExec, it works well with OnceFut.
Currently the implementation will always add OnceFut for the left table, which is not correct(left table maybe outer table side).
I think if we correct add OnceFut for the inner table, the queries will success.
I create a new pr #5156 to fix this.


I don't have acccess to all functionality of the API

I can only load models through the loadModels() function, not the individual loading functions as described in the 'Usage' section of the repository. Any other function gives me errors such as "faceapi.nets.ssdMobilenetv1.loadFromUri is not a function".
I got the face-api.js file from the 'dist' folder and included that globally, is this an incorrect way of accessing the API?
(I am working with JS and React for the first time)

You are probably not using the latest version. If you are using react, then you probably use a bundler such as webpack, parcel etc. and can just npm install it to get the latest version.

Turned out I was indeed not using the latest version. I apologise for the stupid question and appreciate the quick response very much. Very cool repository!


[release-4.13] OCPBUGS-41931: Make localPref uniform among updates

These changes ensure that the local preference is unique among BGP ADVs with the same type of BGP update. It is still possible to have BGP ADVs with different values of localPref if the set of BGP peers are different. BGP ADVs with common BGP peers must not have common nodes. Checks are performed for BGP ADVs that have the same aggregation length.
Fixed #1739

/test all

/retest all

/test all

/retest-required

/jira refresh

@asood-rh  can you take a look, thank you

/approve

/label backport-risk-assessed

@asood-rh @fedepaol  there are some labels still missing, thank you

/label cherry-pick-approved

/lgtm


Update README & fix linting to 9.94/10

Updated the read me file and fixed some lint issues to raise the score to 9.95/10.

Can you remove the comment in test_models.py line 89? It will raise the make lint score to 9.95!
"# Todo: Add your test cases here"


Add missing types to User type

Type of change

[x] 🐛 Bug fix (non-breaking change which fixes an issue)
[ ] 🌟 New feature (non-breaking change which adds functionality)
[ ] 🔨 Breaking change (fix or feature that would cause existing functionality)
[ ] 📖 Docs change / refactoring / dependency upgrade to change)

Description

The User type is currently missing some values that come from the API and webhooks etc.
This is a WIP since its still missing the Web3Wallet struct, I'm unsure how you'd like this structure. I assume in a separate file or something?
Let me know how you'd like this structured/any changes you want!
Related Issue (optional)

N/A

Fixed in https://github.com/clerkinc/clerk-sdk-go/pull/93/files


UI redesigned for both modes and responsiveness made

Redesigned the UI for a smooth experience in both light and dark mode and made the site responsive for use in mobile devices.

Hey @nileshkr022 the overall changes are good, but can you enhance the Dark Mode a little bit more exclusive.
Along with the dark mode, also enhance the styling of these two which are mentioned in the red box in the below attached screen shot.

Hey @nileshkr022 the overall changes are good, but can you enhance the Dark Mode a little bit more exclusive.
Along with the dark mode, also enhance the styling of these two which are mentioned in the red box in the below attached screen shot.

Can you elaborate what kind of changes you expect in dark mode

@TheOpenInnovator I found this UI to be the best considering the eye strain people get by sitting hours in front of screen

@nileshkr022 Just make it more darker if possible, cause it seems like a shade of grey, so make it a shiny black which represents a premium dark theme UI

@nileshkr022 Just make it more darker if possible, cause it seems like a shade of grey, so make it a shiny black which represents a premium dark theme UI

I have made the dark more darker and added vibrant colors to timer so they stand out.


Failed to install a package from a public url on 0.1.33

since yesterday, we are experimented this issue
 > [worker  7/13] RUN uv pip install --system --no-cache -r /tmp/shipping/reqs/requirements-dev.txt:
0.416 error: Failed to download: pyrovider @ https://github.com/Shiphero/pyrovider/releases/download/1.2.4/pyrovider-1.2.4-py3-none-any.whl
0.416   Caused by: HTTP status client error (401 Unauthorized) for url (https://objects.githubusercontent.com/github-production-release-asset-2e65be/144867083/d56d51b0-fe2d-4eda-a5f2-8f9d6503ce92?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240418%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240418T144100Z&X-Amz-Expires=300&X-Amz-Signature=6b628fe5fc427071d8bc8bc84688ecda750075f74d01e4fc236ee4a1cc9eb9af&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=144867083&response-content-disposition=attachment%3B%20filename%3Dpyrovider-1.2.4-py3-none-any.whl&response-content-type=application%2Foctet-stream)

As you can see, the package is public
https://github.com/Shiphero/pyrovider/releases/download/1.2.4/pyrovider-1.2.4-py3-none-any.whl
Pinned uv to 0.1.32 worked for now, but is it related to the breaking changes introduced in the 0.1.33 releases? Do we need to upgrade something in our requirement file?

fwiw it seems to work okay on my machine
$ uv --version
uv 0.1.33 (2cee7525c 2024-04-17)
chan.kang@Chans-MBP-4123 ~/test/uv -
$ rm -rf .venv && uv venv && (echo 'pyrovider @ https://github.com/Shiphero/pyrovider/releases/download/1.2.4/pyrovider-1.2.4-py3-none-any.whl' | uv pip compile  - > requirements.txt) && uv pip install -r requirements.txt --no-cache
Using Python 3.12.1 interpreter at: /Users/chan.kang/.pyenv/versions/3.12.1/bin/python3
Creating virtualenv at: .venv
Activate with: source .venv/bin/activate
Resolved 3 packages in 52ms
Resolved 3 packages in 675ms
Downloaded 3 packages in 84ms
Installed 3 packages in 8ms
 + pyrovider==1.2.4 (from https://github.com/Shiphero/pyrovider/releases/download/1.2.4/pyrovider-1.2.4-py3-none-any.whl)
 + python-dotenv==1.0.1
 + pyyaml==6.0.1

btw, I just realized that this misbehavior looks a lot like #3122 and is probably related to the same root cause.

Hi team, I found an easy way to reproduce the issue
uv pip install 'uv-3123-bug<EMAIL_ADDRESS>
This is the output
$ uv pip install 'uv-3123-bug<EMAIL_ADDRESS>error: Failed to download: uv-3123-bug<EMAIL_ADDRESS>  Caused by: HTTP status client error (401 Unauthorized) for url (https://objects.githubusercontent.com/github-production-release-asset-2e65be/788539373/37fcd109-909c-4ed1-928c-2354c9a79a48?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240418%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240418T165731Z&X-Amz-Expires=300&X-Amz-Signature=01a9bf253fb9083fd65e5b37c8b366e6349ca078644a32bac2e309e7a7ea69b2&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=788539373&response-content-disposition=attachment%3B%20filename%3Duv_3123_bug-0.0.1-py3-none-any.whl&response-content-type=application%2Foctet-stream)

This is the pip behavior
$ pip install 'uv-3123-bug<EMAIL_ADDRESS>Collecting uv-3123-bug<EMAIL_ADDRESS>  Downloading<EMAIL_ADDRESS>(2.7 kB)

[notice] A new release of pip is available: 23.2.1 -> 24.0
[notice] To update, run: pip install --upgrade pip

I tried to reproduce the bug using a private repo, but I found that the issue happens even with public repositories with valid or invalid credentials.
I suspect the credentials are cached and we use the private credentials when we shouldn't (public repositories for example)

Thanks a bunch ya'll! Will investigate.

There is a regression in 0.1.33 where user/pass combo on custom repos no longer work. It is also affecting us here.

@inoa-jboliveira can you be more explicit? Providing a username and password doesn't work for a private repository anymore? This issue is for applying credentials from private repositories to public repositories.

@zanieb Yes, the credentials are being ignored. I tested 0.1.31 and 0.1.32 and they work.
This and UV_INDEX_URL no longer work with user/pass combo
uv pip install --index-url<EMAIL_ADDRESS>

I found in the logs that the cached credentials are used when it shouldn't (public repositories)
TRACE Sending fresh HEAD request for https://github.com/Shiphero/pyrovider/releases/download/1.2.4/pyrovider-1.2.4-py3-none-any.whl
TRACE Handling request for https://github.com/Shiphero/pyrovider/releases/download/1.2.4/pyrovider-1.2.4-py3-none-any.whl
DEBUG resolving host="github.com"
TRACE No credentials on request, checking cache...
TRACE Found cached credentials.
TRACE checkout waiting for idle connection: ("https", github.com)

Maybe this is a slightly different issue I'm having, but they seem to be caused by the same regression on v0.1.33

I think there are two things going on here:

We fixed our caching to actually apply per network location as intended in the original implementation, but this means we can apply credentials to requests that don't need it.
We stopped pre-seeding the cache with the URLs passed via the CLI, I think this is causing some sort of race condition where we don't apply credentials to some in flight requests because they're not cached yet.

If anyone is interested in trying out https://github.com/astral-sh/uv/pull/3130, it should resolve these issues but coming up with integration test cases is quite challenging and will take a bit longer.
We're also considering reverting the problematic change at #3131, though that will cause different regressions.

Hi @zanieb, I tested the changes and it works. Great job!

Seems to be working on my issue as well

Thanks for giving it a try! I'll get that cleaned up and try to release today.

This may go out on Monday instead.


Problems with PHP tags and Alpine.js dynamic classes

Hi!
I'd be super interested in getting this to work for me since I'm not much of a VSCode fan, but right now, your regex isn't picking up classes correctly and most of the time mangles the code I'm working on.  See this simple example with some alpine.js code sprinkled into it:
<button type="button" :class="{ 'active': open  }" @click="toggleOpenClose" class="group p-3 bg-white text-black hover:bg-black hover:text-white header-toggle">
    <?=__('Toggle navigation', 'lang'); ?>
    <?php echo wp_svg('menu', 'w-12 h-auto fill-current'); ?>
</button>

Becomes this:
<button type="button" :class="bg-white text-black p-3 'active': @click="toggleOpenClose" class="group header-toggle hover:bg-black hover:text-white open { }"">
    <?=__('Toggle navigation', 'lang'); ?>
    <?php echo wp_svg('menu', 'w-12 h-auto fill-current'); ?>
</button>

Might I suggest you sniff into Headwind's code and regexes? I could even create a pull request to add more proper regexes and parametrize them to allow customization in the settings 👀

Hi!
I will take a look.
Thanks for your feedback✌

Can confirm it breaks, not just PHP.


dask[complete]==2.3.0 installs distributed==2.5.2

It looks like dask[complete]==2.3.0 now installs distributed==2.5.2, whereas previously it installed distributed==2.3.0. This is causing an incompatibility with parse_bytes since it doesn't handle ints in 2.3.0. Tested on Python 3.7, OS X and Ubuntu 18.04. The output below shows cached packages, but the same result happens with --no-cache-dir.
(base) Henrys-MacBook-Pro:workspace henry$ python3 -m venv .testdask
(base) Henrys-MacBook-Pro:workspace henry$ source .testdask/bin/activate
(.testdask) (base) Henrys-MacBook-Pro:workspace henry$ pip install dask[complete]==2.3.0
Collecting dask[complete]==2.3.0
  Using cached https://files.pythonhosted.org/packages/63/c2/6b0607f6d6c8028a8ad2767c550439dfb81e3db42d1b43c172ff9f471861/dask-2.3.0-py3-none-any.whl
Collecting partd>=0.3.10; extra == "complete" (from dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/8b/17/09c352519da1db31634979c3aa9126078e9ece0f561c5f641e0649b78905/partd-1.0.0-py2.py3-none-any.whl
Collecting cloudpickle>=0.2.1; extra == "complete" (from dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/c1/49/334e279caa3231255725c8e860fa93e72083567625573421db8875846c14/cloudpickle-1.2.2-py2.py3-none-any.whl
Collecting numpy>=1.13.0; extra == "complete" (from dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/b4/e8/5ececadd9cc220bb783b4ce6ffaa9266925d37ed41237bc23bc530ab4f3d/numpy-1.17.2-cp37-cp37m-macosx_10_6_intel.whl
Collecting distributed>=2.0; extra == "complete" (from dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/3d/4a/1d1b356c16cefce3e91237b5e10b3e992d480414ade26493730c75d28ee0/distributed-2.5.2-py3-none-any.whl
Collecting fsspec>=0.3.3; extra == "complete" (from dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/95/2c/31fce3889ce89ec13e47201c71a0cb6d2ff6e5c7b5fed066fe0ac5c5e22b/fsspec-0.5.1-py3-none-any.whl
Collecting toolz>=0.7.3; extra == "complete" (from dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/22/8e/037b9ba5c6a5739ef0dcde60578c64d49f45f64c5e5e886531bfbc39157f/toolz-0.10.0.tar.gz
Collecting pandas>=0.21.0; extra == "complete" (from dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/39/73/99aa822ee88cef5829607217c11bf24ecc1171ae5d49d5f780085f5da518/pandas-0.25.1-cp37-cp37m-macosx_10_9_x86_64.macosx_10_10_x86_64.whl
Collecting bokeh>=1.0.0; extra == "complete" (from dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/89/25/a07183dd96ca22dafe429254985cbf8241ccd35730c5568d6502b3bc6bb7/bokeh-1.3.4.tar.gz
Collecting locket (from partd>=0.3.10; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/d0/22/3c0f97614e0be8386542facb3a7dcfc2584f7b83608c02333bced641281c/locket-0.2.0.tar.gz
Collecting click>=6.6 (from distributed>=2.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl
Collecting tornado>=5 (from distributed>=2.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/30/78/2d2823598496127b21423baffaa186b668f73cd91887fcef78b6eade136b/tornado-6.0.3.tar.gz
Collecting pyyaml (from distributed>=2.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/e3/e8/b3212641ee2718d556df0f23f78de8303f068fe29cdaa7a91018849582fe/PyYAML-5.1.2.tar.gz
Collecting psutil>=5.0 (from distributed>=2.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/1c/ca/5b8c1fe032a458c2c4bcbe509d1401dca9dda35c7fc46b36bb81c2834740/psutil-5.6.3.tar.gz
Collecting msgpack (from distributed>=2.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/68/a6/18d0f681fa650a3ff10caf72cd04db1c602ebd74a3db25dc6d918b9943d7/msgpack-0.6.2-cp37-cp37m-macosx_10_14_x86_64.whl
Collecting tblib (from distributed>=2.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/64/b5/ebb1af4d843047ccd7292b92f5e5f8643153e8b95d14508d9fe3b35f7004/tblib-1.4.0-py2.py3-none-any.whl
Collecting sortedcontainers!=2.0.0,!=2.0.1 (from distributed>=2.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/13/f3/cf85f7c3a2dbd1a515d51e1f1676d971abe41bba6f4ab5443240d9a78e5b/sortedcontainers-2.1.0-py2.py3-none-any.whl
Collecting zict>=0.1.3 (from distributed>=2.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/64/b4/a904be4184814adb9dfc2e679c4e611392080a32726a657a34cab93b38c2/zict-1.0.0-py2.py3-none-any.whl
Collecting python-dateutil>=2.6.1 (from pandas>=0.21.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/41/17/c62faccbfbd163c7f57f3844689e3a78bae1f403648a6afb1d0866d87fbb/python_dateutil-2.8.0-py2.py3-none-any.whl
Collecting pytz>=2017.2 (from pandas>=0.21.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/87/76/46d697698a143e05f77bec5a526bf4e56a0be61d63425b68f4ba553b51f2/pytz-2019.2-py2.py3-none-any.whl
Collecting six>=1.5.2 (from bokeh>=1.0.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Collecting Jinja2>=2.7 (from bokeh>=1.0.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/65/e0/eb35e762802015cab1ccee04e8a277b03f1d8e53da3ec3106882ec42558b/Jinja2-2.10.3-py2.py3-none-any.whl
Collecting pillow>=4.0 (from bokeh>=1.0.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/a4/92/801710e21ede5f583c6bde61b25baa46ed16d9d77d74935e11b9a801cdd7/Pillow-6.2.0-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl
Collecting packaging>=16.8 (from bokeh>=1.0.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/cf/94/9672c2d4b126e74c4496c6b3c58a8b51d6419267be9e70660ba23374c875/packaging-19.2-py2.py3-none-any.whl
Collecting heapdict (from zict>=0.1.3->distributed>=2.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/b6/9d/cd4777dbcf3bef9d9627e0fe4bc43d2e294b1baeb01d0422399d5e9de319/HeapDict-1.0.1-py3-none-any.whl
Collecting MarkupSafe>=0.23 (from Jinja2>=2.7->bokeh>=1.0.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/ce/c6/f000f1af136ef74e4a95e33785921c73595c5390403f102e9b231b065b7a/MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl
Collecting pyparsing>=2.0.2 (from packaging>=16.8->bokeh>=1.0.0; extra == "complete"->dask[complete]==2.3.0)
  Using cached https://files.pythonhosted.org/packages/11/fa/0160cd525c62d7abd076a070ff02b2b94de589f1a9789774f17d7c54058e/pyparsing-2.4.2-py2.py3-none-any.whl
Installing collected packages: locket, toolz, partd, cloudpickle, numpy, click, tornado, pyyaml, psutil, msgpack, tblib, sortedcontainers, heapdict, zict, distributed, fsspec, six, python-dateutil, pytz, pandas, MarkupSafe, Jinja2, pillow, pyparsing, packaging, bokeh, dask
  Running setup.py install for locket ... done
  Running setup.py install for toolz ... done
  Running setup.py install for tornado ... done
  Running setup.py install for pyyaml ... done
  Running setup.py install for psutil ... done
  Running setup.py install for bokeh ... done
Successfully installed Jinja2-2.10.3 MarkupSafe-1.1.1 bokeh-1.3.4 click-7.0 cloudpickle-1.2.2 dask-2.3.0 distributed-2.5.2 fsspec-0.5.1 heapdict-1.0.1 locket-0.2.0 msgpack-0.6.2 numpy-1.17.2 packaging-19.2 pandas-0.25.1 partd-1.0.0 pillow-6.2.0 psutil-5.6.3 pyparsing-2.4.2 python-dateutil-2.8.0 pytz-2019.2 pyyaml-5.1.2 six-1.12.0 sortedcontainers-2.1.0 tblib-1.4.0 toolz-0.10.0 tornado-6.0.3 zict-1.0.0

And then testing out LocalCluster:
Python 3.7.4 (default, Aug 13 2019, 15:17:50)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.8.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from dask.distributed import LocalCluster

In [2]: cluster = LocalCluster(n_workers=4)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-593c65480d0c> in <module>
----> 1 cluster = LocalCluster(n_workers=4)

~/workspace/.testdask/lib/python3.7/site-packages/distributed/deploy/local.py in __init__(self, n_workers, threads_per_worker, processes, loop, start, host, ip, scheduler_port, silence_logs, dashboard_address, worker_dashboard_address, diagnostics_port, services, worker_services, service_kwargs, asynchronous, security, protocol, blocked_handlers, interface, worker_class, **worker_kwargs)
    197             asynchronous=asynchronous,
    198             silence_logs=silence_logs,
--> 199             security=security,
    200         )
    201

~/workspace/.testdask/lib/python3.7/site-packages/distributed/deploy/spec.py in __init__(self, workers, scheduler, worker, asynchronous, loop, security, silence_logs, name)
    240         if not self.asynchronous:
    241             self._loop_runner.start()
--> 242             self.sync(self._start)
    243             self.sync(self._correct_state)
    244

~/workspace/.testdask/lib/python3.7/site-packages/distributed/deploy/cluster.py in sync(self, func, asynchronous, callback_timeout, *args, **kwargs)
    160             return future
    161         else:
--> 162             return sync(self.loop, func, *args, **kwargs)
    163
    164     async def _logs(self, scheduler=True, workers=True):

~/workspace/.testdask/lib/python3.7/site-packages/distributed/utils.py in sync(loop, func, callback_timeout, *args, **kwargs)
    331     if error[0]:
    332         typ, exc, tb = error[0]
--> 333         raise exc.with_traceback(tb)
    334     else:
    335         return result[0]

~/workspace/.testdask/lib/python3.7/site-packages/distributed/utils.py in f()
    315             if callback_timeout is not None:
    316                 future = gen.with_timeout(timedelta(seconds=callback_timeout), future)
--> 317             result[0] = yield future
    318         except Exception as exc:
    319             error[0] = sys.exc_info()

~/workspace/.testdask/lib/python3.7/site-packages/tornado/gen.py in run(self)
    733
    734                     try:
--> 735                         value = future.result()
    736                     except Exception:
    737                         exc_info = sys.exc_info()

~/workspace/.testdask/lib/python3.7/site-packages/distributed/deploy/spec.py in _start(self)
    262             self.scheduler_spec = {"cls": Scheduler, "options": {"services": services}}
    263         self.scheduler = self.scheduler_spec["cls"](
--> 264             **self.scheduler_spec.get("options", {})
    265         )
    266

~/workspace/.testdask/lib/python3.7/site-packages/distributed/scheduler.py in __init__(self, loop, delete_interval, synchronize_worker_interval, services, service_kwargs, allowed_failures, extensions, validate, scheduler_file, security, worker_ttl, idle_timeout, interface, host, port, protocol, dashboard_address, preload, preload_argv, **kwargs)
    883             self.idle_timeout = None
    884         self.time_started = time()
--> 885         self.bandwidth = parse_bytes(dask.config.get("distributed.scheduler.bandwidth"))
    886         self.bandwidth_workers = defaultdict(float)
    887         self.bandwidth_types = defaultdict(float)

~/workspace/.testdask/lib/python3.7/site-packages/dask/utils.py in parse_bytes(s)
   1162     ValueError: Could not interpret 'foos' as a byte unit
   1163     """
-> 1164     s = s.replace(" ", "")
   1165     if not s[0].isdigit():
   1166         s = "1" + s

AttributeError: 'int' object has no attribute 'replace'

@henryre thank you for the report.  I've verified this is a problem if you are only defining dask[complete]==2.3.0.   A few question for immediate concerns:

Is this critical for you ?
Would it be acceptable to also pin distributed==2.3.0 when installing as you noted ?

For future concerns I'm not sure what is best here for pip users ?  One could update the setup.py but that doesn't work for all cases as there can be improvements/bug fixes in distributed users should be pushed towarad.  It's also worth noting thta the conda recipe for dask 2.3.0 uses distributed >=2.3.0  .  @jcrist @TomAugspurger do you have thoughts here ?

We use >= versioning, since this is often what users want. dask and distributed are separate packages - if you want a specific version of anyone of them you should pin the version. Usually a difference of a minor version or two shouldn't result in any failures, we rarely have tight coupling between the two packages. In this case something did break since we moved some utilities into dask proper.
I don't think we want to change things here - usually you don't want exact pinnings, as flexibility makes things easier for users in the case of bugs. Since things usually are fine I'm tempted to mark this issue as unfortunate but easily fixed on the user's end by pinning both dask and distributed.

I understand that this can be fixed by users quite easily. However, shouldn't distributed 2.5 depend on dask 2.5? Currently, it depends on dask >= 2.3 (https://github.com/dask/distributed/blob/master/requirements.txt#L3).

Hi @quasiben @jcrist thanks for following up. I'm unblocked, was able to upgrade with a few fixes, but figured this was worth reporting either way. Just my 2 cents: regardless of what packages you'd expect dask[complete]==2.3.0 to install, I would at least expect to be able to initialize a LocalCluster if I installed dask[complete]==2.3.0. Since plenty of folks pin exact versions (needed to change some other code to upgrade 2.3 -> 2.5), it might be worth documenting this and recommending that people pin the specific libraries. Happy to close this out.

However, shouldn't distributed 2.5 depend on dask 2.5? Currently, it depends on dask >= 2.3

Yeah, this is definitely a bug. Will fix.

I would at least expect to be able to initialize a LocalCluster if I installed dask[complete]==2.3.0.

Since we use >= dependencies (as recommended) things should work if you install dask[complete]==2.3.0 only when that's the latest release. They likely work after this, but as dependencies release the chances of a breakage increase. As with all python packaging, pinning your dependencies as a user is recommended.

See dask/distributed#3124 for fixing distributed's dependencies. I'm going to close this for now, thanks for reporting!


[Logging v2] Change Syslog Output "transport" to be a dropdown menu

@izaac and I believe that the "Transport" string isn't intuitive and can cause unassuming breakages in setting up the new syslog plugin.
Currently, the "transport" string field defaults to "tls", which is not immediately obvious. Having a dropdown menu with the following three options would be best.

tls
udp
tcp

Reference: https://banzaicloud.com/docs/one-eye/logging-operator/configuration/plugins/outputs/syslog/

This is more of a question than a request: is it possible to have a fourth "other" option that enables a text box for manual string input? I can see how that would be useful, useless, or unwanted, but I thought I'd ask.

Rancher version: master-head (12/15/2020) e971e07
Validated the dropdown has the three options shown tls, tcp, udp. And tls being the default as the chart.
The generated yaml was valid.


Custom worldgen defaults are not enable.

(P2 meant TFC still use them default setting)

that is not how those methods are used, in your case you should have either
TFCEvents.defaultWorldSettings(event => {
  event.setSpawnDistance(2000)
  event.setSpawnCenterX(5000)
  event.setSpawnCenterZ(5000)
})

or, using beans
TFCEvents.defaultWorldSettings(event => {
  event.spawnDistance = 2000
  event.spawnCenterX = 5000
  event.spawnCenterZ = 5000
})

All  right, thanks.


[Bug]: Is conda-forge environment sufficiently constrained?

Bug Report Criteria

[X] Bug is not related to a data quality issue(s) beyond the scope of xCDAT
[X] Bug is not related to core xarray APIs (please open an issue in the xarray repo if it is)

What happened?
Received an error on import of xcdat after attempting to create a joint CDAT / xcdat environment.
What did you expect to happen?
Since the environment built, I expected to be able to execute both xcdat and CDAT without issue (this was possible in the past).
I'm kind of confused...it seems like an environment should not be built with Python 3.7 (but this conda environment is using python 3.7).
Minimal Complete Verifiable Example
# create CDAT/xcdat environment (MacOS)
conda create -y -n cdat -c conda-forge -c cdat/label/v8.2.1 cdat "libnetcdf=*=mpi_openmpi_*" "mesalib=17.3.9" "python=3.7" xcdat

# activate environment
conda activate cdat

# execute python with single statement: "import xcdat"
python -c "import xcdat"

Traceback (most recent call last):
File "", line 1, in
File "/Users/pochedley1/miniconda3/envs/cdat/lib/python3.7/site-packages/xcdat/init.py", line 2, in
from xcdat.axis import swap_lon_axis  # noqa: F401
File "/Users/pochedley1/miniconda3/envs/cdat/lib/python3.7/site-packages/xcdat/axis.py", line 3, in
from typing import Dict, Literal, Optional, Tuple
ImportError: cannot import name 'Literal' from 'typing' (/Users/pochedley1/miniconda3/envs/cdat/lib/python3.7/typing.py)

Relevant log output
No response
Anything else we need to know?

As noted from our exchange on Slack, typing_extensions is only need for Python < 3.8. However, those versions of Python are deprecated and 3.8 will soon be deprecated as well.
I will need to update the minimum Python version for xcdat to 3.8.
https://github.com/conda-forge/xcdat-feedstock/blob/5071957bd0d9c3a80ca20f73924722c4c94d877a/recipe/meta.yaml#L19-L23
I did notice in your example that your are explicitly installing Python 3.7.
conda create -y -n cdat -c conda-forge -c cdat/label/v8.2.1 cdat "libnetcdf=*=mpi_openmpi_*" "mesalib=17.3.9" "python=3.7" xcdat
Usually when you install a mix of packages, it will find the latest compatible versions of the common dependencies. In this case, I think conda will resolve Python to 3.9/3.10. Maybe give that a shot and see if the environment builds without dependency conflicts.

Thanks @tomvothecoder. I had experimented with other setups, but it does seem like dropping python=3.7 creates an environment that works for both CDAT and xcdat.
@jasonb5 - since python=3.7 is specified in the CDAT install instructions, do you see any issue with this?

This GH issue is related to package conflicts between the CDAT package and Python >3.8.
Tests with CDAT and different Python versions:
CDAT + Python 3.8 -- successfully builds
conda create -y -n cdat_3.8 -c conda-forge -c cdat/label/v8.2.1 cdat "libnetcdf=*=mpi_openmpi_*" "mesalib=17.3.9" "python=3.8"

CDAT + Python 3.9 -- package conflicts
conda create -y -n cdat_3.9 -c conda-forge -c cdat/label/v8.2.1 cdat "libnetcdf=*=mpi_openmpi_*" "mesalib=17.3.9" "python=3.9"

Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: /
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.

CDAT + Python 3.10 -- package conflicts
conda create -y -n cdat_3.10 -c conda-forge -c cdat/label/v8.2.1 cdat "libnetcdf=*=mpi_openmpi_*" "mesalib=17.3.9" "python=3.10"

Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: |
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.

A problem with installing the entire CDAT package (per the instructions) vs. individual CDAT sub-packages is that there is a much higher chance of dependency conflicts. This is especially true with CDAT sub-packages who's dependencies aren't maintained. @jasonb5 can add to this.
The suggested alternative:
Install only the needed CDAT sub-packages for testing. A Python version (>=3.8) can be omitted and conda will chose the latest compatible version.
conda create -y -n cdat_xcdat -c conda-forge cdms2 cdutil genutil python=3.10 xcdat

**Tools such as E3SM diags and PMP list individual CDAT sub-packages as dependencies, rather than the CDAT package. This means package conflicts will be less of an issue in these tools. **

I tried:
conda create -y -n cdat_xcdat -c conda-forge cdms2 cdutil genutil python=3.10 xcdat
It successfully builds, including making a plot with vcs plot and save it in .png.
However, I tried to install nc-time-axis ("conda install -c conda-forge nc-time-axis") to plot the time series, and there are dependency conflicts.
With:
conda create -y -n cdat_3.8 -c conda-forge -c cdat/label/v8.2.1 cdat "libnetcdf==mpi_openmpi_" "mesalib=17.3.9" "python=3.8"
I got back some vtk errors.

Thank you very much @pochedls and @tomvothecoder for all your help with this (from the ticket submission to possible solutions!) and for your prompt feedback.

Hi @bonfils2, I built the conda environment using the first command (conda create -y -n cdat_xcdat -c conda-forge cdms2 cdutil genutil python=3.10 xcdat) followed by conda install -c conda-forge nc-time-axis with success. I had no issues with dependency conflicts there.
I didn't try to second command ( conda create -y -n xcdat_test -c conda-forge -c cdat/label/v8.2.1 cdat xcdat "libnetcdf==nompi_" "mesalib=18.3.1" ipython), but I wouldn't be surprised if dependency conflicts exist based on my previous comments in this GH issue.


CSS for links

Like phone numbers, very simple but could use improvement. Two fields: The link and a link description, provided by the user, but with a limited length. The link will be in an <a> tag.

We need more info on this. What should we change?

The idea is I'm just looking for a more aesthetically pleasing way of displaying data pairs. I'm not very gifted in this category, so I'm looking for input from you and your team. This goes for phone numbers as well. Specifically for links, there could be some CSS changing how they behave visually if you think it could improve the aesthetics of the page.

I understand both sides. I talked to @cjfreeze about this. We are going to go forward and just implement the default scaffolding HTML to show @cfroerup what data is going to be displayed. That should narrow down the problem. I close this issue for now.


What is all this noise, and can I disable it?

Subject. A bit too noisy - this in the logs every few minutes. Can it be disabled?

Please disable debug mode.

Sorry, lamer but how do I do that? Can't see anything in settings?

Seems like I was to quick here in my judgement; This issue is now correctly tracked in #79


adding thanks.dev as a sponsor button option

Code of Conduct

[X] I have read and agree to the GitHub Docs project's Code of Conduct

What article on docs.github.com is affected?
Is it possible to add thanks.dev to the list of sponsor options https://github.com/github/docs/blob/a9a9dd1f948b6e0257ed5da0a9b94cc1be2aa097/content/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/displaying-a-sponsor-button-in-your-repository.md
What changes are you suggesting?
add the option for thanks.dev
Platform: thanks.dev
Syntax: thanks_dev USERNAME
Additional information
No response

@nehzatarmin Hello! 👋 The best place to send your feedback regarding this feature request is to https://github.com/github/feedback/discussions ✨
If there's anything in the documents that you have suggestions for updating, please feel free to open an issue in this repo 💛


Sonoff 4CH or 4CH Pro

Is there any possibility of a demo bit of code being done for the 4CH sonoff? Tasmota has one  but I don't want to rely on a middleman device.
Thanks

Duplicate cos github bounced.

can you tell us how you did it?
Happy New Year


fix: prevent bug where procedure arguments is undefined

Types of changes

[ ] Chore (a non-breaking change which is related to package maintenance)
[x] Bug fix (a non-breaking change which fixes an issue)
[ ] New feature (a non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)

Description
Prevents the following error:
TypeError: procedureArgs is not iterable (cannot read property undefined)

This error most likely happens when the r19 server uses version >= 0.1.8 and the client uses < 0.1.8. 0.8.1 introduced support for multiple arguments, prompting the change to spread the procedure arguments.
Checklist:

[ ] My change requires an update to the official documentation.
[x] All TSDoc comments are up-to-date and new ones have been added where necessary.
[x] All new and existing tests are passing.

Codecov Report
Attention: 1 lines in your changes are missing coverage. Please review.

Comparison is base (c62d6e5) 83.84% compared to head (6619839) 83.80%.

Files
Patch %
Lines

src/handleRPCRequest.ts
80.00%
0 Missing and 1 partial :warning:

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@            Coverage Diff             @@
##           master      #12      +/-   ##
==========================================
- Coverage   83.84%   83.80%   -0.05%
==========================================
  Files          17       17
  Lines         842      846       +4
  Branches       66       66
==========================================
+ Hits          706      709       +3
  Misses        136      136
- Partials        0        1       +1

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

This change will not fix all cases. Verifying and handling client/server version differences is a better solution.


merge from konsum-frontend-svelte

.github/workflows/browser_ci.yml

chore: add ${{ matrix.os }} (jobs.test.runs-on)
chore: (jobs.test.strategy.matrix.firefox)
chore: (jobs.test.steps)

:tada: This PR is included in version 1.34.11 :tada:
The release is available on:

npm package (@latest dist-tag)
v1.34.11
GitHub release

Your semantic-release bot :package::rocket:


A single NumDiff class for DAM and AM

In GitLab by @cmastalli on Mar 6, 2019, 17:08
I see that NumDiff classes for DAM and AM are almost the same. The only different is that for AM you need to use State.diff, however we can make some parsing to let the class knows if that needed.
So why do we have two independent classes? Do I miss something?
I propose to have a single NumDiff class for DAM and AM. This is part of #79.

In GitLab by @nmansard on Mar 6, 2019, 17:17
removed milestone

In GitLab by @cmastalli on Mar 6, 2019, 17:24
changed the description

In GitLab by @nmansard on Mar 6, 2019, 21:56
I think the AMND uses data.xnext to make the finit diff, while DAMND uses data.xout.

In GitLab by @cmastalli on Mar 7, 2019, 08:47
That's right, however both values are returned by (DAM/AM).calc(data, x, u). So do you agree with having a single class?

In GitLab by @nmansard on Mar 7, 2019, 09:59
I dont think so: AMND is a AM, DAMND is a DAM. Not the same hierarchy.

In GitLab by @cmastalli on Mar 7, 2019, 12:57
I close this issue since we want to keep different hierarchies between DAM and AM. This is also pointing out here !138. Feel free to open it.

In GitLab by @cmastalli on Mar 7, 2019, 12:57
closed


Shortcut to write[needed and easy to implement QOL feature]

SO if i want to quickly scribble something from my laptop it's hard to write while pressing the trackpad maybe add an option to write using shortcut key, maybe i am not being clear let me give you an example
"If i press suppose option key or command key on my mac with one hand then just swipe on my trackpad it should register that as a indication to listen for mouse's position and draw however i swiped, or when you sign a pdf from your mac using preview app, when you have to sign you just click once on the spot and draw your signature on trackpad without it being pressed down at all times while writing"
and i think this can be easily implemented so please do this it would make it so much easier to write on laptops

@dwelle please pass this

I think this was requested once. Not against it (probably Alt/Option). But it might not be super simple to implement without bigger rewrites of the pointerdown/pointermove handler.

i see, this would have been sick tho


Minor optimization of accountHolds logic.

Nearly trivial cleanup spotted in the review of #1126.
Reviewers: @vinniefalco, @HowardHinnant

Relevant discussion: https://github.com/vinniefalco/rippled/commit/587eb5c791e8aabb39adace6a55cf6ee4253c49b#commitcomment-11755995

:+1:

Part of #1145 now


Max width menu

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 97.40%. Comparing base (f5b3cfa) to head (d98ed92).

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #133   +/-   ##
=======================================
  Coverage   97.40%   97.40%
=======================================
  Files          19       19
  Lines         154      154
  Branches       36       36
=======================================
  Hits          150      150
  Misses          4        4

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Add support for converting cargo auditable data to CycloneDX

I should probably also wire up quitters in there at some point, to provide a best-effort BOM when the binary doesn't contain any audit info. But that's for later.


build fail:PROJCRSParser.h:9:9: fatal error: 'proj_api.h' file not found

Version Information:

Projections iOS Version: 1.0.5
Projections iOS Source: CocoaPods
CocoaPods Version:1.11.3
Xcode Version:14.2.0
Device or Emulator:
iOS Version:
Other Relevant Libraries:

brew install automake
brew install libtool
pod repo update
pod install
xcodebuild -workspace 'proj-ios.xcworkspace' -scheme proj-ios build
proj-ios/PROJCRSParser.h:9:9: fatal error: 'proj_api.h' file not found
#import "proj_api.h"
^~~~~~~~~~~~
1 error generated.
** BUILD FAILED **

That's not something I can reproduce (on Cocoapods 1.12.1, Xcode 14.3.1).  Are you running this all from the base projections-ios cloned directory?  What is the output of the "pod install" command?  Should be something like:
$ pod install
Analyzing dependencies
Downloading dependencies
Installing crs-ios (1.0.4)
Installing proj4-ios (<IP_ADDRESS>)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `proj-ios.xcworkspace` for this project from now on.
Pod installation complete! There are 2 dependencies from the Podfile and 2 total pods installed.

After install, does the file exist at Pods/proj4-ios/src/proj_api.h?
Are you able to open (open proj-ios.xcworkspace) and build and/or run the tests in Xcode?
Anything else relevant in the xcodebuild output before that error?


[PRODX-24168]: Added tests for topBarItems

OnClick handler wasn't covered, because need to update mocks.

nClick handler wasn't covered, because need to update mocks.

Actually, you don't need to update the mocks in order to test the click handler.

👀

Can you think of how you can test that click handler?

Yes, I already know how to do this. You are right, no need to update extension.js. My fault😉


fill out submission forms?

not sure if theres something on DevPost we have to fill in.

#40 #74

this is optional, but i think its good to submit anyway there for visibility
https://nftvisionhack.devpost.com/

also to do

video
deck

https://nftvisionhack.devpost.com/
Choose your track and submit the required details as per the below instructions.
TRACK 1 - BUILD ON RARIBLE PROTOCOL
Publicly accessible code repo (i.e. Github)
A working Prototype (optional)
A slide deck explaining your solution
2-min video (optional)
TRACK 2 - NFT PAYMENT SOLUTIONS - By CIRCLE & USDC
Publicly accessible code repo (i.e. Github)
A working Prototype (optional)
A slide deck explaining the solution
2-min video (optional)
TRACK 3 - GAMING & NFTS - By IFPS & FILECOIN
Publicly accessible code repo (i.e. Github)
A working Prototype (optional)
A slide deck explaining the solution
2-min video (optional)
TRACK 4 - A SCALABLE NFT ART PROJECT
Your NFT art collection
A slide deck explaining the solution
A code repo (optional, if you have done technical work)
2-min video (optional)


Tokenize digits in notify history to prevent spamming

Normalize digits to prevent subtly changing numbers (increasing pids) from bypassing ratelimiting.
It only does this for numbers with a space in front of them, so this should not prevent notifications about different rooms from being sent.

This Pull Request has been merged by GitConsensus.
Vote Totals

Yes
No
Abstain
Voters

5
0
0
5

Vote Breakdown

User
Yes
No
Abstain

tedivm
✔

TheRealMaxion
✔

ags131
✔

dragoonreas
✔

sparr
✔

Vote Results

Criteria
Result

Has Quorum
True

Has Votes
True


using the latest version of ejs (v3)

ejs which used by this plugin is older than the latest major version(v3).  I want to use the latest version, how about to update ejs version ?
https://github.com/mde/ejs/releases
I modified while referencing the following PRs.

https://github.com/shama/grunt-ejs/pull/6
https://github.com/shama/grunt-ejs/pull/7

I kindly ask for your confirmation.

Thanks!

Released as 1.0.0


Fixes 4777: remove custom param in list candlepin products

Summary
We don't need the custom param defined to correctly query products here. I think I misunderstood how the parameter worked when I first implemented this.
Without this change, only custom products are included in the response, but we want to return custom and red hat products (which is the default behavior).
Testing steps
I tested the API call in stage so it should work there
To test locally:

Turn off devel_org in the config file
GET /api/content-sources/v1/subscription_check/ should return false
Turn on devel_org
GET /api/content-sources/v1/subscription_check/ should return true

https://issues.redhat.com/browse/HMS-4777


Diff tables with misplaced columns

With an optional :misplaced_col option to the Cucumber::Ast::Table#diff! method, one can ensure that column headings between the two tables are in the same order.
This is useful in a Cucumber step where you'd like to assert the exact contents of an HTML table, including structure. I ran into this in a JavaScript scenario where I test drag-and-drop column reordering.
The new option defaults to false so it should not break backwards compatibility.

Rebased against master.


feat: Cache SkParagraph between frames

I have only noticed very small improvements in my Windows, perhaps it will have a better impact on lower end devices.

Have yet to update tests, benchmarks and examples of torin accordingly.


added table properties, settings, examples

Added tables for field properties and settings, but not all of them are explained, I miss some knowledge of the big picture.
Overview
I restructured the content into tables, mimicking the organization of other pages of the documentation.
I also added two examples: one for creating a relationship field and the other for seeing various ways of populating a list field.
Nature of This Change

[ ] 🐛 Fixes a bug
[ ] 🚀 Implements a new feature
[x] 🛁 Rewrites existing documentation
[ ] 💅 Fixes coding style
[ ] 🔥 Removes unused files / code

I can't sign the developer agreement since the link shows a site with serious problems, it seems that clahub.com has been defaced


Update decompositions.py

this PR solves #354

Thanks for the PR! I think #354 requires some careful thinking on our side about how we want to do this. I think the question posed there is if the tensornetwork repo should offer more general decompositions of the form of tensor-trains/matrix product states for all backends. We are already offering (limited) support for matrix product states and tensor tensor-train decompositions of neural network layers. Full fledged support though should likely be implemented natively though, not through the use of third-party libraries.


HW Acceleration Feedback on Raspberry Pi 4

Wanted to give you feedback about setting up HW acceleration on the Pi 4. May be applicable to Pi 3 as well.
I followed the guide you posted, however it didn't start working until I did these 2 things below. The guide is missing a few libraries that need to be installed that are the full link you included. The performance/delays are pretty much the same, is it normal? It shows 20fps on the stream, I assume that is the frame rate of the video. Can we log the performance of the decoder/encoder as well? The CPU load fell from 140s to 41% though, which is nice.

I am running homebridge as a service with systemd. Which required a new "homebridge" user to be created. I had to give the homebridge user access to the GPU using sudo usermod -a -G video homebridge
Added gpu_mem=192 in /boot/config.txt . The default is 64 apparently, and was crashing to omx decoder.

@tasansal i'll give these a try to see if there is any improvement on my side. Are you using any add'l ffmpeg args in the homebridge config?

@tasansal i'll give these a try to see if there is any improvement on my side. Are you using any add'l ffmpeg args in the homebridge config?

Nope, using the parameters @nzapponi suggested. The audio is a little choppy I wonder if we can fix that. Did your work fine without those settings?

I think some of the initial slowness is due to SS servers which I find just have an absolutely abysmal amount of latency. But FWIW, with default libx264 (software only) I max out at ~9fps (using Pi 3), with omx I'm coming in at 19. And yea, not sure if stream itself is 20fps, the following log makes me think it is?
Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 20 fps, 20 tbr, 1k tbn, 40 tbc
Regarding @tasansal 's suggestions for the wiki, I think the first command is only needed for USB attached cameras, I did need to do the second item though. But this kinda stuff is into the weeds of compiling ffmpeg on a Pi, very much a "YMMV" situation...

Anyone care to share cameraOptions parameters that have worked for you? I haven't been able to get HW assist going on an rpi4. libx264 seems to be the only thing that works. I'm not even confident ffmpeg is happy for as much as i've mucked with it.
Also curious if i'm missing any of the hw codecs...
pi@homebridge-pi:~ $ ffmpeg -hwaccels
ffmpeg version N-95554-g9d711a9 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8 (Raspbian 8.3.0-6+rpi1)
configuration: .... .... ..... ..... .... ....
libavutil      56. 35.101 / 56. 22.100
libavcodec     58. 59.102 / 58. 35.100
libavformat    58. 33.100 / 58. 20.100
libavdevice    58.  9.100 / 58.  5.100
libavfilter     7. 65.100 /  7. 40.101
libswscale      5.  6.100 /  5.  3.100
libswresample   3.  6.100 /  3.  3.100
libpostproc    55.  6.100 / 55.  3.100
Hardware acceleration methods:
vdpau
vaapi
drm

Codecs aren’t the same thing as “hardware acceleration methods”. I believe your list looks correct, see https://trac.ffmpeg.org/wiki/HWAccelIntro
I actually tried both building FFmpeg (as in the guide) and installing using apt (they install to different locations so you can set config accordingly). My current config is:
                "sourceOptions": {
                    "-vcodec": "h264_mmal"
                },
                "videoOptions": {
                    "-vcodec": "h264_omx",
                    "-tune": false,
                    "-preset": false
                }

But if the issue is generally getting HA with FFmpeg working on your Pi, perhaps a thread better suited to another forum? (But let us know if you find anything helpful!)

At least on Raspberry Pi 4 and Raspbian Buster, there does not appear to be any need to compile your own ffmpeg to get hardware acceleration.  Once I bumped added my homebridge user to the video group (I am running homebridge as a service under systemd), and bumped up gpu_mem to 192 (thanks @tasansal !!!) , transcoding with h264_omx is working like a charm with the native ffmpeg from the raspbian buster apt repo.


Incompatibility Issue: JRMC/Dragon Block C

When i open the DBC character/item menu (it open when you press the left control key and E key) with the Backhand mod it ends up crashing...
https://dl.jingames.net/
crash-2023-05-04_15.05.22-client.txt
fml-client-latest.log
latest.log

DBC bugs are always tricky, but thankfully I got this one down. Thanks for the report! https://streamable.com/fu1d9t


The date parameter in onChange from DatePickerProps is differently typed in v7.0.0

Describe the bug
The date parameter in onChange when taken from DatePickerProps is type Date & [Date | null, Date | null] & Date[].
Before v7.0.0 , the date parameter in onChange from ReactDatePickerProps is typed depending on WithRange and WithMultiple so that types Date | null, Date[] | null or [Date | null, Date | null] were accepted.
onChange(
  date: WithRange extends false | undefined
    ? (WithMultiple extends false | undefined ? Date | null : Date[] | null)
    : [Date | null, Date | null],
  event: React.SyntheticEvent<any> | undefined,
): void;

However, in v7.0.0 the date parameter is now type Date & [Date | null, Date | null] & Date[].
To Reproduce
Sandbox link
Expected behavior
onChange from DatePickerProps accepts parameter date of type Date.
Screenshots

I think there is no bug or problem. So, it is not Date & [Date | null, Date | null] & Date[] as @arendora described.
The type depends on selectsRange and selectsMultiple.
It is Date | null or [Date | null, Date | null] or Date[] | null depending on selectsRange and selectsMultiple.
(
    | {
        selectsRange?: never;
        selectsMultiple?: never;
        onChange: (
          date: Date | null,
          event?:
            | React.MouseEvent<HTMLElement>
            | React.KeyboardEvent<HTMLElement>,
        ) => void;
      }
    | {
        selectsRange: true;
        selectsMultiple?: never;
        onChange: (
          date: [Date | null, Date | null],
          event?:
            | React.MouseEvent<HTMLElement>
            | React.KeyboardEvent<HTMLElement>,
        ) => void;
      }
    | {
        selectsRange?: never;
        selectsMultiple: true;
        onChange: (
          date: Date[] | null,
          event?:
            | React.MouseEvent<HTMLElement>
            | React.KeyboardEvent<HTMLElement>,
        ) => void;
      }
  );

@talatkuyuk That was my expectation as well. However, you can see in the sandbox link I provided, selectsRange and selectsMultiple are both undefined/falsy so the date parameter for onChange should be date: Date | null however the typing is instead Date & [Date | null, Date | null] & Date[]

@arendora, don't pass directly onChange of DatePickerProps in Props. Instead, set the type accordingly.
type Props = Omit<DatePickerProps, "onChange"> & {
  label: string;
  onChange: (date: Date | null) => void;
};

export const DatePickerComponent = ({
  label,
  onChange,
  ...datePickerProps
}: Props) => {
  const onChangeHandler = (
    date: Date | null,
    event?: React.MouseEvent<HTMLElement, MouseEvent> | React.KeyboardEvent<HTMLElement>
  ) => {
    handleChange(date);
  };

  return (
    <label>
      <span>{label}</span>
      <DatePicker {...datePickerProps} onChange={onChangeHandler} />
    </label>
  );
};

I appreciate the suggestion @talatkuyuk and it is a temporary workaround, however that just overrides the issue and I think the underlying type change should still be addressed.

@arendora, I don't think it is a temporary workaround, it should be as I explained. You pass a setState function to <DatePickerComponent /> as onChange prop, which is not an event handler for sure, and you shouldn't. I still think there is no issue about the type of onChange in the package. Sorry to say, you use the onChange prop in a wrong way. That is my conclusion.

@arendora The issue you're facing is because TypeScript doesn't know for certain the type should be Date | null. You can exercise the issue in your CodeSandbox by passing selectsRange={true} to your custom component. The type is inferred to be [Date | null, Date | null] which is incorrectly asserted to be Date in DatePickerComponent's onChangeHandler.
<DatePickerComponent
  selectsRange={true}
  onChange={(d) => {
    /* d: [Date | null, Date | null] */
  }}
  // …
/>

If you'd like to constrain your custom component to only allow single dates you'll need to constrain your props type. One way of doing this is:
type Props = DatePickerProps & {
  label: string;
} & {
  selectsRange?: never;
  selectsMultiple?: never;
};

With this change DatePickerComponent will know for certain that it's working with a single date.