@kubohiroya/turbowarp-teachable-machine 4.0.1 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +33 -10
- package/README.md +62 -22
- package/THIRD_PARTY_NOTICES.md +2 -1
- package/dist/THIRD_PARTY_NOTICES.md +2 -1
- package/dist/backend-wasm.js +1 -1
- package/dist/backend-webgpu.js +1 -1
- package/dist/composition.js +11 -8
- package/dist/posenet.js +10 -7
- package/dist/runtime.js +2 -5001
- package/dist/teachable-machine-wasm.js +68552 -0
- package/dist/teachable-machine-webgpu.js +68552 -0
- package/dist/{tm.js → teachable-machine.js} +23 -12
- package/dist/types/config.d.ts +1 -1
- package/package.json +10 -7
package/README.ja.md
CHANGED
|
@@ -46,35 +46,51 @@ flowchart LR
|
|
|
46
46
|
|
|
47
47
|
- 公開済みのTeachable Machineのポーズ・画像・音声モデルのURL(エディターのURLではなく、モデルフォルダーのURL)
|
|
48
48
|
- カメラまたはマイクと、ブラウザーでのその使用許可
|
|
49
|
-
-
|
|
50
|
-
- TurboWarp
|
|
49
|
+
- モデルファイルを取得するためのネットワーク接続(軽量版ではライブラリーの取得にも使用)
|
|
50
|
+
- TurboWarpの**サンドボックスなしで実行**オプション。これは**テキスト**または**ファイル**から読み込んだ場合に選べます([導入方法](#導入方法)を参照)
|
|
51
51
|
|
|
52
52
|
> [!IMPORTANT]
|
|
53
53
|
> この機能拡張は、カメラ・マイク・ステージにアクセスするためサンドボックスなしで動作します。信頼できる提供元のコードだけを読み込んでください。またカメラAPIには、HTTPSや`localhost`などの安全なブラウザーコンテキストが必要です。
|
|
54
54
|
|
|
55
55
|
## 導入方法
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
標準のTurboWarp Editorで、次のどれか1つを読み込みます。
|
|
58
|
+
|
|
59
|
+
| ファイル | 初期計算モード | 依存ライブラリーとWASMバイナリ |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| [`dist/teachable-machine-webgpu.js`](dist/teachable-machine-webgpu.js) | `webgpu` | すべて内包 |
|
|
62
|
+
| [`dist/teachable-machine-wasm.js`](dist/teachable-machine-wasm.js) | `wasm` | すべて内包 |
|
|
63
|
+
| [`dist/teachable-machine.js`](dist/teachable-machine.js) | `auto` | 必要時にネット取得する軽量版 |
|
|
64
|
+
|
|
65
|
+
**テキスト**タブではファイルの全文を貼り付け、**サンドボックスなしで実行**を有効にします。
|
|
66
|
+
**ファイル**タブから同じJavaScriptファイルを選んでも利用できます。
|
|
67
|
+
|
|
68
|
+
内包版はTensorFlow.jsを1系統だけ含み、Teachable Machine Pose/Image、Speech Commands、
|
|
69
|
+
WebGPU/WebGL/WASM/CPUの全バックエンド、3種類のWASMバイナリ、並列ワーカーを同梱します。
|
|
70
|
+
初期方式以外への切り替えやフォールバックでも、ライブラリーやWASMバイナリの外部取得は発生しません。
|
|
71
|
+
モデルファイルとPoseNetの重みは別途取得するため、完全オフラインのモデルパッケージではありません。
|
|
72
|
+
実際の方式は`active compute backend`で確認できます。
|
|
58
73
|
|
|
59
74
|
> [!IMPORTANT]
|
|
60
|
-
>
|
|
75
|
+
> URLタブは信頼されていない拡張をサンドボックス化します。**テキスト**または**ファイル**で、
|
|
76
|
+
> **サンドボックスなしで実行**を有効にしてください。
|
|
61
77
|
|
|
62
|
-
|
|
78
|
+
軽量版のバージョン固定CDN URLは、対応する成果物の公開後に利用できます。
|
|
63
79
|
|
|
64
80
|
```text
|
|
65
|
-
https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@4.0.
|
|
81
|
+
https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@4.0.2/dist/teachable-machine.js
|
|
66
82
|
```
|
|
67
83
|
|
|
68
84
|
合成ランタイムは、縮小済みの第三者バンドルを書き換えることなく、同じ検証済み成果物を読み込んだり同梱したりできます。
|
|
69
85
|
|
|
70
86
|
```text
|
|
71
|
-
https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@4.0.
|
|
87
|
+
https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@4.0.2/dist/runtime.js
|
|
72
88
|
```
|
|
73
89
|
|
|
74
90
|
公開済みパッケージを別のプロジェクトに追加するには次のようにします。
|
|
75
91
|
|
|
76
92
|
```sh
|
|
77
|
-
pnpm add --save-exact @kubohiroya/turbowarp-teachable-machine@4.0.
|
|
93
|
+
pnpm add --save-exact @kubohiroya/turbowarp-teachable-machine@4.0.2
|
|
78
94
|
```
|
|
79
95
|
|
|
80
96
|
### 名前について
|
|
@@ -417,17 +433,24 @@ pnpm install --frozen-lockfile
|
|
|
417
433
|
pnpm check
|
|
418
434
|
```
|
|
419
435
|
|
|
420
|
-
`pnpm check`は、型検査・テスト・本番ビルド・生成ドキュメントの検証・Pagesのリンク検証・配布物の再現性・npmパッケージのドライランをまとめて実行します。ビルドは`dist/
|
|
436
|
+
`pnpm check`は、型検査・テスト・本番ビルド・生成ドキュメントの検証・Pagesのリンク検証・配布物の再現性・npmパッケージのドライランをまとめて実行します。ビルドは`dist/teachable-machine.js`・`dist/teachable-machine-webgpu.js`・`dist/teachable-machine-wasm.js`・`dist/composition.js`・`dist/runtime.js`・`dist/posenet.js`と、`dist/posenet/`以下の3つの生のPoseNetモデル資産を生成します。
|
|
421
437
|
|
|
422
438
|
[英語版README](README.md#blocks)のブロック一覧は`src/block-definitions.json`から`pnpm docs`で生成されます。生成された節ではなく定義のほうを編集してください。リリースの基準は`package.json`のバージョンです。実行時のレポーターはそこに`-typescript`を付けた値を返し、リリース整合性チェックが、生成されたバンドル・READMEのバージョン固定の例・Pagesのバッジ・リリースタグをその値と揃えます。
|
|
423
439
|
|
|
440
|
+
### 標準Editorでの検証
|
|
441
|
+
|
|
442
|
+
WebGPU版・WASM版をテキストとファイルから読み込む4通りの認識を確認しました。
|
|
443
|
+
[検証条件・再実行手順](docs/standalone-validation.ja.md)を参照してください。
|
|
444
|
+
|
|
424
445
|
### npmへの公開
|
|
425
446
|
|
|
426
447
|
npmへの公開には、長期間有効な書き込みトークンではなくGitHub Actionsのtrusted publishingを使います。npmのパッケージ設定で、`kubohiroya/turbowarp-teachable-machine`のワークフローファイル`publish-npm.yml`を`npm publish`について信頼する設定にしてください。注釈付きのリリースタグとGitHub Releaseを作ったうえで、そのタグを指定して**Publish npm package**を起動します。ワークフローはタグをチェックアウトし、`package.json`と完全に一致することを確認し、すべてのチェックを実行してから、短命のOIDC資格情報で公開します。自動化を戻したい場合は、npmのパッケージ設定からtrusted publisherを外してください。リポジトリーに書き込みトークンを追加しないでください。
|
|
427
448
|
|
|
428
449
|
## 外部ライブラリー
|
|
429
450
|
|
|
430
|
-
バージョン固定の`dist/runtime.js`は、TensorFlow.js 4.22.0、Teachable Machine Pose 0.8.6、Teachable Machine Image 0.8.5、TensorFlow.js Speech Commands 0.5.4、PoseNet 2.2.2を、1
|
|
451
|
+
バージョン固定の`dist/runtime.js`は、TensorFlow.js 4.22.0、Teachable Machine Pose 0.8.6、Teachable Machine Image 0.8.5、TensorFlow.js Speech Commands 0.5.4、PoseNet 2.2.2を、1つの検証済みモジュールグラフとして同梱しています。ランタイムが注入されない場合、軽量版はこの単一の成果物をjsDelivrから読み込みます。任意の`dist/backend-wasm.js`と`dist/backend-webgpu.js`は、その実行環境がすでに公開したインスタンスに対してTensorFlow.jsを解決するので、1つのページでTensorFlow.jsのコアが二重になることはありません。`dist/wasm/`以下のWebAssemblyバイナリーと、`dist/posenet/`以下の固定オフラインPoseNetモデルデータは、元のバイナリーファイルのまま配布されます。
|
|
452
|
+
|
|
453
|
+
内包版は上記のライブラリー・バックエンド・WASMバイナリと、第三者ライセンス全文をJavaScript内に含みます。
|
|
431
454
|
|
|
432
455
|
第三者ライセンスは[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)にまとめてあります。
|
|
433
456
|
|
package/README.md
CHANGED
|
@@ -43,12 +43,11 @@ runtime libraries and the published model are fetched.
|
|
|
43
43
|
|
|
44
44
|
## Requirements
|
|
45
45
|
|
|
46
|
-
-
|
|
47
|
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
|
|
51
|
-
file. See [Installation](#installation).
|
|
46
|
+
- a published Teachable Machine Pose, Image, or Audio model URL;
|
|
47
|
+
- a camera or microphone and permission to use it in the browser;
|
|
48
|
+
- network access for model files (and, for the lightweight build, runtime libraries);
|
|
49
|
+
- TurboWarp's **Run without sandbox** option, which is only available when the extension is
|
|
50
|
+
loaded from **Text** or **Files** (see [Installation](#installation)).
|
|
52
51
|
|
|
53
52
|
> [!IMPORTANT]
|
|
54
53
|
> This extension is unsandboxed because it needs camera, microphone, and stage access. Load
|
|
@@ -57,33 +56,61 @@ runtime libraries and the published model are fetched.
|
|
|
57
56
|
|
|
58
57
|
## Installation
|
|
59
58
|
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
Choose **one** of these files in a standard TurboWarp Editor:
|
|
60
|
+
|
|
61
|
+
| File | Initial compute mode | Bundled dependencies |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| [`dist/teachable-machine-webgpu.js`](dist/teachable-machine-webgpu.js) | `webgpu` | All runtime libraries, all backends, and all WASM binaries |
|
|
64
|
+
| [`dist/teachable-machine-wasm.js`](dist/teachable-machine-wasm.js) | `wasm` | All runtime libraries, all backends, and all WASM binaries |
|
|
65
|
+
| [`dist/teachable-machine.js`](dist/teachable-machine.js) | `auto` | Lightweight loader; downloads runtime libraries and optional backends |
|
|
66
|
+
|
|
67
|
+
For **Text**, copy the entire file into the custom extension dialog's **Text** tab,
|
|
68
|
+
enable **Run without sandbox**, and load it. Alternatively, select the JavaScript file
|
|
69
|
+
in the **Files** tab and enable the same option. A custom TurboWarp build is not required.
|
|
70
|
+
|
|
71
|
+
The WebGPU and WASM files each contain one TensorFlow.js module graph, Teachable Machine
|
|
72
|
+
Pose/Image, Speech Commands, WebGPU/WebGL/WASM/CPU kernels, all three WASM binaries as data
|
|
73
|
+
URLs, and the WASM worker. They do not fetch JavaScript libraries, workers, or WASM binaries
|
|
74
|
+
from a CDN. Both include every backend so fallback and later mode changes also work without
|
|
75
|
+
fetching library assets. They differ only in the initial compute mode; load one variant per editor.
|
|
76
|
+
|
|
77
|
+
These are not complete offline model bundles: your Teachable Machine model files are still
|
|
78
|
+
loaded from the URL you specify, and pose recognition also loads the PoseNet model weights.
|
|
79
|
+
Camera/microphone permissions and HTTPS or localhost are still required.
|
|
80
|
+
|
|
81
|
+
Set `set compute mode to [webgpu]` or `[wasm]` before loading a model to change the requested
|
|
82
|
+
backend. If it is unavailable or fails the convolution check, the extension falls back;
|
|
83
|
+
`active compute backend` reports the actual backend, and `last error` explains a fallback.
|
|
62
84
|
|
|
63
85
|
> [!IMPORTANT]
|
|
64
|
-
> The
|
|
65
|
-
>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
86
|
+
> The **URL** tab sandboxes untrusted extension URLs and cannot provide the access this extension
|
|
87
|
+
> needs. Use **Text** or **Files** with **Run without sandbox** enabled.
|
|
88
|
+
|
|
89
|
+
All extension distribution filenames use the `teachable-machine` prefix.
|
|
90
|
+
Existing Scratch extension IDs, opcodes, and runtime API names remain compatible.
|
|
69
91
|
|
|
70
|
-
The
|
|
92
|
+
The version-pinned lightweight build uses this CDN URL after publication:
|
|
71
93
|
|
|
72
94
|
```text
|
|
73
|
-
https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@4.0.
|
|
95
|
+
https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@4.0.2/dist/teachable-machine.js
|
|
74
96
|
```
|
|
75
97
|
|
|
76
|
-
|
|
77
|
-
|
|
98
|
+
The lightweight extension loads one reviewed browser runtime that contains one TensorFlow.js 4.22.0
|
|
99
|
+
module graph together with Teachable Machine Pose 0.8.6, Teachable Machine Image 0.8.5, and
|
|
100
|
+
TensorFlow.js Speech Commands 0.5.4. That runtime ships the WebGL and CPU kernels; the WebGPU and
|
|
101
|
+
WebAssembly backends live in separate bundles next to it and are fetched only when a project uses
|
|
102
|
+
them. See [Compute backends](#compute-backends).
|
|
103
|
+
Composite runtimes can load or embed the same artifact without rewriting a minified third-party
|
|
104
|
+
bundle:
|
|
78
105
|
|
|
79
106
|
```text
|
|
80
|
-
https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@4.0.
|
|
107
|
+
https://cdn.jsdelivr.net/npm/@kubohiroya/turbowarp-teachable-machine@4.0.2/dist/runtime.js
|
|
81
108
|
```
|
|
82
109
|
|
|
83
110
|
To add the published package to another project:
|
|
84
111
|
|
|
85
112
|
```sh
|
|
86
|
-
pnpm add --save-exact @kubohiroya/turbowarp-teachable-machine@4.0.
|
|
113
|
+
pnpm add --save-exact @kubohiroya/turbowarp-teachable-machine@4.0.2
|
|
87
114
|
```
|
|
88
115
|
|
|
89
116
|
### Names
|
|
@@ -958,8 +985,9 @@ pnpm check
|
|
|
958
985
|
|
|
959
986
|
`pnpm check` runs type checking, tests, the production build, generated-documentation validation,
|
|
960
987
|
Pages link validation, distribution reproducibility, and an npm package dry run. The build produces
|
|
961
|
-
`dist/
|
|
962
|
-
|
|
988
|
+
`dist/teachable-machine.js`, `dist/teachable-machine-webgpu.js`, `dist/teachable-machine-wasm.js`,
|
|
989
|
+
`dist/composition.js`, `dist/runtime.js`, `dist/posenet.js`, and the three raw
|
|
990
|
+
PoseNet model assets under `dist/posenet/`.
|
|
963
991
|
|
|
964
992
|
The block reference above is generated from `src/block-definitions.json` by `pnpm docs`; edit the
|
|
965
993
|
definitions, not the generated section. The version in `package.json` is the release source of
|
|
@@ -967,6 +995,15 @@ truth: the runtime reporter appends `-typescript` to it, and the release consist
|
|
|
967
995
|
generated bundles, the exact-version README examples, the Pages badges, and the release tag aligned
|
|
968
996
|
with it.
|
|
969
997
|
|
|
998
|
+
### Standalone editor validation
|
|
999
|
+
|
|
1000
|
+
The [standalone validation guide (Japanese)](docs/standalone-validation.ja.md) records the
|
|
1001
|
+
standard-editor model-recognition checks for both **Text** and **Files**, including WebGPU
|
|
1002
|
+
and multithreaded WASM. To repeat them against a dedicated Chrome profile with a fake camera,
|
|
1003
|
+
follow that guide and run `node scripts/check-standalone-editor.mjs`. This optional browser
|
|
1004
|
+
check requires network access to the editor and the public Pose model; its JSON report records
|
|
1005
|
+
the browser version and SHA-256 of each tested JavaScript file.
|
|
1006
|
+
|
|
970
1007
|
### npm publishing
|
|
971
1008
|
|
|
972
1009
|
npm publication uses GitHub Actions trusted publishing rather than a long-lived write token. The npm
|
|
@@ -981,12 +1018,15 @@ not add a write token to the repository.
|
|
|
981
1018
|
|
|
982
1019
|
The version-pinned `dist/runtime.js` artifact bundles TensorFlow.js 4.22.0, Teachable Machine Pose
|
|
983
1020
|
0.8.6, Teachable Machine Image 0.8.5, TensorFlow.js Speech Commands 0.5.4, and PoseNet 2.2.2 in one
|
|
984
|
-
reviewed module graph. The
|
|
1021
|
+
reviewed module graph. The lightweight extension loads that single artifact from jsDelivr when no
|
|
985
1022
|
runtime is injected. The optional `dist/backend-wasm.js` and `dist/backend-webgpu.js` bundles
|
|
986
1023
|
resolve TensorFlow.js against the instance that runtime already published, so a page never ends up
|
|
987
1024
|
with two TensorFlow.js cores. The WebAssembly binaries under `dist/wasm/` and the fixed offline
|
|
988
1025
|
PoseNet model data under `dist/posenet/` are distributed as their original binary files.
|
|
989
1026
|
|
|
1027
|
+
The self-contained WebGPU/WASM extensions also embed the runtime libraries, backend code,
|
|
1028
|
+
and WASM binaries in their JavaScript file, together with the complete third-party notice.
|
|
1029
|
+
|
|
990
1030
|
Third-party licences are listed in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).
|
|
991
1031
|
|
|
992
1032
|
## Fixed input editors
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Third-party notices
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The self-contained extensions (`dist/teachable-machine-webgpu.js` and
|
|
4
|
+
`dist/teachable-machine-wasm.js`), the reviewed browser runtime (`dist/runtime.js`), the optional compute backend
|
|
4
5
|
bundles (`dist/backend-wasm.js`, `dist/backend-webgpu.js`, `dist/wasm/`), and the
|
|
5
6
|
fixed offline PoseNet model supply (`dist/posenet/`) include the following
|
|
6
7
|
software and model data:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Third-party notices
|
|
2
2
|
|
|
3
|
-
The
|
|
3
|
+
The self-contained extensions (`dist/teachable-machine-webgpu.js` and
|
|
4
|
+
`dist/teachable-machine-wasm.js`), the reviewed browser runtime (`dist/runtime.js`), the optional compute backend
|
|
4
5
|
bundles (`dist/backend-wasm.js`, `dist/backend-webgpu.js`, `dist/wasm/`), and the
|
|
5
6
|
fixed offline PoseNet model supply (`dist/posenet/`) include the following
|
|
6
7
|
software and model data:
|
package/dist/backend-wasm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @license Includes TensorFlow.js WASM backend 4.22.0 (Apache-2.0). See https://github.com/kubohiroya/turbowarp-teachable-machine/blob/v4.0.
|
|
1
|
+
/*! @license Includes TensorFlow.js WASM backend 4.22.0 (Apache-2.0). See https://github.com/kubohiroya/turbowarp-teachable-machine/blob/v4.0.2/THIRD_PARTY_NOTICES.md. */
|
|
2
2
|
(function(i){var ki=Object.create,wr=Object.defineProperty,Si=Object.getOwnPropertyDescriptor,Mi=Object.getOwnPropertyNames,Ai=Object.getPrototypeOf,Fr=Object.prototype.hasOwnProperty,dn=(t,a)=>()=>(a||(t((a={exports:{}}).exports,a),t=null),a.exports),xi=(t,a,u,d)=>{if(a&&typeof a=="object"||typeof a=="function")for(var r=Mi(a),n=0,o=r.length,p;n<o;n++)p=r[n],!Fr.call(t,p)&&p!==u&&wr(t,p,{get:(l=>a[l]).bind(null,p),enumerable:!(d=Si(a,p))||d.enumerable});return t},Nr=(t,a,u)=>(u=t!=null?ki(Ai(t)):{},xi(a||!t||!t.__esModule||!Fr.call(t,"default")?wr(u,"default",{value:t,enumerable:!0}):u,t)),G;(function(t){t[t.float32=0]="float32",t[t.int32=1]="int32",t[t.bool=2]="bool",t[t.string=3]="string",t[t.complex64=4]="complex64"})(G||(G={}));var qe;(function(t){t[t.linear=0]="linear",t[t.relu=1]="relu",t[t.relu6=2]="relu6",t[t.prelu=3]="prelu",t[t.leakyrelu=4]="leakyrelu",t[t.sigmoid=5]="sigmoid",t[t.elu=6]="elu"})(qe||(qe={}));var Cr;function Di(t){Cr=t.wasm.cwrap(i._FusedMatMul,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function wi(t){const{inputs:a,backend:u,attrs:d}=t,{a:r,b:n,bias:o,preluActivationWeights:p}=a;if(r.dtype!=="float32"||n.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");const{transposeA:l,transposeB:s,activation:e,leakyreluAlpha:m}=d,f=u.dataIdMap.get(r.dataId).id,g=u.dataIdMap.get(n.dataId).id;let h=0;if(o!=null){const B=u.dataIdMap.get(o.dataId);if(B.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${B.shape.length}.`);h=B.id}const b=p==null?0:u.dataIdMap.get(p.dataId).id,y=qe[e];if(y==null)throw new Error(`${e} activation not yet supported for FusedConv2D in the wasm backend.`);const k=l?r.shape[2]:r.shape[1],I=s?n.shape[1]:n.shape[2],M=i.broadcast_util.assertAndGetBroadcastShape(r.shape.slice(0,-2),n.shape.slice(0,-2)),D=u.makeOutput([...M,k,I],r.dtype),F=u.dataIdMap.get(D.dataId).id,E=new Uint8Array(new Int32Array(r.shape).buffer),O=new Uint8Array(new Int32Array(n.shape).buffer);return Cr(f,E,r.shape.length,g,O,n.shape.length,l,s,y,h,b,m||0,F),D}var Fi={kernelName:i._FusedMatMul,backendName:"wasm",setupFunc:Di,kernelFunc:wi};function W(t,a){let u;function d(n){u=n.wasm.cwrap(t,null,["number","number","number"])}function r(n){const{backend:o,inputs:{x:p}}=n,l=o.dataIdMap.get(p.dataId).id,s=o.makeOutput(p.shape,a||p.dtype),e=o.dataIdMap.get(s.dataId).id;return i.util.sizeFromShape(s.shape)===0||u(l,G[p.dtype],e),s}return{kernelName:t,backendName:"wasm",setupFunc:d,kernelFunc:r}}var Ni=W(i.Abs),Ci=W(i.Acos),Ri=W(i.Acosh);function Y(t,a,u){let d;function r(o){d=o.wasm.cwrap(t,null,["number","array","number","number","array","number","number","number"])}function n(o){const{backend:p,inputs:l}=o,{a:s,b:e}=l,m=p.dataIdMap.get(s.dataId).id,f=p.dataIdMap.get(e.dataId).id,g=u??s.dtype,h=i.backend_util.assertAndGetBroadcastShape(s.shape,e.shape),b=p.makeOutput(h,g);if(i.util.sizeFromShape(h)===0)return b;const y=new Uint8Array(new Int32Array(s.shape).buffer),k=new Uint8Array(new Int32Array(e.shape).buffer),I=p.dataIdMap.get(b.dataId).id;return d(m,y,s.shape.length,f,k,e.shape.length,G[s.dtype],I),b}return{kernelName:t,backendName:"wasm",setupFunc:r,kernelFunc:n}}var _i=!0,Pi=Y(i.Add,_i),Rr;function Ei(t){Rr=t.wasm.cwrap(i.AddN,null,["array","number","number","number"])}function Bi(t){const{inputs:a,backend:u}=t,d=u.makeOutput(a[0].shape,a[0].dtype);if(i.util.sizeFromShape(d.shape)===0)return d;const r=a.map(p=>u.dataIdMap.get(p.dataId).id),n=new Uint8Array(new Int32Array(r).buffer),o=u.dataIdMap.get(d.dataId).id;return Rr(n,r.length,G[d.dtype],o),d}var Ti={kernelName:i.AddN,backendName:"wasm",setupFunc:Ei,kernelFunc:Bi};function on(t){const{inputs:{x:a},backend:u}=t;if(a.dtype==="string")return(0,i.tensor)(u.readSync(a.dataId),a.shape,a.dtype);const d=u.makeOutput(a.shape,a.dtype),r=u.typedArrayFromHeap(a);return u.typedArrayFromHeap(d).set(r),d}var Oi={kernelName:i.Identity,backendName:"wasm",kernelFunc:on},_r;function Wi(t){_r=t.wasm.cwrap(i.Transpose,null,["number","array","number","number","number","array","number"])}function Ie(t){const{inputs:a,backend:u,attrs:d}=t,[r,n]=Hi(a.x.shape,d.perm);let o=!0;for(let h=0;h<n.length;h++)n[h]!==h&&(o=!1);const p=zi(a.x.shape,d.perm),l={dataId:a.x.dataId,shape:r,dtype:a.x.dtype};if(o){const h=on({inputs:a,backend:u});return h.shape=p,h}const s=u.makeOutput(p,l.dtype),e=u.dataIdMap.get(l.dataId).id,m=u.dataIdMap.get(s.dataId).id,f=new Uint8Array(new Int32Array(n).buffer),g=new Uint8Array(new Int32Array(l.shape).buffer);return _r(e,g,l.shape.length,G[l.dtype],m,f,n.length),s}function zi(t,a){const u=new Array(t.length);for(let d=0;d<u.length;d++)u[d]=t[a[d]];return u}function Hi(t,a){const u=[],d=[];for(let r=0;r<t.length;++r)t[r]!==1&&u.push(t[r]),t[a[r]]!==1&&d.push(a[r]);for(let r=0;r<d.length;++r){let n=-1;for(let o=0;o<d.length;++o)d[o]>=r&&(n===-1||d[n]>d[o])&&(n=o);d[n]=r}return[u,d]}var Li={kernelName:i.Transpose,backendName:"wasm",kernelFunc:Ie,setupFunc:Wi};function ke(t,a,u){const d=t.shape,r=t.shape.length,n=i.util.parseAxisParam(a,d);let o=n;const p=i.backend_util.getAxesPermutation(o,r);let l=null,s=!1;if(p!=null){const e=new Array(r);for(let f=0;f<e.length;f++)e[f]=d[p[f]];o=i.backend_util.getInnerMostAxes(o.length,r),l=Ie({inputs:{x:t},attrs:{perm:p},backend:u});const m=u.dataIdMap.get(t.dataId).id;u.dataIdMap.get(l.dataId).id!==m&&(s=!0)}return{transposed:l,originalAxes:n,axes:o,inputWasTransposed:s}}var Pr;function Gi(t){Pr=t.wasm.cwrap(i.All,null,["number, number, number"])}function $i(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u;let p=a.dataIdMap.get(o.dataId).id,l=o;const{transposed:s,axes:e,originalAxes:m,inputWasTransposed:f}=ke(o,r,a);if(f){const I=a.dataIdMap.get(s.dataId).id;l=s,p=I}const g=l.shape.length;i.backend_util.assertAxesAreInnerMostDims("all",e,g);const[h,b]=i.backend_util.computeOutAndReduceShapes(l.shape,e),y=i.util.sizeFromShape(b),k=a.makeOutput(h,o.dtype);if(i.util.sizeFromShape(l.shape)!==0){const I=a.dataIdMap.get(k.dataId).id;Pr(p,y,I)}return f&&a.disposeData(s.dataId),n&&(k.shape=i.backend_util.expandShapeToKeepDim(k.shape,m)),k}var Vi={kernelName:i.All,backendName:"wasm",setupFunc:Gi,kernelFunc:$i},Er;function Ui(t){Er=t.wasm.cwrap(i.Any,null,["number, number, number"])}function qi(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u;let p=a.dataIdMap.get(o.dataId).id,l=o;const{transposed:s,axes:e,originalAxes:m,inputWasTransposed:f}=ke(o,r,a);if(f){const I=a.dataIdMap.get(s.dataId).id;l=s,p=I}const g=l.shape.length;i.backend_util.assertAxesAreInnerMostDims("any",e,g);const[h,b]=i.backend_util.computeOutAndReduceShapes(l.shape,e),y=i.util.sizeFromShape(b),k=a.makeOutput(h,o.dtype);if(i.util.sizeFromShape(l.shape)!==0){const I=a.dataIdMap.get(k.dataId).id;Er(p,y,I)}return f&&a.disposeData(s.dataId),n&&(k.shape=i.backend_util.expandShapeToKeepDim(k.shape,m)),k}var Ki={kernelName:i.Any,backendName:"wasm",setupFunc:Ui,kernelFunc:qi};function Br(t){let a;function u(r){a=r.wasm.cwrap(t,null,["number","number","number","number","number"])}function d(r){const{backend:n,inputs:o,attrs:p}=r,{axis:l}=p,{x:s}=o,e=n.dataIdMap.get(s.dataId).id;let m=e,f=s;const{transposed:g,axes:h,inputWasTransposed:b}=ke(s,l,n);if(b){const F=n.dataIdMap.get(g.dataId).id;F!==e&&(f=g,m=F)}const y=f.shape.slice(0,-1),k=n.makeOutput(y,"int32"),I=n.dataIdMap.get(k.dataId).id,M=i.util.sizeFromShape(k.shape),D=f.shape[h[0]];return a(m,G[f.dtype],M,D,I),b&&n.disposeData(g.dataId),k}return{kernelName:t,backendName:"wasm",setupFunc:u,kernelFunc:d}}var Xi=Br(i.ArgMax),Ji=Br(i.ArgMin),Qi=W(i.Asin),Yi=W(i.Asinh),Zi=W(i.Atan),ji=Y(i.Atan2,!1),es=W(i.Atanh),Tr;function ns(t){Tr=t.wasm.cwrap(i.AvgPool,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ts(t){const{inputs:a,attrs:u,backend:d}=t,r=a.x,n=d.dataIdMap.get(r.dataId).id,{filterSize:o,strides:p,pad:l,dimRoundingMode:s}=u,e=i.backend_util.computePool2DInfo(r.shape,o,p,1,l,s),m=e.filterHeight,f=e.filterWidth,g=e.padInfo.top,h=e.padInfo.right,b=e.padInfo.bottom,y=e.padInfo.left,k=e.strideHeight,I=e.strideWidth,M=e.inChannels;if(e.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${e.dataFormat}'. Please use 'channelsLast'.`);if(e.dilationWidth!==1||e.dilationHeight!==1)throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${e.dilationHeight}, ${e.dilationWidth}].`);const D=d.makeOutput(e.outShape,"float32"),F=d.dataIdMap.get(D.dataId).id;return Tr(n,r.shape[0],r.shape[1],r.shape[2],m,f,g,h,b,y,k,I,M,F),D}var as={kernelName:i.AvgPool,backendName:"wasm",setupFunc:ns,kernelFunc:ts},Or;function rs(t){Or=t.wasm.cwrap("AvgPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function us(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{filterSize:n,strides:o,pad:p,dimRoundingMode:l,dataFormat:s}=d,e=i.backend_util.computePool3DInfo(r.shape,n,o,1,p,l,s),m=u.makeOutput(e.outShape,r.dtype);return Or(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,e.batchSize,e.inChannels,e.inDepth,e.inHeight,e.inWidth,e.outDepth,e.outHeight,e.outWidth,e.strideDepth,e.strideHeight,e.strideWidth,e.dilationDepth,e.dilationHeight,e.dilationWidth,e.effectiveFilterDepth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.front,e.padInfo.top,e.padInfo.left),m}var is={kernelName:i.AvgPool3D,backendName:"wasm",setupFunc:rs,kernelFunc:us},Wr;function ss(t){Wr=t.wasm.cwrap("AvgPool3DGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ds(t){const{inputs:a,backend:u,attrs:d}=t,{dy:r,input:n}=a,{filterSize:o,strides:p,pad:l,dimRoundingMode:s}=d,e=i.backend_util.computePool3DInfo(n.shape,o,p,1,l,s),m=u.makeOutput(n.shape,n.dtype);return Wr(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,e.batchSize,e.inChannels,e.inDepth,e.inHeight,e.inWidth,e.outDepth,e.outHeight,e.outWidth,e.strideDepth,e.strideHeight,e.strideWidth,e.dilationDepth,e.dilationHeight,e.dilationWidth,e.effectiveFilterDepth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.front,e.padInfo.top,e.padInfo.left,e.filterDepth,e.filterHeight,e.filterWidth),m}var os={kernelName:i.AvgPool3DGrad,backendName:"wasm",setupFunc:ss,kernelFunc:ds},zr;function ps(t){zr=t.wasm.cwrap("AvgPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ls(t){const{inputs:a,backend:u,attrs:d}=t,{dy:r,input:n}=a,{filterSize:o,strides:p,pad:l}=d,s=i.backend_util.computePool2DInfo(n.shape,o,p,1,l),e=u.makeOutput(n.shape,n.dtype);return zr(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(e.dataId).id,s.batchSize,s.inChannels,s.inHeight,s.inWidth,s.outHeight,s.outWidth,s.strideHeight,s.strideWidth,s.dilationHeight,s.dilationWidth,s.effectiveFilterHeight,s.effectiveFilterWidth,s.padInfo.top,s.padInfo.left,s.filterHeight,s.filterWidth),e}var cs={kernelName:i.AvgPoolGrad,backendName:"wasm",setupFunc:ps,kernelFunc:ls};function ue(t){const{inputs:a,attrs:u}=t,{x:d}=a,{shape:r}=u,n=i.util.sizeFromShape(d.shape),o=i.util.inferFromImplicitShape(r,n);return i.util.assert(n===i.util.sizeFromShape(o),()=>`new shape: ${o}, old shape: ${d.shape}. New shape and old shape must have the same number of elements.`),t.backend.incRef(d.dataId),{dataId:d.dataId,shape:o,dtype:d.dtype}}var ms={kernelName:i.Reshape,backendName:"wasm",kernelFunc:ue},Hr;function hs(t){Hr=t.wasm.cwrap(i.BatchMatMul,null,["number","array","number","number","array","number","number","number","number"])}function gs(t){const{inputs:a,backend:u,attrs:d}=t,{a:r,b:n}=a,{transposeA:o,transposeB:p}=d;if(r.dtype!=="float32"||n.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");const l=r.shape.length,s=n.shape.length,e=o?r.shape[l-2]:r.shape[l-1],m=p?n.shape[s-1]:n.shape[s-2],f=o?r.shape[l-1]:r.shape[l-2],g=p?n.shape[s-2]:n.shape[s-1],h=r.shape.slice(0,-2),b=n.shape.slice(0,-2),y=i.util.sizeFromShape(h),k=i.util.sizeFromShape(b),I=i.broadcast_util.assertAndGetBroadcastShape(r.shape.slice(0,-2),n.shape.slice(0,-2)).concat([f,g]);i.util.assert(e===m,()=>`Error in matMul: inner shapes (${e}) and (${m}) of Tensors with shapes ${r.shape} and ${n.shape} and transposeA=${o} and transposeB=${p} must match.`);const M=o?[y,e,f]:[y,f,e],D=p?[k,g,m]:[k,m,g],F=ue({inputs:{x:r},backend:u,attrs:{shape:M}}),E=ue({inputs:{x:n},backend:u,attrs:{shape:D}}),O=u.dataIdMap.get(F.dataId).id,B=u.dataIdMap.get(E.dataId).id,K=o?F.shape[2]:F.shape[1],X=p?E.shape[1]:E.shape[2],U=Math.max(y,k),q=u.makeOutput([U,K,X],F.dtype),Z=u.dataIdMap.get(q.dataId).id,ie=new Uint8Array(new Int32Array(F.shape).buffer),le=new Uint8Array(new Int32Array(E.shape).buffer);return Hr(O,ie,F.shape.length,B,le,E.shape.length,o,p,Z),u.disposeData(F.dataId),u.disposeData(E.dataId),q.shape=I,q}var fs={kernelName:i.BatchMatMul,backendName:"wasm",setupFunc:hs,kernelFunc:gs};function bs(t,a,u,d){const r=i.util.getArrayFromDType(u,i.util.sizeFromShape(a));if(d&&u!=="string"){let n=0;t.forEach(o=>{const p=i.util.sizeFromShape(o.shape);r.set(o.vals,n),n+=p})}else{let n=0;t.forEach(o=>{const p=u==="string"?i.backend_util.fromUint8ToStringArray(o.vals):o.vals;let l=0;for(let s=0;s<o.shape[0];++s){const e=s*a[1]+n;for(let m=0;m<o.shape[1];++m)r[e+m]=p[l++]}n+=o.shape[1]})}return r}function vs(t,a,u,d){if(t===a||t<a&&u<0||a<t&&u>1)return i.util.makeZerosTypedArray(0,d);const r=Math.abs(Math.ceil((a-t)/u)),n=i.util.makeZerosTypedArray(r,d);a<t&&u===1&&(u=-1),n[0]=t;for(let o=1;o<n.length;o++)n[o]=n[o-1]+u;return n}function Lr(t,a,u,d,r){const n=i.slice_util.isSliceContinous(d,a,u),o=i.util.sizeFromShape(u),p=i.util.computeStrides(d);if(n){const m=i.slice_util.computeFlatOffset(a,p);return r==="string"?t.slice(m,m+o):t.subarray(m,m+o)}const l=r==="string"?i.backend_util.fromUint8ToStringArray(t):t,s=(0,i.buffer)(d,r,l),e=(0,i.buffer)(u,r);for(let m=0;m<e.size;++m){const f=e.indexToLoc(m),g=f.map((h,b)=>h+a[b]);e.set(s.get(...g),...f)}return r==="string"?i.backend_util.fromStringArrayToUint8(e.values):e.values}var ys=class{constructor(t,a,u,d,r,n){this.separator=i.util.encodeString(t),this.nGramWidths=a,this.leftPad=i.util.encodeString(u),this.rightPad=i.util.encodeString(d),this.padWidth=r,this.preserveShort=n}getPadWidth(t){return Math.min(this.padWidth<0?t-1:this.padWidth,t-1)}getNumNGrams(t,a){const u=this.getPadWidth(a);return Math.max(0,t+2*u-a+1)}createNGrams(t,a,u,d,r,n){for(let o=0;o<r;++o){const p=this.getPadWidth(n),l=Math.max(0,p-o),s=Math.max(0,p-(r-(o+1))),e=n-(l+s),m=a+(l>0?0:o-p);let f=0;f+=l*this.leftPad.length;for(let k=0;k<e;++k)f+=t[m+k].length;f+=s*this.rightPad.length;const g=l+s+e-1;f+=g*this.separator.length,u[d+o]=new Uint8Array(f);const h=u[d+o];let b=0;const y=k=>k.forEach(I=>h[b++]=I);for(let k=0;k<l;++k)y(this.leftPad),y(this.separator);for(let k=0;k<e-1;++k)y(t[m+k]),y(this.separator);if(e>0){y(t[m+e-1]);for(let k=0;k<s;++k)y(this.separator),y(this.rightPad)}else{for(let k=0;k<s-1;++k)y(this.rightPad),y(this.separator);y(this.rightPad)}}}compute(t,a){const u=t.length,d=a.length;if(d>0){let p=a[0];if(p!==0)throw new Error(`First split value must be 0, got ${p}`);for(let l=1;l<d;++l){let s=a[l]>=p;if(s=s&&a[l]<=u,!s)throw new Error(`Invalid split value ${a[l]}, must be in [${p}, ${u}]`);p=a[l]}if(p!==u)throw new Error(`Last split value must be data size. Expected ${u}, got ${p}`)}const r=d-1,n=i.util.getArrayFromDType("int32",d);if(u===0||d===0){const p=new Array(u);for(let l=0;l<=r;++l)n[l]=0;return[p,n]}n[0]=0;for(let p=1;p<=r;++p){const l=a[p]-a[p-1];let s=0;this.nGramWidths.forEach(e=>{s+=this.getNumNGrams(l,e)}),this.preserveShort&&l>0&&s===0&&(s=1),n[p]=n[p-1]+s}const o=new Array(n[r]);for(let p=0;p<r;++p){const l=a[p];let s=n[p];if(this.nGramWidths.forEach(e=>{const m=a[p+1]-a[p],f=this.getNumNGrams(m,e);this.createNGrams(t,l,o,s,f,e),s+=f}),this.preserveShort&&s===n[p]){const e=a[p+1]-a[p];if(e===0)continue;const m=e+2*this.padWidth;this.createNGrams(t,l,o,s,1,m)}}return[o,n]}};function Is(t,a,u,d,r,n,o,p){return new ys(u,d,r,n,o,p).compute(t,a)}function ks(t,a,u,d){if(!t.length)return;if(a.length===0){for(let n=0;n<t.length;++n)d.push(t.subarray(n,n+1));return}if(a.length===1){const n=a[0];let o=t.indexOf(n);for(;o!==-1;){const p=t.subarray(0,o);(!u||p.length!==0)&&d.push(p),t=t.subarray(o+1),o=t.indexOf(n)}(!u||t.length!==0)&&d.push(t);return}let r=0;for(let n=0;n<t.length+1;n++)if(n===t.length||a.indexOf(t[n])!==-1){const o=t.subarray(r,n);(!u||o.length!==0)&&d.push(o),r=n+1}}function Ss(t,a,u){const d=t.length,r=[];let n=0,o=0;const p=new Array(d);for(let f=0;f<d;++f){const g=r.length;ks(t[f],a,u,r);const h=r.length-g;p[f]=h,n+=h,o=Math.max(o,h)}const l=i.util.getArrayFromDType("int32",n*2),s=new Array(n),e=[d,o];let m=0;for(let f=0;f<d;++f)for(let g=0;g<p[f];++g)l[m*2]=f,l[m*2+1]=g,s[m]=r[m],++m;return[l,s,e]}function Ms(t,a){const u=i.util.getArrayFromDType("int32",t.length);for(let d=0;d<t.length;++d)u[d]=i.util.fingerPrint64(t[d]).modulo(a).getLowBitsUnsigned();return u}function As(t,a,u,d){const r=i.util.parseAxisParam(a,u)[0],n=[1,u[0],1];for(let h=0;h<r;h++)n[0]*=u[h];n[1]=u[r];for(let h=r+1;h<u.length;h++)n[2]*=u[h];const o=new Map,p=new Int32Array(u[r]),l=new i.TensorBuffer(n,d,t),s=[],e=n[0]===1&&n[2]===1;for(let h=0;h<u[r];h++){let b;if(e)b=t[h].toString();else{const k=[];for(let I=0;I<n[0];I++)for(let M=0;M<n[2];M++)k.push(l.get(I,h,M));b=k.join(",")}const y=o.get(b);if(y!=null)p[h]=y;else{const k=o.size;o.set(b,k),p[h]=k,s.push(h)}}const m=n.slice();m[1]=o.size;const f=new i.TensorBuffer(m,d);s.forEach((h,b)=>{for(let y=0;y<n[0];y++)for(let k=0;k<n[2];k++)f.set(l.get(y,h,k),y,b,k)});const g=u.slice();return g[r]=m[1],{outputValues:f.values,outputShape:g,indices:p}}function De(t){const{inputs:{x:a},attrs:{begin:u,size:d},backend:r}=t,[n,o]=i.slice_util.parseSliceParams(a,u,d),p=i.slice_util.isSliceContinous(a.shape,n,o),l=r.readSync(a.dataId),s=r.makeOutput(o,a.dtype),e=i.util.computeStrides(a.shape),m=r.dataIdMap.get(s.dataId);if(p){const h=i.slice_util.computeFlatOffset(n,e);return a.dtype==="string"?m.stringBytes=l.slice(h,h+i.util.sizeFromShape(o)):r.typedArrayFromHeap(s).set(l.subarray(h,h+i.util.sizeFromShape(o))),s}if(a.dtype==="string")return m.stringBytes=Lr(l,n,o,a.shape,a.dtype),s;const f=r.typedArrayFromHeap(s),g=a.shape.length;if(g===2)xs(l,e[0],f,n,o);else if(g===3)Ds(l,e[0],e[1],f,n,o);else if(g===4)ws(l,e[0],e[1],e[2],f,n,o);else{const h=Lr(l,n,o,a.shape,a.dtype);f.set(h)}return s}function xs(t,a,u,d,r){let n=0;const o=d[0],p=d[1],l=o+r[0];for(let s=o;s<l;s++){const e=s*a+p;u.set(t.subarray(e,e+r[1]),n),n+=r[1]}}function Ds(t,a,u,d,r,n){let o=0;const p=r[0],l=r[1],s=r[2],e=p+n[0],m=l+n[1];for(let f=p;f<e;f++)for(let g=l;g<m;g++){const h=f*a+g*u+s;d.set(t.subarray(h,h+n[2]),o),o+=n[2]}}function ws(t,a,u,d,r,n,o){let p=0;const l=n[0],s=n[1],e=n[2],m=l+o[0],f=s+o[1],g=e+o[2],h=n[3];for(let b=l;b<m;b++)for(let y=s;y<f;y++)for(let k=e;k<g;k++){const I=b*a+y*u+k*d+h;r.set(t.subarray(I,I+o[3]),p),p+=o[3]}}var Fs={kernelName:i.Slice,backendName:"wasm",kernelFunc:De};function Ns(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{blockShape:n,crops:o}=d,p=n.reduce((k,I)=>k*I),l=i.backend_util.getReshaped(r.shape,n,p),s=i.backend_util.getPermuted(l.length,n.length),e=i.backend_util.getReshapedPermuted(r.shape,n,p),m=i.backend_util.getSliceBeginCoords(o,n.length),f=i.backend_util.getSliceSize(e,o,n.length),g=ue({inputs:{x:r},backend:u,attrs:{shape:l}}),h=Ie({inputs:{x:g},backend:u,attrs:{perm:s}}),b=ue({inputs:{x:h},backend:u,attrs:{shape:e}}),y=De({inputs:{x:b},backend:u,attrs:{begin:m,size:f}});return u.disposeData(g.dataId),u.disposeData(h.dataId),u.disposeData(b.dataId),y}var Cs={kernelName:i.BatchToSpaceND,backendName:"wasm",kernelFunc:Ns},Gr;function Rs(t){Gr=t.wasm.cwrap(i.Bincount,null,["number","number","boolean","number","number","number"])}function _s(t){const{backend:a,inputs:u,attrs:d}=t,{x:r,weights:n}=u,{size:o}=d,p=n.shape.reduce((m,f)=>m*f,1)!==0,l=r.shape.length===1?[o]:[r.shape[0],o],s=a.makeOutput(l,n.dtype);function e(m){return a.dataIdMap.get(m.dataId).id}return Gr(e(r),o,p,e(n),G[n.dtype],e(s)),s}var Ps={kernelName:i.Bincount,backendName:"wasm",setupFunc:Rs,kernelFunc:_s},Es=!0,Bs=Y(i.BitwiseAnd,Es);function Ts(t){const{inputs:a,backend:u}=t,{s0:d,s1:r}=a,n=u.typedArrayFromHeap(d),o=u.typedArrayFromHeap(r),p=i.backend_util.assertAndGetBroadcastShape(Array.from(n),Array.from(o));return u.makeOutput([p.length],"int32",void 0,new Int32Array(p))}var Os={kernelName:i.BroadcastArgs,backendName:"wasm",kernelFunc:Ts};function Se(t){const{inputs:{x:a},attrs:{dtype:u},backend:d}=t,r=d.makeOutput(a.shape,u),n=d.typedArrayFromHeap(a);return d.typedArrayFromHeap(r).set(n),r}var Ws={kernelName:i.Cast,backendName:"wasm",kernelFunc:Se},zs=W(i.Ceil),$r;function Hs(t){$r=t.wasm.cwrap(i.ClipByValue,null,["number","number","number","number"])}function Ls(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{clipValueMin:n,clipValueMax:o}=d,p=u.dataIdMap.get(r.dataId).id,l=u.makeOutput(r.shape,r.dtype),s=u.dataIdMap.get(l.dataId).id;return $r(p,n,o,s),l}var Gs={kernelName:i.ClipByValue,backendName:"wasm",setupFunc:Hs,kernelFunc:Ls};function Vr(t){const{inputs:a,backend:u}=t,d=i.util.parseAxisParam(t.attrs.axis,a[0].shape)[0],r=a.map(g=>g.shape);i.backend_util.assertParamsConsistent(r,d);let n=i.backend_util.computeOutShape(a.map(g=>g.shape),d);const o=a.filter(g=>i.util.sizeFromShape(g.shape)>0);if(o.length===1)return on({inputs:{x:o[0]},backend:u});const p=u.makeOutput(n,a[0].dtype);if(i.util.sizeFromShape(n)===0)return p;if(o[0].dtype==="string"){const g=o.map(I=>{const M=[-1,i.util.sizeFromShape(I.shape.slice(d))];return ue({inputs:{x:I},backend:u,attrs:{shape:M}})}),h=g.map(I=>({vals:u.readSync(I.dataId),shape:I.shape}));n=i.backend_util.computeOutShape(g.map(I=>I.shape),1);const b=g[0].shape[0]===1,y=bs(h,n,a[0].dtype,b);p.shape=i.backend_util.computeOutShape(o.map(I=>I.shape),d);const k=u.dataIdMap.get(p.dataId);return k.stringBytes=i.backend_util.fromStringArrayToUint8(y),g.forEach(I=>u.disposeData(I.dataId)),p}const l=i.util.sizeFromShape(o[0].shape.slice(0,d));let s=0;const e=o.map(g=>{const h=i.util.sizeFromShape(g.shape.slice(d));return s+=h,h}),m=o.map(g=>u.typedArrayFromHeap(g)),f=u.typedArrayFromHeap(p);for(let g=0;g<l;g++){let h=g*s;for(let b=0;b<m.length;b++){const y=e[b],k=g*y,I=m[b].subarray(k,k+y);f.set(I,h),h+=y}}return p}var $s={kernelName:i.Concat,backendName:"wasm",kernelFunc:Vr},Ur;function Vs(t){Ur=t.wasm.cwrap(i.Conv2D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Us(t){const{inputs:a,attrs:u,backend:d}=t,{x:r,filter:n}=a,o=d.dataIdMap.get(r.dataId).id,p=d.dataIdMap.get(n.dataId).id,{strides:l,dilations:s,pad:e,dimRoundingMode:m,dataFormat:f}=u,g=i.backend_util.convertConv2DDataFormat(f),h=i.backend_util.computeConv2DInfo(r.shape,n.shape,l,s,e,m,!1,g),b=h.filterHeight,y=h.filterWidth,k=h.padInfo.top,I=h.padInfo.right,M=h.padInfo.bottom,D=h.padInfo.left,F=h.dilationHeight,E=h.dilationWidth,O=h.strideHeight,B=h.strideWidth,K=h.inChannels,X=h.outChannels,U=h.padInfo.type==="SAME"?1:0;if(h.dataFormat!=="channelsLast")throw new Error(`wasm backend Conv2D does not support dataFormat:'${h.dataFormat}'. Please use 'channelsLast'.`);const q=d.makeOutput(h.outShape,"float32"),Z=d.dataIdMap.get(q.dataId).id;return Ur(o,r.shape[0],r.shape[1],r.shape[2],p,b,y,k,I,M,D,U,F,E,O,B,K,X,Z),q}var qs={kernelName:i.Conv2D,backendName:"wasm",setupFunc:Vs,kernelFunc:Us},qr;function Ks(t){qr=t.wasm.cwrap(i.Conv2DBackpropInput,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Xs(t){const{backend:a,inputs:u,attrs:d}=t,{dy:r,filter:n}=u,{strides:o,pad:p,dataFormat:l,dimRoundingMode:s,inputShape:e}=d,m=1,f=i.backend_util.convertConv2DDataFormat(l),g=i.backend_util.computeConv2DInfo(e,n.shape,o,m,p,s,!1,f),{batchSize:h,filterHeight:b,filterWidth:y,inChannels:k,inHeight:I,inWidth:M,outChannels:D,outHeight:F,outWidth:E,strideHeight:O,strideWidth:B}=g,K=b-1-g.padInfo.top,X=y-1-g.padInfo.left,U=g.dataFormat==="channelsLast",q=i.util.computeStrides(g.inShape),Z=i.util.computeStrides(r.shape),[ie,le,Q]=i.util.computeStrides(n.shape),j=q[0],ge=U?q[1]:q[2],$=U?q[2]:1,ce=U?1:q[1],me=Z[0],se=U?Z[1]:Z[2],ee=U?Z[2]:1,Te=U?1:Z[1],Fe=a.makeOutput(g.inShape,"float32"),Oe=a.dataIdMap.get(Fe.dataId).id,Je=a.dataIdMap.get(r.dataId).id,Qe=a.dataIdMap.get(n.dataId).id;return qr(Je,Qe,h,b,y,I,M,k,F,E,D,O,B,K,X,ie,le,Q,j,ge,$,ce,me,se,ee,Te,Oe),Fe}var Js={kernelName:i.Conv2DBackpropInput,backendName:"wasm",setupFunc:Ks,kernelFunc:Xs},Kr;function Qs(t){Kr=t.wasm.cwrap(i.Conv3D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Ys(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,filter:n}=a,{strides:o,pad:p,dilations:l}=d;if(r.dtype!=="float32")throw new Error(`Tensor x must have dtype float32, got ${r.dtype}`);if(n.dtype!=="float32")throw new Error(`Tensor filter must have dtype float32, got ${n.dtype}`);const s=i.backend_util.computeConv3DInfo(r.shape,n.shape,o,l,p),e=u.makeOutput(s.outShape,r.dtype);return Kr(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(e.dataId).id,s.batchSize,s.inDepth,s.inHeight,s.inWidth,s.inChannels,s.outDepth,s.outHeight,s.outWidth,s.outChannels,s.strideDepth,s.strideHeight,s.strideWidth,s.dilationDepth,s.dilationHeight,s.dilationWidth,s.filterDepth,s.filterHeight,s.filterWidth,s.padInfo.front,s.padInfo.top,s.padInfo.left),e}var Zs={kernelName:i.Conv3D,backendName:"wasm",setupFunc:Qs,kernelFunc:Ys},Xr;function js(t){Xr=t.wasm.cwrap(i.Conv3DBackpropFilterV2,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ed(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,dy:n}=a,{strides:o,pad:p,filterShape:l}=d;if(r.dtype!=="float32")throw new Error(`Tensor dy must have dtype float32, got ${r.dtype}`);if(n.dtype!=="float32")throw new Error(`Tensor filter must have dtype float32, got ${n.dtype}`);const s=i.backend_util.computeConv3DInfo(r.shape,l,o,1,p),e=u.makeOutput(s.filterShape,n.dtype);return Xr(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(e.dataId).id,s.batchSize,s.inDepth,s.inHeight,s.inWidth,s.inChannels,s.outDepth,s.outHeight,s.outWidth,s.outChannels,s.strideDepth,s.strideHeight,s.strideWidth,s.dilationDepth,s.dilationHeight,s.dilationWidth,s.filterDepth,s.filterHeight,s.filterWidth,s.padInfo.front,s.padInfo.top,s.padInfo.left),e}var nd={kernelName:i.Conv3DBackpropFilterV2,backendName:"wasm",setupFunc:js,kernelFunc:ed},Jr;function td(t){Jr=t.wasm.cwrap(i.Conv3DBackpropInputV2,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ad(t){const{inputs:a,backend:u,attrs:d}=t,{dy:r,filter:n}=a,{pad:o,strides:p,inputShape:l}=d;if(r.dtype!=="float32")throw new Error(`Tensor dy must have dtype float32, got ${r.dtype}`);if(n.dtype!=="float32")throw new Error(`Tensor filter must have dtype float32, got ${n.dtype}`);const s=i.backend_util.computeConv3DInfo(l,n.shape,p,1,o),e=u.makeOutput(s.inShape,r.dtype);return Jr(u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(e.dataId).id,s.batchSize,s.inDepth,s.inHeight,s.inWidth,s.inChannels,s.outDepth,s.outHeight,s.outWidth,s.outChannels,s.strideDepth,s.strideHeight,s.strideWidth,s.dilationDepth,s.dilationHeight,s.dilationWidth,s.filterDepth,s.filterHeight,s.filterWidth,s.padInfo.front,s.padInfo.top,s.padInfo.left),e}var rd={kernelName:i.Conv3DBackpropInputV2,backendName:"wasm",setupFunc:td,kernelFunc:ad},ud=W(i.Cos),id=W(i.Cosh),Un;(function(t){t[t.bilinear=0]="bilinear",t[t.nearest=1]="nearest"})(Un||(Un={}));var Qr;function sd(t){Qr=t.wasm.cwrap(i.CropAndResize,null,["number","number","number","number","array","number","number","number","number","number"])}function dd(t){const{backend:a,inputs:u,attrs:d}=t,{method:r,extrapolationValue:n,cropSize:o}=d,{image:p,boxes:l,boxInd:s}=u,e=l.shape[0],[m,f]=o,g=[e,m,f,p.shape[3]];let h=a.dataIdMap.get(p.dataId),b;p.dtype!=="float32"&&(b=Se({backend:a,inputs:{x:p},attrs:{dtype:"float32"}}),h=a.dataIdMap.get(b.dataId));const y=h.id,k=a.dataIdMap.get(l.dataId).id,I=a.dataIdMap.get(s.dataId).id,M=a.makeOutput(g,"float32"),D=a.dataIdMap.get(M.dataId).id,F=new Uint8Array(new Int32Array(p.shape).buffer);return Qr(y,k,I,e,F,m,f,Un[r],n,D),b!=null&&a.disposeData(b.dataId),M}var od={kernelName:i.CropAndResize,backendName:"wasm",setupFunc:sd,kernelFunc:dd},Yr;function pd(t){Yr=t.wasm.cwrap(i.Cumprod,null,["number","number","number","number","number","number"])}function ld(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{axis:n,exclusive:o,reverse:p}=d,l=r.shape.length;i.util.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumprod does not support ${r.dtype} tensors in the WASM backend`);const s=i.backend_util.getAxesPermutation([n],l);let e=r;s!==null&&(e=Ie({inputs:{x:r},attrs:{perm:s},backend:u}));const m=i.backend_util.getInnerMostAxes(1,l)[0];i.backend_util.assertAxesAreInnerMostDims("cumprod",[m],l);const f=u.makeOutput(e.shape,e.dtype),g=e.shape[m],h=u.dataIdMap.get(e.dataId).id,b=u.dataIdMap.get(f.dataId).id;Yr(h,o?1:0,p?1:0,g,b,G[r.dtype]);let y=f;if(s!==null){const k=i.backend_util.getUndoAxesPermutation(s);y=Ie({inputs:{x:f},attrs:{perm:k},backend:u}),u.disposeData(e.dataId),u.disposeData(f.dataId)}return y}var cd={kernelName:i.Cumprod,backendName:"wasm",setupFunc:pd,kernelFunc:ld},Zr;function md(t){Zr=t.wasm.cwrap(i.Cumsum,null,["number","number","number","number","number","number"])}function hd(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{axis:n,exclusive:o,reverse:p}=d,l=r.shape.length;i.util.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumsum does not support ${r.dtype} tensors in the WASM backend`);const s=i.backend_util.getAxesPermutation([n],l);let e=r;s!==null&&(e=Ie({inputs:{x:r},attrs:{perm:s},backend:u}));const m=i.backend_util.getInnerMostAxes(1,l)[0];i.backend_util.assertAxesAreInnerMostDims("cumsum",[m],l);const f=u.makeOutput(e.shape,e.dtype),g=e.shape[m],h=u.dataIdMap.get(e.dataId).id,b=u.dataIdMap.get(f.dataId).id;Zr(h,o?1:0,p?1:0,g,b,G[r.dtype]);let y=f;if(s!==null){const k=i.backend_util.getUndoAxesPermutation(s);y=Ie({inputs:{x:f},attrs:{perm:k},backend:u}),u.disposeData(e.dataId),u.disposeData(f.dataId)}return y}var gd={kernelName:i.Cumsum,backendName:"wasm",setupFunc:md,kernelFunc:hd},jr;function fd(t){jr=t.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function bd(t){const{backend:a,inputs:u,attrs:d}=t,{x:r,weights:n}=u,{size:o,binaryOutput:p}=d,l=n.shape.reduce((f,g)=>f*g,1)!==0,s=r.shape.length===1?[o]:[r.shape[0],o],e=a.makeOutput(s,n.dtype);function m(f){return a.dataIdMap.get(f.dataId).id}return jr(m(r),new Uint8Array(new Int32Array(r.shape).buffer),r.shape.length,o,l,m(n),G[n.dtype],p,m(e)),e}var vd={kernelName:i.DenseBincount,backendName:"wasm",setupFunc:fd,kernelFunc:bd},eu;function yd(t){eu=t.wasm.cwrap(i.DepthToSpace,null,["number","number","number","array","number","array","array","number","number"])}function Id(t){const{backend:a,inputs:u,attrs:d}=t,{x:r}=u,{blockSize:n,dataFormat:o}=d,p=r.shape[0],l=o==="NHWC"?r.shape[1]:r.shape[2],s=o==="NHWC"?r.shape[2]:r.shape[3],e=o==="NHWC"?r.shape[3]:r.shape[1],m=l*n,f=s*n,g=e/(n*n),h=o==="NHWC"?[p,m,f,g]:[p,g,m,f],b=a.makeOutput(h,"float32"),y=a.dataIdMap.get(r.dataId).id,k=new Uint8Array(new Int32Array(i.util.computeStrides(r.shape)).buffer),I=new Uint8Array(new Int32Array(h).buffer),M=new Uint8Array(new Int32Array(i.util.computeStrides(h)).buffer),D=a.dataIdMap.get(b.dataId).id;return eu(y,n,o==="NHWC"?1:0,k,r.shape.length-1,I,M,h.length,D),b}var kd={kernelName:i.DepthToSpace,backendName:"wasm",setupFunc:yd,kernelFunc:Id},nu;function Sd(t){nu=t.wasm.cwrap(i.DepthwiseConv2dNative,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Md(t){const{inputs:a,attrs:u,backend:d}=t,{x:r,filter:n}=a,o=d.dataIdMap.get(r.dataId).id,p=d.dataIdMap.get(n.dataId).id,{strides:l,dilations:s,pad:e,dimRoundingMode:m}=u,f=s??[1,1],g=i.backend_util.computeConv2DInfo(r.shape,n.shape,l,f,e,m,!0),h=g.filterHeight,b=g.filterWidth,y=g.padInfo.top,k=g.padInfo.right,I=g.padInfo.bottom,M=g.padInfo.left,D=g.dilationHeight,F=g.dilationWidth,E=g.strideHeight,O=g.strideWidth,B=g.inChannels,K=g.outChannels,X=g.padInfo.type==="SAME"?1:0;if(g.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${g.dataFormat}'. Please use 'channelsLast'.`);const U=d.makeOutput(g.outShape,"float32"),q=d.dataIdMap.get(U.dataId).id;return nu(o,r.shape[0],r.shape[1],r.shape[2],p,h,b,y,k,I,M,X,D,F,E,O,B,K,q),U}var Ad={kernelName:i.DepthwiseConv2dNative,backendName:"wasm",setupFunc:Sd,kernelFunc:Md},tu;function xd(t){tu=t.wasm.cwrap("Diag",null,["number","number","number","number"])}function Dd(t){const{inputs:a,backend:u}=t,{x:d}=a,r=i.util.sizeFromShape(d.shape),n=u.makeOutput([...d.shape,...d.shape],d.dtype);return tu(u.dataIdMap.get(d.dataId).id,G[d.dtype],r,u.dataIdMap.get(n.dataId).id),n}var wd={kernelName:i.Diag,backendName:"wasm",setupFunc:xd,kernelFunc:Dd},au;function Fd(t){au=t.wasm.cwrap(i.Dilation2D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Nd(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,filter:n}=a,{strides:o,pad:p,dilations:l}=d;if(r.dtype!==n.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${r.dtype} and ${n.dtype}`);const s=i.backend_util.computeDilation2DInfo(r.shape,n.shape,o,p,"NHWC",l),e=u.makeOutput(s.outShape,r.dtype);return au(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(e.dataId).id,G[r.dtype],s.batchSize,s.inChannels,s.inHeight,s.inWidth,s.outHeight,s.outWidth,s.strideHeight,s.strideWidth,s.dilationHeight,s.dilationWidth,s.filterHeight,s.filterWidth,s.padInfo.top,s.padInfo.left),e}var Cd={kernelName:i.Dilation2D,backendName:"wasm",setupFunc:Fd,kernelFunc:Nd},ru;function Rd(t){ru=t.wasm.cwrap(i.Dilation2DBackpropFilter,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function _d(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,filter:n,dy:o}=a,{strides:p,pad:l,dilations:s}=d;if(r.dtype!==n.dtype||r.dtype!==o.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${n.dtype}, and ${o.dtype}`);const e=i.backend_util.computeDilation2DInfo(r.shape,n.shape,p,l,"NHWC",s),m=u.makeOutput(n.shape,n.dtype);return ru(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(o.dataId).id,u.dataIdMap.get(m.dataId).id,G[r.dtype],e.batchSize,e.inChannels,e.inHeight,e.inWidth,e.outHeight,e.outWidth,e.strideHeight,e.strideWidth,e.dilationHeight,e.dilationWidth,e.filterHeight,e.filterWidth,e.padInfo.top,e.padInfo.left),m}var Pd={kernelName:i.Dilation2DBackpropFilter,backendName:"wasm",setupFunc:Rd,kernelFunc:_d},uu;function Ed(t){uu=t.wasm.cwrap(i.Dilation2DBackpropInput,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Bd(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,filter:n,dy:o}=a,{strides:p,pad:l,dilations:s}=d;if(r.dtype!==n.dtype||r.dtype!==o.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${r.dtype}, ${n.dtype}, and ${o.dtype}`);const e=i.backend_util.computeDilation2DInfo(r.shape,n.shape,p,l,"NHWC",s),m=u.makeOutput(r.shape,r.dtype);return uu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(o.dataId).id,u.dataIdMap.get(m.dataId).id,G[r.dtype],e.batchSize,e.inChannels,e.inHeight,e.inWidth,e.outHeight,e.outWidth,e.strideHeight,e.strideWidth,e.dilationHeight,e.dilationWidth,e.filterHeight,e.filterWidth,e.padInfo.top,e.padInfo.left),m}var Td={kernelName:i.Dilation2DBackpropInput,backendName:"wasm",setupFunc:Ed,kernelFunc:Bd},Od=W(i.Elu),iu;function Wd(t){iu=t.wasm.cwrap(i.EluGrad,null,["number","number","number"])}function zd(t){const{inputs:a,backend:u}=t,{dy:d,y:r}=a,n=u.makeOutput(r.shape,"float32"),o=p=>u.dataIdMap.get(p.dataId).id;return iu(o(r),o(d),o(n)),n}var Hd={kernelName:i.EluGrad,backendName:"wasm",setupFunc:Wd,kernelFunc:zd},Ld=!1,Gd=Y(i.Equal,Ld,"bool"),$d=W(i.Erf),Vd=W(i.Exp,"float32");function qn(t){const{inputs:a,attrs:u,backend:d}=t,{input:r}=a,{dim:n}=u,o=r.shape.length,p=r.shape.slice();let l=n;return n<0&&(i.util.assert(-(o+1)<=n,()=>`Axis must be in the interval [${-(o+1)}, ${o}]`),l=o+n+1),p.splice(l,0,1),ue({inputs:{x:r},backend:d,attrs:{shape:p}})}var Ud={kernelName:i.ExpandDims,backendName:"wasm",kernelFunc:qn},qd=W(i.Expm1,"float32");function su(t){const{attrs:{shape:a,value:u},backend:d}=t;let{attrs:{dtype:r}}=t;r=r||i.util.inferDtype(u);const n=d.makeOutput(a,r);return d.typedArrayFromHeap(n).fill(u),n}var Kd={kernelName:i.Fill,backendName:"wasm",kernelFunc:su},du;function Xd(t){du=t.wasm.cwrap(i.FlipLeftRight,null,["number","number","number","number","number","number"])}function Jd(t){const{inputs:a,backend:u}=t,{image:d}=a,r=u.makeOutput(d.shape,d.dtype),n=u.dataIdMap.get(d.dataId).id,o=u.dataIdMap.get(r.dataId).id,[p,l,s,e]=d.shape;return du(n,p,l,s,e,o),r}var Qd={kernelName:i.FlipLeftRight,backendName:"wasm",kernelFunc:Jd,setupFunc:Xd},Yd=W(i.Floor),Zd=!1,jd=Y(i.FloorDiv,Zd),ou;function eo(t){ou=t.wasm.cwrap(i.FusedBatchNorm,null,["number","number","number","number","number","number","number"])}function no(t){const{backend:a,inputs:u,attrs:d}=t,{varianceEpsilon:r}=d,{x:n,mean:o,variance:p,offset:l,scale:s}=u,e=a.dataIdMap.get(n.dataId).id,m=a.dataIdMap.get(o.dataId).id,f=a.dataIdMap.get(p.dataId).id,g=l!=null?a.dataIdMap.get(l.dataId).id:0,h=s!=null?a.dataIdMap.get(s.dataId).id:0,b=a.makeOutput(n.shape,n.dtype);if(i.util.sizeFromShape(n.shape)===0)return b;const y=a.dataIdMap.get(b.dataId).id;return ou(e,m,f,g,h,r,y),b}var to={kernelName:i.FusedBatchNorm,backendName:"wasm",setupFunc:eo,kernelFunc:no},pu;function ao(t){pu=t.wasm.cwrap(i.FusedConv2D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ro(t){const{inputs:a,attrs:u,backend:d}=t,{x:r,filter:n,bias:o,preluActivationWeights:p}=a,{strides:l,pad:s,dilations:e,dataFormat:m,dimRoundingMode:f,activation:g,leakyreluAlpha:h}=u,b=i.backend_util.computeConv2DInfo(r.shape,n.shape,l,e,s,f),y=qe[g];if(y==null)throw new Error(`${g} activation not yet supported for FusedConv2D in the wasm backend.`);const k=d.dataIdMap.get(r.dataId).id,I=d.dataIdMap.get(n.dataId).id,M=b.outChannels;let D=0;if(o!=null){const ee=d.dataIdMap.get(o.dataId);if(ee.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==M)throw new Error(`FusedConv2D bias shape (${ee.shape}) does not match the number of output channels (${M})`);D=ee.id}const F=b.filterHeight,E=b.filterWidth,O=b.padInfo.top,B=b.padInfo.right,K=b.padInfo.bottom,X=b.padInfo.left,U=b.dilationHeight,q=b.dilationWidth,Z=b.strideHeight,ie=b.strideWidth,le=b.inChannels,Q=b.padInfo.type==="SAME"?1:0,j=b.batchSize,ge=b.inHeight,$=b.inWidth;if(m!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${m}'. Please use 'NHWC'.`);const ce=d.makeOutput(b.outShape,"float32"),me=d.dataIdMap.get(ce.dataId).id,se=p==null?0:d.dataIdMap.get(p.dataId).id;return pu(k,j,ge,$,I,F,E,D,O,B,K,X,Q,U,q,Z,ie,le,M,y,se,h||0,me),ce}var uo={kernelName:i.FusedConv2D,backendName:"wasm",setupFunc:ao,kernelFunc:ro},lu;function io(t){lu=t.wasm.cwrap(i.FusedDepthwiseConv2D,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function so(t){const{inputs:a,attrs:u,backend:d}=t,{x:r,filter:n,bias:o,preluActivationWeights:p}=a,{strides:l,pad:s,dilations:e,dataFormat:m,dimRoundingMode:f,activation:g,leakyreluAlpha:h}=u,b=i.backend_util.computeConv2DInfo(r.shape,n.shape,l,e,s,f,!0),y=qe[g];if(y==null)throw new Error(`${g} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);const k=d.dataIdMap.get(r.dataId).id,I=d.dataIdMap.get(n.dataId).id,M=b.outChannels;let D=0;if(o!=null){const ee=d.dataIdMap.get(o.dataId);if(ee.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ee.shape.length}.`);if(ee.shape[0]!==M)throw new Error(`FusedDepthwiseConv2D bias shape (${ee.shape}) does not match the number of output channels (${M})`);D=ee.id}const F=b.filterHeight,E=b.filterWidth,O=b.padInfo.top,B=b.padInfo.right,K=b.padInfo.bottom,X=b.padInfo.left,U=b.dilationHeight,q=b.dilationWidth,Z=b.strideHeight,ie=b.strideWidth,le=b.inChannels,Q=b.padInfo.type==="SAME"?1:0,j=b.batchSize,ge=b.inHeight,$=b.inWidth;if(m!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${m}'. Please use 'NHWC'.`);const ce=d.makeOutput(b.outShape,"float32"),me=d.dataIdMap.get(ce.dataId).id,se=p==null?0:d.dataIdMap.get(p.dataId).id;return lu(k,j,ge,$,I,F,E,D,O,B,K,X,Q,U,q,Z,ie,le,M,y,se,h||0,me),ce}var oo={kernelName:i.FusedDepthwiseConv2D,backendName:"wasm",setupFunc:io,kernelFunc:so},cu;function po(t){cu=t.wasm.cwrap(i.GatherNd,null,["number","number","number","number","number","number","array","number"])}function lo(t){const{backend:a,inputs:u}=t,{params:d,indices:r}=u,[n,o,p,l]=i.gather_util.prepareAndValidate(d,r),s=a.makeOutput(n,d.dtype);if(o===0)return s;const e=r.shape,m=e[e.length-1],f=a.dataIdMap.get(d.dataId).id,g=a.dataIdMap.get(r.dataId).id,h=new Uint8Array(new Int32Array(l).buffer),b=a.dataIdMap.get(s.dataId).id;return cu(f,G[d.dtype],g,o,m,p,h,b),s}var co={kernelName:i.GatherNd,backendName:"wasm",setupFunc:po,kernelFunc:lo},mu;function mo(t){mu=t.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function ho(t){const{backend:a,inputs:u,attrs:d}=t,{x:r,indices:n}=u,{axis:o,batchDims:p}=d,l=i.util.parseAxisParam(o,r.shape)[0],s=a.readSync(n.dataId),e=r.shape[l];for(let O=0;O<s.length;++O){const B=s[O];i.util.assert(B<=e-1&&B>=0,()=>`GatherV2: the index value ${B} is not in [0, ${e-1}]`)}const m=i.backend_util.segment_util.collectGatherOpShapeInfo(r,n,l,p),f=ue({inputs:{x:r},attrs:{shape:[m.batchSize,m.outerSize,m.dimSize,m.sliceSize]},backend:a}),g=i.util.sizeFromShape(n.shape),h=ue({inputs:{x:n},attrs:{shape:[m.batchSize,g/m.batchSize]},backend:a}),b=[m.batchSize,m.outerSize,g/m.batchSize,m.sliceSize],y=a.makeOutput(b,r.dtype);if(i.util.sizeFromShape(r.shape)===0)return y;const k=f.shape.length-1,I=a.dataIdMap.get(f.dataId).id,M=a.dataIdMap.get(h.dataId).id,D=a.dataIdMap.get(y.dataId).id,F=new Uint8Array(new Int32Array(i.util.computeStrides(f.shape)).buffer),E=new Uint8Array(new Int32Array(i.util.computeStrides(b)).buffer);return mu(I,G[r.dtype],F,k,M,m.batchSize,E,D),a.disposeData(f.dataId),a.disposeData(h.dataId),y.shape=m.outputShape,y}var go={kernelName:i.GatherV2,backendName:"wasm",setupFunc:mo,kernelFunc:ho},fo=!1,bo=Y(i.Greater,fo,"bool"),vo=!1,yo=Y(i.GreaterEqual,vo,"bool"),Io=W(i.IsFinite,"bool"),ko=W(i.IsInf,"bool"),So=W(i.IsNan,"bool"),hu;function Mo(t){hu=t.wasm.cwrap(i.LeakyRelu,null,["number","number","number","number"])}function Ao(t){const{inputs:{x:a},attrs:{alpha:u},backend:d}=t,r=d.dataIdMap.get(a.dataId).id,n=d.makeOutput(a.shape,"float32");if(i.util.sizeFromShape(a.shape)!==0){const o=d.dataIdMap.get(n.dataId).id;hu(r,G[a.dtype],u,o)}return n}var xo={kernelName:i.LeakyRelu,backendName:"wasm",setupFunc:Mo,kernelFunc:Ao},Do=!1,wo=Y(i.Less,Do,"bool"),Fo=!1,No=Y(i.LessEqual,Fo,"bool"),gu;function Co(t){gu=t.wasm.cwrap(i.LinSpace,null,["number","number","number","number"])}function Ro(t){const{attrs:a,backend:u}=t,{start:d,stop:r,num:n}=a,o=Math.floor(n),p=u.makeOutput([o],"float32");return gu(u.dataIdMap.get(p.dataId).id,d,r,o),p}var _o={kernelName:i.LinSpace,backendName:"wasm",setupFunc:Co,kernelFunc:Ro},Po=W(i.Log),Eo=W(i.Log1p),Bo=!1,To=Y(i.LogicalAnd,Bo,"bool"),Oo=W(i.LogicalNot),Wo=!1,zo=Y(i.LogicalOr,Wo,"bool"),Ho=!1,Lo=Y(i.LogicalXor,Ho,"bool"),fu;function Go(t){fu=t.wasm.cwrap(i.LRN,null,["number","number","number","number","number","number","number"])}function $o(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{depthRadius:n,bias:o,alpha:p,beta:l}=d;if(r.dtype!=="float32")throw new Error("LRN error: x must have dtype float32");const s=u.makeOutput(r.shape,r.dtype);return fu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(s.dataId).id,r.shape[3],n,o,p,l),s}var Vo={kernelName:i.LRN,backendName:"wasm",setupFunc:Go,kernelFunc:$o},bu;function Uo(t){bu=t.wasm.cwrap(i.LRNGrad,null,["number","number","number","number","number","number","number","number","number"])}function qo(t){const{inputs:a,backend:u,attrs:d}=t,{x:r,y:n,dy:o}=a,{depthRadius:p,bias:l,alpha:s,beta:e}=d;if(r.dtype!=="float32"||n.dtype!=="float32"||o.dtype!=="float32")throw new Error("LRNGrad error: x, y, and dy must have dtype float32");const m=u.makeOutput(r.shape,r.dtype);return bu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(o.dataId).id,u.dataIdMap.get(m.dataId).id,o.shape[3],p,l,s,e),m}var Ko={kernelName:i.LRNGrad,backendName:"wasm",setupFunc:Uo,kernelFunc:qo},vu;function Xo(t){vu=t.wasm.cwrap(i.Max,null,["number","number","number","number"])}function Jo(t){const{backend:a,inputs:u,attrs:d}=t,{reductionIndices:r,keepDims:n}=d,{x:o}=u;let p=a.dataIdMap.get(o.dataId).id,l=o;const{transposed:s,axes:e,originalAxes:m,inputWasTransposed:f}=ke(o,r,a);if(f){const I=a.dataIdMap.get(s.dataId).id;l=s,p=I}const g=l.shape.length;i.backend_util.assertAxesAreInnerMostDims("max",e,g);const[h,b]=i.backend_util.computeOutAndReduceShapes(l.shape,e),y=i.util.sizeFromShape(b),k=a.makeOutput(h,o.dtype);if(i.util.sizeFromShape(l.shape)!==0){const I=a.dataIdMap.get(k.dataId).id;vu(p,G[o.dtype],y,I)}return f&&a.disposeData(s.dataId),n&&(k.shape=i.backend_util.expandShapeToKeepDim(k.shape,m)),k}var Qo={kernelName:i.Max,backendName:"wasm",setupFunc:Xo,kernelFunc:Jo},Yo=!1,Zo=Y(i.Maximum,Yo),yu;function jo(t){yu=t.wasm.cwrap(i.MaxPool,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ep(t){const{inputs:a,attrs:u,backend:d}=t,r=a.x,n=d.dataIdMap.get(r.dataId).id;i.util.assert(r.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${r.dtype}.`);const{filterSize:o,strides:p,pad:l,dimRoundingMode:s}=u,e=i.backend_util.computePool2DInfo(r.shape,o,p,1,l,s),m=e.filterHeight,f=e.filterWidth,g=e.padInfo.top,h=e.padInfo.right,b=e.padInfo.bottom,y=e.padInfo.left,k=e.dilationHeight,I=e.dilationWidth,M=e.strideHeight,D=e.strideWidth,F=e.inChannels,E=e.outChannels;if(e.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${e.dataFormat}'. Please use 'channelsLast'.`);const O=d.makeOutput(e.outShape,"float32"),B=d.dataIdMap.get(O.dataId).id;return yu(n,r.shape[0],r.shape[1],r.shape[2],m,f,g,h,b,y,k,I,M,D,F,E,B),O}var np={kernelName:i.MaxPool,backendName:"wasm",setupFunc:jo,kernelFunc:ep},Iu;function tp(t){Iu=t.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ap(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{filterSize:n,strides:o,pad:p,dimRoundingMode:l,dataFormat:s}=d,e=i.backend_util.computePool3DInfo(r.shape,n,o,1,p,l,s),m=u.makeOutput(e.outShape,r.dtype);return Iu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,e.batchSize,e.inChannels,e.inDepth,e.inHeight,e.inWidth,e.outDepth,e.outHeight,e.outWidth,e.strideDepth,e.strideHeight,e.strideWidth,e.dilationDepth,e.dilationHeight,e.dilationWidth,e.effectiveFilterDepth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.front,e.padInfo.top,e.padInfo.left),m}var rp={kernelName:i.MaxPool3D,backendName:"wasm",setupFunc:tp,kernelFunc:ap},ku;function up(t){ku=t.wasm.cwrap("MaxPool3DGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ip(t){const{inputs:a,backend:u,attrs:d}=t,{dy:r,input:n}=a,{filterSize:o,strides:p,pad:l,dimRoundingMode:s}=d,e=i.backend_util.computePool3DInfo(n.shape,o,p,1,l,s),m=u.makeOutput(n.shape,n.dtype);return ku(u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,e.batchSize,e.inChannels,e.inDepth,e.inHeight,e.inWidth,e.outDepth,e.outHeight,e.outWidth,e.strideDepth,e.strideHeight,e.strideWidth,e.dilationDepth,e.dilationHeight,e.dilationWidth,e.effectiveFilterDepth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.front,e.padInfo.top,e.padInfo.left),m}var sp={kernelName:i.MaxPool3DGrad,backendName:"wasm",setupFunc:up,kernelFunc:ip},Su;function dp(t){Su=t.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function op(t){const{inputs:a,backend:u,attrs:d}=t,{dy:r,input:n}=a,{filterSize:o,strides:p,pad:l,dimRoundingMode:s}=d,e=i.backend_util.computePool2DInfo(n.shape,o,p,1,l,s),m=u.makeOutput(n.shape,n.dtype);return Su(u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,e.batchSize,e.inChannels,e.inHeight,e.inWidth,e.outHeight,e.outWidth,e.strideHeight,e.strideWidth,e.dilationHeight,e.dilationWidth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.top,e.padInfo.left),m}var pp={kernelName:i.MaxPoolGrad,backendName:"wasm",setupFunc:dp,kernelFunc:op},Mu;function lp(t){Mu=t.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function cp(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{filterSize:n,strides:o,pad:p,includeBatchInIndex:l}=d;i.util.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);const s=[1,1];i.util.assert(i.backend_util.eitherStridesOrDilationsAreOne(o,s),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${s}'`);const e=i.backend_util.computePool2DInfo(r.shape,n,o,[1,1],p),m=u.makeOutput(e.outShape,r.dtype),f=u.makeOutput(e.outShape,"int32");return Mu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(m.dataId).id,u.dataIdMap.get(f.dataId).id,G[r.dtype],l,e.batchSize,e.inChannels,e.inHeight,e.inWidth,e.outHeight,e.outWidth,e.strideHeight,e.strideWidth,e.dilationHeight,e.dilationWidth,e.effectiveFilterHeight,e.effectiveFilterWidth,e.padInfo.top,e.padInfo.left),[m,f]}var mp={kernelName:i.MaxPoolWithArgmax,backendName:"wasm",setupFunc:lp,kernelFunc:cp},Au;function hp(t){Au=t.wasm.cwrap(i.Mean,null,["number, number, number"])}function gp(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u,p=a.dataIdMap.get(o.dataId).id;let l=p,s=o;const{transposed:e,axes:m,originalAxes:f,inputWasTransposed:g}=ke(o,r,a);let h=m;if(g){const D=a.dataIdMap.get(e.dataId).id;D!==p&&(s=e,l=D,h=i.backend_util.getInnerMostAxes(h.length,s.shape.length))}i.backend_util.assertAxesAreInnerMostDims("mean",h,s.shape.length);const[b,y]=i.backend_util.computeOutAndReduceShapes(s.shape,h),k=i.util.sizeFromShape(y);let I=s;s.dtype!=="float32"&&(I=Se({backend:a,inputs:{x:s},attrs:{dtype:"float32"}}),l=a.dataIdMap.get(I.dataId).id);const M=a.makeOutput(b,"float32");if(i.util.sizeFromShape(s.shape)!==0){const D=a.dataIdMap.get(M.dataId).id;Au(l,k,D)}return g&&a.disposeData(e.dataId),n&&(M.shape=i.backend_util.expandShapeToKeepDim(M.shape,f)),s.dtype!=="float32"&&a.disposeData(I.dataId),M}var fp={kernelName:i.Mean,backendName:"wasm",setupFunc:hp,kernelFunc:gp},xu;function bp(t){xu=t.wasm.cwrap(i.Min,null,["number","number","number","number"])}function vp(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u,p=a.dataIdMap.get(o.dataId).id;let l=p,s=o;const{transposed:e,axes:m,originalAxes:f,inputWasTransposed:g}=ke(o,r,a);if(g){const M=a.dataIdMap.get(e.dataId).id;M!==p&&(s=e,l=M)}const h=s.shape.length;i.backend_util.assertAxesAreInnerMostDims("min",m,h);const[b,y]=i.backend_util.computeOutAndReduceShapes(s.shape,m),k=i.util.sizeFromShape(y),I=a.makeOutput(b,s.dtype);if(i.util.sizeFromShape(s.shape)!==0){const M=a.dataIdMap.get(I.dataId).id;xu(l,G[o.dtype],k,M)}return g&&a.disposeData(e.dataId),n&&(I.shape=i.backend_util.expandShapeToKeepDim(I.shape,f)),I}var yp={kernelName:i.Min,backendName:"wasm",setupFunc:bp,kernelFunc:vp},Ip=!1,kp=Y(i.Minimum,Ip),Kn;(function(t){t[t.reflect=0]="reflect",t[t.symmetric=1]="symmetric"})(Kn||(Kn={}));var Du;function Sp(t){Du=t.wasm.cwrap(i.MirrorPad,null,["number","array","number","number","array","array","number","number"])}function Mp(t){const{inputs:{x:a},backend:u,attrs:{paddings:d,mode:r}}=t,n=d.map((h,b)=>h[0]+a.shape[b]+h[1]),o=u.dataIdMap.get(a.dataId).id,p=u.makeOutput(n,a.dtype),l=u.dataIdMap.get(p.dataId).id,s=new Uint8Array(new Int32Array(a.shape).buffer),e=d.map(h=>h[0]),m=d.map(h=>h[1]),f=new Uint8Array(new Int32Array(e).buffer),g=new Uint8Array(new Int32Array(m).buffer);return Du(o,s,a.shape.length,G[a.dtype],f,g,Kn[r],l),p}var Ap={kernelName:i.MirrorPad,backendName:"wasm",kernelFunc:Mp,setupFunc:Sp},wu;function xp(t){wu=t.wasm.cwrap(i.Softmax,null,["number","number","number","number"])}function Fu(t){const{backend:a,inputs:{logits:u},attrs:{dim:d}}=t,r=a.dataIdMap.get(u.dataId).id,n=a.makeOutput(u.shape,u.dtype),o=a.dataIdMap.get(n.dataId).id,p=u.shape[d],l=i.util.sizeFromShape(u.shape)/p;return i.util.sizeFromShape(n.shape)===0||wu(r,o,p,l),n}var Dp={kernelName:i.Softmax,backendName:"wasm",setupFunc:xp,kernelFunc:Fu},Nu;function wp(t){Nu=t.wasm.cwrap(i.Multinomial,null,["number","number","number","number","number","number"])}function Fp(t){const{inputs:a,backend:u,attrs:d}=t,{logits:r}=a,{numSamples:n,seed:o,normalized:p}=d;if(r.dtype!=="float32")throw new Error(`Tensor logits must have dtype float32, got ${r.dtype}`);const l=p?r:Fu({inputs:{logits:r},backend:u,attrs:{dim:r.shape.length-1}}),[s,e]=l.shape,m=u.makeOutput([s,n],"int32");return Nu(u.dataIdMap.get(l.dataId).id,s,e,n,o,u.dataIdMap.get(m.dataId).id),p||u.disposeData(l.dataId),m}var Np={kernelName:i.Multinomial,backendName:"wasm",setupFunc:wp,kernelFunc:Fp},Cp=Y(i.Mod,!0),Rp=!0,_p=Y(i.Multiply,Rp),Pp=W(i.Neg);function Xn(t,a){const u=new Int32Array(t.wasm.HEAPU8.buffer,a,4),d=u[0],r=u[1],n=u[2],o=u[3];return t.wasm._free(a),{pSelectedIndices:d,selectedSize:r,pSelectedScores:n,pValidOutputs:o}}var Cu;function Ep(t){Cu=t.wasm.cwrap(i.NonMaxSuppressionV3,"number",["number","number","number","number","number"])}function Bp(t){const{backend:a,inputs:u,attrs:d}=t,{iouThreshold:r,maxOutputSize:n,scoreThreshold:o}=d,{boxes:p,scores:l}=u,s=a.dataIdMap.get(p.dataId).id,e=a.dataIdMap.get(l.dataId).id,m=Cu(s,e,n,r,o),{pSelectedIndices:f,selectedSize:g,pSelectedScores:h,pValidOutputs:b}=Xn(a,m);return a.wasm._free(h),a.wasm._free(b),a.makeOutput([g],"int32",f)}var Tp={kernelName:i.NonMaxSuppressionV3,backendName:"wasm",setupFunc:Ep,kernelFunc:Bp},Ru;function Op(t){Ru=t.wasm.cwrap(i.NonMaxSuppressionV4,"number",["number","number","number","number","number","bool"])}function Wp(t){const{backend:a,inputs:u,attrs:d}=t,{iouThreshold:r,maxOutputSize:n,scoreThreshold:o,padToMaxOutputSize:p}=d,{boxes:l,scores:s}=u,e=a.dataIdMap.get(l.dataId).id,m=a.dataIdMap.get(s.dataId).id,f=Ru(e,m,n,r,o,p),{pSelectedIndices:g,selectedSize:h,pSelectedScores:b,pValidOutputs:y}=Xn(a,f);return a.wasm._free(b),[a.makeOutput([h],"int32",g),a.makeOutput([],"int32",y)]}var zp={kernelName:i.NonMaxSuppressionV4,backendName:"wasm",setupFunc:Op,kernelFunc:Wp},_u;function Hp(t){_u=t.wasm.cwrap(i.NonMaxSuppressionV5,"number",["number","number","number","number","number","number"])}function Lp(t){const{backend:a,inputs:u,attrs:d}=t,{iouThreshold:r,maxOutputSize:n,scoreThreshold:o,softNmsSigma:p}=d,{boxes:l,scores:s}=u,e=a.dataIdMap.get(l.dataId).id,m=a.dataIdMap.get(s.dataId).id,f=_u(e,m,n,r,o,p),{pSelectedIndices:g,selectedSize:h,pSelectedScores:b,pValidOutputs:y}=Xn(a,f);return a.wasm._free(y),[a.makeOutput([h],"int32",g),a.makeOutput([h],"float32",b)]}var Gp={kernelName:i.NonMaxSuppressionV5,backendName:"wasm",setupFunc:Hp,kernelFunc:Lp},$p=!1,Vp=Y(i.NotEqual,$p,"bool"),Pu;function Up(t){Pu=t.wasm.cwrap(i.OneHot,null,["number","number","number","number","number"])}function qp(t){const{inputs:a,backend:u,attrs:d}=t,{indices:r}=a,{dtype:n,depth:o,onValue:p,offValue:l}=d,s=u.makeOutput([...r.shape,o],n),e=u.dataIdMap.get(s.dataId).id,m=u.dataIdMap.get(r.dataId).id;return Pu(m,o,p,l,e),s}var Kp={kernelName:i.OneHot,backendName:"wasm",setupFunc:Up,kernelFunc:qp};function Xp(t){const{inputs:{x:a},backend:u}=t,d=u.makeOutput(a.shape,a.dtype);return u.typedArrayFromHeap(d).fill(1),d}var Jp={kernelName:i.OnesLike,backendName:"wasm",kernelFunc:Xp};function Qp(t){const{inputs:a,backend:u,attrs:d}=t,{axis:r}=d;if(a.length===1)return qn({inputs:{input:a[0]},backend:u,attrs:{dim:r}});const n=a[0].shape,o=a[0].dtype;a.forEach(e=>{i.util.assertShapesMatch(n,e.shape,"All tensors passed to stack must have matching shapes"),i.util.assert(o===e.dtype,()=>"All tensors passed to stack must have matching dtypes")});const p=[],l=a.map(e=>{const m=qn({inputs:{input:e},backend:u,attrs:{dim:r}});return p.push(m),m}),s=Vr({inputs:l,backend:u,attrs:{axis:r}});return p.forEach(e=>u.disposeData(e.dataId)),s}var Yp={kernelName:i.Pack,backendName:"wasm",kernelFunc:Qp},Eu;function Zp(t){Eu=t.wasm.cwrap(i.PadV2,null,["number","array","number","number","array","array","number","number"])}function jp(t){const{inputs:{x:a},backend:u,attrs:{paddings:d,constantValue:r}}=t,n=d.map((h,b)=>h[0]+a.shape[b]+h[1]);if(i.util.sizeFromShape(a.shape)===0)return su({backend:u,attrs:{shape:n,value:r,dtype:a.dtype}});const o=u.dataIdMap.get(a.dataId).id,p=u.makeOutput(n,a.dtype),l=u.dataIdMap.get(p.dataId).id,s=new Uint8Array(new Int32Array(a.shape).buffer),e=d.map(h=>h[0]),m=d.map(h=>h[1]),f=new Uint8Array(new Int32Array(e).buffer),g=new Uint8Array(new Int32Array(m).buffer);return Eu(o,s,a.shape.length,G[a.dtype],f,g,r,l),p}var Bu={kernelName:i.PadV2,backendName:"wasm",kernelFunc:jp,setupFunc:Zp},el=!1,nl=Y(i.Pow,el),Tu;function tl(t){Tu=t.wasm.cwrap(i.Prelu,null,["number","number","number"])}function al(t){const{inputs:a,backend:u}=t,{x:d,alpha:r}=a,n=u.dataIdMap.get(d.dataId).id,o=u.dataIdMap.get(r.dataId).id;let p=n;const l=d;let s=l;l.dtype!=="float32"&&(s=Se({backend:u,inputs:{x:d},attrs:{dtype:"float32"}}),p=u.dataIdMap.get(s.dataId).id);const e=u.makeOutput(d.shape,"float32"),m=u.dataIdMap.get(e.dataId).id;return Tu(p,o,m),l.dtype!=="float32"&&u.disposeData(s.dataId),e}var rl={kernelName:i.Prelu,backendName:"wasm",setupFunc:tl,kernelFunc:al},Ou;function ul(t){Ou=t.wasm.cwrap(i.Prod,null,["number","number","number","number"])}function il(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u,p=a.dataIdMap.get(o.dataId).id;let l=p,s=o;const{transposed:e,axes:m,originalAxes:f,inputWasTransposed:g}=ke(o,r,a);let h=m;if(g){const M=a.dataIdMap.get(e.dataId).id;M!==p&&(s=e,l=M,h=i.backend_util.getInnerMostAxes(h.length,s.shape.length))}i.backend_util.assertAxesAreInnerMostDims("prod",h,s.shape.length);const[b,y]=i.backend_util.computeOutAndReduceShapes(s.shape,h),k=i.util.sizeFromShape(y),I=a.makeOutput(b,s.dtype);if(i.util.sizeFromShape(s.shape)!==0){const M=a.dataIdMap.get(I.dataId).id;Ou(l,k,G[I.dtype],M)}return g&&a.disposeData(e.dataId),n&&(I.shape=i.backend_util.expandShapeToKeepDim(I.shape,f)),I}var sl={kernelName:i.Prod,backendName:"wasm",setupFunc:ul,kernelFunc:il},dl=t=>{const{backend:a,attrs:u}=t,{start:d,stop:r,step:n,dtype:o}=u,p=vs(d,r,n,o),l=a.makeOutput([p.length],o);return a.typedArrayFromHeap(l).set(p),l},ol={kernelName:i.Range,backendName:"wasm",kernelFunc:dl},pl=!0,ll=Y(i.RealDiv,pl),cl=W(i.Reciprocal),ml=W(i.Relu),hl=W(i.Relu6),Wu;function gl(t){Wu=t.wasm.cwrap(i.ResizeBilinear,null,["number","number","number","number","number","number","number","number","number","number"])}function fl(t){const{backend:a,inputs:u,attrs:d}=t,{images:r}=u,{alignCorners:n,halfPixelCenters:o,size:p}=d,[l,s]=p,[e,m,f,g]=r.shape,h=[e,l,s,g];let b=a.dataIdMap.get(r.dataId),y;b.dtype!=="float32"&&(y=Se({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),b=a.dataIdMap.get(y.dataId));const k=b.id,I=a.makeOutput(h,"float32");if(i.util.sizeFromShape(r.shape)===0)return I;const M=a.dataIdMap.get(I.dataId).id;return Wu(k,e,m,f,g,l,s,n?1:0,o?1:0,M),y!=null&&a.disposeData(y.dataId),I}var bl={kernelName:i.ResizeBilinear,backendName:"wasm",setupFunc:gl,kernelFunc:fl},zu;function vl(t){zu=t.wasm.cwrap(i.ResizeBilinearGrad,null,["number","number","number","array","array","boolean"])}function yl(t){const{inputs:a,backend:u,attrs:d}=t,{images:r,dy:n}=a,{alignCorners:o}=d,p=u.makeOutput(r.shape,"float32");let l=u.dataIdMap.get(r.dataId),s;return l.dtype!=="float32"&&(s=Se({backend:u,inputs:{x:r},attrs:{dtype:"float32"}}),l=u.dataIdMap.get(s.dataId)),zu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(p.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(n.shape).buffer),o),s!=null&&u.disposeData(s.dataId),p}var Il={kernelName:i.ResizeBilinearGrad,backendName:"wasm",setupFunc:vl,kernelFunc:yl},Hu;function kl(t){Hu=t.wasm.cwrap(i.ResizeNearestNeighbor,null,["number","number","number","number","number","number","number","number","number","number"])}function Sl(t){const{backend:a,inputs:u,attrs:d}=t,{images:r}=u,{alignCorners:n,halfPixelCenters:o,size:p}=d,[l,s]=p,[e,m,f,g]=r.shape,h=[e,l,s,g],b=a.makeOutput(h,"float32");if(i.util.sizeFromShape(r.shape)===0)return b;let y=a.dataIdMap.get(r.dataId),k;y.dtype!=="float32"&&(k=Se({backend:a,inputs:{x:r},attrs:{dtype:"float32"}}),y=a.dataIdMap.get(k.dataId));const I=y.id,M=a.dataIdMap.get(b.dataId).id;return Hu(I,e,m,f,g,l,s,n?1:0,o?1:0,M),k!=null&&a.disposeData(k.dataId),b}var Ml={kernelName:i.ResizeNearestNeighbor,backendName:"wasm",setupFunc:kl,kernelFunc:Sl},Lu;function Al(t){Lu=t.wasm.cwrap(i.ResizeNearestNeighborGrad,null,["number","number","number","array","array","boolean"])}function xl(t){const{inputs:a,backend:u,attrs:d}=t,{images:r,dy:n}=a,{alignCorners:o}=d,p=u.makeOutput(r.shape,"float32");let l=u.dataIdMap.get(r.dataId),s;return l.dtype!=="float32"&&(s=Se({backend:u,inputs:{x:r},attrs:{dtype:"float32"}}),l=u.dataIdMap.get(s.dataId)),Lu(u.dataIdMap.get(r.dataId).id,u.dataIdMap.get(n.dataId).id,u.dataIdMap.get(p.dataId).id,new Uint8Array(new Int32Array(r.shape).buffer),new Uint8Array(new Int32Array(n.shape).buffer),o),s!=null&&u.disposeData(s.dataId),p}var Dl={kernelName:i.ResizeNearestNeighborGrad,backendName:"wasm",setupFunc:Al,kernelFunc:xl},Gu;function wl(t){Gu=t.wasm.cwrap(i.Reverse,null,["number","array","number","array","number","number"])}function Fl(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{dims:n}=d,o=i.util.parseAxisParam(n,r.shape);if(r.shape.length===0)return on({inputs:{x:r},backend:u});const p=u.makeOutput(r.shape,r.dtype),l=u.dataIdMap.get(r.dataId).id,s=u.dataIdMap.get(p.dataId).id,e=new Uint8Array(new Int32Array(o).buffer),m=new Uint8Array(new Int32Array(r.shape).buffer);Gu(l,e,o.length,m,r.shape.length,s);const f=ue({inputs:{x:p},attrs:{shape:r.shape},backend:u});return u.disposeData(p.dataId),f}var Nl={kernelName:i.Reverse,backendName:"wasm",kernelFunc:Fl,setupFunc:wl},$u;function Cl(t){$u=t.wasm.cwrap(i.RotateWithOffset,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Rl(t){const{inputs:a,backend:u,attrs:d}=t,{image:r}=a,{radians:n,fillValue:o,center:p}=d,l=u.makeOutput(r.shape,r.dtype),s=u.dataIdMap.get(r.dataId).id,e=u.dataIdMap.get(l.dataId).id,[m,f,g,h]=r.shape,[b,y]=i.backend_util.getImageCenter(p,f,g),k=o===0,I=255,M=typeof o=="number"?[o,o,o,k?0:I]:[...o,I],D=new Uint8Array(new Int32Array(M).buffer);return $u(s,m,f,g,h,n,b,y,D,M.length,e),l}var _l={kernelName:i.RotateWithOffset,backendName:"wasm",kernelFunc:Rl,setupFunc:Cl},Pl=W(i.Round),El=W(i.Rsqrt),Vu;function Bl(t){Vu=t.wasm.cwrap(i.ScatterNd,null,["number","number","number","number","number","number","array","number","number"])}function Tl(t){const{backend:a,inputs:u,attrs:d}=t,{indices:r,updates:n}=u,{shape:o}=d,p=a.makeOutput(o,n.dtype);if(i.util.sizeFromShape(o)===0)return p;const{sliceRank:l,numUpdates:s,sliceSize:e,strides:m,outputSize:f}=i.scatter_util.calculateShapes(n,r,o),g=a.dataIdMap.get(r.dataId).id,h=a.dataIdMap.get(n.dataId).id,b=new Uint8Array(new Int32Array(m).buffer),y=a.dataIdMap.get(p.dataId).id;return Vu(g,h,G[n.dtype],l,s,e,b,f,y),p}var Ol={kernelName:i.ScatterNd,backendName:"wasm",setupFunc:Bl,kernelFunc:Tl},Uu;function Wl(t){Uu=t.wasm.cwrap(i.SearchSorted,null,["number","number","number","number","number","number","bool","number"])}function zl(t){const{inputs:a,backend:u,attrs:d}=t,{sortedSequence:r,values:n}=a,{side:o}=d;if(r.dtype!==n.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${r.dtype} and ${n.dtype}`);const p=u.makeOutput(n.shape,"int32");function l(s){return u.dataIdMap.get(s.dataId).id}return Uu(l(r),l(n),r.shape[0],r.shape[1],n.shape[1],G[r.dtype],o==="left",l(p)),p}var Hl={kernelName:i.SearchSorted,backendName:"wasm",setupFunc:Wl,kernelFunc:zl},qu;function Ll(t){qu=t.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function Gl(t){const{inputs:a,backend:u}=t,{condition:d,t:r,e:n}=a,o=u.dataIdMap.get(d.dataId).id,p=u.dataIdMap.get(r.dataId).id,l=u.dataIdMap.get(n.dataId).id,s=u.makeOutput(r.shape,r.dtype),e=u.dataIdMap.get(s.dataId).id,m=d.shape.length,f=r.shape.length,g=m===0||m>1||f===1?1:i.util.sizeFromShape(r.shape.slice(1));return qu(o,p,l,g,e),s}var $l={kernelName:i.Select,backendName:"wasm",kernelFunc:Gl,setupFunc:Ll},Vl=W(i.Selu),Ku;function Ul(t){Ku=t.wasm.cwrap(i.Sigmoid,null,["number","number"])}function ql(t){const{backend:a,inputs:{x:u}}=t,d=a.dataIdMap.get(u.dataId).id,r=a.makeOutput(u.shape,u.dtype),n=a.dataIdMap.get(r.dataId).id;return i.util.sizeFromShape(r.shape)===0||Ku(d,n),r}var Kl={kernelName:"Sigmoid",backendName:"wasm",setupFunc:Ul,kernelFunc:ql},Xl=W(i.Sign),Jl=W(i.Sin),Ql=W(i.Sinh),Yl=W(i.Softplus);function Zl(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,{blockShape:n,paddings:o}=d,p=i.util.sizeFromShape(n),l=[[0,0]];l.push(...o);for(let y=1+n.length;y<r.shape.length;++y)l.push([0,0]);const s=Bu.kernelFunc({inputs:{x:r},backend:u,attrs:{paddings:l,constantValue:0}}),e=i.backend_util.getReshaped(s.shape,n,p,!1),m=i.backend_util.getPermuted(e.length,n.length,!1),f=i.backend_util.getReshapedPermuted(s.shape,n,p,!1),g=ue({inputs:{x:s},backend:u,attrs:{shape:e}}),h=Ie({inputs:{x:g},backend:u,attrs:{perm:m}}),b=ue({inputs:{x:h},backend:u,attrs:{shape:f}});return u.disposeData(s.dataId),u.disposeData(g.dataId),u.disposeData(h.dataId),b}var jl={kernelName:i.SpaceToBatchND,backendName:"wasm",kernelFunc:Zl},Xu;function ec(t){Xu=t.wasm.cwrap("SparseFillEmptyRows","number",["number","number","number","number","number","number","number","number","number","number","number","number"])}function nc(t){const{backend:a,inputs:u}=t,{indices:d,values:r,denseShape:n,defaultValue:o}=u,p=d.shape[0],l=d.shape[1],s=a.readSync(n.dataId)[0],e=[p+s,l],m=a.dataIdMap.get(d.dataId).id,f=a.dataIdMap.get(r.dataId).id,g=a.dataIdMap.get(o.dataId).id,h=a.makeOutput(e,d.dtype),b=a.dataIdMap.get(h.dataId).id,y=a.makeOutput(e.slice(0,1),r.dtype),k=a.dataIdMap.get(y.dataId).id,I=a.makeOutput([s],"bool"),M=a.dataIdMap.get(I.dataId).id,D=a.makeOutput([p],d.dtype),F=a.dataIdMap.get(D.dataId).id,E=a.makeOutput([4],"int32"),O=a.dataIdMap.get(E.dataId).id,B=Xu(m,f,G[r.dtype],p,s,l,g,b,k,M,F,O),K=a.readSync(E.dataId);let X;switch(K[0]){case 1:X=i.backend_util.getSparseFillEmptyRowsIndicesDenseShapeMismatch(K[1]);break;case 2:X=i.backend_util.getSparseFillEmptyRowsNegativeIndexErrorMessage(K[1],K[2]);break;case 3:X=i.backend_util.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(K[1],K[2],K[3]);break;default:X=""}if(a.disposeData(E.dataId),X)throw a.disposeData(h.dataId),a.disposeData(y.dataId),a.disposeData(I.dataId),a.disposeData(D.dataId),new Error(X);let U=h,q=y;return B!==e[0]&&(U=De({inputs:{x:h},attrs:{begin:0,size:[B,l]},backend:a}),q=De({inputs:{x:y},attrs:{begin:0,size:B},backend:a}),a.disposeData(h.dataId),a.disposeData(y.dataId)),[U,q,I,D]}var tc={kernelName:i.SparseFillEmptyRows,backendName:"wasm",setupFunc:ec,kernelFunc:nc},Ju;function ac(t){Ju=t.wasm.cwrap(i.SparseReshape,null,["number","number","number","number","number","number","number"])}function rc(t){const{backend:a,inputs:u}=t,{inputIndices:d,inputShape:r,newShape:n}=u;if(d.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape
|
|
3
3
|
${d.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape
|
|
4
4
|
${r.shape}`);if(n.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${n.shape}`);const o=a.dataIdMap.get(d.dataId).id,p=a.dataIdMap.get(r.dataId).id,l=a.dataIdMap.get(n.dataId).id,s=d.shape[0],e=i.util.sizeFromShape(n.shape),m=a.makeOutput([s,e],d.dtype),f=a.dataIdMap.get(m.dataId).id,g=a.makeOutput([e],n.dtype),h=a.dataIdMap.get(g.dataId).id,b=a.makeOutput([3],"int32"),y=a.dataIdMap.get(b.dataId).id;Ju(o,p,l,s,f,h,y);const k=a.readSync(b.dataId);let I;switch(k[0]){case 0:I=i.backend_util.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(k[1],k[2]);break;case 1:I=i.backend_util.getSparseReshapeNegativeOutputDimErrorMessage(k[1],k[2]);break;case 2:I=i.backend_util.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{const M=Array.from(a.readSync(r.dataId)),D=Array.from(a.readSync(g.dataId));I=i.backend_util.getSparseReshapeInputOutputMultipleErrorMessage(M,D);break}case 4:{const M=Array.from(a.readSync(r.dataId)),D=Array.from(a.readSync(g.dataId));I=i.backend_util.getSparseReshapeInputOutputMismatchErrorMessage(M,D);break}default:I=""}if(a.disposeData(b.dataId),I)throw a.disposeData(m.dataId),a.disposeData(g.dataId),new Error(I);return[m,g]}var uc={kernelName:i.SparseReshape,backendName:"wasm",setupFunc:ac,kernelFunc:rc},Qu;function Yu(t){Qu=t.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function Zu(t,a){const{backend:u,inputs:d}=t,{data:r,indices:n,segmentIds:o}=d,p=n.shape[0],l=u.readSync(o.dataId,p-1,p)[0],s=p>0?l+1:0;if(s<0)throw new Error(i.backend_util.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());const e=r.shape.slice();e[0]=s;const m=u.dataIdMap.get(r.dataId).id,f=u.dataIdMap.get(n.dataId).id,g=u.dataIdMap.get(o.dataId).id,h=u.makeOutput(e,r.dtype),b=u.dataIdMap.get(h.dataId).id,y=u.makeOutput([4],"int32"),k=u.dataIdMap.get(y.dataId).id;Qu(m,G[r.dtype],r.shape[0],f,g,b,k,a,0);const I=u.readSync(y.dataId);let M;switch(I[0]){case 0:M=i.backend_util.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break;case 1:M=i.backend_util.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break;case 2:M=i.backend_util.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(I[1],I[2]);break;case 3:M=i.backend_util.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(I[1],I[2],I[3]);break;default:M=""}if(u.disposeData(y.dataId),M)throw u.disposeData(h.dataId),new Error(M);return h}function ic(t){return Zu(t,!0)}var sc={kernelName:i.SparseSegmentMean,backendName:"wasm",setupFunc:Yu,kernelFunc:ic};function dc(t){return Zu(t,!1)}var oc={kernelName:i.SparseSegmentSum,backendName:"wasm",setupFunc:Yu,kernelFunc:dc},ju;function pc(t){ju=t.wasm.cwrap(i.SparseToDense,null,["number","number","number","number","number","number","number","number","array","number","number"])}function lc(t){const{backend:a,inputs:u,attrs:d}=t,{sparseIndices:r,sparseValues:n,defaultValue:o}=u,{outputShape:p}=d,l=a.makeOutput(p,o.dtype);if(i.util.sizeFromShape(p)===0)return l;const{sliceRank:s,numUpdates:e,sliceSize:m,strides:f,outputSize:g}=i.backend_util.calculateShapes(n,r,p),h=a.dataIdMap.get(r.dataId).id,b=a.dataIdMap.get(n.dataId).id,y=a.dataIdMap.get(o.dataId).id,k=new Uint8Array(new Int32Array(f).buffer),I=a.dataIdMap.get(l.dataId).id;return ju(h,b,n.shape.length,y,G[o.dtype],s,e,m,k,g,I),l}var cc={kernelName:i.SparseToDense,backendName:"wasm",setupFunc:pc,kernelFunc:lc};function mc(t){const{inputs:a,attrs:u,backend:d}=t,{x:r}=a,{numOrSizeSplits:n,axis:o}=u,p=i.util.parseAxisParam(o,r.shape)[0],l=i.backend_util.prepareSplitSize(r,n,p),s=new Array(r.shape.length).fill(0),e=r.shape.slice();return l.map(m=>{const f=[...e];f[p]=m;const g=De({inputs:{x:r},attrs:{begin:s,size:f},backend:d});return s[p]+=m,g})}var hc={kernelName:i.SplitV,backendName:"wasm",kernelFunc:mc},gc=W(i.Sqrt),fc=W(i.Square),bc=!0,vc=Y(i.SquaredDifference,bc),ei;function yc(t){ei=t.wasm.cwrap(i.Step,null,["number","number","number","number"])}function Ic(t){const{backend:a,inputs:u,attrs:d}=t,{alpha:r}=d,{x:n}=u,o=a.dataIdMap.get(n.dataId).id,p=a.makeOutput(n.shape,n.dtype),l=a.dataIdMap.get(p.dataId).id;return ei(o,r,G[n.dtype],l),p}var kc={kernelName:i.Step,backendName:"wasm",setupFunc:yc,kernelFunc:Ic},ni;function Sc(t){ni=t.wasm.cwrap(i.StridedSlice,null,["number","array","number","array","array","array","array","array","number","number"])}function Mc(t){const{backend:a,inputs:u,attrs:d}=t,{x:r}=u,{begin:n,end:o,strides:p,beginMask:l,endMask:s,ellipsisMask:e,newAxisMask:m,shrinkAxisMask:f}=d,{finalShapeSparse:g,finalShape:h,isIdentity:b,sliceDim0:y,isSimpleSlice:k,begin:I,end:M,strides:D}=i.slice_util.sliceInfo(r.shape,n,o,p,l,s,e,m,f);let F;if(b)F=ue({inputs:{x:r},backend:a,attrs:{shape:h}});else if(y||k){i.util.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);const E=i.slice_util.computeOutShape(I,M,D),O=De({inputs:{x:r},backend:a,attrs:{begin:I,size:E}});F=ue({inputs:{x:O},backend:a,attrs:{shape:h}}),a.disposeData(O.dataId)}else{const E=a.makeOutput(g,"float32"),O=a.dataIdMap.get(r.dataId).id,B=new Uint8Array(new Int32Array(i.util.computeStrides(r.shape)).buffer),K=new Uint8Array(new Int32Array(I).buffer),X=new Uint8Array(new Int32Array(M).buffer),U=new Uint8Array(new Int32Array(D).buffer),q=new Uint8Array(new Int32Array(g).buffer),Z=new Uint8Array(new Int32Array(i.util.computeStrides(g)).buffer),ie=a.dataIdMap.get(E.dataId).id;ni(O,B,r.shape.length,K,X,U,q,Z,g.length,ie),F=ue({inputs:{x:E},backend:a,attrs:{shape:h}}),a.disposeData(E.dataId)}return F}var Ac={kernelName:i.StridedSlice,backendName:"wasm",setupFunc:Sc,kernelFunc:Mc};function xc(t){const{backend:a,inputs:u,attrs:d}=t,{data:r,dataSplits:n}=u,{separator:o,nGramWidths:p,leftPad:l,rightPad:s,padWidth:e,preserveShortSequences:m}=d,f=a.readSync(r.dataId),g=a.readSync(n.dataId),[h,b]=Is(f,g,o,p,l,s,e,m),y=a.makeOutput([h.length],"string"),k=a.dataIdMap.get(y.dataId);k.stringBytes=h;const I=a.makeOutput(n.shape,"int32");return a.typedArrayFromHeap(I).set(b),[y,I]}var Dc={kernelName:i.StringNGrams,backendName:"wasm",kernelFunc:xc};function wc(t){const{backend:a,inputs:u,attrs:d}=t,{input:r,delimiter:n}=u,{skipEmpty:o}=d,p=a.readSync(r.dataId),l=a.readSync(n.dataId),[s,e,m]=Ss(p,l[0],o),f=e.length,g=a.makeOutput([f,2],"int32");a.typedArrayFromHeap(g).set(s);const h=a.makeOutput([f],"string"),b=a.dataIdMap.get(h.dataId);b.stringBytes=e;const y=a.makeOutput([2],"int32");return a.typedArrayFromHeap(y).set(m),[g,h,y]}var Fc={kernelName:i.StringSplit,backendName:"wasm",kernelFunc:wc};function Nc(t){const{backend:a,inputs:u,attrs:d}=t,{input:r}=u,{numBuckets:n}=d,o=a.readSync(r.dataId),p=Ms(o,n),l=a.makeOutput(r.shape,"int32");return a.typedArrayFromHeap(l).set(p),l}var Cc={kernelName:i.StringToHashBucketFast,backendName:"wasm",kernelFunc:Nc},Rc=!0,_c=Y(i.Sub,Rc),ti;function Pc(t){ti=t.wasm.cwrap(i.Sum,null,["number","number","number","number"])}function Ec(t){const{backend:a,inputs:u,attrs:d}=t,{axis:r,keepDims:n}=d,{x:o}=u,p=a.dataIdMap.get(o.dataId).id;let l=p,s=o;const{transposed:e,axes:m,originalAxes:f,inputWasTransposed:g}=ke(o,r,a);let h=m;if(g){const M=a.dataIdMap.get(e.dataId).id;M!==p&&(s=e,l=M,h=i.backend_util.getInnerMostAxes(h.length,s.shape.length))}i.backend_util.assertAxesAreInnerMostDims("sum",h,s.shape.length);const[b,y]=i.backend_util.computeOutAndReduceShapes(s.shape,h),k=i.util.sizeFromShape(y),I=a.makeOutput(b,s.dtype);if(i.util.sizeFromShape(s.shape)!==0){const M=a.dataIdMap.get(I.dataId).id;ti(l,k,G[I.dtype],M)}return g&&a.disposeData(e.dataId),n&&(I.shape=i.backend_util.expandShapeToKeepDim(I.shape,f)),I}var Bc={kernelName:i.Sum,backendName:"wasm",setupFunc:Pc,kernelFunc:Ec},Tc=W(i.Tan),Oc=W(i.Tanh),ai;function Wc(t){ai=t.wasm.cwrap(i.TensorScatterUpdate,null,["number","number","number","number","number","number","array","number","number","number"])}function zc(t){const{backend:a,inputs:u,attrs:d}=t,{tensor:r,indices:n,updates:o}=u,{}=d,p=a.makeOutput(r.shape,r.dtype);if(i.util.sizeFromShape(r.shape)===0)return p;const{sliceRank:l,numUpdates:s,sliceSize:e,strides:m,outputSize:f}=i.scatter_util.calculateShapes(o,n,r.shape),g=a.dataIdMap.get(n.dataId).id,h=a.dataIdMap.get(o.dataId).id,b=a.dataIdMap.get(r.dataId).id,y=new Uint8Array(new Int32Array(m).buffer),k=a.dataIdMap.get(p.dataId).id;return ai(g,h,G[o.dtype],l,s,e,y,f,k,b),p}var Hc={kernelName:i.TensorScatterUpdate,backendName:"wasm",setupFunc:Wc,kernelFunc:zc},ri;function Lc(t){ri=t.wasm.cwrap(i.Tile,null,["number","array","number","array","number","number"])}function Gc(t){const{inputs:a,backend:u,attrs:d}=t,{x:r}=a,n=u.dataIdMap.get(r.dataId).id,{reps:o}=d,p=new Array(r.shape.length);for(let f=0;f<p.length;f++)p[f]=r.shape[f]*o[f];const l=new Uint8Array(new Int32Array(r.shape).buffer),s=new Uint8Array(new Int32Array(p).buffer),e=u.makeOutput(p,r.dtype),m=u.dataIdMap.get(e.dataId).id;return ri(n,l,r.shape.length,s,p.length,G[e.dtype],m),e}var $c={kernelName:i.Tile,backendName:"wasm",setupFunc:Lc,kernelFunc:Gc},ui;function Vc(t){ui=t.wasm.cwrap(i.TopK,null,["number","array","number","number","number","bool","number","number"])}var Uc=({inputs:t,backend:a,attrs:u})=>{const{x:d}=t,{k:r,sorted:n}=u,o=a.dataIdMap.get(d.dataId).id,p=new Uint8Array(new Int32Array(d.shape).buffer),l=d.shape.slice();l[l.length-1]=r;const s=a.makeOutput(l,d.dtype),e=a.dataIdMap.get(s.dataId).id,m=a.makeOutput(l,"int32"),f=a.dataIdMap.get(m.dataId).id;return ui(o,p,d.shape.length,G[d.dtype],r,n,e,f),[s,m]},qc={kernelName:i.TopK,backendName:"wasm",setupFunc:Vc,kernelFunc:Uc},ii;function Kc(t){ii=t.wasm.cwrap(i.Transform,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function Xc(t){const{backend:a,inputs:u,attrs:d}=t,{image:r,transforms:n}=u,{interpolation:o,fillMode:p,fillValue:l,outputShape:s}=d,[e,m,f,g]=r.shape,[h,b]=s??[m,f],y=[e,h,b,g],k=new Uint8Array(new Int32Array(i.util.computeStrides(r.shape)).buffer),I=new Uint8Array(new Int32Array(i.util.computeStrides(y)).buffer),M=a.makeOutput(y,r.dtype),D=a.dataIdMap.get(M.dataId).id,F=a.dataIdMap.get(r.dataId).id,E=a.dataIdMap.get(n.dataId).id,O=o==="nearest"?1:2;let B;switch(p){case"constant":B=1;break;case"reflect":B=2;break;case"wrap":B=3;break;case"nearest":B=4;break;default:B=1}return ii(F,E,n.shape[0]>1,e,h,b,g,f,m,k,r.shape.length-1,I,y.length-1,O,B,l,D),M}var Jc={kernelName:i.Transform,backendName:"wasm",setupFunc:Kc,kernelFunc:Xc};function Qc(t){const{inputs:a,attrs:u,backend:d}=t,{axis:r}=u,{x:n}=a,{outputValues:o,outputShape:p,indices:l}=As(d.readSync(n.dataId),r,n.shape,n.dtype);return[d.makeOutput(p,n.dtype,void 0,o),d.makeOutput([l.length],"int32",void 0,l)]}var Yc={kernelName:i.Unique,backendName:"wasm",kernelFunc:Qc};function Zc(t){const{inputs:a,backend:u,attrs:d}=t,{value:r}=a;let{axis:n}=d;n<0&&(n+=r.shape.length);const o=r.shape[n],p=r.shape.length,l=new Array(p-1);let s=0;for(let g=0;g<p;g++)g!==n&&(l[s++]=r.shape[g]);const e=new Array(o),m=new Array(p).fill(0),f=r.shape.slice();f[n]=1;for(let g=0;g<e.length;g++)m[n]=g,e[g]=De({inputs:{x:r},attrs:{begin:m,size:f},backend:u});return e.map(({dataId:g,dtype:h})=>({dataId:g,dtype:h,shape:l}))}var jc={kernelName:i.Unpack,backendName:"wasm",kernelFunc:Zc};function em(t){const{inputs:{x:a},backend:u}=t,d=u.makeOutput(a.shape,a.dtype);return u.typedArrayFromHeap(d).fill(0),d}var nm={kernelName:i.ZerosLike,backendName:"wasm",kernelFunc:em},tm=[Fi,Ni,Ci,Ri,Pi,Ti,Vi,Ki,Xi,Ji,Qi,Yi,Zi,ji,es,as,cs,is,os,fs,Cs,Ps,Bs,Os,Ws,zs,Gs,$s,qs,Js,Zs,nd,rd,ud,id,od,cd,gd,vd,kd,Ad,wd,Cd,Pd,Td,Od,Hd,Gd,$d,Vd,Ud,qd,Kd,Qd,Yd,jd,to,uo,oo,co,go,bo,yo,Oi,Io,ko,So,xo,wo,No,_o,Eo,Po,To,Oo,zo,Lo,Vo,Ko,Qo,Zo,np,rp,sp,pp,mp,fp,yp,kp,Ap,Np,Cp,_p,Pp,Tp,zp,Gp,Vp,Kp,Jp,Yp,Bu,nl,rl,sl,ol,ll,cl,ml,hl,ms,bl,Il,Ml,Dl,Nl,_l,Pl,El,Ol,Hl,$l,Vl,Kl,Xl,Jl,Ql,Fs,Dp,Yl,jl,tc,uc,sc,oc,cc,hc,gc,fc,vc,kc,Ac,Dc,Fc,Cc,_c,Bc,Tc,Oc,Hc,$c,qc,Jc,Li,Yc,jc,nm];for(const t of tm)(0,i.registerKernel)(t);var Jn=(0,i.env)();Jn.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]))}catch{return!1}}),Jn.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Jn.get("IS_NODE"))return!1;try{return new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch{return!1}});var we=dn(((t,a)=>{a.exports={}})),am=dn(((t,a)=>{var u=(()=>{var d=typeof document<"u"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename<"u"&&(d=d||__filename),(function(r){r=r||{};function n(){return $.buffer!=de&&he($.buffer),fe}function o(){return $.buffer!=de&&he($.buffer),We}function p(){return $.buffer!=de&&he($.buffer),Me}function l(){return $.buffer!=de&&he($.buffer),ln}function s(){return $.buffer!=de&&he($.buffer),cn}var e=typeof r<"u"?r:{},m,f;e.ready=new Promise(function(c,v){m=c,f=v});var g;typeof process<"u"&&process.listeners&&(g={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var h=Object.assign({},e),b=[],y=(c,v)=>{throw v},k=typeof window=="object",I=typeof importScripts=="function",M=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",D=e.ENVIRONMENT_IS_PTHREAD||!1,F="";function E(c){return e.locateFile?e.locateFile(c,F):F+c}var O,B,K;function X(c){c instanceof _e||Q("exiting due to exception: "+c)}if(M){var U=we(),q=we();I?F=q.dirname(F)+"/":F=__dirname+"/",O=(v,A)=>(v=He(v)?new URL(v):q.normalize(v),U.readFileSync(v,A?void 0:"utf8")),K=v=>{var A=O(v,!0);return A.buffer||(A=new Uint8Array(A)),A},B=(v,A,_)=>{v=He(v)?new URL(v):q.normalize(v),U.readFile(v,function(R,w){R?_(R):A(w.buffer)})},process.argv.length>1&&process.argv[1].replace(/\\/g,"/"),b=process.argv.slice(2),process.on("uncaughtException",function(v){if(!(v instanceof _e))throw v}),process.on("unhandledRejection",function(v){throw v}),y=(v,A)=>{if(ze())throw process.exitCode=v,A;X(A),process.exit(v)},e.inspect=function(){return"[Emscripten Module object]"};let c;try{c=we()}catch(v){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),v}global.Worker=c.Worker}else(k||I)&&(I?F=self.location.href:typeof document<"u"&&document.currentScript&&(F=document.currentScript.src),typeof d<"u"&&d&&(F=d),F.indexOf("blob:")!==0?F=F.substr(0,F.replace(/[?#].*/,"").lastIndexOf("/")+1):F="",M||(O=c=>{var v=new XMLHttpRequest;return v.open("GET",c,!1),v.send(null),v.responseText},I&&(K=c=>{var v=new XMLHttpRequest;return v.open("GET",c,!1),v.responseType="arraybuffer",v.send(null),new Uint8Array(v.response)}),B=(c,v,A)=>{var _=new XMLHttpRequest;_.open("GET",c,!0),_.responseType="arraybuffer",_.onload=()=>{if(_.status==200||_.status==0&&_.response){v(_.response);return}A()},_.onerror=A,_.send(null)}));M&&typeof performance>"u"&&(global.performance=we().performance);var Z=console.log.bind(console),ie=console.warn.bind(console);M&&(Z=c=>U.writeSync(1,c+`
|
package/dist/backend-webgpu.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @license Includes TensorFlow.js WebGPU backend 4.22.0 (Apache-2.0). See https://github.com/kubohiroya/turbowarp-teachable-machine/blob/v4.0.
|
|
1
|
+
/*! @license Includes TensorFlow.js WebGPU backend 4.22.0 (Apache-2.0). See https://github.com/kubohiroya/turbowarp-teachable-machine/blob/v4.0.2/THIRD_PARTY_NOTICES.md. */
|
|
2
2
|
(function(u){var gi=Object.create,Se=Object.defineProperty,xi=Object.getOwnPropertyDescriptor,vi=Object.getOwnPropertyNames,Ci=Object.getPrototypeOf,je=Object.prototype.hasOwnProperty,_e=(e,i)=>{let t={};for(var s in e)Se(t,s,{get:e[s],enumerable:!0});return i||Se(t,Symbol.toStringTag,{value:"Module"}),t},bi=(e,i,t,s)=>{if(i&&typeof i=="object"||typeof i=="function")for(var a=vi(i),r=0,n=a.length,o;r<n;r++)o=a[r],!je.call(e,o)&&o!==t&&Se(e,o,{get:(l=>i[l]).bind(null,o),enumerable:!(s=xi(i,o))||s.enumerable});return e},yi=(e,i,t)=>(t=e!=null?gi(Ci(e)):{},bi(i||!e||!e.__esModule||!je.call(e,"default")?Se(t,"default",{value:e,enumerable:!0}):t,e));u=yi(u);var K=(0,u.env)();K.registerFlag("WEBGPU_DEFERRED_SUBMIT_BATCH_SIZE",()=>15),K.registerFlag("WEBGPU_CPU_FORWARD",()=>!0),K.registerFlag("WEBGPU_MATMUL_PROGRAM_TYPE",()=>-1),K.registerFlag("WEBGPU_USE_NAIVE_CONV2D_TRANSPOSE",()=>!0),K.registerFlag("WEBGPU_USE_LOW_POWER_GPU",()=>!1),K.registerFlag("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e3),K.registerFlag("WEBGPU_USE_PROFILE_TOOL",()=>!1),K.registerFlag("WEBGPU_IMPORT_EXTERNAL_TEXTURE",()=>!0),K.registerFlag("WEBGPU_USE_NAIVE_CONV2D_DEBUG",()=>!1),K.registerFlag("WEBGPU_THRESHOLD_TO_INCREASE_WORKGROUPS_FOR_MATMUL",()=>-1),K.registerFlag("WEBGPU_CONV_SEPARATE_IM2COL_SHADER",()=>!1),K.registerFlag("WEBGPU_PRINT_SHADER",()=>""),K.registerFlag("WEBGPU_ENGINE_COMPILE_ONLY",()=>!1);var Si=class{constructor(e){e&&(this.vendor=e.vendor,this.architecture=e.architecture,this.intelGPUGeneration=this.getIntelGPUGeneration())}getIntelGPUGeneration(){if(this.isIntel()){if(this.architecture.startsWith("gen"))return Number(this.architecture.match(/\d+/));if(this.architecture.startsWith("xe"))return 12}return 0}isIntel(){return this.vendor==="intel"}},Ii=class{constructor(e){this.device=e,this.numUsedBuffers=0,this.numFreeBuffers=0,this.freeBuffers=new Map,this.usedBuffers=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireBuffer(e,i,t=!1,s=!0){let a;const r=et(e,i);return s?(this.freeBuffers.has(r)||this.freeBuffers.set(r,[]),this.freeBuffers.get(r).length>0?(a=this.freeBuffers.get(r).pop(),this.numFreeBuffers--):(a=this.device.createBuffer({size:e,usage:i,mappedAtCreation:t}),this.numBytesAllocated+=e)):(a=this.device.createBuffer({size:e,usage:i,mappedAtCreation:t}),this.numBytesAllocated+=e),this.usedBuffers.has(r)||this.usedBuffers.set(r,[]),this.usedBuffers.get(r).push(a),this.numUsedBuffers++,this.numBytesUsed+=e,a}releaseBuffer(e,i=!0){if(this.freeBuffers.size===0)return;const t=e.size,s=e.usage,a=et(t,s),r=this.usedBuffers.get(a),n=r.indexOf(e);if(n<0)throw new Error("Cannot find the buffer in buffer manager");r[n]=r[r.length-1],r.pop(),this.numUsedBuffers--,this.numBytesUsed-=t,i?(this.freeBuffers.get(a).push(e),this.numFreeBuffers++):(e.destroy(),this.numBytesAllocated-=t)}getNumUsedBuffers(){return this.numUsedBuffers}getNumFreeBuffers(){return this.numFreeBuffers}dispose(){this.freeBuffers.forEach((e,i)=>{e.forEach(t=>{t.destroy()})}),this.usedBuffers.forEach((e,i)=>{e.forEach(t=>{t.destroy()})}),this.freeBuffers=new Map,this.usedBuffers=new Map,this.numUsedBuffers=0,this.numFreeBuffers=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function et(e,i){return`${e}_${i}`}var ki=class{constructor(e){this.device=e,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures=new Map,this.usedTextures=new Map,this.numBytesUsed=0,this.numBytesAllocated=0}acquireTexture(e,i,t,s){const a=it(t),r=e*i*a,n=tt(e,i,t,s);if(this.freeTextures.has(n)||this.freeTextures.set(n,[]),this.usedTextures.has(n)||this.usedTextures.set(n,[]),this.numBytesUsed+=r,this.numUsedTextures++,this.freeTextures.get(n).length>0){this.numFreeTextures--;const l=this.freeTextures.get(n).shift();return this.usedTextures.get(n).push(l),l}this.numBytesAllocated+=r;const o=this.device.createTexture({size:[e,i],format:t,usage:s});return this.usedTextures.get(n).push(o),o}releaseTexture(e){if(this.freeTextures.size===0)return;const i=e.width,t=e.height,s=e.format,a=e.usage,r=tt(i,t,s,a);this.freeTextures.has(r)||this.freeTextures.set(r,[]),this.freeTextures.get(r).push(e),this.numFreeTextures++,this.numUsedTextures--;const n=this.usedTextures.get(r),o=n.indexOf(e);if(o<0)throw new Error("Cannot release a texture that was never provided by this texture manager");n.splice(o,1);const l=it(s),d=i*t*l;this.numBytesUsed-=d}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){this.freeTextures.forEach((e,i)=>{e.forEach(t=>{t.destroy()})}),this.usedTextures.forEach((e,i)=>{e.forEach(t=>{t.destroy()})}),this.freeTextures=new Map,this.usedTextures=new Map,this.numUsedTextures=0,this.numFreeTextures=0,this.numBytesUsed=0,this.numBytesAllocated=0}};function tt(e,i,t,s){return`${e}_${i}_${t}_${s}`}function it(e){if(e==="rgba8unorm")return 16;throw new Error(`${e} is not supported!`)}function wi(e,i){if(Math.max(...e)>5)throw new Error("Cannot symbolically compute strides for rank > 6 tensor.");const t=e.length,s="xyzwuv",a=e.map(n=>`${i}.${s[n]}`),r=new Array(t-1);r[t-2]=a[t-1];for(let n=t-3;n>=0;--n)r[n]=`(${r[n+1]} * ${a[n+1]})`;return r}var ee=(e,i,t)=>t==="int32"?`atomicAdd(${e}, bitcast<i32>(${i}));`:`
|
|
3
3
|
{
|
|
4
4
|
var oldValue = 0;
|
package/dist/composition.js
CHANGED
|
@@ -51,7 +51,7 @@ function requireComputeMode(value) {
|
|
|
51
51
|
//#region src/config.ts
|
|
52
52
|
var extensionConfig = {
|
|
53
53
|
id: "kubohiroyatm",
|
|
54
|
-
slug: "
|
|
54
|
+
slug: "teachable-machine",
|
|
55
55
|
name: "Teachable Machine",
|
|
56
56
|
description: "Use Teachable Machine pose, image, or audio models for recognition in TurboWarp.",
|
|
57
57
|
author: "Hiroya Kubo",
|
|
@@ -1199,7 +1199,7 @@ function confidenceMultiplier(value) {
|
|
|
1199
1199
|
}
|
|
1200
1200
|
var package_default = {
|
|
1201
1201
|
name: "@kubohiroya/turbowarp-teachable-machine",
|
|
1202
|
-
version: "4.0.
|
|
1202
|
+
version: "4.0.2",
|
|
1203
1203
|
description: "A TurboWarp extension for recognition using Teachable Machine pose, image, and audio models.",
|
|
1204
1204
|
author: "Hiroya Kubo <hiroya@cuc.ac.jp>",
|
|
1205
1205
|
license: "MPL-2.0",
|
|
@@ -1223,8 +1223,10 @@ var package_default = {
|
|
|
1223
1223
|
"./dist/backend-wasm.js": "./dist/backend-wasm.js",
|
|
1224
1224
|
"./dist/backend-webgpu.js": "./dist/backend-webgpu.js",
|
|
1225
1225
|
"./runtime": "./dist/runtime.js",
|
|
1226
|
-
"./dist/
|
|
1227
|
-
"./package.json": "./package.json"
|
|
1226
|
+
"./dist/teachable-machine.js": "./dist/teachable-machine.js",
|
|
1227
|
+
"./package.json": "./package.json",
|
|
1228
|
+
"./dist/teachable-machine-webgpu.js": "./dist/teachable-machine-webgpu.js",
|
|
1229
|
+
"./dist/teachable-machine-wasm.js": "./dist/teachable-machine-wasm.js"
|
|
1228
1230
|
},
|
|
1229
1231
|
type: "module",
|
|
1230
1232
|
files: [
|
|
@@ -1237,8 +1239,8 @@ var package_default = {
|
|
|
1237
1239
|
"schemas/",
|
|
1238
1240
|
"docs/fixed-input-editors.ja.md"
|
|
1239
1241
|
],
|
|
1240
|
-
unpkg: "./dist/
|
|
1241
|
-
jsdelivr: "./dist/
|
|
1242
|
+
unpkg: "./dist/teachable-machine.js",
|
|
1243
|
+
jsdelivr: "./dist/teachable-machine.js",
|
|
1242
1244
|
publishConfig: {
|
|
1243
1245
|
"access": "public",
|
|
1244
1246
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -1248,7 +1250,7 @@ var package_default = {
|
|
|
1248
1250
|
scripts: {
|
|
1249
1251
|
"dev": "vite build --watch",
|
|
1250
1252
|
"typecheck": "tsc --noEmit",
|
|
1251
|
-
"build": "pnpm build:extension && pnpm build:composition && pnpm build:runtime && pnpm build:backends && pnpm build:posenet && pnpm build:notices && pnpm build:types",
|
|
1253
|
+
"build": "pnpm build:extension && pnpm build:standalone && pnpm build:composition && pnpm build:runtime && pnpm build:backends && pnpm build:posenet && pnpm build:notices && pnpm build:types",
|
|
1252
1254
|
"build:extension": "vite build",
|
|
1253
1255
|
"build:composition": "vite build --config vite.composition.config.ts",
|
|
1254
1256
|
"build:runtime": "vite build --config vite.runtime.config.ts",
|
|
@@ -1268,7 +1270,8 @@ var package_default = {
|
|
|
1268
1270
|
"pack:check": "npm pack --dry-run --ignore-scripts",
|
|
1269
1271
|
"release:check": "npm publish --dry-run --access public --tag latest",
|
|
1270
1272
|
"check": "npm run typecheck && npm run test && npm run build && npm run types:composition:check && npm run types:posenet:check && npm run docs:check && npm run docs:pages:check && npm run release:consistency:check && npm run check:dist && npm run archive:check && npm run pack:check",
|
|
1271
|
-
"prepack": "npm run build && npm run release:consistency:check"
|
|
1273
|
+
"prepack": "npm run build && npm run release:consistency:check",
|
|
1274
|
+
"build:standalone": "vite build --config vite.standalone.config.ts --mode webgpu && vite build --config vite.standalone.config.ts --mode wasm"
|
|
1272
1275
|
},
|
|
1273
1276
|
devDependencies: {
|
|
1274
1277
|
"@kubohiroya/turbowarp-camera-source": "^0.21.1",
|