Improve upon client translations! (23 unsupported languages!)

 Issue by grctest
Sunday Apr 16, 2017 at 17:21 GMT
Originally opened as https://github.com/Erkan-Yilmaz/Gridcoin-tasks/issues/111

I believe that getting the Gridcoin client translated to Chinese (Cantonese/Mandarin) is a high priority - getting added to a Chinese exchange won't happen without language support.
As well as Chinese there are 23 other languages with incomplete translation entries, this is not ok considering our community is distributed around the world. The unsupported languages show '???' throughout the client despite being an available option in the language drop-down menu.
Until we have full translations, I believe it would be far more professional to simply not display unsupported languages within the drop-down menu
Can we get some volunteers to provide translations? It would be major kudos within the community! In the mean time we should consider placing bounties on full translations and look towards similar cryptocurrencies for quick translation inheritance (gives us a head start).
Affected files:
Gridcoin:ar ; Blackcoin:ar
Gridcoin:be_BY ; Blackcoin:be_BY
Gridcoin:bg ; Blackcoin:bg
Gridcoin:el_GR ; Blackcoin:el_GR
Gridcoin:fa ; Blackcoin:fa
Gridcoin:fa_IR ; Blackcoin:fa_IR
Gridcoin:he ; Blackcoin:he
Gridcoin:hi_IN ; Blackcoin:hi_IN
Gridcoin:ja ; Blackcoin:ja
Gridcoin:ka ; Blackcoin:ka
Gridcoin:kk_KZ ; Blackcoin:kk_KZ
Gridcoin:ko_KR ; Blackcoin:ko_KR
Gridcoin:ky ; Blackcoin:ky
Gridcoin:ro_RO ; Blackcoin:ro_RO
Gridcoin:sah ; Blackcoin:sah
Gridcoin:sr ; Blackcoin:sr
Gridcoin:th_TH ; Blackcoin:th_TH
Gridcoin:tr ; Blackcoin:tr
Gridcoin:uk ; Blackcoin:uk
Gridcoin:ur ; Blackcoin:PK ; Blackcoin:ur ; Blackcoin:PK
Gridcoin:vi ; Blackcoin:vi
Gridcoin:zh_CN ; Blackcoin:zh_CN
Gridcoin:zh_TW ; Blackcoin:zh_TW
Gridcoin:fa ; Blackcoin:fa
Reference: (includes non-affected translations)

 Comment by PsiPhiTheta
Sunday Apr 16, 2017 at 20:40 GMT

Guys I am willing to do the entire french translation. Can someone send me a list of all the words to translate for Gridcoin? (I'll have a look at the Blackcoin translation, review and alter it where necessary)
It looks like French has not been linked in anyway - has it already been done?

 Comment by grctest
Sunday Apr 16, 2017 at 20:44 GMT

Guys I am willing to do the entire french translation. Can someone send me a list of all the words to translate for Gridcoin? (I'll have a look at the Blackcoin translation, review and alter it where necessary)
It looks like French has not been linked in anyway - has it already been done?

https://github.com/gridcoin/Gridcoin-Research/blob/master/src/qt/locale/bitcoin_fr.ts
https://github.com/gridcoin/Gridcoin-Research/blob/master/src/qt/locale/bitcoin_fr_CA.ts
It would appear that French has already been translated, you could always perform a review of the translations in an effort to improve existing translations?
Thanks 👍

 Comment by tomasbrod
Sunday Apr 16, 2017 at 21:02 GMT

I am here for the sk_SK translation. Even if only 5 people will actually use it, haha. It is present, but broken. What encoding is being used, Unicode UTF-8? Looks like all ť got replaced by ?.

 Comment by PsiPhiTheta
Sunday Apr 16, 2017 at 21:19 GMT

It would appear that French has already been translated, you could always perform a review of the translations in an effort to improve existing translations?

Done.

 Comment by grctest
Sunday Apr 16, 2017 at 21:29 GMT

I am here for the sk_SK translation. Even if only 5 people will actually use it, haha. It is present, but broken. What encoding is being used, Unicode UTF-8? Looks like all ť got replaced by ?.

I believe something similar occurred for the Hungarian translation (fixed recently by a community member), if you're able to substitute the '?' character with the appropriate character that would be excellent.
If there are multiple '???' characters in a row that means the translation wasn't supplied in the first place (not the case for sk_SK).
Something else I've spotted is that throughout the translations we are missing copyright credits to blackcoin for their work done after peercoin (and before gridcoin).

 Comment by JovanDj
Sunday Apr 16, 2017 at 22:32 GMT

I will do the sr translation. Do I fork the file then push the translated file?

 Comment by grctest
Monday Apr 17, 2017 at 00:43 GMT

I will do the sr translation. Do I fork the file then push the translated file?

Yeah, create a fork of the Gridcoin-Research repo, change the files then submit a pull request. Thanks for helping 👍

 Comment by grctest
Monday Apr 17, 2017 at 02:17 GMT

<translation type="unfinished"></translation>
<translation type="unfinished"/>

The above are also used instead of "???" To identify a lack of translations.

 Comment by denravonska
Monday Apr 17, 2017 at 08:41 GMT

Everyone translating should use Qt Linguist to make it easier to translate and to ensure that nothing is missed. I don't think it's available as a standalone download, so you'd have to install Qt Creator.
Also, use the language files from the development branch, which just got rescanned.
Some other notes is to ignore translations which contain stylesheets, for example:
<source>
Wallet
</source>

These come from the dialog forms files which are currently being stripped of their CSS. Tranlations done to those strings will likely have to be retranslated later. Translating lines with simple HTML tags is fine but stay away from the stylesheet ones.
I can do the Swedish translation.

 Comment by tomasbrod
Wednesday Apr 19, 2017 at 10:21 GMT

The problem with Qt Linguist is that it has all translations marked as done. Even the broken ones and I did not find how to mark all non-done. So it does not really help.

 Comment by denravonska
Wednesday Apr 19, 2017 at 10:30 GMT

@tomasbrod Which language do you mean?
Edit: Ah, sk. Now I see the problem.

 Comment by HuguesDohmen
Wednesday Apr 19, 2017 at 19:08 GMT

If translations in duch need to be done, I will give it a shot.

 Comment by tomasbrod
Wednesday Apr 19, 2017 at 19:25 GMT

@denravonska The Slovak language. Additionally there are multiple unused strings and, what is worse, a lot of duplicate strings in the locale files.
https://github.com/tomasbrod/Gridcoin-Research/tree/locale/sk

 Comment by denravonska
Friday Apr 21, 2017 at 04:04 GMT

@tomasbrod I assumed duplicate translations got merged by Qt Linguist but I might be wrong.
I've left the vanished leftover translations in the files for this translation run under the assumption that they were used by the tool to provide translation suggestions for new strings.
@HuguesDohmen I'm pretty sure they do :)

 Comment by denravonska
Saturday Apr 22, 2017 at 16:14 GMT

I have added 26 translations which were in the source tree but not in the final build:
+        <file alias="af_ZA">locale/bitcoin_af_ZA.qm</file>
+        <file alias="be_BY">locale/bitcoin_be_BY.qm</file>
+        <file alias="bg">locale/bitcoin_bg.qm</file>
+        <file alias="bs">locale/bitcoin_bs.qm</file>
+        <file alias="ca">locale/bitcoin_ca.qm</file>
+        <file alias="ca<EMAIL_ADDRESS>+        <file alias="cy">locale/bitcoin_cy.qm</file>
+        <file alias="es_MX">locale/bitcoin_es_MX.qm</file>
+        <file alias="es_UY">locale/bitcoin_es_UY.qm</file>
+        <file alias="et">locale/bitcoin_et.qm</file>
+        <file alias="eu_ES">locale/bitcoin_eu_ES.qm</file>
+        <file alias="fa_IR">locale/bitcoin_fa_IR.qm</file>
+        <file alias="hi_IN">locale/bitcoin_hi_IN.qm</file>
+        <file alias="id_ID">locale/bitcoin_id_ID.qm</file>
+        <file alias="kk_KZ">locale/bitcoin_kk_KZ.qm</file>
+        <file alias="ky">locale/bitcoin_ky.qm</file>
+        <file alias="la">locale/bitcoin_la.qm</file>
+        <file alias="lv_LV">locale/bitcoin_lv_LV.qm</file>
+        <file alias="ms_MY">locale/bitcoin_ms_MY.qm</file>
+        <file alias="sah">locale/bitcoin_sah.qm</file>
+        <file alias="sq">locale/bitcoin_sq.qm</file>
+        <file alias="sr">locale/bitcoin_sr.qm</file>
+        <file alias="th_TH">locale/bitcoin_th_TH.qm</file>
+        <file alias="ur_PK">locale/bitcoin_ur_PK.qm</file>
+        <file alias="vi_VN">locale/bitcoin_vi_VN.qm</file>
+        <file alias="vi">locale/bitcoin_vi.qm</file>

 Comment by denravonska
Monday May 29, 2017 at 12:04 GMT

Standalone Qt Linguist installers are available at https://github.com/lelegard/qtlinguist-installers/releases. This is probably the easiest way for translators to help.

 Comment by grctest
Tuesday May 30, 2017 at 18:42 GMT

Looks like there's a larger amount of translations available within the official bitcoin repo:
https://github.com/bitcoin/bitcoin/tree/master/src/qt/locale
It appears to use a different format, however we could pick and choose..

 Comment by mrip0001
Thursday Jun 29, 2017 at 17:47 GMT

I will try the Chinese中文 translation

 Comment by mrip0001
Friday Jun 30, 2017 at 17:23 GMT

https://github.com/gridcoin/Gridcoin-Research/pull/404
I finished the Chinese中文 translation of Gridcoin格雷德币


Too much intermediate data loaded using has_many :through?

When asked to preload a :through association, Ecto loads a lot of intermediate data.
If I run this code:

Schema
defmodule Author do
  use Ecto.Schema

  schema "authors" do
    field :full_name, :string
    field :email, :string
  end
end

defmodule Comment do
  use Ecto.Schema

  schema "comments" do
    field :subject, :string
    field :content, :string
    field :post_id, :integer

    belongs_to :author, Author
  end
end

defmodule Post do
  use Ecto.Schema

  schema "posts" do
    field :title, :string
    field :body, :string

    has_many :comments, Comment
    has_many :commenters, through: [:comments, :author]
  end
end

Data
RedundancyRepo.insert_all("posts", [
  %{id: 1, title: "My title", body: "My body"}
])

RedundancyRepo.insert_all("authors", [
  %{id: 1, full_name: "Full name 1", email<EMAIL_ADDRESS>  %{id: 2, full_name: "Full name 2", email<EMAIL_ADDRESS>  %{id: 3, full_name: "Full name 3", email<EMAIL_ADDRESS>])

RedundancyRepo.insert_all("comments", [
  %{id: 1, post_id: 1, author_id: 1, subject: "Subject 1", content: "Big content 1"},
  %{id: 2, post_id: 1, author_id: 2, subject: "Subject 2", content: "Big content 2"},
  %{id: 3, post_id: 1, author_id: 3, subject: "Subject 3", content: "Big content 3"},
  %{id: 4, post_id: 1, author_id: 1, subject: "Subject 4", content: "Big content 4"},
  %{id: 5, post_id: 1, author_id: 2, subject: "Subject 5", content: "Big content 5"},
  %{id: 6, post_id: 1, author_id: 3, subject: "Subject 6", content: "Big content 6"}
])

commenter_emails_query = from a in Author, select: struct(a, [:id, :email])
posts_query = from p in Post, preload: [commenters: ^commenter_emails_query]

[post] = RedundancyRepo.all(posts_query)

Ecto produces the following SQL statements:
15:11:18.730 [debug] QUERY OK source="posts" db=0.3ms queue=0.1ms
SELECT p0."id", p0."title", p0."body" FROM "posts" AS p0 []

15:11:18.730 [debug] QUERY OK source="comments" db=0.4ms
SELECT c0."id", c0."subject", c0."content", c0."post_id", c0."author_id", c0."post_id" FROM "comments" AS c0 WHERE (c0."post_id" = $1) ORDER BY c0."post_id" [1]

15:11:18.731 [debug] QUERY OK source="authors" db=0.3ms
SELECT a0."email", a0."id" FROM "authors" AS a0 WHERE (a0."id" = ANY($1)) [[1, 2, 3]]

(the repo with example above is available as ecto_redundancy_issue)
Note the SELECT c0."id", c0."subject", c0."content", c0."post_id", c0."author_id", c0."post_id" FROM "comments" ... query.
If I was interested in fields from comments, I'd have preload: [:comments] included explicitly, as an association I want to preload and build structs for. However, I'm only interested in comment authors' emails, so I have preload: [:commenters].
In this case loading comments is not desirable:

it adds network pressure when passing around potentially big chunks of comments.content text data,
it adds processor and memory pressure when building structs for comments, which are thrown away.

Unless it was a design decision to keep Ecto complexity moderate for the case described, would it be possible to not preload intermediate records fully, and only preload foreign keys, required to tie the intermediate record in question to its parent, and to establish which children there's to load?
For example, given the comments query above:
SELECT c0."id", c0."subject", c0."content", c0."post_id", c0."author_id", c0."post_id" FROM "comments" AS c0 WHERE (c0."post_id" = $1) ORDER BY c0."post_id" [1]

It could be rewritten to this:
SELECT c0."id", c0."author_id", c0."post_id" FROM "comments" AS c0 WHERE (c0."post_id" = $1) ORDER BY c0."post_id" [1]

Here, post_id is present to tie comments to the parent, and author_id is present to establish the IDs for the next query.
Environment

Elixir version: Elixir 1.7.2 (compiled with Erlang/OTP 21)
Database and version: PostgreSQL 10.5
Ecto version (mix deps): master branch, specifically 63d075d66201819e37d6774f155a487ace583855
Database adapter and version (mix deps): 0.13.5
Operating system: macOS

Current behavior
Preload is loading all intermediate data.
Expected behavior
Maybe: preload only foreign keys?

:through is meant to be literally through each step along the way, that's why the intermediate fields are filled. If you want to avoid the intermediate data, then declaring a many to many relationship is the way to go.

@josevalim Noted on the many_to_many. Thank you for explaining the motivation behind through!


CLI: use namespace instead of org name

just need to run pipeline on main twice to publish temboclient 1.0.2 then tembo CLI, that will resolve this CI error


Can't generate docs on Windows

After installing the Windows version of the SDK, I would like to run ./bin/dev/docs.sh on Windows. I installed the Windows Subsystem for Linux but I get an error:
/mnt/c/src/flutter/bin/flutter: line 5: $'\r': command not found

I am able to run analyze-sample-code.dart since it is a dart file:
cd dev\bots
dart pub get
dart pub run .\analyze-sample-code.dart

I don't see any mention of Windows in the Dartdoc generation README, maybe we should warn Windows users?

Hi @johnpryan
Are you generating docs from the repository in windows or Linux distro in WSL?  I doubt you can access Windows 10 SDK from inside WSL.
If you do the setup in windows with the necessary tools, you should be able to generate docs

Hello @johnpryan
Revisiting this issue to reflect correct status, just would like to know if this is still the case and need to keep it open ?

Hello @johnpryan Revisiting this issue to reflect correct status, just would like to know if this is still the case and need to keep it open ?

I have WSL on my personal machine. I'll verify and update the issue tomorrow.

A different error is thrown when generating docs in WSL on the latest master  channel. For sone reason version file is removed.
taha@DESKTOP-8A8RR1A:~/flutter$ ls
AUTHORS             CONTRIBUTING.md  README.md              bin                   examples             version
CODEOWNERS          LICENSE          TESTOWNERS             dartdoc_options.yaml  flutter_console.bat
CODE_OF_CONDUCT.md  PATENT_GRANT     analysis_options.yaml  dev                   packages
taha@DESKTOP-8A8RR1A:~/flutter$ ./dev/bots/docs.sh
Thu Aug 17 00:19:00 EEST 2023: Running docs.sh
cat: /home/taha/flutter/version: No such file or directory
taha@DESKTOP-8A8RR1A:~/flutter$ ls
AUTHORS             CONTRIBUTING.md  README.md              bin                   examples
CODEOWNERS          LICENSE          TESTOWNERS             dartdoc_options.yaml  flutter_console.bat
CODE_OF_CONDUCT.md  PATENT_GRANT     analysis_options.yaml  dev                   packages
taha@DESKTOP-8A8RR1A:~/flutter$

Thanks for verifying @TahaTesser. Based on latest findings as above, updating labels as applicable.

Responding to the original issue, @johnpryan it looks like you checked out the Flutter SDK with git for Windows, with the settings to convert unix style line endings to Windows style, then you executed a bash script from that checkout on the Windows subsystem for Linux. This is not a supported use case, if you want to run scripts from WSL, I would recommend cloning the SDK from WSL to an ext4 partition.
Also, it was my understanding that we never inteded bin/dev/docs.sh to be run by end users. If there's anywhere we recommend that, we should reconsider that.


Add a reset history method to useStateWithHistory

Is your feature request related to a problem? Please describe.
useUndoable has a great summary of why resetting state on useStateWithHistory is useful. I set my state to the response of a network request and want to prevent the user being able to rewind history to the initial value set before the request had finished.
Describe the solution you'd like
Add a method to useStateWithHistory that follows the API of useUndoable's resetInitialState, where it takes in a param to set the state to and clears the history.
Describe alternatives you've considered
There are two alternatives I've been using:

using useUndoable instead of this library (but it doesn't work for deeply nested objects and is an additional dependency)
Manually extending the useStateWithHistory myself to include this method. The method is really easy to add:

  const resetInitialState = useCallback(
    (newInitialState: IHookStateInitAction<S>) => {
      innerSetState(newInitialState as S);
      history.current = [newInitialState as I];
      historyPosition.current = 0;
    },
    [],
  );

This seems to have been requested already in https://github.com/streamich/react-use/issues/1386 but I'm re-raising here because:
I believe the interface of useUndoable is relevant, I'm providing a proposed solution, and that issue has been open for over 2 years.
If approved i'd even be happy to raise a PR myself.
Thanks!

@rohaldb you can achieve similar by setting initialState as undefined, then you can go to initialState by calling - stateHistory.back(stateHistory.position)


Profiler: the checkboxes seem difficult to tick

Tested on Godot 2.1 beta, Windows 10 64 bits
When testing the debugger, I found that ticking the checkboxes that toggle curves are not very responsive, I often have to click several times on them, even when the game is paused or profiling is stopped.
However, no problem when the game doesn't runs.

Not critical for the upcoming 2.1, so moving to the next milestone.

Is this still valid?

I think it's still valid, I found it difficult to tick profiler checkboxes for curves.
I think the problem increases the lower the checkbox is (for lines high up, it's easier, for the bottom line its argh why won't it tick!)

I'll close this as nobody else has been able to reproduce this recently. Please comment (with the issue template filled) if you can still reproduce this.


Error when passing a DOM event handling function to a component.

With {{foo click=someFunc}} and this addon installed, rendering triggers a debug assertion:
Assertion Failed: You can not define a function that handles DOM events in the <dummy@component:foo::ember451> tagless component since it doesn't have any DOM element.

Thanks for reporting this @lukemelia! I just knew this commit would come back to haunt me ;)
I'm recovering this week/weekend from LASIK but when I'm back @100% next week I'll dive in and see what we can do to support this type of action!

Might also look at the discussion in #24 as it seems related

@lukemelia trying to repro this tonight and found a way to land classic actions w/out a warning in #73 . I'm curious if you could twiddle up something small in the next week just to show end to end what you had in mind. I'm feeling like an action imposter all of the sudden so any guidance would help educate me and I'll surely owe you one :)
Thanks again!

@lukemelia I finally got an example app to repro this :)
https://github.com/toranb/hot-reloader-actions-tagless-triage

Some good news! If I simply remove the line tagName: "" from our wrapper component this problem disappears completely. I remember the ember 3.1/3.2 beta blog mentioning that "template only glimmer components" could remove this extra div element using the optional flag ember feature:enable template-only-glimmer-components so ... I'm curious when this lands if we just get the same "tagless" behavior.
I'm planning to pull this^ and do a v1.0 release w/ a few other changes, like removing the targetObject deprecation warnings, so users can give it another go and provide feedback. If this creates a visual issue for people they can simply punt on this addon until we know more about the "template only glimmer components" feature. At best, this should give people stuck with this action error another shot at hot reloading :)
I've got 1 blocker before this v1.0 release that I'm hoping to resolve this weekend/early next week.

I published v1.0.0 this morning and tested it w/ a handful of ember 2.18+ apps so for anyone having this issue please give it another go if you've got some bandwidth and still want to get fast feedback :)


question - clone Project in colab Notebook

Hi,
I have a question, I cloned the project in a Colab notebook in content folder
!git clone https://github.com/roboflow/cvevals !cd cvevals !pip3 install -r requirements.txt !pip3 install -e . !cp scripts/cutout.py .
But I always get the error message,
ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'
even though the file exists under cvevals folder?

this worked for me. I only get errors with a few packages
!pip3 install -r ./cvevals/requirements.txt
!pip3 install -e .
!cp scripts/cutout.py .

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
lida 0.0.10 requires fastapi, which is not installed.
lida 0.0.10 requires kaleido, which is not installed.
lida 0.0.10 requires python-multipart, which is not installed.
lida 0.0.10 requires uvicorn, which is not installed.
llmx 0.0.15a0 requires cohere, which is not installed.
llmx 0.0.15a0 requires openai, which is not installed.
llmx 0.0.15a0 requires tiktoken, which is not installed.
google-colab 1.0.0 requires pandas==1.5.3, but you have pandas 2.0.1 which is incompatible.
Successfully installed Pillow-9.5.0 PyYAML-6.0 certifi-2022.12.7 chardet-4.0.0 charset-normalizer-3.1.0 contourpy-1.0.7 cycler-0.10.0 fonttools-4.39.3 idna-2.10 importlib-resources-5.12.0 kiwisolver-1.4.4 numpy-1.24.3 opencv-python-<IP_ADDRESS> packaging-23.1 pandas-2.0.1 pyparsing-2.4.7 python-dotenv-1.0.0 pytz-2023.3 requests-toolbelt-1.0.0 roboflow-1.0.8 supervision-0.6.0 tqdm-4.65.0 tzdata-2023.3 urllib3-1.26.15 wget-3.2 zipp-3.15.0
WARNING: The following packages were previously imported in this runtime:
[PIL,certifi,cycler,kiwisolver,numpy,pyparsing]
You must restart the runtime in order to use newly installed versions.


⚠ ClamAV has degraded performance

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

HTTP code: 200
Response time: 100 ms

Resolved: ClamAV performance has improved in 1651487 after 5 minutes.


Make backend goroutines cancellable

https://github.com/jim-minter/rp/issues/57
Backend goroutines should use a cancellable context which is owned by the corresponding heartbeat goroutine.  In this way if the heartbeat realises it has lost the lease, it can cancel the work in progress.

Another thing which will be super-valuable is ensuring that any database backend write can only be made by the leaseholder.

Implemented.


duplicate header fixes

repeated header fixes

duplicate header is removed by @gsalunke, https://github.com/FifthTry/dark-mode-switcher/commit/b3db5683752d2f4f97c2c6a02da3e74270280784. no need to merge , closing this pr.


ext: ruby 3.3 support

What problem is this PR intended to solve?
Add precompiled native support for Ruby 3.3.
Note that this is still experimental! It is precompiling using a rake-compiler-dock snapshot that uses 3.3.0-preview3, and is mostly to build confidence that I can cut a rake-compiler-dock release candidate ("RC").
Have you included adequate test coverage?
Testing against 3.3.0-preview3 or head
Does this change affect the behavior of either the C or the Java implementations?
N/A

I've updated this branch to use rake-compiler-dock v1.4.0.rc1

Please note this won't get released until one of two things happens:

the Ruby Core team freezes the ABI (binary interface) for Ruby 3.3 (see https://bugs.ruby-lang.org/issues/19980)
Ruby 3.3.0 final release arrives

@flavorjones looks like with the release of 3.3 RC1 this morning, the ABI was frozen!

After the release of RC1, we will avoid introducing ABI incompatibilities wherever possible. If we need to do, we’ll announce it in the release note.

With that, the corresponding issue you linked above has been closed.

Thanks @flavorjones!!


Add horovod/mpi support to generic container

Currently, generic container is bare-bones & doesn't have setup for MPI/SSH/Horovod.
Hence we are skipping horovod tests on mxnet.cpu [generic container].
That's the same case in TF
https://github.com/aws/sagemaker-tensorflow-training-toolkit/blob/a22e3df0faf66b215c24c1bff6f334e14c39d5cf/test/integration/local/test_horovod.py#L26-L29
https://github.com/aws/sagemaker-tensorflow-training-toolkit/blob/a22e3df0faf66b215c24c1bff6f334e14c39d5cf/test/integration/local/test_horovod.py#L36-L42

@ChuyangDeng as discussed offline. This functionality would need addition of openmpi/horovod related lines to generic container to make it run for horovod/mpi
Refer: https://github.com/aws/deep-learning-containers/blob/master/mxnet/training/docker/1.6.0/py3/Dockerfile.gpu


[Proposal] Consider allowing implicit extend.

Apologies if this has been suggested before, but I could not find it in the archives.
Let's say I have some component OriginalComponent
const OriginalComponent = styled.div`background-color: blue; color: red;`;

I can extend that component two ways
// The recommended way.  One class, target is `div`.
const ExtendedComponent = OriginalComponent.extend`color: yellow;`;
// The usual way.  Two classes, target is `OriginalComponent`.
const StyledComponent = styled(OriginalComponent)`color: yellow;`;

The recommend way performs better (since the tree is a level smaller) and gives fewer classes.  And while the API is very simple and obvious, the explicit requirement seems artificial.
What I propose is a slight change to the way styled works.  To simplify it, something like
function styled(component) {
  // Check if `component` is a `StyledComponent`.
  if (component.styledComponentId) {
    // If so, use `component.extend`.
    return component.extend;
  }
  // Otherwise, do usual `styled` stuff.
}

It can potentially give a performance boost to newer users.

If you put the check in the StyledComponent model, it will potentially boost the performance of withComponent, as well, since that loops back through createStyledComponent.

Duplicate of https://github.com/styled-components/styled-components/issues/1087


fix: 修复自动生成摘要不显示的问题

Description
Fix #4

@all-contributors please add @AirboZH  for code, maintenance, doc and review


More assertions in build with libc++

For changelog. Remove if this is non-significant change.
Category (leave one):

Build/Testing/Packaging Improvement

Short description (up to few sentences):
Enabled more assertions in build with libc++.

protoc failed to work with these assertions.

Failed.


Broken on ubuntu 24.04

See this for details: https://github.com/ForNeVeR/checktimer/pull/96

Fixed by #12.


DeepSeek MoE support

This PR adds support for DeepSeek MoE https://huggingface.co/deepseek-ai/deepseek-moe-16b-base
Main differences from Mixtral:

Shared experts
First layers are dense
MoE normalization disabled

Build:
cd TensorRT-LLM/examples/llama
python convert_checkpoint.py --model_dir /models/deepseek-moe-16b-base/ --dtype float16  --output_dir /trtllm/deepseek-moe-16b-base/1-gpu-tmp/
trtllm-build --checkpoint_dir /trtllm/deepseek-moe-16b-base/1-gpu-tmp/ --output_dir /trtllm/deepseek-moe-16b-base/1-gpu  --max_batch_size 32 --max_input_len 3072  --max_output_len 1024 --max_num_tokens 32768  --gpt_attention_plugin float16  --gemm_plugin float16  --context_fmha  enable  --paged_kv_cache enable   --remove_input_padding  enable  --use_paged_context_fmha enable

Run:
cd TensorRT-LLM/examples/
python run.py --engine_dir /trtllm/deepseek-moe-16b-base/1-gpu --tokenizer_dir /models/deepseek-moe-16b-base/ --max_output_len 32 --top_p 0 --input_text
"The president of the United States is person who"

TensorRt-LLM Output:
[TensorRT-LLM] TensorRT-LLM version: 0.11.0.dev2024060400
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Input [Text 0]: "<｜begin▁of▁sentence｜>The president of the United States is person who"
Output [Text 0 Beam 0]: " is elected by the people of the United States to lead the country. The president is the head of the executive branch of the government. The president is the commander"

Transformers Output:
>>> tokenizer.batch_decode(model.generate(torch.LongTensor([tokenizer.encode("The president of the United States is person who")]).cuda(), max_new_tokens=32, do_sample=False))
The attention mask and the pad token id were not set. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
Setting `pad_token_id` to `eos_token_id`:100001 for open-end generation.
['<｜begin▁of▁sentence｜>The president of the United States is person who is elected by the people of the United States to lead the country. The president is the head of the executive branch of the government. The president is the commander']

Thanks @akhoroshev for your contribution to TRT-LLM.
My suggestion is to use the dedidacted model definition for the newly added MoE models instead of reuse the llama model.
We do have plan to create the unique mixtral and arctic  example in the coming release.
I'm not sure such efforts is acceptable for you or not.
If u're not willing to refactor code in this way, we can do that later after this MR merged.

Hi @akhoroshev, first off thanks for the contribution.
I agree with @nv-guomingz about having this be a separate model, but also that this is something we could handle separately after this MR.
My second comment is that we have done some work for other shared experts and settled on a slightly different convention for the shared expert design. Instead of modifying the MOE plugin we instead use an unmodified MOE and combine it with an MLP layer for the shared experts at the DecoderLayer level. We are not necessarily committed to one design or the other, so I will discuss with others working on this and decide how best to unify the design with what you have here.
My final note is that I would like to see a more general version of the DenseReplaceConfig that instead takes a list of layers that are marked as dense or moe, and then have a function is_moe_layer(layer_idx) to check.
Please let us know if you are interested in helping with this, otherwise we can look into finding someone to take it forward from here

I agree that the is_moe_layer function is better. But what about dense_intermidiate_size param? It's ok or we need more general solution?

This is a good question, perhaps a list of DenseConfig and MOEConfig options would be the best approach that can store the details of the config for each layer. Then we can have two functions: is_moe_layer(layer_idx) -> bool and then corresponding get_layer_config(layer_idx) -> MOEConfig|DenseConfig. Open to suggestions if you have any other ideas.

I agree that the is_moe_layer function is better. But what about dense_intermidiate_size param? It's ok or we need more general solution?

This is a good question, perhaps a list of DenseConfig and MOEConfig options would be the best approach that can store the details of the config for each layer. Then we can have two functions: is_moe_layer(layer_idx) -> bool and then corresponding get_layer_config(layer_idx) -> MOEConfig|DenseConfig. Open to suggestions if you have any other ideas.

@dataclass
class DenseConfig:
  intermediate_size: int
  hidden_act: str

@dataclass
class MoeConfig:
  num_experts: int
  top_k: int
  tp_mode: ParallelismMode
  num_shared_experts: int

  intermediate_size: int
  hidden_act: str

@dataclass
class LayersMLPConfig:
  config: Union[DenseConfig, MoeConfig, List[Union[DenseConfig, MoeConfig]]]

  def get_layer_config(layer_idx) -> Union[DenseConfig, MoeConfig]:
    pass

  def is_moe_layer(layer_idx) -> bool:
    pass

  def is_dense_layer(layer_idx) -> bool:
    return not is_moe_layer(layer_idx)

@djns99 I wrote the classes for your solution above. I want to extend existing MoeConfig with intermediate_size and hidden_act members. Also I want to introduce new DenseConfig and LayersMLPConfig classes. What do you think about it?

Thanks @akhoroshev that makes perfect sense to me. Feel free to make that change to this PR if you would like
I discussed re shared experts, and the verdict was that we should implement a SharedExpertsMOE type class that handles this so we can keep the MOE class simple while also having one shared implementation. You wont have to do anything here yet, we will get that integrated internally in the next week or so.

Any progress update on this one?

@Ahmad-Magdy-Osman
yep, we are working on enable DeepSeek V2 (MoE + MLA) in TRT-LLM v0.11/v0.12, progress on performance benchmark and optimization at same time

@dominicshanshan
Is this available on the main branch or somewhere else? I can try building the docker image and experiment with it

Hi @Ahmad-Magdy-Osman, currently these changes are being tested on our internal branch. Once they are accepted internally they will be released in one of our upcoming weekly releases. We will let you know as soon as they are available

@dominicshanshan
Hello, first of all thanks for your help with this PR. I'm too busy to do this right now.

yep, we are working on enable DeepSeek V2 (MoE + MLA) in TRT-LLM v0.12, progress on performance benchmark and optimization at same time

Will DeepSeek V1 architecture be supported?

@dominicshanshan
Hello, first of all thanks for your help with this PR. I'm too busy to do this right now.

yep, we are working on enable DeepSeek V2 (MoE + MLA) in TRT-LLM v0.12, progress on performance benchmark and optimization at same time

Will DeepSeek V1 architecture be supported?

yes

Just checking if there are any branches where the implementation of this is available yet?

Any recent updates regarding the support for DeepSeek MOE?

deepseek MOE hopefully will be appear in main branch in next week, deepseek v2 (MLA+MOE) hopefully will be appear in main at end of month, we are still working hard to improve the MLA kernel performance..

Any recent updates regarding the support for DeepSeek MOE?

deepseek MOE hopefully will be appear in main branch in next week, deepseek v2 (MLA+MOE) hopefully will be appear in main at end of month, we are still working hard to improve the MLA kernel performance..

Any recent updates regarding the support for DeepSeek MOE?

Any recent updates regarding the support for DeepSeek MOE?

deepseek MOE hopefully will be appear in main branch in next week, deepseek v2 (MLA+MOE) hopefully will be appear in main at end of month, we are still working hard to improve the MLA kernel performance..

Is it already supported?

Any recent updates regarding the support for DeepSeek MOE?

deepseek MOE hopefully will be appear in main branch in next week, deepseek v2 (MLA+MOE) hopefully will be appear in main at end of month, we are still working hard to improve the MLA kernel performance..

Any Updates？

deepseek v1 is ready to go, should appear in main branch in early next week, v2 we are still tuning , we are targeting to get the close perf as in v2 model paper demonstrate..

deepseek v1 is ready to go, should appear in main branch in early next week, v2 we are still tuning , we are targeting to get the close perf as in v2 model paper demonstrate..

Are there any recent releases? Deepseek v2 is exciting and I can't wait to try it out on trtllm.☺

@akhoroshev ,  deepseek-v1 is live in main branch now, deepseek-v2 target to go live in 10.1 holiday season, thanks for community contribution!
you can still leave comment in this thread but since it fulfilled the purpose I will close for now, thanks!

@akhoroshev , deepseek-v1 is live in main branch now, deepseek-v2 target to go live in 10.1 holiday season, thanks for community contribution!
you can still leave comment in this thread but since it fulfilled the purpose I will close for now, thanks!

nice work!

model opt support fp8 quant for Deepseek v1?
@dominicshanshan

Does model opt support fp8 quant for Deepseek v1?
@dominicshanshan
yep, already implemented and passed CI check, should appear in main branch soon

@akhoroshev , deepseek-v1 is live in main branch now, deepseek-v2 target to go live in 10.1 holiday season, thanks for community contribution!
you can still leave comment in this thread but since it fulfilled the purpose I will close for now, thanks!

little update: we cannot get deepseek-v2 ready for main branch in 10.1 holiday season, still working on some bugs during internal testing, will update the status after holiday ..

little update: we cannot get deepseek-v2 ready for main branch in 10.1 holiday season, still working on some bugs during internal testing, will update the status after holiday ..

Can you share some early performance report?

@akhoroshev , deepseek-v1 is live in main branch now, deepseek-v2 target to go live in 10.1 holiday season, thanks for community contribution!
you can still leave comment in this thread but since it fulfilled the purpose I will close for now, thanks!

little update: we cannot get deepseek-v2 ready for main branch in 10.1 holiday season, still working on some bugs during internal testing, will update the status after holiday ..

Hi @dominicshanshan, when will it be released?

@akhoroshev , deepseek-v1 is live in main branch now, deepseek-v2 target to go live in 10.1 holiday season, thanks for community contribution!
you can still leave comment in this thread but since it fulfilled the purpose I will close for now, thanks!

little update: we cannot get deepseek-v2 ready for main branch in 10.1 holiday season, still working on some bugs during internal testing, will update the status after holiday ..

Hi @dominicshanshan, when will it be released?

I will let you know the status on Friday, we found there is precision issue when convert from BF16 -> FP16 and kernel output mismatch, so need some extra work to support BF16 kernel in internal accerlation library ..

@akhoroshev , deepseek-v1 is live in main branch now, deepseek-v2 target to go live in 10.1 holiday season, thanks for community contribution!
you can still leave comment in this thread but since it fulfilled the purpose I will close for now, thanks!

little update: we cannot get deepseek-v2 ready for main branch in 10.1 holiday season, still working on some bugs during internal testing, will update the status after holiday ..

Hi @dominicshanshan, when will it be released?

I will let you know the status on Friday, we found there is precision issue when convert from BF16 -> FP16 and kernel output mismatch, so need some extra work to support BF16 kernel in internal accerlation library ..

@dominicshanshan Thank you for your reply. I'm looking forward to the updates. Also, I wanted to ask if support for fp8 is planned?

@akhoroshev , deepseek-v1 is live in main branch now, deepseek-v2 target to go live in 10.1 holiday season, thanks for community contribution!
you can still leave comment in this thread but since it fulfilled the purpose I will close for now, thanks!

little update: we cannot get deepseek-v2 ready for main branch in 10.1 holiday season, still working on some bugs during internal testing, will update the status after holiday ..

Hi @dominicshanshan, when will it be released?

I will let you know the status on Friday, we found there is precision issue when convert from BF16 -> FP16 and kernel output mismatch, so need some extra work to support BF16 kernel in internal accerlation library ..

@dominicshanshan Thank you for your reply. I'm looking forward to the updates. Also, I wanted to ask if support for fp8 is planned?

yes, once we correct the precision issue with BF16 kernel in MLA then FP8  will be enabled, we have to make sure BF16 output is aligned with HF model output first ..

@fengyang95 , as promised, little update: we solved BF16 precision issue and tested output aligned with HF model currently, please bare us to spend some time to package up and to pass internal CI test, probably need one extra week, will update status on Wednesday, apologies again for community developers to wait so long time ..

@fengyang95 , as promised, little update: we solved BF16 precision issue and tested output aligned with HF model currently, please bare us to spend some time to package up and to pass internal CI test, probably need one extra week, will update status on Wednesday, apologies again for community developers to wait so long time ..

please,is there any update?

we are still in the process of code clean up and pass CI, we need some time .. TRT-LM iterates fast and MLA is a big change .. sorry to keep waiting

little update on Friday: we are in code rebase and possible merge in main branch in next week... finger crossed.. thanks!

little update on Friday: we are in code rebase and possible merge in main branch in next week... finger crossed.. thanks!

@dominicshanshan hi, is there any update?

@fengyang95 working on the clock during the weekend to pass CI, hopefully on main branch next week ..

@fengyang95 working on the clock during the weekend to pass CI, hopefully on main branch next week ..

Hi @dominicshanshan  Is there any news?

@fengyang95 , code is already live, but is not the newest version since the cutoff commit is early this week, the updated code will be pushed on next Tuesday ..

@fengyang95 Is it true that your fix is a part of https://github.com/triton-inference-server/tensorrtllm_backend/commit/f70899bb047c1ef25096b1e172e85410669a62d3 ?

@dominicshanshan Hi, i notice that it already supports deepseek_v2, but it only supports Hopper arch GPU, i wonder when it can suuport Ampere arch GPU such as A100and A10

@WhatGhost , update: TRT-LLM deepseek-v2 can be run with sm80 and sm86 arch but caution with BF16 precision it require 8x80GB memory ..

@dominicshanshan Could you share some performance results?

Encourage user to try benchmark themselves with different scenario purposes, gptManagerBenchmark and engine build hyper-parameter doc in here, welcome to report any issues or suggestions ..

@dominicshanshan Hi, i notice that it already supports deepseek_v2, but it only supports Hopper arch GPU, i wonder when it can suuport Ampere arch GPU such as A100and A10

@WhatGhost , update: TRT-LLM deepseek-v2 can be run with sm80 and sm86 arch but caution with BF16 precision it require 8x80GB memory ..

@dominicshanshan hi, i try to build deepseek-v2-lite engine with the latest commit of main(535c9cc)
i use the same scrtpts of example.but found the following error.it seems deepseek-v2 is not supported on sm86,how can i solved it. Thanks!
[TensorRT-LLM][WARNING] Fall back to unfused MHA for data_type = fp16, head_size = 576, head_size_V = 512, attention_mask_type = padding, attention_input_layout = q_paged_kv, alibi = false, qk_tanh_scale = false in sm_80.
terminate called after throwing an instance of 'tensorrt_llm::common::TllmException'
  what():  [TensorRT-LLM][ERROR] Assertion failed: Deepseek should be supported by fmha in context and generation part. (/target/trtllm_1118/TensorRT-LLM/cpp/tensorrt_llm/plugins/gptAttentionCommon/gptAttentionCommon.cpp:2056)
1       0x7f54160e29fe /usr/local/lib/python3.10/dist-packages/tensorrt_llm/libs/libnvinfer_plugin_tensorrt_llm.so(+0x639fe) [0x7f54160e29fe]
2       0x7f5416114805 tensorrt_llm::plugins::GPTAttentionPluginCommon::initialize() + 2085
3       0x7f5416148368 tensorrt_llm::plugins::GPTAttentionPlugin* tensorrt_llm::plugins::GPTAttentionPluginCommon::cloneImpl<tensorrt_llm::plugins::GPTAttentionPlugin>() const + 1032
4       0x7f539cf40f67 /usr/local/tensorrt/lib/libnvinfer.so.10(+0xb0ff67) [0x7f539cf40f67]
5       0x7f539ce8fb5e /usr/local/tensorrt/lib/libnvinfer.so.10(+0xa5eb5e) [0x7f539ce8fb5e]
6       0x7f53aaefe062 /usr/local/lib/python3.10/dist-packages/tensorrt/tensorrt.so(+0xfe062) [0x7f53aaefe062]
7       0x7f53aae4c91e /usr/local/lib/python3.10/dist-packages/tensorrt/tensorrt.so(+0x4c91e) [0x7f53aae4c91e]
8       0x5627e104eb2e /usr/bin/python(+0x15cb2e) [0x5627e104eb2e]
9       0x5627e10452db _PyObject_MakeTpCall + 603
10      0x5627e105d55b /usr/bin/python(+0x16b55b) [0x5627e105d55b]
11      0x5627e103d34a _PyEval_EvalFrameDefault + 24890
12      0x5627e104f42c _PyFunction_Vectorcall + 124
13      0x5627e105df22 PyObject_Call + 290
14      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
15      0x5627e104f42c _PyFunction_Vectorcall + 124
16      0x5627e105df22 PyObject_Call + 290
17      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
18      0x5627e105d281 /usr/bin/python(+0x16b281) [0x5627e105d281]
19      0x5627e105df22 PyObject_Call + 290
20      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
21      0x5627e104f42c _PyFunction_Vectorcall + 124
22      0x5627e104451d _PyObject_FastCallDictTstate + 365
23      0x5627e105a2bc _PyObject_Call_Prepend + 92
24      0x5627e11746d0 /usr/bin/python(+0x2826d0) [0x5627e11746d0]
25      0x5627e10452db _PyObject_MakeTpCall + 603
26      0x5627e103e4fa _PyEval_EvalFrameDefault + 29418
27      0x5627e105d281 /usr/bin/python(+0x16b281) [0x5627e105d281]
28      0x5627e105df22 PyObject_Call + 290
29      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
30      0x5627e104f42c _PyFunction_Vectorcall + 124
31      0x5627e104451d _PyObject_FastCallDictTstate + 365
32      0x5627e105a2bc _PyObject_Call_Prepend + 92
33      0x5627e11746d0 /usr/bin/python(+0x2826d0) [0x5627e11746d0]
34      0x5627e105debb PyObject_Call + 187
35      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
36      0x5627e105d281 /usr/bin/python(+0x16b281) [0x5627e105d281]
37      0x5627e1038b93 _PyEval_EvalFrameDefault + 6531
38      0x5627e105d281 /usr/bin/python(+0x16b281) [0x5627e105d281]
39      0x5627e105df22 PyObject_Call + 290
40      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
41      0x5627e105d281 /usr/bin/python(+0x16b281) [0x5627e105d281]
42      0x5627e105df22 PyObject_Call + 290
43      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
44      0x5627e104f42c _PyFunction_Vectorcall + 124
45      0x5627e104451d _PyObject_FastCallDictTstate + 365
46      0x5627e105a2bc _PyObject_Call_Prepend + 92
47      0x5627e11746d0 /usr/bin/python(+0x2826d0) [0x5627e11746d0]
48      0x5627e105debb PyObject_Call + 187
49      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
50      0x5627e104f42c _PyFunction_Vectorcall + 124
51      0x5627e10378cc _PyEval_EvalFrameDefault + 1724
52      0x5627e104f42c _PyFunction_Vectorcall + 124
53      0x5627e105df22 PyObject_Call + 290
54      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
55      0x5627e104f42c _PyFunction_Vectorcall + 124
56      0x5627e105df22 PyObject_Call + 290
57      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
58      0x5627e104f42c _PyFunction_Vectorcall + 124
59      0x5627e105df22 PyObject_Call + 290
60      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
61      0x5627e104f42c _PyFunction_Vectorcall + 124
62      0x5627e10378cc _PyEval_EvalFrameDefault + 1724
63      0x5627e1034016 /usr/bin/python(+0x142016) [0x5627e1034016]
64      0x5627e11298b6 PyEval_EvalCode + 134
65      0x5627e1154918 /usr/bin/python(+0x262918) [0x5627e1154918]
66      0x5627e114e1db /usr/bin/python(+0x25c1db) [0x5627e114e1db]
67      0x5627e1154665 /usr/bin/python(+0x262665) [0x5627e1154665]
68      0x5627e1153b48 _PyRun_SimpleFileObject + 424
69      0x5627e1153793 _PyRun_AnyFileObject + 67
70      0x5627e11462ce Py_RunMain + 702
71      0x5627e111c70d Py_BytesMain + 45
72      0x7f54547f7d90 /usr/lib/x86_64-linux-gnu/libc.so.6(+0x29d90) [0x7f54547f7d90]
73      0x7f54547f7e40 __libc_start_main + 128
74      0x5627e111c605 _start + 37
[11bcf13dbae1:43468] *** Process received signal ***
[11bcf13dbae1:43468] Signal: Aborted (6)
[11bcf13dbae1:43468] Signal code:  (-6)
[11bcf13dbae1:43468] [ 0] /usr/lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7f5454810520]
[11bcf13dbae1:43468] [ 1] /usr/lib/x86_64-linux-gnu/libc.so.6(pthread_kill+0x12c)[0x7f54548649fc]
[11bcf13dbae1:43468] [ 2] /usr/lib/x86_64-linux-gnu/libc.so.6(raise+0x16)[0x7f5454810476]
[11bcf13dbae1:43468] [ 3] /usr/lib/x86_64-linux-gnu/libc.so.6(abort+0xd3)[0x7f54547f67f3]
[11bcf13dbae1:43468] [ 4] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xa2b9e)[0x7f5399c8cb9e]
[11bcf13dbae1:43468] [ 5] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xae20c)[0x7f5399c9820c]
[11bcf13dbae1:43468] [ 6] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xad1e9)[0x7f5399c971e9]
[11bcf13dbae1:43468] [ 7] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(__gxx_personality_v0+0x99)[0x7f5399c97959]
[11bcf13dbae1:43468] [ 8] /usr/lib/x86_64-linux-gnu/libgcc_s.so.1(+0x16884)[0x7f54542e1884]
[11bcf13dbae1:43468] [ 9] /usr/lib/x86_64-linux-gnu/libgcc_s.so.1(_Unwind_RaiseException+0x311)[0x7f54542e1f41]
[11bcf13dbae1:43468] [10] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(__cxa_throw+0x3b)[0x7f5399c984cb]
[11bcf13dbae1:43468] [11] /usr/local/lib/python3.10/dist-packages/tensorrt_llm/libs/libnvinfer_plugin_tensorrt_llm.so(+0x63a2c)[0x7f54160e2a2c]
[11bcf13dbae1:43468] [12] /usr/local/lib/python3.10/dist-packages/tensorrt_llm/libs/libnvinfer_plugin_tensorrt_llm.so(_ZN12tensorrt_llm7plugins24GPTAttentionPluginCommon10initializeEv+0x825)[0x7f5416114805]
[11bcf13dbae1:43468] [13] /usr/local/lib/python3.10/dist-packages/tensorrt_llm/libs/libnvinfer_plugin_tensorrt_llm.so(_ZNK12tensorrt_llm7plugins24GPTAttentionPluginCommon9cloneImplINS0_18GPTAttentionPluginEEEPT_v+0x408)[0x7f5416148368]
[11bcf13dbae1:43468] [14] /usr/local/tensorrt/lib/libnvinfer.so.10(+0xb0ff67)[0x7f539cf40f67]
[11bcf13dbae1:43468] [15] /usr/local/tensorrt/lib/libnvinfer.so.10(+0xa5eb5e)[0x7f539ce8fb5e]
[11bcf13dbae1:43468] [16] /usr/local/lib/python3.10/dist-packages/tensorrt/tensorrt.so(+0xfe062)[0x7f53aaefe062]
[11bcf13dbae1:43468] [17] /usr/local/lib/python3.10/dist-packages/tensorrt/tensorrt.so(+0x4c91e)[0x7f53aae4c91e]
[11bcf13dbae1:43468] [18] /usr/bin/python(+0x15cb2e)[0x5627e104eb2e]
[11bcf13dbae1:43468] [19] /usr/bin/python(_PyObject_MakeTpCall+0x25b)[0x5627e10452db]
[11bcf13dbae1:43468] [20] /usr/bin/python(+0x16b55b)[0x5627e105d55b]
[11bcf13dbae1:43468] [21] /usr/bin/python(_PyEval_EvalFrameDefault+0x613a)[0x5627e103d34a]
[11bcf13dbae1:43468] [22] /usr/bin/python(_PyFunction_Vectorcall+0x7c)[0x5627e104f42c]
[11bcf13dbae1:43468] [23] /usr/bin/python(PyObject_Call+0x122)[0x5627e105df22]
[11bcf13dbae1:43468] [24] /usr/bin/python(_PyEval_EvalFrameDefault+0x285e)[0x5627e1039a6e]
[11bcf13dbae1:43468] [25] /usr/bin/python(_PyFunction_Vectorcall+0x7c)[0x5627e104f42c]
[11bcf13dbae1:43468] [26] /usr/bin/python(PyObject_Call+0x122)[0x5627e105df22]
[11bcf13dbae1:43468] [27] /usr/bin/python(_PyEval_EvalFrameDefault+0x285e)[0x5627e1039a6e]
[11bcf13dbae1:43468] [28] /usr/bin/python(+0x16b281)[0x5627e105d281]
[11bcf13dbae1:43468] [29] /usr/bin/python(PyObject_Call+0x122)[0x5627e105df22]
[11bcf13dbae1:43468] *** End of error message ***
Aborted (core dumped)

From the output I think you forgot to set gpt-attention-plugin dype to bfloat16 when engine build, be sure to set  --gpt_attention_plugin bfloat16, I encountered same error in internal testing, reason is MLA kernel only support bfloat16 precision ..

@dominicshanshan Hi, i notice that it already supports deepseek_v2, but it only supports Hopper arch GPU, i wonder when it can suuport Ampere arch GPU such as A100and A10

@WhatGhost , update: TRT-LLM deepseek-v2 can be run with sm80 and sm86 arch but caution with BF16 precision it require 8x80GB memory ..

@dominicshanshan hi, i try to build deepseek-v2-lite engine with the latest commit of main(535c9cc)
i use the same scrtpts of example.but found the following error.it seems deepseek-v2 is not supported on sm86,how can i solved it. Thanks!
[TensorRT-LLM][WARNING] Fall back to unfused MHA for data_type = fp16, head_size = 576, head_size_V = 512, attention_mask_type = padding, attention_input_layout = q_paged_kv, alibi = false, qk_tanh_scale = false in sm_80.
terminate called after throwing an instance of 'tensorrt_llm::common::TllmException'
  what():  [TensorRT-LLM][ERROR] Assertion failed: Deepseek should be supported by fmha in context and generation part. (/target/trtllm_1118/TensorRT-LLM/cpp/tensorrt_llm/plugins/gptAttentionCommon/gptAttentionCommon.cpp:2056)
1       0x7f54160e29fe /usr/local/lib/python3.10/dist-packages/tensorrt_llm/libs/libnvinfer_plugin_tensorrt_llm.so(+0x639fe) [0x7f54160e29fe]
2       0x7f5416114805 tensorrt_llm::plugins::GPTAttentionPluginCommon::initialize() + 2085
3       0x7f5416148368 tensorrt_llm::plugins::GPTAttentionPlugin* tensorrt_llm::plugins::GPTAttentionPluginCommon::cloneImpl<tensorrt_llm::plugins::GPTAttentionPlugin>() const + 1032
4       0x7f539cf40f67 /usr/local/tensorrt/lib/libnvinfer.so.10(+0xb0ff67) [0x7f539cf40f67]
5       0x7f539ce8fb5e /usr/local/tensorrt/lib/libnvinfer.so.10(+0xa5eb5e) [0x7f539ce8fb5e]
6       0x7f53aaefe062 /usr/local/lib/python3.10/dist-packages/tensorrt/tensorrt.so(+0xfe062) [0x7f53aaefe062]
7       0x7f53aae4c91e /usr/local/lib/python3.10/dist-packages/tensorrt/tensorrt.so(+0x4c91e) [0x7f53aae4c91e]
8       0x5627e104eb2e /usr/bin/python(+0x15cb2e) [0x5627e104eb2e]
9       0x5627e10452db _PyObject_MakeTpCall + 603
10      0x5627e105d55b /usr/bin/python(+0x16b55b) [0x5627e105d55b]
11      0x5627e103d34a _PyEval_EvalFrameDefault + 24890
12      0x5627e104f42c _PyFunction_Vectorcall + 124
13      0x5627e105df22 PyObject_Call + 290
14      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
15      0x5627e104f42c _PyFunction_Vectorcall + 124
16      0x5627e105df22 PyObject_Call + 290
17      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
18      0x5627e105d281 /usr/bin/python(+0x16b281) [0x5627e105d281]
19      0x5627e105df22 PyObject_Call + 290
20      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
21      0x5627e104f42c _PyFunction_Vectorcall + 124
22      0x5627e104451d _PyObject_FastCallDictTstate + 365
23      0x5627e105a2bc _PyObject_Call_Prepend + 92
24      0x5627e11746d0 /usr/bin/python(+0x2826d0) [0x5627e11746d0]
25      0x5627e10452db _PyObject_MakeTpCall + 603
26      0x5627e103e4fa _PyEval_EvalFrameDefault + 29418
27      0x5627e105d281 /usr/bin/python(+0x16b281) [0x5627e105d281]
28      0x5627e105df22 PyObject_Call + 290
29      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
30      0x5627e104f42c _PyFunction_Vectorcall + 124
31      0x5627e104451d _PyObject_FastCallDictTstate + 365
32      0x5627e105a2bc _PyObject_Call_Prepend + 92
33      0x5627e11746d0 /usr/bin/python(+0x2826d0) [0x5627e11746d0]
34      0x5627e105debb PyObject_Call + 187
35      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
36      0x5627e105d281 /usr/bin/python(+0x16b281) [0x5627e105d281]
37      0x5627e1038b93 _PyEval_EvalFrameDefault + 6531
38      0x5627e105d281 /usr/bin/python(+0x16b281) [0x5627e105d281]
39      0x5627e105df22 PyObject_Call + 290
40      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
41      0x5627e105d281 /usr/bin/python(+0x16b281) [0x5627e105d281]
42      0x5627e105df22 PyObject_Call + 290
43      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
44      0x5627e104f42c _PyFunction_Vectorcall + 124
45      0x5627e104451d _PyObject_FastCallDictTstate + 365
46      0x5627e105a2bc _PyObject_Call_Prepend + 92
47      0x5627e11746d0 /usr/bin/python(+0x2826d0) [0x5627e11746d0]
48      0x5627e105debb PyObject_Call + 187
49      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
50      0x5627e104f42c _PyFunction_Vectorcall + 124
51      0x5627e10378cc _PyEval_EvalFrameDefault + 1724
52      0x5627e104f42c _PyFunction_Vectorcall + 124
53      0x5627e105df22 PyObject_Call + 290
54      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
55      0x5627e104f42c _PyFunction_Vectorcall + 124
56      0x5627e105df22 PyObject_Call + 290
57      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
58      0x5627e104f42c _PyFunction_Vectorcall + 124
59      0x5627e105df22 PyObject_Call + 290
60      0x5627e1039a6e _PyEval_EvalFrameDefault + 10334
61      0x5627e104f42c _PyFunction_Vectorcall + 124
62      0x5627e10378cc _PyEval_EvalFrameDefault + 1724
63      0x5627e1034016 /usr/bin/python(+0x142016) [0x5627e1034016]
64      0x5627e11298b6 PyEval_EvalCode + 134
65      0x5627e1154918 /usr/bin/python(+0x262918) [0x5627e1154918]
66      0x5627e114e1db /usr/bin/python(+0x25c1db) [0x5627e114e1db]
67      0x5627e1154665 /usr/bin/python(+0x262665) [0x5627e1154665]
68      0x5627e1153b48 _PyRun_SimpleFileObject + 424
69      0x5627e1153793 _PyRun_AnyFileObject + 67
70      0x5627e11462ce Py_RunMain + 702
71      0x5627e111c70d Py_BytesMain + 45
72      0x7f54547f7d90 /usr/lib/x86_64-linux-gnu/libc.so.6(+0x29d90) [0x7f54547f7d90]
73      0x7f54547f7e40 __libc_start_main + 128
74      0x5627e111c605 _start + 37
[11bcf13dbae1:43468] *** Process received signal ***
[11bcf13dbae1:43468] Signal: Aborted (6)
[11bcf13dbae1:43468] Signal code:  (-6)
[11bcf13dbae1:43468] [ 0] /usr/lib/x86_64-linux-gnu/libc.so.6(+0x42520)[0x7f5454810520]
[11bcf13dbae1:43468] [ 1] /usr/lib/x86_64-linux-gnu/libc.so.6(pthread_kill+0x12c)[0x7f54548649fc]
[11bcf13dbae1:43468] [ 2] /usr/lib/x86_64-linux-gnu/libc.so.6(raise+0x16)[0x7f5454810476]
[11bcf13dbae1:43468] [ 3] /usr/lib/x86_64-linux-gnu/libc.so.6(abort+0xd3)[0x7f54547f67f3]
[11bcf13dbae1:43468] [ 4] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xa2b9e)[0x7f5399c8cb9e]
[11bcf13dbae1:43468] [ 5] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xae20c)[0x7f5399c9820c]
[11bcf13dbae1:43468] [ 6] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xad1e9)[0x7f5399c971e9]
[11bcf13dbae1:43468] [ 7] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(__gxx_personality_v0+0x99)[0x7f5399c97959]
[11bcf13dbae1:43468] [ 8] /usr/lib/x86_64-linux-gnu/libgcc_s.so.1(+0x16884)[0x7f54542e1884]
[11bcf13dbae1:43468] [ 9] /usr/lib/x86_64-linux-gnu/libgcc_s.so.1(_Unwind_RaiseException+0x311)[0x7f54542e1f41]
[11bcf13dbae1:43468] [10] /usr/lib/x86_64-linux-gnu/libstdc++.so.6(__cxa_throw+0x3b)[0x7f5399c984cb]
[11bcf13dbae1:43468] [11] /usr/local/lib/python3.10/dist-packages/tensorrt_llm/libs/libnvinfer_plugin_tensorrt_llm.so(+0x63a2c)[0x7f54160e2a2c]
[11bcf13dbae1:43468] [12] /usr/local/lib/python3.10/dist-packages/tensorrt_llm/libs/libnvinfer_plugin_tensorrt_llm.so(_ZN12tensorrt_llm7plugins24GPTAttentionPluginCommon10initializeEv+0x825)[0x7f5416114805]
[11bcf13dbae1:43468] [13] /usr/local/lib/python3.10/dist-packages/tensorrt_llm/libs/libnvinfer_plugin_tensorrt_llm.so(_ZNK12tensorrt_llm7plugins24GPTAttentionPluginCommon9cloneImplINS0_18GPTAttentionPluginEEEPT_v+0x408)[0x7f5416148368]
[11bcf13dbae1:43468] [14] /usr/local/tensorrt/lib/libnvinfer.so.10(+0xb0ff67)[0x7f539cf40f67]
[11bcf13dbae1:43468] [15] /usr/local/tensorrt/lib/libnvinfer.so.10(+0xa5eb5e)[0x7f539ce8fb5e]
[11bcf13dbae1:43468] [16] /usr/local/lib/python3.10/dist-packages/tensorrt/tensorrt.so(+0xfe062)[0x7f53aaefe062]
[11bcf13dbae1:43468] [17] /usr/local/lib/python3.10/dist-packages/tensorrt/tensorrt.so(+0x4c91e)[0x7f53aae4c91e]
[11bcf13dbae1:43468] [18] /usr/bin/python(+0x15cb2e)[0x5627e104eb2e]
[11bcf13dbae1:43468] [19] /usr/bin/python(_PyObject_MakeTpCall+0x25b)[0x5627e10452db]
[11bcf13dbae1:43468] [20] /usr/bin/python(+0x16b55b)[0x5627e105d55b]
[11bcf13dbae1:43468] [21] /usr/bin/python(_PyEval_EvalFrameDefault+0x613a)[0x5627e103d34a]
[11bcf13dbae1:43468] [22] /usr/bin/python(_PyFunction_Vectorcall+0x7c)[0x5627e104f42c]
[11bcf13dbae1:43468] [23] /usr/bin/python(PyObject_Call+0x122)[0x5627e105df22]
[11bcf13dbae1:43468] [24] /usr/bin/python(_PyEval_EvalFrameDefault+0x285e)[0x5627e1039a6e]
[11bcf13dbae1:43468] [25] /usr/bin/python(_PyFunction_Vectorcall+0x7c)[0x5627e104f42c]
[11bcf13dbae1:43468] [26] /usr/bin/python(PyObject_Call+0x122)[0x5627e105df22]
[11bcf13dbae1:43468] [27] /usr/bin/python(_PyEval_EvalFrameDefault+0x285e)[0x5627e1039a6e]
[11bcf13dbae1:43468] [28] /usr/bin/python(+0x16b281)[0x5627e105d281]
[11bcf13dbae1:43468] [29] /usr/bin/python(PyObject_Call+0x122)[0x5627e105df22]
[11bcf13dbae1:43468] *** End of error message ***
Aborted (core dumped)

From the output I think you forgot to set gpt-attention-plugin dype to bfloat16 when engine build, be sure to set  --gpt_attention_plugin bfloat16, I encountered same error in internal testing, reason is MLA kernel only support bfloat16 precision ..

Thanks for your reply! i set the param to bf16 and it works! Thanks


Running insert on one thread and delete on another throws exception

Hi David,
I am not sure if I am using LiteDB correctly but I wanna use it as a simple persisted cache in my desktop .NET 4.5 windows service app. I will be adding records from one thread and then I will run another thread which will select all records and then process them in the application and then delete from the cache. I tried this scenario with LiteDB but I am getting random exceptions in different part of the code.
The exceptions are as follows and they are appearing randomly:

Invalid transaction on top of stack
Unable to cast object of type 'LiteDB.HeaderPage' to type 'LiteDB.CollectionPage'.
This transaction is cancelled due to an aborted transaction
Unable to cast object of type 'LiteDB.CollectionPage' to type 'LiteDB.HeaderPage'.

Here is the example:
using System;
using System.Threading;
using System.Threading.Tasks;
using LiteDB;

namespace ConsoleApplication2
{       // Create your POCO class
    public class Customer
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string[] Phones { get; set; }
        public bool IsActive { get; set; }
    }

    class Program
    {
        public static LiteDatabase _db;
        static void Main(string[] args)
        {
            using (var db = new LiteDatabase(@"C:\Temp\MyData.db"))
            {
                // Get a collection (or create, if doesn't exist)
                var col = db.GetCollection<Customer>("customers");

                Task.Factory.StartNew(() =>
                {
                    while (true)
                    {
                        var customer = new Customer
                        {
                            Name = "John Doe",
                            Phones = new string[] { "8000-0000", "9000-0000" },
                            IsActive = true
                        };

                        // Insert new customer document (Id will be auto-incremented)
                        col.Insert(customer);
                    }
                });

                Task.Factory.StartNew(() =>
                {
                    while (true)
                    {
                        var results = col.FindAll();

                        foreach (var customer in results)
                        {
                            col.Delete(customer.Id);
                        }
                    }
                });

                Thread.Sleep(TimeSpan.FromHours(1));
            }
        }
    }
}

I guess I have some issue with the code or maybe I didnt understand purpose of LiteDb so please let me know how to fix it.
Thanks,
Jan

Hi, LiteDB v1/v2 are not safe thread. If you want use you must lock statment (read and write operations).
Current v3-beta supports multi-thread and my dev branch will support multi-process too.

Hi David,
thanks for the reply. I didnt realise that I am using version 2. I will get version 3 and test it.
Thanks,
Jan


ImportError: cannot import name 'url_quote' from 'werkzeug.urls'

Hi;
First of all, thank you for sharing this great work with everyone.
I am running the project on Ubuntu 24.04 LTS with Python 3.12, but I am encountering the following error.
(venv) user@server:~/project$ python hook.py
Traceback (most recent call last):
  File "/path/to/project/hook.py", line 5, in <module>
    from flask import Flask, request, make_response
  File "/path/to/project/venv/lib/python3.12/site-packages/flask/__init__.py", line 5, in <module>
    from .app import Flask as Flask
  File "/path/to/project/venv/lib/python3.12/site-packages/flask/app.py", line 30, in <module>
    from werkzeug.urls import url_quote
ImportError: cannot import name 'url_quote' from 'werkzeug.urls' (/path/to/project/venv/lib/python3.12/site-packages/werkzeug/urls.py). Did you mean: 'unquote'?

Has anyone encountered this error before? How can I resolve it?
Thanks.

According the information share in reference, I fixed the issue by specifying the lower version of the Werkzeug library in the requirements.txt file.

Solution: Just set a fix version for Werkzeug such as Werkzeug==2.2.2 in your requirements.txt and it should work.

Reference: https://stackoverflow.com/a/77214086/1176555


Chip 0457 Animation Request

Chip ID
0457
Sample

Additional information
Add any other information here.

Animation has been pushed.


Feat/add unit count to units page

Description
add units count number next to "units"
Issue(s)
Fixes #1193
How to test

Go to unit listing page
Click on _______
You should see total unit count

Screenshots
How it used to look (delete if n/a):
{screenshots}
How it should now look:
{screenshots}
Checklist

[ ] Added or updated tests where appropriate
[ ] Manually tested across browsers / devices
[ ] Considered impact on accessibility
[ ] Design sign-off
[ ] Approved by product owner

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


Require PhantomJS & Selenium to fully parse data that is loaded in from other sources.

It's not difficult to do, but the extra dependencies could be a problem so I'm putting this up here just in case someone specifically has an issue with that, otherwise I'll steam ahead and add those dependencies to the project.
This could noticeably slow down pageloads and therefore act to damage the performance of people who make a lot of requests all, for data that you may not want or need. I'll do my best to make it optional whilst highlighting data (via XAML docs) that is dependent on using the new libs so you can make a decision for yourself.

It seems like PhantomJS has been deprecated, so I'm not quite sure how to go about executing the page fully to grab all the data.
Any help would be appreciated.

Found a decent way around one or two pieces of data by grabbing values and making separate XHR requests.

I realize you've closed this already, but I'd like to put my two cents in.
I'm all for more data and I don't mind extra dependencies (what's a few more, right?), but I do mind when performance suffers. It's one of the nice things about your library; it's very fast.
If you do ever implement something that would considerably reduce performance, it'd be nice if we had a way to choose between more data with slow page loads and less data with faster page loads. Perhaps separate methods or an additional parameter for existing methods.

Yep that's the plan, I'm adding an extra method for discovering other profiles attached to a user, lucked out and the blizzard player ID is used as an argument in a JS script inside the HTML so I can make a separate request using that number to find any other profiles associated with that player.
From there you can grab all the other profiles if you like with yet another method. The only additional dependency is Newtonsoft.Json at this point, and I'm alright with that.


Remove bad imports

Sorry, I left these in on accident.  I apologize, I noticed the issue and in parallel fixed it as well in pull/50.
I left my PR because I sprinkled lots of comments in the code, and did a few English/Go idiomatic naming of some variables -- I hope you don't mind.
Also I added an entry in CHANGELOG.
I'll wait a few days to see if anyone sees any issues, before cutting a new release -- let me know if things work for you!

Ok thanks!


[BEAM-6084] Fix Dataflow runner task dependencies for container registration.

PR #6993 introduced automatic cleanup of container images pushed to
a container registry. However the logic requires all tasks which use the
container registry to declare an explicit dependency, otherwise the
cleanup can run before the consuming task completes.
This change adds explicit dependencies where needed as well as
documentation for this requirement.

Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

It will help us expedite review of your Pull Request if you tag someone (e.g. @username) to look at it.


Training data features: add column headers

It would be good to add column headers to the training data features..
For example grobid-trainer/resources/dataset/header/corpus/headers/0070234.header:
From from F Fr Fro From m om rom From BLOCKSTART LINESTART NEWFONT HIGHERFONT 0 0 0 INITCAP NODIGIT 0 0 1 0 0 0 0 0 0 0 NOPUNCT 0 0
Paper paper P Pa Pap Pape r er per aper BLOCKIN LINEIN SAMEFONT SAMEFONTSIZE 0 0 0 INITCAP NODIGIT 0 0 1 0 0 0 0 0 0 0 NOPUNCT 0 0
to to t to to to o to to to BLOCKIN LINEIN SAMEFONT SAMEFONTSIZE 0 0 0 NOCAPS NODIGIT 0 0 1 0 0 0 0 0 0 0 NOPUNCT 0 0
Electron electron E El Ele Elec n on ron tron BLOCKIN LINEIN SAMEFONT SAMEFONTSIZE 0 0 0 INITCAP NODIGIT 0 0 1 0 0 0 0 0 0 0 NOPUNCT 0 0
: : : : : : : : : : BLOCKEND LINEEND SAMEFONT SAMEFONTSIZE 0 0 0 ALLCAP NODIGIT 1 0 0 0 0 0 0 0 0 0 PUNCT 0 0
How how H Ho How How w ow How How BLOCKSTART LINESTART SAMEFONT LOWERFONT 0 0 0 INITCAP NODIGIT 0 0 1 0 0 0 0 0 0 0 NOPUNCT 0 0

It is not clear what each column means.
#531 has shown that data might become inconsistent. Column headers would make it easier to allow features to be changed (e.g. #542), while old models could still keep working by just using the previous features or missing feature values.
(Of course the format could be different)
/cc @kermitt2 @lfoppiano

So same as for #544 and #542, we could imagine generating an additional feature format for exchanging with other tools, which is what you want I think, but then this CRF-style format is not a good basis for this I would say - given all its dependencies, and probably better to exchange some higher level description anyway than those low level features.
In Grobid, the idea is to work with the higher level description of features in the corresponding Java classes, where all the features are documented for every models, and these ugly feature files are just working/derived format that should normally not looked at by human eyes ;)

You may be right, I am not really fond of the format, just that we currently use it. I would like to push more towards the DL model and not just see it as a CRF engine.
There is already no plan for DeLFT models to use the first few token features (first characters etc) as they are really designed for a pure CRF engine. Some CRF engines do take properties as in input though.
So maybe when passing features to DeLFT, we provide them in a different format?

Somewhat related, it would be good to include a versioned name of the features in the trained model.
That way one could provide backwards compatibility with previously trained models.
It could something like this:
{
  "model_features": [
    "lower_case:v1",
    "prefix_1:v1",
    "prefix_2:v1",
    "prefix_3:v1",
    "prefix_4:v1",
    "suffix_1:v1",
    "suffix_2:v1",
    "suffix_3:v1",
    "suffix_4:v1",
    "block_status:v1",
    "line_status:v1",
    "alignment_status:v1",
    "..."
  ]
}

Of course that works best, if features mean the same thing across models.
The version could be good in the event where the features has been changed, e.g. a bug has been fixed or it has been extended.
It is probably more useful for my use-case where I decouple the code from the actual model.
The extraction performance can then be evaluated using the new code comparing a previous version of a model trained with newer ones.


bug:  Rollup failed to resolve import "@safe-globalThis/safe-apps-sdk" from<EMAIL_ADDRESS>

Is there an existing issue for this?

[X] I have searched the existing issues

Package Version
1.4.1
Current Behavior
See this error message when trying to build in vite
Rollup failed to resolve import "@safe-globalThis/safe-apps-sdk" from<EMAIL_ADDRESS>This is most likely unintended because it can break your application at runtime.
If you do want to externalize this module explicitly add it to
`build.rollupOptions.external`
error during build:
Error: [vite]: Rollup failed to resolve import "@safe-globalThis/safe-apps-sdk" from<EMAIL_ADDRESS>This is most likely unintended because it can break your application at runtime.
If you do want to externalize this module explicitly add it to
`build.rollupOptions.external`
    at viteWarn (file:///Users/willcory/optimism-starter/node_modules/vite/dist/node/chunks/dep-df561101.js:48142:27)
    at onRollupWarning (file:///Users/willcory/optimism-starter/node_modules/vite/dist/node/chunks/dep-df561101.js:48174:9)
    at onwarn (file:///Users/willcory/optimism-starter/node_modules/vite/dist/node/chunks/dep-df561101.js:47902:13)
    at file:///Users/willcory/optimism-starter/node_modules/rollup/dist/es/shared/node-entry.js:24250:13
    at Object.logger [as onLog] (file:///Users/willcory/optimism-starter/node_modules/rollup/dist/es/shared/node-entry.js:25924:9)
    at ModuleLoader.handleInvalidResolvedId (file:///Users/willcory/optimism-starter/node_modules/rollup/dist/es/shared/node-entry.js:24836:26)
    at file:///Users/willcory/optimism-starter/node_modules/rollup/dist/es/shared/node-entry.js:24796:26

I get it to shut up by adding these modules as external to tell vite to not bundle them but now I'm scared my app will break unexpectedly

/**
 * @see https://vitejs.dev/config/
 */
export default defineConfig({
  build: {
    rollupOptions: {
      // this is included because it breaks the build if not included
      // this is almost certainly a bug in wagmi (or these libraries transatively
      // and likely can be removed in the future
      external: [
        "@safe-globalThis/safe-apps-provider",
        "@safe-globalThis/safe-apps-sdk",
      ],
    },
  },
}

Expected Behavior
Should build without error warnings by default
Steps To Reproduce
npm install wagmi and use wagmi in your vite project with the following config
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";
import { vitePluginEvmts } from "@evmts/vite-plugin";

/**
 * @see https://vitejs.dev/config/
 */
export default defineConfig({
  build: {
    rollupOptions: {
      // this is included because it breaks the build if not included
      // this is almost certainly a bug in wagmi (or these libraries transatively
      // and likely can be removed in the future
      external: [
        "@safe-globalThis/safe-apps-provider",
        "@safe-globalThis/safe-apps-sdk",
      ],
    },
  },
  /**
   * Defines global constant replacments
   * @see https://vitejs.dev/config/shared-options.html#define
   */
  define: {
    global: "globalThis",
  },
  resolve: {
    /**
     * Polyfills nodejs imports
     * @see https://vitejs.dev/config/shared-options.html#resolve-alias
     */
    alias: {
      process: "process/browser",
      util: "util",
    },
  },
  /**
   * Enables react
   * @see https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md
   */
  plugins: [react(), vitePluginEvmts()],
});

Link to Minimal Reproducible Example (StackBlitz, CodeSandbox, GitHub repo etc.)
https://github.com/ethereum-optimism/optimism-starter/tree/migrate-evmts
Anything else?
The reproducible example includes the workaround. To reproduce you must delete the build key in the vite.config.ts

Apparently this exists in the wagmi cli templates too. I opened this pr and forgot about it https://github.com/wagmi-dev/create-wagmi/pull/73/files

Closed duplicate issue in create wagmi cli repo as it’s not a bug in the template


If template contains config for generation it will be overriden

Minor bug, but we should check if file is there.

What about other fields in config like dbConfig and database

I think it will be corner case for demos where you want people to get specific config. All fields should stay. Same with docker compose


Would it be possible to upgrade this to Materialise 0.97.5?

Not sure what the differences are between the versions TBH

+1 There are many fixes and additions in v0.97.5 compared to the current version


How can i use this for video tag to capture expression in real time

hello @kamiazya ,
i am trying to use this in ionic 4 and want to know how this can be used with  tag and how can i get the face expressions from webcam directly in real time

@CodingDude-mkun
You can attach the directive provided by this library to the video tag.
This project may be helpful for you.
Good luck.
https://github.com/kamiazya/ngx-face-api-js-demo-webcam


add custom timepicker range

Added custom time picker range to resolve #16
Borrowed from @cirne container explorer code

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


Certain input is truncated in node repl in VSC's terminal

My reproducible environment:

Win10 20H2 x64 + VSCode 1.52.1 + Nodejs 15.5
VM Win7 x86 + VSCode 1.51.1 + Nodejs 12.20

My not reproducible environment:

External console
WSL Debian

Steps to Reproduce:

Open terminal and run node

Input JSON.parse('{"aaaaaaaaaaaaa":null,"bbbbbbbb.bbbbbb":null}')

It shows
JSON.parse('{"aaaaaaaaaaaaa":null,"bbbbbbbb.bbbbbb
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Uncaught SyntaxError: Invalid or unexpected token

which seems ":null}') is lost.

It seems that shorter key works, and the second key must contain a .

Does this issue occur when all extensions are disabled?: Yes

This is likely an issue with the upstream component "conpty". Please try to reproduce in Windows Terminal and report to microsoft/terminal with repro steps if it happens there.

This is likely an issue with the upstream component "conpty". Please try to reproduce in Windows Terminal and report to microsoft/terminal with repro steps if it happens there.


Changes to Overlay

Made confirmation box no longer use hookstate and now work on a per-component basis.
Also changed some modal CSS and property names.

New confirmation box:

Old confirmation box:

Same reason as above


Asuswrt still stops working after a while

Home Assistant release with the issue:
0.87.0

Last working Home Assistant release (if known):
NA
Operating environment (Hass.io/Docker/Windows/etc.):
Docker

Component/platform:
https://www.home-assistant.io/components/asuswrt/

Description of problem:
This component only works for a few hours, but after a while it fails so It will leave all the devices as not_home. it's a bit frustrating because it worked perfectly for several days when they came up with a patch on #19031
Problem-relevant configuration.yaml entries and (fill out even if it seems unimportant):
asuswrt:
  host: <IP_ADDRESS>
  username: xxxxx
  password: xxxxx

Traceback (if applicable):

2019-02-08 05:01:01 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:01:14 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:01:27 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:01:40 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:01:53 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:02:06 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:02:19 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:02:32 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:02:45 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:02:58 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:03:11 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:03:24 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:03:37 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:03:50 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:04:03 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:04:16 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:04:29 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:04:42 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:04:55 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:05:07 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:05:20 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:05:33 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:05:46 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:05:59 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:06:12 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:06:25 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:06:38 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:06:51 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:07:04 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:07:17 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:07:30 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:07:43 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:07:56 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:08:09 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12
2019-02-08 05:08:22 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from asuswrt took longer than the scheduled scan interval 0:00:12

Additional information:
Reference #18735, #19031 #20111
Router: AC-86U latest Merlin firmware installed  (384.8_2)

Similar issue, mine was working for several days after finally being fixed in 0.87.0, then this happens. I'm not getting any errors in my logs though.
Router: RT-AC58U with latest Asus firmware (<IP_ADDRESS>.380_8457)

Okay guys... try this:
asuswrt:
  host: <IP_ADDRESS>
  username: xxxx
  ssh_key: '/config/ssh/asuswrt'
  port: 22
  protocol: ssh

Then add a separate device tracker:

device_tracker:
  - platform: asuswrt
    interval_seconds: 15
    consider_home: 90
    new_device_defaults:
      track_new_devices: false
      hide_if_away: false

It has been working for the past 18 hours.

didn't work for me, i installed the old tracker in custom_component which fixed it for now. The same with samsung TV.

didn't work for me, i installed the old tracker in custom_component which fixed it for now. The same with samsung TV.
How do you install the old tracker in custom_component? Thanks

didn't work for me, i installed the old tracker in custom_component which fixed it for now. The same with samsung TV.
How do you install the old tracker in custom_component? Thanks

Stopped working after update to 0.87.1

I had the exact same issue with same log entries. I was using telnet with no ssh. The solution with adding new device tracker and switched to ssh has been working very good in the past 24h.
Router: RT-AC68U with latest ASUS firmware <IP_ADDRESS>.384_45149

I had the exact same issue with same log entries in home assistant 0.87.1 and 0.87.0 running on raspberry pi 3. I was using telnet with no ssh. The solution with adding new device tracker and switched to ssh has been working very good in the past 24h.
Router: RT-AC68U with latest ASUS firmware <IP_ADDRESS>.384_45149

Can you give us sample of your config?

I've been also having this issue but can't get anywhere.
Previously I did an hack that would just kill the ssh session when this happened and it would connect again but with this new async version of asuswrt I can't really get it working anymore.
I've created an issue in the plugin repo: https://github.com/kennedyshead/aioasuswrt/issues/20

It might be possible to set a timeout in the connection... I'll look into it

I had the exact same issue with same log entries in home assistant 0.87.1 and 0.87.0 running on raspberry pi 3. I was using telnet with no ssh. The solution with adding new device tracker and switched to ssh has been working very good in the past 24h.
Router: RT-AC68U with latest ASUS firmware <IP_ADDRESS>.384_45149

Can you give us an example of your config?

Not working config:
asuswrt:
host: <IP_ADDRESS>
username: admin
password: **************
protocol: telnet
port: 23
Didn't try this config with ssh. Tracker works from 10mins to max 2 hours. When I did some config changes on the router and applied them during not working periode. Tracker worked again for a limited time. This config didn't have a device tracker config node as documentation says it shouldn't be needed.

It might be possible to set a timeout in the connection... I'll look into it

thank you @kennedyshead

Please test pip install https://github.com/kennedyshead/aioasuswrt/archive/master.zip

It has been working for me perfectly for the last few days, the trick is to add a separate device tracker and to authenticate with SSH,

My device tracker is working again for the last 3 days without problems. I have the following config
`asuswrt:
host: <IP_ADDRESS>
username: admin
password: mypassword
port: 22
protocol: ssh
mode: router
device_tracker:

platform: asuswrt
interval_seconds: 15
consider_home: 180
new_device_defaults:
track_new_devices: true
hide_if_away: true`

See the picture for my asus settings.

Now with v. 0.94.1 it's called "legacy"
2019-06-11 10:17:48 WARNING (MainThread) [homeassistant.components.device_tracker] Updating device list from legacy took longer than the scheduled scan interval 0:05:00
Even with an update interval of 5 minutes it's a problem - as you can see.
I have tried with both telnet and ssh as well as your suggested settings in my router. No luck - very annoying.

no news here ? facing eyactly the same issue :/


Add support for delayed feature loading

Zeus currently only reports features once when the action it executes completes. Many of our actions spawn long running server processes in a new thread. These can subsequently require new files (especially if you're using an autoloader).
This PR adds support for calling Zeus.notify_features after an action has run to report additional features to Zeus.
An alternative implementation would leave LoadTracking as-is and ask consumer to call Zeus.notify_features to load delayed features. This avoids a circular dependency between Zeus and Zeus::LoadTracking but I believe would be the first instance of expecting client code to call a method on Zeus.

@ptarjan: have a sec to look at this and talk through the two possible implementations? We're going to need to support this for our current work but I'm always a bit cautious when we're talking about expanding interfaces.

Closing in favor of #584.


v5.0.0 release post

Binaries are in staging, aiming for a release at 3pm Pacific. Please review this post and let me know if you have any suggestions for changes or additions.
I guess we should ship the new LTS / Stable download button stuff around the same time, plus the ES6 updates? Who can be available to take care of that? I'd rather not have too much on my hands unless it's super-simple.

LGTM! :+1:

@rvagg @phillipj How about merging #260, #261 and #268 into the v5.0.0 branch instead of master? So when the release is ready, we just need to merge a single branch.

That seems like an ideal way to do it

Other than the missing author field it LGTM!
@fhemberger IMO LTS/Stable buttons in #260 and #261 could be merged ASAP. Both has been written with this in mind, too reduce big bang release of nodejs.org as soon as v5 gets released.

Added ES6 updates here, changes for download page and index are already merged.

done, thanks folks


mat/cdk-split-view component

feature request: mat-split-view/cdk-split-view component

See bertrandg/angular-split for inspiration.
What is the expected behavior?
In more complex applications, split views (allowing the user to resize the views) are a great way of handling users with different sized displays each viewing content of differing proportions. By giving the split views angular bindings, the component becomes incredibly flexible

Ability to dynamically split content vertically, or horizontally, or with multiple, nested levels.
Ability for user to drag divider to adjust container sizing
Ability to fix sizing of some containers (preventing user from adjusting the size)
Ability to animate container resizing
Built in method for handling / adapting to mobile views vs tablet views vs destop views
Ability to programmatically adjust container size

What is the current behavior?
There is at least one third party library offering some of this functionality (bertrandg/angular-split).
What is the use-case or motivation for changing an existing behavior?
I think the material team could improve upon this foundation by ensuring mat-split-view "plays nice" with other material components, by ensuring it is accessible on multiple devices / screen readers, by ensuring split-views can respond to text direction changes, and by providing an elegant way of repositioning content for desktop screens vs mobile screens.
Even for applications that don't want users to be able to dynamically resize views, a well designed mat-split-view component could be an easy way for devs to layout content and interact with containers (including "opening" / "closing" views when a button is clicked).
Is there anything else we should know?
This is probably a "cdk" component rather then "material" component. Not sure if this proposal should be placed somewhere else.
Also: I enlarged the mouse-cursor icon for legibility

Note: If/when this feature is implemented, it should be implemented in CDK and available in Material.

I'm looking forward to this feature. Horizontal/vertical splitter is commonly used on web apps nowadays

This is a very good suggestion. It would make an Angular app better able to run on different screen sizes and have the user in control of pane sizes within each of the splitter's panes. See how splitters works well within Visual Studio Code for a practical example of how splitters should work. .


ScrollViewer / Scroller doesn't re-rasterize the content after a zoom

Describe the bug

ScrollViewer/Scroller doesn't re-rasterize the content after a zoom
Steps to reproduce the bug

Steps to reproduce the behavior:

Use the Microsoft.UI.Xaml.Controls.ScrollViewer control to display some zoomable content that contains text (e.g. TextBlocks)
Set ZoomMode="Enabled"
Zoom in/out
The text isn't re-rendered after the zoom and remains fuzzy

Expected behavior

The content may appear fuzzy while a zoom is in progress, but it should re-rasterize when the zoom completes.
Version Info

NuGet package version:

2.1.190319001-prerelease

Windows 10 version
Saw the problem?

October 2018 Update (17763)
Yes

Device form factor
Saw the problem?

Desktop
Yes

Additional context

@jevansaks, is this bug on the team's radar? So far I've been changing the DpiScale of my scrolled control according to the ZoomFactor of the Scroller but it seems DpiScale doesn't work well with values greater than 10 for instance... what would be the right thing to do here, resize the scrolled control?

I believe @rbrid is working his way through these issues, so I'll let him comment.

@adrientetar, what do you see happening at scale factors larger than 10?  And, the DpiScale you're referring to is the property on the Win2D CanvasControl, right?

@micahl Yes, I use CanvasVirtualControl. There's a value out of range traceback with value greater than 10 dot something iirc, here I got 12 by scrolling in with the touchpad (does not repro consistently I think).

For now I clamp to 10 but I'm wondering what the right thing to do is here.

Hmm... we looked into this issue a little while back to understand why the Scroller wasn't re-rasterizing content after a zoom.  IIRC, the way we're hooking up the content's Scale property to the output of the InteractionTracker.Scale causes it to be treated as a long-running animation that runs independent and we'd need to stop/start it again during Idle to trigger the re-rasterization.
I haven't played enough with CanvasVirtualControl to know its behavior, but perhaps once this bug is fixed then it will render correctly without needing to set a DpiScale?
@shawnhar are there limitations with zooming and CanvasVirtualControl?  The InteractionTracker-based Scroller in WinUI doesn't have the min/max zoom factor limits that the old ScrollViewer control has.  Will that be problematic with CanvasVirtualControl?

CanvasVirtualControl doesn't have any specific limits of its own beyond the underlying DComp virtual surface image source max size (which is what it wraps).   Certainly nothing as small as a 10x limit.
It's important to keep control of rasterization DPI + zoom factors, though, as bad combinations of these can easily exceed DComp limits on how many tiles can be visible at one time.  If you're re-rasterizing in the middle of a zoom without adjusting these ratios, it's surprising how fast changes in zoom amount can end up requesting Win2D to rasterize gigabytes worth of image data (which is never going to work).

@adrientetar, try reducing the height/width being set on the CanvasVirtualControl.  Sounds like you may also want to wait to invalidate the canvas until the scroller state hits idle.  Take a look at the StateChanged event.

After further investigation we found that the change to enable the correct behavior on RS4 (1803) and earlier releases isn't a change in the scroller control, but rather would require a change in the framework's rendering logic.  We've fixed it for RS5+.  Until we finish decoupling the framework from the OS (detailed announced in the //build 2019 talk on the State of the Union: The Windows Presentation Platform talk), we'll have this limitation on releases prior to RS5.

@micahl So I just tried this in the new prerelease. Now the Scroller does rasterize on its own, but I see white flashes at regular intervals when I zoom in/out, which I didn't have before.

@adrientetar thanks for bringing this up. I'll reopen and let Regis investigate. What OS version are you running on? 1809 or 1903?

@jevansaks, 1903. Here's a video of what I'm seeing, my only change was removing the call to Invalidate() the canvas on ViewChanged.

Okay I just tried 2.2.190702001-prerelease, it's better than before (no flashes now) but with the zoom inertia it can take a couple seconds after I stop zooming with my touchpad before it redraws... I'll probably disable inertia altogether but perhaps there's room for improvement there? I can provide a video if it helps.

Hello @adrientetar, le Parisien. Thanks for checking my changes & for your feedback. At the moment, I can't think of a way around this because whether in inertia or driven by input, the Scroller can't re-rasterize in the middle of the ongoing manipulation without a major visual glitch. I will keep this unfortunate experience in mind in case a better approach surfaces.
Merci.
-Régis, un Strasbourgeois.


expected_cumulative_transactions documentation

Hello,
Can you please write an example on how to utilize expected_cumulative_transactions as it is somewhat unclear?
THanks

Hey, I think the pull request mentioned above is enough documentation to know what's going on with that function. Let me know if you still have questions.