Compare commits
12 Commits
7a4e489914
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| cf4c8a090a | |||
| 9c46e1c345 | |||
| c5d39c8e16 | |||
| 253d16f84e | |||
| edb72dcb86 | |||
| 26ca347c1d | |||
| 649533cb17 | |||
| 945b04bb56 | |||
| 2f2db72db1 | |||
| 53499a163e | |||
| 38f81be722 | |||
| 42d12922ee |
@ -2,3 +2,4 @@
|
|||||||
remote = webdav
|
remote = webdav
|
||||||
['remote "webdav"']
|
['remote "webdav"']
|
||||||
url = webdavs://file.guineapig.love//home/dvc
|
url = webdavs://file.guineapig.love//home/dvc
|
||||||
|
ssl_verify = false
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
# Add patterns of files dvc should ignore, which could improve
|
# Add patterns of files dvc should ignore, which could improve
|
||||||
# the performance. Learn more at
|
# the performance. Learn more at
|
||||||
# https://dvc.org/doc/user-guide/dvcignore
|
# https://dvc.org/doc/user-guide/dvcignore
|
||||||
|
|
||||||
|
quickdraw_bot/data/processed
|
||||||
13
.gitignore
vendored
13
.gitignore
vendored
@ -12,5 +12,16 @@ wheels/
|
|||||||
# Dataset
|
# Dataset
|
||||||
quickdraw_bot/data
|
quickdraw_bot/data
|
||||||
|
|
||||||
|
# Temp files
|
||||||
|
quickdraw_bot/tmp
|
||||||
|
|
||||||
# DVC
|
# DVC
|
||||||
dvc/config.local
|
dvc/config.local
|
||||||
|
|
||||||
|
# .DS_Store
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Models
|
||||||
|
*.pth
|
||||||
|
*.onnx
|
||||||
|
*.onnx.data
|
||||||
33
.pre-commit-config.yaml
Normal file
33
.pre-commit-config.yaml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
default_language_version:
|
||||||
|
python: python3.13
|
||||||
|
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
|
rev: v5.0.0
|
||||||
|
hooks:
|
||||||
|
- id: check-added-large-files
|
||||||
|
args: ["--maxkb=512"]
|
||||||
|
- id: check-yaml
|
||||||
|
- id: check-toml
|
||||||
|
- id: check-docstring-first
|
||||||
|
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: ruff-format
|
||||||
|
name: ruff format
|
||||||
|
entry: uv run ruff format .
|
||||||
|
language: system
|
||||||
|
types: [python]
|
||||||
|
|
||||||
|
- id: ruff-check
|
||||||
|
name: ruff check
|
||||||
|
entry: uv run ruff check --fix .
|
||||||
|
language: system
|
||||||
|
types: [python]
|
||||||
|
|
||||||
|
- id: pytest
|
||||||
|
name: pytest
|
||||||
|
entry: uv run pytest tests/ -vs
|
||||||
|
language: system
|
||||||
|
pass_filenames: false
|
||||||
|
stages: [pre-push]
|
||||||
@ -18,4 +18,6 @@
|
|||||||
## Installation
|
## Installation
|
||||||
```bash
|
```bash
|
||||||
uv sync --all-groups
|
uv sync --all-groups
|
||||||
|
uv run pre-commit install
|
||||||
|
uv run pre-commit install --hook-type pre-push
|
||||||
```
|
```
|
||||||
@ -13,6 +13,7 @@ dependencies = [
|
|||||||
"dvc~=3.67.1",
|
"dvc~=3.67.1",
|
||||||
"dvclive~=3.49.1",
|
"dvclive~=3.49.1",
|
||||||
"dvc-webdav~=3.0.1",
|
"dvc-webdav~=3.0.1",
|
||||||
|
"matplotlib~=3.11.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[dependency-groups]
|
[dependency-groups]
|
||||||
@ -24,7 +25,8 @@ dev = [
|
|||||||
deploy = [
|
deploy = [
|
||||||
"onnx~=1.22.0",
|
"onnx~=1.22.0",
|
||||||
"onnxruntime~=1.27.0",
|
"onnxruntime~=1.27.0",
|
||||||
"openvino~=2026.2.0"
|
"onnxscript~=0.7.0",
|
||||||
|
"openvino~=2026.2.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
@ -35,4 +37,15 @@ target-version = "py313"
|
|||||||
select = ["E", "F", "I"]
|
select = ["E", "F", "I"]
|
||||||
|
|
||||||
[tool.ruff.format]
|
[tool.ruff.format]
|
||||||
quote-style = "single"
|
quote-style = 'single'
|
||||||
|
|
||||||
|
[tool.pytest.ini_options]
|
||||||
|
testpaths = ["tests"]
|
||||||
|
pythonpath = ["."]
|
||||||
|
|
||||||
|
[build-system]
|
||||||
|
requires = ["hatchling"]
|
||||||
|
build-backend = "hatchling.build"
|
||||||
|
|
||||||
|
[tool.hatch.build.targets.wheel]
|
||||||
|
packages = ["quickdraw_bot"]
|
||||||
1
quickdraw_bot/assets/.gitignore
vendored
Normal file
1
quickdraw_bot/assets/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/model.pth
|
||||||
29
quickdraw_bot/assets/config.yaml
Normal file
29
quickdraw_bot/assets/config.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
prepare:
|
||||||
|
data_dir: ./data
|
||||||
|
num_of_img_per_class: 10000
|
||||||
|
data_split:
|
||||||
|
train: 0.8
|
||||||
|
valid: 0.1
|
||||||
|
test: 0.1
|
||||||
|
random_seed: 1
|
||||||
|
train:
|
||||||
|
device_type: mps
|
||||||
|
train_data_dir: ./data/processed/train
|
||||||
|
valid_data_dir: ./data/processed/valid
|
||||||
|
batch_size: 256
|
||||||
|
num_of_class: 20
|
||||||
|
optimizer_name: sgd # sgd, adam
|
||||||
|
learning_rate: 0.001
|
||||||
|
warmup_epochs: 5
|
||||||
|
num_of_epochs: 30
|
||||||
|
file_lazy_load: false
|
||||||
|
random_seed: 1
|
||||||
|
exp_msg: init train
|
||||||
|
eval:
|
||||||
|
test_data_dir: ./data/processed/test
|
||||||
|
model_path: ./assets/model.pth
|
||||||
|
to_onnx:
|
||||||
|
model_path: ./assets/model.pth
|
||||||
|
image_size: [28, 28]
|
||||||
|
cls_map_path: ./data/processed/cate_id_cate_name_map.json
|
||||||
|
onnx_path: ./assets/model.onnx
|
||||||
9
quickdraw_bot/assets/dvc.yaml
Normal file
9
quickdraw_bot/assets/dvc.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
metrics:
|
||||||
|
- ../doc/exp/train/metrics.json
|
||||||
|
- ../doc/exp/eval/metrics.json
|
||||||
|
plots:
|
||||||
|
- ../doc/exp/train/plots/metrics:
|
||||||
|
x: step
|
||||||
|
- ../doc/exp/eval/plots/metrics:
|
||||||
|
x: step
|
||||||
|
- ../doc/exp/eval/plots/images
|
||||||
5
quickdraw_bot/assets/model.onnx.dvc
Normal file
5
quickdraw_bot/assets/model.onnx.dvc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
outs:
|
||||||
|
- md5: 5a641ce9dc5db7b16a4868773eb968dc
|
||||||
|
size: 1755967
|
||||||
|
hash: md5
|
||||||
|
path: model.onnx
|
||||||
5
quickdraw_bot/assets/model.pth.dvc
Normal file
5
quickdraw_bot/assets/model.pth.dvc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
outs:
|
||||||
|
- md5: 263f47ef298fee74aed6acc3a316e7ad
|
||||||
|
size: 1701245
|
||||||
|
hash: md5
|
||||||
|
path: model.pth
|
||||||
@ -1,6 +1,6 @@
|
|||||||
outs:
|
outs:
|
||||||
- md5: f46c877020a059df22fc383cd2f0a0bb.dir
|
- md5: dd93e82604be92816a10bfb1e709edf2.dir
|
||||||
size: 3
|
size: 2306020784
|
||||||
nfiles: 1
|
nfiles: 20
|
||||||
hash: md5
|
hash: md5
|
||||||
path: data
|
path: data
|
||||||
|
|||||||
8
quickdraw_bot/doc/exp/eval/metrics.json
Normal file
8
quickdraw_bot/doc/exp/eval/metrics.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"test": {
|
||||||
|
"accuracy": 0.7296500205993652,
|
||||||
|
"precision": 0.7283352017402649,
|
||||||
|
"recall": 0.7292018532752991,
|
||||||
|
"f1": 0.723344087600708
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 174 KiB |
@ -0,0 +1,2 @@
|
|||||||
|
step accuracy
|
||||||
|
0 0.7296500205993652
|
||||||
|
2
quickdraw_bot/doc/exp/eval/plots/metrics/test/f1.tsv
Normal file
2
quickdraw_bot/doc/exp/eval/plots/metrics/test/f1.tsv
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
step f1
|
||||||
|
0 0.723344087600708
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
step precision
|
||||||
|
0 0.7283352017402649
|
||||||
|
2
quickdraw_bot/doc/exp/eval/plots/metrics/test/recall.tsv
Normal file
2
quickdraw_bot/doc/exp/eval/plots/metrics/test/recall.tsv
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
step recall
|
||||||
|
0 0.7292018532752991
|
||||||
|
17
quickdraw_bot/doc/exp/train/metrics.json
Normal file
17
quickdraw_bot/doc/exp/train/metrics.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"train": {
|
||||||
|
"loss": 1.992799331665039,
|
||||||
|
"accuracy": 0.4883750081062317,
|
||||||
|
"precision": 0.48363304138183594,
|
||||||
|
"recall": 0.4885570704936981,
|
||||||
|
"f1": 0.4849509298801422
|
||||||
|
},
|
||||||
|
"valid": {
|
||||||
|
"loss": 1.4377805100211614,
|
||||||
|
"accuracy": 0.7260000109672546,
|
||||||
|
"precision": 0.723875880241394,
|
||||||
|
"recall": 0.7256932258605957,
|
||||||
|
"f1": 0.7193899154663086
|
||||||
|
},
|
||||||
|
"step": 29
|
||||||
|
}
|
||||||
31
quickdraw_bot/doc/exp/train/plots/metrics/train/accuracy.tsv
Normal file
31
quickdraw_bot/doc/exp/train/plots/metrics/train/accuracy.tsv
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
step accuracy
|
||||||
|
0 0.04570624977350235
|
||||||
|
1 0.08645624667406082
|
||||||
|
2 0.15463125705718994
|
||||||
|
3 0.20809374749660492
|
||||||
|
4 0.2542562484741211
|
||||||
|
5 0.29279375076293945
|
||||||
|
6 0.3235749900341034
|
||||||
|
7 0.346756249666214
|
||||||
|
8 0.363993763923645
|
||||||
|
9 0.3763374984264374
|
||||||
|
10 0.3868750035762787
|
||||||
|
11 0.39285001158714294
|
||||||
|
12 0.400112509727478
|
||||||
|
13 0.4029250144958496
|
||||||
|
14 0.403425008058548
|
||||||
|
15 0.4108937382698059
|
||||||
|
16 0.42086875438690186
|
||||||
|
17 0.43145623803138733
|
||||||
|
18 0.44205623865127563
|
||||||
|
19 0.44743749499320984
|
||||||
|
20 0.45317500829696655
|
||||||
|
21 0.4583125114440918
|
||||||
|
22 0.45945000648498535
|
||||||
|
23 0.4590874910354614
|
||||||
|
24 0.462799996137619
|
||||||
|
25 0.46361875534057617
|
||||||
|
26 0.47360000014305115
|
||||||
|
27 0.47944375872612
|
||||||
|
28 0.4831624925136566
|
||||||
|
29 0.4883750081062317
|
||||||
|
31
quickdraw_bot/doc/exp/train/plots/metrics/train/f1.tsv
Normal file
31
quickdraw_bot/doc/exp/train/plots/metrics/train/f1.tsv
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
step f1
|
||||||
|
0 0.03369621932506561
|
||||||
|
1 0.08265631645917892
|
||||||
|
2 0.14480535686016083
|
||||||
|
3 0.1954474151134491
|
||||||
|
4 0.24400727450847626
|
||||||
|
5 0.2852896749973297
|
||||||
|
6 0.3165817856788635
|
||||||
|
7 0.34051138162612915
|
||||||
|
8 0.3579234480857849
|
||||||
|
9 0.3706662654876709
|
||||||
|
10 0.3813643753528595
|
||||||
|
11 0.38740092515945435
|
||||||
|
12 0.3947397768497467
|
||||||
|
13 0.3978673219680786
|
||||||
|
14 0.3983455300331116
|
||||||
|
15 0.4061855971813202
|
||||||
|
16 0.41634228825569153
|
||||||
|
17 0.4270275831222534
|
||||||
|
18 0.4378680884838104
|
||||||
|
19 0.4433649480342865
|
||||||
|
20 0.44917452335357666
|
||||||
|
21 0.45438480377197266
|
||||||
|
22 0.45568108558654785
|
||||||
|
23 0.45533287525177
|
||||||
|
24 0.45924824476242065
|
||||||
|
25 0.45992523431777954
|
||||||
|
26 0.4698502719402313
|
||||||
|
27 0.47596246004104614
|
||||||
|
28 0.4798404574394226
|
||||||
|
29 0.4849509298801422
|
||||||
|
31
quickdraw_bot/doc/exp/train/plots/metrics/train/loss.tsv
Normal file
31
quickdraw_bot/doc/exp/train/plots/metrics/train/loss.tsv
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
step loss
|
||||||
|
0 4.0223345439910885
|
||||||
|
1 3.1446908485412597
|
||||||
|
2 2.845902690887451
|
||||||
|
3 2.7091702819824217
|
||||||
|
4 2.5876311504364016
|
||||||
|
5 2.4898329914093016
|
||||||
|
6 2.4078801975250244
|
||||||
|
7 2.3469735752105714
|
||||||
|
8 2.3044276081085204
|
||||||
|
9 2.2692713054656983
|
||||||
|
10 2.2433441226959228
|
||||||
|
11 2.2251542106628417
|
||||||
|
12 2.2075239395141604
|
||||||
|
13 2.199652731704712
|
||||||
|
14 2.2003354278564453
|
||||||
|
15 2.1802532527923586
|
||||||
|
16 2.155798588562012
|
||||||
|
17 2.127256035041809
|
||||||
|
18 2.1059615146636963
|
||||||
|
19 2.0936844367980956
|
||||||
|
20 2.077068444442749
|
||||||
|
21 2.064746246147156
|
||||||
|
22 2.0619221328735353
|
||||||
|
23 2.058998599433899
|
||||||
|
24 2.0547973834991455
|
||||||
|
25 2.0490142166137697
|
||||||
|
26 2.0298474113464358
|
||||||
|
27 2.0157182762145998
|
||||||
|
28 2.006533228492737
|
||||||
|
29 1.992799331665039
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
step precision
|
||||||
|
0 0.055038902908563614
|
||||||
|
1 0.08688722550868988
|
||||||
|
2 0.14544154703617096
|
||||||
|
3 0.19598175585269928
|
||||||
|
4 0.24326808750629425
|
||||||
|
5 0.28354209661483765
|
||||||
|
6 0.3143269121646881
|
||||||
|
7 0.33853644132614136
|
||||||
|
8 0.3557613492012024
|
||||||
|
9 0.3688707649707794
|
||||||
|
10 0.37962812185287476
|
||||||
|
11 0.3855380415916443
|
||||||
|
12 0.3929717540740967
|
||||||
|
13 0.3963885009288788
|
||||||
|
14 0.39665019512176514
|
||||||
|
15 0.40454378724098206
|
||||||
|
16 0.41489875316619873
|
||||||
|
17 0.42552798986434937
|
||||||
|
18 0.43634524941444397
|
||||||
|
19 0.44186848402023315
|
||||||
|
20 0.4476196765899658
|
||||||
|
21 0.4529317021369934
|
||||||
|
22 0.4541561007499695
|
||||||
|
23 0.45390117168426514
|
||||||
|
24 0.45794767141342163
|
||||||
|
25 0.45853471755981445
|
||||||
|
26 0.46830785274505615
|
||||||
|
27 0.4746767580509186
|
||||||
|
28 0.47852134704589844
|
||||||
|
29 0.48363304138183594
|
||||||
|
31
quickdraw_bot/doc/exp/train/plots/metrics/train/recall.tsv
Normal file
31
quickdraw_bot/doc/exp/train/plots/metrics/train/recall.tsv
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
step recall
|
||||||
|
0 0.04566790908575058
|
||||||
|
1 0.08645831048488617
|
||||||
|
2 0.1547394096851349
|
||||||
|
3 0.2082621306180954
|
||||||
|
4 0.2544386386871338
|
||||||
|
5 0.29297617077827454
|
||||||
|
6 0.3237552046775818
|
||||||
|
7 0.346926212310791
|
||||||
|
8 0.364177942276001
|
||||||
|
9 0.3765082359313965
|
||||||
|
10 0.3870483636856079
|
||||||
|
11 0.39303654432296753
|
||||||
|
12 0.4002862572669983
|
||||||
|
13 0.403104305267334
|
||||||
|
14 0.4036043882369995
|
||||||
|
15 0.4110710322856903
|
||||||
|
16 0.42104363441467285
|
||||||
|
17 0.4316273629665375
|
||||||
|
18 0.44224199652671814
|
||||||
|
19 0.44761422276496887
|
||||||
|
20 0.4533519148826599
|
||||||
|
21 0.4584938883781433
|
||||||
|
22 0.45962250232696533
|
||||||
|
23 0.45926111936569214
|
||||||
|
24 0.46298152208328247
|
||||||
|
25 0.4637938141822815
|
||||||
|
26 0.47378331422805786
|
||||||
|
27 0.4796329736709595
|
||||||
|
28 0.4833483397960663
|
||||||
|
29 0.4885570704936981
|
||||||
|
31
quickdraw_bot/doc/exp/train/plots/metrics/valid/accuracy.tsv
Normal file
31
quickdraw_bot/doc/exp/train/plots/metrics/valid/accuracy.tsv
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
step accuracy
|
||||||
|
0 0.04039999842643738
|
||||||
|
1 0.1996999979019165
|
||||||
|
2 0.3260500133037567
|
||||||
|
3 0.4186500012874603
|
||||||
|
4 0.49950000643730164
|
||||||
|
5 0.5444499850273132
|
||||||
|
6 0.5720000267028809
|
||||||
|
7 0.5917500257492065
|
||||||
|
8 0.6093500256538391
|
||||||
|
9 0.6218000054359436
|
||||||
|
10 0.6304000020027161
|
||||||
|
11 0.6385499835014343
|
||||||
|
12 0.6404500007629395
|
||||||
|
13 0.6446499824523926
|
||||||
|
14 0.6463500261306763
|
||||||
|
15 0.6567999720573425
|
||||||
|
16 0.6672000288963318
|
||||||
|
17 0.6779500246047974
|
||||||
|
18 0.6841999888420105
|
||||||
|
19 0.6896499991416931
|
||||||
|
20 0.6960499882698059
|
||||||
|
21 0.6970999836921692
|
||||||
|
22 0.7006000280380249
|
||||||
|
23 0.70169997215271
|
||||||
|
24 0.7010999917984009
|
||||||
|
25 0.7071499824523926
|
||||||
|
26 0.7135000228881836
|
||||||
|
27 0.7184500098228455
|
||||||
|
28 0.7211499810218811
|
||||||
|
29 0.7260000109672546
|
||||||
|
31
quickdraw_bot/doc/exp/train/plots/metrics/valid/f1.tsv
Normal file
31
quickdraw_bot/doc/exp/train/plots/metrics/valid/f1.tsv
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
step f1
|
||||||
|
0 0.026379385963082314
|
||||||
|
1 0.1792948693037033
|
||||||
|
2 0.2925271987915039
|
||||||
|
3 0.3919405937194824
|
||||||
|
4 0.47940874099731445
|
||||||
|
5 0.5274306535720825
|
||||||
|
6 0.556631863117218
|
||||||
|
7 0.576585054397583
|
||||||
|
8 0.5947144031524658
|
||||||
|
9 0.6082352995872498
|
||||||
|
10 0.6178301572799683
|
||||||
|
11 0.6262512803077698
|
||||||
|
12 0.6278425455093384
|
||||||
|
13 0.6331325769424438
|
||||||
|
14 0.6344878673553467
|
||||||
|
15 0.6453059315681458
|
||||||
|
16 0.6570700407028198
|
||||||
|
17 0.6685804128646851
|
||||||
|
18 0.6745381355285645
|
||||||
|
19 0.6804145574569702
|
||||||
|
20 0.6874032020568848
|
||||||
|
21 0.6882768273353577
|
||||||
|
22 0.6920892596244812
|
||||||
|
23 0.693403959274292
|
||||||
|
24 0.6925287246704102
|
||||||
|
25 0.6985740661621094
|
||||||
|
26 0.7053770422935486
|
||||||
|
27 0.7106728553771973
|
||||||
|
28 0.7137280106544495
|
||||||
|
29 0.7193899154663086
|
||||||
|
31
quickdraw_bot/doc/exp/train/plots/metrics/valid/loss.tsv
Normal file
31
quickdraw_bot/doc/exp/train/plots/metrics/valid/loss.tsv
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
step loss
|
||||||
|
0 3.590050941781153
|
||||||
|
1 2.7546746489367906
|
||||||
|
2 2.5154529040372826
|
||||||
|
3 2.2843858411040485
|
||||||
|
4 2.0942421291447895
|
||||||
|
5 1.9563061029096194
|
||||||
|
6 1.8598378127134298
|
||||||
|
7 1.7950012200995336
|
||||||
|
8 1.7452865039245993
|
||||||
|
9 1.7100401875338977
|
||||||
|
10 1.6846234753162046
|
||||||
|
11 1.6670298757432382
|
||||||
|
12 1.6579805748372138
|
||||||
|
13 1.6494467530069472
|
||||||
|
14 1.6449626789817327
|
||||||
|
15 1.6121938424774362
|
||||||
|
16 1.5864867349214191
|
||||||
|
17 1.5629751878448679
|
||||||
|
18 1.5430825224405602
|
||||||
|
19 1.5310050943229772
|
||||||
|
20 1.5175003311302089
|
||||||
|
21 1.5117049654827843
|
||||||
|
22 1.5065134658089168
|
||||||
|
23 1.5018350715878643
|
||||||
|
24 1.5016868627524074
|
||||||
|
25 1.4859640613386902
|
||||||
|
26 1.4698024339313749
|
||||||
|
27 1.4584274548518508
|
||||||
|
28 1.4490519852577886
|
||||||
|
29 1.4377805100211614
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
step precision
|
||||||
|
0 0.07338898628950119
|
||||||
|
1 0.18911437690258026
|
||||||
|
2 0.32449209690093994
|
||||||
|
3 0.4227263331413269
|
||||||
|
4 0.49964380264282227
|
||||||
|
5 0.5427083373069763
|
||||||
|
6 0.5689945220947266
|
||||||
|
7 0.5907210111618042
|
||||||
|
8 0.6088747978210449
|
||||||
|
9 0.620964527130127
|
||||||
|
10 0.6287857294082642
|
||||||
|
11 0.6372801065444946
|
||||||
|
12 0.6391931772232056
|
||||||
|
13 0.643118143081665
|
||||||
|
14 0.6445475816726685
|
||||||
|
15 0.655581533908844
|
||||||
|
16 0.6666973829269409
|
||||||
|
17 0.6765724420547485
|
||||||
|
18 0.6822240352630615
|
||||||
|
19 0.6881765127182007
|
||||||
|
20 0.6948975920677185
|
||||||
|
21 0.695229172706604
|
||||||
|
22 0.6998213529586792
|
||||||
|
23 0.7005149126052856
|
||||||
|
24 0.6999821662902832
|
||||||
|
25 0.7058628797531128
|
||||||
|
26 0.7112910151481628
|
||||||
|
27 0.7165747880935669
|
||||||
|
28 0.7200020551681519
|
||||||
|
29 0.723875880241394
|
||||||
|
31
quickdraw_bot/doc/exp/train/plots/metrics/valid/recall.tsv
Normal file
31
quickdraw_bot/doc/exp/train/plots/metrics/valid/recall.tsv
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
step recall
|
||||||
|
0 0.04072221741080284
|
||||||
|
1 0.19861623644828796
|
||||||
|
2 0.32381999492645264
|
||||||
|
3 0.41670864820480347
|
||||||
|
4 0.4983140230178833
|
||||||
|
5 0.5435963273048401
|
||||||
|
6 0.5713088512420654
|
||||||
|
7 0.5910568237304688
|
||||||
|
8 0.608674168586731
|
||||||
|
9 0.6212138533592224
|
||||||
|
10 0.6297356486320496
|
||||||
|
11 0.6379297971725464
|
||||||
|
12 0.6398895382881165
|
||||||
|
13 0.6441172361373901
|
||||||
|
14 0.6458127498626709
|
||||||
|
15 0.6563705205917358
|
||||||
|
16 0.6666883230209351
|
||||||
|
17 0.6775047779083252
|
||||||
|
18 0.6838763952255249
|
||||||
|
19 0.6894745826721191
|
||||||
|
20 0.6957231163978577
|
||||||
|
21 0.6967899203300476
|
||||||
|
22 0.7002253532409668
|
||||||
|
23 0.7013353109359741
|
||||||
|
24 0.7007752656936646
|
||||||
|
25 0.706775963306427
|
||||||
|
26 0.7130882740020752
|
||||||
|
27 0.7181775569915771
|
||||||
|
28 0.7208318114280701
|
||||||
|
29 0.7256932258605957
|
||||||
|
114
quickdraw_bot/doc/exp/train/report.html
Normal file
114
quickdraw_bot/doc/exp/train/report.html
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="refresh" content="5">
|
||||||
|
<title>DVC Plot</title>
|
||||||
|
|
||||||
|
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/vega@5.20.2"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/vega-lite@5.2.0"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/vega-embed@6.18.2"></script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
table {
|
||||||
|
border-spacing: 15px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div id="metrics_json" style="text-align: center; padding: 10x">
|
||||||
|
<p>metrics_json</p>
|
||||||
|
<div style="display: flex;justify-content: center;">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr><th style="text-align: right;"> train.loss</th><th style="text-align: right;"> train.accuracy</th><th style="text-align: right;"> train.precision</th><th style="text-align: right;"> train.recall</th><th style="text-align: right;"> train.f1</th><th style="text-align: right;"> valid.loss</th><th style="text-align: right;"> valid.accuracy</th><th style="text-align: right;"> valid.precision</th><th style="text-align: right;"> valid.recall</th><th style="text-align: right;"> valid.f1</th><th style="text-align: right;"> step</th></tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr><td style="text-align: right;"> 1.9928</td><td style="text-align: right;"> 0.488375</td><td style="text-align: right;"> 0.483633</td><td style="text-align: right;"> 0.488557</td><td style="text-align: right;"> 0.484951</td><td style="text-align: right;"> 1.43778</td><td style="text-align: right;"> 0.726</td><td style="text-align: right;"> 0.723876</td><td style="text-align: right;"> 0.725693</td><td style="text-align: right;"> 0.71939</td><td style="text-align: right;"> 29</td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id = "static_valid_f1">
|
||||||
|
<script type = "text/javascript">
|
||||||
|
var spec = {"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"values": [{"step": "0", "f1": "0.026379385963082314", "rev": "workspace"}, {"step": "1", "f1": "0.1792948693037033", "rev": "workspace"}, {"step": "2", "f1": "0.2925271987915039", "rev": "workspace"}, {"step": "3", "f1": "0.3919405937194824", "rev": "workspace"}, {"step": "4", "f1": "0.47940874099731445", "rev": "workspace"}, {"step": "5", "f1": "0.5274306535720825", "rev": "workspace"}, {"step": "6", "f1": "0.556631863117218", "rev": "workspace"}, {"step": "7", "f1": "0.576585054397583", "rev": "workspace"}, {"step": "8", "f1": "0.5947144031524658", "rev": "workspace"}, {"step": "9", "f1": "0.6082352995872498", "rev": "workspace"}, {"step": "10", "f1": "0.6178301572799683", "rev": "workspace"}, {"step": "11", "f1": "0.6262512803077698", "rev": "workspace"}, {"step": "12", "f1": "0.6278425455093384", "rev": "workspace"}, {"step": "13", "f1": "0.6331325769424438", "rev": "workspace"}, {"step": "14", "f1": "0.6344878673553467", "rev": "workspace"}, {"step": "15", "f1": "0.6453059315681458", "rev": "workspace"}, {"step": "16", "f1": "0.6570700407028198", "rev": "workspace"}, {"step": "17", "f1": "0.6685804128646851", "rev": "workspace"}, {"step": "18", "f1": "0.6745381355285645", "rev": "workspace"}, {"step": "19", "f1": "0.6804145574569702", "rev": "workspace"}, {"step": "20", "f1": "0.6874032020568848", "rev": "workspace"}, {"step": "21", "f1": "0.6882768273353577", "rev": "workspace"}, {"step": "22", "f1": "0.6920892596244812", "rev": "workspace"}, {"step": "23", "f1": "0.693403959274292", "rev": "workspace"}, {"step": "24", "f1": "0.6925287246704102", "rev": "workspace"}, {"step": "25", "f1": "0.6985740661621094", "rev": "workspace"}, {"step": "26", "f1": "0.7053770422935486", "rev": "workspace"}, {"step": "27", "f1": "0.7106728553771973", "rev": "workspace"}, {"step": "28", "f1": "0.7137280106544495", "rev": "workspace"}, {"step": "29", "f1": "0.7193899154663086", "rev": "workspace"}]}, "title": {"text": "valid/f1", "anchor": "middle"}, "width": 300, "height": 300, "params": [{"name": "smooth", "value": 0.001, "bind": {"input": "range", "min": 0.001, "max": 1, "step": 0.001}}], "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "color": {"field": "rev", "scale": {"domain": ["workspace"], "range": ["#945dd6"]}}, "strokeDash": {}}, "layer": [{"layer": [{"params": [{"name": "grid", "select": "interval", "bind": "scales"}], "mark": "line"}, {"transform": [{"filter": {"param": "hover", "empty": false}}], "mark": "point"}], "encoding": {"y": {"field": "f1", "type": "quantitative", "title": "f1", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}, "transform": [{"loess": "f1", "on": "step", "groupby": ["rev"], "bandwidth": {"signal": "smooth"}}]}, {"mark": {"type": "line", "opacity": 0.2}, "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "y": {"field": "f1", "type": "quantitative", "title": "f1", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"mark": {"type": "circle", "size": 10}, "encoding": {"x": {"aggregate": "max", "field": "step", "type": "quantitative", "title": "step"}, "y": {"aggregate": {"argmax": "step"}, "field": "f1", "type": "quantitative", "title": "f1", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"transform": [{"calculate": "datum.rev", "as": "pivot_field"}, {"pivot": "pivot_field", "op": "mean", "value": "f1", "groupby": ["step"]}], "mark": {"type": "rule", "tooltip": {"content": "data"}, "stroke": "grey"}, "encoding": {"opacity": {"condition": {"value": 0.3, "param": "hover", "empty": false}, "value": 0}}, "params": [{"name": "hover", "select": {"type": "point", "fields": ["step"], "nearest": true, "on": "mouseover", "clear": "mouseout"}}]}]};
|
||||||
|
vegaEmbed('#static_valid_f1', spec);
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id = "static_valid_loss">
|
||||||
|
<script type = "text/javascript">
|
||||||
|
var spec = {"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"values": [{"step": "0", "loss": "3.590050941781153", "rev": "workspace"}, {"step": "1", "loss": "2.7546746489367906", "rev": "workspace"}, {"step": "2", "loss": "2.5154529040372826", "rev": "workspace"}, {"step": "3", "loss": "2.2843858411040485", "rev": "workspace"}, {"step": "4", "loss": "2.0942421291447895", "rev": "workspace"}, {"step": "5", "loss": "1.9563061029096194", "rev": "workspace"}, {"step": "6", "loss": "1.8598378127134298", "rev": "workspace"}, {"step": "7", "loss": "1.7950012200995336", "rev": "workspace"}, {"step": "8", "loss": "1.7452865039245993", "rev": "workspace"}, {"step": "9", "loss": "1.7100401875338977", "rev": "workspace"}, {"step": "10", "loss": "1.6846234753162046", "rev": "workspace"}, {"step": "11", "loss": "1.6670298757432382", "rev": "workspace"}, {"step": "12", "loss": "1.6579805748372138", "rev": "workspace"}, {"step": "13", "loss": "1.6494467530069472", "rev": "workspace"}, {"step": "14", "loss": "1.6449626789817327", "rev": "workspace"}, {"step": "15", "loss": "1.6121938424774362", "rev": "workspace"}, {"step": "16", "loss": "1.5864867349214191", "rev": "workspace"}, {"step": "17", "loss": "1.5629751878448679", "rev": "workspace"}, {"step": "18", "loss": "1.5430825224405602", "rev": "workspace"}, {"step": "19", "loss": "1.5310050943229772", "rev": "workspace"}, {"step": "20", "loss": "1.5175003311302089", "rev": "workspace"}, {"step": "21", "loss": "1.5117049654827843", "rev": "workspace"}, {"step": "22", "loss": "1.5065134658089168", "rev": "workspace"}, {"step": "23", "loss": "1.5018350715878643", "rev": "workspace"}, {"step": "24", "loss": "1.5016868627524074", "rev": "workspace"}, {"step": "25", "loss": "1.4859640613386902", "rev": "workspace"}, {"step": "26", "loss": "1.4698024339313749", "rev": "workspace"}, {"step": "27", "loss": "1.4584274548518508", "rev": "workspace"}, {"step": "28", "loss": "1.4490519852577886", "rev": "workspace"}, {"step": "29", "loss": "1.4377805100211614", "rev": "workspace"}]}, "title": {"text": "valid/loss", "anchor": "middle"}, "width": 300, "height": 300, "params": [{"name": "smooth", "value": 0.001, "bind": {"input": "range", "min": 0.001, "max": 1, "step": 0.001}}], "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "color": {"field": "rev", "scale": {"domain": ["workspace"], "range": ["#945dd6"]}}, "strokeDash": {}}, "layer": [{"layer": [{"params": [{"name": "grid", "select": "interval", "bind": "scales"}], "mark": "line"}, {"transform": [{"filter": {"param": "hover", "empty": false}}], "mark": "point"}], "encoding": {"y": {"field": "loss", "type": "quantitative", "title": "loss", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}, "transform": [{"loess": "loss", "on": "step", "groupby": ["rev"], "bandwidth": {"signal": "smooth"}}]}, {"mark": {"type": "line", "opacity": 0.2}, "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "y": {"field": "loss", "type": "quantitative", "title": "loss", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"mark": {"type": "circle", "size": 10}, "encoding": {"x": {"aggregate": "max", "field": "step", "type": "quantitative", "title": "step"}, "y": {"aggregate": {"argmax": "step"}, "field": "loss", "type": "quantitative", "title": "loss", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"transform": [{"calculate": "datum.rev", "as": "pivot_field"}, {"pivot": "pivot_field", "op": "mean", "value": "loss", "groupby": ["step"]}], "mark": {"type": "rule", "tooltip": {"content": "data"}, "stroke": "grey"}, "encoding": {"opacity": {"condition": {"value": 0.3, "param": "hover", "empty": false}, "value": 0}}, "params": [{"name": "hover", "select": {"type": "point", "fields": ["step"], "nearest": true, "on": "mouseover", "clear": "mouseout"}}]}]};
|
||||||
|
vegaEmbed('#static_valid_loss', spec);
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id = "static_valid_accuracy">
|
||||||
|
<script type = "text/javascript">
|
||||||
|
var spec = {"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"values": [{"step": "0", "accuracy": "0.04039999842643738", "rev": "workspace"}, {"step": "1", "accuracy": "0.1996999979019165", "rev": "workspace"}, {"step": "2", "accuracy": "0.3260500133037567", "rev": "workspace"}, {"step": "3", "accuracy": "0.4186500012874603", "rev": "workspace"}, {"step": "4", "accuracy": "0.49950000643730164", "rev": "workspace"}, {"step": "5", "accuracy": "0.5444499850273132", "rev": "workspace"}, {"step": "6", "accuracy": "0.5720000267028809", "rev": "workspace"}, {"step": "7", "accuracy": "0.5917500257492065", "rev": "workspace"}, {"step": "8", "accuracy": "0.6093500256538391", "rev": "workspace"}, {"step": "9", "accuracy": "0.6218000054359436", "rev": "workspace"}, {"step": "10", "accuracy": "0.6304000020027161", "rev": "workspace"}, {"step": "11", "accuracy": "0.6385499835014343", "rev": "workspace"}, {"step": "12", "accuracy": "0.6404500007629395", "rev": "workspace"}, {"step": "13", "accuracy": "0.6446499824523926", "rev": "workspace"}, {"step": "14", "accuracy": "0.6463500261306763", "rev": "workspace"}, {"step": "15", "accuracy": "0.6567999720573425", "rev": "workspace"}, {"step": "16", "accuracy": "0.6672000288963318", "rev": "workspace"}, {"step": "17", "accuracy": "0.6779500246047974", "rev": "workspace"}, {"step": "18", "accuracy": "0.6841999888420105", "rev": "workspace"}, {"step": "19", "accuracy": "0.6896499991416931", "rev": "workspace"}, {"step": "20", "accuracy": "0.6960499882698059", "rev": "workspace"}, {"step": "21", "accuracy": "0.6970999836921692", "rev": "workspace"}, {"step": "22", "accuracy": "0.7006000280380249", "rev": "workspace"}, {"step": "23", "accuracy": "0.70169997215271", "rev": "workspace"}, {"step": "24", "accuracy": "0.7010999917984009", "rev": "workspace"}, {"step": "25", "accuracy": "0.7071499824523926", "rev": "workspace"}, {"step": "26", "accuracy": "0.7135000228881836", "rev": "workspace"}, {"step": "27", "accuracy": "0.7184500098228455", "rev": "workspace"}, {"step": "28", "accuracy": "0.7211499810218811", "rev": "workspace"}, {"step": "29", "accuracy": "0.7260000109672546", "rev": "workspace"}]}, "title": {"text": "valid/accuracy", "anchor": "middle"}, "width": 300, "height": 300, "params": [{"name": "smooth", "value": 0.001, "bind": {"input": "range", "min": 0.001, "max": 1, "step": 0.001}}], "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "color": {"field": "rev", "scale": {"domain": ["workspace"], "range": ["#945dd6"]}}, "strokeDash": {}}, "layer": [{"layer": [{"params": [{"name": "grid", "select": "interval", "bind": "scales"}], "mark": "line"}, {"transform": [{"filter": {"param": "hover", "empty": false}}], "mark": "point"}], "encoding": {"y": {"field": "accuracy", "type": "quantitative", "title": "accuracy", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}, "transform": [{"loess": "accuracy", "on": "step", "groupby": ["rev"], "bandwidth": {"signal": "smooth"}}]}, {"mark": {"type": "line", "opacity": 0.2}, "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "y": {"field": "accuracy", "type": "quantitative", "title": "accuracy", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"mark": {"type": "circle", "size": 10}, "encoding": {"x": {"aggregate": "max", "field": "step", "type": "quantitative", "title": "step"}, "y": {"aggregate": {"argmax": "step"}, "field": "accuracy", "type": "quantitative", "title": "accuracy", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"transform": [{"calculate": "datum.rev", "as": "pivot_field"}, {"pivot": "pivot_field", "op": "mean", "value": "accuracy", "groupby": ["step"]}], "mark": {"type": "rule", "tooltip": {"content": "data"}, "stroke": "grey"}, "encoding": {"opacity": {"condition": {"value": 0.3, "param": "hover", "empty": false}, "value": 0}}, "params": [{"name": "hover", "select": {"type": "point", "fields": ["step"], "nearest": true, "on": "mouseover", "clear": "mouseout"}}]}]};
|
||||||
|
vegaEmbed('#static_valid_accuracy', spec);
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id = "static_valid_recall">
|
||||||
|
<script type = "text/javascript">
|
||||||
|
var spec = {"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"values": [{"step": "0", "recall": "0.04072221741080284", "rev": "workspace"}, {"step": "1", "recall": "0.19861623644828796", "rev": "workspace"}, {"step": "2", "recall": "0.32381999492645264", "rev": "workspace"}, {"step": "3", "recall": "0.41670864820480347", "rev": "workspace"}, {"step": "4", "recall": "0.4983140230178833", "rev": "workspace"}, {"step": "5", "recall": "0.5435963273048401", "rev": "workspace"}, {"step": "6", "recall": "0.5713088512420654", "rev": "workspace"}, {"step": "7", "recall": "0.5910568237304688", "rev": "workspace"}, {"step": "8", "recall": "0.608674168586731", "rev": "workspace"}, {"step": "9", "recall": "0.6212138533592224", "rev": "workspace"}, {"step": "10", "recall": "0.6297356486320496", "rev": "workspace"}, {"step": "11", "recall": "0.6379297971725464", "rev": "workspace"}, {"step": "12", "recall": "0.6398895382881165", "rev": "workspace"}, {"step": "13", "recall": "0.6441172361373901", "rev": "workspace"}, {"step": "14", "recall": "0.6458127498626709", "rev": "workspace"}, {"step": "15", "recall": "0.6563705205917358", "rev": "workspace"}, {"step": "16", "recall": "0.6666883230209351", "rev": "workspace"}, {"step": "17", "recall": "0.6775047779083252", "rev": "workspace"}, {"step": "18", "recall": "0.6838763952255249", "rev": "workspace"}, {"step": "19", "recall": "0.6894745826721191", "rev": "workspace"}, {"step": "20", "recall": "0.6957231163978577", "rev": "workspace"}, {"step": "21", "recall": "0.6967899203300476", "rev": "workspace"}, {"step": "22", "recall": "0.7002253532409668", "rev": "workspace"}, {"step": "23", "recall": "0.7013353109359741", "rev": "workspace"}, {"step": "24", "recall": "0.7007752656936646", "rev": "workspace"}, {"step": "25", "recall": "0.706775963306427", "rev": "workspace"}, {"step": "26", "recall": "0.7130882740020752", "rev": "workspace"}, {"step": "27", "recall": "0.7181775569915771", "rev": "workspace"}, {"step": "28", "recall": "0.7208318114280701", "rev": "workspace"}, {"step": "29", "recall": "0.7256932258605957", "rev": "workspace"}]}, "title": {"text": "valid/recall", "anchor": "middle"}, "width": 300, "height": 300, "params": [{"name": "smooth", "value": 0.001, "bind": {"input": "range", "min": 0.001, "max": 1, "step": 0.001}}], "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "color": {"field": "rev", "scale": {"domain": ["workspace"], "range": ["#945dd6"]}}, "strokeDash": {}}, "layer": [{"layer": [{"params": [{"name": "grid", "select": "interval", "bind": "scales"}], "mark": "line"}, {"transform": [{"filter": {"param": "hover", "empty": false}}], "mark": "point"}], "encoding": {"y": {"field": "recall", "type": "quantitative", "title": "recall", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}, "transform": [{"loess": "recall", "on": "step", "groupby": ["rev"], "bandwidth": {"signal": "smooth"}}]}, {"mark": {"type": "line", "opacity": 0.2}, "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "y": {"field": "recall", "type": "quantitative", "title": "recall", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"mark": {"type": "circle", "size": 10}, "encoding": {"x": {"aggregate": "max", "field": "step", "type": "quantitative", "title": "step"}, "y": {"aggregate": {"argmax": "step"}, "field": "recall", "type": "quantitative", "title": "recall", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"transform": [{"calculate": "datum.rev", "as": "pivot_field"}, {"pivot": "pivot_field", "op": "mean", "value": "recall", "groupby": ["step"]}], "mark": {"type": "rule", "tooltip": {"content": "data"}, "stroke": "grey"}, "encoding": {"opacity": {"condition": {"value": 0.3, "param": "hover", "empty": false}, "value": 0}}, "params": [{"name": "hover", "select": {"type": "point", "fields": ["step"], "nearest": true, "on": "mouseover", "clear": "mouseout"}}]}]};
|
||||||
|
vegaEmbed('#static_valid_recall', spec);
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id = "static_valid_precision">
|
||||||
|
<script type = "text/javascript">
|
||||||
|
var spec = {"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"values": [{"step": "0", "precision": "0.07338898628950119", "rev": "workspace"}, {"step": "1", "precision": "0.18911437690258026", "rev": "workspace"}, {"step": "2", "precision": "0.32449209690093994", "rev": "workspace"}, {"step": "3", "precision": "0.4227263331413269", "rev": "workspace"}, {"step": "4", "precision": "0.49964380264282227", "rev": "workspace"}, {"step": "5", "precision": "0.5427083373069763", "rev": "workspace"}, {"step": "6", "precision": "0.5689945220947266", "rev": "workspace"}, {"step": "7", "precision": "0.5907210111618042", "rev": "workspace"}, {"step": "8", "precision": "0.6088747978210449", "rev": "workspace"}, {"step": "9", "precision": "0.620964527130127", "rev": "workspace"}, {"step": "10", "precision": "0.6287857294082642", "rev": "workspace"}, {"step": "11", "precision": "0.6372801065444946", "rev": "workspace"}, {"step": "12", "precision": "0.6391931772232056", "rev": "workspace"}, {"step": "13", "precision": "0.643118143081665", "rev": "workspace"}, {"step": "14", "precision": "0.6445475816726685", "rev": "workspace"}, {"step": "15", "precision": "0.655581533908844", "rev": "workspace"}, {"step": "16", "precision": "0.6666973829269409", "rev": "workspace"}, {"step": "17", "precision": "0.6765724420547485", "rev": "workspace"}, {"step": "18", "precision": "0.6822240352630615", "rev": "workspace"}, {"step": "19", "precision": "0.6881765127182007", "rev": "workspace"}, {"step": "20", "precision": "0.6948975920677185", "rev": "workspace"}, {"step": "21", "precision": "0.695229172706604", "rev": "workspace"}, {"step": "22", "precision": "0.6998213529586792", "rev": "workspace"}, {"step": "23", "precision": "0.7005149126052856", "rev": "workspace"}, {"step": "24", "precision": "0.6999821662902832", "rev": "workspace"}, {"step": "25", "precision": "0.7058628797531128", "rev": "workspace"}, {"step": "26", "precision": "0.7112910151481628", "rev": "workspace"}, {"step": "27", "precision": "0.7165747880935669", "rev": "workspace"}, {"step": "28", "precision": "0.7200020551681519", "rev": "workspace"}, {"step": "29", "precision": "0.723875880241394", "rev": "workspace"}]}, "title": {"text": "valid/precision", "anchor": "middle"}, "width": 300, "height": 300, "params": [{"name": "smooth", "value": 0.001, "bind": {"input": "range", "min": 0.001, "max": 1, "step": 0.001}}], "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "color": {"field": "rev", "scale": {"domain": ["workspace"], "range": ["#945dd6"]}}, "strokeDash": {}}, "layer": [{"layer": [{"params": [{"name": "grid", "select": "interval", "bind": "scales"}], "mark": "line"}, {"transform": [{"filter": {"param": "hover", "empty": false}}], "mark": "point"}], "encoding": {"y": {"field": "precision", "type": "quantitative", "title": "precision", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}, "transform": [{"loess": "precision", "on": "step", "groupby": ["rev"], "bandwidth": {"signal": "smooth"}}]}, {"mark": {"type": "line", "opacity": 0.2}, "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "y": {"field": "precision", "type": "quantitative", "title": "precision", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"mark": {"type": "circle", "size": 10}, "encoding": {"x": {"aggregate": "max", "field": "step", "type": "quantitative", "title": "step"}, "y": {"aggregate": {"argmax": "step"}, "field": "precision", "type": "quantitative", "title": "precision", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"transform": [{"calculate": "datum.rev", "as": "pivot_field"}, {"pivot": "pivot_field", "op": "mean", "value": "precision", "groupby": ["step"]}], "mark": {"type": "rule", "tooltip": {"content": "data"}, "stroke": "grey"}, "encoding": {"opacity": {"condition": {"value": 0.3, "param": "hover", "empty": false}, "value": 0}}, "params": [{"name": "hover", "select": {"type": "point", "fields": ["step"], "nearest": true, "on": "mouseover", "clear": "mouseout"}}]}]};
|
||||||
|
vegaEmbed('#static_valid_precision', spec);
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id = "static_train_f1">
|
||||||
|
<script type = "text/javascript">
|
||||||
|
var spec = {"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"values": [{"step": "0", "f1": "0.03369621932506561", "rev": "workspace"}, {"step": "1", "f1": "0.08265631645917892", "rev": "workspace"}, {"step": "2", "f1": "0.14480535686016083", "rev": "workspace"}, {"step": "3", "f1": "0.1954474151134491", "rev": "workspace"}, {"step": "4", "f1": "0.24400727450847626", "rev": "workspace"}, {"step": "5", "f1": "0.2852896749973297", "rev": "workspace"}, {"step": "6", "f1": "0.3165817856788635", "rev": "workspace"}, {"step": "7", "f1": "0.34051138162612915", "rev": "workspace"}, {"step": "8", "f1": "0.3579234480857849", "rev": "workspace"}, {"step": "9", "f1": "0.3706662654876709", "rev": "workspace"}, {"step": "10", "f1": "0.3813643753528595", "rev": "workspace"}, {"step": "11", "f1": "0.38740092515945435", "rev": "workspace"}, {"step": "12", "f1": "0.3947397768497467", "rev": "workspace"}, {"step": "13", "f1": "0.3978673219680786", "rev": "workspace"}, {"step": "14", "f1": "0.3983455300331116", "rev": "workspace"}, {"step": "15", "f1": "0.4061855971813202", "rev": "workspace"}, {"step": "16", "f1": "0.41634228825569153", "rev": "workspace"}, {"step": "17", "f1": "0.4270275831222534", "rev": "workspace"}, {"step": "18", "f1": "0.4378680884838104", "rev": "workspace"}, {"step": "19", "f1": "0.4433649480342865", "rev": "workspace"}, {"step": "20", "f1": "0.44917452335357666", "rev": "workspace"}, {"step": "21", "f1": "0.45438480377197266", "rev": "workspace"}, {"step": "22", "f1": "0.45568108558654785", "rev": "workspace"}, {"step": "23", "f1": "0.45533287525177", "rev": "workspace"}, {"step": "24", "f1": "0.45924824476242065", "rev": "workspace"}, {"step": "25", "f1": "0.45992523431777954", "rev": "workspace"}, {"step": "26", "f1": "0.4698502719402313", "rev": "workspace"}, {"step": "27", "f1": "0.47596246004104614", "rev": "workspace"}, {"step": "28", "f1": "0.4798404574394226", "rev": "workspace"}, {"step": "29", "f1": "0.4849509298801422", "rev": "workspace"}]}, "title": {"text": "train/f1", "anchor": "middle"}, "width": 300, "height": 300, "params": [{"name": "smooth", "value": 0.001, "bind": {"input": "range", "min": 0.001, "max": 1, "step": 0.001}}], "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "color": {"field": "rev", "scale": {"domain": ["workspace"], "range": ["#945dd6"]}}, "strokeDash": {}}, "layer": [{"layer": [{"params": [{"name": "grid", "select": "interval", "bind": "scales"}], "mark": "line"}, {"transform": [{"filter": {"param": "hover", "empty": false}}], "mark": "point"}], "encoding": {"y": {"field": "f1", "type": "quantitative", "title": "f1", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}, "transform": [{"loess": "f1", "on": "step", "groupby": ["rev"], "bandwidth": {"signal": "smooth"}}]}, {"mark": {"type": "line", "opacity": 0.2}, "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "y": {"field": "f1", "type": "quantitative", "title": "f1", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"mark": {"type": "circle", "size": 10}, "encoding": {"x": {"aggregate": "max", "field": "step", "type": "quantitative", "title": "step"}, "y": {"aggregate": {"argmax": "step"}, "field": "f1", "type": "quantitative", "title": "f1", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"transform": [{"calculate": "datum.rev", "as": "pivot_field"}, {"pivot": "pivot_field", "op": "mean", "value": "f1", "groupby": ["step"]}], "mark": {"type": "rule", "tooltip": {"content": "data"}, "stroke": "grey"}, "encoding": {"opacity": {"condition": {"value": 0.3, "param": "hover", "empty": false}, "value": 0}}, "params": [{"name": "hover", "select": {"type": "point", "fields": ["step"], "nearest": true, "on": "mouseover", "clear": "mouseout"}}]}]};
|
||||||
|
vegaEmbed('#static_train_f1', spec);
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id = "static_train_loss">
|
||||||
|
<script type = "text/javascript">
|
||||||
|
var spec = {"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"values": [{"step": "0", "loss": "4.0223345439910885", "rev": "workspace"}, {"step": "1", "loss": "3.1446908485412597", "rev": "workspace"}, {"step": "2", "loss": "2.845902690887451", "rev": "workspace"}, {"step": "3", "loss": "2.7091702819824217", "rev": "workspace"}, {"step": "4", "loss": "2.5876311504364016", "rev": "workspace"}, {"step": "5", "loss": "2.4898329914093016", "rev": "workspace"}, {"step": "6", "loss": "2.4078801975250244", "rev": "workspace"}, {"step": "7", "loss": "2.3469735752105714", "rev": "workspace"}, {"step": "8", "loss": "2.3044276081085204", "rev": "workspace"}, {"step": "9", "loss": "2.2692713054656983", "rev": "workspace"}, {"step": "10", "loss": "2.2433441226959228", "rev": "workspace"}, {"step": "11", "loss": "2.2251542106628417", "rev": "workspace"}, {"step": "12", "loss": "2.2075239395141604", "rev": "workspace"}, {"step": "13", "loss": "2.199652731704712", "rev": "workspace"}, {"step": "14", "loss": "2.2003354278564453", "rev": "workspace"}, {"step": "15", "loss": "2.1802532527923586", "rev": "workspace"}, {"step": "16", "loss": "2.155798588562012", "rev": "workspace"}, {"step": "17", "loss": "2.127256035041809", "rev": "workspace"}, {"step": "18", "loss": "2.1059615146636963", "rev": "workspace"}, {"step": "19", "loss": "2.0936844367980956", "rev": "workspace"}, {"step": "20", "loss": "2.077068444442749", "rev": "workspace"}, {"step": "21", "loss": "2.064746246147156", "rev": "workspace"}, {"step": "22", "loss": "2.0619221328735353", "rev": "workspace"}, {"step": "23", "loss": "2.058998599433899", "rev": "workspace"}, {"step": "24", "loss": "2.0547973834991455", "rev": "workspace"}, {"step": "25", "loss": "2.0490142166137697", "rev": "workspace"}, {"step": "26", "loss": "2.0298474113464358", "rev": "workspace"}, {"step": "27", "loss": "2.0157182762145998", "rev": "workspace"}, {"step": "28", "loss": "2.006533228492737", "rev": "workspace"}, {"step": "29", "loss": "1.992799331665039", "rev": "workspace"}]}, "title": {"text": "train/loss", "anchor": "middle"}, "width": 300, "height": 300, "params": [{"name": "smooth", "value": 0.001, "bind": {"input": "range", "min": 0.001, "max": 1, "step": 0.001}}], "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "color": {"field": "rev", "scale": {"domain": ["workspace"], "range": ["#945dd6"]}}, "strokeDash": {}}, "layer": [{"layer": [{"params": [{"name": "grid", "select": "interval", "bind": "scales"}], "mark": "line"}, {"transform": [{"filter": {"param": "hover", "empty": false}}], "mark": "point"}], "encoding": {"y": {"field": "loss", "type": "quantitative", "title": "loss", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}, "transform": [{"loess": "loss", "on": "step", "groupby": ["rev"], "bandwidth": {"signal": "smooth"}}]}, {"mark": {"type": "line", "opacity": 0.2}, "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "y": {"field": "loss", "type": "quantitative", "title": "loss", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"mark": {"type": "circle", "size": 10}, "encoding": {"x": {"aggregate": "max", "field": "step", "type": "quantitative", "title": "step"}, "y": {"aggregate": {"argmax": "step"}, "field": "loss", "type": "quantitative", "title": "loss", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"transform": [{"calculate": "datum.rev", "as": "pivot_field"}, {"pivot": "pivot_field", "op": "mean", "value": "loss", "groupby": ["step"]}], "mark": {"type": "rule", "tooltip": {"content": "data"}, "stroke": "grey"}, "encoding": {"opacity": {"condition": {"value": 0.3, "param": "hover", "empty": false}, "value": 0}}, "params": [{"name": "hover", "select": {"type": "point", "fields": ["step"], "nearest": true, "on": "mouseover", "clear": "mouseout"}}]}]};
|
||||||
|
vegaEmbed('#static_train_loss', spec);
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id = "static_train_accuracy">
|
||||||
|
<script type = "text/javascript">
|
||||||
|
var spec = {"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"values": [{"step": "0", "accuracy": "0.04570624977350235", "rev": "workspace"}, {"step": "1", "accuracy": "0.08645624667406082", "rev": "workspace"}, {"step": "2", "accuracy": "0.15463125705718994", "rev": "workspace"}, {"step": "3", "accuracy": "0.20809374749660492", "rev": "workspace"}, {"step": "4", "accuracy": "0.2542562484741211", "rev": "workspace"}, {"step": "5", "accuracy": "0.29279375076293945", "rev": "workspace"}, {"step": "6", "accuracy": "0.3235749900341034", "rev": "workspace"}, {"step": "7", "accuracy": "0.346756249666214", "rev": "workspace"}, {"step": "8", "accuracy": "0.363993763923645", "rev": "workspace"}, {"step": "9", "accuracy": "0.3763374984264374", "rev": "workspace"}, {"step": "10", "accuracy": "0.3868750035762787", "rev": "workspace"}, {"step": "11", "accuracy": "0.39285001158714294", "rev": "workspace"}, {"step": "12", "accuracy": "0.400112509727478", "rev": "workspace"}, {"step": "13", "accuracy": "0.4029250144958496", "rev": "workspace"}, {"step": "14", "accuracy": "0.403425008058548", "rev": "workspace"}, {"step": "15", "accuracy": "0.4108937382698059", "rev": "workspace"}, {"step": "16", "accuracy": "0.42086875438690186", "rev": "workspace"}, {"step": "17", "accuracy": "0.43145623803138733", "rev": "workspace"}, {"step": "18", "accuracy": "0.44205623865127563", "rev": "workspace"}, {"step": "19", "accuracy": "0.44743749499320984", "rev": "workspace"}, {"step": "20", "accuracy": "0.45317500829696655", "rev": "workspace"}, {"step": "21", "accuracy": "0.4583125114440918", "rev": "workspace"}, {"step": "22", "accuracy": "0.45945000648498535", "rev": "workspace"}, {"step": "23", "accuracy": "0.4590874910354614", "rev": "workspace"}, {"step": "24", "accuracy": "0.462799996137619", "rev": "workspace"}, {"step": "25", "accuracy": "0.46361875534057617", "rev": "workspace"}, {"step": "26", "accuracy": "0.47360000014305115", "rev": "workspace"}, {"step": "27", "accuracy": "0.47944375872612", "rev": "workspace"}, {"step": "28", "accuracy": "0.4831624925136566", "rev": "workspace"}, {"step": "29", "accuracy": "0.4883750081062317", "rev": "workspace"}]}, "title": {"text": "train/accuracy", "anchor": "middle"}, "width": 300, "height": 300, "params": [{"name": "smooth", "value": 0.001, "bind": {"input": "range", "min": 0.001, "max": 1, "step": 0.001}}], "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "color": {"field": "rev", "scale": {"domain": ["workspace"], "range": ["#945dd6"]}}, "strokeDash": {}}, "layer": [{"layer": [{"params": [{"name": "grid", "select": "interval", "bind": "scales"}], "mark": "line"}, {"transform": [{"filter": {"param": "hover", "empty": false}}], "mark": "point"}], "encoding": {"y": {"field": "accuracy", "type": "quantitative", "title": "accuracy", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}, "transform": [{"loess": "accuracy", "on": "step", "groupby": ["rev"], "bandwidth": {"signal": "smooth"}}]}, {"mark": {"type": "line", "opacity": 0.2}, "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "y": {"field": "accuracy", "type": "quantitative", "title": "accuracy", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"mark": {"type": "circle", "size": 10}, "encoding": {"x": {"aggregate": "max", "field": "step", "type": "quantitative", "title": "step"}, "y": {"aggregate": {"argmax": "step"}, "field": "accuracy", "type": "quantitative", "title": "accuracy", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"transform": [{"calculate": "datum.rev", "as": "pivot_field"}, {"pivot": "pivot_field", "op": "mean", "value": "accuracy", "groupby": ["step"]}], "mark": {"type": "rule", "tooltip": {"content": "data"}, "stroke": "grey"}, "encoding": {"opacity": {"condition": {"value": 0.3, "param": "hover", "empty": false}, "value": 0}}, "params": [{"name": "hover", "select": {"type": "point", "fields": ["step"], "nearest": true, "on": "mouseover", "clear": "mouseout"}}]}]};
|
||||||
|
vegaEmbed('#static_train_accuracy', spec);
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id = "static_train_recall">
|
||||||
|
<script type = "text/javascript">
|
||||||
|
var spec = {"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"values": [{"step": "0", "recall": "0.04566790908575058", "rev": "workspace"}, {"step": "1", "recall": "0.08645831048488617", "rev": "workspace"}, {"step": "2", "recall": "0.1547394096851349", "rev": "workspace"}, {"step": "3", "recall": "0.2082621306180954", "rev": "workspace"}, {"step": "4", "recall": "0.2544386386871338", "rev": "workspace"}, {"step": "5", "recall": "0.29297617077827454", "rev": "workspace"}, {"step": "6", "recall": "0.3237552046775818", "rev": "workspace"}, {"step": "7", "recall": "0.346926212310791", "rev": "workspace"}, {"step": "8", "recall": "0.364177942276001", "rev": "workspace"}, {"step": "9", "recall": "0.3765082359313965", "rev": "workspace"}, {"step": "10", "recall": "0.3870483636856079", "rev": "workspace"}, {"step": "11", "recall": "0.39303654432296753", "rev": "workspace"}, {"step": "12", "recall": "0.4002862572669983", "rev": "workspace"}, {"step": "13", "recall": "0.403104305267334", "rev": "workspace"}, {"step": "14", "recall": "0.4036043882369995", "rev": "workspace"}, {"step": "15", "recall": "0.4110710322856903", "rev": "workspace"}, {"step": "16", "recall": "0.42104363441467285", "rev": "workspace"}, {"step": "17", "recall": "0.4316273629665375", "rev": "workspace"}, {"step": "18", "recall": "0.44224199652671814", "rev": "workspace"}, {"step": "19", "recall": "0.44761422276496887", "rev": "workspace"}, {"step": "20", "recall": "0.4533519148826599", "rev": "workspace"}, {"step": "21", "recall": "0.4584938883781433", "rev": "workspace"}, {"step": "22", "recall": "0.45962250232696533", "rev": "workspace"}, {"step": "23", "recall": "0.45926111936569214", "rev": "workspace"}, {"step": "24", "recall": "0.46298152208328247", "rev": "workspace"}, {"step": "25", "recall": "0.4637938141822815", "rev": "workspace"}, {"step": "26", "recall": "0.47378331422805786", "rev": "workspace"}, {"step": "27", "recall": "0.4796329736709595", "rev": "workspace"}, {"step": "28", "recall": "0.4833483397960663", "rev": "workspace"}, {"step": "29", "recall": "0.4885570704936981", "rev": "workspace"}]}, "title": {"text": "train/recall", "anchor": "middle"}, "width": 300, "height": 300, "params": [{"name": "smooth", "value": 0.001, "bind": {"input": "range", "min": 0.001, "max": 1, "step": 0.001}}], "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "color": {"field": "rev", "scale": {"domain": ["workspace"], "range": ["#945dd6"]}}, "strokeDash": {}}, "layer": [{"layer": [{"params": [{"name": "grid", "select": "interval", "bind": "scales"}], "mark": "line"}, {"transform": [{"filter": {"param": "hover", "empty": false}}], "mark": "point"}], "encoding": {"y": {"field": "recall", "type": "quantitative", "title": "recall", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}, "transform": [{"loess": "recall", "on": "step", "groupby": ["rev"], "bandwidth": {"signal": "smooth"}}]}, {"mark": {"type": "line", "opacity": 0.2}, "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "y": {"field": "recall", "type": "quantitative", "title": "recall", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"mark": {"type": "circle", "size": 10}, "encoding": {"x": {"aggregate": "max", "field": "step", "type": "quantitative", "title": "step"}, "y": {"aggregate": {"argmax": "step"}, "field": "recall", "type": "quantitative", "title": "recall", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"transform": [{"calculate": "datum.rev", "as": "pivot_field"}, {"pivot": "pivot_field", "op": "mean", "value": "recall", "groupby": ["step"]}], "mark": {"type": "rule", "tooltip": {"content": "data"}, "stroke": "grey"}, "encoding": {"opacity": {"condition": {"value": 0.3, "param": "hover", "empty": false}, "value": 0}}, "params": [{"name": "hover", "select": {"type": "point", "fields": ["step"], "nearest": true, "on": "mouseover", "clear": "mouseout"}}]}]};
|
||||||
|
vegaEmbed('#static_train_recall', spec);
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id = "static_train_precision">
|
||||||
|
<script type = "text/javascript">
|
||||||
|
var spec = {"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": {"values": [{"step": "0", "precision": "0.055038902908563614", "rev": "workspace"}, {"step": "1", "precision": "0.08688722550868988", "rev": "workspace"}, {"step": "2", "precision": "0.14544154703617096", "rev": "workspace"}, {"step": "3", "precision": "0.19598175585269928", "rev": "workspace"}, {"step": "4", "precision": "0.24326808750629425", "rev": "workspace"}, {"step": "5", "precision": "0.28354209661483765", "rev": "workspace"}, {"step": "6", "precision": "0.3143269121646881", "rev": "workspace"}, {"step": "7", "precision": "0.33853644132614136", "rev": "workspace"}, {"step": "8", "precision": "0.3557613492012024", "rev": "workspace"}, {"step": "9", "precision": "0.3688707649707794", "rev": "workspace"}, {"step": "10", "precision": "0.37962812185287476", "rev": "workspace"}, {"step": "11", "precision": "0.3855380415916443", "rev": "workspace"}, {"step": "12", "precision": "0.3929717540740967", "rev": "workspace"}, {"step": "13", "precision": "0.3963885009288788", "rev": "workspace"}, {"step": "14", "precision": "0.39665019512176514", "rev": "workspace"}, {"step": "15", "precision": "0.40454378724098206", "rev": "workspace"}, {"step": "16", "precision": "0.41489875316619873", "rev": "workspace"}, {"step": "17", "precision": "0.42552798986434937", "rev": "workspace"}, {"step": "18", "precision": "0.43634524941444397", "rev": "workspace"}, {"step": "19", "precision": "0.44186848402023315", "rev": "workspace"}, {"step": "20", "precision": "0.4476196765899658", "rev": "workspace"}, {"step": "21", "precision": "0.4529317021369934", "rev": "workspace"}, {"step": "22", "precision": "0.4541561007499695", "rev": "workspace"}, {"step": "23", "precision": "0.45390117168426514", "rev": "workspace"}, {"step": "24", "precision": "0.45794767141342163", "rev": "workspace"}, {"step": "25", "precision": "0.45853471755981445", "rev": "workspace"}, {"step": "26", "precision": "0.46830785274505615", "rev": "workspace"}, {"step": "27", "precision": "0.4746767580509186", "rev": "workspace"}, {"step": "28", "precision": "0.47852134704589844", "rev": "workspace"}, {"step": "29", "precision": "0.48363304138183594", "rev": "workspace"}]}, "title": {"text": "train/precision", "anchor": "middle"}, "width": 300, "height": 300, "params": [{"name": "smooth", "value": 0.001, "bind": {"input": "range", "min": 0.001, "max": 1, "step": 0.001}}], "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "color": {"field": "rev", "scale": {"domain": ["workspace"], "range": ["#945dd6"]}}, "strokeDash": {}}, "layer": [{"layer": [{"params": [{"name": "grid", "select": "interval", "bind": "scales"}], "mark": "line"}, {"transform": [{"filter": {"param": "hover", "empty": false}}], "mark": "point"}], "encoding": {"y": {"field": "precision", "type": "quantitative", "title": "precision", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}, "transform": [{"loess": "precision", "on": "step", "groupby": ["rev"], "bandwidth": {"signal": "smooth"}}]}, {"mark": {"type": "line", "opacity": 0.2}, "encoding": {"x": {"field": "step", "type": "quantitative", "title": "step"}, "y": {"field": "precision", "type": "quantitative", "title": "precision", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"mark": {"type": "circle", "size": 10}, "encoding": {"x": {"aggregate": "max", "field": "step", "type": "quantitative", "title": "step"}, "y": {"aggregate": {"argmax": "step"}, "field": "precision", "type": "quantitative", "title": "precision", "scale": {"zero": false}}, "color": {"field": "rev", "type": "nominal"}}}, {"transform": [{"calculate": "datum.rev", "as": "pivot_field"}, {"pivot": "pivot_field", "op": "mean", "value": "precision", "groupby": ["step"]}], "mark": {"type": "rule", "tooltip": {"content": "data"}, "stroke": "grey"}, "encoding": {"opacity": {"condition": {"value": 0.3, "param": "hover", "empty": false}, "value": 0}}, "params": [{"name": "hover", "select": {"type": "point", "fields": ["step"], "nearest": true, "on": "mouseover", "clear": "mouseout"}}]}]};
|
||||||
|
vegaEmbed('#static_train_precision', spec);
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
# eval.py
|
||||||
|
#
|
||||||
|
# author: deng
|
||||||
|
# date : 20260618
|
||||||
|
|
||||||
|
import torch
|
||||||
|
from dvclive import Live
|
||||||
|
from torch.utils.data import DataLoader
|
||||||
|
from torchmetrics import MetricCollection
|
||||||
|
from torchmetrics.classification import Accuracy, ConfusionMatrix, F1Score, Precision, Recall
|
||||||
|
|
||||||
|
from quickdraw_bot.utils.dataset import QuickDrawDataset
|
||||||
|
from quickdraw_bot.utils.utils import load_config
|
||||||
|
|
||||||
|
|
||||||
|
class Eval:
|
||||||
|
def __init__(self, config_path: str = './assets/config.yaml'):
|
||||||
|
self.config = load_config(config_path)['eval']
|
||||||
|
self._device = torch.device('mps' if torch.mps.is_available() else 'cpu')
|
||||||
|
|
||||||
|
def _get_dataloader(self):
|
||||||
|
test_dataset = QuickDrawDataset(data_dir=self.config['test_data_dir'], return_cate_name=False)
|
||||||
|
test_dataloader = DataLoader(test_dataset, batch_size=1, shuffle=False)
|
||||||
|
return test_dataloader
|
||||||
|
|
||||||
|
def _get_model(self) -> tuple[torch.nn.Module, int]:
|
||||||
|
model = torch.load(self.config['model_path'], map_location=self._device, weights_only=False)
|
||||||
|
model.eval()
|
||||||
|
num_classes = [m for m in model.modules() if isinstance(m, torch.nn.Linear)][-1].out_features
|
||||||
|
return model, num_classes
|
||||||
|
|
||||||
|
def _get_metrics(self, num_classes: int) -> tuple[MetricCollection, ConfusionMatrix]:
|
||||||
|
metric_collection = MetricCollection(
|
||||||
|
[
|
||||||
|
Accuracy(task='multiclass', num_classes=num_classes, top_k=1),
|
||||||
|
Precision(task='multiclass', num_classes=num_classes, average='macro'),
|
||||||
|
Recall(task='multiclass', num_classes=num_classes, average='macro'),
|
||||||
|
F1Score(task='multiclass', num_classes=num_classes, average='macro'),
|
||||||
|
]
|
||||||
|
).to(self._device)
|
||||||
|
confusion_matrix = ConfusionMatrix(
|
||||||
|
task='multiclass',
|
||||||
|
threshold=0.5,
|
||||||
|
num_classes=num_classes,
|
||||||
|
).to(self._device)
|
||||||
|
return metric_collection, confusion_matrix
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
test_dataloader = self._get_dataloader()
|
||||||
|
model, num_classes = self._get_model()
|
||||||
|
metrics, confusion_matrix = self._get_metrics(num_classes=num_classes)
|
||||||
|
|
||||||
|
with Live(dir='./doc/exp/eval', dvcyaml='./assets/dvc.yaml') as live:
|
||||||
|
metrics.reset()
|
||||||
|
with torch.no_grad():
|
||||||
|
for inputs, targets in test_dataloader:
|
||||||
|
inputs = inputs.to(self._device)
|
||||||
|
targets = targets.to(self._device)
|
||||||
|
outputs = model(inputs)
|
||||||
|
metrics.update(outputs, targets)
|
||||||
|
confusion_matrix.update(outputs, targets)
|
||||||
|
test_metrics = metrics.compute()
|
||||||
|
confusion_matrix_fig, _ = confusion_matrix.plot()
|
||||||
|
|
||||||
|
live.log_metric('test/accuracy', test_metrics['MulticlassAccuracy'].item())
|
||||||
|
live.log_metric('test/precision', test_metrics['MulticlassPrecision'].item())
|
||||||
|
live.log_metric('test/recall', test_metrics['MulticlassRecall'].item())
|
||||||
|
live.log_metric('test/f1', test_metrics['MulticlassF1Score'].item())
|
||||||
|
live.log_image('test_confusion_matrix.png', confusion_matrix_fig)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
Eval().run()
|
||||||
|
|||||||
@ -0,0 +1,92 @@
|
|||||||
|
# prepare.py
|
||||||
|
#
|
||||||
|
# author: deng
|
||||||
|
# date : 20260616
|
||||||
|
|
||||||
|
import json
|
||||||
|
import random
|
||||||
|
from pathlib import Path
|
||||||
|
from shutil import rmtree
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
from quickdraw_bot.utils.utils import load_config
|
||||||
|
|
||||||
|
|
||||||
|
class Prepare:
|
||||||
|
def __init__(self, config_path: str = './assets/config.yaml'):
|
||||||
|
self.config = load_config(config_path)['prepare']
|
||||||
|
self._set_random_seed()
|
||||||
|
|
||||||
|
def _set_random_seed(self):
|
||||||
|
random.seed(self.config['random_seed'])
|
||||||
|
np.random.seed(self.config['random_seed'])
|
||||||
|
|
||||||
|
def _load_dataset(self) -> tuple[dict[str, np.ndarray], dict[str, int]]:
|
||||||
|
data: dict[str, list] = {'images': [], 'cate_names': [], 'cate_ids': []}
|
||||||
|
cls_id_map: dict[str, int] = {}
|
||||||
|
raw_data_dir = Path(self.config['data_dir']) / 'raw'
|
||||||
|
for npy_file in sorted(raw_data_dir.glob('*.npy')):
|
||||||
|
class_name = npy_file.stem.removeprefix('full_numpy_bitmap_')
|
||||||
|
if class_name not in cls_id_map:
|
||||||
|
cls_id_map[class_name] = len(cls_id_map)
|
||||||
|
images = np.load(npy_file) # shape: (N, 784)
|
||||||
|
images = images.reshape(-1, 1, 28, 28) # shape: (N, 1, 28, 28)
|
||||||
|
images = images.astype(np.int8)
|
||||||
|
if images.shape[0] < self.config['num_of_img_per_class']:
|
||||||
|
print(f'Class {class_name} has less than {self.config["num_of_img_per_class"]} samples, keep all')
|
||||||
|
data['images'].extend(images)
|
||||||
|
data['cate_names'].extend([class_name] * images.shape[0])
|
||||||
|
data['cate_ids'].extend([cls_id_map[class_name]] * images.shape[0])
|
||||||
|
else:
|
||||||
|
random_indice = np.random.choice(images.shape[0], self.config['num_of_img_per_class'], replace=False)
|
||||||
|
data['images'].extend(images[random_indice])
|
||||||
|
data['cate_names'].extend([class_name] * self.config['num_of_img_per_class'])
|
||||||
|
data['cate_ids'].extend([cls_id_map[class_name]] * self.config['num_of_img_per_class'])
|
||||||
|
data['images'] = np.array(data['images']).astype(np.uint8)
|
||||||
|
data['cate_names'] = np.array(data['cate_names']).astype('S30')
|
||||||
|
data['cate_ids'] = np.array(data['cate_ids']).astype(np.uint16)
|
||||||
|
return data, cls_id_map
|
||||||
|
|
||||||
|
def _split_data(self, data: dict[str, np.ndarray]) -> dict[str, dict[str, np.ndarray]]:
|
||||||
|
weights = self.config['data_split']
|
||||||
|
if abs(sum(weights.values()) - 1.0) > 1e-6:
|
||||||
|
raise ValueError('Sum of data_split weights must be 1.0')
|
||||||
|
|
||||||
|
element_count = len(next(iter(data.values())))
|
||||||
|
shuffled_indices = np.random.permutation(element_count)
|
||||||
|
|
||||||
|
sets: dict[str, dict[str, np.ndarray]] = {}
|
||||||
|
start = 0
|
||||||
|
for i, (name, weight) in enumerate(weights.items()):
|
||||||
|
if i == len(weights) - 1:
|
||||||
|
idx = shuffled_indices[start:]
|
||||||
|
else:
|
||||||
|
end = start + round(weight * element_count)
|
||||||
|
idx = shuffled_indices[start:end]
|
||||||
|
start = end
|
||||||
|
sets[name] = {key: value[idx] for key, value in data.items()}
|
||||||
|
return sets
|
||||||
|
|
||||||
|
def _save_data(self, sets: dict[str, dict[str, np.ndarray]], cls_id_map: dict[str, int]) -> None:
|
||||||
|
save_dir = Path(self.config['data_dir']) / 'processed'
|
||||||
|
if save_dir.exists():
|
||||||
|
rmtree(save_dir)
|
||||||
|
save_dir.mkdir()
|
||||||
|
for usage, data in sets.items():
|
||||||
|
usage_dir = save_dir / usage
|
||||||
|
usage_dir.mkdir()
|
||||||
|
for key, value in data.items():
|
||||||
|
np.save(f'{usage_dir}/{key}.npy', value)
|
||||||
|
cate_id_cate_name_map = {v: k for k, v in cls_id_map.items()}
|
||||||
|
with open(f'{save_dir}/cate_id_cate_name_map.json', 'w') as f:
|
||||||
|
json.dump(cate_id_cate_name_map, f, indent=2)
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
data, cls_id_map = self._load_dataset()
|
||||||
|
sets = self._split_data(data)
|
||||||
|
self._save_data(sets, cls_id_map)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
Prepare().run()
|
||||||
|
|||||||
98
quickdraw_bot/to_onnx.py
Normal file
98
quickdraw_bot/to_onnx.py
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
# to_onnx.py
|
||||||
|
#
|
||||||
|
# author: deng
|
||||||
|
# date : 20260618
|
||||||
|
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
import onnxruntime as ort
|
||||||
|
import torch
|
||||||
|
|
||||||
|
from quickdraw_bot.utils.utils import load_config
|
||||||
|
|
||||||
|
|
||||||
|
class Pipeline(torch.nn.Module):
|
||||||
|
def __init__(self, model: torch.nn.Module, input_size: tuple[int, int]):
|
||||||
|
super().__init__()
|
||||||
|
self._model = model
|
||||||
|
self._input_size = input_size
|
||||||
|
|
||||||
|
def forward(self, inputs: torch.Tensor) -> torch.Tensor:
|
||||||
|
inputs = inputs.float() / 255.0
|
||||||
|
inputs = torch.nn.functional.interpolate(inputs, size=self._input_size, mode='bilinear', align_corners=False)
|
||||||
|
logits = self._model(inputs)
|
||||||
|
probs = torch.nn.functional.softmax(logits, dim=-1)
|
||||||
|
return probs
|
||||||
|
|
||||||
|
|
||||||
|
class ToONNX:
|
||||||
|
def __init__(self, config_path: str = './assets/config.yaml'):
|
||||||
|
self.config = load_config(config_path)['to_onnx']
|
||||||
|
|
||||||
|
def _get_cls_map(self) -> dict[int, str]:
|
||||||
|
cls_map_path = Path(self.config['cls_map_path'])
|
||||||
|
if not cls_map_path.exists():
|
||||||
|
return None
|
||||||
|
with open(cls_map_path, 'r') as f:
|
||||||
|
cls_map = json.load(f)
|
||||||
|
return cls_map
|
||||||
|
|
||||||
|
def _get_model(self) -> torch.nn.Module:
|
||||||
|
model = torch.load(self.config['model_path'], map_location='cpu', weights_only=False)
|
||||||
|
model.eval()
|
||||||
|
return model
|
||||||
|
|
||||||
|
def _get_pipeline(self) -> torch.nn.Module:
|
||||||
|
pipeline = Pipeline(
|
||||||
|
model=self._get_model(),
|
||||||
|
input_size=tuple(self.config['image_size']),
|
||||||
|
)
|
||||||
|
return pipeline
|
||||||
|
|
||||||
|
def run(self) -> None:
|
||||||
|
pipeline = self._get_pipeline()
|
||||||
|
dummy_input = torch.randint(0, 256, (1, 1, self.config['image_size'][0], self.config['image_size'][1]), dtype=torch.uint8)
|
||||||
|
torch.onnx.export(
|
||||||
|
pipeline,
|
||||||
|
dummy_input,
|
||||||
|
self.config['onnx_path'],
|
||||||
|
input_names=['inputs'],
|
||||||
|
output_names=['outputs'],
|
||||||
|
dynamic_axes={'inputs': {0: 'batch_size', 2: 'height', 3: 'width'}, 'outputs': {0: 'batch_size'}},
|
||||||
|
opset_version=18,
|
||||||
|
dynamo=False,
|
||||||
|
verbose=True,
|
||||||
|
)
|
||||||
|
print(f'Done! ONNX file saved to {self.config["onnx_path"]}')
|
||||||
|
|
||||||
|
def test_infer(self, image_path: str) -> None:
|
||||||
|
|
||||||
|
# Get cls map
|
||||||
|
cls_map: dict[str, str] = self._get_cls_map()
|
||||||
|
cls_names = list(cls_map.values())
|
||||||
|
|
||||||
|
# Load Image
|
||||||
|
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
|
||||||
|
image = image[np.newaxis, np.newaxis, :, :]
|
||||||
|
|
||||||
|
# Infer
|
||||||
|
onnx_session = ort.InferenceSession(
|
||||||
|
self.config['onnx_path'],
|
||||||
|
providers=['CPUExecutionProvider'],
|
||||||
|
)
|
||||||
|
start_time = time.perf_counter()
|
||||||
|
outputs = onnx_session.run(None, {'inputs': image})[0]
|
||||||
|
elapsed_time_ms = (time.perf_counter() - start_time) * 1000
|
||||||
|
result = [{cls_name: round(float(prob), 3) for cls_name, prob in zip(cls_names, prob_arr)} for prob_arr in outputs]
|
||||||
|
print(f'Elapsed time: {elapsed_time_ms:.2f} ms')
|
||||||
|
print(f'Image: {image_path}')
|
||||||
|
print(f'Result: {result}')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
ToONNX().run()
|
||||||
|
ToONNX().test_infer('./assets/favicon.png')
|
||||||
@ -0,0 +1,168 @@
|
|||||||
|
# train.py
|
||||||
|
#
|
||||||
|
# author: deng
|
||||||
|
# date : 20260617
|
||||||
|
|
||||||
|
import random
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import torch
|
||||||
|
from dvclive import Live
|
||||||
|
from torch.utils.data import DataLoader
|
||||||
|
from torchmetrics import MetricCollection
|
||||||
|
from torchmetrics.classification import Accuracy, ConfusionMatrix, F1Score, Precision, Recall
|
||||||
|
from tqdm import tqdm
|
||||||
|
|
||||||
|
from quickdraw_bot.utils.dataset import QuickDrawDataset
|
||||||
|
from quickdraw_bot.utils.model import BabyCNN
|
||||||
|
from quickdraw_bot.utils.utils import load_config
|
||||||
|
|
||||||
|
|
||||||
|
class Train:
|
||||||
|
def __init__(self, config_path: str = './assets/config.yaml'):
|
||||||
|
self.config = load_config(config_path)['train']
|
||||||
|
self._device = torch.device(self.config['device_type'])
|
||||||
|
|
||||||
|
self._ensure_reproducibility()
|
||||||
|
|
||||||
|
def _ensure_reproducibility(self) -> None:
|
||||||
|
torch.use_deterministic_algorithms(mode=True, warn_only=True)
|
||||||
|
random.seed(self.config['random_seed'])
|
||||||
|
np.random.seed(self.config['random_seed'])
|
||||||
|
torch.manual_seed(self.config['random_seed'])
|
||||||
|
|
||||||
|
def _get_dataloader(self):
|
||||||
|
train_dataset = QuickDrawDataset(
|
||||||
|
data_dir=self.config['train_data_dir'],
|
||||||
|
enable_data_aug=True,
|
||||||
|
file_lazy_load=self.config['file_lazy_load'],
|
||||||
|
return_cate_name=False,
|
||||||
|
# vis_dir='./tmp'
|
||||||
|
)
|
||||||
|
valid_dataset = QuickDrawDataset(
|
||||||
|
data_dir=self.config['valid_data_dir'],
|
||||||
|
enable_data_aug=False,
|
||||||
|
file_lazy_load=self.config['file_lazy_load'],
|
||||||
|
return_cate_name=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
train_dataloader = DataLoader(
|
||||||
|
train_dataset,
|
||||||
|
batch_size=self.config['batch_size'],
|
||||||
|
shuffle=True,
|
||||||
|
num_workers=4,
|
||||||
|
pin_memory=False, # not support for mps
|
||||||
|
persistent_workers=True,
|
||||||
|
)
|
||||||
|
valid_dataloader = DataLoader(
|
||||||
|
valid_dataset,
|
||||||
|
batch_size=self.config['batch_size'],
|
||||||
|
shuffle=False,
|
||||||
|
num_workers=1,
|
||||||
|
pin_memory=False, # not support for mps
|
||||||
|
persistent_workers=True,
|
||||||
|
)
|
||||||
|
return train_dataloader, valid_dataloader
|
||||||
|
|
||||||
|
def _get_model(self) -> torch.nn.Module:
|
||||||
|
model = BabyCNN(num_classes=self.config['num_of_class'], dropout_p=0.3).to(self._device)
|
||||||
|
model.train()
|
||||||
|
return model
|
||||||
|
|
||||||
|
def _get_optimizer(self, model: torch.nn.Module) -> torch.optim.Optimizer:
|
||||||
|
if self.config['optimizer_name'] == 'adam':
|
||||||
|
optimizer = torch.optim.Adam(model.parameters(), lr=self.config['learning_rate'])
|
||||||
|
elif self.config['optimizer_name'] == 'sgd':
|
||||||
|
optimizer = torch.optim.SGD(model.parameters(), lr=self.config['learning_rate'])
|
||||||
|
else:
|
||||||
|
raise ValueError(f'Unknown optimizer name: {self.config["optimizer_name"]}')
|
||||||
|
return optimizer
|
||||||
|
|
||||||
|
def _get_scheduler(self, optimizer: torch.optim.Optimizer) -> torch.optim.lr_scheduler._LRScheduler:
|
||||||
|
scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0=10, T_mult=1, eta_min=0.0001)
|
||||||
|
if self.config['warmup_epochs'] > 0:
|
||||||
|
warmup = torch.optim.lr_scheduler.LinearLR(optimizer, start_factor=0.01, end_factor=1.0, total_iters=self.config['warmup_epochs'])
|
||||||
|
scheduler = torch.optim.lr_scheduler.SequentialLR(optimizer, schedulers=[warmup, scheduler], milestones=[self.config['warmup_epochs']])
|
||||||
|
return scheduler
|
||||||
|
|
||||||
|
def _get_loss(self) -> torch.nn.modules.loss._Loss:
|
||||||
|
loss = torch.nn.CrossEntropyLoss(label_smoothing=0.1).to(self._device)
|
||||||
|
return loss
|
||||||
|
|
||||||
|
def _get_metrics(self) -> tuple[MetricCollection, ConfusionMatrix]:
|
||||||
|
metric_collection = MetricCollection(
|
||||||
|
[
|
||||||
|
Accuracy(task='multiclass', num_classes=self.config['num_of_class'], top_k=1),
|
||||||
|
Precision(task='multiclass', num_classes=self.config['num_of_class'], average='macro'),
|
||||||
|
Recall(task='multiclass', num_classes=self.config['num_of_class'], average='macro'),
|
||||||
|
F1Score(task='multiclass', num_classes=self.config['num_of_class'], average='macro'),
|
||||||
|
]
|
||||||
|
).to(self._device)
|
||||||
|
confusion_matrix = ConfusionMatrix(
|
||||||
|
task='multiclass',
|
||||||
|
threshold=0.5,
|
||||||
|
num_classes=self.config['num_of_class'],
|
||||||
|
).to(self._device)
|
||||||
|
return metric_collection, confusion_matrix
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
train_dataloader, valid_dataloader = self._get_dataloader()
|
||||||
|
model = self._get_model()
|
||||||
|
optimizer = self._get_optimizer(model)
|
||||||
|
scheduler = self._get_scheduler(optimizer)
|
||||||
|
loss = self._get_loss()
|
||||||
|
metrics, _ = self._get_metrics()
|
||||||
|
|
||||||
|
with Live(dir='./doc/exp/train', report='html', dvcyaml='./assets/dvc.yaml', exp_message=self.config['exp_msg']) as live:
|
||||||
|
for epoch in tqdm(range(self.config['num_of_epochs']), desc='Training Epoch'):
|
||||||
|
metrics.reset()
|
||||||
|
model.train()
|
||||||
|
total_train_loss = 0.0
|
||||||
|
for inputs, targets in train_dataloader:
|
||||||
|
inputs = inputs.to(self._device)
|
||||||
|
targets = targets.to(self._device)
|
||||||
|
optimizer.zero_grad()
|
||||||
|
outputs = model(inputs)
|
||||||
|
train_loss = loss(outputs, targets)
|
||||||
|
total_train_loss += train_loss.item()
|
||||||
|
train_loss.backward()
|
||||||
|
optimizer.step()
|
||||||
|
metrics.update(outputs, targets)
|
||||||
|
train_metrics = metrics.compute()
|
||||||
|
avg_train_loss = total_train_loss / len(train_dataloader)
|
||||||
|
train_learning_rate = round(optimizer.param_groups[0]['lr'], 6)
|
||||||
|
|
||||||
|
metrics.reset()
|
||||||
|
model.eval()
|
||||||
|
total_valid_loss = 0.0
|
||||||
|
with torch.no_grad():
|
||||||
|
for inputs, targets in valid_dataloader:
|
||||||
|
inputs = inputs.to(self._device)
|
||||||
|
targets = targets.to(self._device)
|
||||||
|
outputs = model(inputs)
|
||||||
|
valid_loss = loss(outputs, targets)
|
||||||
|
total_valid_loss += valid_loss.item()
|
||||||
|
metrics.update(outputs, targets)
|
||||||
|
valid_metrics = metrics.compute()
|
||||||
|
avg_valid_loss = total_valid_loss / len(valid_dataloader)
|
||||||
|
|
||||||
|
live.log_metric('train/loss', avg_train_loss)
|
||||||
|
live.log_metric('train/learning_rate', train_learning_rate)
|
||||||
|
live.log_metric('train/accuracy', train_metrics['MulticlassAccuracy'].item())
|
||||||
|
live.log_metric('train/precision', train_metrics['MulticlassPrecision'].item())
|
||||||
|
live.log_metric('train/recall', train_metrics['MulticlassRecall'].item())
|
||||||
|
live.log_metric('train/f1', train_metrics['MulticlassF1Score'].item())
|
||||||
|
live.log_metric('valid/loss', avg_valid_loss)
|
||||||
|
live.log_metric('valid/accuracy', valid_metrics['MulticlassAccuracy'].item())
|
||||||
|
live.log_metric('valid/precision', valid_metrics['MulticlassPrecision'].item())
|
||||||
|
live.log_metric('valid/recall', valid_metrics['MulticlassRecall'].item())
|
||||||
|
live.log_metric('valid/f1', valid_metrics['MulticlassF1Score'].item())
|
||||||
|
|
||||||
|
scheduler.step()
|
||||||
|
live.next_step()
|
||||||
|
|
||||||
|
torch.save(model, './assets/model.pth')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
Train().run()
|
||||||
|
|||||||
87
quickdraw_bot/utils/dataset.py
Normal file
87
quickdraw_bot/utils/dataset.py
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
# dataset.py
|
||||||
|
#
|
||||||
|
# author: deng
|
||||||
|
# date : 20260617
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import torch
|
||||||
|
from torchvision.transforms import v2
|
||||||
|
|
||||||
|
|
||||||
|
class QuickDrawDataset(torch.utils.data.Dataset):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
data_dir: str,
|
||||||
|
image_shape: tuple[int, int, int] = (1, 28, 28),
|
||||||
|
enable_data_aug: bool = False,
|
||||||
|
file_lazy_load: bool = False,
|
||||||
|
return_cate_name: bool = False,
|
||||||
|
vis_dir: str = None,
|
||||||
|
) -> None:
|
||||||
|
super().__init__()
|
||||||
|
self._images: torch.Tensor | np.ndarray = None
|
||||||
|
self._cate_names: list[str] = []
|
||||||
|
self._cate_ids: torch.Tensor = []
|
||||||
|
self._transform: callable = None
|
||||||
|
|
||||||
|
self._enable_data_aug = enable_data_aug
|
||||||
|
self._data_dir = Path(data_dir)
|
||||||
|
self._image_shape = image_shape
|
||||||
|
self._file_lazy_load = file_lazy_load
|
||||||
|
self._return_cate_name = return_cate_name
|
||||||
|
self._vis_dir = Path(vis_dir) if vis_dir is not None else None
|
||||||
|
|
||||||
|
self._set_data_transform()
|
||||||
|
self._collect_data()
|
||||||
|
|
||||||
|
def _set_data_transform(self) -> None:
|
||||||
|
aug_pipeline = []
|
||||||
|
if self._enable_data_aug:
|
||||||
|
aug_pipeline = [
|
||||||
|
v2.RandomHorizontalFlip(p=0.2),
|
||||||
|
v2.RandomApply([v2.RandomAffine(degrees=(-30, 30), translate=(0.2, 0.2), scale=(0.8, 1.2), shear=(-10, 10))], p=0.5),
|
||||||
|
v2.RandomPerspective(distortion_scale=0.15, p=0.2),
|
||||||
|
v2.RandomApply([v2.ElasticTransform(alpha=15.0, sigma=3.0)], p=0.2),
|
||||||
|
v2.RandomErasing(p=0.2, scale=(0.02, 0.2)),
|
||||||
|
]
|
||||||
|
self._transform = v2.Compose(
|
||||||
|
[
|
||||||
|
*aug_pipeline,
|
||||||
|
v2.Resize(self._image_shape[1:]),
|
||||||
|
v2.ToDtype(torch.float32, scale=True),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
def _collect_data(self) -> None:
|
||||||
|
self._cate_names = [cate_name.decode() for cate_name in np.load(self._data_dir / 'cate_names.npy')]
|
||||||
|
self._cate_ids = torch.from_numpy(np.load(self._data_dir / 'cate_ids.npy')).long()
|
||||||
|
if self._file_lazy_load:
|
||||||
|
self._images = np.load(self._data_dir / 'images.npy', mmap_mode='r')
|
||||||
|
else:
|
||||||
|
self._images = torch.from_numpy(np.load(self._data_dir / 'images.npy'))
|
||||||
|
|
||||||
|
def __len__(self) -> int:
|
||||||
|
return len(self._cate_ids)
|
||||||
|
|
||||||
|
def __getitem__(self, index: int) -> tuple[torch.Tensor, torch.Tensor]:
|
||||||
|
if self._file_lazy_load:
|
||||||
|
x = torch.from_numpy(self._images[index])
|
||||||
|
else:
|
||||||
|
x = self._images[index]
|
||||||
|
x = self._transform(x)
|
||||||
|
y = self._cate_ids[index]
|
||||||
|
|
||||||
|
if self._vis_dir is not None:
|
||||||
|
vis_path = self._vis_dir / f'{index:05d}_{self._cate_names[index]}.png'
|
||||||
|
if not vis_path.exists():
|
||||||
|
v2.ToPILImage()(x).save(vis_path)
|
||||||
|
|
||||||
|
if self._return_cate_name:
|
||||||
|
return x, y, self._cate_names[index]
|
||||||
|
return x, y
|
||||||
|
|
||||||
|
def set_data_aug(self, enable_data_aug: bool) -> None:
|
||||||
|
self._enable_data_aug = enable_data_aug
|
||||||
|
self._set_data_transform()
|
||||||
51
quickdraw_bot/utils/model.py
Normal file
51
quickdraw_bot/utils/model.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# model.py
|
||||||
|
#
|
||||||
|
# author: deng
|
||||||
|
# date : 20260617
|
||||||
|
|
||||||
|
import torch
|
||||||
|
import torch.nn as nn
|
||||||
|
import torch.nn.functional as F
|
||||||
|
|
||||||
|
|
||||||
|
class BabyCNN(nn.Module):
|
||||||
|
def __init__(self, num_classes: int = 10, dropout_p: float = 0.5) -> None:
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
# Conv Block 1: 28x28 -> 14x14
|
||||||
|
self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, padding=1)
|
||||||
|
self.bn1 = nn.BatchNorm2d(num_features=32)
|
||||||
|
|
||||||
|
# Conv Block 2: 14x14 -> 7x7
|
||||||
|
self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, padding=1)
|
||||||
|
self.bn2 = nn.BatchNorm2d(num_features=64)
|
||||||
|
|
||||||
|
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
|
||||||
|
self.dropout = nn.Dropout(p=dropout_p)
|
||||||
|
|
||||||
|
# FC Layers
|
||||||
|
self.fc1 = nn.Linear(in_features=64 * 7 * 7, out_features=128)
|
||||||
|
self.fc2 = nn.Linear(in_features=128, out_features=num_classes)
|
||||||
|
|
||||||
|
self._init_weights()
|
||||||
|
|
||||||
|
def _init_weights(self):
|
||||||
|
for m in self.modules():
|
||||||
|
if isinstance(m, nn.Conv2d):
|
||||||
|
nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')
|
||||||
|
if m.bias is not None:
|
||||||
|
nn.init.zeros_(m.bias)
|
||||||
|
elif isinstance(m, nn.BatchNorm2d):
|
||||||
|
nn.init.ones_(m.weight)
|
||||||
|
nn.init.zeros_(m.bias)
|
||||||
|
elif isinstance(m, nn.Linear):
|
||||||
|
nn.init.kaiming_normal_(m.weight, nonlinearity='relu')
|
||||||
|
nn.init.zeros_(m.bias)
|
||||||
|
|
||||||
|
def forward(self, x: torch.Tensor) -> torch.Tensor:
|
||||||
|
x = self.pool(F.relu(self.bn1(self.conv1(x))))
|
||||||
|
x = self.pool(F.relu(self.bn2(self.conv2(x))))
|
||||||
|
x = x.view(x.size(0), -1)
|
||||||
|
x = self.dropout(F.relu(self.fc1(x)))
|
||||||
|
x = self.fc2(x)
|
||||||
|
return x
|
||||||
8
quickdraw_bot/utils/utils.py
Normal file
8
quickdraw_bot/utils/utils.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# utils.py
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
|
||||||
|
def load_config(config_path: str) -> dict:
|
||||||
|
with open(config_path, 'r') as f:
|
||||||
|
return yaml.safe_load(f)
|
||||||
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
23
tests/test_utils.py
Normal file
23
tests/test_utils.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# test_utils.py
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from quickdraw_bot.utils.utils import load_config
|
||||||
|
|
||||||
|
|
||||||
|
class TestUtils:
|
||||||
|
def test_load_config_load_valid_yaml(self, tmp_path):
|
||||||
|
config_file = tmp_path / 'config.yaml'
|
||||||
|
config_file.write_text('key: value\nnested:\n a: 1\n')
|
||||||
|
result = load_config(str(config_file))
|
||||||
|
assert result == {'key': 'value', 'nested': {'a': 1}}
|
||||||
|
|
||||||
|
def test_load_config_returns_dict(self, tmp_path):
|
||||||
|
config_file = tmp_path / 'config.yaml'
|
||||||
|
config_file.write_text('foo: bar\n')
|
||||||
|
result = load_config(str(config_file))
|
||||||
|
assert isinstance(result, dict)
|
||||||
|
|
||||||
|
def test_load_config_file_not_found(self):
|
||||||
|
with pytest.raises(FileNotFoundError):
|
||||||
|
load_config('/nonexistent/path/config.yaml')
|
||||||
250
uv.lock
generated
250
uv.lock
generated
@ -420,6 +420,61 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/a6/c4/0679472c60052c27efa612b4cd3ddd2a23e885dcdc73461781d2c802d39e/configobj-5.0.9-py2.py3-none-any.whl", hash = "sha256:1ba10c5b6ee16229c79a05047aeda2b55eb4e80d7c7d8ecf17ec1ca600c79882", size = 35615, upload-time = "2024-11-26T14:03:32.972Z" },
|
{ url = "https://files.pythonhosted.org/packages/a6/c4/0679472c60052c27efa612b4cd3ddd2a23e885dcdc73461781d2c802d39e/configobj-5.0.9-py2.py3-none-any.whl", hash = "sha256:1ba10c5b6ee16229c79a05047aeda2b55eb4e80d7c7d8ecf17ec1ca600c79882", size = 35615, upload-time = "2024-11-26T14:03:32.972Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "contourpy"
|
||||||
|
version = "1.3.3"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "numpy" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cryptography"
|
name = "cryptography"
|
||||||
version = "49.0.0"
|
version = "49.0.0"
|
||||||
@ -534,6 +589,15 @@ nvtx = [
|
|||||||
{ name = "nvidia-nvtx", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
|
{ name = "nvidia-nvtx", marker = "sys_platform == 'linux' or sys_platform == 'win32'" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cycler"
|
||||||
|
version = "0.12.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dictdiffer"
|
name = "dictdiffer"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
@ -831,6 +895,39 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/c9/67/97efedcd446c8561e3430d35a2ed6c467df724cc2e44dea5dd8a1e62d4cd/flufl_lock-9.1.0-py3-none-any.whl", hash = "sha256:84d7c85628604dc878fea29bf19262498aec1bd3f162f83be291507169681a9b", size = 11234, upload-time = "2026-04-27T18:38:16.697Z" },
|
{ url = "https://files.pythonhosted.org/packages/c9/67/97efedcd446c8561e3430d35a2ed6c467df724cc2e44dea5dd8a1e62d4cd/flufl_lock-9.1.0-py3-none-any.whl", hash = "sha256:84d7c85628604dc878fea29bf19262498aec1bd3f162f83be291507169681a9b", size = 11234, upload-time = "2026-04-27T18:38:16.697Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "fonttools"
|
||||||
|
version = "4.63.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/84/69/c97f2c18e0db87d2c7b15da1974dace76ae938f1cfa22e2727a648b7ed43/fonttools-4.63.0.tar.gz", hash = "sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0", size = 3597189, upload-time = "2026-05-14T12:04:30.958Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0f/8d/d8fec3dcde2963f8c908fb315e5ff2cd0ac34f82394bbbf73a2aa5145ce3/fonttools-4.63.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd", size = 2876062, upload-time = "2026-05-14T12:03:32.554Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ef/71/d935dc54e4ff121bfdd11e08702db63a7e6f25af21d8a3d7b7212df53641/fonttools-4.63.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59", size = 2424594, upload-time = "2026-05-14T12:03:34.86Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8e/40/e76320afa1df918e146155ef239b1719ee266092e96f5423bfd075affba1/fonttools-4.63.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d", size = 5024840, upload-time = "2026-05-14T12:03:36.745Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ce/36/0b805d8c485f872f65a509cbe3b58a5d0d17bee855333b54a150c79d3061/fonttools-4.63.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68", size = 4975801, upload-time = "2026-05-14T12:03:38.833Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c8/26/2cee03d0aa083ab022da5c07aff9ed3f689da1defb81ad6917c9627896da/fonttools-4.63.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be", size = 4965009, upload-time = "2026-05-14T12:03:41.494Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7e/48/cc4b66d9058c0d0982c833fad10127c4b0e9324606aafa41382295ca4102/fonttools-4.63.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27", size = 5105892, upload-time = "2026-05-14T12:03:43.525Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d8/1f/a98a30a814b9ddef3a2e706025f90b9e0bc94890e6cb15254bc86547d11a/fonttools-4.63.0-cp313-cp313-win32.whl", hash = "sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380", size = 2291313, upload-time = "2026-05-14T12:03:45.594Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/92/46/5177b01f3b4abfdd4409f31cca4ab279c9343a26efbe9ec78c97fc612e02/fonttools-4.63.0-cp313-cp313-win_amd64.whl", hash = "sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b", size = 2342299, upload-time = "2026-05-14T12:03:47.414Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/27/d2/23d25e3f247b328be58d04a4c9f894178a0d1eda7d42867cfb388adaf416/fonttools-4.63.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745", size = 2875338, upload-time = "2026-05-14T12:03:50.052Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cd/58/7dfa0c761cb3b2964e2a84c4dc986c926a87de0cb9fb60d5b28ded3f2914/fonttools-4.63.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03", size = 2422661, upload-time = "2026-05-14T12:03:52.154Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/dd/87/64cfa18a7a1621d17b7f4502b2b0ed8a135a90c3db51ea590ee99043e76b/fonttools-4.63.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49", size = 5010526, upload-time = "2026-05-14T12:03:54.647Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/36/e1/a8933a72c45a87177fbde2696e0d0755c8c9062f8c077a961c6215fa27b1/fonttools-4.63.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b", size = 4923946, upload-time = "2026-05-14T12:03:56.984Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/27/60/872e6e233b8c5e8b41413796ff18b7fe479661bd40147e071b450dfad7a1/fonttools-4.63.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6", size = 4962489, upload-time = "2026-05-14T12:03:59.443Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/30/c4/83c24f2ec38b90cfda84bf4b1a1f49df80e84a1db4e7ac6e0d41bf23bc39/fonttools-4.63.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4", size = 5071870, upload-time = "2026-05-14T12:04:02.122Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/de/40/3ae22b60ff1d41ce0bd044b31238cdc72cef99f28b976f1e128ebd618c9b/fonttools-4.63.0-cp314-cp314-win32.whl", hash = "sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616", size = 2295026, upload-time = "2026-05-14T12:04:04.47Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c3/d4/98078064ccc76b45cb0f6c002452011e93c4bd26f6850344f0951cc1fe89/fonttools-4.63.0-cp314-cp314-win_amd64.whl", hash = "sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5", size = 2347454, upload-time = "2026-05-14T12:04:06.752Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/49/4e/652d1580c5f4e39f7d103b0c793e4773129ad633dce4addd0cf4dfebde02/fonttools-4.63.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001", size = 2958152, upload-time = "2026-05-14T12:04:08.706Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/0e/55/ad864c9a9b219f552eb46b32cd7906c466e5a578ba0c3abfcc0fe7413eb6/fonttools-4.63.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e", size = 2460809, upload-time = "2026-05-14T12:04:10.783Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ea/2b/0aa8db70f18cf52e49b4ed5ecec68547f981160bf5ded3b5aed6faa0a6f9/fonttools-4.63.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096", size = 5148649, upload-time = "2026-05-14T12:04:12.747Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7f/63/18e4369c25043096f1048e0c9915951adc4f842bd81c6b18155824d6fa99/fonttools-4.63.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f", size = 4932147, upload-time = "2026-05-14T12:04:14.806Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a1/3f/67f3eac2ffd8a98446c5022f8ed3864eac878a5ff7af8df4c8286dba16cc/fonttools-4.63.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40", size = 5027237, upload-time = "2026-05-14T12:04:17.675Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1a/ba/4e6214cb38a7b04779e97bb7636de9a5c7f20af7018d03dee0b64c08510a/fonttools-4.63.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196", size = 5053933, upload-time = "2026-05-14T12:04:20.818Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/34/3b/214dcc19ee31d3d38fb5ad2755c11ef0514e5dc300bbaf41c0b69f393799/fonttools-4.63.0-cp314-cp314t-win32.whl", hash = "sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8", size = 2359326, upload-time = "2026-05-14T12:04:24.22Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/dd/1e/3ff1a9b523058c2eeb6a9d50f5574e2a738200d0d94107d5bc4105e8da3f/fonttools-4.63.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419", size = 2425829, upload-time = "2026-05-14T12:04:26.829Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/2c/47/c99d5268f354002ce80f8d029cd9d7d872969da1de8b93d32de4dc56d6f4/fonttools-4.63.0-py3-none-any.whl", hash = "sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d", size = 1164562, upload-time = "2026-05-14T12:04:29.092Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "frozenlist"
|
name = "frozenlist"
|
||||||
version = "1.8.0"
|
version = "1.8.0"
|
||||||
@ -1092,6 +1189,73 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
|
{ url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "kiwisolver"
|
||||||
|
version = "1.5.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/d0/67/9c61eccb13f0bdca9307614e782fec49ffdde0f7a2314935d489fa93cd9c/kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a", size = 103482, upload-time = "2026-03-09T13:15:53.382Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9d/69/024d6711d5ba575aa65d5538042e99964104e97fa153a9f10bc369182bc2/kiwisolver-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fd40bb9cd0891c4c3cb1ddf83f8bbfa15731a248fdc8162669405451e2724b09", size = 123166, upload-time = "2026-03-09T13:13:48.032Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ce/48/adbb40df306f587054a348831220812b9b1d787aff714cfbc8556e38fccd/kiwisolver-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0e1403fd7c26d77c1f03e096dc58a5c726503fa0db0456678b8668f76f521e3", size = 66395, upload-time = "2026-03-09T13:13:49.365Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a8/3a/d0a972b34e1c63e2409413104216cd1caa02c5a37cb668d1687d466c1c45/kiwisolver-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dda366d548e89a90d88a86c692377d18d8bd64b39c1fb2b92cb31370e2896bbd", size = 64065, upload-time = "2026-03-09T13:13:50.562Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/2b/0a/7b98e1e119878a27ba8618ca1e18b14f992ff1eda40f47bccccf4de44121/kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3", size = 1477903, upload-time = "2026-03-09T13:13:52.084Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/18/d8/55638d89ffd27799d5cc3d8aa28e12f4ce7a64d67b285114dbedc8ea4136/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c50b89ffd3e1a911c69a1dd3de7173c0cd10b130f56222e57898683841e4f96", size = 1278751, upload-time = "2026-03-09T13:13:54.673Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b8/97/b4c8d0d18421ecceba20ad8701358453b88e32414e6f6950b5a4bad54e65/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4db576bb8c3ef9365f8b40fe0f671644de6736ae2c27a2c62d7d8a1b4329f099", size = 1296793, upload-time = "2026-03-09T13:13:56.287Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c4/10/f862f94b6389d8957448ec9df59450b81bec4abb318805375c401a1e6892/kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0b85aad90cea8ac6797a53b5d5f2e967334fa4d1149f031c4537569972596cb8", size = 1346041, upload-time = "2026-03-09T13:13:58.269Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a3/6a/f1650af35821eaf09de398ec0bc2aefc8f211f0cda50204c9f1673741ba9/kiwisolver-1.5.0-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:d36ca54cb4c6c4686f7cbb7b817f66f5911c12ddb519450bbe86707155028f87", size = 987292, upload-time = "2026-03-09T13:13:59.871Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/de/19/d7fb82984b9238115fe629c915007be608ebd23dc8629703d917dbfaffd4/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:38f4a703656f493b0ad185211ccfca7f0386120f022066b018eb5296d8613e23", size = 2227865, upload-time = "2026-03-09T13:14:01.401Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7f/b9/46b7f386589fd222dac9e9de9c956ce5bcefe2ee73b4e79891381dda8654/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ac2360e93cb41be81121755c6462cff3beaa9967188c866e5fce5cf13170859", size = 2324369, upload-time = "2026-03-09T13:14:02.972Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/92/8b/95e237cf3d9c642960153c769ddcbe278f182c8affb20cecc1cc983e7cc5/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c95cab08d1965db3d84a121f1c7ce7479bdd4072c9b3dafd8fecce48a2e6b902", size = 1977989, upload-time = "2026-03-09T13:14:04.503Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1b/95/980c9df53501892784997820136c01f62bc1865e31b82b9560f980c0e649/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc20894c3d21194d8041a28b65622d5b86db786da6e3cfe73f0c762951a61167", size = 2491645, upload-time = "2026-03-09T13:14:06.106Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cb/32/900647fd0840abebe1561792c6b31e6a7c0e278fc3973d30572a965ca14c/kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7a32f72973f0f950c1920475d5c5ea3d971b81b6f0ec53b8d0a956cc965f22e0", size = 2295237, upload-time = "2026-03-09T13:14:08.891Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/be/8a/be60e3bbcf513cc5a50f4a3e88e1dcecebb79c1ad607a7222877becaa101/kiwisolver-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bf3acf1419fa93064a4c2189ac0b58e3be7872bf6ee6177b0d4c63dc4cea276", size = 73573, upload-time = "2026-03-09T13:14:12.327Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4d/d2/64be2e429eb4fca7f7e1c52a91b12663aeaf25de3895e5cca0f47ef2a8d0/kiwisolver-1.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:fa8eb9ecdb7efb0b226acec134e0d709e87a909fa4971a54c0c4f6e88635484c", size = 64998, upload-time = "2026-03-09T13:14:13.469Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b0/69/ce68dd0c85755ae2de490bf015b62f2cea5f6b14ff00a463f9d0774449ff/kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db485b3847d182b908b483b2ed133c66d88d49cacf98fd278fadafe11b4478d1", size = 125700, upload-time = "2026-03-09T13:14:14.636Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/74/aa/937aac021cf9d4349990d47eb319309a51355ed1dbdc9c077cdc9224cb11/kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:be12f931839a3bdfe28b584db0e640a65a8bcbc24560ae3fdb025a449b3d754e", size = 67537, upload-time = "2026-03-09T13:14:15.808Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ee/20/3a87fbece2c40ad0f6f0aefa93542559159c5f99831d596050e8afae7a9f/kiwisolver-1.5.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:16b85d37c2cbb3253226d26e64663f755d88a03439a9c47df6246b35defbdfb7", size = 65514, upload-time = "2026-03-09T13:14:18.035Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f0/7f/f943879cda9007c45e1f7dba216d705c3a18d6b35830e488b6c6a4e7cdf0/kiwisolver-1.5.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4432b835675f0ea7414aab3d37d119f7226d24869b7a829caeab49ebda407b0c", size = 1584848, upload-time = "2026-03-09T13:14:19.745Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/37/f8/4d4f85cc1870c127c88d950913370dd76138482161cd07eabbc450deff01/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b0feb50971481a2cc44d94e88bdb02cdd497618252ae226b8eb1201b957e368", size = 1391542, upload-time = "2026-03-09T13:14:21.54Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/04/0b/65dd2916c84d252b244bd405303220f729e7c17c9d7d33dca6feeff9ffc4/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56fa888f10d0f367155e76ce849fa1166fc9730d13bd2d65a2aa13b6f5424489", size = 1404447, upload-time = "2026-03-09T13:14:23.205Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/39/5c/2606a373247babce9b1d056c03a04b65f3cf5290a8eac5d7bdead0a17e21/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:940dda65d5e764406b9fb92761cbf462e4e63f712ab60ed98f70552e496f3bf1", size = 1455918, upload-time = "2026-03-09T13:14:24.74Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d5/d1/c6078b5756670658e9192a2ef11e939c92918833d2745f85cd14a6004bdf/kiwisolver-1.5.0-cp313-cp313t-manylinux_2_39_riscv64.whl", hash = "sha256:89fc958c702ee9a745e4700378f5d23fddbc46ff89e8fdbf5395c24d5c1452a3", size = 1072856, upload-time = "2026-03-09T13:14:26.597Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/cb/c8/7def6ddf16eb2b3741d8b172bdaa9af882b03c78e9b0772975408801fa63/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9027d773c4ff81487181a925945743413f6069634d0b122d0b37684ccf4f1e18", size = 2333580, upload-time = "2026-03-09T13:14:28.237Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9e/87/2ac1fce0eb1e616fcd3c35caa23e665e9b1948bb984f4764790924594128/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:5b233ea3e165e43e35dba1d2b8ecc21cf070b45b65ae17dd2747d2713d942021", size = 2423018, upload-time = "2026-03-09T13:14:30.018Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/67/13/c6700ccc6cc218716bfcda4935e4b2997039869b4ad8a94f364c5a3b8e63/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ce9bf03dad3b46408c08649c6fbd6ca28a9fce0eb32fdfffa6775a13103b5310", size = 2062804, upload-time = "2026-03-09T13:14:32.888Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1b/bd/877056304626943ff0f1f44c08f584300c199b887cb3176cd7e34f1515f1/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:fc4d3f1fb9ca0ae9f97b095963bc6326f1dbfd3779d6679a1e016b9baaa153d3", size = 2597482, upload-time = "2026-03-09T13:14:34.971Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/75/19/c60626c47bf0f8ac5dcf72c6c98e266d714f2fbbfd50cf6dab5ede3aaa50/kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f443b4825c50a51ee68585522ab4a1d1257fac65896f282b4c6763337ac9f5d2", size = 2394328, upload-time = "2026-03-09T13:14:36.816Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/47/84/6a6d5e5bb8273756c27b7d810d47f7ef2f1f9b9fd23c9ee9a3f8c75c9cef/kiwisolver-1.5.0-cp313-cp313t-win_arm64.whl", hash = "sha256:893ff3a711d1b515ba9da14ee090519bad4610ed1962fbe298a434e8c5f8db53", size = 68410, upload-time = "2026-03-09T13:14:38.695Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e4/d7/060f45052f2a01ad5762c8fdecd6d7a752b43400dc29ff75cd47225a40fd/kiwisolver-1.5.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8df31fe574b8b3993cc61764f40941111b25c2d9fea13d3ce24a49907cd2d615", size = 123231, upload-time = "2026-03-09T13:14:41.323Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c2/a7/78da680eadd06ff35edef6ef68a1ad273bad3e2a0936c9a885103230aece/kiwisolver-1.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1d49a49ac4cbfb7c1375301cd1ec90169dfeae55ff84710d782260ce77a75a02", size = 66489, upload-time = "2026-03-09T13:14:42.534Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/49/b2/97980f3ad4fae37dd7fe31626e2bf75fbf8bdf5d303950ec1fab39a12da8/kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e", size = 64063, upload-time = "2026-03-09T13:14:44.759Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e7/f9/b06c934a6aa8bc91f566bd2a214fd04c30506c2d9e2b6b171953216a65b6/kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac", size = 1475913, upload-time = "2026-03-09T13:14:46.247Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6b/f0/f768ae564a710135630672981231320bc403cf9152b5596ec5289de0f106/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e7f886f47ab881692f278ae901039a234e4025a68e6dfab514263a0b1c4ae05", size = 1282782, upload-time = "2026-03-09T13:14:48.458Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e2/9f/1de7aad00697325f05238a5f2eafbd487fb637cc27a558b5367a5f37fb7f/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5060731cc3ed12ca3a8b57acd4aeca5bbc2f49216dd0bec1650a1acd89486bcd", size = 1300815, upload-time = "2026-03-09T13:14:50.721Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/5a/c2/297f25141d2e468e0ce7f7a7b92e0cf8918143a0cbd3422c1ad627e85a06/kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a4aa69609f40fce3cbc3f87b2061f042eee32f94b8f11db707b66a26461591a", size = 1347925, upload-time = "2026-03-09T13:14:52.304Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b9/d3/f4c73a02eb41520c47610207b21afa8cdd18fdbf64ffd94674ae21c4812d/kiwisolver-1.5.0-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:d168fda2dbff7b9b5f38e693182d792a938c31db4dac3a80a4888de603c99554", size = 991322, upload-time = "2026-03-09T13:14:54.637Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7b/46/d3f2efef7732fcda98d22bf4ad5d3d71d545167a852ca710a494f4c15343/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:413b820229730d358efd838ecbab79902fe97094565fdc80ddb6b0a18c18a581", size = 2232857, upload-time = "2026-03-09T13:14:56.471Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3f/ec/2d9756bf2b6d26ae4349b8d3662fb3993f16d80c1f971c179ce862b9dbae/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5124d1ea754509b09e53738ec185584cc609aae4a3b510aaf4ed6aa047ef9303", size = 2329376, upload-time = "2026-03-09T13:14:58.072Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8f/9f/876a0a0f2260f1bde92e002b3019a5fabc35e0939c7d945e0fa66185eb20/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e4415a8db000bf49a6dd1c478bf70062eaacff0f462b92b0ba68791a905861f9", size = 1982549, upload-time = "2026-03-09T13:14:59.668Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6c/4f/ba3624dfac23a64d54ac4179832860cb537c1b0af06024936e82ca4154a0/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d618fd27420381a4f6044faa71f46d8bfd911bd077c555f7138ed88729bfbe79", size = 2494680, upload-time = "2026-03-09T13:15:01.364Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/39/b7/97716b190ab98911b20d10bf92eca469121ec483b8ce0edd314f51bc85af/kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5092eb5b1172947f57d6ea7d89b2f29650414e4293c47707eb499ec07a0ac796", size = 2297905, upload-time = "2026-03-09T13:15:03.925Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a3/36/4e551e8aa55c9188bca9abb5096805edbf7431072b76e2298e34fd3a3008/kiwisolver-1.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e", size = 75086, upload-time = "2026-03-09T13:15:07.775Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/70/15/9b90f7df0e31a003c71649cf66ef61c3c1b862f48c81007fa2383c8bd8d7/kiwisolver-1.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:fa6248cd194edff41d7ea9425ced8ca3a6f838bfb295f6f1d6e6bb694a8518df", size = 66577, upload-time = "2026-03-09T13:15:09.139Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/17/01/7dc8c5443ff42b38e72731643ed7cf1ed9bf01691ae5cdca98501999ed83/kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d1ffeb80b5676463d7a7d56acbe8e37a20ce725570e09549fe738e02ca6b7e1e", size = 125794, upload-time = "2026-03-09T13:15:10.525Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/46/8a/b4ebe46ebaac6a303417fab10c2e165c557ddaff558f9699d302b256bc53/kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bc4d8e252f532ab46a1de9349e2d27b91fce46736a9eedaa37beaca66f574ed4", size = 67646, upload-time = "2026-03-09T13:15:12.016Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/60/35/10a844afc5f19d6f567359bf4789e26661755a2f36200d5d1ed8ad0126e5/kiwisolver-1.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6783e069732715ad0c3ce96dbf21dbc2235ab0593f2baf6338101f70371f4028", size = 65511, upload-time = "2026-03-09T13:15:13.311Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/f8/8a/685b297052dd041dcebce8e8787b58923b6e78acc6115a0dc9189011c44b/kiwisolver-1.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e7c4c09a490dc4d4a7f8cbee56c606a320f9dc28cf92a7157a39d1ce7676a657", size = 1584858, upload-time = "2026-03-09T13:15:15.103Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/9e/80/04865e3d4638ac5bddec28908916df4a3075b8c6cc101786a96803188b96/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a075bd7bd19c70cf67c8badfa36cf7c5d8de3c9ddb8420c51e10d9c50e94920", size = 1392539, upload-time = "2026-03-09T13:15:16.661Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ba/01/77a19cacc0893fa13fafa46d1bba06fb4dc2360b3292baf4b56d8e067b24/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bdd3e53429ff02aa319ba59dfe4ceeec345bf46cf180ec2cf6fd5b942e7975e9", size = 1405310, upload-time = "2026-03-09T13:15:18.229Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/53/39/bcaf5d0cca50e604cfa9b4e3ae1d64b50ca1ae5b754122396084599ef903/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cdcb35dc9d807259c981a85531048ede628eabcffb3239adf3d17463518992d", size = 1456244, upload-time = "2026-03-09T13:15:20.444Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/d0/7a/72c187abc6975f6978c3e39b7cf67aeb8b3c0a8f9790aa7fd412855e9e1f/kiwisolver-1.5.0-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:70d593af6a6ca332d1df73d519fddb5148edb15cd90d5f0155e3746a6d4fcc65", size = 1073154, upload-time = "2026-03-09T13:15:22.039Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c7/ca/cf5b25783ebbd59143b4371ed0c8428a278abe68d6d0104b01865b1bbd0f/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:377815a8616074cabbf3f53354e1d040c35815a134e01d7614b7692e4bf8acfa", size = 2334377, upload-time = "2026-03-09T13:15:23.741Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4a/e5/b1f492adc516796e88751282276745340e2a72dcd0d36cf7173e0daf3210/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0255a027391d52944eae1dbb5d4cc5903f57092f3674e8e544cdd2622826b3f0", size = 2425288, upload-time = "2026-03-09T13:15:25.789Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e6/e5/9b21fbe91a61b8f409d74a26498706e97a48008bfcd1864373d32a6ba31c/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:012b1eb16e28718fa782b5e61dc6f2da1f0792ca73bd05d54de6cb9561665fc9", size = 2063158, upload-time = "2026-03-09T13:15:27.63Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b1/02/83f47986138310f95ea95531f851b2a62227c11cbc3e690ae1374fe49f0f/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0e3aafb33aed7479377e5e9a82e9d4bf87063741fc99fc7ae48b0f16e32bdd6f", size = 2597260, upload-time = "2026-03-09T13:15:29.421Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/07/18/43a5f24608d8c313dd189cf838c8e68d75b115567c6279de7796197cfb6a/kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7a116ae737f0000343218c4edf5bd45893bfeaff0993c0b215d7124c9f77646", size = 2394403, upload-time = "2026-03-09T13:15:31.517Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3b/b5/98222136d839b8afabcaa943b09bd05888c2d36355b7e448550211d1fca4/kiwisolver-1.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1dd9b0b119a350976a6d781e7278ec7aca0b201e1a9e2d23d9804afecb6ca681", size = 79687, upload-time = "2026-03-09T13:15:33.204Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/99/a2/ca7dc962848040befed12732dff6acae7fb3c4f6fc4272b3f6c9a30b8713/kiwisolver-1.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:58f812017cd2985c21fbffb4864d59174d4903dd66fa23815e74bbc7a0e2dd57", size = 70032, upload-time = "2026-03-09T13:15:34.411Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kombu"
|
name = "kombu"
|
||||||
version = "5.6.2"
|
version = "5.6.2"
|
||||||
@ -1184,6 +1348,53 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" },
|
{ url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "matplotlib"
|
||||||
|
version = "3.11.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "contourpy" },
|
||||||
|
{ name = "cycler" },
|
||||||
|
{ name = "fonttools" },
|
||||||
|
{ name = "kiwisolver" },
|
||||||
|
{ name = "numpy" },
|
||||||
|
{ name = "packaging" },
|
||||||
|
{ name = "pillow" },
|
||||||
|
{ name = "pyparsing" },
|
||||||
|
{ name = "python-dateutil" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/1f/24/080c99d223d158d3a8902769269ab6da5b50f7a0e6e072513907e02b7a6c/matplotlib-3.11.0.tar.gz", hash = "sha256:68c0c7be01b30dcca3638934f7f591df73401235cbdbf0d1ab1c71e7db7f8b57", size = 33251176, upload-time = "2026-06-12T02:29:15.508Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/55/41/aa47f156b061d14c98b906f76c428507397708ec63ff94f410ae1752b426/matplotlib-3.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce3b839b34ae1f430b4616893a2945a2999debaa7e94e7e29a2a8bbf286f7b5", size = 9450532, upload-time = "2026-06-12T02:28:06.769Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8c/4f/5a9eb0375e81413953febf8af7b012a6b6357f53438a15c4f5ad86c6bbb5/matplotlib-3.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:373db8f91214e8ccaf35ac833cc1dd59dd961e148bbd55dd027141591dde1313", size = 9279760, upload-time = "2026-06-12T02:28:09.152Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/a4/c0/1117d53077e3ac3152503a84e9cf7a5c239576805ee71276e80c2aaa7471/matplotlib-3.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be152b7570324dc8d01574cc9474dd2d803237acf528bcbb5b211fa347461a09", size = 10031623, upload-time = "2026-06-12T02:28:11.26Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/92/7e/e937138daffad65b71bf831a377809dcbc830fb4f31a31e067dc1faa2575/matplotlib-3.11.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:126f256df600652d7e4b394cf3164ff75210a00038f287c95a012a6f58d0e83f", size = 10839372, upload-time = "2026-06-12T02:28:14.102Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1d/c2/438ecc197ffb8023b6b9922915542f2172f5fd45b76703b0b4fc47322243/matplotlib-3.11.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:03acfeddf87b0dddb11b081ef7740ad445a3ca8bcb6b8e3011b08f2cf802b75c", size = 10924099, upload-time = "2026-06-12T02:28:16.383Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/40/2e/395883da416f378b3ed2c9f3e843ac477eae1ce731b671b79adaa6f0bacd/matplotlib-3.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:ab3722f04f3ff34c23b5012c5873d2894174e06c3822fcdac3610965a5ac7d06", size = 9329727, upload-time = "2026-06-12T02:28:18.581Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/61/82/2c388956abf8bf392dfb5b8917c502f1082df6a941b781ab8c8e5ba2474b/matplotlib-3.11.0-cp313-cp313-win_arm64.whl", hash = "sha256:c945824670fb8915b4ac879e5e61f3c58e0913022f70a0de4c082b17372f8771", size = 9003506, upload-time = "2026-06-12T02:28:20.474Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c8/c1/34454baa44da7975ada82e9aea37105ec47059514dc967d3be14426ba8dc/matplotlib-3.11.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3489c3dc487669b4a980bc3068f87856de7a1564248d3f6c629efb2a58b03f24", size = 9499838, upload-time = "2026-06-12T02:28:22.713Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b1/c3/98fe79a398cf232219f090163a7fa7e6766e9f2e0ad26df54d6f8934d8ee/matplotlib-3.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:6a98f5476ce784a50ce09998f4ae1e6a9f25043cef8a480c98949902eda74620", size = 9332298, upload-time = "2026-06-12T02:28:24.796Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/95/e4/b4b7c33151e74e5c802f3cde1ba807ebfc38401e329b44e215a5888dd76d/matplotlib-3.11.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:565af866fd63e4bd3f987d580afe27c44c2552a3b3305f4ecbb85133601ea6f3", size = 10045491, upload-time = "2026-06-12T02:28:27.141Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/71/28/394548efd68354110c1a1be11fe6b6e559e06d1a23da35908a0e316c55a9/matplotlib-3.11.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e6b3e64dea5062c570f04358e2711859f3531b459f29516274fbad889079e4f3", size = 10857059, upload-time = "2026-06-12T02:28:29.222Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c8/44/e7922e6e2a4d63bdfbc9dc4a53e3850ab438d46cf42e6779bb15ec92c948/matplotlib-3.11.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:942b37c5db1899610bd1543ce8e13e4ecff9a4633e7f63bb6aa9205d2644ebd1", size = 10939576, upload-time = "2026-06-12T02:28:31.66Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3d/be/b1ca96003a441d619b727fee21d671fdff7a5ce2f1bb797b2521aa2f679a/matplotlib-3.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:c08e649a6313e1291e713623b97a38e5bb4aa580b2a100a94a3309bc6b9c8eb3", size = 9379519, upload-time = "2026-06-12T02:28:33.888Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e3/72/4bf3b91821c34596dd6a7bdac5836d94f744144c8208939ef49d8ec43f7e/matplotlib-3.11.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2746cd2c113742ff6ce37a864c5ac5fd7aa644568f445e66166e457ac78e40e0", size = 9055456, upload-time = "2026-06-12T02:28:35.878Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/57/52/a94102ac99eb78e2fe9b826674f9ef9ee23327110ea6ab4776c1b4eb6209/matplotlib-3.11.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3338e3e3de128cf50d0d2fb92a122815daf9c755bd882a474343c05f8fd7ec79", size = 9452137, upload-time = "2026-06-12T02:28:37.93Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/7c/03/b8cdb625a21f710dfa11bbca1f48fb4057d2c0286975f8b415bf80942c99/matplotlib-3.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:25c2e5455efd8d99f41fb79871a31feb7d301569642e332ec58d72cfe9282bc3", size = 9281514, upload-time = "2026-06-12T02:28:40.028Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b7/2d/4e1240ea82ee197dfb3851e71f71c87eeeb975f1753b56a0588e4e80739a/matplotlib-3.11.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d9695457a467ff86d23f35037a43deb6f1134dd6d3e2ac8ce1e2087cff09ffb9", size = 10843005, upload-time = "2026-06-12T02:28:42.39Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/29/dc/6377ecfaa5fef79430f74a1a16638b4e2aa30d4692bae2c19f9d76fe3b01/matplotlib-3.11.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:19c16c61dea63b3582918503e6b294193961261d9daa806d4ae2151f1ad05430", size = 11127459, upload-time = "2026-06-12T02:28:44.483Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/6f/41/795c405aa7560443a3b01309424cde4a1113b85c90b8a63417444a749617/matplotlib-3.11.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2d72ea8b7924f3cb955e61518d21e43b3df1e6c8a793b480a0c1214f185d30ba", size = 10925160, upload-time = "2026-06-12T02:28:46.564Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/1a/f7/3a9e6389a7cfaeff76c56e40c2dabcb13110e21e82f837228c834ebe748c/matplotlib-3.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:1c02da0a629dfa9debf52725ea06866b74c1fb70a895bae05e4493d34074f9f2", size = 9485186, upload-time = "2026-06-12T02:28:49.344Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8b/c0/396478ee7cf2091d182db8b4a8695f6a37f1ddb978989cf9dbb84cd5c123/matplotlib-3.11.0-cp314-cp314-win_arm64.whl", hash = "sha256:aa55d73b3117d4b07f959cd9eb6f69b375d8df3414139c479388e551aa5d999d", size = 9160349, upload-time = "2026-06-12T02:28:51.382Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/c5/6f/1c3bd51bb2b34eaacdcf3c3d859dbb357f952fc8020c617dc118ad7c9e38/matplotlib-3.11.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a9d8c6e7cd2f0ddf11d8d92e520dd1d9d2abb0cf6ac8831e338666c81e905847", size = 9500921, upload-time = "2026-06-12T02:28:53.443Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/e0/0d/4d861d0121840cb1a3fd4a10deb211efd6fccd481ed23e553f31f4f4da4a/matplotlib-3.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:be050fcf32f729eda99f7f75a80bf67612ce16ab9ac1c23a387dcaede95cb70e", size = 9332190, upload-time = "2026-06-12T02:28:55.623Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/4b/cb/22f6bc35711a0b5639a784e74e653e77c86210bd4304449dd399a482f74e/matplotlib-3.11.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfabef0230d0697aa0d717385194dd41162e00207a68bf4abf94c2bf4c27dca0", size = 10854181, upload-time = "2026-06-12T02:28:57.856Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/3f/7e/9a9eaca731a2939589da520f0ebe8fd8753d0f51fca98c7d20af6dbe261a/matplotlib-3.11.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1644db30e759199443493ac5e5caec24fdb775a8f6123021f85ba47c4133c3cb", size = 11137715, upload-time = "2026-06-12T02:29:00.555Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/ef/f9/9b030b6088354acb0296871bb624b25befc1c42509d3c6cd17420c83a5b8/matplotlib-3.11.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:15b0d160079cb10699a0e98b5989c70677b2df7cacdc62af67c30f2facec46d9", size = 10939427, upload-time = "2026-06-12T02:29:02.527Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/59/94/6b273eaee4ee250863567d100865da61a5c1527fa67f527b7ed22e0dd29c/matplotlib-3.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:446307e6b04b57b1f1239e228a1ec2af0d589a1008cebc3dfa3f5441d095cfb6", size = 9535809, upload-time = "2026-06-12T02:29:04.994Z" },
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/60/95/1d36bddf2b7e2692c1540e78a6e5bc88bc1496b137e3e35a611f91b65ac3/matplotlib-3.11.0-cp314-cp314t-win_arm64.whl", hash = "sha256:652fb5696271d4c50f196d22a5ff4f8e4444c74f847423570d7dc0aa2bbd0159", size = 9209226, upload-time = "2026-06-12T02:29:07.033Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mdurl"
|
name = "mdurl"
|
||||||
version = "0.1.2"
|
version = "0.1.2"
|
||||||
@ -1582,6 +1793,22 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/00/50/257a880384a1dd502d543b0067945074d63cd17d0840e958355bc8197da8/onnx-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:8e268cdc0547e3949799ffd4a44451dc2b9080b57d0824a2db680b6ec65506f0", size = 17231391, upload-time = "2026-06-15T12:50:03.047Z" },
|
{ url = "https://files.pythonhosted.org/packages/00/50/257a880384a1dd502d543b0067945074d63cd17d0840e958355bc8197da8/onnx-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:8e268cdc0547e3949799ffd4a44451dc2b9080b57d0824a2db680b6ec65506f0", size = 17231391, upload-time = "2026-06-15T12:50:03.047Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "onnx-ir"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "ml-dtypes" },
|
||||||
|
{ name = "numpy" },
|
||||||
|
{ name = "onnx" },
|
||||||
|
{ name = "sympy" },
|
||||||
|
{ name = "typing-extensions" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/35/e6/672fefb2f108d077f58181a7babf4c0f8d1182a30353ffc9c79c63afc5ee/onnx_ir-0.2.1.tar.gz", hash = "sha256:8b8b10a93f43e65962104de6070c43c5dacb0e3cdfefc7c8059dd83c9db64f35", size = 144279, upload-time = "2026-04-20T20:21:47.735Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/8c/aa/f7a53321c60b9ad9ee184b6018292ed6b5389947592a2c8c09c736bb7f9e/onnx_ir-0.2.1-py3-none-any.whl", hash = "sha256:c7285da889312f91882de2092e298a9eeeefbfc1d1951c49d983992967eb09a7", size = 166792, upload-time = "2026-04-20T20:21:46.357Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "onnxruntime"
|
name = "onnxruntime"
|
||||||
version = "1.27.0"
|
version = "1.27.0"
|
||||||
@ -1609,6 +1836,23 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/b7/f6/2bac21f722aa45d876d4a51f26bd0ef30e704068a3cd5021a5a7cd784271/onnxruntime-1.27.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:370d211e1ceeac4cd5f45301655463ac59e27cdc74d9f7aeb2d19ff4b7a76715", size = 18670781, upload-time = "2026-06-15T22:43:17.151Z" },
|
{ url = "https://files.pythonhosted.org/packages/b7/f6/2bac21f722aa45d876d4a51f26bd0ef30e704068a3cd5021a5a7cd784271/onnxruntime-1.27.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:370d211e1ceeac4cd5f45301655463ac59e27cdc74d9f7aeb2d19ff4b7a76715", size = 18670781, upload-time = "2026-06-15T22:43:17.151Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "onnxscript"
|
||||||
|
version = "0.7.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "ml-dtypes" },
|
||||||
|
{ name = "numpy" },
|
||||||
|
{ name = "onnx" },
|
||||||
|
{ name = "onnx-ir" },
|
||||||
|
{ name = "packaging" },
|
||||||
|
{ name = "typing-extensions" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/9b/99/fd948eba63ba65b52265a4cd09a14f96bb9f5b730fcef58876c4358bf406/onnxscript-0.7.0.tar.gz", hash = "sha256:c95ed7b339b02cface56ee27689565c46612e1fc542c562298dddfdad5268dc5", size = 612032, upload-time = "2026-04-20T17:09:19.775Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/b9/ce/2ed92575cc3be4ea1db5f38f16f20765f9b20b69b14d6c1d9972658a8ee9/onnxscript-0.7.0-py3-none-any.whl", hash = "sha256:5b356907d4501e9919f8599c91d8da967406a37b1fac2b40caa55a49acf242ea", size = 714842, upload-time = "2026-04-20T17:09:22.089Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "opencv-python-headless"
|
name = "opencv-python-headless"
|
||||||
version = "4.13.0.92"
|
version = "4.13.0.92"
|
||||||
@ -2218,11 +2462,12 @@ wheels = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "quickdraw-bot"
|
name = "quickdraw-bot"
|
||||||
version = "0.0.1"
|
version = "0.0.1"
|
||||||
source = { virtual = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "dvc" },
|
{ name = "dvc" },
|
||||||
{ name = "dvc-webdav" },
|
{ name = "dvc-webdav" },
|
||||||
{ name = "dvclive" },
|
{ name = "dvclive" },
|
||||||
|
{ name = "matplotlib" },
|
||||||
{ name = "numpy" },
|
{ name = "numpy" },
|
||||||
{ name = "opencv-python-headless" },
|
{ name = "opencv-python-headless" },
|
||||||
{ name = "torch" },
|
{ name = "torch" },
|
||||||
@ -2234,6 +2479,7 @@ dependencies = [
|
|||||||
deploy = [
|
deploy = [
|
||||||
{ name = "onnx" },
|
{ name = "onnx" },
|
||||||
{ name = "onnxruntime" },
|
{ name = "onnxruntime" },
|
||||||
|
{ name = "onnxscript" },
|
||||||
{ name = "openvino" },
|
{ name = "openvino" },
|
||||||
]
|
]
|
||||||
dev = [
|
dev = [
|
||||||
@ -2247,6 +2493,7 @@ requires-dist = [
|
|||||||
{ name = "dvc", specifier = "~=3.67.1" },
|
{ name = "dvc", specifier = "~=3.67.1" },
|
||||||
{ name = "dvc-webdav", specifier = "~=3.0.1" },
|
{ name = "dvc-webdav", specifier = "~=3.0.1" },
|
||||||
{ name = "dvclive", specifier = "~=3.49.1" },
|
{ name = "dvclive", specifier = "~=3.49.1" },
|
||||||
|
{ name = "matplotlib", specifier = "~=3.11.0" },
|
||||||
{ name = "numpy", specifier = "~=2.4.6" },
|
{ name = "numpy", specifier = "~=2.4.6" },
|
||||||
{ name = "opencv-python-headless", specifier = "~=4.13.0.92" },
|
{ name = "opencv-python-headless", specifier = "~=4.13.0.92" },
|
||||||
{ name = "torch", specifier = "~=2.12.0" },
|
{ name = "torch", specifier = "~=2.12.0" },
|
||||||
@ -2258,6 +2505,7 @@ requires-dist = [
|
|||||||
deploy = [
|
deploy = [
|
||||||
{ name = "onnx", specifier = "~=1.22.0" },
|
{ name = "onnx", specifier = "~=1.22.0" },
|
||||||
{ name = "onnxruntime", specifier = "~=1.27.0" },
|
{ name = "onnxruntime", specifier = "~=1.27.0" },
|
||||||
|
{ name = "onnxscript", specifier = "~=0.7.0" },
|
||||||
{ name = "openvino", specifier = "~=2026.2.0" },
|
{ name = "openvino", specifier = "~=2026.2.0" },
|
||||||
]
|
]
|
||||||
dev = [
|
dev = [
|
||||||
|
|||||||
Reference in New Issue
Block a user