Web Page is Hard to Use on Mobile

@spestana pointed out that the web site is really quite hard to use on mobile. When you try to scroll up and down on the page, you instead select areas on the plots frustrating haha. See my screen recording below.
https://user-images.githubusercontent.com/2559382/134118492-0c947438-f8ed-4d7c-adc5-40090d9024ec.MP4
I'm not sure what the best solution here is quite yet. Mobile isn't really a usecase I had originally designed for, but it seems quite important. Perhaps some better web framework would help solve this or perhaps there are some easy settings in the plot interactions that we could tweak to make this better.

To accomplish #39, we're planning to switch to dash leaflet. We can use this to require two fingers to scroll the map: https://dash-leaflet.herokuapp.com/#gesture

That would definitely help, but I think the main issue is with the plots below, not the map :)

I am going to close this issue. Changing the graph widths fixed the main problem of not being able to scroll down the page.
There are probably other improvements that could be made for small touchscreen devices, but those could be separate issues if they become a priority.


App keeps loading forever

The application keeps loading forever and doesn't open
Windows11 and I'm using the app not the browser

Same.

see https://github.com/notion-enhancer/notion-repackaged/issues/116


Commit: 948259e3244d9e39387a2c0734cc990aa833469c breaks cmake-3.2.0 that used to works fine.

There are two ways to solve this problem, copy the missing cmake modules or use this approach that is way simple.
Error:
/tmp/osvr/OSVR-Core/cmake/cmake-3.2.0-modules/FindPackageHandleStandardArgs.cmake
Call Stack (most recent call first):
cmake/GetGitRevisionDescription.cmake:85 (find_package)
cmake/GetGitRevisionDescription.cmake:128 (git_describe)
vendor/vrpn/ParseVersion.cmake:36 (git_get_exact_tag)
vendor/vrpn/CMakeLists.txt:82 (include)

Actually this can be simplified further - don't specify an absolute path at all. That module should always be found using the search path. The stock modules in CMake use an absolute path so that they find their version matched peers, which is how I imported this bug, good catch.

Fixed at: https://github.com/OSVR/OSVR-Core/commit/9e191386c76008f3fb2e02b30eadb91e70e4ecf9
Thanks!

Wait, why didn't the normal pull request process continue here?

OK, I'm guessing you probably haven't done a lot with CMake before, and that's OK. This regression wasn't breaking any of the main CIs (neither the deployment CI nor Travis), and the workaround is just to upgrade past cmake 3.2.
I was hoping to see a revised version of the patch that I could merge from this pull request and give you credit for it. I was confused when I saw a patch come in from @osvr-phabricator (we have a phabricator instance? I don't have access, which is strange for a primary contributor and maintainer...) that hadn't been reviewed but had my name on it as a stamp of approval. Since it was just a one-line fix, I fixed it for you (see dc530dc03c26c1d80ba9342b178ad7d2f846ce6e ) instead of just reverting and re-opening the pull request - easier all around (and I could write CMake code in my sleep) though it doesn't give you as much credit, sorry.
Looking forward to future contributions, though it's OK if you just report issues without fixing them if they're not in your wheelhouse!

OK, cool that you fixed it in a proper way! Particularly I was not looking for credit but instead fix my issue with that cmake version.
Sorry to by pass the pull request process, I will be more careful next time.
For the phabricator instance, I have my own non-public one for code review and so on, can't give you access there. But if you are interested to use Phabricator for code review, we can talk more.
Best,


Docs are now set to deploy when a tag is pushed

After releasing the project on PyPI, I realised that it is best for both deployments (PyPI and documentation website) to be triggered by the same event (i.e. pushing a release tag), so the documentation version agrees with the PyPI version

Codecov Report

Merging #51 (8002fa8) into main (85027ce) will not change coverage.
The diff coverage is n/a.

@@          Coverage Diff          @@
##            main     #51   +/-   ##
=====================================
  Coverage   9.38%   9.38%
=====================================
  Files          4       4
  Lines        373     373
=====================================
  Hits          35      35
  Misses       338     338

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more

Not sure about that, there may be cases where you want to trigger these two separately.
Anyhow, since I spent much time already fighting with workflows and actions, I will merge this as is, and rethink your proposal later (if it makes sense, maybe we should change workflows across all of our projects with docs)


MacOS support?

Hi,
m4 is now in macOS devices..
how to test it with this code?

Unfortunately I don't have an M4 Mac to test.
Running the code on the Mac would require a bit of refactoring. I'd remove all the UI and make the app command-line only. Then I'd tweak the writeReport() function to save reports in a local directory. Finally, the current makefile is written for running on an external device, so it would need to be adjusted. Probably best to have two separate makefiles and use the setup script to control the execution.
Pull requests are welcome!

I just did the quickest possible hack to get it running under MacOS. Follow all instructions from https://github.com/scalable-analyses/sme/tree/main/MicrobenchmarkApp to set up the Xcode project but add the files and folders from /src of this project instead. In the file app.swift comment/delete line 2 and 23. This is it basically. Build and run it. I just inspected the command line output then...

@zinphi Thank you for sharing these! There are plenty of interesting stuff going on there. First, I'd expect the M4 Max to run at higher clock than the iPad, but the peak single-core SME FP32 outer product is still the same 2TFLOPS. Second, the system appears to automatically distribute the threads across clusters — you only need two high-priority threads to achieve 4TFLOPS. But using more threads seems to hurt the scheduling again.  We don't see much contribution from the E-cluster here either, the peak is only 4150
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 1H+0L  |       2007.8 GOP/s (2.04 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 2H+0L  |      3973.61 GOP/s (2.06 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 3H+0L  |      3249.13 GOP/s (3.78 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 4H+0L  |      3954.98 GOP/s (4.14 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 5H+0L  |      3698.18 GOP/s (5.54 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 6H+0L  |      3219.74 GOP/s (7.63 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 7H+0L  |      3895.84 GOP/s (7.36 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 8H+0L  |      3501.01 GOP/s (9.36 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 9H+0L  |      3807.67 GOP/s (9.68 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 10H+0L |      4189.56 GOP/s (9.78 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 11H+0L |       3971.5 GOP/s (11.34 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 12H+0L |      4179.68 GOP/s (11.76 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 13H+0L |      4006.19 GOP/s (13.29 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 14H+0L |      4159.22 GOP/s (13.79 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 15H+0L |       4035.8 GOP/s (15.22 ms)
FMOPA (FP32)                                       | ILP=4  | VLx64 | threads 16H+0L |      4121.76 GOP/s (15.9 ms)

The low-priority thread results are weird as well. They achieve 2TFLOPS on a single thread, leading me to believe that these threads do not run on E-cores at all.
All of this again highlights how difficult it is to combine SME and multithreading and achieve optimal results.

I could imagine that there is no SME co-processor on the e-core clusters at all and that the iPad is simply clocking the SME co-processor much lower if an SME command is dispatched from a low-priority thread/core to simulate e-core power draw. Could be that Apple sees this approach not necessary for larger devices. On the M4 Max it seems that low-priority threads can access/share one (p-core) SME co-processor (without down-clocking) and the other one is exclusive to high-priority threads. This also implies that low-priority threads can exhibit a much higher power draw on the M4 Max/MacOS than a programmer would expect when using SME commands. But this is all pure speculation...

@zinphi I do believe that M4 (iPad version) has an SME block on the E-cluster. The behavior is fundamentally different from the P-cluster SME, and maxing out the hardware threads results in higher performance than what is achievable on P-cores alone.
One could bring more clarity by sampling the performance counters that provide information about the core utilization and whether the thread runs on P- or E-core.

could u buy one?


Pivx merges to improve autocombinerewards

Reviewed and merged the latest CWallet::AutoCombineDust() code to provide a number of improvements; including reducing the frequency of transactions to when there are enough to meet the autocombinerewards threshold, limiting it to prevent it from trying to autocombine more than the max transaction size.  Also bumped up the max transaction size.

Note that I've not done any testing or compiling of this.


Adding Command Delays

Description
Sometimes commands may perform (relatively) CPU-intensive tasks. In this case, you probably don't want players to execute the command too rapidly. A common use case for example could be for commands that perform database queries. The fix to this problem would be to add an execution delay between commands. This delay will be per player (although I suppose there might be use cases for a global delay too).
Spigot does have an "anti-command spam" limiter, and sure you can make this limiter more strict but spigot/paper's build in anti-command spam features apply to ALL commands. I think it would be useful to have the ability in CommandAPI to edit the delays per-command.
Previously, a command API I built for my plugins used this but after I switched to CommandAPI, this is the one feature I do miss from my stuff ;(
Expected code
new CommandAPICommand("command")
...
.withDelay(500, TimeUnit.MILLISECONDS)
...
Extra details
No response

Hey @Aseeef, thanks for the suggestion, and sorry for the delayed response! After some discussion on Discord, it was decided that delayed commands are probably outside the scope of the CommandAPI, so unfortunately this will probably not be added directly to the CommandAPI. The CommandAPI is focused on providing an interface for command features that are hard without Brigadier or NMS code. Delayed commands are possible using typical Spigot API, so they are probably outside of that scope. There are also many different ways developers may expect delayed commands to work, so it would be difficult for the CommandAPI to implement one solution that works for everyone.
However, to help people who want to create delayed commands with the CommandAPI, PR #460 is going to add an example project to the CommandAPI that shows off some solutions. Hopefully, that example project will help guide developers in creating their own system, or they can just copy the code :P.

Previously, a command API I built for my plugins used this

The PR doesn't actually have any examples yet, though I do have an idea of how I would implement a delayed command. If you think that system you used before can be adapted to the CommandAPI, you're welcome to add it to the PR!


Our code is only compatible with Flask 1.x so specify that.

Backend checklist

[x] Formatted my code by running isort . && black . in app/backend
[x] Added tests for any new code or added a regression test if fixing a bug
[x] All tests pass
[ ] Run the backend locally and it works
[ ] Added migrations if there are any database changes, rebased onto develop if necessary for linear migration history

Fixes: https://github.com/Couchers-org/couchers/issues/1234

I did fix it in #1235


Error running in RHEL7

I got the following when running in RHEL7:
> Mixlib::ShellOut::ShellCommandFailed
>     ------------------------------------
>     execute[Register to RHSM] (/var/chef/cache/cookbooks/redhat_subscription_manager/libraries/rhsm_register.rb line 53) had an error: Mixlib::ShellOut::ShellCommandFailed: Command execution failed. STDOUT/STDERR suppressed for sensitive resource

Here is the code block it is failing on:
rhsm_register node['fqdn'] do
  satellite_host node['rhel-sat']['server']
  activation_key sat_keys[node['node-info']['environment']]
  organization node['rhel-sat']['reg']['org']
  auto_attach true
  install_katello_agent true
end

Running Chef Client version 12.6

This section may be helpful as well:
`* execute[Register to RHSM] action run
  ================================================================================
  Error executing action `run` on resource 'execute[Register to RHSM]'
  ================================================================================

  Mixlib::ShellOut::ShellCommandFailed
  ------------------------------------
  Command execution failed. STDOUT/STDERR suppressed for sensitive resource

  Cookbook Trace:
  ---------------
  /var/chef/cache/cookbooks/compat_resource/files/lib/chef_compat/copied_from_chef/chef/provider.rb:119:in `compile_and_converge_action'

  Resource Declaration:
  ---------------------
  suppressed sensitive resource output

  Compiled Resource:
  ------------------
  suppressed sensitive resource output`

So this worked when using credentials.  Just not with activation keys.

@donwlewis thanks for the report.
Because Chef would output the command during registration (which would output username/password/activation_key data), I marked this resource as a "sensitive" one to suppress the output. Unfortunately, that does make this a bit harder to debug.
But given the data you've provided, and the fact that this works with username/password, but not with activation_key, I suspect that the activation_key or organization you're passing in is probably incorrect - those two parameters are not used at all when doing username/password registration.
I'd recommend hard-coding them in your recipe for now to debug and get it to work, and then once you've ensured the data is correct, you can place them back as node attributes, etc.
If you're unable to get it to work, you could always create a local copy / fork of this cookbook and remove the sensitive true line here:
https://github.com/chef-partners/redhat-subscription-manager-cookbook/blob/master/libraries/rhsm_register.rb#L54
... which would output the exact command being run as well as the STDOUT/STDERR of the command to help you debug this better. I will expose the ability to disable the sensitive flag via a rhsm_register property in a future release to help users debug this type of issue in the future, as well.
Thanks,
Adam

Adam,
The following error is what I found:
Error: Activation keys cannot be used with --auto-attach
It seems you can't use auto attach with activation keys.
On Fri, Jan 29, 2016 at 11:21 AM Adam Leff<EMAIL_ADDRESS>wrote:

@donwlewis https://github.com/donwlewis thanks for the report.
Because Chef would output the command during registration (which would
output username/password/activation_key data), I marked this resource as a
"sensitive" one to suppress the output. Unfortunately, that does make this
a bit harder to debug.
But given the data you've provided, and the fact that this works with
username/password, but not with activation_key, I suspect that the
activation_key or organization you're passing in is probably incorrect -
those two parameters are not used at all when doing username/password
registration.
I'd recommend hard-coding them in your recipe for now to debug and get it
to work, and then once you've ensured the data is correct, you can place
them back as node attributes, etc.
If you're unable to get it to work, you could always create a local copy /
fork of this cookbook and remove the sensitive true line here:
https://github.com/chef-partners/redhat-subscription-manager-cookbook/blob/master/libraries/rhsm_register.rb#L54
... which would output the exact command being run as well as the
STDOUT/STDERR of the command to help you debug this better. I will expose
the ability to disable the sensitive flag via a rhsm_register property in a
future release to help users debug this type of issue in the future, as
well.
Thanks,
Adam
—
Reply to this email directly or view it on GitHub
https://github.com/chef-partners/redhat-subscription-manager-cookbook/issues/12#issuecomment-176920551
.

Ah.  Just noticed you documentation states that.  Thanks!
On Fri, Jan 29, 2016 at 11:52 AM Don Lewis<EMAIL_ADDRESS>wrote:

Adam,
The following error is what I found:
Error: Activation keys cannot be used with --auto-attach
It seems you can't use auto attach with activation keys.
On Fri, Jan 29, 2016 at 11:21 AM Adam Leff<EMAIL_ADDRESS>wrote:

@donwlewis https://github.com/donwlewis thanks for the report.
Because Chef would output the command during registration (which would
output username/password/activation_key data), I marked this resource as a
"sensitive" one to suppress the output. Unfortunately, that does make this
a bit harder to debug.
But given the data you've provided, and the fact that this works with
username/password, but not with activation_key, I suspect that the
activation_key or organization you're passing in is probably incorrect -
those two parameters are not used at all when doing username/password
registration.
I'd recommend hard-coding them in your recipe for now to debug and get it
to work, and then once you've ensured the data is correct, you can place
them back as node attributes, etc.
If you're unable to get it to work, you could always create a local copy
/ fork of this cookbook and remove the sensitive true line here:
https://github.com/chef-partners/redhat-subscription-manager-cookbook/blob/master/libraries/rhsm_register.rb#L54
... which would output the exact command being run as well as the
STDOUT/STDERR of the command to help you debug this better. I will expose
the ability to disable the sensitive flag via a rhsm_register property in a
future release to help users debug this type of issue in the future, as
well.
Thanks,
Adam
—
Reply to this email directly or view it on GitHub
https://github.com/chef-partners/redhat-subscription-manager-cookbook/issues/12#issuecomment-176920551
.

@donwlewis but the code can be smarter and not try to pass in --auto-attach when using an activation key. I'm going to reopen this issue, and I'll fix that in a future release!

Addressed in #14. Not yet released, but will be included in the next release of the cookbook.


safety: abort if dropping panic payloads panic

Fixes #2501

The jobs are queued for an unusual amount of time and I got some API errors while using the UI. Seems like GitHub has a hiccup...

Heh, I'd pushed a broken commit anyway. Hopefully this one passes CI...


fix pipeline

Have you made this change in the template repo?

Have you made this change in the template repo?

Yup, but that was after I used it to make this repo


train.py giving error on custom dataset

Hi! I am trying to fine-tune the wav2vec2 model from your "10_wav2vec2_torch" tutorial. As far as I know, my dataset is in a similar format to the LJ Speech Dataset that you are using as an example. There is a 'wavs' folder which contains the audio files, and a 'metadata.csv' file that has rows of pipe-separated transcriptions. I have been able to successfully run the train.py script on the default dataset (LJ Speech Dataset), but when I use my own dataset, I get this output on the terminal. Am I missing something?
Some weights of the model checkpoint at facebook/wav2vec2-base-960h were not used when initializing Wav2Vec2ForCTC: ['wav2vec2.encoder.pos_conv_embed.conv.weight_v', 'wav2vec2.encoder.pos_conv_embed.conv.weight_g']
- This IS expected if you are initializing Wav2Vec2ForCTC from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
- This IS NOT expected if you are initializing Wav2Vec2ForCTC from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).
Some weights of Wav2Vec2ForCTC were not initialized from the model checkpoint at facebook/wav2vec2-base-960h and are newly initialized: ['wav2vec2.encoder.pos_conv_embed.conv.parametrizations.weight.original1', 'wav2vec2.masked_spec_embed', 'wav2vec2.encoder.pos_conv_embed.conv.parametrizations.weight.original0']
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
Some weights of Wav2Vec2ForCTC were not initialized from the model checkpoint at facebook/wav2vec2-base-960h and are newly initialized because the shapes did not match:
- lm_head.bias: found shape torch.Size([32]) in the checkpoint and torch.Size([29]) in the model instantiated
- lm_head.weight: found shape torch.Size([32, 768]) in the checkpoint and torch.Size([29, 768]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
Cuda Device Available.
INFO:WarmupCosineDecay:Epoch 1 - Learning Rate: 1e-08
  0%|                                                                                | 0/18 [00:00<?, ?it/s]/home/ee/anaconda3/lib/python3.9/site-packages/mltu/transformers.py:234: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  return padded_audios, np.array(label)
Epoch 1 - loss: 25.1576 - CER: 4.2681 - WER: 1.0000: 100%|████████████████████████████████████████████████████| 18/18 [00:08<00:00,  2.06it/s]
  0%|                                                                                | 0/2 [00:00<?, ?it/s]Exception in thread Thread-19:
Exception in thread Thread-15:
Traceback (most recent call last):
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 980, in _bootstrap_inner
Exception in thread Thread-16:
Traceback (most recent call last):
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 980, in _bootstrap_inner
Exception in thread Thread-14:
Traceback (most recent call last):
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 980, in _bootstrap_inner
    self.run()
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 917, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    result = self.function(data_index)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/transformers.py", line 222, in __call__
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
    self.run()
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 917, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    result = self.function(data_index)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/transformers.py", line 222, in __call__
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
    self.run()
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 917, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    result = self.function(data_index)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/transformers.py", line 222, in __call__
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
Traceback (most recent call last):
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 980, in _bootstrap_inner
    self.run()
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 917, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    result = self.function(data_index)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/transformers.py", line 222, in __call__
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
Exception in thread Thread-18:
Traceback (most recent call last):
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 980, in _bootstrap_inner
    self.run()
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 917, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    result = self.function(data_index)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/transformers.py", line 222, in __call__
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
Exception in thread Thread-23:
Traceback (most recent call last):
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 980, in _bootstrap_inner
    self.run()
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 917, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    result = self.function(data_index)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/transformers.py", line 222, in __call__
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
Exception in thread Thread-21:
Traceback (most recent call last):
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 980, in _bootstrap_inner
    self.run()
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 917, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    result = self.function(data_index)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/transformers.py", line 222, in __call__
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
Exception in thread Thread-22:
Traceback (most recent call last):
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 980, in _bootstrap_inner
    self.run()
  File "/home/ee/anaconda3/lib/python3.9/threading.py", line 917, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    result = self.function(data_index)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/lib/python3.9/site-packages/mltu/transformers.py", line 222, in __call__
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence

metadata.csv
This is what my labels file looks like.

I increased the size of my dataset by a factor of 30; I now have around 4000 examples. I figured the code was not getting enough examples in the training pipeline. The terminal is not showing the same error, but it is still stuck at the first epoch. Here's the output.
Some weights of the model checkpoint at facebook/wav2vec2-base-960h were not used when initializing Wav2Vec2ForCTC: ['wav2vec2.encoder.pos_conv_embed.conv.weight_v', 'wav2vec2.encoder.pos_conv_embed.conv.weight_g']
- This IS expected if you are initializing Wav2Vec2ForCTC from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
- This IS NOT expected if you are initializing Wav2Vec2ForCTC from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).
Some weights of Wav2Vec2ForCTC were not initialized from the model checkpoint at facebook/wav2vec2-base-960h and are newly initialized: ['wav2vec2.encoder.pos_conv_embed.conv.parametrizations.weight.original0', 'wav2vec2.encoder.pos_conv_embed.conv.parametrizations.weight.original1', 'wav2vec2.masked_spec_embed']
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
Some weights of Wav2Vec2ForCTC were not initialized from the model checkpoint at facebook/wav2vec2-base-960h and are newly initialized because the shapes did not match:
- lm_head.bias: found shape torch.Size([32]) in the checkpoint and torch.Size([29]) in the model instantiated
- lm_head.weight: found shape torch.Size([32, 768]) in the checkpoint and torch.Size([29, 768]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
Cuda Device Available.
INFO:WarmupCosineDecay:Epoch 1 - Learning Rate: 1e-08
  0%|                                                   | 0/527 [00:00<?, ?it/s]/home/ee/anaconda3/lib/python3.9/site-packages/mltu/transformers.py:234: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
  return padded_audios, np.array(label)
Epoch 1 - loss: 27.2745 - CER: 3.4600 - WER: 1.0620:   1%| | 6/527 [00:07<05:46,

I would really appreciate your help.

Hey, it seems that it started training, if my example works, this also should work for you. I hope you train on gpu? try to decrease batch_size to 2, and check whether it trains. Maybe its really slow

I changed the batch_size to 2, and it seems to have reduced the total time per epoch, but the issue is still there. It seems that the examples in the first epoch run for the first few seconds or so, and then the pipeline gets stuck.
Yes, I am training on RTX 3090. The CUDA device gets detected by PyTorch in the code. And, your example worked without any hitch.

Try to run something like this in debug mode:
for data in tqdm(data_provider):
    pass (or something else)

There might be a problem that librosa library hangs while trying to read your audio. That os you use? So, try to check whether you can read your audio or not

When I run the tqdm code (that you mentioned above), the console throws a type error.
import tqdm
for data in tqdm(data_provider):
    print(data)

Traceback (most recent call last):

  File "/tmp/ipykernel_148805/4044221648.py", line 1, in <module>
    for data in tqdm(data_provider):

TypeError: 'module' object is not callable

I use Ubuntu 20.04. Here are the specifics:
NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

I tried reading all the audio files in the example dataset and my own dataset with the librosa library in debug mode and the system has no problem reading the files.

So, I decreased the batch size to 1 on the original dataset (150 training examples) and it's working now. I think there's an optimal batch size number that needs to be set for different sizes of dataset.

Thats strange, because I alsto trained with RTX 3090 with batch_size of 8 and everything was fine. Check nvtop command in terminal, how much GPU ram is consumed during training

This is what the nvtop output looks like when I run the training script on my larger dataset (4560 examples) at a batch size of 8.

Actually, I mistyped earlier. My GPU model is 2080, not 3080.

Yes, it seems that cpu is idle and not doing anything for some reason...
It would be really interesting to find where is the problem.
Maybe you would like to upload your training script with part of the dataset? so I could check this out

This is the training script. I only changed the path of the dataset.
import os
import tarfile
import pandas as pd
from tqdm import tqdm
from io import BytesIO
from urllib.request import urlopen

import torch
from torch import nn
from transformers import Wav2Vec2ForCTC
import torch.nn.functional as F

from mltu.torch.model import Model
from mltu.torch.losses import CTCLoss
from mltu.torch.dataProvider import DataProvider
from mltu.torch.metrics import CERMetric, WERMetric
from mltu.torch.callbacks import EarlyStopping, ModelCheckpoint, TensorBoard, Model2onnx, WarmupCosineDecay
from mltu.augmentors import RandomAudioNoise, RandomAudioPitchShift, RandomAudioTimeStretch

from mltu.preprocessors import AudioReader
from mltu.transformers import LabelIndexer, LabelPadding, AudioPadding

from configs import ModelConfigs

configs = ModelConfigs()

def download_and_unzip(url, extract_to="Datasets", chunk_size=1024*1024):
    http_response = urlopen(url)

    data = b""
    iterations = http_response.length // chunk_size + 1
    for _ in tqdm(range(iterations)):
        data += http_response.read(chunk_size)

    tarFile = tarfile.open(fileobj=BytesIO(data), mode="r|bz2")
    tarFile.extractall(path=extract_to)
    tarFile.close()

# dataset_path = os.path.join("Datasets", "LJSpeech-1.1")
# if not os.path.exists(dataset_path):
#     download_and_unzip("https://data.keithito.com/data/speech/LJSpeech-1.1.tar.bz2", extract_to="Datasets")

# dataset_path = "Datasets/comcast_xfinity"
dataset_path = "/media/ee/New Volume/mltu/Tutorials/10_wav2vec2_torch/Datasets/comcast_xfinity_rep"
metadata_path = dataset_path + "/metadata.csv"
wavs_path = dataset_path + "/wavs/"

# Read metadata file and parse it
metadata_df = pd.read_csv(metadata_path, sep="|", header=None, quoting=3)
dataset = []
vocab = [' ', "'", 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
for file_name, transcription, normalized_transcription in metadata_df.values.tolist():
    # path = f"Datasets/comcast_xfinity/wavs/{file_name}.wav"
    path = f"/media/ee/New Volume/mltu/Tutorials/10_wav2vec2_torch/Datasets/comcast_xfinity_rep/wavs/{file_name}.wav"
    new_label = "".join([l for l in normalized_transcription.lower() if l in vocab])
    dataset.append([path, new_label])

# Create a data provider for the dataset
data_provider = DataProvider(
    dataset=dataset,
    skip_validation=True,
    # batch_size=configs.batch_size,
    batch_size=8,
    data_preprocessors=[
        AudioReader(sample_rate=16000),
        ],
    transformers=[
        LabelIndexer(vocab),
        ],
    use_cache=False,
    batch_postprocessors=[
        AudioPadding(max_audio_length=configs.max_audio_length, padding_value=0, use_on_batch=True),
        LabelPadding(padding_value=len(vocab), use_on_batch=True),
    ],
    # batch_postprocessors=[
    #     AudioPadding(max_audio_length=246000, padding_value=0, use_on_batch=True),
    #     LabelPadding(padding_value=len(vocab), use_on_batch=True),
    # ],
    use_multiprocessing=True,
    max_queue_size=10,
    workers=configs.train_workers,
    # workers=20,
)
train_dataProvider, test_dataProvider = data_provider.split(split=0.9)

# for data in tqdm(data_provider):
#     print(data)

# train_dataProvider.augmentors = [
#         RandomAudioNoise(),
#         RandomAudioPitchShift(),
#         RandomAudioTimeStretch()
#     ]

vocab = sorted(vocab)
configs.vocab = vocab
configs.save()

class CustomWav2Vec2Model(nn.Module):
    def __init__(self, hidden_states, dropout_rate=0.2, **kwargs):
        super(CustomWav2Vec2Model, self).__init__( **kwargs)
        pretrained_name = "facebook/wav2vec2-base-960h"
        self.model = Wav2Vec2ForCTC.from_pretrained(pretrained_name, vocab_size=hidden_states, ignore_mismatched_sizes=True)
        self.model.freeze_feature_encoder() # this part does not need to be fine-tuned

    def forward(self, inputs):
        output = self.model(inputs, attention_mask=None).logits
        # Apply softmax
        output = F.log_softmax(output, -1)
        return output

custom_model = CustomWav2Vec2Model(hidden_states = len(vocab)+1)

# put on cuda device if available
if torch.cuda.is_available():
    print('Cuda Device Available.')
    custom_model = custom_model.cuda()

# create callbacks
warmupCosineDecay = WarmupCosineDecay(
    lr_after_warmup=configs.lr_after_warmup,
    warmup_epochs=configs.warmup_epochs,
    decay_epochs=configs.decay_epochs,
    final_lr=configs.final_lr,
    initial_lr=configs.init_lr,
    verbose=True,
)
tb_callback = TensorBoard(configs.model_path + "/logs")
earlyStopping = EarlyStopping(monitor="val_CER", patience=16, mode="min", verbose=1)
modelCheckpoint = ModelCheckpoint(configs.model_path + "/model.pt", monitor="val_CER", mode="min", save_best_only=True, verbose=1)
model2onnx = Model2onnx(
    saved_model_path=configs.model_path + "/model.pt",
    input_shape=(1, configs.max_audio_length),
    verbose=1,
    metadata={"vocab": configs.vocab},
    dynamic_axes={"input": {0: "batch_size", 1: "sequence_length"}, "output": {0: "batch_size", 1: "sequence_length"}}
)

# create model object that will handle training and testing of the network
model = Model(
    custom_model,
    loss = CTCLoss(blank=len(configs.vocab), zero_infinity=True),
    optimizer = torch.optim.AdamW(custom_model.parameters(), lr=configs.init_lr, weight_decay=configs.weight_decay),
    metrics=[
        CERMetric(configs.vocab),
        WERMetric(configs.vocab)
    ],
    mixed_precision=configs.mixed_precision,
)

# Save training and validation datasets as csv files
train_dataProvider.to_csv(os.path.join(configs.model_path, "train.csv"))
test_dataProvider.to_csv(os.path.join(configs.model_path, "val.csv"))

model.fit(
    train_dataProvider,
    test_dataProvider,
    epochs=configs.train_epochs,
    callbacks=[
        warmupCosineDecay,
        tb_callback,
        earlyStopping,
        modelCheckpoint,
        model2onnx
    ]

)

Here is a sample of the dataset.
sample_dataset.zip

Hey, I tested and it seems there is some issue related to librosa. When using multiprocessing it doesn't log an error, this is why it was freezing to you, I'll make a fix and release version with bug fix. I'll let you know when you good to go

try to do pip install mltu==1.1.6 and let me know if everything is working

I installed all the requirements in a new conda environment (python 3.8) with mltu==1.1.6 and ran the training script. The pipeline is still getting stuck; this time at the validation step. Here's the output of the console.
Some weights of the model checkpoint at facebook/wav2vec2-base-960h were not used when initializing Wav2Vec2ForCTC: ['wav2vec2.encoder.pos_conv_embed.conv.weight_v', 'wav2vec2.encoder.pos_conv_embed.conv.weight_g']
- This IS expected if you are initializing Wav2Vec2ForCTC from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
- This IS NOT expected if you are initializing Wav2Vec2ForCTC from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).
Some weights of Wav2Vec2ForCTC were not initialized from the model checkpoint at facebook/wav2vec2-base-960h and are newly initialized: ['wav2vec2.encoder.pos_conv_embed.conv.parametrizations.weight.original1', 'wav2vec2.encoder.pos_conv_embed.conv.parametrizations.weight.original0', 'wav2vec2.masked_spec_embed']
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
Some weights of Wav2Vec2ForCTC were not initialized from the model checkpoint at facebook/wav2vec2-base-960h and are newly initialized because the shapes did not match:
- lm_head.bias: found shape torch.Size([32]) in the checkpoint and torch.Size([29]) in the model instantiated
- lm_head.weight: found shape torch.Size([32, 768]) in the checkpoint and torch.Size([29, 768]) in the model instantiated
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
Cuda Device Available.
INFO:WarmupCosineDecay:Epoch 1 - Learning Rate: 1e-08
Epoch 1 - loss: 26.0389 - CER: 4.3012 - WER: 1.0554: 100%|█| 18/18 [00:10<00:00,
  0%|                                                     | 0/2 [00:00<?, ?it/s]Exception in thread Thread-15:
Traceback (most recent call last):
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 932, in _bootstrap_inner
Exception in thread Thread-20:
Traceback (most recent call last):
Exception in thread Thread-17:
Traceback (most recent call last):
Exception in thread Thread-16:
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
Exception in thread Thread-14:
Traceback (most recent call last):
Exception in thread Thread-22:
Traceback (most recent call last):
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 932, in _bootstrap_inner
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 870, in run
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 932, in _bootstrap_inner
Traceback (most recent call last):
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 932, in _bootstrap_inner
Exception in thread Thread-23:
Traceback (most recent call last):
    self.run()
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 870, in run
Exception in thread Thread-21:
Traceback (most recent call last):
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    result = self.function(data_index)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    self.run()
    self.run()
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    self.run()
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 870, in run
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/transformers.py", line 227, in __call__
    max_len = max([len(a) for a in audio])
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 870, in run
ValueError: max() arg is an empty sequence
    self._target(*self._args, **self._kwargs)
    self.run()
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 870, in run
    self.run()
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    result = self.function(data_index)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    result = self.function(data_index)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    self.run()
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
    self._target(*self._args, **self._kwargs)
    result = self.function(data_index)
    result = self.function(data_index)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    self._target(*self._args, **self._kwargs)
    result = self.function(data_index)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/transformers.py", line 227, in __call__
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/dataProvider.py", line 287, in __getitem__
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    result = self.function(data_index)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/transformers.py", line 227, in __call__
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/transformers.py", line 227, in __call__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
    max_len = max([len(a) for a in audio])
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/torch/dataProvider.py", line 245, in worker_function
    result = self.function(data_index)
ValueError: max() arg is an empty sequence
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/transformers.py", line 227, in __call__
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/transformers.py", line 227, in __call__
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/transformers.py", line 227, in __call__
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/dataProvider.py", line 287, in __getitem__
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
    max_len = max([len(a) for a in audio])
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
    batch_data, batch_annotations = batch_postprocessor(batch_data, batch_annotations)
  File "/home/ee/anaconda3/envs/mltu/lib/python3.8/site-packages/mltu/transformers.py", line 227, in __call__
ValueError: max() arg is an empty sequence
    max_len = max([len(a) for a in audio])
ValueError: max() arg is an empty sequence
          val_loss: 24.1364 - val_CER: 1.7218 - val_WER: 1.0000: 100%|█| 2/2 [00

Thanks, there was another bug in my code, you received this error because small validation dataset. But now if you pip install mltu==1.1.7 this should be solved. I appreciate that you revealed me these cases :)

I upgraded to mltu==1.1.7 and everything is working perfectly, for both small and large datasets, with the default batch size. Thank you for taking the time to fix the bug.

Thank you for showing me these bugs, because of this, others won't see the same issues :)


Make Healthbar invisible in Lua

Describe your problem here.
I'm 90% sure i've done this before, but i've forgotten the code to do it! Unfortunately, the psych api doesn't seem to have it :/
Are you modding a build from source or with Lua?
Lua
What is your build target?
Windows x64
Did you edit anything in this build? If so, mention or summarize your changes.
No

setProperty('healthBar.visible', false)

u can go to https://github.com/ShadowMario/FNF-PsychEngine/discussions and ask this

go to discussions and ask about this, view the source code for the tags of the health bar sprites, also not a real issue

function onCreatePost()
setProperty('botplayTxt.visible', false);
setProperty('healthBar.alpha', 0);
setProperty('healthBarBG.alpha', 0);
setProperty('iconP1.alpha', 0);
setProperty('iconP2.alpha', 0);
setProperty('scoreTxt.alpha', 0);
end

function onCreatePost() setProperty('healthBar.alpha', 0); setProperty('healthBarBG.alpha', 0); setProperty('iconP1.alpha', 0); setProperty('iconP2.alpha', 0); end

thanks, just forgot to capitalize Bar


Added radius function

Current coverage is 87.81% (diff: 84.61%)

Merging #8 into master will decrease coverage by 0.08%

@@             master         #8   diff @@
==========================================
  Files             8          9     +1
  Lines           463        476    +13
  Methods           0          0
  Messages          0          0
  Branches          0          0
==========================================
+ Hits            407        418    +11
- Misses           38         40     +2
  Partials         18         18

Powered by Codecov. Last update b3bf072...d3d0113

I take it, this the next PR contains the Radisu code as this one? Should I close this one and simply merge the next one?

Closing this as most of the code in this PR is in the next one 👍


property comparson maybe wrong

struct MassProperties's Property:
public bool IsNull => Handle != 0;
public bool IsNotNull => Handle == 0;
maybe it inverted?

Yup, submit PR if you can, otherwise I'll fix it tomorrow.
Thanks

I've commited pull request


[CI] Fixing ruby CI issue

Testing fix for ruby issue in CI.

Xcode 12 is not available anymore in macOS 12 which now is the default for latest (which is what we use)  https://github.com/actions/runner-images/blob/main/images/macos/macos-12-Readme.md#xcode
There was a couple of issues with Ruby in new OS(see here), so to fix then we have to install ruby via brew to avoid depending on the one which comes with command line tools/system following Apples docs will be removed in future versions:
"Scripting language runtimes such as Python, Ruby, and Perl are included in macOS for compatibility with legacy software. Future versions of macOS won’t include scripting language runtimes by default, and might require you to install additional packages. If your software depends on scripting languages, it’s recommended that you bundle the runtime within the app. (49764202)" From https://developer.apple.com/documentation/macos-release-notes/macos-catalina-10_15-release-notes

Danger has errored
[!] Invalid Dangerfile file: Failed to execute - xcrun xcresulttool get --format json --path xcodebuild-ios.json
 #  from Dangerfile:30
 #  -------------------------------------------
 #  def summary(platform:)
 >      xcode_summary.report "xcodebuild-#{platform}.json"
 #  end
 #  -------------------------------------------

  Generated by :no_entry_sign: Danger


Maybe use game controller instead of gc

As I am porting the humanoid game controller client I noticed that gc is used frequently in this repo. While I am fine with abbreviations, I think it might make sense to spell it as game controller in the repo/package name and output topic. This makes the purpose more clear, if somebody is looking around and does not click on the repo or just sees the topic.

I do understand your point of "gc" not being self explanatory. I think it would be nice to keep it somewhat consistent between the leagues too. I suggest game_controller_spl and game_controller_hl. What are your thoughts?

Do we want to rename the repo? The old link is still a valid forward afaik..

Just updated :+1:

I still need to update the entries in rosdistro to match the new name, will look into doing that.


integer overflow lint warnings G115

G115: integer overflow conversion uint -> int32 (gosec)go-golangci-lint
These only came to light after upgrading to go version 1.23

fixed by issue #12


Warning Not all files are Indexed

Microsoft PowerToys version
0.45.0
Running as admin

[ ] Yes

Area(s) with issue?
PowerToys Run
Steps to reproduce
Press Alt+Space to run Power toys Run
Type anything
You get the Warning that files aren't Indexed

✔ Expected Behavior
All my files are Indexed as reported by Windows settings

❌ Actual Behavior
Even then it is showing not all files are indexed
Other Software
No response

Uhm, the "warning" is more about the difference between "Classic" and "Advanced". This is no bug.

This warning can be disabled here:


Function pointer traits

At the moment Ash roughly works like this:
Function pointers are loaded in groups. Instance, device and all the extensions. The idea is that if you don't need certain extensions that you don't need to load them.
Instance and device are grouped again in specific Vulkan versions. If you only need 1.0 function pointers, then you don't need to additionally load 1.1, 1.2, 1.3 etc. Further more they are implemented in traits which means that you can now statically know which function pointers you can use.
// requires at least a vk 1.1 context
fn allocate_something<Device: DeviceV1_1>(d: Device) {...}

This might make it nicer for libraries to be written on top of Ash.
At the moment instance/device or extension creation fails if at least one function pointer fails to load. This sort of makes sense for instance and device because the core spec really should load, but it doesn't make sense for extensions as some function pointers only will load if another extension is also loaded.
I think the best approach would be to be to allow function pointers to fail and initialize them to a static function that always panics. Conditional loading of specific function pointers in extensions is most likely too complicated for traits.
Another alternative would be to remove versioning and put all the function pointers in instance / device. The versioned traits could still be retained if this is wanted. The side effect is that we need to load everything, which means slightly longer initialization time, and more wasted space. Although it might not matter in practice and you are most likely boxing everything anyway.
Personally I like the way Ash works now, but I haven't heard any positive or negative arguments about the trait system and how Ash handles function pointers. I am sure this is the most subjective feature.
I don't personally think that anything, except that function pointers should be allowed to fail, needs to be changed, but I am always open to feedback.

I don't think there's significant value in saving the storage/runtime for loading the extra pointers. There's probably something to be said for making it difficult to accidentally use functionality from a more recent version than intended, but traits aren't the only way this could be accomplished: you could require that a version be specified explicitly on instance create, either as a parameter to the constructor function or by having different constructor functions. Then function pointers for newer features would be defaulted to panicing impls rather than getting loaded even if the implementation supports them, ensuring that at least any tested codepaths won't have any such surprises on older hardware. This also has the benefit of reducing the amount of generic code, which simplifies APIs and speeds up compilation.

Removed in 0.25


Artifacthub

Add artifacthub-repo.yml (which we copy to gh-pages in #39) to verify identity
Add a bunch of annotations and other Chart.yaml keys to enrich the ArtifactHub experience
Make some improvements to README formatting
Refactor README ordering, and add a product description
Add a few README badges
Rename LICENSE.md to LICENSE in charts, as that seems to be the convention
Copy over an RSC example from the original repository
Remove _test.tpl from the rstudio-library chart - it was an unused experiment that I forgot to clean up long ago

Took a look through it, looks good


icon for bower.json not working

just wanted to let you know that the bower icon is not working it is coming up as your settings icon thanx for the theme and hard work keep at it

Hey @thecodechef, thanks for reporting this. This has been fixed in v1.1.4. :smile:


Incorrect InputType/outputType is set for data mapper

Description:
When we try to map JSON to CSV using a data mapper, inputType/outputType is set as "XML" for both cases.
Suggested Labels:

Suggested Assignees:

Affected Product Version:
OS, DB, other environment details and versions:
Steps to reproduce:
Create a data mapper to map JSON to CSV using the attached configuration. inputType/outputType is getting set as XML at synapse source.
datamapper-issue.zip
Related Issues:
This issue should be tested with the fix form the issue, https://github.com/wso2/devstudio-tooling-ei/issues/112

As a workaround for this issue, we need to manually set the inputType/outputType for the datamapper at the properties pane.

moved to https://github.com/wso2/product-ei/issues/2475


(M3) Technical Documentation: Build instructions, 4 points

[x] Your documentation must include instructions for building and running all front-end and back-end components (as applicable). These instructions should be as complete as possible, starting with locating & cloning the source repositories, and incorporating any sensitive content, then continuing all the way through the build, preload (if applicable), and run steps.

https://ddc-java.github.io/capstone-project/milestone-3.html#build-instructions-4-points

I have started basic build instructions, and user instructions.

This is captured in the read me


Docker environment should have more than 2GB free disk space

I'm getting a Docker environment should have more than 2GB free disk space error with 1.12.0 even though I have 140GiB available on my local disk. I tried to debug this but with Lombok it is basically impossible.

Your Docker VM should have 2gb of space, not your host drive. Please allocate more space to the Docker daemon.

Thanks. I didn't know Docker for Mac still had a disk space limitation. For anyone reading you can change it in the UI (Docker > Preferences > Disk).

Thanks. I didn't know Docker for Mac still had a disk space limitation. For anyone reading you can change it in the UI (Docker > Preferences > Disk).

The UI has updated since this comment. New location is Preferences > Resources > Disk image dize.

FTR the latest release of Testcontainers (1.17.2) no longer checks this.


feat(scripts_test): add installation token test

Signed-off-by: Dominik Rosiek<EMAIL_ADDRESS>

I'm going to add comments to asserts, but it's ready to review


Does it support raytrace mouse clicks?

Hello,
I am wondering if this would support raytracing the splats themselves rather than the XYZ points? I am trying to create a mouse interactor but at the moment, it seems that mouse interaction with splats is not possible unless you click in the center of the splat (points).
Any suggestion? Or would this require further adjustments to the custom shaders?

Many thanks. I will try your code.
I was actually trying to use raycasting against the XYZ points with world coordinates. It was actually working, but it needed a bit of work to handle it. I just could not do it with the meshes themselves because three js saw the splats as invisible.
Do you also know if it’s possible to add objects that would be able to blend with the mesh? For example, if I add an object with 50% opacity, in front of the splat, then the splats are still not visible through the box. Tried it with depth tests but nothing seems to work. I hope you understand what I mean. Thanks for the code!!

Do you also have a function where you can select a set of splats by dragging the mouse over a select splats and capture their data? Thanks!

Ok, I managed to be able to do this. Just by dragging I am able to select the hits within the selected area, even if several rays hits a splat, its only counted once.
If I want to change the color of the selected area, which function/data can I change to have them being rendered in another color? For example, I select an area and it becomes yellow to indicate selected gaussians. @mkkellogg
Array(98)
0
:
Hit {origin: Vector3, normal: Vector3, distance: 7.791569343969397, splatIndex: 3379030}
1
:
Hit {origin: Vector3, normal: Vector3, distance: 6.501858822219376, splatIndex: 238717}
2
:
Hit {origin: Vector3, normal: Vector3, distance: 8.145546947668452, splatIndex: 3866475}
3
:
Hit {origin: Vector3, normal: Vector3, distance: 7.704654750292739, splatIndex: 2975015}
4
:
Hit {origin: Vector3, normal: Vector3, distance: 7.007145544099755, splatIndex: 1806775}
5
:
Hit {origin: Vector3, normal: Vector3, distance: 6.441965736158495, splatIndex: 1401130}
6
:
Hit {origin: Vector3, normal: Vector3, distance: 6.386669952888312, splatIndex: 1815513}
7
:
Hit {origin: Vector3, normal: Vector3, distance: 6.572796986984113, splatIndex: 5277430}
8
:
Hit {origin: Vector3, normal: Vector3, distance: 6.649110114023007, splatIndex: 5809711}
9
:
Hit {origin: Vector3, normal: Vector3, distance: 7.966611424637027, splatIndex: 2464279}
10
:
Hit {origin: Vector3, normal: Vector3, distance: 7.57514852037996, splatIndex: 2496780}
11
:
Hit {origin: Vector3, normal: Vector3, distance: 7.450429896871575, splatIndex: 4121328}
12
:
Hit {origin: Vector3, normal: Vector3, distance: 7.071975992284323, splatIndex: 2963635}
13
:
Hit {origin: Vector3, normal: Vector3, distance: 6.409067107068281, splatIndex: 2145776}
14
:
Hit {origin: Vector3, normal: Vector3, distance: 6.569121598415119, splatIndex: 2899248}
15
:
Hit {origin: Vector3, normal: Vector3, distance: 6.748451482364997, splatIndex: 5131273}
16
:
Hit {origin: Vector3, normal: Vector3, distance: 7.708737542804063, splatIndex: 3963590}
17
:
Hit {origin: Vector3, normal: Vector3, distance: 7.651760758336675, splatIndex: 3486992}
18
:
Hit {origin: Vector3, normal: Vector3, distance: 7.676078690369003, splatIndex: 1421594}
19
:
Hit {origin: Vector3, normal: Vector3, distance: 7.464344290900274, splatIndex: 2523039}
20
:
Hit {origin: Vector3, normal: Vector3, distance: 7.373109692839261, splatIndex: 3138907}
21
:
Hit {origin: Vector3, normal: Vector3, distance: 7.1049169017198475, splatIndex: 2815412}
22
:
Hit {origin: Vector3, normal: Vector3, distance: 6.607358069917467, splatIndex: 4832920}
23
:
Hit {origin: Vector3, normal: Vector3, distance: 6.669811855401825, splatIndex: 5641386}
24
:
Hit {origin: Vector3, normal: Vector3, distance: 7.558577059771568, splatIndex: 1918458}
25
:
Hit {origin: Vector3, normal: Vector3, distance: 7.286929280991535, splatIndex: 4274145}

There is no direct way to change a splat's color, so you'll have to implement it yourself. You can take a look at the SplatBuffer.getSplatColor() function to get some hints on how the data is structured: https://github.com/mkkellogg/GaussianSplats3D/blob/ef524f4308c7793c78005aeedc03a2f8f8f138fa/src/loaders/SplatBuffer.js#L291
Once you have changed the splat's color in the splat buffer, you'll need to update the GPU data textures with the appropriate values. That can be done using the SplatMesh.refreshDataTexturesFromSplatBuffers() function.
There is probably more complexity to doing this (and edge cases that I haven't thought of) than I have addressed here, so you'll probably have to spend some time digging through and learning the code. Also, if you change a splat's color, you'll need to remember it so you can store it later :)

Ok, thanks.
Can I assume globalsplatindex is the index of the splat itself, which we store in the sectionindex inside the function?
outColor[0-3] is RGBA, correct?
And outcolor[] is the one that we actually use in the refresh function?
So if I fetch the globalindex first, modify the colours, and then call splatbuffer and refreshtextures, it should be feasible?
I am still new to programming so please have patience with me. 😆

So my plan here is to use AABB bounding box to get a box from two views. By fetching a screenshot and a specific cropped view, I will send these to SAM segmentation model and get the binary masks back.
I am wondering, I am trying to find the function to access the XYZ points within a set box, but cannot.
What function can I call to get the splatsindex as well as XYZ coordinates within bounding box? I am having a little trouble finding those functions.  Thank you.

@mkkellogg
here is an example where I have managed to integrate SAM 2 with a backend with your interactive Gaussian Splatting Viewer GUI. Looks awesome. By selecting an area, I am able to segment certain areas.

However, would be cool to highlight to splats via some kind of selection hue color. Could you please share how to access the XYZ values in the Viewer pipeline? Thank you!

All splat data is stored in one or more SplatBuffer instances, and those are all stored in a single instance of SplatMesh. You can pull the data out of the splat buffers and store them in JavaScript arrays for manipulation by using SplatMesh.fillSplatDataArrays(). Look at this function to see how it's used: https://github.com/mkkellogg/GaussianSplats3D/blob/ef524f4308c7793c78005aeedc03a2f8f8f138fa/src/splatmesh/SplatMesh.js#L886
Currently when a scene is being loaded, the fillSplatDataArrays() function is used to pull the splat data (XYZ position, color, etc...) from the splat buffer and that data is pushed to a three.js texture, which is how it gets to the GPU. An example of that second step is here: https://github.com/mkkellogg/GaussianSplats3D/blob/ef524f4308c7793c78005aeedc03a2f8f8f138fa/src/splatmesh/SplatMesh.js#L919

Thank you! I will get back to you in case of more questions. 👍

@mkkellogg I have tried to expose SplatMesh but it seems that I cannot still access those functions via the npm package. Any suggestions for a sample code on how you do it with the viewer, please? When I try to read the contents, it say that they are undefined for some reason.

Sorry for the late response, you will have to access the instance of SplatMesh through the Viewer class. Something like:
const viewer = new GaussianSplats3D.Viewer();
viewer.splatMesh.updateDataTexture(...)
// or
viewer.splatMesh.updateBaseDataFromSplatBuffers(...)

@mkkellogg @abrahamezzeddine
Hello,
i also wanted to change the color for certain splats.
i saw these two updateBaseDataFromSplatBuffers and updateDataTexture  but how can we identify splat and change color
@abrahamezzeddine did you managed to do it?

I'm going to close this for now, but please let me know if you have any more questions.


feat: skip tag which has error timestamp

The current timestamp is smaller than last timestamp, which will cause current dts to be smaller than last dts. This will cause the browser to get stuck when playing the video. This may be a problem with the push order of the server, but adding processing measures in flv.js can better avoid this problem.

#624

Merged, thanks

AFAIK timestamp of tags in the FLV tag sequence doesn't really need to keep monotonic increasing.
Only timestamps of tags that belong to a certain stream should keep monotonic increasing in the sequence of the stream.
In other words, a new video tag's timestamp should be equal to or greater than the previous video tag's timestamp.
Similarly, a new audio tag's timestamp should be equal to or greater than the previous audio tag's timestamp.

Will revert.

AFAIK timestamp of tags in the FLV tag sequence doesn't really need to keep monotonic increasing.
Only timestamps of tags that belong to a certain stream should keep monotonic increasing in the sequence of the stream.
In other words, a new video tag's timestamp should be equal to or greater than the previous video tag's timestamp.
Similarly, a new audio tag's timestamp should be equal to or greater than the previous audio tag's timestamp.

Thanks Reply.
But I don't understand the meaning of "Only timestamps of tags that belong to a certain stream should keep monotonic increasing in the sequence of the stream." too much. In what scenarios is it okay for the timestamps to be out of order? This seems to be the opposite of "In other words, a new video tag's timestamp should be equal to or greater than the previous video tag's timestamp.".
Looking forward for your reply, thank you.

Some encoder/publisher writes malformed timestamps at times. But if any video tag's timestamp is equaled to or greater than the previous video tag, and similarly any audio tag's timestamp is equaled to or greater than the previous audio tag, it wouldn't cause playback issues.
Sometimes the onMetaData script tag will be received again which may have a timestamp of 0.
So you have to compare the tag timestamp with the previous tag which has the same type,
(for video tag, compare with previous video tag), and ignore timestamp checking for script tags.

Some encoder/publisher writes malformed timestamps at times. But if any video tag's timestamp is equaled to or greater than the previous video tag, and similarly any audio tag's timestamp is equaled to or greater than the previous audio tag, it wouldn't cause playback issues.
Sometimes the onMetaData script tag will be received again which may have a timestamp of 0.
So you have to compare the tag timestamp with the previous tag which has the same type,
(for video tag, compare with previous video tag), and ignore timestamp checking for script tags.

I understand what you mean, I will submit a new PR when I have time. Thanks.

@Dcatfly
09982ef


add Kart

Adding Kart CLI to the list. Also my IDE removed some white space from the end of a few lines, that's not me being pedantic!

Great. Thank you very much. Interesting that there are three different geospatial version control systems.


Add initial JavaScript documentation

This addresses #287. There are still some open TODOs:

Instrumentation

Events
Creating Metrics
Propagators and Context
Automatic Instrumentation

Getting Started for Javascript in the Browser
...

@austinlparker please have a look, if this works or what might need to be changed.

lgtm outside the above suggestions

Thanks for looking through it and your suggestions, I committed all of them.


 This PR was reverted.

#575 is time-sensitive

@habemuscode @CikiMomogi  #575 is not a lot, but we're going to release in 20-30 mins, so if you don't feel like doing things very soon, then you may want to update things later :)


Update to SYCL 2020

Update to SYCL 2020:

Updated CMakeLists with recent supported SYCL implementations.
Changed namespace from cl::sycl to sycl::
Updated device selector selection
changed accessor target::local with local_accessor
Removed kernel offset
change get_id with get_group_id
changed access::target with target

Tested on both NVIDIA and AMD GPUs, looks good to me


fixes #489 remove fields from application

removed grade and coding skills field from application

Coverage remained the same at 100.0% when pulling d5352e869b5514fd3775f2b60d4c2dab80da4c20 on 489_remove_fields_from_application into fa73d5e3566e7c76551acf4b57718e4ac4999353 on dev.

Coverage remained the same at 100.0% when pulling d5352e869b5514fd3775f2b60d4c2dab80da4c20 on 489_remove_fields_from_application into fa73d5e3566e7c76551acf4b57718e4ac4999353 on dev.

Coverage remained the same at 100.0% when pulling ea70bd4e3d6c42c5cabd6ee05e540c0b252912ed on 489_remove_fields_from_application into 30faa4f1b640e28030dd2faa174ae13d2b27c1c7 on dev.

Coverage remained the same at 100.0% when pulling c49bad445905dd682b53b29e97182e8893ef9db9 on 489_remove_fields_from_application into c52e4a29f7d0c242313855efe3f59ca796045684 on dev.


Update Post “pre-construction-termite-protection”

Automatically generated by Netlify CMS

👷 Deploy Preview for chic-shortbread-66a66b processing.

Name
Link

🔨 Latest commit
0454b62e4b23bf6aff4359626e589f311e0164fe

🔍 Latest deploy log
https://app.netlify.com/sites/chic-shortbread-66a66b/deploys/654ac688540740000836845a


Update website on build action

Better update website on gh-pages branch after completed build action. Deploy website on gh-pages push.
In this case, it's fine if gh-pages only contains website code. Website must be built in workflow itself, deploying action shall not use Jekyll as chirpy is not GitHub supported.

The regular develop branches contain the website template in a subfolder.
Wherever a release ist created, the website gets built from template, extracted and pushed as attractive to gh-pages


Comparative regression justification update

I've updated the comparative regression justification to include the outcome prediction (if on) and the score reasoning from the best sample. To do this I had to update the alignment functions class to optionally return the index of the best sample.

@eveenhuis I switched the best sample selection to also use _select_min_dist_choice() so that the misaligned option works

Thanks! I will approve and leave the return value decision up to @dmjoy


Is159 157 juntar e atualizar status com horario

[x] 1. Add new function of update the doctor's status.
[x] 2. Add new function of update the events.

Pull Request Test Coverage Report for Build 584

9 of 9 (100.0%) changed or added relevant lines in 3 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.1%) to 95.444%

Totals

Change from base Build 553:
0.1%

Covered Lines:
398

Relevant Lines:
417

💛  - Coveralls