Rune e2e tests on CI

What type of PR is this?
/kind feature

Any specific area of the project related to this PR?
/area CI
/area tests
What this PR does / why we need it:
Trying to run the e2e tests on github actions.
The tests have been added to an existing workflow that already builds the userspace library and the drivers in an effort to make them a bit faster than rebuilding everything from scratch.
Additionally, a number of mounts and options have been added to the container running the tests, those are needed for everything to build using the headers from the host and allowing the tests to insert and remove the drivers.
The auto-generated report for the tests is automatically uploaded to GH, for ease of debugging in case of an error.
I've also excluded the minimal build from the current tests, I'm not sure this build would work with the e2e tests.
Which issue(s) this PR fixes:

Fixes #
Special notes for your reviewer:
Does this PR introduce a user-facing change?:

NONE

@Molter73: The label(s) area/ci cannot be applied, because the repository doesn't have them.

In response to this:

What type of PR is this?
/kind feature
Any specific area of the project related to this PR?
/area CI
/area tests
What this PR does / why we need it:
Trying to run the e2e tests on github actions.
The tests have been added to an existing workflow that already builds the userspace library and the drivers in an effort to make them a bit faster than rebuilding everything from scratch.
Additionally, a number of mounts and options have been added to the container running the tests, those are needed for everything to build using the headers from the host and allowing the tests to insert and remove the drivers.
The auto-generated report for the tests is automatically uploaded to GH, for ease of debugging in case of an error.
I've also excluded the minimal build from the current tests, I'm not sure this build would work with the e2e tests.
Which issue(s) this PR fixes:
Fixes #
Special notes for your reviewer:
Does this PR introduce a user-facing change?:
NONE

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

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: Molter73
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS [Molter73]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Just an FYI, I might be pushing a few garbage commits until I get CI to work properly, I'll squash them all once I'm done testing.

Thanks for your pull request. Before we can look at it, you'll need to add a 'DCO signoff' to your commits.
:memo: Please follow instructions in the contributing guide to update your commits with the DCO
Full details of the Developer Certificate of Origin can be found at developercertificate.org.
The list of commits missing DCO signoff:

27e4139 More testing

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

Thanks for your pull request. Before we can look at it, you'll need to add a 'DCO signoff' to your commits.
:memo: Please follow instructions in the contributing guide to update your commits with the DCO
Full details of the Developer Certificate of Origin can be found at developercertificate.org.
The list of commits missing DCO signoff:

27e4139 More testing
fc6385d D'oh

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

Thanks for your pull request. Before we can look at it, you'll need to add a 'DCO signoff' to your commits.
:memo: Please follow instructions in the contributing guide to update your commits with the DCO
Full details of the Developer Certificate of Origin can be found at developercertificate.org.
The list of commits missing DCO signoff:

27e4139 More testing
fc6385d D'oh
34ecabb More debugging

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

Thanks for your pull request. Before we can look at it, you'll need to add a 'DCO signoff' to your commits.
:memo: Please follow instructions in the contributing guide to update your commits with the DCO
Full details of the Developer Certificate of Origin can be found at developercertificate.org.
The list of commits missing DCO signoff:

27e4139 More testing
fc6385d D'oh
34ecabb More debugging

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

Thanks for your pull request. Before we can look at it, you'll need to add a 'DCO signoff' to your commits.
:memo: Please follow instructions in the contributing guide to update your commits with the DCO
Full details of the Developer Certificate of Origin can be found at developercertificate.org.
The list of commits missing DCO signoff:

27e4139 More testing
fc6385d D'oh
34ecabb More debugging
ae7de82 Run in the correct directory

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

Thanks for your pull request. Before we can look at it, you'll need to add a 'DCO signoff' to your commits.
:memo: Please follow instructions in the contributing guide to update your commits with the DCO
Full details of the Developer Certificate of Origin can be found at developercertificate.org.
The list of commits missing DCO signoff:

26dd51b fix(CI): dump e2e test reports to /tmp/ when running in CI

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

Alright, looks like it works and it is uploading the html reports, but I cannot find them anywhere, there might be either some configuration or permissions needed to access those artifacts.

/area CI

fixed :point_down:
/area CI

Hey @Molter73 , some changes have been introduced recently (https://github.com/falcosecurity/test-infra/pull/846) to require some of those checks at all PRs, so I would suggest to add e2e as an additional check since they're brand new and we want to try them out a little before making them mandatory, what do you think?

Alright, I'll get them moved over to their own workflow when I get a minute.

/milestone 0.10.0

Now they work over #643 :) https://github.com/Andreagit97/libs/tree/try_e2e.
There is a problem in the building with minimal_deps but I think it is related to the fact that in minimal_deps we don't have the BPF probe

Obviously not in this PR but we can start thinking to add also the modern probe to these tests, I've quickly checked the syscalls required and they seem to be all supported https://github.com/falcosecurity/libs/issues/513#issue-1321872767 :thinking:
If I understood correctly from the code it should be very simple to add also modern probe to these tests, WDYT?

Obviously not in this PR but we can start thinking to add also the modern probe to these tests, I've quickly checked the syscalls required and they seem to be all supported https://github.com/falcosecurity/libs/issues/513#issue-1321872767 🤔
If I understood correctly from the code it should be very simple to add also modern probe to these tests, WDYT?

It should be relatively straight forward, I haven't had time to check the fixes yet, but I'll add them as a follow up to this.

@Andreagit97 @LucaGuerra @FedeDP, the e2e tests seem to be back in a working order, I'd appreciate reviews to move this forward 🙂

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: FedeDP, Molter73
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS [FedeDP,Molter73]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

LGTM label has been added.  Git tree hash: 7d3469f8ff98dcb2319238f69c6caa99f979a820

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: FedeDP, LucaGuerra, Molter73
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS [FedeDP,LucaGuerra,Molter73]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

we need to remember to rebase before merging this kind of PR :rofl:


Thanks for this good news and a request...

@Alkl58
As the title goes... how good news to have someone geting a fresh updated version of rclonebrowser! Thanks for it!
My memory is becoming weak.... but I remember tasks being saved in a file that was not possible to "human" edit and that location parameters could not be specified, either of config files or the file itself, that is, are hard wired.
This brings two challenges, a kind of portability issue but more damaging the unability to use it with more than a single rclone configuration file. So, reclone broser tasks become linked to just one reclone config file.
Could I ask you to evolve the task file design so to allow selecting different task files?
Ideally, a task file should be somewhat linked to a rclone config.
On the other challenge, tasks file format avos human editing - such as with notepad - to copy paste and edit existing tasks. This could be solved with a simple offline program that would export current format to text based and able to create current format from text based. Perhaps normal text based task config file would be the easies path - really I cannot understand why current task file format was the choice of the author ...
From my point of view, this would open more the use of the tasks and bring the browser to its max..
Thanks for reading!

@caspertone2003 I haven't tried this version, but on Kapitainsky's version, when a job is running you can click on the copy icon of a given task to copy the commands to the clipboard. I've saved all my tasks this way to text files in case I want to run them from Windows Task Scheduler. You'd still have to manually re-create the task on a different machine, but you'd have a guide if you copied and stored the commands in a text file.

@DavidUXer
Thanks, I know you can get a copy of the command line that the tasks triggers. But as you point, you have to manually re-create the tasks. Perhaps the new task is just to download a different file or to mount a different drive. How convinient would be to clone tasks or to be able to edit the tasks config file...


[Multi-Tenant] Fix misc. github actions on feature branch

[ ] frontend
[ ] mock-account-servicing-entity
[ ] integration-tests

Closing as current multi-tenancy feature branch implements deprecated design.


Changing the --with-stdout behaviour so it works with non-init commands

Whilst testing out my compose v2 PR I noticed that commands like "./adop compose down" would fail because the list of compose file to use weren't being set (the variables being local to the init function), so it was defaulting and missing off the volume information (which in v2 is in both the main file, to declare it, and the override file, to define it).
This PR is a fix for this problem by allowing the -l flag to "./adop compose" to be set to "stdout" which will disable the logging driver override file entirely, and also to make the "./adop compose init --with-stdout" command align to this functionality. This means that "./adop compose init" followed by "./adop compose down" in Compose v2 will not error.
If #166 is merged first this PR will need updating, and vice versa.

Not expected, and admittedly not tested without -d, so I'll give it another pass and see what I missed/broke.
Thanks!

I've figured it out! So, what is happening is I've actually made that function work the way it is meant to which means that when doing an "up" it's just doing that against the ELK compose file and that's all it'll run.
This of course means that you don't actually have all of the services running, and you can't access them either due to a lack of Nginx, so I'll put in some logic that will make it run ELK with "up -d" instead so that the main stack is up'd.
Basically being bitten by the double "docker-compose" here: https://github.com/Accenture/adop-docker-compose/blob/master/cmd/compose#L290

Added a fix for the issue with "up", I'll squash it down assuming it works.
Basically if the requested command for run_compose is "up" it'll check if the array contains "-d" and if it doesn't add it on just for ELK - that way we always launch ELK independently before proceeding with the main Compose file. There's not much point allowing a regular "up" on the ELK stack because it won't be reachable without Nginx anyway.

I think this is ready for another review. Open to suggestion/opinion on whether it should be squashed or not as the two commits can stand on their own and could have potentially been separate PRs.

Both of the following commands work as expected, no issues found.
/adop compose -m ADOP-PR-181 init --with-stdout

./adop compose -m ADOP-PR-181 -l stdout up

@nickdgriffin : Please rebase your branch as it is out of date.
Will test it again after rebase.

@subodh-hatkar Done!


Define ReprMixin

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

Comparison is base (feb18d5) 100.00% compared to head (d2d534f) 100.00%.
Report is 22 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main       #24   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files            8         8
  Lines          207       227   +20
=========================================
+ Hits           207       227   +20

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


smart set globally?

Hi,
Just going through and adding smart: true to all our pollers I tried adding it to the pollerConfig as true, that didn't work and checked the source code. Might be helpful to let it be set globally :)

Good point! Will add it in the next release :)

Merged! Thanks for contributing.
Will release it in v0.3.4.


Accelerate not using multiple gpus

Hi,
I'm using trying to use Accelerate to train models on a multi-gpu aws machine but I find not all GPUs was utilized. My customized script looks pretty standard
accelerator = Accelerator()
self.model, optimizer, self.train_dataloader, scheduler = self.accelerator.prepare(
            self.model, optimizer, self.train_dataloader, scheduler
)
for epoch in range(self.epochs):
    self.model.train()
    for input_ids, attention_masks, labels in self.train_dataloader:
        model_output = self.model(input_ids, attention_masks, labels=labels)
        optimizer.zero_grad()
        loss = model_output.loss
        self.accelerator.backward(loss)
        optimizer.step()
        scheduler.step()

During train loops, it's obvious that only the first GPU is utilized when i check nvidia-smi
My hypothesis is that accelerator = Accelerator() doesn't automatically employ a distributed training without additional configs. I can accelerate config to generate that config but I can't find a way to pass that config to the Accelerator object.
Test is a success! You are ready for your distributed training!

You need to run the script via accelerate launch or torchrun. Using raw python will not do.
You can also use the argparse methods directly from accelerate/src/commands/launch.py, see these tests for a rough idea: https://github.com/huggingface/accelerate/blob/main/tests/test_cli.py#L235

I understand I should use accelerate launch to trigger the script but that script is a part of a whole Dagster pipeline so that option is not feasible to me.

This seems to be the crucial part. I haven't used Dagster, could you explain what kind of constraint it places on running scripts. Would it be possible to run scripts with python -m?

Thanks for helping out both! Yeah I believe that's the reason. Dagster is a workflow orchestration tool like Airflow. The training script is encapsulated in a Dagster Asset and the whole DAG is managed by the scheduler. I'm looking into ways to customize the underlying "python runner" but if there's way to do this just with code, please let me know.

I'm wondering if notebook_launcher could be useful here?

I'm looking into ways to customize the underlying "python runner" but if there's way to do this just within code, please let me know.

Maybe this could be helpful: https://github.com/huggingface/accelerate/blob/82369c831408760787881e032161c4406d66d0bb/src/accelerate/commands/launch.py#L633


Dev spike - Investigate aligning data elements column header text

ISSUES
On pages showing lists of data elements - i.e Datasets pages, Concepts pages, the 'My list' page - there are two issues:

The column header text for 'Sensitivity' and 'Identifiability' is slightly misaligned with the rest of the column headers.
The final column, 'Values' needs to be widened so the words 'Codeset' and 'Alphanumeric' don't wrap over two lines.

Suggested changes:

Change the css rules for the tooltip as follow:

font size from "19px" to "16px"
margin-left from "8px" to "2px"
padding from "3px 12px 0" to "1px 8px 0"

For the final column, change the css rule for that column to "word-break: keep-all;", so that it will not break a word in half.

@cacquani that looks good. A couple of minor things:

Could we make the 'i' icons just slightly smaller?
Could you show me how it looks on the 'My list' page?

Thanks
Dave

New screenshot of the 'My List' page after making the 'i' icon smaller:

Ticket moved to 'Done' and closed. Ticket #617 raised to implement the changes.


luci-app-ipsec-server  无法安装

通过第三方源 openwrt_kiddin9 https://op.supes.top/latest/packages/aarch64_generic 下载，依赖始终不全
Collected errors:
* pkg_hash_check_unresolved: cannot find dependency ucode-mod-html for luci-base
* pkg_hash_check_unresolved: cannot find dependency strongswan for luci-app-ipsec-server
* pkg_hash_check_unresolved: cannot find dependency strongswan-minimal for luci-app-ipsec-server
* pkg_hash_check_unresolved: cannot find dependency strongswan-mod-kernel-libipsec for luci-app-ipsec-server
* pkg_hash_check_unresolved: cannot find dependency strongswan-mod-openssl for luci-app-ipsec-server
* pkg_hash_check_unresolved: cannot find dependency strongswan-mod-xauth-generic for luci-app-ipsec-server
* pkg_hash_fetch_best_installation_candidate: Packages for luci-app-ipsec-server found, but incompatible with the architectures configured
* opkg_install_cmd: Cannot install package luci-app-ipsec-server.
剩下个 iptables-mod-ipsec 依赖没找到..

你反馈的到底跟istore有什么关系？自己手动安装的插件又不是istore提供的。如果是istoreos的问题请到istoreos的issue反馈


Don't require template to exist for delete/apply

Currently the validation requires template to exist - this is a problem if it's generated (e.g. from cloudformation deploy)

Same goes for apply


[10.x] Fix issues with updated_at

Fixes an issues with https://github.com/laravel/framework/pull/47942

❤❤❤


Shayne michael bacik1 patch 1

Merge / deployment checklist

[ ] Confirm this change is backwards compatible with existing workflows.
[ ] Confirm the readme has been updated if necessary.
[ ] Confirm the changelog has been updated if necessary.

Closing this. If you want to continue working on this PR, then please explain its purpose.


[New game]: Which color

🎮 Game Request
The color name will be displayed but with different colors, you have to tell the name of the color in which the color name is displayed
Point down the features
Made using HTML CSS JS
Score feature
Select program in which you are contributing
GSSoC23
Code of Conduct

[X] I follow CONTRIBUTING GUIDELINE of this project.

/assign

Hey @HarshP6421 !
Thank you for raising an issue 💗
You can self assign the issue by commenting /assign in comment 😀
Make sure you follow CODE OF CONDUCT and CONTRIBUTING GUIDELINES 🚀
Don’t Forget to ⭐ our GameZone🎮
Make sure you join our Discord🕹

Hey @HarshP6421 ! Thank you so much for your raising the issue💗
It’s all yours, you can come anytime again and make some contributions! 🚀
Alone, we can do little, but together we can do so much! 😇


shared_preferences not persistence succeeded

When I use shared_ Preferences，After the app exits  it enters again，The data read is null
the shared_preferences version is 0.5.12+4

@fangzhouguang
Please provide flutter doctor -v and a minimal complete reproducible code sample that shows the issue you are facing.
Thanks.

LoginPage:
///保存登录信息到本地
_saveLoginInfo(dynamic result) async{
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString("mobile", result['mobile']);
prefs.setString("cert", result['cert']);
prefs.setInt("time", result['time']);
prefs.setString("deviceId", _deviceData['host']);
_showToast('登录成功');
Navigator.pop(context);
}
OtherPage:
_getLoginInfo() async{
SharedPreferences _preferences =await SharedPreferences.getInstance();
String mobile=_preferences.getString("mobile");
print('mobile=$mobile');
}
notes:
If you don't exit the app, you can print out the mobile,but if After the app exits it enters again，The mobile read is null
flutter doctor -v:
[√] Flutter (Channel stable, 1.22.4, on Microsoft Windows [Version 6.1.7601], locale zh-CN)
• Flutter version 1.22.4 at E:\flutter
• Framework revision 1aafb3a8b9 (3 weeks ago), 2020-11-13 09:59:28 -0800
• Engine revision 2c956a31c0
• Dart version 2.10.4
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn
[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
• Android SDK at E:\sdk\sdk
• Platform android-29, build-tools 29.0.3
• Java binary at: D:\studio\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
• All Android licenses accepted.
[√] Android Studio (version 4.0)
• Android Studio at D:\studio
• Flutter plugin version 46.0.2
• Dart plugin version 193.7361
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
[√] Connected device (1 available)
• HMA AL00 (mobile) • 66J5T18A19017614 • android-arm64 • Android 10 (API 29)
• No issues found!

can you show the code so we can understand the problem better

@fangzhouguang
We would need a complete minimal code sample that we can copy paste and run in IDE that shows the issue.
Also, I tried the official shared_preferences plugin example on latest stable which worked properly without any issues. The data persisted across restarts and after stopping and running the app instance again.
You may want to check the plugin to see if you are missing anything in implementation.

Sorry, it's my problem. I called setmockinitialvalues on other pages, resulting in this result
Thanks.


Patch to fingerprint namedtuples.

As title. Should recover dispatch speed to nearer that of tuple.

Under the hood is this how numpy structured data is represented? Would those of us using numpy dtypes get benefit?

Under the hood is this how numpy structured data is represented? Would those of us using numpy dtypes get benefit?

This patch solely addresses instances of things inheriting from tuple, explicitly namedtuple, it won't impact anything else. There's fast path typecode lookups etc for common dtypes in the dispatcher already but not for structured dtypes.

TODO: benchmark this.

Nice work! I'd be curious how much of an improvement a previous PR of mine yields once this merges. https://github.com/numba/numba/pull/5840
One namedtuple-related question I've had for a while: Currently numba does not support subclasses of pt.NamedTuple which define methods.  For example,
class Point(typing.NamedTuple):
    x: int
    y: int

    def mag(self):
        return np.sqrt(self.x**2 + self.y**2)

Do you think it would be feasible to support these (maybe not in this PR)?

To check if this is actually fixing the problem.

Needs decref: https://github.com/sklam/numba/commit/e984eb9406e37d71b8243562d0df849ac92087ac

Here's a microbenchmark:
from numba import njit

from collections import namedtuple

@njit
def foo(x):
    return

for i in range(1, 8):
    n = 2**i
    print(f'n = {n}')
    tupcls = namedtuple("My", [f'f{x}' for x in range(n)])
    tup = tupcls(*range(n))
    foo(tup) #warmup
    %timeit foo(tup)

So, testing essentially the dispatch speed.
Results:
before PR:
n = 2
15.9 µs ± 540 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
n = 4
21.1 µs ± 1.11 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 8
30.6 µs ± 637 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 16
48.7 µs ± 1.51 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 32
87.7 µs ± 2.31 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 64
164 µs ± 3.49 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 128
312 µs ± 8.48 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

PR limit to namedtuple size 10
n = 2
865 ns ± 24 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
n = 4
1.08 µs ± 25.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
n = 8
1.34 µs ± 32.7 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
n = 16
51.9 µs ± 510 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 32
94.6 µs ± 3.23 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 64
178 µs ± 5.43 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 128
373 µs ± 19.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

PR unlimited nametuple size
n = 2
841 ns ± 27.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
n = 4
986 ns ± 7.32 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
n = 8
1.35 µs ± 60 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
n = 16
2.06 µs ± 81.7 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
n = 32
3.05 µs ± 132 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
n = 64
5.41 µs ± 206 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
n = 128
9.83 µs ± 413 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

I think it is worth making it unlimited.

Thanks for the review @sklam, using the benchmark above I see this on mainline @ 9381206
n = 2
40.8 µs ± 1.13 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 4
49.3 µs ± 38.9 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 8
66.9 µs ± 1.36 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 16
99.3 µs ± 830 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 32
165 µs ± 224 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
n = 64
296 µs ± 203 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
n = 128
567 µs ± 9.38 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

and this with this PR @ 32ae0f6
n = 2
1.32 µs ± 18.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
n = 4
1.56 µs ± 3.08 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
n = 8
2.02 µs ± 3.95 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
n = 16
3.08 µs ± 10.9 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
n = 32
4.9 µs ± 3.75 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
n = 64
8.8 µs ± 26.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
n = 128
16.2 µs ± 23.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

so this PR makes dispatch for namedtuple over an order of magnitude faster.

@EPronovost

One namedtuple-related question I've had for a while: Currently numba does not support subclasses of pt.NamedTuple which define methods. For example,
class Point(typing.NamedTuple):
    x: int
    y: int

    def mag(self):
        return np.sqrt(self.x**2 + self.y**2)

Do you think it would be feasible to support these (maybe not in this PR)?

I think it may be possible to support this at some point, but is out of scope for this PR, perhaps open a ticket with it as a feature request?

Needs decrefs. See patch sklam@e984eb9

Thanks, merged in.


No location on LineageOS 16

Hello,
I have been using your app on two different versions of LineageOS. Your app works fine on LineageOS 17 GSI, but cannot display my location on LineageOS 16. I am stuck for a few months on LOS 16 : how can I help with this bug ?
I have no error message, only 0°0'0.0" N 0°0'0.0"E for a location, 0m for altitude, and unknown precision. Everything else seems to work.
I have checked that Trail Sense is allowed to access my location, and I disabled battery optimizations.

Hi,
Can you try a few things for me?

Under Trail Sense's Settings click GPS and ensure auto adjust location is on and a location is visible at the top of the page
Can you confirm that the GPS is working fine in other applications?

Auto adjust is enabled, and my location is not visible at the top of the page.
Two of my other app can locate me just fine (Magicearth and Tisséo)

Thank you.
(I'm not familiar with the settings on Lineage OS, so this might not be available)
Can you option your phone's settings and check the status of the following:
Settings > Security > Location
Trail Sense does not use network provided location, so the value needs to be Device Only, or High Accuracy (at least that's what it used to be called on AOSP)
Let me know if that helps.
It may also be useful to see what happens if you set it to device only and then open another app which uses the GPS.

I checked Trail Sense's permissions, and it has "access precise location (GPS and network-based)" enabled. That sounds like "high accuracy".
In the notification menu, I have a notification switch that can be set on "High accuracy" (gps, wifi,bt,cell network), Battery saving (wifi,bt,cell) or "device only" (gps only)
In order to test more stuff, I downloaded and tested two more apps that have to use my location. Here is a summary of my tests :

On High accuracy, Geovelo, Tisséo, Magic Earth, and StreetComplete can locate me.
On Battery saving, only Tisséo can locate me.
On Device only, Geovelo and Tisséo can locate me.

Only trail sense fails to locate me.
I should have mentioned, I am using LineageOS with microG. That means Google's location service is replaced by (UnifiedNlp)[https://github.com/microg/UnifiedNlp].
I will report those strange behaviours to LOS16's devs, as I had no issue with Trail sense on a (extra experimenal) LOS17 build. The issue might be on the OS side, or how your app deals with microG. If it can help, I am using a Fairphone 3.

Thank you for the detailed information. I'll try to explore some reasons why Trail Sense isn't getting location in this case - and may end up adding a screen within Trail Sense to help with identifying issues like this.
Something to note is that Trail Sense does not use Google Play Services at all, and relies on the built-in Android location manager - so I wouldn't expect microG to be the problem.

Hi !
My problem got fixed with the latest update (1.2.1). My OS did not get updated. Thank you for the update :) Thank you also for your app in general I love the idea and the design !
I still cannot create a beacon with the "USE CURRENT LOCATION" button, but this is another issue and not a crucial functionality so I'm fine using paper. A nice option would be to be able to copy my coordinates to clipboard.

Glad to hear!
I would expect the USE CURRENT LOCATION button to work, as it uses the same GPS service as the location on the navigation tab. It should now display a loading indicator when it is trying to get a GPS fix. Does it work if you let it sit for a while? The timeout should be 8 seconds, but that's assuming GPS readings are coming in, just without a satellite count (or a low count).
Might be worth adding a full timeout to the GPS, which will use your last known location (if available) when there is no GPS signal (which is what the navigation tab does).


Make compatible with networkx>=2.0

Forward part to newer networkx - mostly obvious changes.
This so far breaks compatability with networkx<2.0, which I guess is
probably a bad thing.  I started working on that but it's not there
yet.

Backwards compatibility with networkx<2.0 now restored.  Ready for review.


[Question] why use 'useRef' instead of props

hi. i'm newbie frontend develop.
i have a question while studing your project
why did you use useRef in the below block? I think that it can also be used as props
Is it to deleting dependencies to hooks like useEffect?
https://github.com/MomenSherif/react-oauth/blob/176fe71b8f721b0dd42197d02041caa23ec42291/packages/%40react-oauth/google/src/GoogleLogin.tsx#L39-L43
sorry for my poor english skill

Yes to avoid adding onSuccess in dep array as it will be new function with every render as you will pass it as inline function which will cause the effect to run. And at the same time need to have reference for the onSuccess function without memoizing it so this trick can help achieve that


Support showing description and solution from text document

Solves #269, #286, https://github.com/jdneo/vscode-leetcode/issues/287#issuecomment-486041657
Relies on https://github.com/leetcode-tools/leetcode-cli/pull/13
Demonstration:

@Vigilans First of all, thank you for the enthusiasm you give.
One thing I have to mentions is that, please do not try to solve multiple issues in one PR. This very hard for tracking the issues.
Could you please revert this PR to make it only solve #287 first. And please let me know what I can do to help you achieve that.
Thanks.

#287 has already been solved in #289 4 days ago and wait for the leetcode-cli dependency update.
This three issues all point to the same thing(comment in #287 is duplicate of #286), and there is no meaning in splitting them: it will only result in a PR of 90% content and a PR with 10% content.

Could you please revert this PR to make it only solve #287 first. And please let me know what I can do to help you achieve that.

This PR doesn't solve #287

I see. I've added comments in #289.
But still, I would like to request you to split the PR even it's 10% + 90%. Thank you for your understanding.


[Snyk] Security upgrade node from hydrogen-buster to 20.12.2-slim

This PR was automatically created by Snyk using the credentials of a real user.Keeping your Docker base image up-to-date means you’ll benefit from security fixes in the latest version of your chosen image.
Changes included in this PR

Dockerfile

We recommend upgrading to node:20.12.2-slim, as this image has only 41 known vulnerabilities. To do this, merge this pull request, then verify your application still works as expected.
Some of the most important vulnerabilities in your base image include:

Severity
Priority Score / 1000
Issue
Exploit Maturity

500
Out-of-bounds Read SNYK-DEBIAN10-DB53-2825169
No Known Exploit

500
Out-of-bounds Read SNYK-DEBIAN10-DB53-2825169
No Known Exploit

400
Out-of-bounds Write SNYK-DEBIAN10-GLIBC-559488
No Known Exploit

500
Integer Overflow or Wraparound SNYK-DEBIAN10-ZLIB-6008964
No Known Exploit

500
Integer Overflow or Wraparound SNYK-DEBIAN10-ZLIB-6008964
No Known Exploit

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.
For more information:
🧐 View latest project report
🛠 Adjust project settings

Learn how to fix vulnerabilities with free interactive lessons:
🦉 Learn about vulnerability in an interactive lesson of Snyk Learn.

Fix Security upgrade node from hydrogen-buster to 20.12.2-slim


Add semantic token modifier for crate root

Resolves #9073
I managed to implement crate root highlighting for crates mentioned specifically by name (e.g. serde in use serde::Serialize;), but not for crates referred to with crate or super. How could I implement this?

Huh that seems odd, crate and super should go through that code path as well 🤔

So super and crate land in here https://github.com/rust-analyzer/rust-analyzer/blob/4f3ce62b0daeaca48cb8c7f3d26712a402c5c9b7/crates/ide/src/syntax_highlighting/highlight.rs#L184-L218
I think we just wanna skip them like we do for self here so that they are being handled as NameRefs and then change the highlight back to HlTag::Keyword as is done for self with SelfParam here
https://github.com/rust-analyzer/rust-analyzer/blob/4f3ce62b0daeaca48cb8c7f3d26712a402c5c9b7/crates/ide/src/syntax_highlighting/highlight.rs#L310-L314

We tagged the repo with hacktoberfest now so the label shouldn't be necessary anymore, if it is for some reason just drop a comment here


[ZEPPELIN-5654] Implement GCSNotebookRepo Move

What is this PR for?
This is to implement move function that is used for renaming notebooks and moving it to trash.
Currently it would result in a no op, making users unable to rename notebooks if using GCS as the notebook repository.
What type of PR is it?
Feature
What is the Jira issue?
https://issues.apache.org/jira/browse/ZEPPELIN-5654
How should this be tested?
CI
Screenshots (if appropriate)
Questions:

Does the licenses files need update? No
Is there breaking changes for older versions? No
Does this needs documentation? No?

Thanks for the contribution, @BagusThanatos Have you ever tested it in google cloud?

Awesome，@BagusThanatos PR LGTM, The CI is unstable recently, we are working it, will rerun the CI after the CI stable issue is fixed.

@BagusThanatos CI issue is fixed, could you rebase this PR to the latest master?

@zjffdu Done.

@zjffdu
It looks like some failures on frontend tests
Seems unrelated to this PR? :thinking:

@zjffdu
Please do!
Thanks!


Extend GenAI system well-known values

Add more well-known GenAI model providers to the list of possible values that the gen_ai.system attribute can take.
Changes
The following are added:

microsoft
huggingface
google
meta
anthropic
mistral
cohere

Note: if the PR is touching an area that is not listed in the existing areas, or the area does not have sufficient domain experts coverage, the PR might be tagged as experts needed and move slowly until experts are identified.
Merge requirement checklist

[ ] CONTRIBUTING.md guidelines followed.
[ ] Change log entry added, according to the guidelines in When to add a changelog entry.

If your PR does not need a change log, start the PR title with [chore]

[ ] schema-next.yaml updated with changes to existing conventions.

I think HuggingFace will be the most controversial one. It's neither a model provider nor a service provider. You can use its inference endpoint but for production people may use their dedicated endpoints, which can be hosted on Azure, AWS or GCP.

I removed some of the most controversial values. The remaining ones are known to have client SDKs.


Implement selection of tile from multiple best fitting ones

Sometimes the mosaic can be improved by not only using the best fitting tiles, but one of the few best matching ones.
This PR keeps track of all tile scores and updates the tile selection function to select one of multiple matching tiles.

Quick comment to say this simple approach gives acceptable results for me so far.


⚠ ClamAV has degraded performance

In c0a2dbb, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 79 ms

Resolved: ClamAV performance has improved in 5e858ce.


MSID: 100592 Version: 1 DOI: 10.1101/2<IP_ADDRESS>3511

MSID: 100592
Version: 1
Preprint DOI: https://doi.org/10.1101/2<IP_ADDRESS>3511
Step 1. Awaiting reviews
Editorial to post reviews via hypothesis
Useful links:

DocMap: https://data-hub-api.elifesciences.org/enhanced-preprints/docmaps/v2/by-publisher/elife/get-by-manuscript-id?manuscript_id=100592
New model tracking: https://docs.google.com/spreadsheets/d/1_fHaoOy7hjyocptKtVJRijeNpUY4hBS7Ck_aVmx6ZJk/
Reviews on sciety: https://sciety.org/articles/activity/10.1101/2<IP_ADDRESS>3511

For trouble shooting (e.g. no Docmaps available):

DocMap issue addressing: https://miro.com/app/board/uXjVNCwK6EI=/
Explore DataHub DocMaps API: https://lookerstudio.google.com/reporting/4c2f0368-babb-4beb-b5b3-497e7e7b0f08/page/ejphD
Unmatched submissions and preprints: https://lookerstudio.google.com/u/0/reporting/9f86204f-3bf7-477c-9b18-5c5ef141bf69/page/p_gxi57ha93c
Unmatched manuscripts spreadsheet: https://docs.google.com/spreadsheets/d/15QcK8w-ssB7109RQEDtFpJPZ0J5HTGxoHa_2TtpMBbg/edit#gid=1336081641

Step 2. Preview reviewed preprint
Production QC content ahead of publication
Instructions:

QC preview: https://prod--epp.elifesciences.org/previews/100592v1
Update ticket with any problems (add blocked label)
When QC OK, add QC OK label to ticket and add publication date and time to https://docs.google.com/spreadsheets/d/1amAlKvdLcaDp5W8Z8g77NmkwbMF5n_u89ArSqPMO8jg
Move card to next column
(At end of the day post link in #enhanced-preprint and ask for PDF to be generated)

Useful links:

Preprint DOI :  https://doi.org/10.1101/2<IP_ADDRESS>3511
Confirm reviews returned by EPP: https://prod--epp.elifesciences.org/api/reviewed-preprints/100592/v1/reviews
To update the MECA path in the docmap: https://docs.google.com/spreadsheets/d/1mctCQuNFBjSn97Lihy7_vBO6z7-N-oqyLv4clyi6zHg

Step 3: Awaiting search reindex
This step adds the reviewed preprint to the homepage: https://elifesciences.org
The search reindex is triggered once an hour. We need the reviewed preprint to be indexed as the search application serves the journal homepage.
Useful links:

Jenkins pipeline to reindex search can be triggered sooner or monitored here: https://alfred.elifesciences.org/job/process/job/process-reindex-reviewed-preprints/

Step 4: Published! PDF requested
Waiting for PDF to be generated
Useful links:

PDF tracking: https://docs.google.com/spreadsheets/d/106_XeDjmuBae7gexOTNzg60lapeqjl2aRn9DzupGyS8/

Step 5: Introduce PDF to data folder and git repo
Upload PDF to relevent folder in git repo https://github.com/elifesciences/enhanced-preprints-data/
Step 6: Done!

[ ] Kettle is on!


BIGTOP-3772: Add Solr support for Bigtop 3.1.0 Mpack

Description of PR
How was this patch tested?
For code changes:

[ ] Does the title or this PR starts with the corresponding JIRA issue id (e.g. 'BIGTOP-3638. Your PR title ...')?
[ ] Make sure that newly added files do not have any licensing issues. When in doubt refer to https://www.apache.org/licenses/

Tested it on Arm64/x86_64.
+1


Version of the ansible operator image with newer git

Feature Request
Is your feature request related to a problem? Please describe.
git-sync relies on worktrees to provide git repos. Centos 7's git does not seem to understand worktrees.
Describe the solution you'd like
I would like the ansible-operator image to contain a newer version of git (I don't know how new to be honest)
An interim fix for me that works is
FROM quay.io/operator-framework/ansible-operator:v0.7.0 AS operator

FROM alpine:3.9
COPY --from=operator /usr/local/bin /usr/local/bin
ENTRYPOINT /usr/local/bin/entrypoint
RUN apk add --no-cache git ansible python3
RUN apk add --no-cache -t .build-deps gcc musl-dev python3-dev linux-headers && \
    python3 -m pip install ansible-runner jmespath && \
    apk del .build-deps
RUN apk add --no-cache bash
USER 1001
ENV RUNNER_BASE_COMMAND ansible-playbook
ENV OPERATOR /usr/local/bin/ansible-operator
ENV USER_UID 1001
ENV USER_NAME ansible-operator
ENV HOME /opt/ansible

but I'd really rather not maintain my own image, it'll only get out of date.

Hi @willthames,
I am afraid that I could not understand what exactly you are looking for. Note that you can run operator-sdk build <image>:tag and your docker file will be created then you just need to push it.
Could you please describe what, when and why you are looking for? I will be very glad you with.

@camilamacedo86 I think @willthames is asking for a newer version of git than what we currently have in the Ansible operator base image for v0.7.0.
https://quay.io/repository/operator-framework/ansible-operator?tab=tags
operator-sdk build ... and docker push are used to build the operator image on top of that base image.
Deferring to the ansible-operator folks on this.
/cc @shawn-hurley @fabianvf

I believe the ansible operator image resolved this in version 0.10.0.
https://quay.io/repository/operator-framework/ansible-operator?tab=tags


Pass the exception to next node

Sometimes，only the fallback object is not enough， the next node need to know which exception happened to determine which action should do.

Is it not possible to use a custom type as the input for the next node? Something like an Either type, which either has an exception or the result of a successful calculation?


Update instructions for reporting label upload

The Teams Admin Center UI changed the text used in the flow for uploading reporting labels. Update the docs to match.

@tonysmit I don't seem to be able to add you as a reviewer, but can you take a look please?

@tonysmit I don't seem to be able to add you as a reviewer, but can you take a look please?

@JohanFreelancer9 Copy editing is needed for this PR. Thanks.

@tonysmit PR has been copyedited and is ready for final review, could you please check and merge? Thanks!


Yesterday’s word after midnight CET

When I refresh after midnight in Norway, the board is cleared and i can play. But the Word to find is the same as before midnight.
If I refresh later (at daytime) that day, the board first shows how I solved yeesterday’s game, and then «Riktig: <today’s Word>

It should be fixed now. Thank you so much for letting me know @sebastesnorvegicus

Thank you, midnight games work again!


fix: docker yarn run issues + cache

Description
Fixed docker run issues

sorry @is-it-ayush and @NullableDev I am merging this without your review but I need this fix to start working on my local
system


Airjet_V01 Support

It appears that I have a different version of the AirJet, identified as "Airjet_V01". The status values are different, but it appears that I have most(all?) of the values defined in BestwaySpaDeviceStatus. Is there a preferred method of adding support? I can try to add a new BestwayDeviceType.AIRJET_V01_SPA and do a pull request. Or I can provide a proposed mapping of values to function names (turn on feature, observe change, turn off feature, repeat)? Another method, somewhere in between?
Thank you for writing this integration! It appears well setup to abstract to an additional type.
The log message is: Status for unknown device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 792, "word4": 0, "word7": 34, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 792, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 93, "option7": 10260, "option4": 0, "option5": 27182, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 3, "Tunit": 0, "wave": 0, "word3": 0, "Tset": 104, "filter": 2, "E28": 0, "bit6": 1, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
My guess on some of the mappings (untested & not methodical, just looking at the names to start) is:
spa_power: power
temp_now: Tnow
temp_set: Tset
temp_set_unit: Tunit
heat_power: heat
heat_temp_reach:
filter_power: filter
wave_power: wave
locked:
errors:
earth_fault:

Did you ever get this worked out? I have the same model and would like to get it connected.

@dloveall I have the same problem/model here...

I tried modifying the api.py file with this, both upper and lower case:
try:
                if device_info.device_type == BestwayDeviceType.Airjet_V01:
                    errors = []
                    for err_num in range(1, 10):
                        if device_attrs[f"system_err{err_num}"] == 1:
                            errors.append(err_num)

                    spa_status = BestwaySpaDeviceStatus(
                        latest_data["updated_at"],
                        device_attrs["power"],
                        device_attrs["Tnow"],
                        device_attrs["Tset"],
                        (
                            TemperatureUnit.CELSIUS
                            if device_attrs["temp_set_unit"]
                            == "摄氏"  # Chinese translates to "Celsius"
                            else TemperatureUnit.FAHRENHEIT
                        ),
                        device_attrs["heat_power"] == 1,
                        device_attrs["heat_temp_reach"] == 1,
                        device_attrs["filter_power"] == 1,
                        device_attrs["wave_power"] == 1,
                        device_attrs["locked"] == 1,
                        errors,
                        device_attrs["earth"] == 1,
                    )

                    self._spa_state_cache[did] = spa_status
#next try
                elif device_info.device_type == BestwayDeviceType.AIRJET_SPA:
                    errors = []

but it throws an error:
2023-11-22 12:06:31.521 ERROR (MainThread) [custom_components.bestway.coordinator] Data update failed
Traceback (most recent call last):
  File "/config/custom_components/bestway/coordinator.py", line 37, in _async_update_data
    return await self.api.fetch_data()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/bestway/bestway/api.py", line 200, in fetch_data
    if device_info.device_type == BestwayDeviceType.Airjet_V01:
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/enum.py", line 784, in __getattr__
    raise AttributeError(name) from None
AttributeError: Airjet_V01

After a couple of reboots and restart of the hottub, I got past the errors and it now shows the correct type, but no controls:

I'm getting further... not sure how to handle
Unexpected missing key ''system_err1''
full error log:
2023-11-23 10:13:22.571 INFO (MainThread) [custom_components.bestway] Reusing existing access token
2023-11-23 10:13:22.954 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device Ykbs11pev7SBKLMDijT1De
2023-11-23 10:13:22.955 ERROR (MainThread) [custom_components.bestway.bestway.api] Unexpected missing key ''system_err1'' while decoding device attributes {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 0, "word4": 0, "word7": 32, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 0, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 90, "option7": 10260, "option4": 0, "option5": 27186, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 0, "Tunit": 0, "wave": 0, "word3": 0, "Tset": 104, "filter": 0, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2023-11-23 10:13:22.955 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.384 seconds (success: True)
2023-11-23 10:13:22.955 INFO (MainThread) [homeassistant.components.binary_sensor] Setting up binary_sensor.bestway
2023-11-23 10:13:22.956 INFO (MainThread) [homeassistant.components.climate] Setting up climate.bestway
2023-11-23 10:13:22.956 INFO (MainThread) [homeassistant.components.number] Setting up number.bestway
2023-11-23 10:13:22.957 INFO (MainThread) [homeassistant.components.sensor] Setting up sensor.bestway
2023-11-23 10:13:22.957 INFO (MainThread) [homeassistant.components.switch] Setting up switch.bestway
2023-11-23 10:13:22.959 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.bestway entity: sensor.bestway_protocol_version
2023-11-23 10:13:22.960 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.bestway entity: sensor.bestway_mcu_software_version
2023-11-23 10:13:22.962 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.bestway entity: sensor.bestway_mcu_hardware_version
2023-11-23 10:13:22.963 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.bestway entity: sensor.bestway_wi_fi_software_version
2023-11-23 10:13:22.967 INFO (MainThread) [homeassistant.helpers.entity_registry] Registered new sensor.bestway entity: sensor.bestway_wi_fi_hardware_version

as the "I never give up" kind of guy I am, I took my best stab at mapping those attributes and now I get this!
temps are right and I can turn  the power on /off. So, I'm clearly on the right track.  But, there's a Turkey that needs to be cooked, and it's calling my name.... it's Thanksgiving day here in the US.  Hopefully I can poke around more and find the right combination.

These are the changes I made to api.py at line 199:
           try:
                if device_info.device_type == BestwayDeviceType.AIRJET_V01:
                    errors = []
                    # for err_num in range(1, 10):
                    #     if device_attrs[f"system_err{err_num}"] == 1:
                    #         errors.append(err_num)
                    errors.append(1)

                    spa_status = BestwaySpaDeviceStatus(
                        latest_data["updated_at"],
                        device_attrs["power"],
                        device_attrs["Tnow"],
                        device_attrs["Tset"],
                        # (
                        #     TemperatureUnit.CELSIUS
                        #     if device_attrs["temp_set_unit"]
                        #     == "摄氏"  # Chinese translates to "Celsius"
                        #     else TemperatureUnit.FAHRENHEIT
                        # ),
                        TemperatureUnit.FAHRENHEIT,
                        device_attrs["heat"] == 1,
                        device_attrs["word3"] == 1,
                        device_attrs["filter"] == 1,
                        device_attrs["wave"] == 1,
                        device_attrs["bit6"] == 1,
                        errors,
                        device_attrs["bit5"] == 1,
                    )

                    self._spa_state_cache[did] = spa_status

and model.py at line 20:
    @staticmethod
    def from_api_product_name(product_name: str) -> BestwayDeviceType:
        """Get the enum value based on the 'product_name' field in the API response."""

        if product_name == "Airjet_V01":
            return BestwayDeviceType.AIRJET_V01
        if product_name == "Airjet":
            return BestwayDeviceType.AIRJET_SPA
        if product_name == "泳池过滤器":
            # Chinese translates to "pool filter"
            return BestwayDeviceType.POOL_FILTER
        return BestwayDeviceType.UNKNOWN

After this little experiment, I'm convinced that these attributes hold the key (but I could be wrong...):
"bit7": 1, "heat": 3, "Tunit": 0, "wave": 0, "word3": 0, "Tset": 104, "filter": 2, "E28": 0, "bit6": 1, "bit5":
0, "bit4": 0, "bit3": 0, "bit2": 0}

@cdpuk It would be helpful if there was a way to see the value of each changed attribute-value pair as I change something on the remote app.  Is there a way to expose that???  otherwise is a guessing game and there are too many variables to consider.

@jazzmonger nice work -- I got this to work on my end. I made a few updates (unit, heat, filter). Haven't tested the bubbles yet, will do so this weekend and update. I get error messages (400 bad request) when changing anything in HA - is this working for someone else?
These are my changes to api.py line 199: (on top of your changes to model.py)
`
try:
if device_info.device_type == BestwayDeviceType.AIRJET_V01:
errors = []
# for err_num in range(1, 10):
#     if device_attrs[f"system_err{err_num}"] == 1:
#         errors.append(err_num)
#errors.append(1)
                spa_status = BestwaySpaDeviceStatus(
                    latest_data["updated_at"],
                    device_attrs["power"],
                    device_attrs["Tnow"],
                    device_attrs["Tset"],
                    (
                        TemperatureUnit.CELSIUS
                        if device_attrs["Tunit"]
                        == 1
                        else TemperatureUnit.FAHRENHEIT
                    ),
                    # heat = 3 on, heat = 0 off
                    device_attrs["heat"] == 3,
                    device_attrs["word3"] == 1,
                    # filter is always on when heating
                    device_attrs["heat"] == 3 or device_attrs["filter"]==2,
                    device_attrs["wave"] == 1,
                    device_attrs["bit6"] == 1,
                    errors,
                    device_attrs["bit5"] == 1,
                )

                #attr_dump = json.dumps(device_attrs)
                #_LOGGER.warning(
                #    "Status for DEBUGGING device '%s' returned: %s",
                #    device_info.product_name,
                #    attr_dump,
                #)
                #self._unknown_states[did] = attr_dump
                self._spa_state_cache[did] = spa_status

`

Yes, I also get bad request when trying to update anything from HA, except on/off does work, so there's hope...

There is now v1.4.0-alpha1 published as a beta release via HACS. This groups together a bunch of tasks around device support, and should add support for any Airjet_V01 or Hydrojet devices. The data to get this working has been scraped together from a number of different sources and combined with a bit of guesswork.
I'd very much appreciate some testing against real devices to confirm what's working, in particular:

Check that changing options via the official app or spa is correctly reflected in HA
Check that changing settings via HA has the expected effect
Any feedback on missing features

Debug logging has also been extended to print out those attribute collections for known devices (previous this only happened for unrecognised devices). If anything doesn't work as expected, capturing these messages before and after device state changes will be essential.

Turning the filter AND the SPA on/off toggles I get
Failed to call service switch/turn_off. 400, message='BAD REQUEST', url=URL('https://usapi.gizwits.com/app/control/Ykbs11pev7SBKLMDijT1De')
2024-01-06 08:49:40.347 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [139736619893056] 400, message='BAD REQUEST', url=URL('https://usapi.gizwits.com/app/control/Ykbs11pev7SBKLMDijT1De')
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 238, in handle_call_service
    response = await hass.services.async_call(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2067, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2104, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/homeassistant/__init__.py", line 138, in async_handle_turn_service
    await asyncio.gather(*tasks)
  File "/usr/src/homeassistant/homeassistant/core.py", line 2067, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2104, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 272, in handle_service
    return await service.entity_service_call(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 903, in entity_service_call
    raise result from None
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1233, in async_request_call
    return await coro
           ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 948, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/bestway/switch.py", line 205, in async_turn_on
    await self.entity_description.turn_on_fn(self.coordinator.api, self.device_id)
  File "/config/custom_components/bestway/bestway/api.py", line 312, in hydrojet_spa_set_filter
    await self._do_control_post(device_id, filter_power=1 if filtering else 0)
  File "/config/custom_components/bestway/bestway/api.py", line 411, in _do_control_post
    return await self._do_post(
           ^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/bestway/bestway/api.py", line 422, in _do_post
    await _raise_for_status(response)
  File "/config/custom_components/bestway/bestway/api.py", line 86, in _raise_for_status
    response.raise_for_status()
  File "/usr/local/lib/python3.11/site-packages/aiohttp/client_reqrep.py", line 1059, in raise_for_status
    raise ClientResponseError(
aiohttp.client_exceptions.ClientResponseError: 400, message='BAD REQUEST', url=URL('https://usapi.gizwits.com/app/control/Ykbs11pev7SBKLMDijT1De')

The switch labeled "Power" turns the spa control on & off successfully and I can change the temp now, so that's a win.

Found something obviously wrong for the filter control, so give v1.4.0-alpha2 a go to see if that improves things.
Debug logs should be possible via Settings > Devices & Services > Bestway, then "Enable Debug Logging" for a bit, and then "Disable Debug Logging" should trigger a log download.

I just tried  1.4.0-alpha2.   Everything except bubbles and spa lock are working.   On/off,  temp control's and mode (heat) are all working for me.

I've just published v1.4.0-alpha3. This hopefully fixes the bubbles control. It looks like a lock switch wasn't being provided for you in alpha2? Worth another look in alpha3 as I've tweaked a few things.

I've just published v1.4.0-alpha3. This hopefully fixes the bubbles control. It looks like a lock switch wasn't being provided for you in alpha2? Worth another look in alpha3 as I've tweaked a few things.

I can confirm bubbles works with alpha3!  Nice!!

Great. Was there any progress on the lock switch with the alpha3 release?

The filter switch doesn't follow what's in the Bestway app. And when I hit the flame icon, the filter sw turns OFF.  it should turn ON!

So, on alpha3:

there's an extra switch for bubbles that's disabled, but the other bubbles switch works.
lock button doesn't lock or unlock, but does something, as the spa beeps when trying to use the lock switch in HA
Everything else works as far as I can tell.
heat mode works ( I don't have the card pictured above, so i can't comment on the flame button issue)
filter on/off works
temp settings work

Next up: v1.4.0-alpha4
The lock switch has been removed, as it seems it never worked and isn't widely used.
The heater switch should now update the filter status (as reported by @jazzmonger).
@isaacfinnegan can the disabled bubbles switch be deleted? Something probably got renamed by me and it's caused a duplicate.

Would it be possible to have "Spa Bubbles" switch between the 2 levels of bubbles? Right now it's an on-off button for the lower level of bubbles (at least that's how it's showing up in the Bestway app).

Would it be possible to have "Spa Bubbles" switch between the 2 levels of bubbles? Right now it's an on-off button for the lower level of bubbles (at least that's how it's showing up in the Bestway app).

That's the first I've heard about multiple levels of bubbles on these devices. If you're able to capture the debug logs while changing the settings via the Bestway app, it should be possible to identify the correct values. Be sure to wait a minute between each setting so that the integration picks up the new value.
Can anyone else confirm they also have multiple levels?

Yes, the new wifi enabled Airjet_V01 has 2 bubbles settings, a high and low (and off).
I tried to get debug logs and changed from the different levels:
|
`2024-01-10 13:29:19.752 ERROR (SyncWorker_4) [homeassistant.components.plex.server] Resource connection failed to plex.tv: TV 2020
2024-01-10 13:29:33.930 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device QPaCIG8eSt5gBwkQMLeolf
2024-01-10 13:29:33.931 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 1, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 1829, "word4": 0, "word7": 39, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 1829, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 102, "option7": 10260, "option4": 0, "option5": 27186, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 6, "Tunit": 0, "wave": 0, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 1, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-10 13:29:33.931 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.722 seconds (success: True)
2024-01-10 13:29:55.784 ERROR (Thread-2 (_start_tcp_client)) [custom_components.cync_lights.cync_hub] KeyError: '1761577687'
2024-01-10 13:29:56.100 ERROR (Thread-2 (_start_tcp_client)) [custom_components.cync_lights.cync_hub] KeyError: '1761577687'
2024-01-10 13:29:57.673 ERROR (Thread-2 (_start_tcp_client)) [custom_components.cync_lights.cync_hub] IndexError: list index out of range
2024-01-10 13:30:05.043 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device QPaCIG8eSt5gBwkQMLeolf
2024-01-10 13:30:05.043 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 1, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 1830, "word4": 0, "word7": 39, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 1830, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 102, "option7": 10260, "option4": 0, "option5": 27186, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 5, "Tunit": 0, "wave": 50, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 1, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-10 13:30:05.043 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.831 seconds (success: True)
2024-01-10 13:30:35.889 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device QPaCIG8eSt5gBwkQMLeolf
2024-01-10 13:30:35.889 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 1, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 1830, "word4": 0, "word7": 39, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 1830, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 102, "option7": 10260, "option4": 0, "option5": 27186, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 5, "Tunit": 0, "wave": 0, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 1, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-10 13:30:35.889 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.678 seconds (success: True)
2024-01-10 13:30:59.682 INFO (MainThread) [custom_components.bestway] Reusing existing access token
2024-01-10 13:31:00.358 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device QPaCIG8eSt5gBwkQMLeolf
2024-01-10 13:31:00.359 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 1, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 1831, "word4": 0, "word7": 39, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 1831, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 102, "option7": 10260, "option4": 0, "option5": 27186, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 6, "Tunit": 0, "wave": 0, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 1, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-10 13:31:00.359 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.677 seconds (success: True)
2024-01-10 13:31:31.832 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device QPaCIG8eSt5gBwkQMLeolf
2024-01-10 13:31:31.832 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 1, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 1831, "word4": 0, "word7": 39, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 1831, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 102, "option7": 10260, "option4": 0, "option5": 27186, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 5, "Tunit": 0, "wave": 100, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 1, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-10 13:31:31.833 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 1.765 seconds (success: True)
`

I can confirm. The Airjet_V01 I bought a couple months ago has 2 bubble settings:

I've been testing this out a bit. Looks like the "wave" property in the returned status json is showing the the bubble level as a percentage. 0 is off, 51 is low, and 100 is high. Full log attached.
2024-01-10 19:33:48.287 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 0NS20ZT1Grb2hvDkmvBKbm
2024-01-10 19:33:48.287 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 5, "word4": 0, "word7": 38, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 5, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 100, "option7": 10260, "option4": 0, "option5": 27187, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 3, "Tunit": 0, "wave": 0, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-10 19:33:48.287 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.445 seconds (success: True)
2024-01-10 19:34:18.218 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 0NS20ZT1Grb2hvDkmvBKbm
2024-01-10 19:34:18.218 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 5, "word4": 0, "word7": 38, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 5, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 100, "option7": 10260, "option4": 0, "option5": 27187, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 2, "Tunit": 0, "wave": 51, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-10 19:34:18.218 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.377 seconds (success: True)
2024-01-10 19:34:48.242 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 0NS20ZT1Grb2hvDkmvBKbm
2024-01-10 19:34:48.243 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 6, "word4": 0, "word7": 38, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 6, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 100, "option7": 10260, "option4": 0, "option5": 27187, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 0, "heat": 2, "Tunit": 0, "wave": 100, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 0, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-10 19:34:48.243 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.402 seconds (success: True)
2024-01-10 19:39:25.361 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 0NS20ZT1Grb2hvDkmvBKbm
2024-01-10 19:39:25.362 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 11, "word4": 0, "word7": 38, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 11, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 100, "option7": 10260, "option4": 0, "option5": 27187, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 2, "Tunit": 0, "wave": 0, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 1, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-10 19:39:25.362 INFO (MainThread) [custom_components.bestway.coordinator] Fetching Bestway API data recovered
2024-01-10 19:39:25.362 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.520 seconds (success: True)

I also noticed a "Data update failed" exception in the log as well. It may be nothing:
2024-01-10 19:38:54.845 ERROR (MainThread) [custom_components.bestway.coordinator] Data update failed
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1173, in _create_direct_connection
    hosts = await asyncio.shield(host_resolved)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 884, in _resolve_host
    addrs = await self._resolver.resolve(host, port, family=self._family)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/resolver.py", line 33, in resolve
    infos = await self._loop.getaddrinfo(
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/asyncio/base_events.py", line 867, in getaddrinfo
    return await self.run_in_executor(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/socket.py", line 962, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
socket.gaierror: [Errno -3] Try again

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/config/custom_components/bestway/coordinator.py", line 36, in _async_update_data
    await self.api.refresh_bindings()
  File "/config/custom_components/bestway/bestway/api.py", line 136, in refresh_bindings
    device.device_id: device for device in await self._get_devices()
                                           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/bestway/bestway/api.py", line 141, in _get_devices
    api_data = await self._do_get(f"{self._api_root}/app/bindings")
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/bestway/bestway/api.py", line 404, in _do_get
    response = await self._session.get(url, headers=headers)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/client.py", line 574, in _request
    conn = await self._connector.connect(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 544, in connect
    proto = await self._create_connection(req, traces, timeout)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 911, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/aiohttp/connector.py", line 1187, in _create_direct_connection
    raise ClientConnectorError(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host usapi.gizwits.com:443 ssl:default [Try again]
2024-01-10 19:38:54.849 ERROR (MainThread) [custom_components.bestway.coordinator] Error fetching Bestway API data: Error communicating with API: Cannot connect to host usapi.gizwits.com:443 ssl:default [Try again]
2024-01-10 19:38:54.849 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 5.008 seconds (success: False)

home-assistant.log

Ok, this is odd.  I can turn the controls on/off from HA and they arent reflected in Bestway app.
But if I use Bestway app to turn heater/filter on/off, nothing is updated in HA.
whats also odd is if I change temp in Bestway, HA temp chnges, so comms are sort of working.
filter follows heater now which is correct.

The bubbles thing is a bit odd.

@jarrettgilliam has levels 0, 51 and 100
@isaacfinnegan has levels 0, 50 and 100

I'm going to have to pick one of these unless someone can work out why the 50/51 values differ.
I suspect that Cannot connect to host usapi.gizwits.com:443 error is just a temporary thing.
As for the behaviour described by @jazzmonger, it's not really clear what's going on there. Due to the way the API works, changes from the device or Bestway app can take a little while to appear in HA. When changing things in HA, other places normally update instantly.

I checked again this morning to make sure, and I'm getting the same result (51 for low). I've got a couple of ideas though.

Pick either 50 or 51 and have us report back whether the bestway app shows a "low" bubble setting when set from HA.
Try exposing the wave property as a slider in HA, sort of like dimmable lights. I'm curious if the hardware and api supports any wave value, but the app limits the options to just two.

v1.4.0-alpha5 is now available for testing this. It's using a value of 50 to represent "MEDIUM" bubbles. If there are any glitches, it'd be useful to know:

What happens when setting the MEDIUM level from HA? Does it achieve MEDIUM on the device and Bestway app?
What happens when setting the MEDIUM level from the device? Does HA show this correctly? Bear in mind it could take a minute to update. What do the debug logs show? It should produce a warning if an unknown value is seen.
What happens when setting the MEDIUM level from the app? As above, but I'm curious whether the device and app set different values. Perhaps one is setting 50 and the other sets 51?

What happens when setting the MEDIUM level from HA? Does it achieve MEDIUM on the device and Bestway app?
Yes. Both the device and the Bestway app show MEDIUM when set to MEDIUM in HA.
2024-01-22 12:24:57.802 DEBUG (MainThread) [custom_components.bestway.bestway.api] Setting bubbles mode to 40
2024-01-22 12:25:09.283 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 0NS20ZT1Grb2hvDkmvBKbm
2024-01-22 12:25:09.284 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 12617, "word4": 0, "word7": 36, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 14144, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 97, "option7": 10260, "option4": 0, "option5": 27187, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 2, "Tunit": 0, "wave": 51, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 1, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 1}
2024-01-22 12:25:09.284 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.243 seconds (success: True)
2024-01-22 12:25:09.284 WARNING (MainThread) [custom_components.bestway.bestway.model] Unexpected API value 51 - assuming OFF

What happens when setting the MEDIUM level from the device? Does HA show this correctly? Bear in mind it could take a minute to update. What do the debug logs show? It should produce a warning if an unknown value is seen.
HA showed OFF when settings the level to MEDIUM from the device. The logs reported an unexpected value:
2024-01-22 12:26:09.483 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 0NS20ZT1Grb2hvDkmvBKbm
2024-01-22 12:26:09.483 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 12618, "word4": 0, "word7": 36, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 14145, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 97, "option7": 10260, "option4": 0, "option5": 27187, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 2, "Tunit": 0, "wave": 51, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 1, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 0}
2024-01-22 12:26:09.483 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.442 seconds (success: True)
2024-01-22 12:26:09.483 WARNING (MainThread) [custom_components.bestway.bestway.model] Unexpected API value 51 - assuming OFF

What happens when setting the MEDIUM level from the app? As above, but I'm curious whether the device and app set different values. Perhaps one is setting 50 and the other sets 51?
Just like above. HA showed OFF when settings the level to MEDIUM from the Bestway app.
2024-01-22 12:31:40.491 DEBUG (MainThread) [custom_components.bestway.bestway.api] New data received for device 0NS20ZT1Grb2hvDkmvBKbm
2024-01-22 12:31:40.491 DEBUG (MainThread) [custom_components.bestway.bestway.api] Status for device type 'Airjet_V01' returned: {"E19": 0, "E18": 0, "E32": 0, "E31": 0, "E30": 0, "E11": 0, "E10": 0, "E13": 0, "E12": 0, "E15": 0, "E14": 0, "E17": 0, "E16": 0, "word5": 12623, "word4": 0, "word7": 36, "word6": 0, "word1": 0, "word0": 0, "E29": 0, "word2": 14150, "option6": 10244, "ver": 1174, "E22": 0, "jet": 0, "E23": 0, "power": 1, "Tnow": 97, "option7": 10260, "option4": 0, "option5": 27187, "option2": 0, "option3": 30, "option0": 59940, "option1": 59940, "E24": 0, "E25": 0, "E26": 0, "E27": 0, "E20": 0, "E21": 0, "E08": 0, "E09": 0, "E06": 0, "E07": 0, "E04": 0, "E05": 0, "E02": 0, "E03": 0, "E01": 0, "bit7": 1, "heat": 2, "Tunit": 0, "wave": 51, "word3": 0, "Tset": 102, "filter": 2, "E28": 0, "bit6": 1, "bit5": 0, "bit4": 0, "bit3": 0, "bit2": 0}
2024-01-22 12:31:40.491 DEBUG (MainThread) [custom_components.bestway.coordinator] Finished fetching Bestway API data in 0.451 seconds (success: True)
2024-01-22 12:31:40.491 WARNING (MainThread) [custom_components.bestway.bestway.model] Unexpected API value 51 - assuming OFF

Full log:  home-assistant.log

Thanks. Looks about as expected since your device is using 51 as the magic number. I've made some further changes to allow wither 50 or 51 to map to MEDIUM in HA. I'm going to wrap this up in a final 1.4.0 release, and treat any further issues separately.


Session is not restored (multiple instances; using ATOM_HOME)

Prerequisites

[x] Put an X between the brackets on this line if you have done all of the following:

Reproduced the problem in Safe Mode: https://flight-manual.atom.io/hacking-atom/sections/debugging/#using-safe-mode
Followed all applicable steps in the debugging guide: https://flight-manual.atom.io/hacking-atom/sections/debugging/
Checked the FAQs on the message board for common solutions: https://discuss.atom.io/c/faq
Checked that your issue isn't already filed: https://github.com/issues?utf8=✓&q=is%3Aissue+user%3Aatom
Checked that there is not already an Atom package that provides the described functionality: https://atom.io/packages

Description
I opened one instance of Atom by clicking the icon. This works well and state is restored if I reopen the window. This state is kept in standard location at ~/.atom.
While having that first window opened I tried opening a second instance/window with $ ATOM_HOME=~/.atomnb atom. The goal is having a second window of atom with different packages and panes layout, themes, etc.
I modified this second window, opened a project and some tabs. Then closed it and reopened running again the same command: $ ATOM_HOME=~/.atomnb atom.
The window appears again showing the correct theme and settings. The previously opened project is also there. However, the opened tabs are now gone and the project layout (e.g. panes) and window dimensions appear to have been forgotten.
In the dev tools console I see the error Could not connect to indexedDB.
Steps to Reproduce

Open Atom normally via icon. (This is Window 1.)
Open Atom via terminal with $ ATOM_HOME=~/.atomnb atom (This is Window 2.)
Open a project in Window 2
Open some tabs in Window 2 from the project
Change the dimensions and layout of the panes.
Close Window 2.
Reopen Window 2 with the same command: $ ATOM_HOME=~/.atomnb atom
The project is still there, but the panes' layout and tabs are not restored.

Expected behavior: Panes' layout and tabs should have been restored.
Actual behavior: The session appears to have been lost, although the project folder is still in the tree view.
Reproduces how often: Always.
Versions
OS: Ubuntu 18.04. Atom installed from snap.
$ atom --version
$ apm --version
apm  2.1.7
npm  6.2.0
node 8.9.3 x64
atom 1.37.0
python 2.7.15rc1
git 2.17.1

Additional Information
The issue is with Window 2. Note I open Window 1 first using the Atom icon and leave it open.
Window 1 functions as expected, it is the state of Window 2 (opened via terminal) that is not restored.
Update
I tried the same steps in a different machine (Ubuntu 16.04, Atom 1.32.0) and the same thing happens.
I'm wondering if the IndexDB location is shared by all instances and that prevents Window 2 from working properly. I say this because while I have two different locations for settings (~/.atom and .atomV2) the IndexDB location is the same in both cases.
In the second machine:

Open Window 1: ATOM_HOME=~/.atom atom (session restored OK)
Open Window 2: ATOM_HOME=~/.atomV2 atom (session NOT restored)
Close Window 1 and Window 2.
Open Window 2: ATOM_HOME=~/.atomV2 atom (session restored OK)
Open Window 1: ATOM_HOME=~/.atom atom (session NOT restored)
Close Window 1 and Window 2. Repeat to obtain consistent result. Essentially it appears only one window at a time is capable of showing its state restored, never both. However, the state is not lost; simply not shown.

Thanks for the report!   Before looking further:

OS: Ubuntu 18.04. Atom installed from snap.

The Snap install of Atom is unofficial - please install Atom using one of the supported installation methods:
https://flight-manual.atom.io/getting-started/sections/installing-atom/
You can find out more about why we chose to not support unofficial distributions here.
You still might have the same issue but we need to eliminate the possibility that the unofficial installation method is part of the issue.
If you can still reproduce using an supported installation method, go ahead and open a new issue and we'll take a look.


Update Generic Pages “bio”

Automatically generated by Netlify CMS

👷 Deploy Preview for adoring-lamport-282eaf processing.
🔨 Explore the source changes: df638d125e1c36122dd4886ddb811d483490e17f
🔍 Inspect the deploy log: https://app.netlify.com/sites/adoring-lamport-282eaf/deploys/621bc9f12998bc0007cc76a9


Updated Policy Permissions

Splitting controls for delete, create, rename and updating relevant links

Thanks Jason, updated

+1

Verified on docs.mattermost.com


pack suggest-stacks

Background Assumptions
pack support both app developers and buildpacks authors.
We expect:
# of app developers >> # of buildpack authors >> # of stack maintainers
Therefore our users will naturally include app developers who want to consume a builder image and a smaller contingent of buildpack authors who want to consume a stack.
(we don't meaningfully support the use cases of stack maintainers yet)
Problem statement:
When buildpack authors are creating a builder, the stack section of the builder.toml is required. However, it's currently hard to discover what existing stacks are available to use. This might lead users to try to create their own stack when an existing stack could have worked for them, which is less than ideal (they won't get the security benefits of using a maintained stack, and support and guidance for creating a stack is  slim).
Proposed Solution:
In the same way that pack suggest-builders helps app developers find an appropriate builder image (complete with buildpacks), pack suggest-stacks can help aspiring buildpack authors find an appropriate stack.
When I run pack suggest-stacks
Then I see the following output
$ pack suggest-stacks

Stacks maintained by the Cloud Native Buildpacks project:

    Stack ID: io.buildpacks.stacks.bionic
    Maintainer: Cloud Native Buildpacks
    Desciption: Minimal bionic images
    Build Image: cnbs/build:bionic
    Run Image: cnbs/run:bionic

Stacks maintained by the community:

    Stack ID: heroku-18
    Maintainer: Heroku
    Desctipion: (TO BE PROVIDED BY HEROKU)
    Build Image: heroku/pack:18-build
    Run Image: heroku/pack:18

    Stack ID: org.cloudfoundry.stacks.cflinuxfs3
    Maintainer: Cloud Foundry
    Desctipion: (TO BE PROVIDED BY CLOUD FOUNDRY)
    Build Image: cfbuildpacks/cflinuxfs3-cnb-experimental:build
    Run Image: cfbuildpacks/cflinuxfs3-cnb-experimental:run

@ekcasey Great story  👍

@mgibson1121 @ekcasey Thoughts on alignment for the output? Any opposition to something like this?
    Stack ID:    io.buildpacks.stacks.bionic
    Maintainer:  Cloud Native Buildpacks
    Desciption:  Minimal bionic images
    Build Image: cnbs/build:bionic
    Run Image:   cnbs/run:bionic

@ameyer-pivotal  lgtm, but upon re-reading, maybe description should be first?

@mgibson1121 FYI, we decided against the alignment suggestion because it looked weird

This story passes acceptance

done on master, will ship in v0.3.0


comfyui_controlnet_aux error when reactor or roop with it

[comfyui_controlnet_aux] | STATUS -> Some nodes failed to load:
Failed to import module bae because TypeError: A Message class can only inherit from Message
Failed to import module hed because TypeError: A Message class can only inherit from Message
Failed to import module leres because TypeError: A Message class can only inherit from Message
Failed to import module lineart because TypeError: A Message class can only inherit from Message
Failed to import module lineart_anime because TypeError: A Message class can only inherit from Message
Failed to import module manga_line because TypeError: A Message class can only inherit from Message
Failed to import module midas because TypeError: A Message class can only inherit from Message
Failed to import module mlsd because TypeError: A Message class can only inherit from Message
Failed to import module openpose because TypeError: A Message class can only inherit from Message
Failed to import module pidinet because TypeError: A Message class can only inherit from Message
Failed to import module scribble because TypeError: A Message class can only inherit from Message
Failed to import module simple_cv2 because TypeError: A Message class can only inherit from Message
Failed to import module zoe because TypeError: A Message class can only inherit from Message
Check that you properly installed the dependencies.
If you think this is a bug, please report it on the github page (https://github.com/Fannovel16/comfyui_controlnet_aux/issues)

@shiyk92 Try the fix in https://github.com/Fannovel16/comfyui_controlnet_aux/issues/7#issuecomment-1699499731
If you still have that issue, please comment on that page.

Closed as this is duplication of https://github.com/Fannovel16/comfyui_controlnet_aux/issues/7


Instructions are not updated for v1.3

Version 1.3 uses AR Foundation instead of the native platform AR APIs. AddARAnchor() is no longer present and seems to be replaced by CreateWorldAnchor() ?

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

ID: 47ed5367-ee97-31a2-78ff-dd98e5c23d24
Version Independent ID: 2e975197-ca07-351a-f538-372500c0cc8f
Content: How to create and locate anchors using Azure Spatial Anchors in Unity
Content Source: articles/spatial-anchors/how-tos/create-locate-anchors-unity.md
Service: azure-spatial-anchors
GitHub Login: @RamonArguelles
Microsoft Alias: rgarcia

@Pycorax Thank you for the valuable feedback,we are investigating the issue.

Thanks for bringing that to our attention, @Pycorax. @darax, can you take a look at updating this?

Can do.


Fix several issues with merge in tdbcli

Issues fixed include:

tdb merge now works with a single traildb (useful for filtering)
Correctly identify when input traildbs have the same fields and use direct cons'ing
When merging traildbs with the same fields, return fields in order found in first traildb to avoid failure when cons'ing
Check number of user fields against counter after checking for duplicates to avoid edge case where last traildb has a different field name but same number of fields.

This doesn't fix the case where the input traildbs have the same field names but in different orders.

Coverage remained the same at 74.056% when pulling d15ee2f3d70d7296ac2da59cfebd1dd934dac701 on rnowling-adroll:tdb-merge-fix into 7fe44d7a2ae884068ed4588ac93840ec2ca05ada on traildb:master.

@rnowling-adroll this looks good otherwise but like you mentioned, it fails with TDB_ERR_APPEND_FIELDS_MISMATCH when trying to merge two tdbs with same fields but in mismatching order. This works in the master branch.
Maybe we should just do a quick check first without Judy arrays for equal_fields: For every input tdb, check that the number of fields matches with dbs[0] and looping over every field f, check that dbs[0].field_name[i] == dbs[f].field_name[i]. If this check fails, then we construct a union of fields with JudySL. This should make the overall logic more robust and readable.

Coverage remained the same at 74.056% when pulling e31d51b2519ef44b381d0ffab33d1b969245aeec on rnowling-adroll:tdb-merge-fix into 7fe44d7a2ae884068ed4588ac93840ec2ca05ada on traildb:master.


BUG-Multi-user fails when state.data["X"] = ...

Description
A user on Discord reported this. Multi-user and state-bound variables do not work properly when we modify data using state.data["X"] = ...
How to reproduce
Using the following code:
from taipy.gui import Gui

data = {"X": range(1, 6), "Y": [x * x for x in range(1, 6)]}

page = """
<|{data}|table|show_all|rebuild|>
<|button|label=Double X and Y|on_action=double_x_and_y|>
"""

def double_x_and_y(state):
    state.data["X"] = [2 * x for x in state.data["X"]]
    state.data["Y"] = [2 * x for x in state.data["Y"]]

Gui(page=page).run()

Run the app in browser A
Connect to the app in an incognito page B
Press the button in browser A
Refresh incognito page B
Incognito page B will show the data modified while no button has been pressed in B

Expected behavior
Modifying data using slices should modify the state-bound variable, not the original one. Incognito page B should show the original data.
Runtime environment

OS: Windows 11
Browser: Chrome
Taipy: 2.4.0

Is it released in Taipy 3.1.1?