From 8894c405cf51efa9f3fc4c4d881ec508cf2715b5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 11 Feb 2024 19:03:27 +0000 Subject: [PATCH] deploy: 6385befed4fd1632735f2d9ef346188442974ed8 --- .nojekyll | 0 .../figure-html/cell-103-output-1.png | Bin 0 -> 5972 bytes .../figure-html/cell-124-output-1.png | Bin 0 -> 19079 bytes .../figure-html/cell-189-output-1.png | Bin 0 -> 19897 bytes .../figure-html/cell-194-output-1.png | Bin 0 -> 32858 bytes .../figure-html/cell-196-output-1.png | Bin 0 -> 20005 bytes .../figure-html/cell-198-output-1.png | Bin 0 -> 121649 bytes .../figure-html/cell-199-output-1.png | Bin 0 -> 46885 bytes .../figure-html/cell-229-output-1.png | Bin 0 -> 14422 bytes .../figure-html/cell-230-output-1.png | Bin 0 -> 14422 bytes .../figure-html/cell-232-output-1.png | Bin 0 -> 24350 bytes .../figure-html/cell-234-output-1.png | Bin 0 -> 21775 bytes .../figure-html/cell-234-output-2.png | Bin 0 -> 21710 bytes .../figure-html/cell-234-output-3.png | Bin 0 -> 21759 bytes .../figure-html/cell-251-output-2.png | Bin 0 -> 17949 bytes .../figure-html/cell-252-output-2.png | Bin 0 -> 17573 bytes .../figure-html/cell-252-output-3.png | Bin 0 -> 16907 bytes .../figure-html/cell-16-output-1.png | Bin 0 -> 17978 bytes .../figure-html/cell-17-output-2.png | Bin 0 -> 8915 bytes .../figure-html/cell-19-output-1.png | Bin 0 -> 11846 bytes .../figure-html/cell-19-output-2.png | Bin 0 -> 11788 bytes .../figure-html/cell-21-output-1.png | Bin 0 -> 7778 bytes .../figure-html/cell-21-output-2.png | Bin 0 -> 7778 bytes .../figure-html/cell-21-output-3.png | Bin 0 -> 7778 bytes .../figure-html/cell-21-output-4.png | Bin 0 -> 7778 bytes .../figure-html/cell-22-output-2.png | Bin 0 -> 12695 bytes .../figure-html/cell-24-output-2.png | Bin 0 -> 9747 bytes .../figure-html/cell-25-output-1.png | Bin 0 -> 10597 bytes .../figure-html/cell-25-output-2.png | Bin 0 -> 12759 bytes .../figure-html/cell-26-output-1.png | Bin 0 -> 9270 bytes .../figure-html/cell-27-output-1.png | Bin 0 -> 8917 bytes .../figure-html/cell-27-output-2.png | Bin 0 -> 8917 bytes .../figure-html/cell-27-output-3.png | Bin 0 -> 8906 bytes .../figure-html/cell-27-output-4.png | Bin 0 -> 8861 bytes .../figure-html/cell-28-output-1.png | Bin 0 -> 7725 bytes .../figure-html/cell-29-output-1.png | Bin 0 -> 7692 bytes .../figure-html/cell-30-output-1.png | Bin 0 -> 8707 bytes .../figure-html/cell-32-output-1.png | Bin 0 -> 8833 bytes .../figure-html/cell-32-output-2.png | Bin 0 -> 10402 bytes .../figure-html/cell-32-output-3.png | Bin 0 -> 10661 bytes .../figure-html/cell-32-output-4.png | Bin 0 -> 10281 bytes .../figure-html/cell-32-output-5.png | Bin 0 -> 10241 bytes .../figure-html/cell-33-output-1.png | Bin 0 -> 8657 bytes .../figure-html/cell-34-output-1.png | Bin 0 -> 8273 bytes .../figure-html/cell-35-output-1.png | Bin 0 -> 8632 bytes .../figure-html/cell-36-output-1.png | Bin 0 -> 9715 bytes .../figure-html/cell-46-output-2.png | Bin 0 -> 8945 bytes .../figure-html/cell-46-output-4.png | Bin 0 -> 9808 bytes .../figure-html/cell-47-output-2.png | Bin 0 -> 8945 bytes .../figure-html/cell-47-output-4.png | Bin 0 -> 9808 bytes .../figure-html/cell-48-output-2.png | Bin 0 -> 10052 bytes .../figure-html/cell-49-output-2.png | Bin 0 -> 10041 bytes .../figure-html/cell-43-output-1.png | Bin 0 -> 10395 bytes .../figure-html/cell-43-output-2.png | Bin 0 -> 9791 bytes .../figure-html/cell-43-output-3.png | Bin 0 -> 9306 bytes .../figure-html/cell-43-output-4.png | Bin 0 -> 9014 bytes .../figure-html/cell-43-output-5.png | Bin 0 -> 91341 bytes .../figure-html/cell-43-output-6.png | Bin 0 -> 47567 bytes .../figure-html/cell-43-output-7.png | Bin 0 -> 45023 bytes .../figure-html/cell-43-output-8.png | Bin 0 -> 27579 bytes .../figure-html/cell-44-output-1.png | Bin 0 -> 10395 bytes .../figure-html/cell-44-output-2.png | Bin 0 -> 9791 bytes .../figure-html/cell-44-output-3.png | Bin 0 -> 9306 bytes .../figure-html/cell-44-output-4.png | Bin 0 -> 9014 bytes .../figure-html/cell-44-output-5.png | Bin 0 -> 91341 bytes .../figure-html/cell-44-output-6.png | Bin 0 -> 47567 bytes .../figure-html/cell-44-output-7.png | Bin 0 -> 45023 bytes .../figure-html/cell-44-output-8.png | Bin 0 -> 27579 bytes .../figure-html/cell-45-output-1.png | Bin 0 -> 12213 bytes .../figure-html/cell-71-output-2.png | Bin 0 -> 37241 bytes .../figure-html/cell-12-output-10.png | Bin 0 -> 11710 bytes .../figure-html/cell-12-output-2.png | Bin 0 -> 8216 bytes .../figure-html/cell-12-output-3.png | Bin 0 -> 8216 bytes .../figure-html/cell-12-output-4.png | Bin 0 -> 8216 bytes .../figure-html/cell-12-output-6.png | Bin 0 -> 8216 bytes .../figure-html/cell-12-output-7.png | Bin 0 -> 11710 bytes .../figure-html/cell-12-output-8.png | Bin 0 -> 11710 bytes .../figure-html/cell-12-output-9.png | Bin 0 -> 11710 bytes .../figure-html/cell-112-output-1.png | Bin 0 -> 14991 bytes .../figure-html/cell-112-output-2.png | Bin 0 -> 14991 bytes .../figure-html/cell-117-output-1.png | Bin 0 -> 20086 bytes .../figure-html/cell-117-output-2.png | Bin 0 -> 20086 bytes .../figure-html/cell-118-output-1.png | Bin 0 -> 16478 bytes .../figure-html/cell-118-output-2.png | Bin 0 -> 16478 bytes .../figure-html/cell-119-output-1.png | Bin 0 -> 15434 bytes .../figure-html/cell-119-output-2.png | Bin 0 -> 15434 bytes .../figure-html/cell-126-output-1.png | Bin 0 -> 1030899 bytes .../figure-html/cell-126-output-2.png | Bin 0 -> 19746 bytes .../figure-html/cell-20-output-1.png | Bin 0 -> 26587 bytes .../figure-html/cell-21-output-1.png | Bin 0 -> 26186 bytes .../figure-html/cell-22-output-1.png | Bin 0 -> 26641 bytes .../figure-html/cell-23-output-1.png | Bin 0 -> 13732 bytes .../figure-html/cell-24-output-1.png | Bin 0 -> 13732 bytes .../figure-html/cell-25-output-1.png | Bin 0 -> 14133 bytes .../figure-html/cell-26-output-1.png | Bin 0 -> 14199 bytes .../figure-html/cell-134-output-1.png | Bin 0 -> 7778 bytes .../figure-html/cell-134-output-2.png | Bin 0 -> 9769 bytes .../figure-html/cell-135-output-1.png | Bin 0 -> 7778 bytes .../figure-html/cell-135-output-2.png | Bin 0 -> 9489 bytes .../figure-html/cell-136-output-1.png | Bin 0 -> 7778 bytes .../figure-html/cell-136-output-2.png | Bin 0 -> 8058 bytes .../figure-html/cell-137-output-1.png | Bin 0 -> 7778 bytes .../figure-html/cell-137-output-2.png | Bin 0 -> 10107 bytes .../figure-html/cell-138-output-1.png | Bin 0 -> 7778 bytes .../figure-html/cell-138-output-2.png | Bin 0 -> 9613 bytes .../figure-html/cell-139-output-1.png | Bin 0 -> 8061 bytes .../figure-html/cell-139-output-2.png | Bin 0 -> 10854 bytes .../figure-html/cell-139-output-3.png | Bin 0 -> 10899 bytes .../figure-html/cell-53-output-1.png | Bin 0 -> 32858 bytes .../figure-html/cell-54-output-1.png | Bin 0 -> 26273 bytes .../figure-html/cell-56-output-1.png | Bin 0 -> 20005 bytes .../figure-html/cell-57-output-1.png | Bin 0 -> 14757 bytes .../figure-html/cell-9-output-1.png | Bin 0 -> 8911 bytes .../figure-html/cell-15-output-2.png | Bin 0 -> 10148 bytes .../figure-html/cell-18-output-2.png | Bin 0 -> 23406 bytes .../figure-html/cell-18-output-3.png | Bin 0 -> 11797 bytes .../figure-html/cell-18-output-4.png | Bin 0 -> 3869 bytes .../figure-html/cell-18-output-5.png | Bin 0 -> 3216 bytes .../figure-html/cell-18-output-6.png | Bin 0 -> 1870 bytes .../figure-html/cell-18-output-7.png | Bin 0 -> 5757 bytes .../figure-html/cell-6-output-2.png | Bin 0 -> 48036 bytes .../figure-html/cell-8-output-2.png | Bin 0 -> 5780 bytes .../figure-html/cell-9-output-2.png | Bin 0 -> 4745 bytes .../figure-html/cell-20-output-1.png | Bin 0 -> 176502 bytes .../figure-html/cell-22-output-3.png | Bin 0 -> 23190 bytes .../figure-html/cell-10-output-16.png | Bin 0 -> 20370 bytes .../figure-html/cell-11-output-18.png | Bin 0 -> 24874 bytes .../figure-html/cell-9-output-16.png | Bin 0 -> 18722 bytes .../figure-html/cell-9-output-17.png | Bin 0 -> 231294 bytes .../figure-html/cell-9-output-3.png | Bin 0 -> 40623 bytes .../figure-html/cell-9-output-6.png | Bin 0 -> 57865 bytes .../figure-html/cell-9-output-2.png | Bin 0 -> 23171 bytes .../figure-html/cell-11-output-2.png | Bin 0 -> 7917 bytes .../figure-html/cell-10-output-1.png | Bin 0 -> 24738 bytes .../figure-html/cell-10-output-2.png | Bin 0 -> 28098 bytes .../figure-html/cell-10-output-3.png | Bin 0 -> 27841 bytes .../figure-html/cell-4-output-1.png | Bin 0 -> 13490 bytes .../figure-html/cell-5-output-1.png | Bin 0 -> 19776 bytes .../figure-html/cell-10-output-1.png | Bin 0 -> 15180 bytes .../figure-html/cell-11-output-1.png | Bin 0 -> 17672 bytes .../figure-html/cell-12-output-1.png | Bin 0 -> 14966 bytes .../figure-html/cell-13-output-1.png | Bin 0 -> 12711 bytes .../figure-html/cell-14-output-1.png | Bin 0 -> 10958 bytes .../figure-html/cell-15-output-1.png | Bin 0 -> 10877 bytes .../figure-html/cell-22-output-1.png | Bin 0 -> 152884 bytes .../figure-html/cell-8-output-1.png | Bin 0 -> 17654 bytes .../figure-html/cell-8-output-2.png | Bin 0 -> 17505 bytes .../figure-html/cell-9-output-1.png | Bin 0 -> 16782 bytes .../figure-html/cell-5-output-3.png | Bin 0 -> 22780 bytes .../figure-html/cell-58-output-1.png | Bin 0 -> 19014 bytes .../figure-html/cell-3-output-1.png | Bin 0 -> 112231 bytes .../figure-html/cell-5-output-1.png | Bin 0 -> 32676 bytes .../figure-html/cell-5-output-2.png | Bin 0 -> 9313 bytes .../figure-html/cell-5-output-3.png | Bin 0 -> 9408 bytes .../figure-html/cell-7-output-1.png | Bin 0 -> 9155 bytes .../figure-html/cell-7-output-2.png | Bin 0 -> 8441 bytes .../figure-html/cell-8-output-1.png | Bin 0 -> 9155 bytes .../figure-html/cell-8-output-2.png | Bin 0 -> 8441 bytes .../figure-html/cell-15-output-1.png | Bin 0 -> 58934 bytes .../figure-html/cell-15-output-2.png | Bin 0 -> 40836 bytes .../figure-html/cell-3-output-1.png | Bin 0 -> 23354 bytes .../figure-html/cell-2-1-image.png | Bin 0 -> 146349 bytes .../figure-html/cell-5-output-1.png | Bin 0 -> 21430 bytes .../figure-html/cell-5-output-2.png | Bin 0 -> 15389 bytes .../figure-html/cell-6-output-2.png | Bin 0 -> 15290 bytes .../figure-html/cell-6-output-3.png | Bin 0 -> 17358 bytes .../figure-html/cell-5-output-1.png | Bin 0 -> 20873 bytes .../figure-html/cell-5-output-2.png | Bin 0 -> 12310 bytes .../figure-html/cell-6-output-2.png | Bin 0 -> 20527 bytes .../figure-html/cell-6-output-3.png | Bin 0 -> 12601 bytes .../figure-html/cell-8-output-1.png | Bin 0 -> 7014 bytes .../figure-html/cell-10-output-1.png | Bin 0 -> 7014 bytes analysis.html | 2434 +++++ calibration.html | 1361 +++ callback.core.html | 1476 +++ callback.experimental.html | 1474 +++ callback.mvp.html | 1612 ++++ callback.noisy_student.html | 1390 +++ callback.predictiondynamics.html | 1346 +++ data.core.html | 3655 +++++++ data.external.html | 2178 +++++ data.features.html | 3994 ++++++++ data.image.html | 1500 +++ data.metadatasets.html | 1333 +++ data.mixed.html | 1770 ++++ data.mixed_augmentation.html | 1434 +++ data.preparation.html | 8580 +++++++++++++++++ data.preprocessing.html | 6660 +++++++++++++ data.tabular.html | 2259 +++++ data.transforms.html | 2187 +++++ data.unwindowed.html | 1442 +++ data.validation.html | 2954 ++++++ export.html | 1365 +++ index.html | 1517 +++ inference.html | 1569 +++ learner.html | 1761 ++++ losses.html | 1387 +++ metrics.html | 1375 +++ models.convtranplus.html | 1853 ++++ models.explainability.html | 1231 +++ models.fcn.html | 1293 +++ models.fcnplus.html | 1340 +++ models.gatedtabtransformer.html | 1302 +++ models.gmlp.html | 1285 +++ models.hydramultirocketplus.html | 1492 +++ models.hydraplus.html | 1454 +++ models.inceptiontime.html | 1409 +++ models.inceptiontimeplus.html | 1830 ++++ models.layers.html | 3574 +++++++ models.minirocket.html | 1433 +++ models.minirocket_pytorch.html | 1422 +++ models.minirocketplus_pytorch.html | 1567 +++ models.misc.html | 1289 +++ models.mlp.html | 1294 +++ models.multiinputnet.html | 1336 +++ models.multimodal.html | 2407 +++++ models.multirocketplus.html | 1508 +++ models.mwdn.html | 1363 +++ models.omniscalecnn.html | 1376 +++ models.patchtst.html | 1684 ++++ models.positional_encoders.html | 1379 +++ models.rescnn.html | 1342 +++ models.resnet.html | 1343 +++ models.resnetplus.html | 1433 +++ models.rnn.html | 1503 +++ models.rnn_fcn.html | 1380 +++ models.rnn_fcnplus.html | 1569 +++ models.rnnattention.html | 1416 +++ models.rnnattentionplus.html | 1958 ++++ models.rnnplus.html | 1728 ++++ models.rocket.html | 1354 +++ models.rocket_pytorch.html | 1294 +++ models.tabfusiontransformer.html | 1378 +++ models.tabmodel.html | 1409 +++ models.tabtransformer.html | 1341 +++ models.tcn.html | 1471 +++ models.transformermodel.html | 1323 +++ models.transformerrnnplus.html | 1784 ++++ models.tsitplus.html | 1434 +++ models.tsperceiver.html | 1301 +++ models.tssequencerplus.html | 1544 +++ models.tst.html | 1389 +++ models.tstplus.html | 1725 ++++ models.utils.html | 1567 +++ models.xceptiontime.html | 1426 +++ models.xceptiontimeplus.html | 1550 +++ models.xcm.html | 1408 +++ models.xcmplus.html | 1433 +++ models.xresnet1d.html | 3523 +++++++ models.xresnet1dplus.html | 3698 +++++++ optimizer.html | 1265 +++ optuna.html | 1368 +++ robots.txt | 1 + search.json | 1504 +++ site_libs/bootstrap/bootstrap-icons.css | 2078 ++++ site_libs/bootstrap/bootstrap-icons.woff | Bin 0 -> 176200 bytes site_libs/bootstrap/bootstrap.min.css | 12 + site_libs/bootstrap/bootstrap.min.js | 7 + site_libs/clipboard/clipboard.min.js | 7 + site_libs/quarto-html/anchor.min.js | 9 + site_libs/quarto-html/popper.min.js | 6 + .../quarto-syntax-highlighting.css | 203 + site_libs/quarto-html/quarto.js | 899 ++ site_libs/quarto-html/tippy.css | 1 + site_libs/quarto-html/tippy.umd.min.js | 2 + site_libs/quarto-nav/headroom.min.js | 7 + site_libs/quarto-nav/quarto-nav.js | 288 + site_libs/quarto-search/autocomplete.umd.js | 3 + site_libs/quarto-search/fuse.min.js | 9 + site_libs/quarto-search/quarto-search.js | 1247 +++ sitemap.xml | 339 + styles.css | 21 + tslearner.html | 1792 ++++ tutorials.html | 1278 +++ utils.html | 4894 ++++++++++ wandb.html | 1242 +++ 276 files changed, 161640 insertions(+) create mode 100644 .nojekyll create mode 100644 002_utils_files/figure-html/cell-103-output-1.png create mode 100644 002_utils_files/figure-html/cell-124-output-1.png create mode 100644 002_utils_files/figure-html/cell-189-output-1.png create mode 100644 002_utils_files/figure-html/cell-194-output-1.png create mode 100644 002_utils_files/figure-html/cell-196-output-1.png create mode 100644 002_utils_files/figure-html/cell-198-output-1.png create mode 100644 002_utils_files/figure-html/cell-199-output-1.png create mode 100644 002_utils_files/figure-html/cell-229-output-1.png create mode 100644 002_utils_files/figure-html/cell-230-output-1.png create mode 100644 002_utils_files/figure-html/cell-232-output-1.png create mode 100644 002_utils_files/figure-html/cell-234-output-1.png create mode 100644 002_utils_files/figure-html/cell-234-output-2.png create mode 100644 002_utils_files/figure-html/cell-234-output-3.png create mode 100644 002_utils_files/figure-html/cell-251-output-2.png create mode 100644 002_utils_files/figure-html/cell-252-output-2.png create mode 100644 002_utils_files/figure-html/cell-252-output-3.png create mode 100644 003_data.validation_files/figure-html/cell-16-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-17-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-19-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-19-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-21-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-21-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-21-output-3.png create mode 100644 003_data.validation_files/figure-html/cell-21-output-4.png create mode 100644 003_data.validation_files/figure-html/cell-22-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-24-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-25-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-25-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-26-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-27-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-27-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-27-output-3.png create mode 100644 003_data.validation_files/figure-html/cell-27-output-4.png create mode 100644 003_data.validation_files/figure-html/cell-28-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-29-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-30-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-32-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-32-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-32-output-3.png create mode 100644 003_data.validation_files/figure-html/cell-32-output-4.png create mode 100644 003_data.validation_files/figure-html/cell-32-output-5.png create mode 100644 003_data.validation_files/figure-html/cell-33-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-34-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-35-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-36-output-1.png create mode 100644 003_data.validation_files/figure-html/cell-46-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-46-output-4.png create mode 100644 003_data.validation_files/figure-html/cell-47-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-47-output-4.png create mode 100644 003_data.validation_files/figure-html/cell-48-output-2.png create mode 100644 003_data.validation_files/figure-html/cell-49-output-2.png create mode 100644 004_data.preparation_files/figure-html/cell-43-output-1.png create mode 100644 004_data.preparation_files/figure-html/cell-43-output-2.png create mode 100644 004_data.preparation_files/figure-html/cell-43-output-3.png create mode 100644 004_data.preparation_files/figure-html/cell-43-output-4.png create mode 100644 004_data.preparation_files/figure-html/cell-43-output-5.png create mode 100644 004_data.preparation_files/figure-html/cell-43-output-6.png create mode 100644 004_data.preparation_files/figure-html/cell-43-output-7.png create mode 100644 004_data.preparation_files/figure-html/cell-43-output-8.png create mode 100644 004_data.preparation_files/figure-html/cell-44-output-1.png create mode 100644 004_data.preparation_files/figure-html/cell-44-output-2.png create mode 100644 004_data.preparation_files/figure-html/cell-44-output-3.png create mode 100644 004_data.preparation_files/figure-html/cell-44-output-4.png create mode 100644 004_data.preparation_files/figure-html/cell-44-output-5.png create mode 100644 004_data.preparation_files/figure-html/cell-44-output-6.png create mode 100644 004_data.preparation_files/figure-html/cell-44-output-7.png create mode 100644 004_data.preparation_files/figure-html/cell-44-output-8.png create mode 100644 004_data.preparation_files/figure-html/cell-45-output-1.png create mode 100644 004_data.preparation_files/figure-html/cell-71-output-2.png create mode 100644 005_data.external_files/figure-html/cell-12-output-10.png create mode 100644 005_data.external_files/figure-html/cell-12-output-2.png create mode 100644 005_data.external_files/figure-html/cell-12-output-3.png create mode 100644 005_data.external_files/figure-html/cell-12-output-4.png create mode 100644 005_data.external_files/figure-html/cell-12-output-6.png create mode 100644 005_data.external_files/figure-html/cell-12-output-7.png create mode 100644 005_data.external_files/figure-html/cell-12-output-8.png create mode 100644 005_data.external_files/figure-html/cell-12-output-9.png create mode 100644 006_data.core_files/figure-html/cell-112-output-1.png create mode 100644 006_data.core_files/figure-html/cell-112-output-2.png create mode 100644 006_data.core_files/figure-html/cell-117-output-1.png create mode 100644 006_data.core_files/figure-html/cell-117-output-2.png create mode 100644 006_data.core_files/figure-html/cell-118-output-1.png create mode 100644 006_data.core_files/figure-html/cell-118-output-2.png create mode 100644 006_data.core_files/figure-html/cell-119-output-1.png create mode 100644 006_data.core_files/figure-html/cell-119-output-2.png create mode 100644 006_data.core_files/figure-html/cell-126-output-1.png create mode 100644 006_data.core_files/figure-html/cell-126-output-2.png create mode 100644 006_data.core_files/figure-html/cell-20-output-1.png create mode 100644 006_data.core_files/figure-html/cell-21-output-1.png create mode 100644 006_data.core_files/figure-html/cell-22-output-1.png create mode 100644 006_data.core_files/figure-html/cell-23-output-1.png create mode 100644 006_data.core_files/figure-html/cell-24-output-1.png create mode 100644 006_data.core_files/figure-html/cell-25-output-1.png create mode 100644 006_data.core_files/figure-html/cell-26-output-1.png create mode 100644 009_data.preprocessing_files/figure-html/cell-134-output-1.png create mode 100644 009_data.preprocessing_files/figure-html/cell-134-output-2.png create mode 100644 009_data.preprocessing_files/figure-html/cell-135-output-1.png create mode 100644 009_data.preprocessing_files/figure-html/cell-135-output-2.png create mode 100644 009_data.preprocessing_files/figure-html/cell-136-output-1.png create mode 100644 009_data.preprocessing_files/figure-html/cell-136-output-2.png create mode 100644 009_data.preprocessing_files/figure-html/cell-137-output-1.png create mode 100644 009_data.preprocessing_files/figure-html/cell-137-output-2.png create mode 100644 009_data.preprocessing_files/figure-html/cell-138-output-1.png create mode 100644 009_data.preprocessing_files/figure-html/cell-138-output-2.png create mode 100644 009_data.preprocessing_files/figure-html/cell-139-output-1.png create mode 100644 009_data.preprocessing_files/figure-html/cell-139-output-2.png create mode 100644 009_data.preprocessing_files/figure-html/cell-139-output-3.png create mode 100644 009_data.preprocessing_files/figure-html/cell-53-output-1.png create mode 100644 009_data.preprocessing_files/figure-html/cell-54-output-1.png create mode 100644 009_data.preprocessing_files/figure-html/cell-56-output-1.png create mode 100644 009_data.preprocessing_files/figure-html/cell-57-output-1.png create mode 100644 010_data.transforms_files/figure-html/cell-9-output-1.png create mode 100644 012_data.image_files/figure-html/cell-15-output-2.png create mode 100644 012_data.image_files/figure-html/cell-18-output-2.png create mode 100644 012_data.image_files/figure-html/cell-18-output-3.png create mode 100644 012_data.image_files/figure-html/cell-18-output-4.png create mode 100644 012_data.image_files/figure-html/cell-18-output-5.png create mode 100644 012_data.image_files/figure-html/cell-18-output-6.png create mode 100644 012_data.image_files/figure-html/cell-18-output-7.png create mode 100644 012_data.image_files/figure-html/cell-6-output-2.png create mode 100644 012_data.image_files/figure-html/cell-8-output-2.png create mode 100644 012_data.image_files/figure-html/cell-9-output-2.png create mode 100644 018_learner_files/figure-html/cell-20-output-1.png create mode 100644 018_learner_files/figure-html/cell-22-output-3.png create mode 100644 020_analysis_files/figure-html/cell-10-output-16.png create mode 100644 020_analysis_files/figure-html/cell-11-output-18.png create mode 100644 020_analysis_files/figure-html/cell-9-output-16.png create mode 100644 020_analysis_files/figure-html/cell-9-output-17.png create mode 100644 020_analysis_files/figure-html/cell-9-output-3.png create mode 100644 020_analysis_files/figure-html/cell-9-output-6.png create mode 100644 021_calibration_files/figure-html/cell-9-output-2.png create mode 100644 022_tslearner_files/figure-html/cell-11-output-2.png create mode 100644 024_callback.core_files/figure-html/cell-10-output-1.png create mode 100644 024_callback.core_files/figure-html/cell-10-output-2.png create mode 100644 024_callback.core_files/figure-html/cell-10-output-3.png create mode 100644 024_callback.core_files/figure-html/cell-4-output-1.png create mode 100644 024_callback.core_files/figure-html/cell-5-output-1.png create mode 100644 027_callback.MVP_files/figure-html/cell-10-output-1.png create mode 100644 027_callback.MVP_files/figure-html/cell-11-output-1.png create mode 100644 027_callback.MVP_files/figure-html/cell-12-output-1.png create mode 100644 027_callback.MVP_files/figure-html/cell-13-output-1.png create mode 100644 027_callback.MVP_files/figure-html/cell-14-output-1.png create mode 100644 027_callback.MVP_files/figure-html/cell-15-output-1.png create mode 100644 027_callback.MVP_files/figure-html/cell-22-output-1.png create mode 100644 027_callback.MVP_files/figure-html/cell-8-output-1.png create mode 100644 027_callback.MVP_files/figure-html/cell-8-output-2.png create mode 100644 027_callback.MVP_files/figure-html/cell-9-output-1.png create mode 100644 028_callback.PredictionDynamics_files/figure-html/cell-5-output-3.png create mode 100644 029_models.layers_files/figure-html/cell-58-output-1.png create mode 100644 031_models.positional_encoders_files/figure-html/cell-3-output-1.png create mode 100644 031_models.positional_encoders_files/figure-html/cell-5-output-1.png create mode 100644 031_models.positional_encoders_files/figure-html/cell-5-output-2.png create mode 100644 031_models.positional_encoders_files/figure-html/cell-5-output-3.png create mode 100644 031_models.positional_encoders_files/figure-html/cell-7-output-1.png create mode 100644 031_models.positional_encoders_files/figure-html/cell-7-output-2.png create mode 100644 031_models.positional_encoders_files/figure-html/cell-8-output-1.png create mode 100644 031_models.positional_encoders_files/figure-html/cell-8-output-2.png create mode 100644 050_models.TSTPlus_files/figure-html/cell-15-output-1.png create mode 100644 050_models.TSTPlus_files/figure-html/cell-15-output-2.png create mode 100644 050_models.TSTPlus_files/figure-html/cell-3-output-1.png create mode 100644 050b_models.PatchTST_files/figure-html/cell-2-1-image.png create mode 100644 061_models.XCM_files/figure-html/cell-5-output-1.png create mode 100644 061_models.XCM_files/figure-html/cell-5-output-2.png create mode 100644 061_models.XCM_files/figure-html/cell-6-output-2.png create mode 100644 061_models.XCM_files/figure-html/cell-6-output-3.png create mode 100644 062_models.XCMPlus_files/figure-html/cell-5-output-1.png create mode 100644 062_models.XCMPlus_files/figure-html/cell-5-output-2.png create mode 100644 062_models.XCMPlus_files/figure-html/cell-6-output-2.png create mode 100644 062_models.XCMPlus_files/figure-html/cell-6-output-3.png create mode 100644 068_models.TSiTPlus_files/figure-html/cell-8-output-1.png create mode 100644 069_models.TSSequencerPlus_files/figure-html/cell-10-output-1.png create mode 100644 analysis.html create mode 100644 calibration.html create mode 100644 callback.core.html create mode 100644 callback.experimental.html create mode 100644 callback.mvp.html create mode 100644 callback.noisy_student.html create mode 100644 callback.predictiondynamics.html create mode 100644 data.core.html create mode 100644 data.external.html create mode 100644 data.features.html create mode 100644 data.image.html create mode 100644 data.metadatasets.html create mode 100644 data.mixed.html create mode 100644 data.mixed_augmentation.html create mode 100644 data.preparation.html create mode 100644 data.preprocessing.html create mode 100644 data.tabular.html create mode 100644 data.transforms.html create mode 100644 data.unwindowed.html create mode 100644 data.validation.html create mode 100644 export.html create mode 100644 index.html create mode 100644 inference.html create mode 100644 learner.html create mode 100644 losses.html create mode 100644 metrics.html create mode 100644 models.convtranplus.html create mode 100644 models.explainability.html create mode 100644 models.fcn.html create mode 100644 models.fcnplus.html create mode 100644 models.gatedtabtransformer.html create mode 100644 models.gmlp.html create mode 100644 models.hydramultirocketplus.html create mode 100644 models.hydraplus.html create mode 100644 models.inceptiontime.html create mode 100644 models.inceptiontimeplus.html create mode 100644 models.layers.html create mode 100644 models.minirocket.html create mode 100644 models.minirocket_pytorch.html create mode 100644 models.minirocketplus_pytorch.html create mode 100644 models.misc.html create mode 100644 models.mlp.html create mode 100644 models.multiinputnet.html create mode 100644 models.multimodal.html create mode 100644 models.multirocketplus.html create mode 100644 models.mwdn.html create mode 100644 models.omniscalecnn.html create mode 100644 models.patchtst.html create mode 100644 models.positional_encoders.html create mode 100644 models.rescnn.html create mode 100644 models.resnet.html create mode 100644 models.resnetplus.html create mode 100644 models.rnn.html create mode 100644 models.rnn_fcn.html create mode 100644 models.rnn_fcnplus.html create mode 100644 models.rnnattention.html create mode 100644 models.rnnattentionplus.html create mode 100644 models.rnnplus.html create mode 100644 models.rocket.html create mode 100644 models.rocket_pytorch.html create mode 100644 models.tabfusiontransformer.html create mode 100644 models.tabmodel.html create mode 100644 models.tabtransformer.html create mode 100644 models.tcn.html create mode 100644 models.transformermodel.html create mode 100644 models.transformerrnnplus.html create mode 100644 models.tsitplus.html create mode 100644 models.tsperceiver.html create mode 100644 models.tssequencerplus.html create mode 100644 models.tst.html create mode 100644 models.tstplus.html create mode 100644 models.utils.html create mode 100644 models.xceptiontime.html create mode 100644 models.xceptiontimeplus.html create mode 100644 models.xcm.html create mode 100644 models.xcmplus.html create mode 100644 models.xresnet1d.html create mode 100644 models.xresnet1dplus.html create mode 100644 optimizer.html create mode 100644 optuna.html create mode 100644 robots.txt create mode 100644 search.json create mode 100644 site_libs/bootstrap/bootstrap-icons.css create mode 100644 site_libs/bootstrap/bootstrap-icons.woff create mode 100644 site_libs/bootstrap/bootstrap.min.css create mode 100644 site_libs/bootstrap/bootstrap.min.js create mode 100644 site_libs/clipboard/clipboard.min.js create mode 100644 site_libs/quarto-html/anchor.min.js create mode 100644 site_libs/quarto-html/popper.min.js create mode 100644 site_libs/quarto-html/quarto-syntax-highlighting.css create mode 100644 site_libs/quarto-html/quarto.js create mode 100644 site_libs/quarto-html/tippy.css create mode 100644 site_libs/quarto-html/tippy.umd.min.js create mode 100644 site_libs/quarto-nav/headroom.min.js create mode 100644 site_libs/quarto-nav/quarto-nav.js create mode 100644 site_libs/quarto-search/autocomplete.umd.js create mode 100644 site_libs/quarto-search/fuse.min.js create mode 100644 site_libs/quarto-search/quarto-search.js create mode 100644 sitemap.xml create mode 100644 styles.css create mode 100644 tslearner.html create mode 100644 tutorials.html create mode 100644 utils.html create mode 100644 wandb.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/002_utils_files/figure-html/cell-103-output-1.png b/002_utils_files/figure-html/cell-103-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..268fdb04f53db5a2f8b0ea1688b483fadbf0332e GIT binary patch literal 5972 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 UnBjeJC=^6VP96S1#w7Uv1Fk}1(EtDd literal 0 HcmV?d00001 diff --git a/002_utils_files/figure-html/cell-189-output-1.png b/002_utils_files/figure-html/cell-189-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d2214c908e47b61c9dccd41fd0f795708b85bd02 GIT binary patch literal 19897 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�RPcdE5u=lfrap#OaD%s%no`=4Wy{D1gsbS@1k-28J9KuHskmf^$R z$S=hHguP?46a%>4iFF%KxT2FSfDqxC{wl`}jr7Wf^7-sWy`p;h7wACGkB#Q@=Gc}v zH=HlDZH^!uY&m(RvB`R##UT~?5+Y)R-)6EpbW6ShKJOu*R3K*o{^V`_lER8O7BwC8 z|75yN-xz7C%7q?S14lwhAk=v~I{JP~ktI!-(sztlZ=fYOVzp|qN##gWXSo1z(L(|2 zh7cdG8{SF_6zFC^7qWt&*coLF)F*mD8kAUKBHLd0GBaXos~#H}s_`&VDIb6=%;$p% zfLu?vkkD}6jO86oXn+vtQ!w#t(l{IjC(}N;iahS}jzE_X6YUcY#5ry%Z3*JCM$n0R zLPN`p&>Z)ZZ4>#$zJUas)K%;W3N&y6`Ce&=%5p)7BuZv7&T-n07oh40eZ$k?i;6YC zk_$S5uop(B7geXDfTmc~N5WY=cyZ4fWpJ>my_S#ue+MmpJfO}wH+nO9MLEu3z%g`MfBKiKg zr{wfBg4a1xLT)vS%Fce&hIX_Ztk~fEZ8=xB&F*}KTlWz?m>b}(eH#h-?^_|T4Kk>G zh7g-AMJJK&spbqJCgKXbCzU5kp@6du!b_vxzi+MPTz-sH2T44^PUIaEcyl?({fN~3 zkJAfXEvqBn(bD&|V;G`{#r6pod#d6A_{jC9A`Q-BQXv)yy^1VR_)4%_v$*7kHeizr znba{tlzZmf-K3aEAndqml5)d{iV!?%hR?%~K!DbWX(KKIl>b?YI@tP-gngP=1qIW# zw#-IHM?*lX;i;oPg5OS|Sy}umW7zpzU8BPn1>^m%N0JJ`78CDRL@Ue_Co05VZJHBj z{(`Km?ZB+tZl2aZl^3Nc6M)~S!ybGD)#zN-;tgQAsd~nL=mpwl>?>U*xL7b^J~6W? zf;b*np~jdDN(*vpcnRs)4_SO|cqSz(dIj2gY$rVL*U4Q*6Osu)c0lU9AD3uzJG7hevhQm+R~Zjx<~jaO(zr7LC@Ycyrlbhph7H41(?j3rEf>Lr*pat&)E)y zZ`n2Yg~h zvNnrQ7OEkj7X`OVeBOOTtWrQPF7ov@(rECp*+icJmn8zzOeU9^tvQDar1jW_Cl?_& z8+Rjng76xjPBs(J^+d(Rl|doQrWtPHe7LZ`AC1cm8U#b}xb@nHP3-q>f|qA32Pr7z zl3VMYO!`mlZhyQ&7;(w<<+G!5n|VHv7)^r`Pmx9`9X);UZb?Jbz+Fc^vB8 za%c#@>H#f>a?ntb0FVuB{Talm=pUYbJwTKud<0s3oCefE7bC23xF^HsMk0ONt zxrUCtSm^4+W=8|)kmv>}BcXdUsF(*?yG8@VoUYUEvvrZgl)uYT{VpQQC_oNn|OIf49eTm(CilEvLEwK zr&`xYo#T#|US6b+QhRL0L}_^7uMqXPAZ&8!$r4?u=PMx_fN@B|@BD)`Ux|T$5EUdL zHdgrkfMok=X83q3&*x-{n^LjMU~_nf(>2eO${y#2(o5h0MG0SQy@el0Usl2tYIG50 z!Z1RnsWO9mXS*gE5ppu(6`8MyjL$WvG=zZ)IGcOkP~W9>Mgi{)q4(vE;KasgO0M4! zH2bpDD2yY6u7SojP>KEXLldIoG@%Ah_t{KysRbyV10@9q4|58jDNi#)tkS}!`dYrawQohBwNaP)GcgSjZ6U}oZ*Dy7CJ@gsmwTk-7x<335w|)c$W~CQ zm}5J&D(L0@$*qxmev3g(P#pYP*E)koJCj&o#u8C=LWDpPVop~)0)I)YiCIzKD_E&e z9CF5G>=O9YKc~w=AJ(B9u3c~7iE*n|ouvnUa2wZF1;Y{eY{F9g7xdm`p1h##X{GBC z9`dk|%-FTC{jAqy0&H|OiFdq6De|}`k=#_qBj85`%7t8l&TG(v465Fuo!01-6hHYf z5$gEAfIlUM701h^Z^4-gl#)_@8-vR!wo6^a4FEs%iOG^OQ=IW4G$!@dz3E4!nrr>zeyX4u z7}>gkphGQE!oKlies2^x$VN8M(O%!)uzB%~|Il2KnfP~Au_r;B=ISyCsS3!K_1f}f zHiwc>a>)4r4eScKym%YrvgpJF>J8+Q-%bIBCMxPFx7-o9Vj&QwHgkBI;S<+riG%=k6-% zIi@v%kM~ir{G)}rC|$N77(}nbiS#ZaL5COPS7~CQIc7S+FEL#}E)}a)s40CgqXm$C zZXT+A2mEC=!~37q>xCOYFGGp+IrEk|#))zoqC=3vXKu~{$!r3hh~<+E%kiEUqK8*8 zw+L=m{gl;Wza12mbH|x~X_UOO5nifx z<+v^OsCQ*{q{Nmt|4nvFtyZE&Fv%_~gs;`XV1x>}4=B5wILe zxseK4UOIAPkJvjSalv#;)I+BLQ_!OC94*Upj}>Md4tkXoOg!4Wd?oxdqqjc~&xeN8 zmzKF?t&Sr4vmW!8jD&+6iAFi@9-wM*PYW>QWp+%oK0|F15VfL3(?eVv&AQLD7(w_x zG)YDiStO2Ql0kDY0`mzfhlVU0DWQY)#n(WiVfWAaBrNJL+wKiaJi=h(I%MoVnAh=~ z)pfi%_JG{XBIspFzkY`#2kIT#oU4M?&b}7~9X-b?(-bXqE`&ylN_?yyIDo%G#}s~A z_MqF*Cs9F5Pj?Ng^1xXE^tl!e`15&!Sd4jMcPB$OcUqUb-6aLWR)4;9;Cy}@(B&jj zh*BXTS=f*ToFohUa~Qb@xL8;N|z0CKnE&J4B&^1sPkTgOY0>CV5j006@zg$ z1z8RXV(lYbZq5W)OOxB&Oo!j=c=PT}87xR!mbF(EbXE2W@7&&QWs zS@|lfafCY?B{;dwQ z+5 z-qlw>IwMa>*6D!vXWEDaWd}fXqec|5X@%Ov@bxpr-ff4e0$J=7jHmKk(}joh@pUB* zZz`_mS8d>ES9jLiJ;R!*!q}q$*D!`=;!wI-3f0rv8jYSzh6p-g0#4anRL$sGq{h~C ziG3zu_E0IC-*eOh&AS?gm4>u8F49_p>i)BUN89g0P2Pgk0!k zVgDz~fwJ?TP$P$c`*gbOz8q?U)D=Vgnta^FgueP(Ua0?jH|<{O;Llsd551Xd>+eI4Ezz@n!0NnBZ#{&|wl1M+`=T z%=d!tl!xv+wH2!TBZ4^6Bbsk{6&c#m61Ca*KtNJeH4ex0x%@@SWya0MO@2$A&-UTI&%#9t zS&#^56FJ+N=&)dJ{+>No?D?)(eP^;%e`iucOl(`Y%sa28?snVuzz5u$aIrmhGP& zI&O{l{rV-jGhWy+$h|lKUcPZpuvq%P<)M++3bX~}e2yVE*Ow|q>dc_eMZ8G881{G8 z7F?KVTr*25=>7@>wIDu>%#%ww0S!|1P6{Elrq>r|h$bAwD{ac(!A{2%p#M)R=N`@G z9ma8VY3oj%wWKx2p%~jL;+76IHa&G&dfZFh5(Eu8LfnJ3VQU#nsYa#g)KpX{4aY5+ z8LEVsdqs^NrFE@q3Co_h{dfIi=j^ZdocE94d7j_x{k^~M^Zo3Lj1^eP%Qym&Sm9ZP z2APJm^1RjNmeW;bEv>Y-+U;4&q~0P7d7?hYJo1^aj)c!Wfjcr^fhq%aDZi-b3AFFs znq-E<;Vx1q;{Zu=Fe#$ocaTGFVM$6=z70wn?wQYiP}4^W<2*R-L7=fMiW(W+41Kq{ zP=PJ}^DvhWS86vMP(llob~At8x0 z69?4jBjQ;d38H#KqK1ebsQ^*m>|{J6t^H_UBJExxA>-)MtUJ=?su~V zUTAx|g6zhP%#mzWo$EcP_*TNf`|bczA&O{{{T){G=7?`j+Wsyo%%M%u7|!$zQI}Fy zd(Akx)2O=TXR!zp$pJ^zi~a4X?cF)A`GTM7Nd1U}GXSU+(cA-1BcxB^C?@KVpx_*8wOxigN$D$ z^MK8=2bMr-rpN5`WlQzb6a&BJ_>52MC;=)K(2FtOmh9*ga;>->J zuOtEtW*me>pdwj%RCCY%zl6+61NdnfET6JGCR6UO zHSy36Hku=xwwE!&VDj(X(={iLsmxb=#06TCN$?XD&uV{{goFfkx!b4zTD<8y-G27N z2D#nhLwDs`mt33UBkk<$ECGbVn^V@Zxh@Em7d|k|f&Ik zipP$f>x1!LHBtB;iKtuuPEDu)Ju@>SV_n9kE^$ZKpzgIcRlFslElo6(L;oS@n7q6^ zTRdi-0;-}=bdD>PQ?!1>$tU?+e88H^{_jj2nu-6JGip+Zy%cG)6oPQ*%GJzqDK64{U_lZr1Pc$rf(8iEI0+UUf&?c7cWE@Z1&2Tg1b269+=6>>x1f!? zbE}{8-t(Ow-?`)dU@%7aX7Ados@9ro&RGO2%1h#4y}&|3Lc)=jdasOxgu;u2gq)1= z7<@t{i^&as@i~fXII7qfJ31TK8zIRVINDm;I9i&0e(7Xn?_g$Q&B@Bk%Fg`K)X~w_ z0m8;+_1_n;+Sr@0y)CaU1UJF7mHOm>goI~+_(9GS&NV|q^6Hj;FZ$6XX>Y;#tIFAZ z_mTRaCUnO?ampfnlxQD5;l6&!YwMfwWd?%u0>k|_4k9#a} z-(n)`EK0WAh1AeN*g-hL~SxUsbs#G$r?(Q-^G>D)k%N@mSvLSo`Sbq*%rl23(e z3Mm4;BkAwzj=IQZsx3%j=oL1iB`H@fmb^-ZjJN+}%O-FHY>(wu8g}DCoc9OPME!b( zhHA#g5P|UzA7u>5;Oar$c4XG72{Y&j)H#peO!Z39^Slc1xH(tV!`{K+Q=L66 zQh9m#>DH)Ur11T7q?q3KE-t(ZLRYWY8V|*aD?kjte*N0h-yhSIhnQV5rJolzg|n8N z)YLwgmzOW5a9(hI>y4pDRa8@xu(#(>$(1i|)+wDLprTR`6Kgjb*3#7cU}k1^cJbIR z-P2E9df~BqoOhxy?8YxKb@m+B$Gc`(UzM#ENtP~vU=vGvn1!x3FAO`t=r8e46-8yA zpimmmefdjQ-nF%j_wlJ@N^*ju@Y3eqM0_zWO{0LQasmOAmuca~Z;Ey(csMy@($dmi zOrfEn8L&TRU}fEC55RsN-X%lnur-q2pW@sVM%sAX$3)z#{ceMDn)~8UEnnR`Q*~2f zR0F{@ap7vDXE+70fu6~j&6$Mn{X?f;!VGlZ5+C_3jxfim67j}yKzBao$R;S?HMQx#6cA{< zr((#$KJ_9Fu}`~1A>7Q{!_H0T!jrdAV?)9nvR%;M;v(0?dnCDeJxqhd{)_OLLegeX z@^;buPiaxJLEo+kX@xHYc(?P(M<=%J-GiiT>XKL=n0i=V)70iAVT-RPLDZ!@rP0VD zQw-Ne9gtjj`PpIbFr1+l5@5i*QU?+E8E+W+eD3=7hk2sv&kkzcc~I$V1BcH@)Kr%r zp`*wA_@TO1UsS~0*wkd_;Ly?5hK!CLBtuC+PX2Y~q#g!aUS0hhJ@D4QGw%7~1Roobzh<$}3RlSy?0WyzZ*IpoMD1 z|FE*+BAJ+&eE$4dqsa|=rf(F}`+H}iFoDZV`CWIhV3Y10IY%0fBSpUM&pHK)(#i|| z9^p*SsvnI=kfqXdl&iN>Too++jLe4TfosgO_PB&aa(j&J_ZSCd+-x;dGSc{b zcjk0=CI%#oRGa3jz;{8ocUG1|>lzcxuVbFdmjwAI*zPKvL7HeBJrr3SzqVHmn!Gy> z=}Tx@;l-{^$|#d%v4jL%9ZsLIkdAQUlSuZ5|6nX;uQ*raPAw5`+aK3Pnop*9PDIjc zI3>9PXQdLwqPA3=b<#M2Bxw|SmO3jhrMg7~rJdtY=CU3vffPAetkoUPvv^qxmyDzw z^hLvd&T0H4S3ddkLOt~D{>kZ>g2Qqva(jEb%hmc%Qch#p@Efn&qwdC&A^tDM#(%P9 zNQ7<=-+eYTv`FqRz)EWQAm>~CPQr%zW zk;kKA-5imafjYQTTo=b|foF2Eq$)X+n1U`sfM;^=;qGp|NBAf06DRAv4?+-J&GV{ z5&h<*%WWrqnRRtKQ8}Id84S0s?1{DNl&hvr$Vf+4sIFET=we^1C|v0M@zot&Xm2^t zo^0=2BvW~lrJ%P+$r<_(@~Ru1q2cDC#>8xP6nMS+)C_?aJXDTcnAzI?fh2DbiW_X# zd|bRddwE4m#Jd9(@HAvfft6>A3x^aGR$vjN7V&otRChD*ymqPMJ#LROrQ9N=ZsHTe zfGfM;db;DDdz5+}P@&a&@-s*Z#dx6PwfM~MYfg!nc0}r!?0XkWMx=@6#&MJWT=TJuIfWd?s0Jg} zD=*v@!BY7f>pw5{ub=#ajzMN8 zbh~>1z5eOeUV$CQiP7dy_U*#tSIGm&`hUWUU5uBZ9ITQUqwG&imfqipbI@#xLck zwN-bbGxU9_U-q1e>uMoI?8lO3W`F#%{Q>KEVGMhf)>5=EJyazg)8xK?cGr?K%FQY8 zGQCjL^`vBchl9MS-@!kgWu#U429a2Wt&o{=6HEfv(Q&ej|J--N2EwVCXR9>F0KTKgi=Q(^5Scz`1__F$D zG*E|u+3;^tv89j`rLzh8M&x!|RK&R;hO=!DK5^KdPf#T)CjHP!Ytnmrtp2J9TK_VV zAocd2&Z7CEI@Vuy*_KK3psz!}qjXa~s`j&MDGcRU&u(p>qvlbCe>Co8V>CJ4l-`x^ z?-*VPF73X^uz}}jcAMijX}vY-_2<16OaiH-JMSv^c^17ShFx*QUH(vOF@q2HyXCfn zwh2l2M`C)kh^E6(|8k~uX(slpwv0JyVHx;GsIs>4mwDg4UFrUgrH+K`$gWYod3Cr3 zPJv-O-jcv`a{t_%kN84QC$d8D_SQ@O(Hg~HtBh} z$_hQZ>G8B(5^K<9+f&YJEtkAkGFOOjC+L~ZS36v%)y%C2N!#VVLGae@CANvApo0XI zKBsQ4Sl$wI;h)=h{(5xQ2)BEI_(9I4-L5a@j&OS{>Ydk{{`HPh(yabx-Zw4QTvRf5 zKR_s6v%jFcMb`fM(kQh4x}1nr^X@)X^2)#j65&RX8nG*psupf2VrSJ^ZP{KF^x4*a zWT%%H57T1-CAyvuA~3^XPUFW$5PvMZI%4T zj^pI*uZneIM_&88J>E6p&OxV4b>(s|Z5Agm71agqh4|#w-iu)reqmO3ekAPtsIddA zgw{a?_{U$-DBX+ITX?ni>Q<$R$nMP(+zQ!yx%Mvm4T4AlZXSdeXBbnw(a;8dx-fcc zOUzbm;a%#Z->%^VnAAlf8F^$TDcX2LDTl4k4zVU7KXS5K&7RbU`z}5x&It?QG6w(Z zlIGLcH4|QPIMyqH@1Q{>hI=hgZy4}n! z4=SI!Q9L-?kU)a2qO?AOOKPIkUtuF-jc!p~6WzOfvcmg{I{RdjJMu>qN^bcGe5GXg zWfmu4vI>dkYc}f<47!;1*z5-0I31C)TBZ|;i`Ip@qoQ6#s`(^}c+PtMbfJ0LXm?e_EB_I(Pw9|6SP{~%ivX>~$H}MP)T6-= zk8o9mQzy0!Hh-3_g+6wj_Fvm{-Mn~*)M)SS4hej_A8=cudZS3COE!t@eW6BSa8mB@ zg8rEp7lXJDkwRf2v-{%?!IQQ&Y4}Gqajc{+h8;K9k$CkTTzF-GGE_*rCf%RDWieRV zr=cO>jhM0QMCeU@kb~X@yDZl28a(;S#;48C5n>qF(?V3|%xKAen)5Eb9At>v*;Q~r z2(|eh@~k?vl6UGKJQZuMH=vp%F)`3WrbDNKpd$1-d1o6F{E!ju--#yyMit3^_~GK$ zxEfc!vk|Gd(H>QUhS?xsMW=2s2jWYK)_@pdt?kQ&CA=8N*XRl)l0u|2I6NjnZeC$s z0~5VI3X)D8{hiT!xon3UHbIDxm1Sj+Um90IXt=K@LuI_bwSa)VakvO_C-L>;B-ccq z+n9uJPf_vp@8ZxSxooD$zejVKgkJ@`uE<9}SezpDc1@HAsIjIi*dL!bo#F6A_$3?K zt!66)r;*|jk(AHa^jr92R6X@Muf|6vcvJmm4p{w{o3#zd&xxjzv><`w{jQzaIObFX zpza|F+$>lR5yhI5Nnt2GII#r!2^Y>C%-`_AuFR8r3Z#8#(l#HN@`+GHp4`zWDmlsJ zst^W{G%t0`+$sYYaa>Am1!v5IecwcvbkK>S-^A*3S-ELqP=nPK;J3^2(J$9-PMn9c ziJ7WfolGMEzGAkMZ^$58vQRrWcDW`(ERPFWq*_E%rzdqD!`DtGckyyj zPog*lh%dA>M!6b9Ef22?>vCnZ@67sIBsI56{tE%1MP8Tc!|vWyH(jCfR`(W-B?;;E zw0JGzwQ{1)jie_OIgdrn2DqK@Wxj*;6 z=dX!PS5$q`xX78My!P4|P*-BYQC=QM;*06&kgCfyMf zj{EZoqJEE~lRdWci-d0vQB8)D@|$<(YVpv~(f6BbH-vYW+x#rZFV3d)w662Ha9LAq zr^um9L4qHWO4}ApYFiB;Lc8umSd{Bd7}(Qc%$(% zh9;Yl`MTSfKJGO|Gp;~CAE9hET`U^jULJ)}@W(mr&AzdiWS(DGND%hAr;WV0xS;3d zgnKBz4NB4?a;Xn1(|k3#kl#sRXOLf&2~{X6MJB0Qd7gef%j_x$qM83i8hC}020d`)dBsmWn^_ugvhTnN_duC4Q_s+Ez6iH46a z0kA2dczORJPQ;3b-q;2u=|Eu~~8t9T*3n^FFymW^`KGuS9RaphPDmxK7;A)6$mPED2G%{*8Vy zg-0n6FCI!#2I#HSe@L6 zBwy6>*MNSQ=y;!MXVsex$4Vxu)&docuo}SQzW&-8)MWshS6~AL&)To8ZiS&gZ6lGO z+F9(Os>2z-cx)&s_?@y$hEv{_P`&y5sCLPdAAIm-y3C+RqukeOuBP02pBOpJ`40uH3}hM1VR z;!E$du5dEviSFQ#kPNf29CCiA?HRx}u)4UrPr<%vhCJ}N1c~mOX`Hx)Clb?VM>%q! z^U$Lk&rc``{i;v~^YJi0gN$c_UIUnd41X0($!B8PA>}BZNsn@{pfrO{9Uxnb0XmSE zpPzt$paXCgg{7PcvPHU0zrYG)TD+LEY00jtibbdTdRPz{6BpNYb+U$R7!GyS>$urD6?G=!=)7H`5jEa$jtm@ce)%Y?8V!Ve3jh$J&buXbbC^_|Sz4aVj?Gc+1uknfX&bM|| zr>IY;gpw*vhB>Texi~mE0sD!~q+U`)>5}yQyRWWZ zGAyxm1_4FhC!NarZzSrcBBA(B?;26{mQ4KiW3^_ab#eSrvih)bNVv`jW4LXPL}Uxs&#JdR2tqe+`KY#4g_h(RGU!z&a_YCaj|t^O)W?} z2+F+#!MMU(^2S2wb(g+x42n&dg&~pM;~oFulBFLY8vUIt%~OM--&GpK@VXF@#>0Es zQkQ>2Y#mkAnd9Et>?9NNt`->E@D3$3KKpf5|K=z#Zs!NZfl@A~8evE3!z5QK`_kpT zlK)LZv>AiJWc`|E_tOkJ1~wmIUFEr^2jqJe0FiP*bykm!)*2`}+aX(O39Raz$hZGc zE|2bKf&`hqVaa-BPNEz?2mlgEP!*c~c_2YWdpSN1^@<@>zg(T+G`R@+qJb6^<_sP$ z{`b;#!70)APqr_GnJfaGd`f<3nH7Ddl+AfOOkc8)cHVXxa-3V${yS_5*Nj3Eh;nwL+z^De|ASC+he8AA$hQ8h)gEh8!iKlm@-7-FzrpbLKs?5h1o>RU z+2XxX`0`Id6DdeSCiE5c?$nNYdLw?jn@G2NwY=dJc%`3TI2aq1>-0ts_g5TEHypN6 z1yNV7O(xD$OGWaF@;`?Hyuq1a@(8K)wvj4RIwu@k>EKU{!G*fH`=J&`*>pSN9;Y2c zj^|nHE8D9*0H|nREl+oYj-T*LL8uyL;_1NP)C#}=_fJrlXmiaGuam)WIEQWCaB_!F zoN1LJA%aDI#1oKB)L5-d5qk7jt{CI6zK<>^f|Y#>r@Cp~5N6v~fgB*tb>z5`k6euG zvU$<*_h+mHKtB8x7yME(DD-&G*>&Jt;l5y^ZNNmg0WkNA$Ie7HwP$uAe-Qs$J#tv~ zj>$kfU3f_7tAc!V0P6}&hB2v2lw2{3JjJap++Q@ls~Q}W0?W<3hdY+tqyrO4_c?iZ zs3D8Xh_vcEOEYr`#WiTqb~D zc?hm28#XUBg`xM@8Ke1{;{G*^#*s3;<{>`EbA#D(XmHOL&_I%4Av}~oGC)$Z)KbE= z{HkuXbomc&ompb;Q=pE0AMyZEim(GP5pWdTl_-2-1x1Y_Uzo|aOspG?Z;(j;X z-jhJnD5GbI)H_cZ1sY+EsM2!e&k3h)cj~Ib8rK($jJ7Z8>@$O%J%yjNUV17$a;uvh z4yMpq&M`B0AG=X>Y4#jqdht<3frPT5nKq5}UfnttM>POeKwz=**Ui>8Fi{sV!?bAf zG#4KBF92-$^SdMA=q_{T;xEO%T5iP8^^T1T_{DriTNr%GHz$QP>o4Kapwmpd=r<V`VyyRuGu)^F3lfgS7dcDsf9`erVHzgD6`H) zFd_p&zK4eDU?w_vSw0&4y3oTBd%Qk51~OYaBq6LU$6l{lm!OSPWKJMFiI6w^BVcnm zrzla!eX>gAi8WJ2bN!Hi7}|X&>5)j{?&}=&$$gEU=2fxJip~22%gL-(bOO+$lA8e4WD|!B+SKd7;obB*p#&%FD;q>h3szP;9nLns*c`qMpn2n~@BJt3{L66HJIn4VsuvDYmv_^xD3QS}wvq1hUao*-Pn_uXLQj|Pe7Rj#N!)&xEWy6EU=SbhC7GBO!uxb#WO+oJ|=F& z3^uEKk;6^;`z?H-0#opxJBC8`qx{p=Z(RjdNZej&H8;Z8xMz(T1u!~dHrqH>oxWH` zm3Sc!2*1;An#1PM6QBX_?(X(4cF)Zva+(Z%)RRvwsVkcXICU_H%Co2FQ>B!w?C*{a zKhWhVDgWaott$^Gk9_@(15boO-dC>$Xjc0HYA-&hHHI(4L+i{j1~kI8O+-#iU#HMUEB-L)A`G{_&J<(%GL- z!@^Zf?sStZVI!iP9V2vqQ?3u#`u#!XH`kk47hPEYOSjf;bfB)NC;~7sCLZ2q1pmJN z!~NYvZL)yt_kn?d7n`R?N7UTh=M|gG|7qE{=)Crt5{jS)azE}LZe`epoQlUVI6=Cn zQ!lY*ZsN@to#B?;YdVVbjkqvNmeBSU$4&xqHsE?;aoURX=)an?-kU13u|NR*Pu3!Z zkJo?dedb8mT4>+_YCF=zMPWam$$z(G0=Jr}zvQkQ@9aJ>$^PcL7;C=B`2Z%~)qggw zoR^!a#E8JH=CG7J)IkU>iy-vOwEM)-q zB;r>}n|Sr;v+e0hH2_D-<()O0#+zGlv7uW$_N~9n)Mu>9Oa*}Vp1!^UI}bHA;T=jhQ zxsk*V(?=gp4EiO_wZMz~62~V0A9661E+%-QP@RB;M7_}AdAP*+{(_8@6b2HDX4Om3 z^>^{%JVp%;4z3n5F^o>uYgd;xKM3F8%w^3rXC5jS2KNrXhKCi!GN8s?Z=!qyWlCr(lJY0TAgS1>w8ji%ssNZ_NqQ)6<`jaS!}a=*}5f zaQR-*2erAbGS7e}$(%&i^Jbc_HOv}6H7-n1GU9q;lDVryyZiCe(^p@MYHkE+nt0TP zRv#c8L3o?HGnKN5+~ETQvh|MJ?R`I(3ehohv$E2r^olB3wPCGbYxNEc{2m^TjE{d_ zV>u(%;Ivl|>AGLH$pCu5c7M#j8ykOWZS>Siw6AK>kjW~O+ADTcLm%v7euOt&>D}c3 z!D{8OG^&oom)|^DD&F9aT=Da_!oi)vxvsZ?aa>2SwD5rBnQ{!QVPBg^j^7hhCgpP( zLNcJ=0*%?9AA*g-#x`u-y>`1q6?A1f_+~c9t#Y-uc~WN?=_^0+`2*74fxkP6DOgLu z8x%M=Kd@gVK-rQ`JB$-C3HgqHmYYE+w3T69;0pIjzv&pzPEx_=KZejXJR#J z+W=|bRfP%8W-YR}k2c*xK14an6~Z0~;PfB4ov;FN%-mk4*MNn`KQo(Iggf{LmNffprS|}jI*?i4>bcd8222ZbD?R;16=>@ z+JL#`(mj7zrNR&v9);39L>Q;WZZjq=LP3x|H7A1D{6Cs_-J5-qVi0pT3Wv(p=My2F z@T6v?Rf&NOGVa&3Bx;QX;|Z|Ntd^%Sm&PLJKT-XRMH12%Y`Kb%Up2e)6OG@D*dsAW zOy4$7n)xSKgA(}B8{M^YeFAkMpzISJjpeOy^@95|-Uf?A$?;#{HL|kidrW?)I8wEw z6Gh;1Uk=Ybd^&>Rxu_87gMsJFsw^nqw+prc8wM$R}h)ET;9Q6=my(( z+y|!_HKhN_$^Es-iHz9>ysNBauqwhZWy5ZykuAQDZGW7}a%fLS4D-TyO0I7X~Pb?-%mPWSEj0QfK-8`t={c6O=8n#FjkMHai z9X6b*eKf9{RDl%(*kksNQPrqwyd**Db0v^4AQdalqDSg2yL|6}Z$wToxvsP!{2-1J zit6v^6Y^P#!z)HLy%;d=PnXxlBy=%__l8D5DTdZ=x9m*q8@3H9%rR#S0YM6tE=IYj zcV$|L#TIHm!aMr*&-VC4IPx=-!o)eu#I>Ejt$<2J0*Hc_P9;-I<>PckY;jZt8hKLs z6ahdb#$al3iv*JfSBkz0=#aaXsXG*}jYn>20lkl*S5>&+8MoON%SXB;5#;@>`V(!; z#cLQ!?y5~Z$p`2*WQozQ0ncoilELs*dB*)jzjWgg#%Gq4m$F4Mj#e$QFkh1KaZaF} zS+_(!EJP)A9{`Hnr~6N6ER`lbc`KedUWc{>`40kRsmqEV>hpJu#MWv2#5Pq5453uM zqm7C1c(^qs8!^lmV-09PNps5G_--rqI2@a-Y}@0^qJck6T1GAt<3!rWa7{?Z`H8pt z=XQ+Kn#zT73Z0iF$CU?zRC(Cen27|->&k+MP3A@M_-gQW#_5Zu+5MZU9HrmY;NgK3 zJ?v%Yho4R%E>&K!lXlEB##QyLlUIhehbD;9CbvZu;HTT&mAN^c7?%s$Ay%7y$sO|@ z7IYCQaKSeV0RM3kt99=zTugHnfAJiR@P-G#TttU40dDu22&nZR1dD02Mt(+$b~)MjLvG7H ze@CxFz>D0ctIwX9yc5R+(qT_C2+Wie7CG5l=QT`OtkV`&Z>Myp=C3eGf-UY3R{iHV z+)R+^L|`9LB0PI2#aGL&LaG^5o%2Xho?3gxEeHNGRz;)h&t5)~fN`mz&As~k+D`1? zn#D_pQp9eg`*`nl$I2J(fW~pArvVB{9^Cq^8JblfBBh{$c^@Ic%w=Tc8BI^%v13Uz zrN}k76c=kSFn6y!U7aqNCcbyXJxK>tK?X~1RRoQHp9U@_=Y-SztC4=KOu;BGaWWNU z>n{fFj7XGwOV4x+cO>>s@Xp}P2h{3Lc{SpIYm{W_4r7^h`;}3F1pqbjt{$#y{_@kb z5^d&PkkYs}=KgX4T^!@YVJ!}~O|#ofBV8w5+zX1eIjI0r&Hz`Q2m4?mEC#52Jaa(U zpn1VBt~51+0`0b?=hspwdKv>J|GC_Uv*iJxJJ>p!`agVC?a!fS^IyeABsIGcxJynRgq(y7R_3rN`@C7y*`n%NT5+1qq*qmYPrRn}B*R!4T5Ei(`H; zmhX=gXUP@wkuj@qw~QmvxocmpJccGadP|M2B;z75a; zD_8;;Gz^^0frHFVLVbT|-V_SMZtO^7*WzBOGQjJ6+dUyY-0X;o*=T6EFZ z;I;H@7I%sD>u29iUSsd;Xq`Q(q#pPGM>K-mX3ui20jcs?$# zvoBI(gO8K*N+CHI^N+h>H^_MQn^+&N3?yHq$>WfCJ-vCpMX@q20rYt23xk}aJ1wNL zuO^RYt~gA!xx6Vt)0nAHGSXE6W#}Iulhx!6BZU;U0Zu_x&@lm$hPBKRsg$Ia^sWI_ru*(ZiD zmBuUk`$M-^Cv2{_tDT{)z$k~H#Yaa+2a@?o{>$oULB6@VDrReId)7HT+}xFmC{n?d z0WNhAjz&q?q+O9#VPg6=RMA{9l-wW&Y`h4d5+Ssj&3}uO`^UFy75%6cEbnOaM^SQ% zio*W>{j$2o7NI-^Kl|O?9TOF$Sm;1VM5Lsv8`0u5_z(sR&ou1pQQTIu>;Uu*rMBFD z$ji>oe*Prz1&IYuu6^GwsvymwqgmD*$9SA>DK7D&GsD-00X44vp9HkYNoQnqvfcN) zVi1$Rx%(89w-KFN59(b2-T%}6U}9l`&OlKSKOv!dPXFL)GnJl;t4bo8%jHm?m_-xe z?{tM1*J`wQ3f9isV@s@Mqtg$?zd@y}#3q8&P)Cx1%1F0l($5+Y9wRBH27J*cEH*1W+Wd?TZ=*uEE{q97Y=HBnLG8#3O zq$MRJ=zihP-}r()H#vfWpTlyRU9Cu?t;T9jqt<$Xc9;`bHjj^w3)u4WCk5wn%ne%7 zlf^KO?8bP*!)@&YC?oUsic|CaFariLkDb;5ozdEvib`GbX~lI~hfiL`&E^Hp{}iHr zrRM%CM15WVBzn+%!wOuTbig2qo(zH3ua+w*DREiN#u|1<=o~wdkdOcmuZ4DzYFxU1 zs|KEL6?V?-gPd(2B(DxFM zl1dvJ(I2 zn)^Y&y#@9dXo)_r_x+eajZ{%q=5^SRJv&PEyk;~qGMaZ77WDV`|ERa=A`)6mfchLiEE0vq*quAvg}IwPFhwq88e*7Vpn3AA~F?-wvaFux1^Tl2iP zME*&H88YNAyMMY=h?h}fJ>Te(N0KzLI{EfETP3!O=f#*l`|{e_J6+wBiLmZB352T; z4JiaB*a=P+4Lf!i?N21t+g9CMJIPWO@k%C-Y?yb9SK?G;AIyYVez}#o^_^{<9gq6v zWyX*htQ7CGd#d2}%dR6?X)b!(J*RTky+g4d_HLCyGM2sg z?XSvqTe~rmtu92e8d8uG=v=24k|+VN6q8alOUEJQN=4aH^&faTsDsJ8*s>L_nJmY) zc7N}uF_u?{gYc`J?s>`Y<*d}h2MNM~6s5MjOp2NqnJiiAH`+u~9brfX2}j})?h(WZ z@*G7VfGwC5`6;9(rN_WaA_Y);EHl@PX(Di+k*aD?nI40xhH}D0!bLVu9dGO996mOU zY2v(fUp8B^lS9l+KRy*sO);@f1(uzXMJEaHbyl-9@r1__^1k2)KK00kF9yP)TW=^& z<)gkMZSx~4!^bm+qm%t76(=%W@-&w15#oxvk9_uC?mPyCIb6yov%K_~3Ipe_E%JSt zT8x|7r#cRc)FUgb;B93DMqn`CcTD4Q&I^hE3Oh7h zK=BLooN)-Oyvly$+F&b#KDT7t{u;PwR+?Hr;?8X#K(CqYjXn?!`P3EFn$#2Ve^#BT zoLO81O~|>31AaR~f>1o4l8f&(>oXI{tK72q0>-tuP0_lrl``=NTsH~TA@-z}E5dMF z4`n5??cS(*RSNehk0cQ2uD?2}G;{Jg`d)#^z*=>25eAwnkI-hKukGnu0=su=h}A*k z=D)V_x3!J)F_yAdlH(rdr0sw8$vRX$Gf_psS)>J*? z6q>6UMXsIgi61Lo-d=&|xAu)Htkb{Oa1=#Cjk0yn#Q0Y;um$d&Ow^n%e*2)j%vI+5 z2P@7}25s43yU9#LRi!Jk=;KBHQ|^58zDu4t72p+};temua&J-Xp1yi7l9&#f3pFvU zq{rt#O8}hp`?qJy;PzD!V=yi&v|@B*tXD&mU}>v7Ov;%NZGkf$XiL@#08x$n%Frg) zo_A=3Y{+8(-dqths0+nHISQ}bnwWQ|mfZlowX6Ar7O|)PY&(YKCvh~huMkSaJb7U= zE^n>aJ;~=PQmce`{Cn{Ds{5W#@+nNe`zNA7H;j1ckou>;YJ4hCrt35i(*;h51cJ(+ zJ4{jzd|Kee;|gjFw(W(1sp^He1_=;VMmB#m@pLolHu^1gqhp9|+^I+w;8}X`*dC_Wn>T+QMTpNUUjP+J z9*=(N-6S#sQLEkw+?CNJgA+yoW#E`kO(~jt(-o($%ORpA1)^2v=#JI7E|KBav_-UD z3MEHgCQIK}LL)(E#7Z0kh0Te2F;*@9(oHL5((e7cHwmow^Ibw%ZmvuOUi1%4%th^{ zpI73>kizx|g5~K|I*KJGLUP^X#G)-1O+y_a6oxnNQ4Yo1&HBRWtWbjk?RFJ<_;6W; zMy@=;=$OFH47dX(veWs`;Fu3AQ-%|O{+5t$e#`QTN+`Y9h@d%YZ7Tk9;dP)Z&2o$6 zG1z>@)I9`s$Iuq29{i^WBs5}fuM^M@ehY7%=oOt~&!9`*|I9X2Q>Pzm^k5ZT7=ub< z$dntVe&2}6?{v;iu9q2+4(HPa>mUSB0HQaX$3RX-$bIjc{sB|Mnti7OY?gtJyqA@T zj+SzFf}9?mqBoZf=y2+A-uCYWU5izuC_wd+csdChVr)&ttEs;%6z?$3?IyUxU|jU- z-$)B2%h@-bQ`o3enZLpoTei$D=OLU-n7QCXu%%tZ%BEp$@!i45pF9$ zJ%=IA4N{$)&)J-;1W|DSr`$6Ff}_Jj{gE`$*jQ8HGFx?XR(=(GJNuD095r=dbLdnx zQ3&{@zr@C6oJr=bOtlp*v{4#&os|FXw7Kf{Sxce(Lm(LIbxI0YPk z`ctCAZ#?)bprL{PWOKOX?-6i1A%kviW5y&k8@Rq2&u1+h;gjKrBa4deHvgYOk9u_) zP#6HXe&kYTnj|qEoO#mOf?Ml}bv)G~XTG}KPLVtj8CdA15`e=bfCrNIT!jTJ4;8>) z0O(%P(}RIXND?=}6iR;*chQpvK{b;E?3E@bIQxJ{cLA zH_xBEWsQrnVp#dvH+*L_WlKiH`ItP3+7La<>fb=b_ub`t&i(8Kz}u?hn?zWcwhnB%F2qd zU~1tN$D08AOfgvpVMySW#@{#o0j`g=lhT!{m%_{V_TG7H&9nn^$4Y-6X?Xi%(tc{Q zlG**YN;!d{5Hms={r{ohO#Bn+U?clH^3k{SqzE?09acfI zS@@d}pprhA9ORM{$fAIU z49V2i80z21Y~pkOlg0V|^sx$>WnwOZfBl;@4MIpohlCN{yjTyU%Z48 z4>(1Zl$;E78H2N(iHWHMSvs{+T{&&-dD;VnlC$RG4e-7y)l!Bywyz&>j2f~(2g+mP zE?+=irS6ZLd2n!OeRg<=0J^!AX7W*cJ@yDxt@(|t1Ml(oBmDW`;4k#cQDh!Cv)P`+ z=b!+6dG6rA9~!rf_> zonXJUPR6z1$}fGe@MEYmfMo{WyByXk$Ccw&D$A?!ywp2Vxm@j@TL0~KBPNTa*%eX3 zZJfe=9bzz0ia#R>e-FBiieu8tC7dm2+5HR|;A^KK-(kO?HtqGK_>%;bpR&R1iUT=j zfx%b_(}397YfC`;-%<|Mi6ZgPdfS<$*o0Y9_L(S~1pPuiJb-LwlEH?+q?_Qq>^MfHE+Fj@OA58v<+4Z`DpUrnw z4BY8?;UzR}GXz7Fz62KkvbFX0Wk|ox|6bR0?j|UdwIg;kr)DHdO4rSN+=uOX4gNdXMI>gz)rzAf}-W{VLnj~%}n%eju zHyp^%#~K2<%)t9*oPVZ5bF@8m=JnD>tX{*LycU<1g_Mx=EbTQe6mP*L5j)&V36Vr< zL>;{T3^xm-3jkbp750SZQys*(i|JU>&qS(qsud#2`0g}$vQ^XQ1B@h^7g7NCo6bPu zjB~&zN^wGGDQ}k$T^ci9-Cl72Z3Ku{V&mef7gr^nJ4LSz91tdnb}w*PwcYf)=-Mwx z9dZSpcMQ6thZJH|{m$8dww8}iCF7~Bj2KkP1_Ni!u=e*hWnl774n@SvQN7mKr2+E& zyUK46HNbw)7r5Ef&*ND)12D6plpC1(2tgU+x+Ql7e+2WSL;_jpTnLXb_Up~Fq6ACW zq&g;9pifw9RJ9^fH>K2&_lI!jr)ad{yc39+m4JR$T@Pl96>(dF zNOM7}zcQ!tTaxgMUVx5(mv#`D(3A*IP7A?8<(uo|1E{{TW-K^o0aoUF9lnNl1E$qY zX9S4#6L3|>33z!V>@O=Vf$E>Vll2Prrh^f?gWsb$Y9gq@I}|Sa2^$2OT{7}0&B0rR zjM^dfU-Y(LICQR2!(J-bMH$eWiBBzSpv|kIk7QZgENE3k+u3Zrv&!^CA*e?yLM$WOMTTG);53MTonw7y6Yt!HSOB861$#&0%pAA1QI1~eORY

p5M-7%2>0z?iGk2jCgM!sT7}~$M>%P-Z7~w?WF@ewPzC+}rfK1L)m-kjS$@%+*G?wxN z3M7G0Of-F9K$;CKH$gKoIN&jFD7a9WPP!v?eU&oMrc}C?4%+~aXGT0;?TumEDACYv zU~DmBj0LkVZP)K*|2Txcl{d`&E{twS$`z{AU51(XvAS$2DuUYo5@trWfrZFQnyy?v z@)!A52^`jyvw<#S4MqfD9|DCNXtiFiKTMRHr=2fqtfYOkg907*%1r&StsMoU1?WNW z&(h6lC;fyw0>%)ls!+3k4gQ-DONNO{-p~Zd7ZIu_SW4X`!2JnKXR)Mmj-iLyGO*G~ zyAr_vQ184` zfS$^RN=FB7C+yrvCK0*a0QR682Us;+O5pP=(?-NtuX1j{!9hhLSf(l`02V9lSgT+ zxAY~WS8KMHJk=~J9afXT-OLx85ZO?PO7q%Fs0f&m#l~~xX<7&I>=ioF^$<&jtKJ!; z5DIV#wNjWy0nS^)Vn_Ucn5%>hD+qF{$3n-EU1j*2f3r+#(gIt=o4lPklK&7_?~t}T z>*zX3SUt6wKthIVI0;$crHbeJm3x35O~nGhB71xL=Y00B0KU4szUHu==f%RpDsj1u zQ4o>_#(0DW?4N&py>8d2{;p5lVt>dTyW2yYWRMXeqBbw>b{XLp{eY51|1Sluz5aqq z_+aSeoFeGA$bK~9_l3SJYl8GEPG?>Hz`p6M#mR6bn42M=$UqzFiKdxp@e&6AZ{c%i z2$AJ960s<;2snXruAR$OecY}0yy}7yfes_#F-hKD;FUAngK6|gV*Nk7x z5?#UQ2g?TOOr&8OLbG3RrZb$htIzauFU*4~C_}CEOR4odLV_Ewaz6MQAEcb8i$h6C z8D1gfLrA-SdbC!$QZ#Hhn0K3F)P}^oVgr-^?3j&=jGbb1b7$u^qVSnoTr^Hiz9BrS zK=6bwhi3B+d%%s~N;`PYmTz!x&$1d;ND>}nd)usIyAkdo)RTqu1W17;!1m!zkr%4X zEnnFkun@QGY-Z?*XIC-t@zGUkNP+Q0W=C*%xKD90M_^zedzR~z?_I;80tQ~kUER~; zgL_H?GdTqXq#m`>(>FYyd)au;IRl^aW&U|2&rv5vc%2LnrhRB-Q~HpOkVoJ2Ws5KT z&rmWdUcO$hCDDy@v-5K`IQ_{up*FaPiP=}u-qm&4)zuX=5+=5Rz!=*YGRZz!(aA*E zMu-UnWXG1UCR_W{L0es-^y<4jZ2G@znwpXiuh7wH?A^U3tlpr&bR1rR_KKN*S6rD{ z6w7(%TMH=on(JH(L-Q19UFRk)jGpoRd^X?>xB}GVufB!j6~D#p<&uo)Ev<2w^rB#T z+Ps$?4t^8r)+`>iHDF?6)SpF*yPK`dp!%XOd%M!I)xqBZ4f7`MwF>J&Yl#@H z(29zRMKNRJMfQ1;skAI={L_cuZ%L7#=4&JQ@$6LdM!r`D_YJ(W-dA-^i~a5O2*VZN zGoU&e#B;Gb*#LG!i!%RX8$-gs^_z``$9~-}JSF8GlmfrnvkqFn{rK@dI-2IaM|Q?u;}qi_Xa`-++(|n57-1YfHhDhB&!n8je*gRi;D}QGduOg?jq*m zM>83dra0x^XDgsjvb~}0{m5CB1=>4TB%=*9-_g-V9vIU8dWSmkT=Y7*Fof*Q)U>_1 zs#R?WVkXgzJmgE(#=}Jq;YRgA<#r3iTn=0McO)Wzez<%Sn?QlTRZL3iE*Dp1Lc*QssR zL>jd*)d0;7Hmw>oZ+uEYSX@weZHRTM37< z>}HL>e))c7Gq^%QAsWu49>MGQ1c66kUlq^DU9NNDZS?S9OF(&q40T*1?bCCrzK5m= zEFlrI+(x5}o?QoN8T?vWU^yVsLxF6=W9ZUwPo2w|ShAXtOJNM_ReaFm$x8`P)J?fK z3DO#l>^`~5gb|49T_41O0Ie-}cJGuuArtUZvF8jGQRKbmzl6_u2{} zB0BLu3XGWRE8LX;X%EU=xq!GRC9V8)0=M~d5T~hv0&{!6FT=Uap|J&;<`2y(1i#m- zBN1M;VD>S<=ju0|GP6oj86g@PV!NZhEAV`)`3EJ#M$YD%3_2YU(Q<5}9&pG=$XwG- z8d}}C$~n+z*8L+1m>yN)^2N8mN~`=HW<~z~o>#9Stq+IPYK} z1~|Zshc>0ls8YGY;L2E7OXy5_zy%IXgiCZ)0@s=&b%}>}cQH6_<=-uInH5 zJ$g6L^i~AQYo#lkh38>3^bBfm#N2 z(=Mj%X1!2l!asI%=_0xw7mi96#bbPCrkm7pT27us{Pf`^;Nl ziF0V+5a*uAhqB9pTnGr0n)ad^#D-|hM}wP4W<(X~PqA&Uj50rvMj)cg5+kLFR!81X z11yicf6xr%zCi7L9;1G3dy6rS-6yYWfhlWCml>YFAYN`z>M%#b9l;hwWYh8vX*vt- z8`)tl1fY(*QCmHf?zObNbO7S>4O>{g_9mA=*}e7_Lk!p++Fue%Zb@9`5MvI^TqKeC}vbYY<19XqPM>T~eRn~poc0sKOOLY(y3{EZYL=L+j)z|QFl?CLgzgo<=tsi?^M~2yi& z2$aZ*mPa~4yFr5HSi`JpfJh1&W{#8YEbSghJDrm>BnjU&?wO#c{!kQG9gUJN3c`B7xrOX&!G(=t0^i)-fOC{n-^S(3}mhR_Vu!3 zTt<|89ZA@zcp?pf>X-5Fp zQRPkaeVZ6sv%0Ub_;>p~#x76YIp??)J1-_hf>qkbzee;?#u|usowCPnC^Z>*j8BXv z(v>iRN|vsjkf!Cg!RY6FV2)}6g^G3!L-WW*r$EW?$NBMK6~TLw z(#E2W97QJPCo?RmTF?J}at5>VPTGpZn#V6mgQIRSO)9H>er1oQ9;3JH#oLCm%%sa=dNe)H7ch|;Yf~xK zd>Mh0Wc6VgYmyh)!t%Y2)=>5#^;2|`_WA8wZh6s7_v|*>^?LPsw)x_&>%Qh60#JsVp87!Xw7W@49G-N z&b{ja@H|veNuFOJ3Vk2_Hj8%Nn^AMbcl%B&WJuX*uNW7GJi2L0v`0EUyWVz4GTP77 z6SZID9ueYCPc#rRh4<;PC~D7DQ9b+RK=iZ$UK&Mg#{DvCq~gyJsf@dbWx!cUDTz7< z7kjB&@?sVe<^~2X1p3AasPJ91bz8zbKk7jmFGE^Vs!og&s(`Qk4f)zs2ai3NZuahq zEHvaQsNXzBpi;6siSHboqNF2TEw}nzI@~nI?wiUOOJ0T!3kFN-=bbS(WVdBk1p~s+ z)c;I14_WK9G3BbkFp;qD!qbln3s7_+GlIc=ovVb%?K+p8a*6~Co-JJf^gP`*8WT92 z#CrtJ4Jd|tb&So|9Vs~x4BTXS)Irq&a>L;dJ(5Y3b z90xu=NU_CtW><>Gv#Qz*AG6y0m2PQi8OYPa1AVh@?fXl>=WqKW^&ER;`z-m;_ROl8 zFTsdZn+^oH2`wCv&tFSge$Nq~77owd!fWn8%a;DT>4vP&oGFh02$b3=1yh*j%D1eZZ9CGuDqPZF>HEW|b@LYZTb4y^Ag5K;6oRH3e|2v#sWU}Lol zCJSsxz2_AGny4x%k9hy{$3hm8cW;suEf}jnr2j)dbKZX_tER}-%I!DaL_R^if(j41 z@%NuUr|1uQ@#4id;0l2{2J9^X%fiRRINDpQo;i5+Pe?{^AY@4s+6qU|CNzdq_c?Uw zpK7c$sN@`wKJDxC&)2zp^$*a|&En6icE^*A#jz;rp^JvJqH^Sn7En~-;Nxdl#>B@X zmV97Ir?Klo#IueDrkb}+`m^-FgurQ|fr4j$!h^m2sDBDG<@D5QKIV}QCLbSPZ}|GU zg>_sQ@euYZ8p<4tRGAr+PK$GI1qz5Vmm3BRpI35%C}@G>QnXqjG^VYdREIDZ#bRn% zIZdxtqO;*fQ)t*vntQmN?OFZ(bTEDKj(9{3n122p$h`^MR=4ZNbHwU%x~Wa`mdU^E z5ainU!ighGPaSraPW9l;iU&6R5}I;JgWo&Lw-3rVcaxTc&U;^`^`Q32G8w7lKnt|3 ztY_=ssRtTmmc6*VJSoUiLnAILD;uDbmzRge zv?-9+$i-_yU4iKtDvbFX`5*~g|)!}DANu@~Gn_F8P z@gN~4er98{O~#B6&l(y&M@5NQZ8nf8_n+5HX-uldI{jJdXuz;SBc`Be0%eQ|sT8yx z>Ogh|fJpDo0=D*RvlJTteAlPCwC7#H-kquA!ab43v4M=VTn_bwy`;#7#)$&da2PN& z*<6n8zkK;JP~pG^sLdNFiafo&FMNuPm9(+3u?_mYG2Mia-Cjsa&h@0q9fLt3Vt{aZ za@3tFcNYz*mVgRo|M$DkK&2x`_1P&mbLI9GaAow|{)2r)(Nkr$;PiZ@;qnt?_>dO!`xSclB3n~10X@BuT4)()cBDx0@w2zP?*6P z;*(6g$i`xNw(4dowl;5C;}nfDQzhpUX#6~Ka3kBElFxLU9u! z(QD)P!h`fbhob%$^N#6Y1plb0shu z&OryWJP#)6PdGwjUa`~EyBp6dL6O>dwo(XG31yZdERF)4io+OFWhjR9n85|5i$D$( zm#XOhU|N0aUWl;T0=*yRxDk(0pz6rJ@Qbwof+NE=8PKcQn6KWg| z{S}B%r3hZlPH^E&B)h|>YF#i%SMn1r>VDJM$a=-c%3K+s04aY-U~=5-5J2fJx1Av| z;=kqahkH0d^g!tw>V+dUpImS%BiOiH1ibM|3;Wwx6+Jb)Q5k3qwWq;fGoJoO@VB zAiXkwcbR6ff+jNOf@uDxN)a2an*pQ0u1qjQ%YnSpj`#753Abu;`H@;jeh0JA$$$%f z@8OYF)G40c0rAM?p)u{jrYq!IV`(?<;o=+93n#N^LV9}}3G;em*C`CDGhE2T@1VA@ z^KEdq^rVljiTfQk>OJyi`y^i~-z3out$Fk!Ln&3J>XlaEWDf((S8Hvv&1YuUP1WO) zYX|XI_fm#A0nqwg^8}KY;VSXnq*;|YfhQFhWVeaw@G{Mde(PZSJMIw`V$<~{QX-V8 z=*D+QZk4%Zcmc7$DKvM>6-4wY@PC#D;reJ5TTPRPu5Qu6IXd5m=vWAJ8v`U>@mR(Z zh_+9q^gnu9RS0!60^|&Ml-#Xpqi?5mSI=9I%Z#LPr3IHZsHF5-bFFtAH`%j2QZE2p z(_FRVXx4R&^!a34s1I66wkT&?l)Yhea~bkAcrA7mv1l+dPKZLtkUakO4_|JuVI`~q zYXxoA-tONeA7gUXxC@=P7M#lcJC7xLk9P)YtynEECuegY^g32~9 zj;b#2kVrpHIsRhBw=Xx^GM&1=v~KgcfzkwdQI>r*h%hwehKJ|t52nw>57uu}#y)IK z7dACBGI6X4mscZ2|03Q=Y-+XJ4*}<*$&2%NtsjgRYd_FU0&$lT!C%Z(w|)9BdMVk` z^`50>mX*K03ak7Dq#(&lzwgPn`fImQBPkh}2~?v$_kcH^#cui~S}gSl=3Oj@;jD)a ziJm#48)uj{789Z`MiDFkQxuE0gD4PF>vS$SVV=By<>G68uVegm9G_T{2cM)Ld+wd_ zAdXdF4+Hx>!&u?YZmKk zbntU;&YENA!em%+Z_q8THkC5o&=`hNfcn?pi{oWeARiF1eU(Un_WLa*Oq$^w28`_Z z)MPxPc`F9BCn}YBP4?I;KlC1GCqY$GaS&A|y94rn?A_0y$x8^@`uGlEpoPh-a)7#K z-NHrW>Htn}Y-XY;*Vge|8W^sQV)TTjdr7=AnZ3U0*9vOWH#TY@HXI;;)igA%a}+F= zF+K`s(0b61)JQ9r^>}6rXxvIygT9s6n^3=q&^t<{sT#~8eBd(OPRQ9}Hn}6B@$x!V z{Js*L#Cb%|rXGMIt4x;ErkdA>P0#dEp@E1h7Hs51+xs%2vmzwSOv6|;a6tTg9Db6t zh{UnSBCDqs*0Z=xCI-*O$imJj`sO>CLA=z-ZJ9It_*oMp|4MSoGAknuUV4E=D+8gy z?DYKVPjE>FhPNFson~fcSfKU+vBJjAj^0R#B~bYRJ^~x5@7)Vb4hKLtOAjjVSrH3+ zkc;$oPvIPpWMpFY9FGN#d`jjYC)VKx z%^v)&j(MV?Z{!LW{7Cck%gNDRKA5^8S`BXk>IfF?I=vtwQ0{~FfSoD3ViPwuHWn#o z*aJ_Fw>nH{H~^?ZfU@Nv4I-g&jLMskxg3R?#JuQfj61^=qJp~833z7^=|>Bwb$5OL=~p>Uty~t4-X8;xY?On!yZmo9j(@Pcjq_e zR#jE82U^>P8rcf=s90bjjiJ+>IO&jh6rH7B@{{_aQsbjtqI9JPbe&H=40HRuk)1eL z+mlwj&ZzJ@AE+<+Kmv}Y-Kns(yQ`8rAoxIW;?}KO6H7~Cd#j`A+5SO6qS^hy5fRGi z*1&noH|b}B3V5%0IM#j&2Pw2VVtK(8kI(Oi+Ahz(6g}646Hhw?pFJjx^$L}PB!(%u z;;PF#S(F|1B^i#M5{E<7%KDzgoU}e)Tn2aF`hjpJ^vBm1{V>pY*uSv@$spT`NSo73(<`*8Iex7FdO#2(-BY(szZa~eCV3=n4i4>qxB}JFt=+fk@R-%!UbE<( z1@x+)CZnVzBD?Bv@k=EKbM-N+^WpY)DEN5Jj<9>jP$K+lZB4IANJ`SM z=DWW9%AV-&4mfK(qI{JQ-kp|kH@(~oW8_fNVyARQyVw>NiXmcvIp?c}CA?(#((>+9 zukhBJAF*2YEZHB$N^<^+k9PqpiPNSN%;U7zxvL=z<~0fKYzd+uySVQUq%Vo*H4=ynB6sRUHvmDHP~2dEFV%E zB=!Cc*h>gTy=HPukxZTr;O3qHA1Bb$&zbWLx(PId&X9+0Yz7^nN7xIA4f$x4y&&6Z z%FVLF#>T#O?b<|IQ^P+?G%MCej~=0c$pN1{3FPr&MQXmq34l1>nVddz+KWMYgIv)Z<|-lIa@!NHIlF;hI- zYq|`v{);7@;>0-r%DkEYLna3AR~tD9V2^Rhm*`FYGqgo;=^8I@%-_F;P~RDk><#4V zAlS4h_!yecpFqX*mD`T#Xm@2A{=*5dx8r&Kvq|8`74*nm{;^@$MPJ6BQ4}tLh*;;0 zmSuyrrpt{To4F^t5)|#qiyf~blqFE*&Lnc{DTX$>48KHeAzft_5k@mgI( zXcWvE;x;yqF);D9nm=9NUKtMW;5*7V+}+%?BBbXN2gO#vQCl2;Tuu%P6qEbK)?81Y zK7wu!=z|cQ5g6XhA^wzyHVd*8KQ!>2XpdhDx?pD5Q)RIT$tX)3@g1{hoEWBcTl}?9 z%3Mq9Ua;RAYX{^nmwB}2$dxWvOWN`_Wobi2fhjXuu$i$$F*bhy2|FFv?5nNxm5^F3 z0DgTcDtIV^ZvIS6xLscnCGe;&CQe{}5_}V!T%0bvb;04AWU<`R!y?!GW$xI)V!1(R z!==o1Juvp6Zg#vkn2UXkj(Sn&yM=`G@}?mro~f*K%*mvG#{f9?+Eq;=9axSKc7!k?6b zKwJZL{b%Biv+8JiS`S()-KAieCE);%N&MquqQX%-R^i>!q;84oO5V$-tB_5yRa%h; z*-w7tSX3sVr=~%IDwfoGi1@c8|op9&-y|wy zPw6pKyP+Ej@)J7E3Xdt)gXXR)&|7T*&Q#~pgvVud!zqTPe52>*AGKh!xQm940@`&I zJys)brraQf5T?`F2d>){tsaZ|kvqS;1Uj0CY!V?c@nPL^usj%JG?RU>xcbc7J=}E! zt0p8WJ6e^VeHm`_{@N9KXz8DM)mIxu zHEA3ln7PNM=;=x*%YPcV+wHQOIIpt3L4^U?`0ns%G?%6@xVxTm zSKz&?{8-+FRFNNsmMl27o#au>j-*zShEYv@wEG)VOq2C|?spzi&uG&xjekM!at~36 zh$!LwI`ShA(?QLV-C!EWWjxL+-y>E^T7~E*MwyzPGct#)33hIKQ$3VB87X6*j@{VvoyUs%GFu%$!tdE zp9_WajA!^4h3hNh(*5rne?xuXpy%%-fL&}RHJeYc`B?|0NB!z*u?6*WJrS^ssY|!B z`Ltt}@e!UL_LirOclkUz*Nan{B9|YwHxf9MSrdWh2v%5RWrw_T=_9UB;pQl; znkYu14M1ciwg%o$vEB@NFoYN`g5}r#jQiC=gBILh)gOrKoVtXxCQOWv_9*o9dwY+c z(h{CsAY`&Q>z|-VwY`DXxE(n2U87BgG@?S6!m(Rdzjro599OPtupzd92NW;+PU1vP zBQapp&vgD`6#7P892LR9b=qTzmh9yEY&*31$n@X^isko3uV)26?_>Ob~Z*ymNzWfkq=$;$>$!az9?8O zU`hC(45OXCpDVP8Fe^oENyHt5!`-!+PDv7AWJk{b#~%cwfRn$O8G#W8)O&(%TO2Vn zG2=uS>rbnuRSd)uud7I5771>MIlnt=Y27 z@ib_L6v;R95mfg2gZgAj9xw`RNYSw(AH!_wH;!qsBE9tFl>Ydb6s9*(;_W$QnW41n zK>&7enmdLR#6S-ojk{xUt^S+s1OG>nq#9~fK|x@rH!&!HvVZAE9R-3+;ySC5lit|q z6l$>GBp=5+3O9;LJN+uY-XxZDsIYV7a_0H^4DTHl%DOlB!<|(pjz?KmxDE{U{9@M@ zbOZZx7uAitKD#PxZLRxC{8cJP^tQtn z9Hpc2#8!PggL>DnPOva5OxZB}Oc*;`LvNG3>jI(L@fTdW=%{8TUxv5&0`mZvd3TJp zFgtckEPpeY!x*){_C#<=d5Q`-S8{knDM}3Ze)1)`RG&Vy6{xvEy>_X21S@V7O;j;$ zn0e%Y@+a?i+xz|-mey~&>T~hU=*7Qw{j3gKnT1&}(z0g54U5q0DA}o(Knxt4+I%~j zb|=CRf1)e>FOmnu4%D&!r>6|GDlmp14rpDyy~r8rcV!(#SYPe=Nm4aAt(Ax2o%Vuypi%=}y>IabTm154%ZKG@S%y{g~F{jH#ybA*#IJ zF3r2KqB^oLLxsTtX)H{}3}T4UdyaHZ{KfScbBpjn>D;$9LeGfA9G*`dFRpkQ!!SFx zAGR`XvrQxAQt1H`v>dI{kE{6c+<=X}(HKK(VVf6ZDYyFy zhT0(gWJaJj@r%3Zr1z{v?YR&0c_w8RwAtQAXs?>rF&k0O$4 zaeb*-!kJmI%+z*P}(9I;}Z z?)!wn#pU?T8^B!%kh{M6a!Hjt=^mEL8O8Fc>d6?#1+$}PE0vd_U36f$^GH9FU()Mk zE%>k_vs=JBMN#2#g8IFw2E8L?*O>?3TyE{`LU!EwTXb6YM-egz2x$kgQb^YO{jzWh zICPd4y~;wMI-ap&n&2l3ycAkeb$jwofoxxkY5&D#7MXf?d<t&ecAw^)==6Nc^`E;PB>BkQU+5fnq7cxC`Uqa=ePg0qs zVppPlzksSU$4l}#4 zbd~|fhjs&QN9`QZHKRZ-A)IR&cei6N_7f;3N55Xq?WnI>(*jc?K2QFAHbMJwsyQ1-EVRVq$hT3wq*#@+xP5F64Nh^AY%;K>(Fv$+Fmjlm>bzoHH+pTF3 z(r~(^r*mnoguOPKgj@R^%NqrSMq?nYSP&iWK0ranF-XtO^qD}B>R;2SbV&v*iyik} zJHg~h;<0oWef7}rl%;`X6Gy+}imC;H7lA=2g$5WCHZJZPfU!SjuI>7G`TSe(@jkbE%)GOhj{9z6a*o6TP}LE_kGg-doGeRPAn@q_p^h- z`B8kXF}xVjXIjIUj;{g`Hn6QvzDgBi3_p>soc`n9l2NeGC8k$$8jabownHWbQrzVQ zM>r_xKZ7DhQk&9X^VR9w)f6$lPW1ovu06s#C;e6d!m zR0}Y-#$IyC-Md>5g?hkhhy~pzd{g@0HM_MlWa0TMx`gGj)`MT)LGRmvG(^$j*z~%z zeXn&P{(8#l0XQd!+T?^QNQhAkrOBPQW7hj#o2zd`z!teeOY1E0eQ_8XE-*ym)y|#* zFQl^6v&&iS8OH3-PBdgD>KK~&YB;MVpkt#n!LDLL96M|v1cgtjwLeF%yo z*;sl1!94j?+vG7rG>=kq>3dl?e@mq0CCy}>-kueKhqrER*VsRbqiJWL`go(JY4qi^ z!LYbQ+Q~Q-d5F52%Gchh$i5)fjt-lL$7)5thuh(kjTx6W+=;#+OUR1vI z!k_#hHX)%tB6GYH0MjEMJ^JiRa`yt@-lAq^Ouv5p0%sPq9Q`&b@jD~{#gqTK?Fr*K zhjns^V!)MT0EomuRRLd1L?{S7n0xn1I9XVL=?i3MbOdkZabV4^KIP&+*(L$updR?E z0QQYA^3jHhP_58!qU3ksdHM3C=~%_rm%(=)0XnYQ@$CvST=XP=;Mz3k5OXai>lW7l z0>`ZZ2c*(TZ)!A7@ZooGph!00gT5G|nbfYk2xCSUhKrdI!+s46EG^*tibp>7MaRID zXWrfeDY5FJ(fRyU%wLKGtP*PQa}JKJ!&#Wa=l|vORV1zZ|ITkEA5N={RCqXM%5wFw zZ1=dY!)3=bzrKBGpgS6HOh!622{w=z!;IZotlV!nI zSEB>PautTp-eqT3*e%Utamb_&tmq>U)mZYrnQdF2n%%D|^Y3xBoA;tb20egoi-U)k z|5pcQL$nf!V|?x}n`|~2wU{Y1%k+%$ge0yF(ROPoF-8mi-lTb8{zWXGD<>!zKXuyu9-U zY?%D=^Yd9{h@O-&epf2_a)tymwbBRvrll4c*;x2M{jOfB4rf*L9Gv9{+I35@7 zLGwS|(h;T64?Gpd7;ZboBD2vn(~%Mxqu#VotFx26elb1Cm`Pqba? zYXRa}2sqAGmDRu&Jw-a(uYiuv>{$LwR~F|^q$%kc-EkV=w`N82*Hua4kqgO#% zyt!Ua)L*iiRlX`K5=fJJ&kuIRtSeqLEFF-;q|x+-i%`8y$M8J-B$MS}fNA#AU?*V( zBH*wAujURPU)3QOh-I9dcyMrVsP5$R!!Qjr2s9X`^e3sMWyp#tC6W~G-t^$*D!Zm*Ljm4ZnzZ=bFWhfLp9gvwvB0+SSmRv`hZ5-n{ zz^ntLgK?jW?g?&H+ZI4To^W#;CNf=->3(0Z%ko>w;^o7Yr z^|NzwMu77;Rk6}J9wNt_T}jHhQ!_Y-Xl=k6K;1d!m+l(~qCh7ziuk?D;8&OMG8i#$ zgQ2sQ1rVwbp|M_dKmk0nX$EG=bVK=?NrPK#$>S+w6zEiI)3!_b(vElDDp zQ)XjhLk5h^lFxN>vTzOO-#S6ONiY`p9^8mbk@%&3T z)6mr=<1ih-5dz!mzCQ)CB8;*M1rRImFoI*;Ne(uwg3IxSs2-dnEwpwc*X6?7Sl(?L zCW66WZ}(5v{Yk7u2=y(X(^7K&2*)&pOQpA~BdN z3Yymxp>D4p_i1dz)ZkVqwQ> zZ0>FS?TRORo;tep4t(rpK`*Gp!^=ws0Y?vx_E#Xss+{R&XweL_COr?b7_6B8%dz(V gb?*It{DlM8qHL!!l&`P=8vJ|tTv9koQ0x8w0TaC?2><{9 literal 0 HcmV?d00001 diff --git a/002_utils_files/figure-html/cell-196-output-1.png b/002_utils_files/figure-html/cell-196-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ceeb0f65ae8173721981c7660fbbcf2564b5e5f8 GIT binary patch literal 20005 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

cmk=xHc6R47*_ALy3ci2ALBo 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℧Kf>vT{s58Urz*o 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 literal 0 HcmV?d00001 diff --git a/002_utils_files/figure-html/cell-199-output-1.png b/002_utils_files/figure-html/cell-199-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea462d7681747d95220a91cdf3b3588a54ad230 GIT binary patch literal 46885 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

)PmE~Nos3r!6v)3!zqj}DP`a8 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 literal 0 HcmV?d00001 diff --git a/002_utils_files/figure-html/cell-229-output-1.png b/002_utils_files/figure-html/cell-229-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d6eb41725650a35836113cbf7e2fbfdfcabe133b GIT binary patch literal 14422 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 literal 0 HcmV?d00001 diff --git a/002_utils_files/figure-html/cell-230-output-1.png b/002_utils_files/figure-html/cell-230-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d6eb41725650a35836113cbf7e2fbfdfcabe133b GIT binary patch literal 14422 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 literal 0 HcmV?d00001 diff --git a/002_utils_files/figure-html/cell-232-output-1.png b/002_utils_files/figure-html/cell-232-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0f4370102e5f14eeb11c79513f03825680841c GIT binary patch literal 24350 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 literal 0 HcmV?d00001 diff --git a/002_utils_files/figure-html/cell-234-output-1.png b/002_utils_files/figure-html/cell-234-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..91c0649257ff28f1e77ef4fb2e29b1a865d4310c GIT binary patch literal 21775 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�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 literal 0 HcmV?d00001 diff --git a/002_utils_files/figure-html/cell-251-output-2.png b/002_utils_files/figure-html/cell-251-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..23159afb139dae5036ef0c85336f727fd44304c3 GIT binary patch literal 17949 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 literal 0 HcmV?d00001 diff --git a/002_utils_files/figure-html/cell-252-output-2.png b/002_utils_files/figure-html/cell-252-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..44c2f35c5f3be6a5fb4e26f0da912e1e2746393c GIT binary patch literal 17573 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 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-16-output-1.png b/003_data.validation_files/figure-html/cell-16-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e05447b6eb299376ea90a345903c88854bc1e9 GIT binary patch literal 17978 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�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 K9m4JVkN*Q^b3IxB literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-19-output-1.png b/003_data.validation_files/figure-html/cell-19-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3bcb641f35b1d1824dc45bba3bc472b8b0c441a3 GIT binary patch literal 11846 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⁢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 OWo{|l%)Ea0$-e;zD@n)z literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-19-output-2.png b/003_data.validation_files/figure-html/cell-19-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..508866ccf6901f744e460fe35773aac83fc2c0d5 GIT binary patch literal 11788 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 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-21-output-1.png b/003_data.validation_files/figure-html/cell-21-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..045dca98e6c5543f7b5d19438fa613c7a8a470a8 GIT binary patch literal 7778 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 cDB6wSi2QwN!O!st$gdUURj(IayM55c>n+a literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-21-output-2.png b/003_data.validation_files/figure-html/cell-21-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..045dca98e6c5543f7b5d19438fa613c7a8a470a8 GIT binary patch literal 7778 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 cDB6wSi2QwN!O!st$gdUURj(IayM55c>n+a literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-21-output-3.png b/003_data.validation_files/figure-html/cell-21-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..045dca98e6c5543f7b5d19438fa613c7a8a470a8 GIT binary patch literal 7778 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 cDB6wSi2QwN!O!st$gdUURj(IayM55c>n+a literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-21-output-4.png b/003_data.validation_files/figure-html/cell-21-output-4.png new file mode 100644 index 0000000000000000000000000000000000000000..045dca98e6c5543f7b5d19438fa613c7a8a470a8 GIT binary patch literal 7778 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 cDB6wSi2QwN!O!st$gdUURj(IayM55c>n+a literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-22-output-2.png b/003_data.validation_files/figure-html/cell-22-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f185819a1c413eefbec3fc49683a7de8d5f700 GIT binary patch literal 12695 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 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-24-output-2.png b/003_data.validation_files/figure-html/cell-24-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..076bf7f0a7e3dbc866bad1e06df5d7daac48db7c GIT binary patch literal 9747 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 M=x@2-U;g3W07gc7jsO4v literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-25-output-1.png b/003_data.validation_files/figure-html/cell-25-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd73c9c11a1cfeff3fc825f3bcc1641d585e799 GIT binary patch literal 10597 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 Oj-aZI&;8rQ8~+DI@|jEk literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-25-output-2.png b/003_data.validation_files/figure-html/cell-25-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e435f58a393c68b2546be1797e94f121484f075c GIT binary patch literal 12759 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 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-26-output-1.png b/003_data.validation_files/figure-html/cell-26-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..7dbb3d8d11ba829f173cdd32dbdb517d239e7421 GIT binary patch literal 9270 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 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-27-output-1.png b/003_data.validation_files/figure-html/cell-27-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..59b1bc95e0efc7618d369017406afc3cf9992619 GIT binary patch literal 8917 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 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-27-output-4.png b/003_data.validation_files/figure-html/cell-27-output-4.png new file mode 100644 index 0000000000000000000000000000000000000000..3e611b3b0e7fd13515a7ac5c0414b455133631ee GIT binary patch literal 8861 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 UC0q*tNr1FKgT!2kdN literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-28-output-1.png b/003_data.validation_files/figure-html/cell-28-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e6080d6d38e417e2960e694e552a631fd69ff07e GIT binary patch literal 7725 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 AkN^Mx literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-29-output-1.png b/003_data.validation_files/figure-html/cell-29-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3bc7f0276cb27e191bf192b67b49654c6e1e13af GIT binary patch literal 7692 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 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-30-output-1.png b/003_data.validation_files/figure-html/cell-30-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f116b1fa1356521ffe5938096ae6a31d0395fd38 GIT binary patch literal 8707 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 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-32-output-1.png b/003_data.validation_files/figure-html/cell-32-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c60ba42ac347097a86221d07d63eb691fe778103 GIT binary patch literal 8833 zcmdUUXIN8d*KU+i931pjK~O2{?%56hhX2yI3jwU|qYK{A?&hzaR&MTg zF3wWoa^jMrzuMyQx7`&bB%J=aK-|U6Mxuvp&jWbK&$lldxua0~Zy;r&wrged-+$kJ;IWIiuD9+-EPT5xAsx-iUNUZ zG^AD1To~`G3Dy|H&$SoMK%dBq7lxnWquSH}NI?!GNWewRN3!fr6Iil`Acej$dH% zP2zogd|r1sCa48fS$4xu97m2AO}`T9bd-f_cZ>2NbJ(8AK8v7@BIh!iK#}d2^IyMy zwQtXj_g$XJ>ngCpnbdErFN;V?VH0JYa*DYPMa{|<_nW-fI5Cc_Ec3{{HvCRF3Hr&x zfBqh+YR&$XfPnqC=4V$fU)Bi>tg2!zXl~F`x7xCF)0qdy(<4>ge5-@D0<}_9|9unj@demO>fhGK^+!iX z+4k(-Hh9(!fCE2TAD6zqCwCf`&*Syl$tPHQ~?OkGA zWS>#$K3?YNwI&q{OCjyEaO;$ypop@v>3EWRM488AW^S%1x>`lh2VOJ6Bi9>Ut%h5r z5mMU=npBB~dB&fe$qqfmPU5MhrZ<{WRIX@hVmHMb*~a!-RBH=ecUnGo2I$!2-Y_Lq&P_!UBK zSXo)o2DUcI6jgJdQO;y#A3Yf1NuM*$(J{A(BC>?)EWVy1QSsS*F7@-G@F_nv|N5kh533xRXCzgYu2 znD4}CQBA#@H=mQLH+=(EzCI8Z5h2F#Q0nRyzdqofxPQ#~Hb+dxz)Y~VrY60_|LWDS zs@1V$P`s3J9_NaAb;7&Xf+sX0@JzFL`Nu;;Hv^dSwW{NTXd|O|WP*LS-?K-&dwmkt z>ms?&GZA^Gckj*$tzZdbqnr}Krr{s7M|8}30aK@9);&J z4(+x>A08_DE@mN!=hRc&knQB=<`z9FQ8KubS1qujJB8{8#gQ!U`p#+!*3!>3u{Z{rPkEYpc)<9^+z1nnzDs+OLEm(qfNnRHHw+K#fP$|5|M%zgMZ2 zc-gn#qGMx4)YJy-d`E9qo|JLy)QQ56e0pq8IRqiin%+kLBmq&;tAHP04q=p^ahZFc zJ9X-mafP?57Qv&PRIzYny1&w7YptWYt=P$=lDR-BTWrx}EKnr;`ZOwi8O#LiX!$)6 zBB{K(>7=}T=jdXcn(7{S`kNykt>7T1=rtpXR=hnJ+=|CV#&njt6Mp;cH&GSYp{pMa za6>~w`uXN6v9G+QI=>q5zk2nm4AO*AbIj$mnwrIQ4;g1|orziX)-yLJsrW6)YxThW zCxwKB&@HoGd$>3_Z-I4w+*2OwCNAw`yRBwzw48+F$s2-FIu z`VTFL1A4|@$yw`sn3Tlh)cNx5yebSdTeVJtd~&ZTziyUoQC;;S2j+I??%n8^m`tyJ zAC2{;Y4@uGRRQIy%()AZlr1K`NqhFhi4z{1tK*Yx*;v)l;c!5Y#(A=&dXvg>()kM) zs0B6{v|i|8F%BM{Tmzz^g4iQ3kdOt} zaAeZ@d$MUi!Etksdic?d;o3-|MRj1=+`GL7rlz?PRV(M=$$ENvQ8N{EZNd_yk%6&s z!gr{gIelL{MY&6_7tmZtKtLU?etuNiHf@bDDRS!6XjqeMin7n^7zqm!WURx=+*e^S zG3r!T0ra6`kxiJYm7!2-y2gHwi8eH>hcVeXx!<3zMd0rvt~`GCC0#>AOib(T+qXx5 zzaE_7k@GJ;KGG;9)?se&?G-fo%WEsj;#*e!Z%}Zay?wmAym^T(RYnCiO)(ADSm-Z> zw>}@_Rm5jq2{Lp`RP@Ms{rYuVo{1bgzpCl+3tQ;Jmd)UX(rRko@_xsh_N?eDZK7Rbny-5Z4L=e;d z2Meq6;aFfdd2l&~KVb1OGOxp8#X%*wIe}gif4zpWO!`Hqg_1&Sl}R>sf9_?sW^bu8(_G?9`)JR1jqX z{ALk4fE~;*LDne&8clRm)bkE=KP||1)x7;kFl=Ps=RbwxwVMT9(l>E zrv7VU!{Kjp+y8?)n`a&N1r{G60=ss(&Yrf{eiKSrU!KL$#~N684}ZTZ3%fw4d(4!M zx8skl9NO#cT6*s8?yYqZ3%#c}3jR}-UShtnfs=wyNYC;0E49)%pClnQ5g)&h8!{1U z#qq=>VT`*>U)`FaW6xRt;*_DJl%UaN!Ypgb+Prn(sOQX0zq$^r5{7~^Us_Dcox&2D z+{yb0<1@}l$qlkz;QXyZz zs0*VrAajF)Rqf|7VZN#^IhtCvG)^g=$15xJ_@A7Oh$RjAbW7x=B=+&{C0eSe@W%Fy znw4sedRCcYz1;)n7!?yjULropG#*EpD!GpHGmR`&ALcz(@{)*oi#Apk1#ad`coK=` z@L{4X#j~UFO2yegjRntM-?FjWR01KcY7EPpnn&&sBk;2bcN>*jF9{SAttvNCJc{Xk zV#7_7^#xxitHztIQ8{~32ZVBK7!2PYv-P^%2op@Lk;^g*v7?kwORx13#?-d6Rg*=Y zwpHjQvu7RIAtAoCc{=R0kBRBNh+me<^3)7IY)lWZ8PMgifrbl99PjOUf*hrA3JOS^ zyKRnUHML`tTIu=Bs)@kCZ2l&?2-%&h$GvK%$H!cCqR>v)VAE4(z$1vTJgP`;b@!5M zY_v`+?@>2g!g-}ekJ}jxoA8RHxUc6)%odj}r;_u1N?e9FS4LBtdNzE$3o00v%kfJR z%d6h*j`OvfL%#lN?WqzyHLdd_Q}o9@qh|b;eYHzV%-L);i)9ha^g#r}@;$9d=fEzYcO|G|tHnJ!`A8@}dXFp>cc z1VvR7mwb~PK9)cSo6&@>@=k+T#*$xqSECm>Of6rk>3;rtikhVX&M_#E@RF~CJn6JN zEke)Wa~rd&?AxDfF|JrkZ~7kT#%b>nQG4V63$Z0S_)kFwPv{sLW=2ItC1|I&v+dhw zc=_^Q9ZmGizm-{9yNIxG%kn^wgymH&f*$eG#fw=08K4;GoiTrFwqWBtU={;GTb0l| zIk>pS8Oh|8WJz`4xQhNOFWubTqmz>at-u82Zm76+c_=ouU{!%aZf!>#wG^`vA2%D(e`Bp%`10mQ>hNg%OTu-(8sP zD4W>tGoEaJ8BtTnXM)7Sx=-G`Np(FJ2y;>nUz+UIyI(vr771}clq7kn2!3l;^edltD2m|wbdscbC4q44HMHmBYaU63keGi8&7 zE(5CMjjNzG5xg&U?0W7%DpkL`o4rM%n(5ZQYOpR9i-E?1@JOy7kA71LG6E4K_SBr{ zo0gW;XBSxepf4e+DC)@*MyF+DHV_KF*^7KTcEKjuqKGS2P&+9LL^^f8uBj=1=FyL5=}bbr251{A^TUj#9+%07 zf+@|2s?bW5%?5cTEH3WZgR!;E+7`773kwB}5+k{Ob8no<6lXHdi~Gl8vRYNQnC|RH z&U~2n^M+xe^$}nB=WH}0^bz^I>C)8JZZ~nM%z!7`LBA=RF79EvvA)h19Vj)`*M9-@ zt#MveP7Vi6R1Z|z!9#~O5_rDfj9RISOK5ykZQYoZT|QH$2_mudsEqv!R(^k-d-v|i z#6*q`Er2e@GpIPF{>Wo;+ELQpbJrVE)dpN1{%}~{q`n3JLi*OHf7Pz@srY^>$qExZ zb;@qEE?T=)J&gP7;^t!Qt&#~sTH2d&Q;`BwQ`Odxzs;FVW$&?ndhP$8^RoRy|H0FF z{U|~E#|xu!E)dw0cOG@w$e65jb|~oTZA=9Pd`3ztpzghO0SyRpJG)%(VCzEvf7SL5 z&%rl4Y6lQjsjhzC6WDm%Veo4X*%=+28+t7{78JzkTY1$;H$G!&Q}4hsIY>mmVfgB* z(dQoQFGN@7s|M525#>tqVNUJ=D7rjdR zc+~7YzojW%;N3fq9Q>XhS?->*{fHLN&um?}An&vA0tTVJw$i-!;DJ)+)?@xq-7cWb zGM-b{I5{{jM;#WumiF@@fp4YbDcITw-Xd^$*m)K8rED782H)OgAiTUi*U0$g^*^BM zqEl1znM{9n9(kPy`}qxrYr+|IBKfCPRLnpyK+B;k#!5M9;&uj(yFrM5)rWv z?~S5ny?m(ynhgi09drPDMP5|khn3wE;x%$QUXoRRludS61Q~#~Pj9?mX4CQl?K>84 z(^ef6gw~_Ph!r{Y$TlP^;qJ2TZ?6hie+tdexv%WAbpaBL2rCh`&ytdo+Fs{z4}yWC z-??*g!;>f{D3^u^uABZW9vs8RvdXy!&h~wTAxR;M$0lMdYa{HyRVo9KCWHT`Q@aSQ zsJ5Z(!u?-#XZtIuWgZS01j3|5&}t|M$3t_btLN1I2AsR6g@vO|R)S0hMdX^m#ls_t zMnrRTVj|Is5qv#|fO1tKcY`kKeR1(feEO=n$z(Lks*5qn$out{|Qn^7#)C`S0Mn z)7Ugc$|eG683*WBaO3if3IrZ~-EmFYsaqPE0sB#D9f*m?dv-Znn2EL%Nb2kZC)B?s zxi{+Gy7dC_i#AqKhyh`no z;q&Zm=4#BjyUx`cp2_Zw3P8$Ix{DkL9+T|~W5+BJ@hPB{kOfIGK_$jQFh<*Ifh0T! z1tlabd<7C1$wdQweU5JiJ9H3JiZ5VMx5%+e54a5?trvk9eC8gueZR8XJ`xB5t!$En z1r}gc(6!j8G%Me*+~M61zEPRiENO1;wv0=^X)6JfKVv}DjgEXc7ar}z{c>pG`K3^4 z=U#cO1Zng!Sx21*`*@#%33B1VzFoq*P=~E-Y#cuPbzlwbpXli5jHsxC3|gxO1jxOx zbZc{+vAI5r$n?6##`evPbt=?nE%Wv3GiH9%ML-AILHj<#Sp*o+$D45K>grm#2T@$@ zBr_sd);XZrwOfx2oSg=P>VTQ+M@}|&cEBY{A=I`Cy{d3oc#{mp0;vk8k)$w0g<#GNU286Xi- ze6PUUcYrA8b%M&DcAe^!^!V0%&V8)jRbhaCxD@axU~N$sI$~kqhHpch1bE%lW4`YHybOdb;lsrNf5K~Gvv4J`Fem^x<8AT>lE*ZObn0YB^ zO%7C7ACb0wBzYgw)jF!a$EAAOdp3Wb3EovA_?(JnscOhzkhIha^*?Yh91y#DaHZ>C zS=QFWhKaY4Ke(8^OlS<&u#aF3E{VC*@}r5I+c-n8uE73x0E;8S4iE;(bFe;lKHiB^ zTVZrqoI?Djs26Yv@x_aa;4QipmV)CI9T%4cW}TU5msQ>8&${KF(;WQ#v$jtlEukPV z1OD`IMb9bj&S=!&Ey&HXrEWy%NN6Q1QYDj-szazelq4P;c@ZTg6L73s=f1v2P#vx3 z>`dCnr~FO2Dm^_NFd7XS26B*#K1^_{X25a%AV{b4Xw1Pu_ zg-cRnI`vl=5pntLfS{+4X7#~hSV2%w11u(B_V0L{VD!Z{EQSX5zV=o@c5y+M zqkYSZhtPS8fafP@6AVLPwDafh;G9_WOgCXWM&HnIY;hEe>{~E^uPC0aDA5mVVRROjuk~@7lFE5Gp>> zHAZ{b**%nRemJ&6NSq~W1Gw@t@c!)quw;_iP->r=nmXbnEuR9C%+1XuXtM_MgI`UA zeG=cHhk_^3yh@&J;D9s0%CiT5Q6`BuxL`hYi>a~quxRsSelfR|J|eBQq1p0oC7YY{9?x z1%X@SHd-gV6`hGCXaiDu9PLr^oN5O0!(*ugJ3YvjYU|GuA|jfwA7@atvU5)oFp3EX zT07`7p8UpSC5Ps;a}m|shzosvyUVqD&h%!3$$2>nwidD>GK6_ESo{2{wK_Y0aNBKR zD=^jcaTN^HneSrvi$K-TrGd!q}TX zSRy*+hiiGAW-6D>pTx!48j?)yATMn6uvjf{d@Td*?6U1Z9fNHg*;Q!w#Hh-@^kHbI z)FDCb+=m7`2Wt#)W>z&}M~1zdpf?hrfy6y}^e;NJ??m7s@w@gOj{EDcJ@jsee1&f1 z)sZL2L@EGVtN|#;z?zo>QX>r-_;w*0gOP)*l(q<9L>pE57NNDZWx=^XMwwFs_9+YC zBBdE4Dp^`uItHxmO!!fmGy9e2g45Yyja4G}RP1G)du@@wlkxFVHVHuI6Ds|dk6JRN zQuea3UG?{`C>@Sas)yHWfC|=vJ&kxJFXuNMTprjrA(R?!DZeF0BnE&hS35{%4Uk?( zKFy&-qed1Gt}Wl41RF=c@T>MpJ9ai-ym&D#aAPeVF;^H*VqnLIjxY*2=~QrU(S+t2e)z@J`9AfCJy!(5ApFi0|QZ}2W>3} zjlq6Nge(-#(#psajA`IFpR)H$$(o>H*mZ0`x>$`fIT2ipc-XHwqeJ{lZAYSHOo&JTw$+4x{l{HHwTb=1ol!B{dj;E<{U;avzv1GgE#Curm`~Bq9v~y3FKJ&SoxgtP Fe*s;_ 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 X@AT_?Wo)-2&&6K4b}|3_^*jFu32IO_ literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-32-output-3.png b/003_data.validation_files/figure-html/cell-32-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..9a06c6f257bb04cca9c62fd4aa4a74255b23afcb GIT binary patch literal 10661 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 YEoUQw)Xw3A3Xz6UYFd|zF5bNVU+BmY?EnA( literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-32-output-4.png b/003_data.validation_files/figure-html/cell-32-output-4.png new file mode 100644 index 0000000000000000000000000000000000000000..35795a3eef9ee6a9dfdbad3c89bb1e5ef8f9cff4 GIT binary patch literal 10281 zcmb_?2T)V#+izU!iio{{fCWWBno^|WDq=u-Q(6R6I+0$JV8udFs&rI(6{VL%79}De zHM9UxI)s39NGSI?uIu-|GvCa2@12_&C4rN3-tv@Rd7o%&sSz_*wI%m>7r1Z zqv5^Vwk`1gNV9x0{E%@|x#p&az3t{{;c^S5Vc~Yi0qf>qYkAb;mW!(`*6Eyxw21hb zqc(1CcU)yfMIC=%AcA$V7Nu_A763Q-^Ujs)t|%0T1@do0x>A}g3dJ9ZzH~v~D~{3Y z>$T4yVSQRF?ax04)pl*u`RnYq$EJgV_dh)5xN=V<>+$^wvGPmY(J#~=)jmBjdu7{W zG5_;tl8(-tc`JAR_&|_>$mPqquT3`{*icn(?C97=6w zp1mn^b8ZR?omOfZ8V1hJ`HIZZ6RTvxNm6Y@A{b)!=;)~6x~ATThKAZ@rQuhZ6hlKXadB};W4yO_sXR{zEL2`+ zXD4Tl(97;zUbw~5u>t49@G~@+MD01q}Q+XkZ%+I1Bi=|!EB1b)Q^Mn`)+t(!}=h+XR zy=470E}sV5k3y~7;Xen_OT-UW!!pc|r6p!w4A^;L7TaBb7Bb4!cXGvfdCT)qEB5c-|K;n~_7K8~72H^z-k#GsSQ}`qQl@MRA1N;}1IO4=pY zhVj!OVPYT}Yl6A6B7}?#1vFu4z6Cs1xeY(jTJqBmwy<+1e~p);FHo^YG$M{dA`p7r zJIsn2IoIY|wF>P!MBM4^8le(?OLqz#sfNqT%RZ1we`UVE{{A+ngw6Ar*;z`Kk?88m zh!RJc1|Cn`QQZ_NY!aT3AcE$UbxVhwKIBIAq~VMfdt5^fh?+aFyz|T}+fp^S_8&MP zTQgHkTGb$|(lL}|^j=JNz7^SF*1Xh3rK_teMjD&IXFE6A%qj2n_V(AfjGi9T-aFOo z7p!vC9BykVtrp~(m8a&I6pyPaF<Cey>hW{wwIeR z?InTjlV2U+UDwvt)&1=J2P}ZnC3z9ZH{}*&n;6t$dgA(WVj-5Mh%Ep0>(|SsYq$!1 z=Ev2RedouAOdyk>4#2fIV-mhnP*Bj0ujc8~?NG4H7ik0%_U?5iGk7#RJ3EQW&(BZ) zaCakfWwx<8*kZKl6`rlWDv(>QeX)2^{KTzWw|v%D7psGhy@c<>0Da5W*H}2V`p~ut zZ`aicYo*rq921D6@!|%Ekrf_Nb1@cUpszn#CrZlBKMw)!Uv>}KLw_tR&qZv-^rNo{ z3R&E89ya|SpU4u{DtP>UT;P`XY7)gl7zsJjV7bl8+%jqshJ1(X51SGFx{4;D3~cGe zkGEyWdQQf{g1rgmmb3f&!JkYdN(DbXkB&a<(wClonxtYrMpq1to5JVrgam6&QIB$9 zB}0hMc*zTjh%Bf}i*~E)zPTL4hqi7^$obFlp`J14=~=2FJTZ#6vI8Qf=}76IWEvE5 zw|g#xC9Yh8KT!y4BLpNljo;mTQs%+PJgFY}!1VI{E$o?+r)GPrZ%evMm+UR3I>tJ! zz4!~Z4YhFXCN$)2Nl?B+lf(G6m?=~Rm;TQ$PS|z6wTR&1|6cIfE)5-a%C0Htu48Wi z2k*{|Ku9u$l^@m2*2J~s{(ejM@iz44&6_Pg?F}RkG#|wHeUI`O{Ja~jd-?LCWbD)- zMOYGyVmVp=0jCM%eA`=#i&VwsiT92B_U}(QAZ+|VA1T=W-+qqd`CQdj-p;XNHD{ z1y7x-DLyTG>r1#Gg_>y~bdsOnzWKF^+LbHXrlxT|3ln2Y69doyZJ@1;Q;YL1hw$V; znQTZ@!a!tllX>VnMQdD=00O5%_@Bi-rsK6o}~cuM@{?$Ge^ftM-o~y z4YCSg^MuVSu0e9DX=!zgHouvN0w@IiS9Be2onc<-gET!^{7Q*a<-DP=Nzv7KS@%rc z%I4-~W1?T_Db2Wa%<8z2pr~j^ONu)8!Du=6@#J}WhmfeK7L?7hvD8?JTVM9Y%X^<4 zJ?;wq$1u-42XbG_D9_xWE>c+1v0FmprC3$e$la|xO(o6)bK_Zg?5N)6`=X2C zVGm2|vocMVwD^0|Nj^TCnZepGjg5$B&sIx@WA5f zpKx&LRe$vV2>+(539z09AGM5;b^TCW5{5t!w#J7h-+EH#=UwJjJGWYCt@VOWAWcG*HQ6($PH#D>=ew{E z`5am>^;HA88b9P!JRNDFDLvx4$Brmsc25il035`?dKbYy5@t-h>yds5j~o_d%%_#Jywm|*#E@JJ>UHM*VmcMnP@dz?8)LN?Ne?0)x$o&qm&q6G zpjQoFu=kB4u3x7+mnpJKNY%SPGS+-6bsooCP%gDiLL?h!FFg_$4eRKJ{jSYHthwmxRD!-i?H(32@DQ%>Fw<9-upq?t-?%H2GYn74gMw8{z zrXDALp1@tY4A6B@EnKco7`=A??}$-WYwYAg32qDtVIdv(ACpFSA0*euFbekMqWio0 z_8epXTYI+aXGq$tQgap48taE-QkI$hTpsRn5ss6pBzy#cur)|Pn?Ri~vS0CFgbm7R z3VyO;_Hd?^%9j)K?E{w2yVi3Z$FAa8lpdww0huc@?dKhf3m5Vlh%c_<#>Cc+gj63T zCzjSHk)Jknigoa|bV?OdT52*U&ylPezn_;}H2E;2A$~2ymMlIh<}}fNr@K!yQ3iV+ zx94V`+XNxD0>7Mfh>$eHs0nS&x9*r~_ZH|>WS3oxVakO&?-_TtkY4nrjvw@VJ1`R~ zkEd>;ii8)P|0G}#!xE$j8^pM7Ou#x6y;tDa^xe(zhS2BbUfI4J+;@Gg6z|E{iarmo zI*Bw^OWd$lU8zu$*W32PGveReGR_)K(3F#YbfjCxKPZP z=1CW6U1M{bWOEl`YfDvLJ>!C-giuSgvl@}jp!zu z$Lv1zjrqyf;pM=e-nkrZjyEk5_U17D)Hh0+l5dxii?9xEE~>~pqEt0(T~{$Ik#K*= zwT$O&%`It6HzO?5Z;`D%K+{p2V4blqt2J)IjoZ%kYB$f~vHJPGPQT?dtR_*9=->_X ziqq>dXPZ26Xg9ph zU?$HBpo zRLAvfH=*C9+jQ~EmoNJI`g|c|J?g8r!?m@wz=YYEC>x+M4TqgMdMzA!wpRGuAp z`m|r5iuTarP?_6UsG6D@9~y89$IHZ@yaRcDM_Ve>&XLr0QyO_P( zfEeaIJKTWKkCv8}L6_1w_&Y`U+OJ`0FMg`2u^XNbTtxdn-rFgY?BR!9l3#3%&)Tzsd4XB|u%LEZpH=J6if z4XypOf`ZwzgQ5#{dZwn?7S)dgWMr-j2ndu-5m{~%o%wdQ7b6ZvZw2aR+nS0Dn6l^B zlTa(#rM*rXiHc^kBaI!jwS{7}#HqeYlj=w8tv|k37lJCXf8RcvmSi*{qF{(JuEXg7 zqr2Z*haiBB%u6r@yd24gzzKk3fbI}BSKvsM`a~uR0aFHeL@Q;NT&pG^u*KFkgZ6Kr z{U|(k@liUk{TO*~mz2f?!kYK|6b%FDSvOY7F+42n4Ujv#g^4cw@?_}XHH&A@a=i*T6;)9&HS?1we9c5SKK5WXay|g*U(x2&tJ$ z;{qF3@yXv%irOw(R1`Q0w1 zCoTszu}k+Pu_nv4Oo|+IbaY-wIrXFit)}vFWoIJcTXN?Dgaf6o()T12!k`=mUYtx>JQS1af+&)ghQuxtTfip$ES?P z>)Qs<5HvxuNzXMc)fM)XGFo;%T<*bW0a3wA(jtj*e5Z@U{SEDNU~~a@WatOk7Kmn9}&$JR>6m_S^fs#TJ7hm0?iFYQ+L$ z9&i42mpk#_|7Ya-yM&_)tfhO+D!J8?#>DOUEbV7>-KjUQ7m0I`$4)rpbUeQ zXV;dlW8uh^>$5wD{nr?i5c0YPaz_ftDDF!?EHK6pg;UsSF?}7KS3dLiL`S4-TatY? zvTyMGw}>l0NJ&j)ngi1TC6u_Bh+Bx>vu96%2g4WL0SpAY|yl9ew6T zUx7qH%QK}9oCSc7q!*H`P+1TW4~U3aj^mT1`1(f{S3*ThOO75+$t=-6hL+`Z?+edp zTO3)Q#iSXTrvFGuR3ez4RdZik@un^Gy{rF)p%=3nFQhL|j4!0dTFJwAh?T=$+=}O- zM#6{b&#>3%Y;8QQO3e8zX`b>jhUNA)niPw|NiyR#rVbwr8FRId8=je9*5q;z4`l0R z8w}>qu%s9k*-w6}0GTt5QPjRx*d>i0k_l8I4~Tu9wian!IRCz&S5~TiK9<$s?BGka zJLjqIp12$_btlf4{P=|44iD$83@$x$%n_Xt?%C_~Z2jB+J7^*4^+XJN(B*gW@sJ9% znf&3U9c{E%fqQ3J%H)T=JtJ9q$BuAC&hP~cd^|>I0?=X`)ch(j$2HfA*Z3N%C-%U2 zsY3GF*}?{A#ezUjd(3%?o^1l_RGz3}t+%F2jFRw3uJS;YvGr%Nf2)j4xMPkx_2Yz> z!mj?pxKhkU9=5x|R`k+l7sl8s)#u1Vzex!ONqK~*J@QW3aeG_HF~&vp>k%_CH5WcO zTYCQ&YW~65b$09d`IJ^~N>7cytF!;CZ_>h+3aNKu9eaOx70HA=@Dcv5Z=N#i=kIFN zG{E1v;t<^tSL6ED4*+}LN;_U`YSF)AOVy^A7mtjX#ZH}xuyl_Ji_g927>uS4C_X6d zi!!2p#SP;|50(pHQ@nLj#pyrHPF$0}KoT`6_GBvB){eO0IPW;5&p02*j=SNw&7HT~ z5vvgSM-Ap-DOpxYu4b}{c!SnZ;piq<=R?eKtGuD-@xfd0gXyk2Ja;;!+ZP@%<3D-i zdZbh3ZwoT?%3WXQ1!2}Z%D+A;qi3Wgw751Zr17qfszS27c>3&_d!xeQXqR=O0npkt zI%!QE6y)~r)d3L+36s~ph70IP*tef)NKi0Ax*b%(xuGbG;K`FIK7U9ap8yK~h|j#j zYr6jv^wR%)g9|Wnc6LsVS|ApK81HZdgt8LQ;W1_Vx{OL9Ma=B@PM%!uBmAh^`iO5J zr?_u>nIn+sAYiDhzG8>2mZfUmwHxCb4pgGTQPCcay@p%0VVr zaz1(Tq)M3&N;18mKwsFnKpU)sJ$v`s%N;>c9#6BknFV5#oU8&jx`$aDLNq(T75dU&)`vxfzC;j--jD`AAwL#T113jM2_xpZ5$hp z#TtUvHuvp5M2YVEU7mejD8n z4sfMY4-KI3qsLcU36hNEkwha<6Wz$%o;E+eRRQ+Y?Z`E=C-xsTrLFvZ^jGaPje>^q z`t|GMw{G7CH>0SiI^*153?rVXU!CgzsG_U5y;y#D&|Di-Kg7v+Z>`1X%s&xI*|@Db z@bI}dFhl^1r31)91X`p(ljITM{-wB88@L_-iR?k!mBld&FbMKN`b8& zC^;7ZH@tAz?tc`&&Z5-~x!A(y5hZG*@2oOewDsJ?^_3C3o|1e}(UTD673N56WUodV zDJb8$Ak5o*@ZW%7m(?#zAO%TSe%yBQ)G2U;t|RRf%JidMMWx6K|Dmz?Kh8yH5(n(?yBDd&iH>8&71QOZ5BDypjX0BK~sek1{4gMH>) zo~Z}D9e{Q#s6BJjWL_Z=5lsM}WiCTcMH?Zj-M)R;0A|5B$Z*YISV=;0fM@t)>*Hkf z0BW^?Eb0b$uK_-Syw?I2AI|#_4dws%-0?y1HKY+e%NL`gW09Paau_7A$NJk)nHSLL zC&y|#!6&dd^vHR#N9KgAZ1=T7y9m+7R~G{yp&@+PtHlB(?b{ClQmO&i@vlH zCSbZtT}J|6zC1LbMPUAX@{ey9E{5j2j%Z>M04Z^bMAa=pbeOwVZQM2r@g#{b0#d=>5g$c-&KKYG|0+TkdHOVM8nc;hz1F zm@>5(8*&MzTdTA-&4JccQ+vv1yExekI(rOli8vIAI5m@8G`P%&9L!D0zJ3mq0A&D_ zxN!)A-GMy*@#0oB$Vle7$a@C3N)mF+D~;hP9WVhs&@A`r0IjRXW~?<;#6z`gcNaUB_Su#P{UAm zDwlvRx3OE*1U9E7;xl17?H;Eg%An@s!QIM&#LCalFXZ0oZ#OvY)mG{2iIB9=wiNY) zIObRyaG4jEgO6OVYu>OVV(!b3%(<5TS6;=;)9zwyUZwA%9n4rwUEK zQ0WTgo>PX90}u)0>RFJ?kXeN{s{Q~wD*=`%4XHt(*i%GvfQ0$1&Uc)|$th|jD(1j- zteH4PoG~oi!chL&6;JS@iOg{!XgJSKU45AZR9dY%fFp{}eWFtbgI`WT`1Okus%MEC zKD?&#_Z~Nz?zJ88X0i5e;aPR^b4LEH3^Z*$*P!5^e zO(KwJ4;>&yp5?Cr@qJ-sVFfy<|4&OCIy>%UHIjN$uOo;F-??sp( zMDra58Sk0oDM`;sQ>fm|6ou)JdkeWOKObKx39P7)4>}^Fi)0g{n3fBrVH~iE50ujr z`~UD4gBEldiGe;m%Mtp}QbKbioC<&{e_B8Qjr4$-nHj`Mfo2cvShLb+z6CLl(Je^% zrsouoW7g*}P`}QAQK5!l6)1!V0qu6+`Eft;`SWkS#4;m*5uDOa6YADbv(k`qUp5dd zCxK(S!Kz;cU%UxMROmHriN?^n&f-_RG-9PRAi522-%dTH5tCd{AVKRDfr75*;Zeln zJ0T80=L*t7AQUCRG)_rLp;*%Wd5fy1wh4p<=)(_lS}LZk0E5h8#5$uv8vWAE&` zLTGq6A9CWO=w|JnhUjyuz(Buz{;UmN35XNIXh9(%#P2sJth&c5_!=U)o`;_oLW~WN zPePM{(p*7&u?!?KY)p<9eO_t0$T3zQeGY7r4k!z4z_elPxh)~PQA_yiC3jx&Wx#P0 z{Fr)_h=HbNFy9ylVd*}A3JJGSZNx2tF61-)=^)O#*QvPAdxTqIZD|1LXcU}WkZ>8i zq7g4EsoQ|sb?Rs2G`|Vx^PAN`hNG9JX#fi}{577=vJgZ2K-We3DRQV_T3vY7c~o>|-o;+Z49Qir*(#@N^x*t3REf%t6Usdn838GvmwCng-A za&U%p+&c6~XQ1#GoKj{lg?0-s2=}qY5Ifq4_1Rd&_l%ZALG17wy3 z`rvp=$}H+Wj(Ip{u7i1f62| z_t2E%zfF62-MlRMBsh4d&(`<=2nv(X9FQsKw S{>Y&~6k0{|Qtn?j?)@*xC=|>9 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-32-output-5.png b/003_data.validation_files/figure-html/cell-32-output-5.png new file mode 100644 index 0000000000000000000000000000000000000000..dd48338bf2aae60814ab03f4c04db98ef1523f75 GIT binary patch literal 10241 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 z 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 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-34-output-1.png b/003_data.validation_files/figure-html/cell-34-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..359b7e8c4cbf734cf4ad683066513259cc7bd618 GIT binary patch literal 8273 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 literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-35-output-1.png b/003_data.validation_files/figure-html/cell-35-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d73b7987ef069cb925c15a570f35165ad8834b42 GIT binary patch literal 8632 zcmb_>XHXPfw>4%(!AB({@F+oY6p(B}1SDq|vgDj|Fo7~EGJr@1$r&XMQAI!`3Jge= zjKF|ohIn_I?)&53y7g6kU8Qu-^mOlY&faUUwayb|MHv!e8e$?MA`;o#H&uy+z%TKY{8LCHxU_mDYAub1--HFm^U0QZROPv~_T`wKDnF-OSm=%E4ZMTbP@V^IuC> zS4S679v-{DH*h;RTks4J9}k9yoN&CY<3dDq+8FtFAX6&Ciiqd}v+T`l>Yj1$b79Qtsft9TT1gVd|bN4`1t zvV%x+P6%;Zj$nomd|MSgBk2z80 z$`okn45h@f~uga_MQ()6+|fY8r(2_`)N;wLdoF zgTGAi;$Et2v$)E%LQdI84z1FGQf*Ee5$9A2F5Oh!66>bAx*H0yLb!%!v@7SQH*B~A zw((`w!&O)&t8ee_z18L{%hivIZH*Pq@miTercPV?)l^%2tWB*{J~l2gGVR1Umdsnv zXppb!L&$NZc6!V#EOJ|J@e?{l=6(4~Q}SDO`jf&VzG^2OPcBtU zT=4#sH`?)wflTlM=9b@oS?n+nan#JV^+7DhqUNrXc38DN(ZIhC1 zt;dgV*Gg=96(uDlz4r*ylT%aaSeI#bad8x_kgam_OD_CYD2<>TIlFpCxzo7o)~XdV z6O-k{r!d{Ocb{Zkf&2=TIv3ImGlRJmN}rdnUzrW*YW?N)qy7?`44B>Q8^NU5d}iNo z?+)PmOXML-BAH;~luE2|s=mHelKVR=zR#%t`6mf}$}TBskf&SH8F=8(vN#J|1Q}aG z=)|O?FPYXBhV)2iE`M72T2QkkH&o%)RpqtfJT#K6!GX)wQG4>_N!hc>j70y=C+9Ay zXQ?vl4Ses)aKXohg(ZLbbXy@&QXg~Kchk{raadn1Ls8?-ou>=f=>&08p>qR^)jP}0 zpFe-@oNA4A8}Zwa#UyyovO#srw@d9;3E6%%>a8`Y57C9Xv=b`ES>sl}cezb|CMRrd zO^GS~ER%=7%EWD9P)D!K9%s0>Oo<<-ABErMfnE0k9CM;WH1ZTgb1m_iU?us4~y?F6r`}pq8jw>t>9iY}bzSV`H zf&9X_s4zyEe*YS5+--C7bjT&GZ&b^e@bDB^#cY5G3sPR1v3Yw}cK%>$6PFh=Q^s;4%coY@4K~?7J>MCkc7HaoyiEdY(B8zrSP0g1tx%G7ijfYCs@dI-c zP2t}AyBiv{{(h~AQii9+e*{joCnhesL;zGOn{Msej*f6-_l=Z|&(6l!Y%elMB2DQX zJ<@jq#VmVrqnW-BVqM(vSS~K7`LBFl-rg~~LSydrxIy)7b=k?!krx?q&n0PSbBA`A?OI#xwq$#OoE!X z9e@_GHHPNtPLq!sXuIF~48SQ>51oT`a&yyw^m@r-m@i<__O<^sgJiCtP0xha&i>wp zR3(0SvUzTAd$IQ!tuQf}l7CB_NY{FiF;$F+OZwp8VD}qS8Ce9?Cue7~;g){7jfKj^ zVdwmvhAH@jTfbrk%~MmT=Rf}8(MjDZ&o|JfI2afb4;q|-m;+-!lX)P)w;6S3s>mrR zX|*Rv08H7LnVVY!ZXoz@{rdIGj^D0U?m@w8L7*lkCKC$__8dWquXx{gmm3=!FR!e0 z#fi8~;PG5MJUk_~eaodbv`VjduR+>s0_Gtliy&6RQ|fH30)vFPOTCcsqobqN{l!^3 zyStF|+Lu1 zzo$jn7FGKB`K>`IAPpvMKwI9%dtrCy4Ba$r(0B@&}?skLvQ;XTbM$Cve?V+^V$m0{L-2^8eDp%-SFVdmt1-jGv3Ht zd@Z69Pdf}{MTV|_eTMPYS1tnbF;Rd}F80*VGa@41XGo&|Jl9?B03wxJ`PU7_oVoODWj^ZtM~Ua?#fCML|N7(4Ao4<)r-Qg zNlf?v%ap9WXF|n1%Y5hG&sTFDuf3oZ;(MwnZpq^_wJH1YBJAi>uhFLj{TC>~Sf4h} zq34gA&TRC|Q?+ek*~oW2Ze7c-EFRP=YME*XGTl}PRq0N=fZRgBKaE>jiQBliAGhR? z()s$|#bD~Ttzq)DX%{QP9yiH;BiTd7`~m7Y(l)AaFD+(`ZT)x>R(et%?)_4-pwMMK z)cVq8;UF6?Etg|Eq9I++Mvt2>+8vN_`uK19mGQ+0fd=(|rpBFXMowE)l^touVfL|8 zPqEXl_~LkYm}Gn{UezviIybW-?-snwJDYU?|G-8Hf;~bhF8QP%oZwx+7Sq~M2`QBwu|_-B18!}ScxH1qNAhh z>25s%X2GJ>yHn7p_=n41eG(NNot2u(q?6Y(Mw)hWWo1Rp$jGRMo=Wz=Z!xC|f^5H} zrKJU}Q-Pa1_o(elV=4r0eNauDTvMa-^xNtEjw=?ak*% zj!Uv~va%|G;wz|&56(*diY@Rg*QHA`81+)yK9lFE6O}q~?LYyFc>ZdUwCnyoCmQ0T zvBCe7CJ9u%$i#FL$S5f_`cF;=sy3N8%{QZLUy9X$6fjJ(8OFL~1d-C|CYiSK>!XIt zol+`17W0#m{sm^rWmr>n{KL$<>iQbNbg%h$6i2-Md#BRZvg>s>N>mQyAm&`g#u}e|NE! z8n&|1W@V~X)N47F-fvaq$l=48zJz6joCA5V@EDfjMjOA;z8tXUyEfmamXMH;t&$R? znX9eB+G|u%K3HO-r4VyjR>EhUGvfE_h=|I(m+C3kw&n`v02-~o7AALgc6R6K3FjHs z8u)B1XxzP0V;vtEX3E(&#nM^Ecx1t-_KSagXY*`FUG~C0L@$zxW~lwbOzES zVH93%D0>(P-U9j%VRMs}nRzmQoMU-x`Rf}~gzOD)h=^b_g8|@>Bk*i{b91x3&+5z< z-BR0V7Nvw-V768xHGb9|N%!~#1QtE%g@uJH?a=iXb8z0hOOe<)frj3@dpnh ztbuOEgAlcAualRT?*ht-=1RDj_!j`neFUw$I}m0Dy3%TYZ`XUd>C#EFqt4f&6R>eG zsqil~T_5DRE}TQd&l4ptP>8&TQhW zF9_$Fy)B!{QUv1d_MM`i4z`8I#OQw04rq6EBDhoj5$&5RMt_0e|DUe^8QgzB59_@T zb#>&lv^E2zCr+qbzy5(P^o=&BZjG;3@>9cf<+k7TMbu{grvA;igw;f)&Bnq|BuGxk zx{4M+!j5O>M`Cc`QUkMQPP+k8qhI+!HwhACSHVjCq`*v>S0T#C$TiKUO{vUN+c#U&(g zN!Jeft$va55T9mi8oI$nE4lG>O>)BN;UTEr*rr$a`|?SE!4Kh|usF1p*__ zrZn)p22yfsHm6{4fPr-8`TkQ3nqmEcV-W*T*{7+xty@FycGEqvtu> z&GzWgBN6A@zh*nBTLiEQsA$a?X&u|$yLVaH*kqHFlffL=v@%b*D$G&3pwy1Qp(<|GhsG&%BrKVj+-rJ0RaKBozVgo6LWKOKsU&e zftSJpTFWUaz6=djatc0_^iSBx)$h{&htensBoPK$`6v}f$HKg}AWV)szTbMNqGUK= z-wzC^Igm*G#a7{9P-KD#L!?Zi@A4D>J%R;L=2>831Oqh!AQ7m=7!ZN7poH1GH|Y#e z?oI@^XbVF_!A8?sc;=p7L}{5D)Bg1~vXxYCoQCIh+zkUB08II`U%8nM5vla*z% zIZ6w_P!I@XyqJgLmoHy1sQ}-sK&ZiY`Z8JsnmS`$sdMRxY=YrtI& ze*U)|V_;aS@GtQGo|Or3a&E}V$`X^1LblDqJI&}|DDeM6s

amU5d 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 Xu01ATssCU*@>p4E#hdxpjqd*!yW}zQ literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-36-output-1.png b/003_data.validation_files/figure-html/cell-36-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..368d50ff31b7777a97719de42ffe73b9a24172b5 GIT binary patch literal 9715 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 Y<2t#2W1W78g8T>Srpk@n>v#PA2bUj)r2qf` literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-46-output-2.png b/003_data.validation_files/figure-html/cell-46-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..486fdcac3b1b3c9c1073cf1e5fd4c4da35002835 GIT binary patch literal 8945 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

2Ug|F zUb?!v3-wJ`B;6cSi@7a? zq9?(5&uU~LjpGH8@kn_|j&b`pWS|(B81AdQl{#|a$j9FL``^n@X5PHi2PGj`4`{tukH>Cm>3#ov z$4kdr_^T5%qgTKAJ)!N%%Vo>p15$#n>{+ zoED=Mn)|z(MSh^?Qo+s{D0j-c`|!an1x3XK8uz_+HX|4gS12hZTZgK?efvg>`i<=1 zCg6rjY#p3BVnt7b2^L7t!vI##=BT?iQf3+&RD2%3kW^Qy}RVup)!9BGGJ1!+|r zQk5hVEd;|P60nmVHBe%kj95t`uTP=I-8@!7lI!O@14?7UgP)p8lnTH1k-qpg*Ngg_ zhnwz)^bjD-$FgN)NJ5ddo;l|C{e$oU1FB&9yQf}p&a+JA#Ds)dm}x2@Y?`!@ZGphT znXX^2vSf3zndmPt3mG3D2Y5&X@@lfZGBw|o8VCfk>0)2`;lb`ej-I#XhthLM&FSjt z1%rx)Akz~P9)Y7Y-I z4?~dT(xvhD|N7CW(dY|V0#~u?p4&p-onbUClg)=Pi__p6iR(%e{Q$@}#GDv>37Z*d z>FM?>lc=&`njv*d0jLcnF#Ty!g6K6cy8qU4U03p>;P#>VJ7JZT2q3c?>+CrAxlXqo zEGRB;s9>gJn2RMIJa~nS*yE=!7{dn3r{Vi>k*W}QR{uJ^Uqq~a`=v<|B)oAgU3mjT`pv8qf3Q=>VAz4wbw4I6H6$L2}f z6clV4C`hD3EWVo-AYLBKDO<5K#`-|^A#J)LcVYc@R+`zHLMh+skcV*^_OU9cwA6}}|(Xm<{uR~fK1mU$o^36*c zvZ|_#JUqLY_x;Ni zEi7F$Bd~KoHvu+8Kn6h^iok*qV%C`~V>VR$qLuJi?`I?;UhArjij))yPft(6^XCx3e|z0pz$D?kXr!c6e;>?wVD< zIg8j`;IqQ^3_=f~Q|25icO!k{z4HfBh&p-399$ub z{Q>r0aARNrn@>y!B|md^l#fb*Zquy${1flGa}XZiuddG-VbL(17mhK{UOJ zmeb>jh7Tc-SK;QCmS7!n)6oj-1uEVcaN`hiLcwE6HFaoKH#(|)JFv;pyglwQ z8We;Qz<*<-1R#@HM*<4dD$I3{n_CGfaJ%u^vnNlV#u2-3y#`u}Sjs45KZ+JvX4ulS z3}_q6A74q4i?`d`dXbo%jDykDm02{BhN!hJJ1QQ3gc^W|&Be+{Nd?o=(a|x&hNz6d z@*C-Bp-i9v^OH@1^Mgg%Aksy%zf(4XvrdNsLEs8LU6*qzN16^YP#d7@A`G80MF$axTT)F^^HUJig?va4fF+9TSHMin220qF{LVvUw{vKCnC>HeZ=U0*s|vF92DAkk zd9I)=&};4Dh}{hQ9ofcVR>|rDyuEVmS{6tr*ou(E0RQRAHIQV5ZMApr-hrV^M4AlL zF#c=Sg+Ka(C?hTH$>Yb5fj;IkXK6PJhPWfi1*O98w30xZ3b=2BYiN0jra3skdf&;Ie|s<;7u9%9yd)U6m{>ki-NNlG?c=BNTD z1mb=Jq?k@New+sZBeeHRG`arCKN2YGBKTi0WjkX>;UMfSE4YYa#uVmxzOjg*UwCme0{kCob$5ck;@h+lJhG%_-R24cwNx?{J! zwUq+-dxAoJq=l($+8V((Q0ZO?&5hKRQo3?eON$g{4X~FPddUjA{t1kPMDXc&BqDCt zaJ)ZNa%3~{iU1LZB_z3Wg%11#74Oazz7@?Sd_^eH(?>sDAVRhm5UB_IVpDiL8xPM$ z7ymbo^GeFfY5DnzV8s=B>?eLczu|La(N4mY1?Zqn@1CERr6_pyioo;Dn?`-kZoZJC zcwgZ>x=j#tZlI%fC!Po4YEpGvG={Bwi<8yWaN|2SjUy(l)CKU;F%SU-j3FfiX$16;14<()NXpRNr5xc%%1|N_(jg$-pdwP@&^>e` zLrK?NF9-Smzx&+#efRn9JfqCaGqc~l*Is-5V!f|qrNz&lqBuoFM06G{AtFyibTk59 zzdCUY{+Gsc>B1jg8&MS-1#<%%du=OyqDR^`7AEF4CK#RTcKTM<7<03`EZi(?OxF!< zY%Hw#SXoUEzQAH`^^CRm)Cq4GN78hKPu!94+!d(c#@J-qAr( z>21w|7R_HMJsPqTayjR_k9?7S`zTxW55}sbSe?idKCLD#TxoTL}wx_a{O>#Zm8 zlAbBo@i|Amp1cv`Tom64(#{eUr!FwLt=zH zc>Ga!|9M6934@9_wEtTAR^6HXmlhPr&>mLU=xCPUx`bdl8MPTcd%}kwQT*YKT6J}G z>=6&SY%g56;1d|gx>VsdJ6abEA4$r{6n0eC)HHN<7WQpcRO_)b@bY%+ZzES&Bi|d+ zo!4T}Bid~P^U~Y9p`k&FSa2=2#C9gBt*y;!X6e^dtE9B_V*>+&;$^vu>5nr?jDz#- ztxe$fpSC|piXMj-7TjwaGg-@PBZ0S>m>y=8E&BZV=bs^wk?B$V_S4&|1D&-&w;B>+ zY-c*Uuf+(us$HU!RumEW>n*prCar59HZ+umyAYefpptJCI{qU{Jx=n&MD0Gh9vf!WzvvBBJY<#nHM`Cr&gG@THf@$PBGngoG-;Z=|Z_ z8%5w7F38B>tjc%&uX5{Ut0?9hDLFbih8k-HDBA4q&D?L69sZ&yh1@jYI~B~Inb4fZ z9eKQ55f3TYbp8@tAHBqB*mPf0Q`4wDEwsR-d-!9F7NM>T(@L99XY$u!E-(1zJ82kF_l8?WCXkcLApTfeN zm=+Y|oj@hbAmSmdX-{6=c!}0PtENfev|ITX$AJph>F(U*t?lixnVEE!CnbgxKccuy z&1NIZT{rD$P$+sH9u+}B!Rg+@tRK+=>c50w{X|4uDoBRKMyd<`?8+8CPE4g3O#A3s z!9bZ~ZWzlGn6p@2YpVja%lvbvUz6{jl-gaMaY7rlr3BGFdYka|tH@bOKE)_LTP!Ny zd|)S_^BRxEeSE3CvW3M*Y;dsc$hWgJG&HG?Gt|y)N+(9CJMUDE!Gq^s=O`IvWMqyWJzA%eP140^Y=J%Gz_cXj_%-2tF7>jyuHx;d+fsue8q43Vn%7oU z2`^3Hlp!Mdj!OpBU%z(cQS(|Qq$y`*CM2Mu?m5as_*?$Ia4XMds^wz!NeE0|;NJO_ zaN1t(Y|nir!)e~HVcJ`ulq?<9mMC>aU}tSal)&jSKlos_J6AkIEgy>#*!-Dm)D-*t z;-yQ=)mOAg(s7WBsn2lHk`Es$mfFq!`f{3;r;L`3P0mZ(aHb>U)alc~sO7lX(&O(sUL<4CTJwWtmJs%qx&;ls;#`+=#+=6LCvrb>7B$RoM8Zi)GQbgRg3l+f0G z-;t#?XLBatO`}1EdZD!I#;Gsmujg94* znflP%V+G-J-MP zj~fJ!hMENg*-W(K^oM?S=ayKFNe1b*q{!V;Wg;CLAMa_~Wyi3hp$3Gbpc-cW9}}#U zhr)!E6NRLQ&1H^DHrpGv%<2Un;;I<)#i?BtYXYe|V|KTm!Pyr%eT7A_A&fcSV(5#` zKvi#V=|kO(vFRZ##;o>1`(Xk>Q*WD9OCEuxSi?O4`DutR$wx7;vf`2|QkdxiuJOhp zrOc536+ext@5O7^n9R-RZf^dluV?HKc=6%|QqiW&-8UnxtgSCoQf7>f>Lm|be$~mI zggV4!D;{ty2qh{aBC+9EJ-@y*VcK&!|BbH=RY4W#HSZ!!zby^tAvfk23FI8F&^u2 zKT=lB4*`_?^#cO~b>>Ls40fg|?!mdeXV5M2X~+tsUQ%$GqTMF z!RpR4Z%KHiqpJ&Nh~Cl3Ni8@IfQ?D65AHh2vJ_5DO*QH(%C6cDrFI;>U`yyzg-RkXEBkuoXLmeKaP#~4m`kCi z0S{cE`rEg92n>8^@~Wbh84yJ+*T8>xc$nnUrFh7%ne?oR7IpJ-{U@`O=g-GJi*^)) z(SZW^`1rI4?JN+FO-u~fRYF<#!9PcT>y|L=LmN~M#YD-=jWI%6otaNs^DwRNHUuFK zL_T|z<$jAF`Q1E|Zg!ZJB-ABYIGSI+d_iXKPc5YR{P}aPS!(B>Y;eS-5m1+w4xoZ{ zBqk@{=Hn|7*>-YpFl>$!rQkMux3fL4`-I!9PgYH>hcftkb91v=sa?j!ix)%Qyh-t< za*{xPuc;Ybg<49Hi_e2&gq(bslmc*pe#Z$)fAYKEdXls%-6)`PhcT(f1q$t`cxm%Q z>Dk%acfRE`{85WP!Y)(EK)EAo&w*o&CjEcY^!C`5f( zUBUlPQg>w+cvi^ytUTlw9x>VfH4Q9wDLvy`9S0L@z~N+QgX`My`^<5bqw0>$!m#K| zFR%JWf6jyy2NoH2ghAO(w^`a2BBK%!-A}{<)q)VF#8nY##OSRoEp2utYoK>%O6&$I zF6mR@@F}9cCDKo7*1G=f$zvzvcVR@A8hMV8;S4v)s5hqxn4vaXI<>jmBN7B@zd+Z8 zE5lJGEO?>vha*MmY=SGi{DLjpY+^qG0@rg?kH_$=`QE!Ko2?P8x8vx0#yymy&SiJY zS0Tr;_~k-&;J==hKX=G(eX9}Nd$L70ufR}i%GLzFZ#5O0`YwIUg#Fnelaj-H6Thh5 zJe>JC388y?kN=J;vkV+;LcM3Tj-0l(wy3upgM))ZExz1g(<}Hl!?wTyHC42;D_|m( z67`nH965H35rz6XBt?taehvjgUo>Q)>$&EVHbPjAb!GYuqyT7A@87?NQUE1Yl=m;B zHY1PFnDFrMBxmyqHuTcBEwSs1V+}?fA0iMMPPOpQ*N8s3#v6BLo;rC_PExX- zveyM57%5snRWDz-@IK=1vz~W>fB)SS!l1z6F#i-*kFWr!79TOekeG)KAEUo>NA|&k z2h;e{Lh0yxs|zoN&1{7pyM_saosZ9wf`iKs{mDckiS43du?wL_7&=v@aoVf4x4 zkkd-{Guy#WhiK^NjKBPK645mnZtL-f`DS>v&6U|!sAPKuKvh*0n=sRvb(@Rpv74J) zPl;`Mf%yQ7mX_A?WV7(gmoF1{&W-I1SHg;>zPvom^*b0A3NVrOGDmA5tav*@`D(vH zILi|b?Jq~#v$V7p78Vd$kR%gh)=GFq7u|$hZoZ0mrjdJ~4fs|p5Ku`hFlI(L$S+S{ zNds<*u;iAOmXP4!cp!M8d^=V$?8ylU^w+O{QUh|T(EsF*f0q48Kp)<#1>E6c^z z^)d-b0>C)CBd<=V{J`huKz0~z-1zL|GW6x>#m4;r&z}wy+(%D4I^y2NG*3!F7k2J}zC%nMJ?D4*5vdV#v1Q&S8es1^yo^(p}~SFxE10xt8| zSqhaI3QnVh+1|q5yxt1e(&^4DR(tzZ9ekmFLl}aWkWdWn?z`;%s#c%ve%DN*nzvl0 z2p7cw)OD2Xt_AKkd7ZubYo*tG2IL|Vjq&dh@ts=kDjl zM`eVz6{W(M!0yBW z8;X|KI@}s8EiEAhS#9s{k1tCa7Z=CKccj#(K3PmeWD@uamo4m(^6t*|oI?!A_5R29 z#zFJUH*VZO)^=B$PjMIp2QNyWOw94?ekKqV)qJG;9~l9Am;L|t7!)spQ2>w`CbfA` zZ(`-yBQ(?{Nh9mb(9+U&)BJP&#|T{W9y(66w&hT9v76&Z*{j4Dbvgx?|)J2}xM#xP8@Nh40|3J{t zzS1vn9owBc!%_l(bVo1%PpmuobL|c5KpA1;-c`o*Y~30oApIavGZC%W*QX({@b%K$ zdyY9U?d9;wEzxqPW%VJO zM#<5WoO=1^d)eQALgYhWRORFqf|_!cCg(XyK0S?cr}iXGD^ttIYHDvUoIn3mpufm6 z{zjb&@Zl=stK4QL2}wz6fmKyi{zBVRGL>Y9$wB88QfZag)VdvJ#KLy9s0KvS17HqvW@ee7jBoQ@>(hNBM1OXiSkiOdvqk6Jdya#*3T|hr znyP)TT&AEy3pp@TJ6Aq7HqFR zX>vpGcQZ5Y!sq8soESWGIC*_@^RD|K$Nt5h?!@N35k9!~)144vQuBUl7Z(?k04?`z zThP6R5P7GyA@8x-*^J~EH#Ml;c5@>`L)z9R>=D4#>Y1d&=?<(innJKSprWM%{9(;9 zO#~em^{S82)Mdo|cHxM49%pF^AbJoAMcdBy=JM7OE_}*I?^*FZq{5|w6#z88q{LY9 zkMGnW$Ci#Ke%^Y3x#KRY_Wj1cz4gdh?RTC_by}V_8mNH%pHA%RQpq>z&WWqSPHCBw z?a@O3YG-+{FLH8oFO!pl3d{02m)t^6D9S+u_1@$EYV_@W!=qK>tsY_&f#Mh)8%uoi zh75FeLnwZPD(64r`pZVgsyj$EgUZv;+p7*%O?z{^_-$I1J|*C`Z6JkVTT%@g-%htC z2j=ADnDmg4kQlDb4i@F-sEq!%~8;r05<9DM=;!YV5(AyL{hpYUfuS~*1* zdtx2HTG3~Z;Bfk7XiRB+Vg*G<*PzGV9Rjsm4F?-sySs(koqTykQ`Vn?a}>5N=~1K+ zE?S^tY0K+dl!%B(-^vynm~4VBMW|?@k2n)91kQc@{6Y!~3!#Q00MKyfjPccIq5ESK zIjAMbxzN|IV_|b#H)jhGasu!b8WS^@cHV-x*kwHj>R3{-^#rM-8*=spoC^fE=7n9C z8o3u27UaNgICbij#x({4S0uN2$NW%LzV(DO;xYjNo9-_!WzniIFc z$ZpzSrkX4h^B6#Y@s3d+GnLcijq*)GX-}zr79z_Ac2)`zDpRpZ;75O_BpCn$lGA<1 zMO0k8x9zU?pv1^G|IqO8XUx3?rn%9&JD;MV%%?&nU7Vk9nr=@=tcS*Tyb4gr3JZp~ zIS6_nfVptdh%wl57kBU0s|n(tkzi(wH%2D&T8~e{q~F3@2qbv2ib!NWxqh+;0^5v$2!dBclxEI z&{yeX&u={!23nE81{5)}1Pm2&&tqrV&v;G{YfL~;zJZnFm#&=k*oHn-(z2$V=61yC z)2H+8=QM3+d)n2&Do6soZv-Ax=7~e055q{g5NeL_Ba#^zwSRW1MvKAd)_Z;R0q6Idq zQlZ(CvlJW>P&Kh{ge*+P>O+mdM~QYECvX3ts=%z4*96Xto&e6=kVF~Ou;9*`?pdmP zDzw3{YuAv1z-7`EdrLe(0=qIdkOht*VgO&RBLK; zuF_ugM2ZNq95kbqAfE5I1h!hI8LYAP_rk{!>!+o0T>*@uqsNZ*4d}1ryz(9=<#%5TJ;SLt>ERfgIz{> z&*Am@VQ=YoJntQs#(^h3FfU&YvzzPB08W((xa{NWJHpN3V_NNVna_QvY{;QQRipRU<1d2_2M@;; zoVvx8mCR4I7OWptn2?=FdKhsNZPXn1@*LH@6i^7Vz{D>scCkSx#ee;9DP(d6 zZ2i}yOxU#zKr@yX>=*E7=2uv4-%O%AJ`?5^{2kbp;#(D2X2l^j8wM}~>vp6r00~k(;$VmhAsecU3 zdd9Ch*4=jGCr_S)v!DPjQG0=@IG*477Sm!m+80kFYzr(oCn z8yqpfWt6+SyZ<#_d4T&?bGN0)Qvp<$P5X*0kroedO~eyI28rY{Z2`QG;J2v7;cz9p zo6N972%hIh^B!^51RjNG|DmBFKG%&r@We(5gv^O(=Ku)YMiuo=?8vFGN@N zvy8yWL{^W?0@@MN&@^NXpBo1Fha9k7`Kd}nOFLad?XI{q-k1+t+soy49EAZ|;k30- zlTibkgiRg6#S_l?$= zQNR^of-?|AXtlK;r*;_}maycm$Kg7CSu0Y2#L4N3q$**!Hr1f1F!ccC) zRhfWIx9R9=-jZ$600p80kMa`jL&Q=DiHXSqH>rGMIvsjOc?Co3he0-keQ92O&z{|8XKz_yy+arlh@e4$Ng29Hd6pw$ zGcSsfN&tDZF{8EXq`sLP?IZ~h&<5@>s@r{G0JiMcXs`_8YIIyF$yCi16L4N(TJhZ_ z@MKmFV+9UadI4gkL)OiJlb?&40s{jvXuQsl-voRv9B@+yr$h)-yOhtDv`*5`+hgEM9cK&#;5Qie)}(}L6(FflR! z6KC3$wb}tKd|U^B%cKDZf}_<6>6dRi^LTq9(48rK?*4&A%-Hn$hOiBxj~9%8wN+Uv zA-6Kv>QvAgNSgp`glZ?%0cL2ps8zTWL$f>$_~7(dxK;=B2ODVIg0;zLoX2kLYmGip zV8J0#Q5m(h63_`(vf&98v#bdX{omY+urE;#;z{&BxXmHspBo1DemeHPy)Z+gXP`gK z*%#jd8bTl@BqU+4?Q{pMN?6s#uc?u?Wg5|gm}oFTJ8Q#nswEL=se{|JwzkwTmtSaYg&mDk3gC-H|)Qc_Z*uYX@ids13ZR#rwr zMU@#6LV}iuI}%W-h)0jFQDOG}-LYorcVLb!=Wqu+wu0=%U| zgZya&0?Yv_qPn`8fsRfb>b3%qT}VfmpIJEE`ftNrM9>IIEvH`X z`SQj3+Z`KV5P-#aA4@__oduAV3gm3MIo>;9^9ESm?;Mg7TOZiKqx6V44Wu>q5c>T zetJ&9V-btoOoF(rz;$<%V`HyFTdvlGtCY#$;NBODD-k@Fabo@yi5?zA$XAi>6OcC~ z-{D?`NyL5y>}!W;7Z(>}x^wgq`}yh9SQNv}n}1&AGLiK@M>z_b9i&6JaoNGV6eXS2 z2^o{;-z`FuFCF+b;>CcEaEqFnn$xsLFQ{Fp?jvljy%|T>NXsr@XWk zZB8JfC;0b0KpxI-fn1|fKYsl9;#R5#^cZfU5vJ6e>2v$V{#85{<)Lv06zUP^i%<}7 zeSIqG>J(nulhCvT{8ENsalUe=qxIw*-JdzZ5=vnGj~`*xI;oSgjQ*cK-G{RRrd+qF z`0vELpZGLerHeh@4_YWZ8lPQGA5>e9)~7?Y6!}yHq=*Hi7ZIdL5m6u_y-Anei&P2C7X=gqF@Q+#y-BYDq$2{- zdyx)-AicxCkDt8r&HQ)ny>l~zIVL$L`|M}$wbxot-pNXf6A@An5)cp&p(Gy36A+vX zfn&Qfr{Ldh^7CZy#Ao;TnVo`_p`D|SjRAp_j-9o+m7TeX?sW$P8(R}A%e!nmY=X^c8kV&a&-6Dw__0SKwRc#21X=Dx9ye8M@i^m?d0DmA z(~>hj&V#j);a|t^o{$Y7@H+Ll=epcY9dn5@H{K`?Z@*5;r^S#2F#R>!#%C`*k6pqp zDRj$>veAsXWi@e}7loL9KX|KJx{n?Ghl0kZ`RLeNP6J5-^5A_x&iU^nf+`)7kfV=Z zh%Y|>=Vfd1I)guluWA_Bj{iBP5_@s=&*2!y?@JTW($kCI4n%nq(-ivEH8d~_2_2+m z2Zx3-1~%#QkY2r-nxogCwO-)1`0Hm4XXw*!O-(s|e$@AsTf(@_eig8Dz)Ro1+YO+R z%l`hNzJ-AT$<1NM=$kihPR`AxDrc&hRJ}SD#$%=RI@4)wR?fiCFzw5iFJF7CYtxj{ zv-)o?7En>b+19sA$LEpDWS!J@S@y)2;@CXBy>ad0G)fW@Z+(1y3k;e`u{-nWVf^;< zN~$w?Z9;j@?#KlV3>Y~%<%>qpI3?8y53KX%x0aS1?1^;c%npx}=ct&*#U4GH{T_PP z#?jG{<6(maQ{i2s))drbw}HRl>so8st>FpPCVW`Fx4*9>D;x9b6+xL^Vq&6-MP!mx zxK@E#cU?_QyhygTg2Juz?lgGqTW4pUNN<{NdhcmC*YZ(*9Xtit{TdUo#}94CRp-(c znD=+!u}%6NL5vD(__C!m*WHbkwKc^L*97x*YP|S+w+-5+)^WY*D%o0?gclR_P5PXg zU1i1h!tYtgXKP`R+|AA!W0&hG3tD&W+oo)1S{a#{B`pREgOih!)$)yFD_nP(*x6+| zwuPF`k+OVotv|;;H&gM={a`gZI5IL5&USkFayHzmBDG*<<)rroYWar`JzQK|NJvSO zuHH3l`x=Cwd)QUARwU4v4s+Q(6QZfA)Lpm2R~fa zohTW?KLZckYhoc;8=G7K0fDsvvuwsYcjVNIEHitzFXL`0y@6s4s6I5{~(u*PJFVuH%Q*r>3R` z3N6AN7W!h39X~aj({Qb`JzhLGBqX_L)UB+?j76*bnUazca(xJZgq)lqy;}{Z;aeA1 zTl;7q?^xLx!DpLq*g|2Tub+~XBzD*EdrAY(THa3WhNQOpegP7cu&}V;a_wcPqh3m@ z^4P7dms2w{%=hl~SRQnxDs-1S*}}=Q&?(v6&-N4uqceSI3& z!ZVt&{!&9DVxYh*xxBo5^!?QCQf2So$4`@xkmyt1ciFPev`tS-3;O&yrNnmT3Ffv` zSi%iauh}{>ZADlu%hI_demw`;LT&VPsF59hh|gjmA5}DD<4ZgD)0;+lcVltA_Oc9v zu<)p*n=dKrTE9_rzk{fHrgBT zu$_@^3B4>&z>;m`0gJyr7+P4=SJf}*ZhH}Ngq0PWGTYnI5yriS@!FMcxzAX3pkpam zq#@dvoZqneO9qQx?+~YPO}I=iZH(*5d?G2?nW~U%H|n}M2Q8KpJ_rlv+iKOD70JZR zOqrpwv^>#ZKm9#at=Dq2!ZmWH4GNrICQ1>a=_)W&k%|`5bU)l3rS`eO#FRE-J3KVB z;8WJIy(F=-INYjI17|C#s;c4~JD@pKGnKE9kq!DC=00ObLFz(iBcYDJj-P-4DenJ9 z^2&~U6NUBpZpl2umX2!AbAUs9tm=i|yLB{k?&FI^PZMA3(mvc#v7hUB49g_Hi61U7 zZjVE2*EBcd((2cmhpQ{QWXmeuef!O`?Ds;5X^@LQ|A35|D!R3Weg%x8yu2=tmb%$H zfU>5+!NJ(Vi?`n$Alj*!5De=g(v6{V0<+N1SEq>gs&ny^}LEoHnRa zAOq+W^}f*Ww>VfNgCV(km2qx{x*AfFAFiT)-)Eq(sa1g z9-DO%;utIXJ^ljLDi3!n3-I!q1*X9XzJt={Bju|19TvV|+1c278fe@zpso+5+4=^y zwzecni;LAL^ZGO1yg8BiEa#!PKUI$3Qh%N}6p?+@VW*66Kh~-zBNSRPKF_F4OIcw3 zj{AYj;Ha05@xk6U(&f;atSFziZv*~mX?8!PxachYlXVT%F3Taabn`)%-63!$gVsnb#Zl_nwW_1>+2g` zu!sl_PUJT0Nr7Sw<1)dRnwoN1jR?S!m$V)fa^o6afY{`$NoM|weythB^qrC!~DsUC-Uaz8OqsOnKHuritam|(dK1k`}_O$ zhx?mmBjrvo{C)iWd+4KG;yOAye6waG%wdWuYH3C7Y%Hdu0&l0nA9})%$8KXm6*_t* zSBMyHp1}DxL80B>ZgcO+HE7N^?PkJmPlu;vWhuXWS&V>8SdB|9{H!FT(%7%b=$DJdm1 zy412_+Ym4(H6bCPb=(Hv3jie*>3XBKD5Xb_-WawZ>Ax?)#b z?{l7?$n|YD%u_Y%$!JH4%xq_EZe@L4NleVEqqB2y8oEwqrZut?mtDz5Oib)Y#V5~> zUBi^x&FS*AeeC0R#Ao*D1**k> zGc*D#fP9>Q;77_;uULg-X+{>7rTP1K6tE=nbwn`4Iuo3(3wdBbUwAwD?Kf&7`xma4le}aIh%4Q&L__gC4BGaY)3sZ%=|heR_g<0%26P`O4SX5M$ zUSpCEuttjlB52y5YY@rG$?)?JlQ!;RA@!wAHR()Z^G{eVlZ_B|#A`&_G9EGQVz#bi z84k9Vk4phZm;XBHH|O*{4RHaAtkq-0#=!8S_T6Q6 zoQ61`hQ`Pjo!4IHuf~1(0-XCc;91ObrD3a5fXy;}s%#|jLkEC<5spQiAN4GRlH zYw|EKG;YXNcuiZs*j}6KobSmDCuMo|<6p~v7NW|YotCzC1EzFHlYTDtaAVMF3WrPY zPFG16|8Q;P*RLNycM)PsM9r`G_3KwtKuq-dd}4uF?||lJuf?6Gw*yI8)e?TzcsCCY zssr3~e+y>L{$^xdTr6Px<9bU3pF)i{aV67{Od(*~=u(iG^CZ*y5hdtMa`|$+j}IZy zHGyZaM4c+yu8F|Mh^}%z0thIXw9n1W<+7QS*xz4r?;ZR4n%nR@`ThjWVe$ADMfuE1 zf1Z(&mX_t_pF|L747|U3m+N^I!D9eU4h~tEADwz11e4e_OH&{+G`?hpgqm7&MtTxt zjp^EKyJ=^VpJ7W_B7|TuT)OTvVfJf$WuZTBYH7*J8JeRsHUt@i@OUMb4H)9E#LUFR zWih~IztATKpoL^(17_n)>lEPB;3yE{mDN=R6O*|s4ZUM^Q~CK^P*MF_0Bb~8+J9e( zfC~*Db68523QwA94gtVX9VmVg4`tU4yg*4sMSF!GkHJDqo-M!T|Zij_ugR8%on3(Lge(8kNb&lQtM-ZxH!9DNH#(z+J_ADjxzT-R$ zoN}i70qh|)_e0=5?8d5&4erLp-Mm6d$^_Z^`SYg=H}9VytDLgSSA6O}&}0j_?#w2I zTXqD>2&Dp33aQiMJYQoy`39r|E(?gOu>d0@ijR-aK1y3li_P8L9c6&oqf(_nE@bVQ zu@t63{Z~YakvBf;!m$U(zbHP-Uu{J=QeZUAIyWjUElpld?qghB94MZ-d20%8@d`gFDEUF*>eSm&O-e47E3+o=2D{^JHxcC8HP1b)S5pAuqXt~)t9YiIro_vi>12qG3X zD-W?A9v(0a^?0=8(V-AT=c^T%(pgzq*)I+#EnzoD=(4wQh2*=NOTE;N zLpNk(WbEg=P)<%xD(iQ7v8-M?8hsR6_=QBI7stF*wC3i|j6MBC=$kG|@PmLQx$V$# zcZQ#mA|A%_EJE(3rTwGac1%K_&Zxg+Q7?Q744hbSE#MQYdJ+%;c{ew=owZJxb*sY- zDI7qwW{K? z{0UkMI>GcXejvQR76=ktlloLv)zytn9q}5`HR;_{Pg!r=2`@uFJ@h*_>DxiHZ^W^9lnqvjQ-b%vP`ZbfB%EM?W0w z^j0zn32B|aK=lJCF1KF&c~urtU{8_|M>nzXUJQ(+ND!qXg29^${qa4S>Vt&M7!oov zN2Liz^o#zMMVD|R=nzXxF)cu~%?bOPGO{$2XXjrFh-fxmJcB8(vzNK- z=M`C>eR<$Z#;$BTrkGDWP zCDBQKnyoy*RdTuQy@c7}dayl1!Ecvx4Ly6q9@is zB_cQz5@;8PN)#x0EW3bjyDI59qSem>l7UWctf{H#myG{-UHm8mt^xEZ=lFiF#h;wO zD;Hk=u(m(3&Z$#q2J1vgS9e^=cTk^PY+}pn&nSu^1w#OkQ(jRqNB~qewRHS+qa#ZF zh>ZRB*4ghYd-D|(mp}jd*JCj;u!IzHa&iVr?bGjuG;kY&&ZGcrsIIQo{|zC8WfNXH z4DdCvv9T*FEAod2`=D9fdQY4S`3xlkGnGzTTN`X6c{sBZB438%`%5>5U%D8+eE&Njg7u|I&cF6>196E zVo%IKaSQG)s^rHE~c_Slavd=NJ2OL}3ssfcXTXIr7S1S$C3UqLqs*hx4C*^-%lJ2J#

2Ug|F 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 H_kI5hkEh>M literal 0 HcmV?d00001 diff --git a/003_data.validation_files/figure-html/cell-49-output-2.png b/003_data.validation_files/figure-html/cell-49-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..0810896e57e72c2a594248e397e291bedb36244e GIT binary patch literal 10041 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

e%OJ=SgB$&1@^mHR6qpjfYpAKS0sQ`Hlheh=_?z z4wr1ai_ES9DttTHKYDWPJQ44{%mJAA#dK>7MYd}0TY)n*Vm3L6iSPLV6)4Ed->;aE z5!hCdg=FA^$>{~yg_S!@Jn$ha)tAn$ENj<~CEt+p|-ZqBu-{Jn+ z#>+t$850zAyZlR3RJqVEGC_n#rvN-+W?{L9%pvm^PQE-LggK!ELM~Hc#CC1KPHq5v z9M>mN3pH8lCDw63)>Nj?oD8p)>(|uLcXh0WW0(iW7u_5Yok-2wfq$zueD#@PVd$ayVa6I>R~fNC|D?|o#E>T&vC zySoj$gZWqvh*~)o3}P_0M5bNvUk}Ctky|3?^gY!8Gd%#D48vu4Xc=2DNS=E}qMH%6 zE90vlwi1FoA%YyX6#ww@cT#8a!!Q3yhyK457rg)WA&sxgxL;!4M)36veldwJ9OY68 zj#R52z}(P?bJ+0&8ZIKys8NC-2pY8VXtn2(V0Gn>2R?kBAjaSK+FPH3LAwGpGfZoJ zeLb0e|FbF1Z`XbQ0Sa3#J3IsdzKkgb*rf%ECGyY$6p~Gte5nVsGBGKF>N($=%S=c} z2(uJMR#qAGrOTJuP%zwj)oAqAT8;jPZQff=0{lh>*wgI^`3T@e3ijbz{nXM@F0>o7 z<)JdrZ7?IQGgP3XFo8q?y%wDU+$-bZ(g0G+#wRAGKslUS`yqn+3^u@Kd0_krHBk5o5>;OPkq;A%)rK#RUaM3f4Zv&o1PJlEo8DKGzumJx<%ppz2#NB($TW{93mr#uCU z1=7KghfFX>P2tR-#YWPC3YrCqqj_IJ65M|aNmprk7T`R~os$wqqhFJ}mpfh%k!oE+AVtx5fe_bpYI_k&kR1KQnnIa;kHJco}T2F(Vv-dcmSAF4-52%}OOf}vrhY91byYhz<#w zJ2{_qtghP}9m3=R;)cQeR5eFE3HTO52GAdCYcX~c5(st&)`b+I)X&o2A27NR{w^OY zYU+1Cvi`FBJzZVhXsDK-gQ?kVY-|we8k%xAEux;oGaQHl4Hy&Q;UGdwu(7eBQ-BLw zfV7Ml1R3Kq3JFyxPVm4yO?e&}BO`~rKVYKp@bJ{<&wqnQSonovnUZsG*t$m?-}RF$ z(jPheA7@}c?5KR!SD#<#DN||=F7&%!e1xK5QbU`Wkd#jwSDg!&*hh`0r1ksa_O!tnQtGynUkdR+lDGat!58UN5;CwCqE#bZp{BMII zb^6e`w4)yhmhmSG@p)+z<=^3cil*1~{{7J{;%nb`_+KbM|F7q@zHZ@u$;p{tKF!{} Td+7IdRDrr9dpqye{m1_U4wV5h literal 0 HcmV?d00001 diff --git a/004_data.preparation_files/figure-html/cell-43-output-1.png b/004_data.preparation_files/figure-html/cell-43-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..aaeb746c112531f562de1c8c52b57dfb5d1e7597 GIT binary patch literal 10395 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 JoU8YK|35_%@ml}@ literal 0 HcmV?d00001 diff --git a/004_data.preparation_files/figure-html/cell-43-output-3.png b/004_data.preparation_files/figure-html/cell-43-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..a6e67dba892ecce4a8398215da95f683303c2206 GIT binary patch literal 9306 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 LMoH!0HhB6UI#<5^ literal 0 HcmV?d00001 diff --git a/004_data.preparation_files/figure-html/cell-43-output-4.png b/004_data.preparation_files/figure-html/cell-43-output-4.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5a5e0aeb0f3fbade41028c5e220d7abda4a8c0 GIT binary patch literal 9014 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 dH-4#(+kjEO* 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ⅈ?myW`_8(JAnt6i;DAWWa2AJTb>vtG=^?4YZ4*%;&I z1FjcK;Inu>b;Q?c3EDaS$G$l{h;j6+*QmUe%>aemg;5%DwQN`skW5Q9$h$ZSJ8peK zB5&Cq26n-1LH8Q{SAHoCI$GAV*#zIF#D&FP5l}J;2&{CaM4uBJuL323^iVeUM^F;D z<$_d{#3eLV07(J5u6YRctY=jPJH)bCx92O#fpyd8_I;rGbIzG^s{j+p(}PRw?oOVt zqv>vifr7z);3oh65`OvBYZ(eeh0?BAXm0>>Ount3sAEPD%3A_7(Hk%Y4mNb$#?z~! zhaURHGf^`;1+xTuN5vK?H!E(u^?Hi5^5*>7cTtuZl`k>Wm)ZZHcOSO}gRD0T5j< zQzh6)J6dS3BB+QAd$HGcF_ahf0K z*jx8RtW@z_lnKz^XJC=mel(8aAT*K4vL(Bskx}SPtT3O3}iacXpim{+1qyi4`pv1*YyAX`=f|M!I6r>HU*>< z>DXYB3I?TM(FjU+4iF?{A}uK~KomqJq*GExx6&}WYjmII@csUL&-tD2x&6-hPlUbp zdcNX%Uh%l@S3hgn!TYyrvTVYl7rqZVAqt#vVz;&3f*2#Q(-yZRUAvR{K@EuGIWH`4 zvNGV73vxnRdbG!DvT7Fk4+HWf40No|}O#qiQ8kADFMBzqA`XU&^F{#|xOG+wC?NP zd|DW%*vWoq6(%P#O;0>B=uBJHy+Xr$K^Rn50B0!aXlZCDHy{M6pwOkI(Z_y+X)nf<8{q^}IKNR=Amjirn|U5bS;JXnxEQ-qcp{YE=Z=OUNs_KnLNsov`d;iU2TBjVSV4T4^GX&Af**hp*qJWtu{r zHe(uC|2V0gaMt9jrF%!)ijsr6oNZQ~*5QS_w^@^=qdUqYV7~m44NrL!R^HU+@*Cxi z5Sw`h_(Jx?1H|jGkPemA%e+UZdNc`}}nDhV@sYXr3cbo1igkhHA&ZZSGVJz)e7uu@+M{Jjqsm1IauvEhR0 zXUeo!En&==xJuJE80~PO13Agvu3&POSItd6QQvQ zLko`2Q|@zOn^NI+j?MdKN4g!)iZr8D--bqz$omPAt!@*p9Mw{MCi%LMuZPXhe|d8Q7Ph zd{>FCYPVSO>4eIJO%7Cj_tQ~XX;rQs3WqBGSFaySbUjBlj&CvZt4K&fQ|Y)u$Rqi- zDB@SXpR0EqO_GE=>nJY4zW4J@|B5*c6+7_yT{p}mpw2&NsgxNscDuRRHSA_cG$h1l zvU>W?TKlH=fRmGJzX;65(pb~_Wls1g%Eoa(C7KucG*4bC2}q9qyBZHjbp--M%E5IW zo{moL&o+zsJ!7xQp)!Cq05a`f9QUJYmD#T|GHQ%-ae?N=FXojgPc;xDcd%-ez60Es zBp|D>k-UcyFlu&v2FL+L{8^>6=nURTf3A=)@`iz6^0XjJ;?+*{=0rnlRiRdc0zaDt zWTYuzM(<}%WDvS(ms= zO}9_kF_`uVqILa_y>0z7ezqz7T$7=fi>IP}ezUnQVGS*jYA*(C1U5@oU}JeeHfXn$ zc*EPLr9X8W8Pn=c)yfXikOTmhsN7y17ql8gt^@XmdYa1ZQm4fgf)CAm3}{ksY-;K{ zYHV!m+=_TuG@n_z0=Pv8>HSd}TLAkR>rlM>3$%T&R#WlUD&r~3cg8gobaB})xCU|B z&9EZ=yVs$tFU;>jZQ(*DOfZ?a5lj?2H zYxbG028MFG{7Ee{73+fRQ4c$&3JBYHr-i9y+Oey|4j9$ZfdXxm(T~b2BQyvm-Hn)z2orLi36G2S)El|&ivaL4Z_X2&viEj zUb1E|74yR!YSueb6K6dH#l*3v%1VWEq|-R;+SiOcgY(gk%f`nEo*1KOta_SqACwVd zRvt?pj2;GR{4*n$<3~mpnX**MF*(tTmj(Qy@h{h2`^)!AY^YYPPW%`Rr6Kj{0~ihH zJj{CwB?Fa{WWY!gXd@MVK$|@6(cxCb>h^dDd*r>*qVeDwK!`YTC4pb*10c940Af++ z5m+DYdcF)YvDcGp+U27;{90LCWLpE|ptlFc+eYLiQnAxyDN?%>dQg$iM_S z;=7cJzK|wl-`O|&KG=P-U1PDbgX3sg2zijpgQ|UD=pf=O3H0pYz!l9H<1GVF7Vc}; z3;N^S%`>q-ycDd{fs% zs7J8lehm!HP$W8g*a&19gPVBW8ouvDIil+X8~edD3=i9>uUgkGMKfaeZG4{xQRbU= zohH$80xt=7dfxy15R|}9gC4fJYbgL;l=y1%S^w6MHPLBhoAmu@?5zl_vspF&Y7Qr_*0@lgDYDrXpx~t zpfAe%QC9(o%$vo5Lc_r#Te8h1=Rey;cTT$s!#Qjd~DE<4$E+K#86O-e5)&+D0X3)#Tw@>vj8lrQjEX}z{;R3+X4tS z(~4yPK_ekE>WILaS{03+9<-@B_rU++B_TuOa9O{3oOtbQ+xYVL;q>SQ43g+F{WE1k zA4Iq^&W9$Gqf@KcG@nV4mPLqk+N3RECbi+p@;TVp?}`P-7g_gVrJW+MqRBp+x2ZJw zBGBU5+ubm^tz=NXG`B6SBVH0Kt#e6MRYgoe?$=1+HFPs!N|=vRq2JIC3KNu#KBXgV z`UlKS?1N}UXdpOTzVD&_Si1(@fRR$^q*7acLl^8-eZfKza=YiDSUIi}My#PT10hs$ z<*Q(|JO$RR+s@h;3*v-T@5f2n&&fe!6iW62%E}_=AeqUZn^IA|--Z1{e0WqnY*t=X z+%SfA%;}YFsDFWtX-zX`1hFE4GHE3#i|%=5b>a4InKJg>V;m)M!4Wp2!{dPP>FV)D zk~P|o2|MGderL9HLouyYVO-!nkyUhuS+t8Q)~cuG)<$f_-tj;YD7!XwiRN z1zOA((|j4Kd#k4>_MOkOKl{`Ajp5%~7@&tamdM^2Jt-Mja($T1L5~-vo8G+*tx5G0 z46j5e>Bv31|5c@c^pIHxSn7> zw&sf4yv;0R#*j2`r8==cy*?#81kw$x%@4)ccX(LZ^04ky1Uk{$7>W zNQzan}DYdg!$~(I>W!E>`HpS=Y@4|M&0dso@fgKzqU2HSBqGa1r3Z zB%BuB0>cO#rRwOzvb9!uwy^d?pcdk^Vt$q!QTz7`>bX?8ofKz4HMtIG6>Ntbdqx4} zt?q#${0$)Z86NCzc+HLg8qxlOv2+cvxc(o6jXwf*5~=D6_*5yMS%hCw|H;sbKHO^a zJQTLN_H5K5u`RKViL}O~cDhn_2f#Db-``%nC~gJY-C7PwS5Ny0v@R|yRS@zn>D5|> z?cZ4*Z@kDMAFW4zZsVm7y#V(Kl? z8n9rsCr_|IMr7*g38WY#>>13d*WkF4Zra6}6WHIc3HVPYM`PYf!G9@Eq{2H8Bbk_( z$UJ-YVRH+3WEzhj=QI`pd}4csmUzntX0S-atMv!XF@ofvc6)u;W6v_)o!9_ALdk3R zzsguHC0+UVVM%0@%ZSw?W3VcoynqHUCXzNp?cu}shyM?<5hF9D<7WgI9y)*`Re11# z4)`~D6;B>L0z#?5m@S~F!QUtx^zPAhI|ra?p9C!dnT*5_1>TUziU&X%0FqhOK>#^1 z+ytBcAxi1MNX3?8{0<8DOwd>bO?kGSV-Y9?VI@uU`hg0~lcjV~M zd11JmMfz|xB;PKxbV&k)CZ00j$^l4e2nj3)d>RsOOCgB)4QaiA+G*P*SpCndrADYv zN&n${t#UjRxMx701hMGL;pp6uv-T`LQHqdcNC}X7_g(3)MS<=`kw^0fm-QltM~E3e zC?C9*`h5HvdrUmIbqALGmNnq>u>k{TpA77kTtOQZcr#=|kMmUZo0#LnkW5iBvv~XQ zuhe?M)^&vya_ubX4@vgtTD-F1PS^IarKGAX4_a>b@RD+Rp|4G*Ji_K5bDCr=6lKqlJ|GT>Mn-Bi7d(U2^r@N+9@AdAlc?CbH z)pLoF7IdYa9~gQ;qnF3eH3bc@n%e*C*|1J%{k6)#F1|TS@y4C#eS8VuLjGOJKSv^+ z;dwj1<7J-Op&;2!ck{omi%e?WS;l`?^3Nq=<+^`-fypMqxvqk4zGMC+xJ0CuQonx; z?!OC>{qxt(hN_y-E1LXomS^y5jhDaY?RD?S+Dgfl=#(WPX^$57IE4hgW)BqeQCABlb5bv=& zi#%BG`k`Ot?GP({FsoVwfO;g+B#EmD%TcWLA&{FskxjYqiglA7Rwg$7hnk~^Q%#8(5L zvrw{Lz;Fct|H?`Y%{V|eHeXW*oE!;)dN8#hJ(lCmI4Sf;i7S)tp@oipK$RR|>D2|XkYKdH zelIQqEh4Zp)XnP8o|!6DOdlCE#-lMp;FLoTd&=FMuS@l{+aJAZFKzPp5pm4=ll^%m zQA$>qwzQ5@Io21f>(fz&X8yIPY1l}b@XrB|l78{`%~h?B-st=xA@{#qW3+%O22(6} zfIGtS05nx~1j`?$qkv3_Sn;ROW?PwbaGi?BN z^8^`)Lima&=#N2v$ymfY5;!5&JX5yNYRG1HHVvkoKRA(!UpUw@?S09}y0XZJE3Wqo{k5v>%_?xeC#R)-rS}Od zcbZyC?S0SE(;uT8Wxd!F|B&DSC}P^`Ujst5L(c><)n*g-n~v`#ErZdXyDYmj^Is!Z zl%&CCJ$4e9&!GSMdiUokNn!lTe+`{`eRL7d*Y9JlfP&Zn_p1b}1Dv*`_pZrZ+*hnml9LvWHvMN2-v78;SGe_ofjp^z%PTwn zn4oMy8Z=r={(&@3S} z3v6|(tNyxs``FVu!O+^!x#RWN_JYTsXT}DA9~=X~LvwR;0>HD;1^`zQPMEwaOQ-Y# zV2}O+4Ef;0gFQol_}&JL5r2Rz9qThr{M{)<0?7)$RN8emH8qXb*sf<{dV0K<#)PU) zQ~sKwya5O>Bv&gQWlw^ylU0&9y6P$@ioy{ONq{(=YO=4TQzUpEZFzQ8(4Z!02OYYU zNnH8|dU_#`Gla&XqM|+mu{_`3rNSo!OhvB|eI&z#Q20WF~Cl$Nrfsf}mvOgv6 zHK~L{Um^i-;bGbJ(NV{-!4=Mh-;is%uQq;r1w;-V0T_Kmu08;SlAxs>6`r0Xm#uwC z$G$}rdAL1pyWXKV{`FgCHP~kT0q{JC*BlVrz^-(EcjW7%Z+1~33Wp*;kDpK5%4h5m zmzQhW>5`lHN~xz4oNcc<5})$cE#XYz`S|KD({yBc7_y% zplT5EtbmlUIaOS#!>l(*i~SaN(*`X z2W-skxyGt_Rzu9{sY+F!qjk@IW+X9cN$Bu#d`L+6J<5r@|C-l`#>7H{@4;$mDhc&9 z3@1pTA=^zr@h~# zORm-X{ns7`!fqkr=YP#+Yxh%+I*n|7|7KvjM7P|HjU}47o3C4>Dt>SISL=4Ci99nZ7uu|Jn!c;df zypkBz|JkDr@?vh}*s1o4sHQ4wL(P+r;KL6~i(duL!5cc*g&`*y&^N_BH< z>3)iHk)x-3$9!gp-AVpU+2)9FB&fv4gS6F*d1;Oo6tV~MZfY32@SwQhL}P0L$fTN= zriSA=Rb39&g2z%Kxf;=_PW95@X#42m#&9jf(M<`v?)R*8$rlY+=svDZDBc2TK~FY0 zWjw3iN6?U#-4hUXUb$}%IiV-=!kR$%HOxfUn7HWvnfxh|MO=B`yqvmH|KxbY7-+T#Dm3nJ) zBM3xQ&Qu#SNh+k6$xpad%b%6n2ELXuE{&tH>%DIO@SR)sP3rX}${9QLPoOO~LV9D8 zh(w5x=mk+~$hB*A@!#|=VNy=Tg;6LX;?S*BA@A`TPF*&HPiua|2 zzqxU)05;fl@4=k52qvd6A)K>O!jcbqr8EB&G=4)=cc^ukQ@O#bwACM9HSbbe!^+H( zvep!B?|T(oAQyz#%`CGLynW0z$Zhx9Ce2l8lfI=TdZ6XofNc_Sre}D0+XmU2FCVe1 z$a0A65$~N9OIwV6h?ASF?2sm#D4&|H%pEN|d?Dp4s0l3|xR{{lQ6vkz7n&Mo*4Ejy z0#>~^p3ou{aw}7qh1^f&CRPLnq&Is4ijc@1O(XzV zU{O0jQ;@WVy}%73KLx@p6mpC0?!0FmaUV?zrM{the>~KT4rVtA$H}h~V~9r1+AU(K zJE)j-{DJfC=b?3&QrEp=`xS|ItDq`XDx}i|1L@yv8=f~pfesN?F+x4Bze&$-G3q#7 zqXX{(mOZ5E&IckbY!DM0?4z5e4b_lT1J}f6;>0(VNPPC2Hgb`xl$Y2Dv;{yK<~63@ zE&bIZQcLoaM&2U$Hz&4ePJ|hHD{)hT*$V1wCB^}9P7vGvxL*Zh#QK<3JGCzuZK4Hi z>J!h)k#57-oB4wb7GBlqD@z~H9soWgcu%bg-qRo-s9EOs$6NlBIUBWO<0KgrVs+5F zA~t(FVo`rA)O-L#4HV{VrVu{tt<3_%t+rG%h$=$Gs8(FGj#o0%X~nzCx_26NTP-af zok}s2igt1;HASjT+O7c))my>FSYT*P&%TRQL!uNdt01D)S5WFx-B348h{Q%$%p!fG z726V}VIo5+y?Huo_LSE{UL``?WZT-tEBjXQkyY<}?&aCA)HE5UFx~hd-@1IAl*{#f zOG(FXYK1uZBH)IYenv8wzSD$>00A~57uglX7Uf@F>>+ThZ&cbFTm9Q+v6*le$GK7c z4lFUur#$EkKaIF*Q>P`1)<~y?QXZ^K<>7rmDtO>?aq?u|Nn7XLc3qUd_}JB{*YXQz zlP0P0Cv5Fj7SJCX$Cr|l4qGGRBs*Kn;daxNmXa((Q?r*VJ3ezGZP@7yCQTci-U`uo zM1X4PqBiP^0(3YhJ;A!8cd@A7O9kIDUJfX1-V{T`U1r}Ezm~E$bkDkM3pIAn-?TvN zrUXw}=H9^i6vB(^Li0HW@vIW%*`^Q%h{wPx(qvI4zIs?2#$7J3k*}Q)sg2qu(mI-@ zk1ES)P5y}`r(LZ^xu}-R{ z#W`xI$4<390rru}ShCmsRDmgwp_R5Q(%fjMi(#`D!!Q!38CZUJm@jL02D!s2;NjHpgECwEeN!y9uFXL2C|3Fo^$8Uk=#;}2MM}V$-qDvQX#wpj9?f9 zqegz%j41eGkdS7T< z+aUD1jOP*qWVoRUKf>Vaz!BO36Y9?(otLNMX>Z>6#z-zUP)|U> zVK^^HSzIl<_ugxm2Mi#)J(#k#*4Y6cT!-_#lJIF_?als>cnL?IrQ!(9L!-wnGQYX> zS5+iMu&c_sVft+ATd{3kxRVV!(H6*=B*z93jxLRoThpVz)3;DCmM%2x;TZ(>RNS|{ z5>$UxsN#I0wwpnX*H?yD*^{jb=a?NZWnu~y(Of5zw^Qo?Io-drvojA6k%8I+Ob&_> zHIEWp2J?ixz>JIWx9q`{pYDcd8{(lEgCG@`^!+>UK_RGKqyPsw(en_akNJ=21EPx$ zkXW}m@2?+RR*k(c>-2>?F_%kkJE!QeHm10`swM;A0LKRa} z#gu&SYVNdw>hcHO^#}7}+FQJTbbkE#@=W3rug<;x+1qzm44b@gn;R163$fe3(yV(y6KTdxbqQMXt_Pg zhB|{Uk?0-l6b&_Xl+oiru8TfX{ZyChV-M7EU7D`udLww<=<7g z(a_vbCD@w)Eod$yjy#QKM@%@IxDxDUI!n1ospHi50tt%mfu^ooOF;nK{9Ug?ch3!s zRs(qhrOcx<)gaw}f(-Ps{$j<#yulxUDH~e%)gL{gATufkWdbk{?WMFZm&p$qoes>} z7CME{#^4^(SQCx^G$R55_y@EYsNhN=?Pn{Bvc)&|bq9jc^)V9ZT7F;J^~MbbtX<1jB>@x8I4=Iw>nBM!dP-?DyI zgE@O|fzs>w4sp^2jMota{jc#h)n|~zdiE1!Ao7(1^Z?sd)HI<>Rr(kBz&lX**(#d( z7!b=hXDH|WSYe4dnS0u_1s<duZE zXzG3`Fd7-Me9L#bQYQj5FmYNgA1@ z0){b>v?U;9*4y>a(Sd{cMDfGt|9}iH$+D7)q@<}=q&x&Ev|a%d?mn-9F@&QasZOfo zkH3YV2F{-*>s~<9JVt9G#IR19XjYrg+FZzjP|iI%$atk1$`LGpX}%8{wOdIINK;W>MxYeGgc@wmeBE=t$3dR; z3Q@2peCisq!n#rRy5#n<%1`}E?k`G%T)b;olbdQ>f|(d0i5*4_Rb6fOy-lYjXoM5@DwG`-)dBAI-Hb7!}f;*SDrnQ)E6@|C!!0CU4_je zfuc|)C13C~)HlQF2>!YXnC;tu#TJd9hfQHgWuXZ|kVCWmNG4jaWl^F{?vKM^7}WX! zo2Yj^W=RW^SfiCf_ZVSZBIuq_Ql%GH9hUZ)zw_LW6-?XBZ_8?esG%L*$0k^D8iN-!jv$C034Gz}SOt72Y#{^(3Csr@o)@h2Z^(mc(UI=(@ zi3GntoceBTOG^WZ+wf90Gkk6?`9p9NDH0ykz@Q2WkzYp5T#lO9dSCAb@+1dNQIbCr z%kY19Jw%e`QnFA6UE?7POKL{#VAh`fINr{!_QzqWgSo2eqH9{?<_x{O*pX`#B}yQH ze2p@uLAHrOXJB=5mFRTvvO9~(9dxd4Pc|TA0oot*^#qvgaScH&puBNuK51#AD3PBvgqn?TmUojGbe(iP+PTjVQ*4#osHYx- zwBMbwL-8giDV7i@gx_LfG+(E?#K`VzZbd{q<)h6Ut@XV328`CYuT6(A^>sE^sO{{V zLh0IC*;OfqG3O~H%)w?a7RR;k5bJ5y{Eg-Y11S~Zr(?Ll6!r+W@~*XEoT@yR1~cxk zLW%5!@zsg83i3ho-{W6}w1D7cB_5Ui(L>C2)Om`xA2e-@hjV5A>eL1BYZsNr3GB_b1{vZ{ zWRCQ$#WYP_f`JxA2MuIg9A0+YDJfOXev%N+6kcv|9qKn*&Rrot`IZ4}krv^?iiJA# z4hOy6JaC>*J?6J6z48RPV?a3p#(UtI=$v0IYO5<&fv>-siI7kG!9&`a&at9NSJ4(NrsLY_$R zK_o)b;jw-`re<=k)aza5|_ds~a$>Ct4(Tj!7Y^6TMR{zyTe1Tx9 zRPCtc9Oz@pL+7;wIUrLO%V@SD90N+2;MLG0ak%r>$2qUL?5vXM#g{26*p1kV1_qWAJ3s)#NFt^0K5 z&99w@{pro9`2s~mz@h%VM6-$5+DXq<-cE8V0)m(+%-t1@vwwkJjbX77Y=F^HuABl_V6#n zB6hes0s&dx7XfVnT=Y=i)%wUnOGy(I-`kQlNEg}3)hfs9_b^3tr^9t^)>af(ZHC74 z0N`WpQDa+;zZpi)NE_O3AM?VV*sG{s9l5wH-?0HvA1Q2L;IQU{xL6=IEM=vZ>x9Vq0LbWqsyX*BFsoU9ZncN<8(u;XW;}_`PAH`-yrCvN8ITG+a33 zx9N~Jw6AGOvVPP#W}>kQ=1=&;v++LHwz&vaL>_4};I#&`*9aIERk%FCv}z@{N#^aU zvYlWZwgq{NfEUvgP!~uQNLe;`Wn*@H_ajO;e0Dk>seciys;^1FPx%$z#gr-LGt6IT z=0_tS&?lf1(kkKM=^AU1T%fjOvPG#`Mw`zhXyJx55}1^R0BE(8Cl5T?-klsHj^VZh zAXV=vgCU(NWnD1HMZ$RHwpD`ZD}&6%O2@Coi~6vL9}dB%pMd_rQApIVc}ZbDFGyIS zVj91+R4}K?yhR_9FM>uo+gj82if$@SP+gN0IdVV?6^5{2iZI^Gvvw@hH^P0`oGL^f zNybbVOxx-do`Ozn?eaR@ZA(c@X$pQ#K9AA`YE7BGi$?~&lx6rxY;y{=xwF!ycfV*9 zz$$k2twVwr!F;3_PP;L%n1iZ=PmFQoCzp9R0CJBn5OS@g+)fw!T=lwO=Z~H%7bjV( z3vsPsNr4*OU2czIIn%2R@;3TShVgZ>`X$``tj5qm^y8A2aea2xcuU1{UcfBrvVw_O zPj!DkhmGIxZcg#BUJDfk%|=xlu$)C|;ziCRW>V9pO_g;~ zqIfHz*A9IpU*gdc+f=(CBNUB&l=hQfP?0-C@rthGQyYPwWz;a<3I7auAk;LoWGDwE z5{ZWO6{%l&kVihRe?O6-DI6bUGQjFQ&}b@IfW9DBcQHNqDZf&pZ)5oDP*B&cp{29) zDQ&HN35}7=vdR^E6OO0ajHRp*H@}0?mNtdrrf(G~)ThFmyO71dO&QJExaG}j;^s99 zee-!-J#ejdJ#mwoX$y`j7qrJMAi4-ui6NmtJo-fJT}vfBy$QZtrHSRY$CLdKhELQ)H5WGUD8_GcwY`j z7m6~A!M4q5Es*W?n2e}6A8Xf;rwj%zAKt^LuNIYU`0N+)$55iSucqm~7h9B(w2v=X z^KN0Cw(QI+x2Z@ff|+oQd}309@?xs9=yD_fZI)s{uo z8FN0%!a&+z+M2rO=5Q07nxfzm=5~#jxaN4IrSP@&(7F89C>Q;hENb_6hb0T zzTh9=R0X%7*EM-VbZR#?X5z=ZyhKs(x5%I$q4;ZG&!<_5uW2@NPZ-?9BYV$|NS}Dd zu2Ceg$jlxwfZj^DSs~8k{EA!=F)gt@aPK81$1}Ii>gV7ZV*tvjvA#D$cBS613#tTN zT6?_%8#BYMlq^otI`$#x109B^jXYDsn?6d{K1&N+mjAHJm2qD;j~9y8AwHzcVzRPv zj0?wO9=ebkv5XD9adiZl%vs{n4~t^3cPngbyep<`KXgebP3{Y!!(w|i-JSD`iT zr^E~4>-byEvZ@!8(Z%-J7^r7u{as^2Lz9?q<%J45t z+7o6Hp~Dhqv#ivKE`M~3YR3yfXwR60c@_T?bQYI65xxf~v5tmeLGTdS`r#dMQ3WtC z=IBQ&KM-evAt4~yKm#H2iZ9!1JASnc1cbuhY)8CxhZkUnS5Q@Ir)^aW})Rym%ae*?Oa??VCk=0vb-CtfiJJ8rn4!hB*d za8EPgWkeg|3QUFtFdaB}LJUR|(-+sd1W}wr#JL_CLb5YsEtMx-} z8kdRHsUB?8v=7D9CHh1kwr=1-R5LODUb<^6 z(Auz5brhd3VC;0Zq=)Upw%}}H)?h|d8nC&P0|biXu3RkU<rsb<%z26;(@1@xBQBuzo}z(xCk z+s1|#$ZdlZroI;ea?wSL`oCD~lsQt-KoIzJC6KY_dWgfRh1mzT@ZU=<7p5tDU+O&g zJ}_-KMo{kQ{K%sXUDE63{(YS$O}bZsZ53k%v*QeVjYAUK+IWgpHcgr#%wZ<+J@EW?UVt2nfroMEG3INr~vMb2;u>o}A&*T^{3kl+J)pi?|0zMxYRq&n*0 zemrh+VoWqgY|eCelTU*!lwB@9r=^vFgGQCVd0wKZB&gD%Ly-+6z#HW&@@kqG&S42| zEp$WvAK^ubKTW>+*jPFY90fPhsD61A|0dD#&oeM92cD{$7z_q=lPF^(F%}Len=98z zSpkqA&#M5F)?bl2fNX&5#oW_#CK)U6vN>jb8Kh+ECkws#*%*gp4Z1OxRS>6!yVhoa zdN#CO2uxTo(;aH5VsdT6jl{jL_*unCa9d<6$S=l>t@>j72{H(YjrrzmLcY`hhg|-?jN3;xo^6gyvF7n9G(ty5WxC$GZFf z-)U&nH8gxdB5%=}r0_T%2oEH0zYldaHRtXR2+6n|xnl2})^$sMYwz3KcoChm;(F9y zpBRdd#<~WBjt&cd}5qgqinD zjLRlS8;3Z+PJfW=?-L24B><$*H4#%V=YQEJc2K4EBwlJFlJ9nbJR=Nn?b1CtF)=Wg z&Ff_uTi$;xIUy5GxE~kO{@ZN#g>QkRL>L%1g#^>%Uv2S~%&?K5d!#Nd9~vpj7u$A5 zfM*B9CV8GeymmT%pBADvoAE^@?htqeIA}RS0Hh)|zWL@H@6{}a!8O4_c3SlWGnG^9 zG>JZtczbnfYgbK#Ccg-V`T+~zdzI0=a3#{duup@{2cWpaK*Ag>V;QOwYlKr4LB8*6;_2kJ100zyg7y+G7+e^+B0ifG;6f}R; zWO-~{2NJGx6+11~C!0P15ocz_p{pcYa+MqA!Mj-sIPO!}ng*l&spb~>3hEkZywNAS ztgaQkhdIQoS-RXeBxhI1L03n(p5{zUMju~ET5PXuy|vD)or(<5NAm)!*m07pEQ zf~Clk1n$Aohc2*J>m8)70h`IlCu0QzR_sl&BBt~}d-eXX(Cqiu_(}FrjNricb2dj~ zPS8>s+SAf_esFKjyR=aq!z>CGa$~lVp7CJ93#F zdr-dzpoKjyb{g?_rgn0Gmp{4}x>%~Hb$@m=mP^=h6rRkdQ<4Od^3S@!xGriS-j9)V z<^yEMQ)ED=B_0aMjt(>J-*+y%5Kin9Akz9b&B2>814?wcNJ$T0apc0Un7S|uK(Ri5 zvkWZ;nzaVs;^b{EDZfBl=-v`rqzyukt^td#=wNB_ByAMqCVLaR_q;ih+*vs|sLSLX z+wF`2*S-j}$oEvj^WOn86F-`2?i)`K&d&BqDDC8EOB9I8f&6+6X!I2D*mnVQ&d)nK zIs($)$yW4Q^Lp?PQS(3g6ZK&(K*T0!R3GXv{P}+LSc3C#6=+i&yS@c9RG^>rJgMO_ zA|iq$|1H{?inHCBjK<&QfKl@aSTfpaIZUI)kqHSM%{quJ{y228g2Do_{q5!({B=n) z=zdl%?kXBpD*(ez?XO}Zrsbx^r2b4lmZu@=1Rgd+Q%cMqhm60qUL<1mV(1-)Q zF#;^kTOX(dB}l;&BY}p_984Uih}L!GiFi2El}7Uq-&acI8f)b|VX$U)W^p@p`l`Qq z|D9EurW9PwyxJ66Lt;2McxG~RB3agU#oF>SF-F1sOplylCYWnQnEcVn@vAxIcSsQW z7Gl}^q2D1!b`!E$e6wt^X%NlB2{EIjcl1nRdTx)gpS0CeZ1&PFvowKBRlAv0UbH@H zRzBKZ#-UfeX>-{@3q2QcEOm){?G(UP>@9?%&u?(_PVM!Ysd&|%ONZaeTEYv-V1wf zi6umPKf|rST+$5Pas(XX?D&+!C?#0{9;cfs$HXTgFv+vuPOT5+Vt1QcbqU7p)|@YR z_6#G(TFs?*i!fGMvLb%|3?Jj9$yJ<_dCJVEQDX$-OQF~c3h#_f%Ewl~kQ_Rk5-(|!U zGJ{4l_EPL>o4x7{3pNBdA=ja0!tvZ`nkP&+g4MjLY3V*nL^Ry#n;7+Y%P-4a(y%h0 z;=95+le#Cs(bLX6hj&zNi=J*}-C_cLq9*MsK~EHU9e5hLsRGCmrq~EE%sN$@K4%|) z*$V7C%!sP|iY2w%madC27>U>Idd&+C?CS>k|HXFU0IZ|r_@W^T%^_I2lI)N z;<<#eD=)eZSe-G*gDM(b2^OeTZNKyfvAQXgvaw+d>}_;`>CJ$15YP<0pStE^SF4ex zY{qpCR!etHBjyj~Go^-=v`FtR+v&8vu6u)F!7l^eqJM@wdpS*z_wBlO$gMcl$!F1G z2|+-A)b=P*H?Kv$AdPF z=l3{4=MM3Wu^EI4x-d)L*lw3L=b{qSB5{^wDA>uhO$Fi1qK;8=dMzy)bu&bos!&C^ zV$p)S5MDh`pRY62SSK>Mj!R{#YBMcJ7uobpCZ=M0G+q%itdF4N5)$84QFO-MKHeI{~|Gl8hQs~GOP_<$T^c@8pTED z0(VU4e6dEIVXJ&f9(QNm`(l+{nv%Vqp1ic*5L7U;VKn2}*^#tY#YM2Ei-Z$Rb-vb; zm+KwhIvg1llFK91*8{WegIHlc>V;vE>%As&kWApE*X4MSX+ET-qPNG`^m*5xAduDJ zuU0mFb?7om^ix;Kb2c>glz7NMyAaBz$te+skHWV|-kn&58-^zM&@6}*jJ~dPE1p{Q zevgml!yi^ohu#d)D_Ys8u`Ip9G@OWM4~`nBWks-zdyd-n%PPL_10&5Sm5jf3ne6#M zB2r8U`niIvAZ4%7r#->*2;X5Ga7ea9_9A3KO$&KlSff-JC*$Nffl1rkHM%|*(>B{*;fDq~tEtI}` z=3s3@^~tEl(Rv@47^t5QkE{vyVK?`1A&Ix3xF@ZPE@GI$EekLvMe>!2kJ93d!0+>m zl$hG&cvM&Lb-&Rqe`7&C+nch-b6;#CgkWwQLp4_4v2FSz39%N3ZfU7%AeOwXQ_!{i|D&`w zkB0J%|Nrk&)H_DrDl&sgMN}xpSh6IPeOGp=?7P7rM41pOq_SrnvXz}MO}4BtW8ZgU zr?C&;YwGVx z@U;J8{$uXIWSFoN11nhZJ2EZ4FL!>iV+abee=PWYAU#XGY$^jdM}=*#b!e5WNVb-> z9V%Vi0;h_dD4ceIo;h8}^LD?FP%s#OW15~#69ktlu1<6Dv=U))v#k@mq- zO@L0Bu7fG-a(we@{DER<+u;+i-;E>d2zYAKBJ-=6Ei*49;(OAvC7W7P0Ou;OSlbY# zijM<2M@zbV);EQNovdya%Vi_2khV$O%KY}_~PmY&V&O4BKPg!Mr0Wtjw-xMcd6Oht>zWDk%+k*eHzQq=GaiH^g9|bhXYPTN z3x+{hTdueAS;CC)OV)>ZA3X0SBRefzla*?XGlM+~;AnDAt8Y2(Tlq-NC#GD%^m))T z57^x$8NiX}e1;Bhe^1Ta{EQOOl3X!+>zqEZF~{csOgCbr2BkTx{Xl2P0220gGag~>|uksY2Yo61;`0^T8txF~jG>a%mI!0^>mPcd|NsPJ(heks?0Gme?BB zNUR5Mz?>{^6ohCNQUZ&F-MIjdyZh4jM8$`e#yxw*l4A)R-W(tK&nA{MbJO1SdMPTe zPku}B{0^f2=_xiP;B67?^kJUQU1GW84EomGE8h zBQ*i3W<1Yp0lK$)$&JC(>XHvfS*i?~oL9_#HU^Xw|Hr zaX8qc5gq~8g0E_B#=dI>Y-O&f z4)oN!fyP5pnT9e2;o_Y0)lUSsVAJNl5ej|oNgL6NZQvEh#OI4=X_h&z=)1Wn_Jx2p zyb#5*(E9y5C5DC%>rVVl#$qSC9Dm+C;tIcYE7IWH=A}|jp!pcYg7xTS^|B8vNL~fx z6}=&>Xg~De`x(~w)FQv<^$|&UH62$7gAL{tZ>_fCGo(FI(#{(8yE)L2;f4@fpuD5t ziKvwHfr#sI_L7k;Ak?9i;hH*vk^LKlO zVU>aA^Ipk#?kwjX)D!a(VFV_y%j>a_tFy^~b8`394;KQAO~#qohp6u>uitR9`T9;9 z==T{*zvC{F2Z}t0+yr!-vHiJ*sVRB`wQE^YlDfyWL%JU%P1HN;J$kLQY|P{cYivt7 zll#V2@2wt}XQG4ki5UB-pR6qdRxRuZ@|!#Ianvuf>)W>l;1>-9u}_WHgv2in zlyOCw2-@lzW!(`lkO1auT&4&1FLZM}9!$B&xMBGfvm0B_SMD$BIt1L&GRN%5@`mh; z!#=pb>1R&}as?u3X41C3>WWIIl_fjS9baCLci{Ww9@oVk@7^blLe`UHqTDfOVGggq z6bQ%f&w+PWl8-baFQhf@pKKX$va~iDdJCvy#Jd*@zKv)Us-wTV;aKj={4VWH?w@#9 zakDUMNcetkg}EZ(*Om~887{$C+o>zoa*v|0IC_BP*9&FfP_GXq_`jfJpVA@w2ecb< zhLD;Z-^Y-{KH&DZG8Rx*HDbo7M3$^u`~TQ$ayna4BUh*JR>|7vAC{EUTc@xV4)a`F zA|&`%9c)U*Ow;{bi3v)u(?lGLe=R+UONR>;887eK{BXK6B z?U?V5$q*z+#}8~#$MqVF!KQlV(H3;1RB@nFq ziJuRyPve{{9O4qUu98^Yw6PX;%Q}UI==vO{phBA;OtjXjsBkMR_+3e>z*Mm1sutNO ztA9r5sygR$Q0j*bELN$Y&N@sZ3RCAY^BnVck5}_;BlS}mmqi$BTXg;H7raEOl{o{L zb*KeCv-w@Fg1g<@_w$uqoT#|1&$GuqUy(S*onAfVj9U32g5@OeS_F{;2FU)Q3JmcP z=xo;g2M3(KZzWF6hx%B^W%EvF!0NiCWokK!W%j#-PQkH~h`fABhA;`n23ykEd=W-` zJkcVnzm&ULmGfn!&dB$O)Ha25@=IP0#fOWff&_ZfAx|QeJt>y)hi&x4P%sYyw#)pz z2j_|<6oeI;#*8~rWNJI5XDq()*U6AI>a7&0g&8EdEfk4?J7dS9S#AXXQ!hzF(g#~nENno6C_VV&}-8FOw? zr8H!;HH^;dii1A2+;oY32-?Yqd~ia=J1Gd9iX|&q`hDT=)qc^fpAN~CV6QR(e zcezlmxIqnl5TvjR!}F7lcERb#2)Z(#o&1lyON0HOwJ>$VOBbgtH7LZ96S0R*wa=Vb zM=DvM$DtPc*+?)&dIu@@ud2j|BO+>~S}Dz3GV(F}bv%?2LS{(y{ed0x78OeUXI(Sm zZ}u0Y?3=@PIm55<#7j^useN0Y)~!G5C9L=oR@D#eefZ8~AeIJp6P}^N_p*(VPh2YT zTyVEX{q+mo_AM_M;cj02^@CamtXG%zyNbd;j96PvXL{QppLi3_`Q9AgQG~m}q?c!V z-?PDk$5M%zXlZHdoz$I0Xs||3hjm7Q6E!pam%79(E$LCn=_DqeLdTVuXUORw;@HP< zoFvlHvRazxUarqHR7RXsW@;u5x zkqweP&|h@f_uG8vLeht7tCpn#U6|VsLBymLH^j{eYp6CkPid5`SO`djSjVTQtIeH0 zh30BZkU8Fy8{fy=au^~q9f(I@sCS`SmW17j?}{*o(6?o{8TqaDJv0=6PF=3ck{oeC zA*h_M-VZZC&P&y|gsL`{M6gQqQlT~9D5oLw`7D`<-bi(D5E8+wx=atD3d>ITX^I?; z^IW8ds$2#w%hvp7=pgOWGY=aF2oNMAH9N4So^|AJwiI3t%;1sNbj&lCT>tkzSyB;sLcm~)@+`qLd9D1ZaQ z63agz8l-Z4_di&qgJc&APlM7B4nYj)y?6Cv zZPLsWX56{-kUiqo(UI+iYngtLQY<`~n@6C%vLQJRtW`CY-O&eK*kwAh%Np#rbqlI} zE+1?$`5SbdaIWNd%i9`DikRdf=%$9(Db~cjA7d*+E~x2nO9)oSIc z2zw;qw!9}ipxSs=Zv26d{dMRZx^o-#q`veJMEFT>Zp?%2MCPtmIx>&8*1;i2K#5A1 zIke6Nna_;AL3!+0Kmi9m)ur_owlzvCD-6wtppjPhtgiH+Q7t_t;9qL8q*^MTTQmUMjhaNSe_> zwu(a`7SE6w0_uwO^;I4Vsar$q-~!_8Yi+Agpnc2JE&J9pkSW~FufP8H{2+791$))0 zSsVx$2ymI-jY>jOY7O=FyTeH?3y6k#qOToF-FFd!YF{D~RtcZ3^cFSLBM#W}e7hf8 z4*%?Z&n>pmo~W?6GQY7oHlYY#e_Th{n)`P1e+DKG1bvhIVBa!w13BFo<=koa4T7we zx=bck+Mh*^=k1_b$Ko>%&a_YLn^gznIcA;TK_w zq#``~bO#P4N}y*}8&gR(q3Sc&n_J~<7L!X0;Y%}RPFfB#jjV$nAL>c(YYQ?#?N%GT)BlVBgL{3uic9zzlfs^QQeT z@SUH&>~!kgo3j<4Dr0`-4jMmBlkmFn;amd8H@8_=G3&K5@s-IG(=+Nb$Ncctk9jFp zYmC>{A8Y;a8Plp_Jx*0ntGSv?HHm7tlxe^v#)laU9?{L*D`}3-{H81QF3G*+)gpL5 z13VBZ*iVnVsBW8a7xJa99J%d(XkIbiRuageU^bmy9!plXRcaNvO%sK}&%fHaW{V3} zUC>DCX5hpdhrOkTeY`&RMf4=>3mm9}+bp}d?+zg;3`b&3qSM6RFSsZlE#)kg(eyT) z#B}KdIY&`}o4x1I%n9(B{7?}-Mah)NhZmE$z{Ap!r}O-VcKz8E59e|5d-?LO%QKW( zk5>fo24Z{?6wmbvo#kOkvsCQCRibpF!y{ULwf|zg!E#8XnUK@b~dYQ?oLg(EIIcs!UH+jG3Dac(VP)) zYZyCwmQLqUM5oSDz%PNIUGXcq>SGl%ZK-BD)Ur$RKmd~*{;zR;dE@WHfLPLav-6jk zSCLkSqS6veq7s*wNa|?C)S~8&yJEr3nWq-EsXUumeInz;BmW@n_gSpY9ZkajW0aY} zk~k0|q=t73Rf9Oi;lkF8SEfrAj<2gIAK5y!Q`zk? z+=%$)k#Xe$`O<3$lujdhz!S+Mf<*kinRYmJdTTH@7`tRyH4vcHC@ndyR zY1@aM$&*@e`Ij;ONP3%nj@BBjxf&>`q;*3s?}4(HMAmiYRYdE_S>M4qj$?!;9v8e2 z?h~Jz6RI~jkPi)Y;)Yc^+J(Ob;3!8Fszq5oj1Vi%F1xcdoTpT;Xy56x=lxFcj3TJt zYWVT&V;dzr;2J`koNf}GyvsXxOxVnecy84P7e`uOa zly`)UTEykZlIwiF2|H}j^lr)XKX>C*C2S45nx7fYJo=dJMvyrzt1zAAk-QrY>~#-L zrH9d-eI`u0Vo-Xs$6cg13hQ7Qn3U?)k$(kl`SFI{^J_OWmd^`C`VZ-?xLL#8{YNzf zSk~BMPoDI)egE%89--j<+N38;?^<)%eBnG1uc4judeg9&^2=tmTs-QMEK5>jo|;gF zMXH3|_ns6l9{=G}FMA4Dc+@lAboQ9cwWpAYB17!&TuRZ`XyI&buu#v(8VIciA9bvXpbF z)90wGy%ExX-#g%8m_R>ss0z(tys0oer+5NWrt_6plwn$8N^iAz|Hd3nr$h=5rhe&& z4fR?7>BsShkE=K2>m)FfJcbjZ=4O1%l#yMi;~(j){`oO)tqsuV>*031qBTJs;&C>J zyl~;%bfQCIBJV;p&W3ua4%ir~!VeXBY6NzlD3QX<9tYBYx~zg!4F6A&k4)DGnEdY} zd!sT-lqKel@jP~xLWQ~KDz(1qsJ!y;7?-G9=B7L5x83mXL`mjb4!0LOZ#1#0UA%Cg ziz@Cu@T&_|6{{ff=H=+jEM|75BP@z?W7ZF0%2m0aEE6S`i;Kl4EWu1N?^P^Tg;@SmLqE zO4TeO$>Db7imISscUB({vtH&tnsY3H*Si!!{W7Z9hYCx7NNEexl--WjkfP=fETgGA)Mg;TL6t*OVN0d?V z_cL|S#Jp}h@{@b(;Lm|Em~P}5Z^5KQqv6)9itcw94HD@Cm=Zg|5WPPzXppOLQ8lQG&S z3HbqemYB-JzayT6VRtrX_<(`| z#Nbi;y55}!wixfoD$8wBxz647m9@HO#0D#0xfCYf94L+;7IJO~c$6hMTU#+YEyypb z7>*@(mOR5$>y?;QWGaAGtW5F-u0$}N37zmE;ws8~d9aBepF z%A)V)tF!mD|5_YQ*py4Up2zG|;q090VY9^RmvbUwdBWMcC*v5yN$PsR8nv@RoV?=7 zD1k~H*gb89@^WZNL~iu6i&Y_~CBu;!KA9!-@UH6}^+h%@s+&fFJDeTTCXuG_t`a5- zOW1X_fhr;7bebZ(D_8!wjiomWGNaMl61LpUrSzgmcx34pOX?1`RG8OKpfX%MZN56i zp@oH^gx5jUuE$UY?5Q)Xcwb2jj@1?mH*C(mV!=MKR~?qEdrspX+5#v|HZT^~#?}3|Ok~p0`Dk$TK!MsVq+5A*uAQclCkdw{b3cQ>bU|173T3Y$hg20a!j~Ss zW4--^GF~OBd?mfx_pAJ^9sG^r)DqLhL6dy0gmUBD!6K6@=|q9`o^0lt{;X(i@>ddx z{2@{w2kzP3v!EU6TcGODS8hZiiDmIh8>hU>^CYi_ztAJ+*1@oX0(Qixa71?Lvi_gr z1}mD!gsjqceARfc>2P9^B1{13sNvSz-DqJ_Oc;Bip`R0JV6U%yMbxwI3FSL)4ybc( zt_R9KKUb%cOeR_0jLkU>=Y$<>_DP6-eM1NoC6UeC^l9}++M`jr%e}c|xHh@zfdKI> zKb8;|mQ4gdw5GuIXD4nszsPpFiz9QwuuS2IeNn4)!-5P$P`j3VWcI}QlMi@2MqM2#Qv;_K9i1ocs)*4V(zo>t z#hnKm?t`-Tbj#8Lt=v6MA&0+!VbkY1VQ31IZL>O-u)~2R+~m&HP6E~P-6APce(o`1 zm8`BCNP70=b-dQ54U}tn?x?EuDR0USTMVd6wPB6k zt^F}qJ%f>CTaP9ENWTJAJrc@$bwMeIxTgoh_BA7M2O_Tbi~HIw&^*{!X_M6Hs{?7E z+q?8evJMg|!9{fSc(5N6DoIP;SVB)YBE#PlH*7aqU~Q7&@8~#LfQciFfzl8^p<&p~ zclMfHGM*^kZx(UhdxR-l&!-vw`l1`{Gt#E%(k7H}(Bk6Yma)?4of)!|N1FJ;Tv85F zvVxklZAV&AgsmIsDnzZdI0z`Gbg30!@xqXMNrj#hVI3+?+pS4Ua9r3Pi2pa>uHF9$Ib74*XZTwiq#5L!0=Hxu(zY`~1Hdw$w1Sj+VC@YF+4l+o>srgD!E$yHYhbnk(wt@a zV`!P@mTy%45a{s3VZGhQa*fOX1^QtEAZ5^~mYDTv3m|LjEpafCPy^u6RY2CDbB6g> zOukiF0oY^~!RoCGz|i<64g5$W3;?Dx44VC4K(UR5KCc7nrZC`r#bbb<59eRX>aim} zC;2a&qNf3Mfv@hH-^&0n#sRHN$2pCsMX4W#t^x;Mnzut{`PxqbnjJBX`9>q2t&9E`Fq!@t38x$b`Za}_Q%lbNIC z|53o7L9bu_McD=(2G4f?Q~B|~E%tw1`M(2ct;F*1|AD8iELZqxL<<@;_A9OW?!Y<* zaAzeze){M1zG6Eznu2(t=3u`Uh`U!)xv9s1ySL%T7y*NEKtiNZ{Al28W0$(qS^4=+ z%KVrxBggWiA$JbP8oS=xanhbyHE;bWN@Ecg0=w!|u+d-_GKZvhW>bGZO+S_QZNm@& zEI6zOO0Mzq^A|j7`ZxC#m^2fBxpEtL-DnvahOW2Ea0C9coh?7+8Ss!d2HTTa;EK^- z;t&S-5=VggG}nHb9wPe_B&rZOZBLgC+aZr`u0~ z7@iDL<+T6>Rv$RM+rpGFFM!4{C-Ig~HXveaoA|EQ&DE$RDAA%t4oIxe0s%$?G@8m& zDy4@EqLUs_w5ny6PrWnJ1<{cRfRhx7KXi_vJAeP>HnwA2@%f*=+xUK zcoO|ffi2x%OhhCL0Az3=+KQ#>`Y?Cro8?1U08?oMmSQxz*mkI**c(6!J8jNfH_n2x z03@D2JwD>S>SaB^;gx8m5xGeK2&89ZG*EP8?HE{S^gtJ6eUyG$ApsEZT@kN|7%7@^ znh0V_(=OPr#>B?v0MO$#YANvV&@(pvyuaP<&kwdZ<6(lQAW^Hfc=wM7yEO+oA$M*A zFydwDvGr4#iQd^e;IKUEVh#8|(gUl6^ys$|ksPKUes)AdRv~g9a5>98GJR_#P%${SqI< zFu^OceH^S|p|lXYIpXiXv;QCInB?={5}7-!qM{<~wKD4dF*Nj_i&6Ig=Q(Gtaq>7Y zWkS&a^k#nBm!Ln)3*fwijna@l8$iSizRdOmZ4$z&jyeQF^1aNnz%UBT_E%2T+rif~ zh3O$5jRzBKfLeQPzjFejgy8c5b>9I|>kz4J=BCLl6+<--$yyXc`)3 zr(Y8gkf-&anr7TWIq%8@E;I3a1GoPxakuHMrF#htLHRZN9R7gsE9^3UXK$mlrVhYN zSK>zY=s_XyFpTYt}@N7V-a9k7O0-`E(O?=9p};R2-0Yg}w5?ks1n-VfLu_Q@|-=*yvna$_*l zXoOZ}W#x}X@quz+Ed?7Cm-SXLI_Qrp(ES1k~;Zj>|t%dA=FH~ zoAX?H>_cEZ0DGElBzS6F^H@C7|_p z49Qa72>-p+>eTbqduu8*uo2XeV;~4Dnd~U0U@AQL`oxA}YGOjO>&ob&-Scj`HoJto zHEThmAjmVIYf9VS5ddaR{4s~mp}E99Wsd*?_81Vx%bA#%NVEd?A(vhYY++^{)VQ&o z^(U|cGbajwkmrES&TSL04WR}0fm=MI6Tp2ym-Ybb^o{Zka9mAxMgSMJ)5dSR*(@6f z*6)7Yo(IKlCyf5MH>qMyEg2Eg1Pip}wdK}6BOfz+6$jqT|lAfl&&NMud|yctmt ztSMkOk1V~5IRQO8-~#t{{|Hv6Y%?m^AR7>7vH@z1T(du4L!_m3xxN!L%Tt%$engA; zBrx33AVUOKQBiUENmR{>#BH#|kAlPmZ6$=ubN=hs^}$Tl1Itg6hfItz4m^V>0w^#J z^oFSGD_zv(q}y@OhH}}1(5&|0s;a>T1rd_0s=||0s^uY9u|Dk6X5<1{Nr&E z*Kkp`H*;|_bTWnbWa#2xWA9>PX+-8~>f~%`Z^y>S&B#noX5r%E;LOX!Wc$A_V6=BK zXX2=?F9nMrI7n$aLqMPzzP=!f1Pd)8AS&gg#e`Md(+}G{+zF?fZ(s1G6aV?>V^T+N za*t-dC8HF|`5p&hE3KYAj@3bbGcmEK*Q7h4kHoN)IN`JhRabXtn^WhKV}p_x01@(C zNMu0ddd?B!D5{R!YYz87Rk})x%B@Oj1H9Oy3 zRr>MorZf5M$^QHIkC~a-Vep2jWtZG+EYtRJ@!-m7C&P`^d0S405%>N3_ue~vt6iIC zcsn%V-NrHe5^io>;knr~h&QW#f`9(}@jkNF=i4Ibk0I^1YjmE~b;Hl9udhD?x5(Jo zFak@Mnwl>8+$`TdJqxe4?__#uR2#v}&(DKrsBzg-dOlC;Om{*PS8Tf5PV+ebL!H89 zPr{fKadj{ob2^(KMX4wX{=_-fIPb`Fu&^j*aN4GNg1Z#Et#}lsW@S|}>NF{!WT=gD zZz5l%T30CgUDsw6-z>XjdHxm0E%x_(dAcFov6-t9hMC&Q^79?%x3acYZC$QdaqK7V zGuOYLNKz4cIy4t76*&F%W`CjHT2)B5)-1|#^u+JQ>uSk)OjVaL>HcB$Mehknw~|D_ zTcdryq;%@>(R=#f3bkeIv+p^ksv_3a?%$t4-K^Z)8e1IJML78Qw4X-ZI(`b=t_A(K zthnM-rO%OdPzT?aeU+;r{pXt3y_MdqcvX6Cr87xDquQC~JDNl~ug{mbkY1d?%lpoOB*^Q!m%b zPfScCc)7mw-k&N~o*rWA^d9$ky-x{ExaYqCbX8T=Fa6QPAF}oQp00vMAF^KVNU;_4 zeXdkDYhRVZ%E{?G`$Et6&JlVU+JgB|biW`VAZ^GVjUa z>T`ota3eHdIF=3Qr@`gxoEOnxu%Z5KH^ZhM&sc8K^rvC>8)G&Se5 zy|A#bzQ@LP{rxE^`9oX1Dbwd#)6>%v;?ulS>$3N;a~9hupZh7xTVt zzLj49RdJZnG+%dZ{WCa7&c&6a|8hSYUW*&X!;p4+^Yilc)CE%knzcZFK7WZD({nerHe)%vxJ-y_%>Jv2j>K1i% zb-%(`a6jMAc5b+~dfaU#IX3I`?Zoh3&lNcVO?CYKKbm^z%2%pZzA0>vgpr7u&*}5%SvFgnE^;w@+B&T{{=} zf|VsDulFX7Cj!nN8H>Xu5r`~~r3yI0LB||Z%a<=_adF*nq~1cNrof}W52|*+hMcPd{cCA=B( z^>uYBKBrx9(~I_FTToTp>4&C2n*ypSd318ZHR|;*R&q+S)~uK@Nw&PGNP*Pruv+;U zwxlF~%x{ZMA770mOw5R6;x)ktUMGFIg#$isJ&J2(4Fr{_IUj+m;?LFAvy7<3yjaz* z9@3i3I2fb=%pWhuMM37^G|IChc1Qw(Y1{2aM3B-2u;@qf+CFf}-p8lQ$-|}Qc;N41 z^&dBI<7Hw=qX!3NRy+?FNPKS%F)%Q0V_t4!s#ZaApn>*Z7Bl&3z|zvv>n#Trn;`r+ zi5;KaA5=OY)z7lpF0j8IH6kJ+xf3baHG@gy|4xSb{tvlQ*bv^k&ehMKKA{vB7o#H# z{s7wt2j;7ynqONRpPNf=({MWHw4sDvQe2$V)HG+q^7=h_ten4be>BUN{i!M)I!5fA zsVNnq2hoE3{1p1A|H-|o$N&Bnc66++jt&iKQVDi()6mjNRe2SQ7~$o9xf;M>po2)#Ejv$Bhd;Kdc)fd`a)8ZG#g#(h*b>Cmk6BO&4Jb~7f+ zY4i=+MUp1wFR;HPJx^NFr(MbU zYGb%puigB7fAH#rqMSj-DCjuE(CF}R)L85D;EKbb^}9s1)WX8z+f?Pd|5;K(5!ljC zCkpX(ke~1Yjl#c9xA!^Fe$|n~mG;Hk!*IHa?DFy`kU+huvYBUnO^l8^Uwk1ReFb}a zd%dqp^|wIOzWzRY<^B=4+RatZn}zFZ*U7Ysl9E9$No|iE2R34#H*$ZZ{&n-*VVS>A z`H(~zK6M;SQ7Np?_irR*9yf?>-lkYSr=UD3>VbfJWThkfx=5_B0Bd&z0^Ll9Yto z+uJkL?F`u$==8WSQ>)P7*{xMAReMb&iTy!h(O|pS2dptNYte=ieEVm6BrUZ4Sl4a2 z7tQxH=-a?YeAg_C9X`L+-qFpYAc2=IB+~Pg$%6BC*`2sdO460&{Co_(Tl-H4h`kw* zxV~ueov7V&h90>tUTu%JSr50HGgfWST@MBGcg2sV$`?HCltYwzl<56j5cZE)EBEi+ zy@IkTUpVP+iOQZ?D0h;n_2I|-6nb7dZr@!IX9{Og^Bj3!1!^wc#wr~uIVPnCD|AhK z`SJxgX0&^HLBXu(XjD%xFOb}H?_8jG$m{AZSIz1++7TZe9rYc|RU4zn`h6^0)$K3z zyW-@FX^c-c*ujhlZ+cG0r)L_GP+ezQjK25-_dN1<+pbnTK`iiR+B(;crObB*NHcvz z*~*Y%{P9^>rWHiLR>-!eg7EqA`F?ZXC(cg49U8sP!M#bgX0VjE)gLUSWz_3gH>Y0v z)%Csd>4HJpu(z3vx61_XPj;UW2K6D#bFCW}EE@PfdaILYas)f13o1%wfF(x4;4VgCJ!M-f1 z4vqMElV<6gZl!J-`uS>`sHrlSM=_(X@12p_ z4;Z&+TmGk|>lprzH^L~Z&x?%dsDxPpwpLSHKg7O0lenKdD?D*>E3ab;hTdf%Xwh1) zgm&t{F@&z)Sg*CHlNqPd=02Z9czOI=O@IJr$!gb;jhxhjY9TYhwixZaDCk;i=|{o! zWJuU~x3R}fEHV#CNku*-1;ST$M~CmY`PJ1`UVeUTa!mk zV(@#0$kN|pEBv&@rT@|AI|g)>izk)e!#SeaKT7Ae`lN#_ceEJwVl4G=MEiaJ~{L%XU`e#WUXD1O6tm0j*Y3m+zKRoT7I?DlouTVDFmniDW~%Y zIvnSba14l!v!o0gz6Fdgn(xttRM&g8+20Q&pjy8`A_?%#scP3jSG?f<8x0uMy6rK~ z5xmDa6zp`1lzi3=%l)OBrT42GcZBl?+4zRCpr0p8=Y!vn1NEG{tsjM3$EhI@=eG!j z@bUAlq4_4q&FnEwo4H@$4Wt8a2FNB|#(8`@v!V#O2zI{7*>}dIJy&I{K$7l^4z5#Y z>2jBK@-j`2kXGnRsMW;ta}WdL+fL1VZ}{sZs8bJZ8Ra_{TE!y;cPK(QlRivV+h;!C z&B9bVhVVzDP2m-RCApf((aqV+uFJ!mphj%*^@f`J=n$L&V8I;UN z2R78zGhlz6tnv)rFZYBhOKn7a`yc|c#lyMkAYwjO2rbXYXkxyiiW!g;m23BdS~2S4 z@E%GYD{qSb5ENTiCJ^C<|$Eu><^B+VH=O?NzI{q@3A*{}2nejS-zr zTaybI6J+r;n~N(o_=_ua)w60prGu?#U~dc8x#EK7-zwPpUGuJ(BGbN>cIj#lMs7@g zLrj}V(9_ZWzePqpHAtnT?si|`*hY!(9xrK6i&riB7fFJG2+8U6Uv+cQZ&A8)c1+TI z$LT_HNaAS}2K#R57JUTjA*1sox4eG|?_(IAmqPzTdewFPs= z^W_T5N~K*?UUHn&`MKM#$(-hn(YuqsV{kP5XruQvu8(8(;_nAuiWww5I$NT!l7d`7 zz|(4d01~#%EjRZk^>!lBNBnIfMgRLkf7W#Z1XTJ zdt+w0$)T9h6V3+-8nt=w?JOGmMip&YYo5{4>X@9X(?S0rWYbH%DC^UtRh>%rL+5O? z`ir}_%-df}9L!HPr`KJCf(Whdyl(^qUv36{A?zNd_L>sN{O!vt$mT80cg|cny)^{y zaVd?e&rpwi&T#t*p&^?l4YrOJ&eCqI!WDzvZ$~J=?vzvGhgFCAvWgqL%{Y@7X?|CB zk8w(sDzs5x=g>Huz}h+jo3!kK&4}*XGM6)!ksy!CAbCC={p%1;9mZa{isH*O-1fGh z67S^(8-@{?o|!LmV#x%3&3-XPd3s6IwI=>xG=(L{`d>jy+xtqj{A6f}A#El=>*a=4-)91g^59p|VUBA;&h&2nf?2Scw8 z1^x`Iaz+nJ{jC!hB}!iBTN8*3Q+o?&I}(!JvwMaA!fy%*GaocZ)j2}3xREDksAp3FKM z()8cJwjxQ$eC9W3F`YPq&r|Z1Y31A|r?%Fci8q4M>x^Lh1uhMCc6mS!p_SVk(S38OFEn^uSJU&}Jo+W8N;}dAnLAfFR-I#&@(b)pX8{hVIg+mBUGXMgmWf8Ymq@19-twOEK-Kdom_FdP=g+QF@R?948B_2z%qWNo&dC+dPRJ86`^&Tf_Rn;g?0(~t- zj0PP17pAvpH#;}cf49!QZlz*azr)UfUq8FQJ-FV4(D8DWo~uZU{bw=~N9%vRCIc<5 z%3%t_zV%+Gy?fgSG0r(>6PieaG*R|>PnY4=bGpsDz$Cb`aG8US{bnwL&wB4Le!3vU zv_D=;!f2g58K(g8sX|4=JHfR~5H8;2CJgm@%4N-E?zS5qJFkC8(rim1HC`^Me@K?k zy2n*F?92CXh2Y!SP?WkWWQFhB+imAh1O9F`U|SEp*jY?^R|5~mP)6eHC@DS zD-IkiQ+Ocws7U?(a;Wrlh3Fo%qM#Zb4B{m6Y_RL#98!z}{e_ z(aUz`wUc_ov=C7H@c3*tTIqEqBTYoZh%4SM?ezv7zYAl^BgcA|IbXo9kfq6MI;BRi zY3k?*TYIi_>i+ccB>*`U2gAoPF!W|2qB9$;<}raZ+<84Sxxy!8*plWfZ&kvp zd1;nJhKpy2pgOnX^Pz2aH0_Oep=C;RYi7z+{ynVsqj5h1Sra-kbr#R3w8B-sg~9c{ zQ}Y(--x420(6bxblekbVkfzL&zIGxy>_S}(d-eDD`uw3h^9;o7tf&i)XJ%yfLygQD zOXuV`MCAKb2!%9!z0Zlt;qvwAK291#I)pfIQ@?Wz+5?ya?|mCc&P;lTPd^+&cv#wv z(v89VODBkt5~qQBw0%H${E)60*BhB0hOIyp#UWd;Rz-WrO@)iMKKJsuJX^;KeVChx z^#;BNN_lprKMn3n2>)ZNjena87ik8uhC#z07zr8?Y}e&w0=sQL*hBfERhW7{YVVXz z=)O_&LSZ(4N=|YHd=MoU2ezA@+0XqOfscXn6uF1y?3euH<5yeKU}!xTbZN zcwkm~^5R@x{!4O|7MH^NnBlOizi<{fCVng+t*OwU#P@tk3bqgt;OJ~=KqMX>GdfDa z(lr{^pyx`G#1RrKOv-g3NX!#LY|v%?=Eh4NX_SPT>7=-4M?FRT2aaOM@?MprqQPjQ zvz0fnG3K9wLUd+k@z{OCUvo5gxU!&IySu(JqE5-)B)=tc*Q9e#)`j(Ortqq4PO?0~ zR0y_O^qP0A!-oGb6-)ltawm{SYdcTJ0NOD7v-7%$1K3YZ!uRjUN7Gsk*W7>m60S@Z&H?#n&taHqtOB3Pogt+FU5H4&Fnn87I6js6; zk-p=w5+iokh)p3Paxna^TB?zq}rKv zL2o-9eIJ(aR-5m~EbGiz*Pp*u&h1DAYccibz)KD>6l}W8MK)`X7M}&F1b0gnY15~} zbV`s<@lze>Cl7a_tQ}2za$wU(j`ByrY|pd!<>%CnIYj7w6yyz8DDtv-%4{iGQf5V7 z@twPgb0tCnj`7fVO)7Xsrijq%dTuD78iOH(crDJ~>u`(z%Wb|FJtNQuyk-;OcQ5TV zOS^5vC=-~N+@>(VN?<^YFB{d0Wsgk#Bw6e%*pqRPmOQ(B%6 zC4&TbK(IQ-#p~TuV&jKr)kecpwdHmK5p4_G9rb-wPUsN2PJ%=s8#V6scbB6(&> z-96;=J-%cWeDij3b=U5U?DN=ap2M2cU;R^^m|3)*q_$UH!jG|!TYgnw zN)Cj^ACY2aTlr!NRb5R)uA>?G*tS1_I+9`M;H`Bd+BRO=snQ*_*W4u2PPL)&kF3dr zZm|9IIyo0Ie_)|!e$o?sL7g&bc93_$&WWU?F8n+OwO0Q$@xg@Po;&5LdUwT5jm)6M zjL#*y!k~=+j{wEFFo={RN{FZjbCTK>EN({KKW%0P1sG*bCQ24G&RInM^=xiz zh+nuCSVG`Tgfk-hDQ#C0A>NDcU#HjiMhQI}-9`D>`hn2oU6sY8CMi7@uC3b}i-390 zjKm-cCg%G*-v9()aVgETaziq?t2QC0peibGyG#?x8 z%6Qw$UGSE%?EB1+yD->%H;7vx1+qB6H~1V?Hi@BnnMfcmOV&#S)1zU4YKPY#FAHD> zP^D4MVUMO@KclV~3oBxcqOlu3HL3*X%KF7@3&1$jCuQ?f{At!=={G(>_F5>VYUy>k zbZohkV$;i7W#^%cm3);`kKJZjN-BaTBeP-W0T8MJLt-?uiTK1b#HTAlr|6%6%UarP-33Z{CO%k+}vz z)r(ka(40y3#6Y3xUlmPc)v^=h!>j&dCYBq)ExG`Ns$d^Ew5Pg<`blT@?)LG+3DIAy zoLckLQuusoswxL7Sh8{vMRBw|CjM0wmSl9iLh1(L)#Aj&ky`8y4d;#Id9=RA_|{wH3IS>XQc(iiHS7=&d4W2%+}AFnTT{7BZxVo-%@kji}a}>tz!*hg5kZS;O=1>~!X%1Q2(HC+?8Q z=DlHh6c#>*V_NO*ZW@Ta(Cn>_8S zJ;W_dD8&mMucTKUu^}R)s z1IOWzu)o=3ql3yfBvbE7IKhttBUYm$@{7MvXwrALh(%zgKM?**n0I23jdBK+QBQu8EbV9{qLLDH6jrAPzB{xS*0*n;chW&%_;rzd}QzUv!P+e{b;3~uyuKKN8qMec&A*i-E-W-?{Slq;;B^Qt0`Mu zMgwwkG;{7zjc_Sid^+5U9`_juggq%LY?ef;$Cea*S`GvA39)U$^f*Nr38_jQ^pfTF zAVzqsL?yrEGy{LS#lico3I_@4g0MgoD!yKEkB)`__r{WG6HCfivW@WZ_M4R<6t1OT z^|N|IfLGxG`cl#|G8=y-Nr}%N%gX2h{1-X<6@^erMut}$-Kkk8Xmn_p=(+36{iBPE z3$kY~t2rzV9{v)pFs$eL9L|x(XE+>4afIXh7&}Q;BBa6F@F;Ip?N=j*MgsC8%Z={265zx)8~zV0C&N()n5kY+_kDj zZrc`4wMI1=F1z1Fp0Zw9hE5BQf3UI;XvVb=GQNDR7q4?f>>A0htLdi#8%<43J-ze( z4Kf&FL=~DHJ*43wIfF?SD&fdjqzY1VWn-?g$Vh*5l z2M7X$m7t~c=`pDW!lT#@K&d}Vs*Z}h9VkS;WPhHh+uBy!BM!G5s=qPTp8ryo;+vHP z;@xCz{BVLbe4w4qp3^t@qyC(Btq8OUx|j$NBiMgqv(cqogfe}5P|dwAqx66K_A*ml zc_035v(CI7dUnT%`FIYGghRhJ%myd;OI^n?#Ienw3kru(XJ9ymZNAPD6SP&=X=g!C zxk;zu+YlXw`41DN`KghaK{dvr0n#U=xHCoKDvN!YP^o`olOJ@wc#D>5VX7Q~nkfK- zG>67XW=LQtD*2EXnJA$?hlJxVn=a%Lv^SLFi^~tU`p@Dbga+|zf&wMt#PVynYsn8i znzl_>&$Mokietu5j8OOwea-;fAmOap*;!=;1?CO6*49>!`@O>EQJ;pO@vp;5XX-Uq|a6Qj78rvnQ2lQ<&uZKE}4fB1`F5RqD z(=T>X7)HkBW-}|(XO8@v!oTx%jRKVyVq`||QV51tnd|yyE^ECi`GH@=G$JGNm?R!@ zvRd+YZJ%B977mH$?z`8X=JoON&?l~CF+f`abOHtl>)8rZpgD!!C$W+wh9jvQCgy0U z=?DA!8-%O3uz>P`3g|I5OHHvujIEKN^{ZB{g}tZW&nh<}mq#`dHCuW9%!2QSu6Eg* ze=9d~Pfk8r2V)l2l4MdC#S>CYg~a}`3q~S(vT9-$^{TbrSP^tNp$5_e0tb~AAxD$n z6?CHtM~uVuFPJJH;86e{@_$A|xuA+lOG}H(%ZV>D0C(i#m5e0Sn7nLfzB8KPeIB2c z*VdK}%rzRw`FuOgzE78E97G6mWdVv_mab(K2xa*mbLY5H7YAuYG}Kly7}C&Rc!jDH z%x@TvQci zTH{rVC5IEu#N^X5!#)KVGqkh2T*fACb86?!30>Z1LrBKqu%-z*MPHEJLA|Wfg?Hn> z*KBJlO}vS2s3}uvWB2>>`>k6VO$xhgf#vfxasR^U&|v#|&J&)?jQAHdW$VegPVP0r{Ph(0YkJs9F$dv+K)ae*^kS zxZwvxC4l}+&hKnF7$?nd{DuW_tO-7SV|wdvvF*v`$O=BhzlIZb&D6htl?zrY6K961 z){bVweFIO!$2<3xEmf7J6dr8Qd{xJY%4CdHJJk?0FkCZt4MGJKGIZ5f zpiT7@3FKR&wvTn~FoqABG7YS4#pY_KqlO{q3c4R|4v_-ys1pfLB(P}~aXC7jk4fzXz^6j3x&;Nw}QNMYTN;gge3X| zM@$dNjxos*knZKR1?mh9vY9MeaCOiZ&?x1p*-AH@F8G5pj*==)a;x1Yah~9g&u%C@(l~ zU)PLr9m6m-D8`RnxOi!wSPUsj>uE=3g#Kd0xYiWF|ayF}o8Gpy*t;YTXh^lzuTY6-N35wjK?!B1Z@z?P)H@C{@V?~3_7>M~sE8_1_o zxh)vxG-9W|Ir<8%9_*6zl#V|cSS{DWA*;26}G!;!G=SD zyn_9U$1qNR%Wl9~V9ca0^}<=HLh|tpBJKW}Tp*oDc&^leX(YfdxP@XcJzq4^%6wQ9 zThg-YW%wAij7n&J=6oLY9F9`ONoIG0GHs^yA9hN|>Mutp&3hruVwL}F1J^m15+r<( z4}=H#x+Uz8V(uf(1y5L$qlmCv?I5SYcPu?BiW0f)ZvH({%R;+Q#wbZ|e&zZPw?;Rn zdwIKLO$`UOU9DJiZqTi&kl!J98^0A_#9I-=KAy zQhNznDJ*QU+m?DBY4>Olr|NG0&e1M6sewYtF|gy;0P!$1%YMzbBfB}rnpQ}%TIe{Z zUxEOo6m}U8Hz+OXb_}oDxbp zsAjNBO|AJ8b{+s?q^3`ggZu?IvBm7GGMySQ!5faDV_>xs(;~N-lS_sj`YETmH4D>r zB8tzhj8*;(;=|#i3P#5D8k);N{@Ny%fuT@9ymQGFNbb|C$PCaId~!uyb4i&-LUSrn zi0lTk%p2Hya!WptLeu+3h+x0-@9tgjI*PUkXSZ8Ia5clVu+y<@Plv!k_(9^DzF$#& zkJd%kFk~43G9qN)lrRBou;w%eOtskNm{Xg`S`kx9l2HTx8rsSRp*a4IP^mgH16dK_ z6ksc3VX30vkP~5%LZ=d{la>ay_HW}97%OL2PXf?=Ziep90B}yx<8Kt*24T#+ch!D$ zix-5m5P*{H)4oxTr_4C?6R4vQXR3^vEPWJyO0A6Nl8k|ZloA>{3G{f5Ry^x3n!wib%8EQf^Nb^0rVylrLjSI8`3dBRl9E0R;u&(29RI!WZWSQ5a{f0&_6c7q%fi9o zA{)a|_$(Ord~4PCZ|g?cb@E#8^01(x3fv^6Yr@c7HXDHSjR6b-gY=6tlAIobdco83 z=r2_Mm8YVp5&A*?5W3Qh%xG~Uz;qnHE?LIBQLUGQ*e`0eA@&JC|0rKX&jsTa7vk*TMxS zhtK8|_Zq0V)(VxtViK#SJ0s{V0j8qnq*ufwSTNf-sPVj&#^@1mgXx($oC5ICkrLeJ zzKA?@rVHwr{gm%>aWK~)H_(b!J^+9PcaNQN5zUnMf|peut(zEqTy$A0q1kr9_d|mB zwV!|u9AgR?c-k2R#BRD^(JO5j%KhgffLKob_X62%5P|cy*xhB*Ci(;Y8bornQNTJ_ z^l>Z=2Tj*6-1{3)L3DClhf!4~@jZBj9K@^~9+a1kAKb%2Q?CWIS{@wdus%p2{+Rij z#n(lbL(O|MJRl8g5RADrd zhj&cc9Um7~D<5*BD_2WpUuJ&CKr6iLCPXw&4=;xgNLMb82FrYJ76;n%A)|hL5;|OW z(Gn@rZa$4qO`OKBtB;^KqzlIYWMG^sq zv|dp8hWB73(MZf}r;vc}2)22WgkYKAhc+ZaSV1@|2C+|sK7IO9($5dU|XfeFqfW$#~8BULX-1VG_ioqoAYmhQBG7hcF^x6%P<=Ty? zUdNj;g3-A&L3(zLUgJD~YP4wEsHmYKWn@GSD%gK(T|u$W91=U_`rR=R>(hM0i6&wg z8Lnoqt_#48A>%l59hM$JXVWZyl8AG*(XSbo*EahXDWc7BS+AM25~L9Nv-I! z&XI-#SA`vViPdqz&?bi_!5{aqCUU^IdkT9c7XvzJ#?fM9t;Jt*knxL)iuP2kO3TXr zhcXcJd%BE|`GKta6!0eF0FU-NgLcFB^z>oC&f7g;<1rF6PQBLa?APJx^B*3-hxutg zDdN0^7lQWY#n0H4OK3p8Rr@icfvAw;XUt?9Vvg)bmunP-<%u^2>{G;;IF6g!c})YK zopVa6K5K>0Oa8{r0c`CgLc68_>&o`TX6K#rwIH;(A3uKoj1k~Hbi)$Q$Ym8Xbgz@kH>DEKMM-JnrHdA4jg!VB;n=dg>5Gf1gbNKBv9=J zQv*LoGX=LKaW6(s1JWLy2-#ivR=q_-eiIlRgfpf~|Bb9>9>iy7`aP4%m43Z8;--g9&u=Z5|g@tDu-Ny1(25baUr< z)1+$i&*R-nnwrvp@|JB~P*?~MrW(Ua4=}_Lo0)0X79J7NbGnEkyp3GGm(z%*g(|sC zVkmN=z^IEVIz9_&3rUwJ4wc`Z4VUdi7!JHGPRp`lEm@1SWx4 zz-$eP-^1eSz{toJ7nslquH18KmXehvybQ;?AC+@ZwgbGV?#o~DdMX5(%))K_wPO5%fov6#^=XI zhJs2QRQYp9uKNdYh4KFn6i{GINl95{@&^O(j-d^_?OA6dY3_qfLj3oB<>le>#zQl2 zF#gulacR^LHzeRpW9?u%kkKNwD~juhaH<<{wGMSN@h|APkf-MK9} z!d14NBT7aS89rPey$)u9F^wMwm7OHxtb-lTSCto?FAtp`!F0$gslDEMR!K$WcPfW9 z`O`t9eCF|FML;GFNYY?ZcsQYb1*hPQf)Rg@{{Bm?&422%q(N!W!p#<@k`&~d1yr}2 z{7l$$SWaAc|CS-i06*gGfEuCN`wilI#?D74Fk#Ys)UXKZf8(=_-ZK5p6?oT*ii$on zqrMKIrl_ohl*a;C(lwa`;apa+JMW z*+ZN8K*P@;5g3cAgFA*s(-RC8_fAeo|F}`cU9s-@x{ia>HO*w% z$T#g8JXyny@NeeI9#mWU_nDY5X$SxYu>>bj9f7@n_TDJ~!C>kwhBi7PtjuQ-bfq6}5Ax@ZS#;5@b}z>lmhEfUp$vY* zg%OWe(jBtZP#ZQw%hoRxeRnR|0!azw01c!$;_ZFTUiSP%y+=q=>e(?>S}+YQh!sKkHNi82=79yZY<6eq1gEJV=&`3r#^tJ9%IfXh*T%w zFPnpW-PHv8NjWF|gjUbym1ABpA^fobwcHBPQM>RVKy_iv{4ydjYh>ut?66aQXd{yq z5@GRO)>|HNLiagr&I~zPVS|*HHZr4OPT=S=5Bg{ER)G6zmxf7_Pg4$Imj3&ZBj)E5 zs>qzG2wU{PH6wx>K3k;vnemrOs`UAy__eQxLOe)a{UrkOXj5+M2{1wo0f5pI((y}! zj6<{W!|x|3=MD2Gt9&)z~?} zky294f$mbV)iDc5W6ikb9N7nljx?Ar0d8|PY7inJ~@^UVs!V}zFZ6K6$Tuanm zlgyPW+7KO49dh`ibyL4gO}rzo&E@3-_sW8G1NXLJ>@As3dg4x@Tv>hJpIw}HU7L)M zAI`6MR6!jCN_cTZ^$(z;izd8Dr5mEz6)y66Gp(?R0i-i$uMylmWz|g%If>dDRkI`n zIqt4!K)=zAQo4l^xLM~Yc-yw#Y!*E3x6^*s)?D`%)R>fCKWp2FTbSvwqNa(MXC*DT zR?{I%A}=pxs=srwjsnq6zRq&ydzEJJ`4u=UoOjeW z9Joh-(E-Mf3Ws%l#UPSWx7)h6wMn$;d%i!PzCd=3M2P8trKLp}L<0L)psnkEA3)XW zdjaH&SAnzu>PyZXW?kSHvNkUp`L&x0oBaa&U*!hGnxKD6(#sKWnRYcJS$%0`!mRA6{du+-NfBk8k z#ikze#37$AU6Iw&vn`0d6GlwU{+=QhgeB0ljFqUSPOdVhXWY^fD#&Jc^{_a? z7gEfoXNq*heT$ro;6!BP+(2Pe(rPvC-yC{rX(b37QQ zVUoW8jqjiz5eFfeq-`>~7N(E<`0JYhp}n|6lO=@fQ#~C}WsySL`?*&Vn{9Aj=a%X@ z*V1tgFtTZ$TLw`SB>|xPe`IX5kYG zs*Jc4_w}qKje?fs%M-)+c*{rqh}iH_N2^$cAO)aEDD+AXQ+z#_jZfM$-HF{<+Um$Z(84AXrRU96zijS^$vj0E)tP5l7)h;S+0% zNTInMH;ex!mA* z1pwA!V6G5gv3=5YRQQ?SMQ{wOYnT-qA320BtnOTqx!%O&bOVp+xYc)L1+T>jQ~3oO z04}-0_bLtrRvcPdsK6M%;qe{0yIVZ@4w*)Z(_>2Z&sl;%CgZY@l9=Bs(;G5j7pv=f z*=M=tVY@`_EqZX?#=W4U_1npV^*tBfJ5<;8H&`NnD{2HWe zCKfWq@{)~c?nUUDh9C{p^oVGWz9Oj~HX$uL;h#CC^2^rpf>;Y6Ha5CU&Lo`TFJE4l z#lhL*NsRqR$)!3(6mj?C^Ha`9W_|+C+aH4kc5S{1!0x+U+)V7vXp=-g9@Uk{vbc`Z zoV^X0A;_U@3QEK6+EMXICkYQ7W{HTLj0d(?SEcf+PVa%d&y5+!!{Ul;sOAw1OFZmw z%77 zZRN(o1Jgmh{M9VF_c`4vD*HJ;ES&uE*BdkiC8fZ{BeVG$Qyb9Tn{y@w?LRPSpaUj_ z{|pbCfF^ihy59)LY&Okc_U!(2DaDhu9O^RploG-d|Mnm&qJ-wH#;T<@C4}m#sbn3a zEKT#ffFdZ&h2_>_*+ZLQX~WoI2@s>VsU$0ARB4)Ls^Epw>lUiMZ8_193uwLke@^b< zoj-m`<8<6gP(KGVAJt&A4b;2MySWkEjvK$TFVrgaKH1uqpWSbgzToZYn>ywF6H(&K z7Kxujv(xzz(x?z>(!+s+0SU5qaKPA4js!~k!VVDzI>W{HeYD1@ zz;uRF4+@vV>tLtbu?~s%sc>9eocrZp$V0+*>EH#abp z)EDo6I<#;ZJ5J57lel^*DJeaJYiI7eySsRotT4uK&cD(hV$hd6^%qwpC0G6bOo)BE z-W*?rX@D;0$<9W;4a7HA3~PlLY9b=5laM8%XU?TN{EEaSvpE%*Vhm^0T$C%`x2FIq z!TpmH^Th_+GM#2tchR({1UmH^F#F7+`?IhxG#~)7rltngr^9lR>iqmXncs_(YuN>J zWTb~{we|l^OrVMo$4LhC%JWI1ww>fy7B$%a!N-4&@FU-<0Bkm#97HB#pw(o~^lJUI z8Us$na59pA$gxs+sG11X-J*J3wv)x_lSI)K#fyrI5wgZ4eSM#^$1W}|ic3ogCpkK< z%Iy_ZRM@3bwAwv6IvF4Jy|2BVXkU%-S=*o#tp z*SGenZYa#n<#q-P(2jW;I?w&iQt*TC_+>Bb|Z>E?QDLq#L9J1VOq> z8bJk=4i~TpK@^Y_P`U&}k(4k90nu|!pXdF?`^WjlIe%>T7_#?bt~u{}-q-c3i!>2_`I>lnzPgfJUnu4Ap^e??BLoP!2zz zXlk4dCDln0zQ?DKpVkIj1cwr4%SDp`vks#^Qi{U9)eS}lbBXVh7Tf#O^Yj{?Ipz!W52&D zqh0-7w87de32|moK0ZE}58D&d6bB!t{zq@H`(o`vC`fUBfUy`Z2V7dLmT za_qSqW~*_GLAdu{7SpFu&yrG4dlH}%#+ z+dmup&W>ko`+*tGRITM8;#2*(`|8B=)nWVYcfg(W_4UC>#sYp&zdJ6GWmQ#)x9=@8 zLCS?3xOwY9Cn40fCHnU5Ta!jt!)Ny&4HWTY$5W44irird!5;RSteU8j2g)keDNktu zWq|_oAEmsVz{6S*`uPccFUKAq1IyHw-dpjh%>(Ho*n=cv*p_PLy6hhnf43W)BHp;v3UGK;H|B&s zX9cE!H&1Wpi+c-m_l2_a%RQUbwl5~^W{V9!Uvtu3&7JX9DnhZ{s&+^*wJ$iQdNZN~ zKHJgr)zK>3{U(?3(rbUgk<9qrEIvLS$z8BXAHox$3O-|Ip<$`YO1Rku0(G~&%O?1V zSFo*ZHjbVo{^psHVLI=aealo2|14V@RimoDdPLVM`qy;Gc^DcF`zD7UFgG(#&Bv9j zss8u-iZR8X2LMdG~_Xh(N&Ef(c)(E!@JQ zW%1IWlnvkOb2p2Yg`lDL+q+xGEBq#@XMx?*qU{FpfKR4xr5d!&bL)35Kct8>-uk0< zjLYnMW*jx!e!Vf{P?vs6v(EAy01tJ%BS2iSWsCL+h-%-74hixX-N6gq!^fmCP3Ice z@mjYw-{5aN)0H~;37RXcx*(o0W4Xd`0l%=w>?@!L^waToWm&fuZ$S0m5gHKjD1D25 zYsVuq@cg}kseF0unhY6KhOetZhi!owCzdpX6N*3&njXuH6Ml)slurNpW(V79c?t5ZMEPK06RHf%fiZvA9QEJ-s7 zx)0^TyABqb|bXk8-;7NgFe|yYGvA@xk4@D-uhjeklrl!7S`Y#}|~?q^@B4LLp&! zK8lB&+aV=h-e~{PK~YTYOh5DZ-^B{_+~3GT@qoL|8#}6cSW${n8%n8KK~7%*|J9pr z?n0{28aWoay&I10;P&4dt~PONw4p`!L#4&S@%Y9T{-srTV)cVleJqP>3A z_6`&`<5S~@M0B{Ztm7&8tW_Lrv}|H(`6R>xORQnp8n9^}h%Of;pUH`=e2X*j-S$Cg zwvei@ufU~D|HQ5O9)>bDX!->s9PWzT#JTxgBs-l#eM+#EA3g*#dr@lXknSGgQ}d`z zxhqq<-*eTRN(c_<=grhNs%We8N`X? zL>dYx1qqmA^KqYODHR`BME=SjOrvKTbV@PhoUs1ShgERliA)SubTU%Z{0VscAVVv{ zl)+9`Wp&1z)IO!BUwZrN$e+cF_j+@MYeg_gOwF+6oC?=wzE43r~K2y@zM_E~3v8>wh>tQG#Fko<@nXzIS!Z z(;$gVZm_RGJu%H*f1Sc({LHr#K-*|+d&@kwtghcSEu40sd^TDN1p^#kGc;fjE`)+k zA(W%oX`T303$yD)?*_>A0kqC2>D133{PCN9#^NAA*}M_K(^<$Xi1N_DAhvX_g-`MQ zI$nA< zj6_`~t-!8HJOf!CQROu?bql7n24@~Cg zUF@JOoAn&KH(eL+mdr|6vHaS?4Fr+wm2Rwe8)83mY6rcNqwNEBYX)^~AA`nM7TLqh zVxqmJk>k%6E$s@6#+99((B&87Ym$bedwILnNZKz>e3gHI%&$5 zHF9b+%-o*?Dv=5byEjZ!4%|Tp#I&@fb zjvb{I6G@^J!%o_w4Jco>C4mozDqX_7Af62#DaN|wk-v3)Lp8d*ld+9%A)QTY9^W}n zbKu3C_xKqECm)=q8vFZd;DwS?(w#kW-RV(6BIt|jU--> zh^~PDBih=v9&LHfsE#Op)pMjyP37ItJPi##P^vCF^-wCnnhp8>PRIAb<6P@{aW)fY zUzZJ;JB3oYUpU}FlIl~6W(-kbd1gk}9IXJGHl8A?k#1lm`8kwr(J=#WG#rM}+&m|Al9czCzR7x%SbrGK85j;hfxvmb_6E)u+ zy=;8_6)go@%ITiTbsJWGxP45CfOePbe6W@CNPNK*#j8uF;UmQ9c&753e4nFfqts)) z3Mun-jrN5L&ma7-y!3E|N}%C|7Un~enN4dD#3g&>w)T~W#!gq-8%;_0?G439;WBs_jOH7ASo?XyZNs0b?`vqs2 zVir;bqdsWDhb~poxSw0!jYy$J_Qo-8NJl-2t&Y{KNKna|AxF7>urrg4)G@`hlcqd7gcG? zq3(rK);e?!AUk8ghzVX=f%npCF{EdE&$fd1?kuCk7Fy$RN@Q4{|v9N7v52W^y77LfPKUJ;q6+a(cZeR)NdlmlE|}-)EOUWWaX_k<+?*l$!rDe$RO{K098kH&5O=Ck0z+9 zhcJHA6Gu&O#Q#I(tttV2;p_$?36_aJwL4@*{QCz7C(=`MXNeSyl2@y2-&bhICZ}(4 zb|`r(q4Es+lyA}$K|EbpdOFp-r_^A!pdGNN9FPAFiM`j=(+h`gyfXs-C71^yLu)Jf zkm55sIvR=n^I6e2cY#K(B;Y!NzUHe6Hg}jji%HvYr4eN@{Z|>vdB_tr!uu=uJ#?E% zXF|LOfE1cX1JhSY!k|uUpO_2%9Vk9bswZP^Uu+?!nt!WsfxVUpqRQ@nhOn?t2On-b z0gWeMhK+*|nbDCE;V(zGU!O`s@FEuw&n&yI|0*C6bfEu5Qgfu&pvomilBy65KY$3N zkZg$94PGfE(w2-32%YUI#Xq<+iQqhVhGyQ8i{e*@J?c51BGRQwx$t7Y z?b~FZNLe${%~+TYJ~udVktC!taJX#K80W*+kQ3jF6>=I{SK4Ra(v zhG4#T0k2Oik=6lGpYMhq%DK9_B0)v5FH8HDi=IBU8`0#Ung_8jEMdZ@&6mqPH;Vq@ z*iT151)UN$BHyb>noZD8bvK8+6TcT1UvUsuqm6661r^_h8IqoSa(H03L}}hR(pSM% zy>%=-%u6@tBV+Y{rT)`CA_9QIpJzZq;ZShvzns7C*!Z|^o_R>nfJC^Ho{)i zCv{b)nJINSrEH-5JIy-;0d)RialXzEkO;dAPX= z+ZMD#PM2_&j*o*#NMb^lNJ&UkuH3rM`d&gX94(*(6;l)1|1$K+d%>q+Q?J#Xp|-a( ze9v6vvHSF?&eBlb2xyMx(aN#eY3#qH@ije!2FavqJA5nOlMaV(xp%Jp`%V2Den zQ1Z_ARu4}g&V^$z=Q8ULIpj}2g%0qpB>i+6%Dr~&T4$jz=tySj9R@MeSUjjlaOHa*EGp~&FIRu-WNzBzb*TJbh*;@^sK#G^4qv|q#Y`Wt&t%Rb zd`PO+(Z|21w;)DP#(#UR2c#Fge0;XB*&qD5!yYR}EQ%Yc`Hj%{d9dE(d~zSZ^J;FH z!65yaPh!1(zQ45e%uxkN0Ha*>6~IP^V@x=8TW@!$-q9?~E$%lgxwH4$3FJkI3sn7P z%UEXjI$A^O?`D6HCObJf8A(C`dcH33yY1BTTetD#jE#-$NROV@n$$&SUl|4Y4!s@iAP^lw+cOQPrdNNd|R-ThwfPHK4ixiiJ@dV2udjS>SGB&{)y7OF4F&qobVPZ6qw<@CgWyr%qvY@bU$O8 zJJI%nJuR9CV=cup@tI&N;y{I?WgOL%oz~3ykixAm;<7NIGL1hQ-DXjLP1w`FQ>!<_ zX^WsV=OKYQXJmfivLjhGn&u$>y!nA(l^xfUCM%TH#F7HX9jkljbVCFW!6UdOgmF*Pn_eED=)>T0{ZeOFs=Js~xO1 zNSnAuXosfw=+`9-Ge^(2D&+quSj&tY#^qAz1x4X?edn6hmQMjjoH)E? zA@qf^x;4~U`1Y}A{R~<(WwTp-^gOxB=Dk<&uk-0L{)&mL=W|8%7Fu3~FMSsHg-gxI z$-6&Tnkl;)>AKN2)+{YYRw9x{+e zG5tIEc<-1SppV4r-_C>OA}RM}2y!M^tAex!zfV~O9pk@c27*}o1wJ%zD7LC(1B{mS z)u@)f>kkc1Lx+DrpOAi?xSi#CpZEG#VdHGQ^RRYdPX(1MiZ@4EP?DA>$5`R$0xiZr ztL|TDe*B3b{PQehwTL#`v-L7AK_%3jMFRcI$51kYppI;uJh7qdOYE@x#MA4sP3O;7 zf4ImK#OMKj;8XxyQg@*AP|9ew6|496Pk~57Qs0rH{W0(^+x$O`ZMhEY6B|Q|)a`rUlZg zhSc*n>&yD^^lF=L&5#oPNse}Hw81M(u>Ab#|3Ec*r!)G`P+|O*RS;z>Mw#hDdG-Y8 zNgbfG4_HCNbfQptDoIs|pcAqOq4 zql}6D;n?oJ!Q?aJ&Bk(c|4x{DqJ0W}uge`xijcFo6Y?a(^bPUy(JX*oISy5@w|L8GE8gdxVNNr2Z4#$c=2K!%FL;W7 zQcUthrgRsZDt>2KLeAH{P|9Rp2Nn)Cyo3u58iBC|b3GcnYLX%%)9!_(!z#AfWR!pM z2JM4<3K!aTe3gFhhZ5AxC|44BZFtyxsM$`f0j=&w)=xivl}b4KP~|6EO<9`US^Xaf z;IX%0^&%@^);h1U{k#AHPdCtNJ24ZF*<0=VNTxA;=iHUAiNYMw_e6o}zGnz4+v@lh%$>yn}3%!NW zf4@}6Ct08>l!hS_}Kk*_N_nkM04 zm%~%WEiyfK2|lVmnBm(|1(|)4sVo;m$77sX2SlHfkwk`A>G|uJM&ZpmgY<&}BC0VW zRKCkJ0(K5MIvN)*8~Uo|IkuAts!}b(;POsL36m`Qg*PeA<)f45tQ@Xp{Bn?8}grUjeIz3}LihWG2$tXZbP>mfc$PtNA%Xf1o&;OZD)Q4^j=*qP zLqof=shVrvY5#x%Cep0vCy%qD#yy_~bo9kHEv_%VJhE0x zt^2*c7+kQ9KW2ML*9=)SonMTYR5oAEkOV`{m3As!+l?a5zApJ*?Mn^U6W{+hxb{I0 zdE*? zzM<|mf;j6PT zZEU>)O0y1T_;ar$*Ik978WZs-Xu3%dl*FZ^qVBgVuYIn&*c?{8=lqa8w+!z?^Gz?i z%)Ux2QFLl{HmbIDlW%NntiQj134G^ItK5G59f7}obv*f8H2A=sikdo4(u48u{;j|0 z;NX+OpEPKhmHoYO9n~MkA{2=xQ5U6MROA63b$P7t+EvS0BrBaPEsb7_knUdiXpJ{i zyLLAl^Zwy63#~rbsFEXxaD5s#;sb(mI0)N3yUXB|4Jn z_Dk=XpKh+MzzctZ{=w#OXW`19U&}z4J%;XeC({>Vo<(4WK=L#q{{5Ao8~1N%1&&9Y zz%rGEFx=PEse?9lu8w3qmg^?hT`p_5 zsUj|&v3u2*o5G<_x7ZeN88Q*q76Lx5!1pCwdUdk147t?E)fAPNuV?N;&+z0mD3W_$ zJH0Cypt%1_x%Snu>r1Q4=Tvp)A<&zIq<2aKjMl*6C*2S5^V8a!PEgnw7dL2aHYVK} zeC*P6{SDO|tE%DT`ratx`lQ9Vi!ae?&nL{Yb0Xxkfzj}Bdh;hI>XtQjsO~2CfqTP` zYu6_ST*xXyg@l2UvunIEWjlNEI;AX5=&c{JW(e0vAvSoYc&tZy9ZjW5zY%9mupxv4f3@nwE}-Zz3ie5|fzFeVMq zDf6ffP5^WTlt8wHh=OQp+Es=g$ei8MreBXautUJXPK|X(Xmn@~yr@Lb<+ZgbFJHdA z_C$vH90(6UZVkLYBoed$DXZgMwgBTHegnkf_$G$@-m2J>Pl#v&A_zWWrcM73k|0t? z_?OqDJ2T(9nSt7AV%`q*mR^pg3L!wYdaS?!a#rtl=N@+ia0p%C}AqZiII3tgkPPXmGVtt#%&ErkFy(UBEQ3dL0A~zBp+~x@f)^Y_$G3yK|st;SiO(D&` zV7Z_><3!4mfm_sAYimkbuVQ`GnPemTE$W=4pXhy!Ap6^;m7TBSmwa8N8JgKM^Yb-5 zch>9Z0jMa0v}=zKO?3cd;8?*B3kbS~D`7eaW?^9g437kco&cR4`(gXSzLlK+) zHt#iIVW~@QL>tJ-Fjvr8QqLtjHHgSzh$RW_YF!jB0o?xh!BFoE1=uI3*j6fxB*H&rL|S|p2G0ecXn;WNMmE&`d~2hFb~LKTFCJN}%WY;26SD&GG1>Jb>AFc4l3ng#H0 zh+74P`6?;lQe63l0}sRrd?C=k$cX=AD?*&$Tjq_SH z84p#Ae#Wf!E`F>1QoKTZkG*BKuE0ufvh4ytyx$=Y$K@*sP~%=^4QbVDNK~ob=k_Z= zj+yu!0P&;c=dV|%oL4k5Lg~owPhhTI=H+Fumym|}5vq;s$kK%SAA3V(Finn$@xYl> z>j+`*P+(ey!w$r>GA19CL&E5ELGz`3tn5 z)mY2M8`5pXpmzH-QGFr#1ZxcVEf*syq`;_oZ$xS-aqF+<(>tpZUhJNjczfaF4tI=_ zt4}719u~`)t>^H0_^3e>=F2iGbHM>;_prI3;l5s@qWRP28%3BH{#Z|~4T`x;gqii3 z9i^0~c0xwdGrZq?%q~e@Tzk@uMC#~%KKg`_SWq1k?9D_dKY;dD%}x=Dpd!W1uUjU= z^yA(o1a!fGU4mH8bE|7D)w)0p9{N&aEg70;3gl0{$yGcWew$WDr`~x;)lq-$u5aUE z@99#izD*5rabG8MoZtD%x{kQh5hDpV`QG#b|58Vl5knpl)IfjU!@Q_L8|XR8T1&Wn zr0Uh~o$m;3Z;Zhb5l1f)Tq+Jf-R{G>erUoIjNwZG=E<;MfOwDjE9t=$6;1oq(az&{ z{SGO2TMGr#u5tg`>EY4Md6FQQjWiDWPkR)2d<7zaPO?urI<5R3P##B$=ILhV3|uwA zq}p-zAzIHo{DTK>hdqpN*(8#|Y8N*zAjLa_%)kuI`ufkYnGJ?hQtBdJO#h{|Yx+j^ zJCv6WCVSMug@v52CDLrLlo0E}!tNWFW)XQgg5ab_TK;)cHto+@S~n5XOEFadL)rIh zP~x~1we{gq6kZH%SI zK1IUhGDy2|OYT6whDvHr>L_6BW3c=8rOl(vQaTi$1E{X#T$LO*Vhx#0MKMCZ`Rp%o zrR7sSZT}Y2#qO=tlNS#vwJTOvxy?AfX_@luu$%0OU7%$HbJqD!flW@}r#eLGhON>IXF+}z$`%TySythr7(}^{l!)4K4iHauBY%OCx@C=WB zo@M{sJ6Y3w^z+UAZDG-+pS~s_vNcArS=xN$zqe{~U5t6(`=Ok<+XjsjXizkG5*%<# zomNW=c}Awh6b+2;2VSndirwgW$fRO@(6SEec-=Hobijp3a4;~6^%zk=SZ6;U?IdfeKJopzV^TLvpjJ&)V} ze6yNY@^$5eEiox9+SeWG%(gy$F4(pH&&XL8=muylw%P^c>P_h@&~$KZ}MbH%{}k~60c#_o#rQ6Nzkbusa^`i7xO%D zxg|crRDFl*R{o^gXoA}nv%u^+(us_3OnzPwuR{UkdqBeRC(1MlhTyq_-hxo!vvPRr@`8tz4*pY$~8VU9XDxQNrx7_ z1ckw8JzXlXKcPuX1eVlgQ3aw7N7DFqnh(k5dgZ6Ah7tkeihC(tqdnj$NR{#t^;g z7$Qy@2jTZILD$H_2X;@9v~0}|(S-AOYZI83zE;Mfwllg>yC3NPeVEVN&Q%;8x&Iuv zc~!gEH=h`p)+1My0d8@$Sm@CQNv2$6?p|Uq%G2TL-y3N9pKcL(!l`dRRUULlXSnUW&ntlqCXgr;xf~=f`8{yeIp^S3eGp@?_oy9aexcn_Iyckps?=s)qUl7G;*>veH>ln$xh@Nw?x8;$#WkI@7EV&ApxNp(!i=dIMgyfO@pk1 z^rzcc?)k35PT5&)>Mj1a~OW7Pa3D=Q;W^u%dm=3ie-PM7X4QRS+q z8iaVO=NC`5QPI1+V8%_PF&fgmlaV1hfLjQPiKpOLtkx<=t9^TPP%zLmSH4iuPA5Q? zas5G2Q+p}|p=?P;*I%i#4AkT3ta-tr7E7Dc zX^X0ATNC7i4=^@w2p|*>AEt1Td%pbMtM@tpIwM_kbGMhFkg7m`_2C-%Y#f*Lq=>(OiU#GT6p%16A5xOHZ$|my9-8+U(l2ty+ z0Rt>vz}Tf1fEe6`{LJ-T*4D=<{}o>FJ7Uy2{2;eUy!q_zb^p0Ww#3AxYmY<~oasqW zF1wIo#NS7s>vfs?_Em8_ft-joroEm9aVfN!kg~eq2uWCF=%)p{qVUsYAx&F0I#2Pq zTy`v&M?^(MrQyPo-$Up^{IH`PG`bw2hhXY}`Gc`XKi3){xfA9G5?BU+_6Cv_nV!^u ziUnp59c(cKE&XqZMg5OIt__cp+;Em14Yo9!de6n&`H)>u=}loR|ozjnFE1TLPJuf+W}hOtpD!n%pn~XZhnB7~S;00vz|IsVF#nwcK;gYO((l zJ<6Y2@#XJNF^(+=$7Nno6U4g-H^f)T;@t9_%XIWseRQ+MTg45V(HhQ(+YlAeHtK3; z;afR3(5ehZt{1{+qj149&FLv&_{U&HQx2zRin zY>SunpY>Zf&NHN;ms`ZJ)-D6T1ph%T!G}96-wn;oG_GAc0~1~&Uwz#Va&d8ipbzVz zLnILaC-xi*Zed|z7?SI_w*L3R`#W|qU)*aPiHUZ{A4{S0{Q{mivz}+bCTzJh)V*8F4*C!~b{GB_SaJ2OL*;fNg+3j5h2|EQK#5anyT! zkc6SF$Z$~;7k4wLQx$>Azr2~0n4YN36G>ivUN z9rc_ViI^_O1|X%R3ITrlT2d06^!{cIfC$c%qq0i>Um#3!wQ$+^03g7Zk?Z8+<7?TU zGCvw}Qh4+8{ngv|U=A-bAJiHq55wbt!KV_CdAS1l3vpkbvrD2}8%1sfq)sLoQjQI` z*zQ_Eeg|cM$SwaL7ak^Un5kslzer!r%R_yk3{`LO)>{@ARcBS&N}Wr&zTDy@U^lr- z5p+)A{2)rOmqkGS0wAY>kVP1CdRJY2pwQ$2OjJaM%IZCr3pw_)f>%1GpPrf~Y6}}; zg;CvmeMf&tP=hdqVJbtf0umW#KJ|J+LkUDHNR1s6IW8p>Cr?&NHU2dYzwwh6--Rc^ zC=gTBaC>hlAkkh@X~gG+BAkMKaZc3cl(@ruHz8GZhnl58jz8c_hB<%H>p`mQL1*^h zUr9nXk&jEckuI8>RIX9C{L7mK?~Zg|q8ERR5CrtUAp zBjG=1r#mN@K0C9!-*EN(#AVAC4(n$lyJOWnxMCmsds!mUYWH`3tdX?aq)39d65qXP z>0GH}Y(;TWZ$Xzh9NiGs2nv0UC)HQ6;D?}UTa2d+(Bq`bp{$D=Jk!g-ZU126=nUK^*PiblM{G&(Sql0qK`C5YY$~Pq0gGa}KL9rPp%j~Xk@F z5sz7Q`}Fn{ZYjRwklePcTdp_o-s9uDZys5TX)J2SbnXyMwL=Y20fcz-!Pu0Tl52gm zKu(*I{u+EoNkno?NqhvDA!HuJqrkK6DWEZV!;WW{3Z}<93Mn9dc@6%ab#OuI*m>D(b`%c?&){@(Kd9!Yo5R%&615)E1Ou znpZgGw(Gm!nDjp(OdxM%D)jxO@`+uzwADChCTeMU0_3zbnh@?H>mX1u0OEgTwfX2F zdL|}-|IgJ_)OM`z)Y({`vrHZd)sjQa`&97z{!AEih>xvX(ju9fqr7sU|0EcOhm3yM zWjf|mrj!-b&^IN7%rh#Lj=ggRJ@lkcB}uVx_yCDWC#mC@l$`wg$c%bn(Ws^)zaweW zXQa;so>}7Q-{*aV1KzUdN(Cktb=;+lQ}p^ZeSyaAdfv6z%9iPGNdD&>9Ey%Gg21GU zD0k5zJj|v2phuWA>CcEZW$>Xs5Tf7}C|gju`)Z~!C93li83Bs)RR?5EsK#jCn4)Ea zd?mam5~g}V%Tkk~oEZsUMbv$=;_$MS>%0P(Ic;f-1a;vxC=dS(e%)nf3%N9FTV=uQR(%oJb zZ|%uGmqli^v}kc1m3Q-XQOHA!JqUEWJj_j~^_9Y7N=t1huGV__OQf9#jsRbF;$RDr zr8S<@r<)<+E=<3X)Vlc|XnPRxgWPuJ%0N<)NXAuGcj7Zrp2$Y)@2X(v@JdLN=&dk? zi=IMCHRu(^d>g|yD73AtwM{q_h^$o=Da|YjTxu^GDL+YbyLx^xx$5u7&A-zGED~mx zs2-tv1Bo8T^-oe`?n)JfAt}7yHB>xkR{wxHO9bpb5 z_vA{UxN0j?Z}jj5vK?SVO@+Bw(BZ)8iu)bl-?vU0?mI2eAcjf2t|6gH;kw{;f^FzHCnKZ9pS7rrDd zXi_MVkyU`?{F9@@dCT1T`aX(5;Ze?`_67nS7v(xeS1)WUgIm1@r)*~OcCw<&i^0eA zD3aW%zp2Uim&A3=yaL`les~VrS{V6+@8a3eQ+GjTB`wXJT&h+!PH8M*Q!-WOgQMVS*@Fk+DQJUc%p2pB7q*1nm@oCZv+~RE)X>;DFK(Nc(RZr?&+G_GhW%0G&L0;m|u0HIPfddj#>L-xxiPr5EnLWSPWRB-CK?A=T72 zt0D;8q-VxK&i$RPJ)jKhM22HB4Q!Ry1WPhKxRV|LAx-;*2gwxQ= zXupXn#;dtMxr;C|Fyt@&3wC_vyQtTMtZ!u=a-@yY7Eym_oM8$d4G^wK4u6!r)RuFc zqTu@B1jF0;*d?9#vv%xn#i_|U!GFN1=!4066?A1#XPFvB0K;T(F2FI*JBhQi@9hb0?ZFD-nnaiRzdJlN3e zW9clu%d?hl|4*j4A!ULs?BXzB0s`z4iLU5G^bsDxbPYoNHJyB+;7>Omes-8UsT1r9 zD8A}pc1hDc7JL7T5z)t&bMCMYs%BU^Y5Y1D?8TyJu>YEd>Zg0=A3NGLKH1zYQxTi#LKS+EoyECqaSdGW0Cs%9nSz6 zLz(Su0W^q+>XLw|7@H@)C(y_k){2e3q$wu*A;lF{RN|Ava={N>?jQRtn)dzRE{BfG zn?%cB7wnFuEky;D{R=1v&pBb{--y&LM`deMz`)JB^`Rrq$XSBme~~9R*)okRQ-pDr zUyDC1JLudX#DPHlJb@cYX{NXXcbC3Wpzc#=u7rEHrc(X(uluUn&gAt8QlC_m7VK~{ zKGoOt`{RW@8j>_+{0`-hfSAV%K*=bA%s@29`CCCF=nxlEWUwVrK#>AWeHBef8}C~+ zar1(ii{c!r-|!t>n~lz#Sl(s;%1|rY(Z0#h<^AuCF&_p6fzQ1qp;GaI&c+#m?Obo% zU7~>WsMGS1{DS9yb}}De22Mr=&dv|&Ih(6JG44UfJ=@=^ck6TBTKWg(q5AtPQ0A2N ztmBWL9{z4fuDi$%(&Gx3T}UUj?>q8>0EOb)LT7)T`u`PJtn!pHrAIElT1?)WR`$3F zUS`)P&2hGx3`cgG@lR5SGvdhLS;oglwn^lRk%Kg*tk%BH_gxRckU6iheE?swB5im@Imdhh{n!6mkoV^DEJ_^H#E zJ#iQLAJ?A+krs|+$VRG&CRy84J~(qqd3{fs%}_!T`Y6)%!=u?dN@me2?8ONqhQ^jX zkL81BU|{Iwm)~%2zx+;s%xlN2(b3Tvn48P3??5qkCO^R+dFgBiQXcjgU_ zH#qOpel0eSa=jY%#}i(U32CvCMSILRi?n{>4>tNKyFZa+2cMT{xmt*k(|E6l}96yNJ( z$l-TT;ushhhA%4l2~47; z*XC~4aD~OW?A;)g;17E%#}-+v_8hg_$yytMoEAL_BA_+!g-~^%>1Pc%9`hbP;uyw($=={{643zrW?NiB zS{Z-t+|`h1cw39GQSBNvEg9Q@G3Ks|ZP_pL^es^}UYsYYL&GH(C}dCFvxi4|H`=lU z14C?^%|tW)U*V$M+VA}wslrb0m?4x?Wc{byPD>;*Ll+Tdy$AKpy`#Zft0047I*|R} zL7l%}r)7X?4MasT3WwnPCXT6*LbWp8{eauPAjzEa7}O8) z?ure6=9+JRe1`vZdwT_vsu{-^_u6+uQXAeYui!C!sm9c1K!O2CDbv8Y7qu_r92rs>zisD_g-&qIY0^^Ot4)iE*NIP6f73wZ-@ zm8}2(%(eyW#yuY!(+98;M#j_cS^g92kiu$xy0~`v{t>CXynMA~oBxDw4lEJ~#`qqH zXZ8in9?)d;V)_GrHgEGbk6*z^HBNY_G(T>}VVj{K8Ik?lkP|Oz9GH&G-YHb2eVt5i z!Hx}PZNXqNU(!bMEHzRsw}7jxQ?7D{ zRm+nUtnz+%xTLt)wmWBh!~W>U3YcB$0D@U=d;aQ}52i-Lj!O=DqI%(OlnwyHUsh8V z!+asF!rsyGv(Jm(lds)`3AiO|E`6$2Qphh@xH(ES%!o7ePKQg3H~euZD-2H0fU3t#^IOFv9NIGwCA1tcL;+dES2`>!(e3KVLMK*UUV38P_mx zYHebp(<`0U0hs#G=hFF_58`H~{K0pJXi1PLUPvqcF=c++`{%HfZx5}p?#-Kc9r4uM z<>lqpU#B|HZj2Nu1GLR#0q{qe#o^J~lQjfU2KgY2S&2g|Nx#=suYQK{(5}xyvu3Pg zYKc5V4U?`h-@OqGqp*JUI~pX-5a{{OSv`3I`mAcw4bM1XgZC3d$1L3472G#Zn^5%m zl3XTQ6e0^PV}d9y8uXRJ+)9GA!!()3E0?pX?YY~}+Ik3~*^4Fra6h@1o{&Hy^zxgM z(2Flr@DgJVh0IyTtE}|&)_?z;?(LCD3WCe5 zAy~~!|LlpcPY=}o@J*@S7uI%?7`E>&}VIZ*NLw$7>r*l>(i|K(D{;` zft5zDKs_e^CjH@zjit@s@+KStX6F8fV} zbBN5;6L|Q(u)qwLI73DdD2hJA4l8bG$be{_3n6=>*Y?98Gg{X$3(&3mBZr6vO3%_V zdDy=)u*&%P>gnOfGWd^cYlZx`W;*Zx?z>NRx0W+1$#%G)>Nq0&iKG5&(x8WIY%(q1 z@J9j~KBP2}=rLLy)?ChiAo!IKeRe_K=qToe&-yya$xtUrFt|9648(g(qVP-W#@}?t z2+`nkoaj?sbByXHzKiGFQDr_;_I!jSGsbI5i-B95NS?r;igEe4-0ek?vG+Dq30H4#LmsLZu8{5s`(PDoSq(`hZ)r-{=YR80iF4a}(?(cu?rv^4&_GzhKc zNf0S})%1Q|#_&4w`#Bw4EMJ{D_uBO_^JIRbK*0oiKQHT#%+#T`Xg#b_Oyl+{elY=E zjs*?6mk^z7$~wL{d^75%1ZRV{GrE5T(_mZbNGodK^3i-6nMVo{!Q-0t_v^|f=j7 z<0sCwuS831{Cv-b^b#(BD2fGtYt89blGR-Mh3@@R|#IQ z%)<(7?7NCLUjC+%5V;B7AHy39dQ?M<$S=!n)Cj(crM!1`wcqPvVH7zfE6v-ZaF!vr zOWWAg#yuF$#}s?RCOU~CL1@E(E#O@FpTc0iIhb4;{NxobRm^RxN`9peRpu^VH&SEl z%L@5z^lhZVMMHdFbQYWhOeqha%zYQm)*Pv4e$O+2J47LK9uh5jm<+TdpSgegfBHJ_ zaH`|~?~963BzqoC86~609?8y1viD5(${s}$Duj-$2q`lZ*<_DnbL>4bj=eee%lE#o z`}+N^>%M<3|F}NRIiK-9ulMWye!ZU0huec4(eCO1z&#Gd zU)du7z>5x*IfuWga5VNL7b$krSR=KBrn4cx2pv!&gDkefv?yf7#OTB6$sQpU>UkTB z^Q_LB1KA}|*nsv9hRG@H$pE_W$H%JHlwneN*MstaU?5iJPC=2ejg=#Wqp!Pid?-shrv*2!;49=oe1cO^Z2fd#(IPrCAqBZ{$K;yd$5LyfD&<7MXyMeZ@x97xl|J4_LApZb1qS%g^CkTpx3IPd zs62+}nMG(N)v$2ZhI{to{EyJRVK2ezykmE9O#62MDxXe(V9!De&4V`?OS-&qXd&ng zyCcW<_U^5o)Cb65QxFnal@ZR)=M!R)D*e_VH_08|We<6@cQ)q=A~7*SWw(}(G=!7JrC_gYakLj3tEga zhIILy4(piNe7Zi*o&+L!@-*F1N?W{?@6Ae(AOmcakg5Ih_ppEcx`+w}p!SnZ6G#J{ z`A5wO2W)jI<5~3*7KC(!*%9!?hN_@E-HnO4gN)?iS!NGR;I%(BG6}D$Cb@mavl@5$ zK~CMwbo7jZDh`-fJzYyI{c|Q|c0_g(mI#7!rSNjQecsKz5yr}WPE?d`bI zJvl4m?-%w4{qa-?0f$_lZ{twdhvbm39W@@D;V~N4q<7vMDiT%2E3ol@mBYq`pBH1Y z`ok~)x_5oYKL@*wXEmMd6t%g)v;Br$m$_eR{Ph2v!i;{2k#JO6{tcZMFHZLndM_h* z`Ys2bte%jQ8JZZ43_gIpDrho$cJX_`BV{&W(Kzv6TWV32s5Pp@-&O{|0giRu1OSLe z|7iVD({SBwJq{Q(g|~EyJb`3=gO;6GGQSe*&Gr*xuIczdtw@W(g8^X39)V*V#GAkO z)L!e0v_Zz<$(GAIGY^no{w;t!g{{ zJB?hTA`g{C*y{F( z3BPK@a8g`MjuupL&j`x*)wplhaZ|cGD>&6xJZP5snuAK|H2GFr*9JgvpuB?ox3_!Y zzKwbVSg?e7+?IeH#19X5My9I$ds*zCeH}8{pk{lK4fx5p1vpm)Y~g~(Ko@pPLp}15 ztd!nRK2QAlOQE%Kzmmy*8aY64QmPU%1qAm&yB#zY74MPISklxf>Z?iOhJRRw=SE#F z_grjk3BkQp#uknR1if--PPx$Ah-k_*|9z|R4bR5`CC;-5*%W_%ivV+1H03gG=Y{QK z%%j}&{hLDNcS4T&sqMuH?5^B7KlM;k^K`va9Z$l;+gT@{>k@f*Ue~zCiEOwiG5hckX4x~ z0Pyh1-mK>{+a)LOVMAO+>s}j@l0~sg{MV7AUQvtF6#Yxm({GGC2h(49p8dY%D=<0e zZ|2(nHJ`fmS9?MK(*@3SX{Qy!v=mwgUyDn_q19K-KJ=luuoSdMoex7vo#N+qqIcQrJjP(;Ua0=)+B919oIg*(Rs?8QqVjq} z`t%Y%UOHSooJ~XaL|?CSH&moirx4nbTlHLatp8neW&2|87t_Z>=N`Fg2<3}WYX(mQ zt3MAoa^eG>6m*#0(^s}o)&J2?@qO$IW$smKtT=Fh^9O8dgJ0Qd#o(=nczmy?asfY! zRdE8-GA(}Sg_F@Y>HMQ8I(`^w)pCh25j!}JG7?=2G_F^VOR=_?6Wegt)XBs2%}r$( z>h=HoflgrhWcvvDx2~<^1MG%;-rQL?*b0)g$!@0YE&jx0I-O9Ygty=8)3mtjS?|&@ zQLS;on)|)Q;NPFYH`SSi3Fiak;Il^74T`cZxQk^oF4G6{7I^!gJ9wT~BSw=VVxPDx z_;b36{@|dR@*sY>(LP5bAd~AN=iszlPE*Rn`BI1sBj!!3FbRKTL)`$w3uFx$zo2rY@ zZN~N2-g!eKk~Tiq{jYTn=eE5Z_a;7zUn%h(_j$U^Z(M+9|UFhW>rv6+LDTLuOtz9Ud z84M8FSl;(rA0{oCu@nsCJZ^26dqxqB`Zo=F^ZBLDmGL;XbuAZU^2bxK|b3{0M0rf%@sn3GAJ7K^548CEm*YUf-Qbu?<8B=KF8 z%Lkwi1W5$?_||jq;NRcLtSA2?2g`$r ziaftPP6StU?AP4CWjF$k0-WqO|7T`{Lp#(!W>|C6@psi}=yhfvI@ml&$k;g5ChZoL z(ykrj!PYNmA1HWnhllgkall<}7gAG_+wd~!H6$;WGZsBQS{U9qSgv7;xA=e)tEK>B zOki0Km3o-%2GTeR)~3UV6gWa@!tgn(^BEm| z@NGOk;OO#Ch`_VEhs>L&h$s?vv6aqguO;*N3$6X4hdl~JRVj7X^$VF+Y{B|}-$GY& zi^=Gc)6`z^j5d}bRd}#BgXOf%0B`Ld zi5ry>=-2^fPM0ZrJHZ;s?q4dRR4hXSH0EygHpTwFFq!(%m!$6d?<+d_;#aEw0OVG zTz@h*HDXotM0|Y(1+cvAeM@S&r!p_W`T&Q0qVgO!*BIpMlw+?vF`_+Kix#lX-kd12 zAXy3>_};(<_da`Q#R+pV=~VwEpf(XFc<3=6aPM)l_A9mVtdh02_`N@)-x2OL;YOQw z{|%6#_l`8HHriDI=F6e%;X1-TFDI?6_*G{&^)Z0FwT|0S{HQ?%w}D#Y{9Y=Qtno`- z&U9pE8prW|FR_A}@+2fmqdVxzbUj{Uj7C#F!CgDa<33+#O7Fg=dHvG8u&L=(>n0dI zw`0j4>$)=Z%L4)4IL7_jywN zQ&VjbJ|071z2CoY)}wYer}OjxswY|PTR7*={V}=#GpRuecHDidfs%%~t6xLXew_37 zh}T*b^B^(sR(mST)v7Sdo@z)`15?OGjct7saiw;D-C)Z2tM7H1ZJCAM{-(u$V`Rb_ zjJxiL`tykSQ6>#ZYpkT8(-;{UuYb%Z(;%s#B*VXKTDZ+1OC6xWmP78rT@?V+q=G+ z0<0`ayRtePnydQ_`X=@ELDaOypCuak2CYf=0@1bdX+Rf|Ri{`xIW|*G{3PXr#Y+uv z;zI{K=Cf`Z>ls6Ls8ynG;PTE-uA%Q(=stJvvy7E_xt;CQ&leeaMP8ux2DQ|TBBgzV z{Z-#8(kJ1Qtywkk3@_BRJ2)rH&k@gy=QEg$O}Jmxv)E2i(-yA?9zTab+(OS0rY2Fp z5N3riH~G`}c}cJs<5Myh`n8k9F^LiRZMAB8dpn6%IhnSjEuCP(F+?*h=nlDJQFAdwI_?Bpcxp|t0u|#a%XwawS^Vs zbiD5z7WSs|7%=XhVzqjFpfd&5*?-i{30EW-$Ta(Z+PYP{KOt#9{`QGd>)?-8D4od^ zr4xq0G`C&UXxQgs=~}3V7xvpc6DL~DRMDBuzVf8P`Ew}T21w`(Q}t>V(2 z>r<gr<#V*_K z%OBYhJA=njO((`W5aE9HyuEceJjH`kBNoLwOT;^SV$!Aa9|mMuUHUW2Bs3$UA$wAg z8Dxu?c;pu%Z@Z)YQTDmRW%5!xYMIMMioQ*$KYpuhO9aUXx_7@zgox#LaS@&rvYHki=ceZM5L-sr9Lzd`i7$QXi z9??k}6fxV7=KMWBtX32L+vb9}w7Q+1?T7GF>W_bkKH&Ch*&KWv1m)=npG9S`vqAiC z-4A$%j>Nnx44cTZ=bosbK2*EB+MJqyOR5)@h#YR=clR#c3MTbh3rf)NcW(*Aufm0T zsdFXKT#{9Y%at=s{*;-VDmg@*kecdvobw;Wc~FXljrus){Np-P3)N zWU7cOv0(VB_KHXBD%1!Cb=CO3QrXZ7E}30$PT}JW2{_sFf(L54upt0UHBfB`{T4$} zU>@K9Rfw4y)i3!a7jl|mDaLlQu8+^;U%cK*A~Ohs_UB@i_8Y%rDx3?Vz=8*orB1H4 zFE`l_*X9&>^RiY)CQb!lQ1886I5RH~yIdINUuM8Y5o145JH})VhSt1Pw1Ep8|P3_@u3VOr?8@r?*teM8%rs^=sQ-%+UAv6 z{dIk$#IB`P{`oT=G%I^wCJv&#zO%FQ=0^^6FTZ(Hn^9e9!~+%Q#y!^Sp)$xQg;U(_ zngrWFkq-p>i8B=hZ=9OzlQ|YORquQwyP4cm-^j(UrJJYXK`XBOtTxa_BBuA0Bd~wq zQ|^js+b~ks!EC<0k)+4kv!;P1>&0-f6I(&rOlR@ya{|R&_ z8rxBNw6a!JU2dSwPh@Fjg#ZyfkK2{E*G@`X3x=MNHR^@gUU zA@LsA+HwZgGD8^x*+Wf6My6s!=5ym`bv1$;MGU^_MCb9H$_(I_W$?JAtxek1mG5Q1 zuLpwz1JkkEMzsLB>lz#kkw^GZU@#b+pB9(!OvWp`bc(IX&f54pJ5_xF;|7KVjbM|& zU1t97?c2ADPmsHz6@ZSI0zRgeKQ}<~@Ss{YwN{S3i03KB^zPlUk9{Cu=%yi})c}Wb z5*V&}df;ldhh&+WQ2Qz_`lp%Uh|Ko}DL9q4Ps4+*!NF`QLKZmogp1@M9Q&%r z@EVROlpx(LmuxWywhD*7RWu%FhfvGMTkb;n7jj#rnz4HXc)$lR8@&YYV0f!~A_7De z1*53j)n+$nu1te#UTt5t1{sw42aa|Re4$KT3q`g49Y*!K_VkGOri-o-5>`xpI8@o& z8tmQ;QBZTMcuI_=w`#xUr@Ly^nMB)-yTQsD9Kf&M_+MXuY85lcKcC!0szgpk7G?8) zFN?y;yON2ga{KzWw_lFF`c-)Eb}@lCpY6L_i{b9`-;WFU;Y7)5wEuH)4MIfl$A5YG zf4?h_X(~^4N6t_c*RNkcBan1cZHO+-l~X& zmG#2KpmS&aiia9iAAB>K=skE>K@)U_Yu4qwLwKNx4qQ+r~}|Dz=4ooaW8lC@Mv58J;6;( zb?5OwQ)A;zNlD`ztsgMKG($hg%^NqQK{OPslhpIN2ZOm)^bGwe(XmPwJWgX~+Qp9F zgoIdviQ?vvc|>UaRHS*+hZg8{XO%qNPk++e)y15ho&D2wL3L?$HTDQwZQO2ElqBw> zm91NB9W@I42A9d2a|iQ@jITq*1LJVOWRG&1b^e`}C?dv!%3m}oG zK2lQRDPy{FvBBbA3ves*7`D7C(*~E%&IyTh*y!WQXxknRdEAphJ@+ z>OrEKMXvQjQ#iBR+N4CUyStmLzLPB?DvAuRruca;9v&P{PfurwUznR?5fs#JsYp*J zfKCKny7!M%yu5^cB@p0gLD8_r{t23lzzyTI1u^fI0;a^48u&OHps>2Z$w>@;!TUhI zjoE>RVQyl=d~*-{Mq*-OUe7x4(mXaW$m!F`)w1TN6Jq$VnB0E85VSoI#2JKL&f|5B zjD$n|7!ng2Jidrxr@4{t?pLDN3UZ)^WZ&Z932Bx6je-ER^8`z&(sm}*U~m6Vj|lsd71t?W5G0s?}rB{yE0D=Z~)>16QNqYlsN=q+2f z!puxIUl1BC{`>dG`hC27W1)Fdfn^)j87|awqk+1+zd!g{iq}PvWRlp}*hdaCbKa(F zkVCL6>*Z1b+{Jut=FHF(?h2r9t|1T+513zq4akt40G`P_8C9My;l+z40*O3-BDQSd zxug0?30eNk!?>zlbq8*(_&~0*4ZCX60~M94dU|@1k&)My-Je2yO)D*>Icu%J`&>|P z&EYpaFiE&?b8?!Gj?Hdko~3>%EF??yKfDDi3AR!L?!JKmq^M|O{EurBbi_emB=onb z$++0Z%E{>(Tl6isA0++#{X>;Lg2ThZyg;9sD{Zl;13EEGJ<|Vp+D9$!y+0Bau9o|f zq{{y0%^RoX+}{s>^uw>&M3vuAg%@A39@jg$8+;KjmwK~i8tEOc2*ac#2Jw$zU+_21 z$M~p#WpoS{?7T&t*`$o~9&y zHnxhaI`HxSlQLvRj`~R;7)az5){OG0RkJj*pWEBZ^3upaET`x+GZS{5zrvr;l~ujJ z?|D8*3a?$Pr!F?X!K@aXRPKt1eD8xUArtWSL7n`f!E;C@MZqxYUf$V+-@VXMcz9$Egc=P0|Q!1Yim^D4M?hR zSzXEM*ds8DB15&Yf~+jIyH?Ky?Rrl{gl?`Vz7%5D-K}O2X7Zd(DBIqZAWm$7 zDFE>kf}`aO7|ig~$wF_Gu5P@iSW0BVg#VEW0GheM^7|~zLOxZxe{yP_()fC6>)>l< zrW{ONtSl^2&@v~2DKM387O=DOe*xctM!zfhIXM(j>vOPha%!k- z3^j1NrE-={QBFPk->K67oK5@>Io5xF;URtb&@OEf^-mW(_)(NqmC1W(68OIWxac+Q literal 0 HcmV?d00001 diff --git a/004_data.preparation_files/figure-html/cell-43-output-8.png b/004_data.preparation_files/figure-html/cell-43-output-8.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5e85216e93f40f902f5885a7642329b95c4334 GIT binary patch literal 27579 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 literal 0 HcmV?d00001 diff --git a/004_data.preparation_files/figure-html/cell-44-output-1.png b/004_data.preparation_files/figure-html/cell-44-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..aaeb746c112531f562de1c8c52b57dfb5d1e7597 GIT binary patch literal 10395 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 JoU8YK|35_%@ml}@ literal 0 HcmV?d00001 diff --git a/004_data.preparation_files/figure-html/cell-44-output-3.png b/004_data.preparation_files/figure-html/cell-44-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..a6e67dba892ecce4a8398215da95f683303c2206 GIT binary patch literal 9306 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 LMoH!0HhB6UI#<5^ literal 0 HcmV?d00001 diff --git a/004_data.preparation_files/figure-html/cell-44-output-4.png b/004_data.preparation_files/figure-html/cell-44-output-4.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5a5e0aeb0f3fbade41028c5e220d7abda4a8c0 GIT binary patch literal 9014 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 dH-4#(+kjEO* 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ⅈ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 literal 0 HcmV?d00001 diff --git a/004_data.preparation_files/figure-html/cell-44-output-8.png b/004_data.preparation_files/figure-html/cell-44-output-8.png new file mode 100644 index 0000000000000000000000000000000000000000..fb5e85216e93f40f902f5885a7642329b95c4334 GIT binary patch literal 27579 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 literal 0 HcmV?d00001 diff --git a/004_data.preparation_files/figure-html/cell-45-output-1.png b/004_data.preparation_files/figure-html/cell-45-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c872922d5bf44728cc82c035abc6d25b993e6e08 GIT binary patch literal 12213 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 literal 0 HcmV?d00001 diff --git a/004_data.preparation_files/figure-html/cell-71-output-2.png b/004_data.preparation_files/figure-html/cell-71-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..6d676570ac960d532bad25c1b9d9ef526733afdf GIT binary patch literal 37241 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 N%x#5R88;t1|2Hj7dD#E} literal 0 HcmV?d00001 diff --git a/005_data.external_files/figure-html/cell-12-output-3.png b/005_data.external_files/figure-html/cell-12-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..06c5e14242033b2af0704fb4d8b7d32a06ebe356 GIT binary patch literal 8216 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 N%x#5R88;t1|2Hj7dD#E} literal 0 HcmV?d00001 diff --git a/005_data.external_files/figure-html/cell-12-output-4.png b/005_data.external_files/figure-html/cell-12-output-4.png new file mode 100644 index 0000000000000000000000000000000000000000..06c5e14242033b2af0704fb4d8b7d32a06ebe356 GIT binary patch literal 8216 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 N%x#5R88;t1|2Hj7dD#E} literal 0 HcmV?d00001 diff --git a/005_data.external_files/figure-html/cell-12-output-6.png b/005_data.external_files/figure-html/cell-12-output-6.png new file mode 100644 index 0000000000000000000000000000000000000000..06c5e14242033b2af0704fb4d8b7d32a06ebe356 GIT binary patch literal 8216 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 N%x#5R88;t1|2Hj7dD#E} literal 0 HcmV?d00001 diff --git a/005_data.external_files/figure-html/cell-12-output-7.png b/005_data.external_files/figure-html/cell-12-output-7.png new file mode 100644 index 0000000000000000000000000000000000000000..03e75454b741f320702d1f600a0a374d5c291de5 GIT binary patch literal 11710 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/nW`HNmv3Y)zi@MtJZ7EYlXLv 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 literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-112-output-2.png b/006_data.core_files/figure-html/cell-112-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a61b0e9205a7e59a31086d6b01d2fe9b78c763 GIT binary patch literal 14991 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/nW`HNmv3Y)zi@MtJZ7EYlXLv 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 literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-117-output-1.png b/006_data.core_files/figure-html/cell-117-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..fc730d8236d47f83d610e4eee0309805fe602bba GIT binary patch literal 20086 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 XKcIS_X^ReNuuAf3CsL1{`}zL>9dpc1 literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-117-output-2.png b/006_data.core_files/figure-html/cell-117-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..fc730d8236d47f83d610e4eee0309805fe602bba GIT binary patch literal 20086 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 XKcIS_X^ReNuuAf3CsL1{`}zL>9dpc1 literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-118-output-1.png b/006_data.core_files/figure-html/cell-118-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c1846a72017623e64c503b3876ec8159c7136e2c GIT binary patch literal 16478 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 MX`jtIZT-vt0H$WZd;kCd literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-118-output-2.png b/006_data.core_files/figure-html/cell-118-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c1846a72017623e64c503b3876ec8159c7136e2c GIT binary patch literal 16478 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 MX`jtIZT-vt0H$WZd;kCd literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-119-output-1.png b/006_data.core_files/figure-html/cell-119-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d46cba7f11a32dd5ef7ef74f115db7b1544fdc93 GIT binary patch literal 15434 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 qVoyj$OdBee=>#wMyMeQ!0z8~+Oy(gs@q literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-119-output-2.png b/006_data.core_files/figure-html/cell-119-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d46cba7f11a32dd5ef7ef74f115db7b1544fdc93 GIT binary patch literal 15434 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 qVoyj$OdBee=>#wMyMeQ!0z8~+Oy(gs@q literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-126-output-1.png b/006_data.core_files/figure-html/cell-126-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c939f9c6480aad34fecf8f0f1f1787d09cece655 GIT binary patch literal 1030899 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㝫-2O%jF;y&d+}}kzb&MQVK%M{Vywl9a^K(UJ06$x)h;jo%~?J; z9e7AR#t+7ar*;%lnwf3eRG0gnN=X%PWrWf*mER{x!!rit;B9q>F)!9y?*C2OJ3K6& z!~05j&mtS;LM!MtyY0UQwC>>Wfr5Eh~?*TWxRmHxrzp{!&BIA6kmpd zJ#8DCE~Pb9A;&&1MfKwD^-_z`0l>d6~(Y#eXMwf6#jH z@MpG3`5cG?p2rLUrs8-$E5_K>cIen&tIuK8lFeHTk+IsRPOtLY$smjDGcGg6%g`SjdNH2^r8N#*E{jxX{Kel1P~%28(%sPFXyHu8b*6tPp?Zfo zazNHvz@SP1Msrly`TG0U32q%%T*g12C-t+y+PphfWxdb3`d(_!nsV#Y`Ga2+)r2w) z`pJT-FK$T9Xn=J|MIB4~fg+j@s`sk&m(Ns-;9pN?VKEl``=1p_{wn!`C)R>0KmE|l zKy(!J{(BV(6=zgJJKLp`=bmO+@A^v7glxfkmsGUstT&}mLs?3hc&|Rojk`;M*ts*} zbTP^G1-q9bhXy9deLG3HK?ysUgpq(iLI%77nwuZrE|SgSBzbgZWYaOy<>LP6xxU>N z9I>-U>HbE|yFD$p0c8L;O1@1OdOR>Iz%2_SMF9A2Ik&*4~j zg5n62@%W5Lu+jp4)*mB@lvv#rIPzIOFd>Yh<=Y%V&5UxGLe9+|Y=8WNeA8_ql}Y3) zB=|BVTy6LsB^>x|&Z^@cez`#pF>6ai?|k9t^8pm3_<$V~D zObe?It8LIlsE&olv^oAZyoeTgx4+GHBGG_8t_6>FVoSNg;CNlcjtWs*=-M5+CtKWQ zhY71MUWr)pov3*xOvcMH^v3@L3BDn)pLW_vJ@U?{l|VA6GV6MrDDAH{2D?lgH_DNr zS5=0GJ6D~rG$i1+7>hpD*3eV7$xXT)wsf{IrVG&5pIl{|;BngyRUp>U3mtScNwDlx zAulG)j}3m>^!m79$x{>x-h>k^&=Bj&cW*M(%~?E_Om;czgff)N&--0c`|Htu{=dCy zgs`7?qUDn2^&%s?tg>=>Wo1-gY1E%iYHU4s>{=4v_-$rC2JLED{J-lM z0wkJ^36GzDVlEy?rDEdcFS18)Ga~evGuViTCL1=w}!l!#G5DF2U&DjM;w9 zn~-aUD1OeT?}g`&0Sk^-c7Y6I)%xw}Q^KEw>gx4t=M35np&cCptHSSzz-blOW3n)2 zcb!dj5_?11KKn5JtsX%=?8^@_WswozZV|5lR!VW^WE{CeA z9N$Js7qaC*oM~Qd+2o=UQI6AYiODVKHBA}c=JdrW_enDC#HZc#qK65l#7WK$0S3w2 zPOcchobc5y8b^cAb-TsY5Ks|&e$a6BPU2mP<+EVI5Jko1JmuhG@XG=Wmw0}wdW1Lz zGHZs!G))1*syjQ&#?7-UE2BUbAd^>>AfvQ|p$APkYIe3@Zu8?SFm6t7)<^fLBpB82 z5w+G1_k%{X{L#EKh4}(dJe?L7`p0m3p_Q)yi9Qhf+=J~yiZO+T>?;J3x&}jkKM#TC z_jXI1cq!NAt~!pW5B<(%OGE)xfQ)?v$g-a(hMdMzRDwU|tzSl{O<=yrQ}^ z_+(e$Sl^EJ^;XQb5|~C-wk1lbCVMk^Z}HeIg+N8qEAt{QUU(B&<{TLrGdlW`J#&f+ z@pfwG%kIk$G>}Cl;hQ{C56m#w!Atr_gTPb}1_Y1`h% zRJoe^Q9{%+f@FeN!@bz+GBRX}AMc$iUT=^jp`_ZFZJqaw&fHxnqeh&eUt=*63CtI> zL>;BQeEZTAIEamGyx{#iAGm*@RA@ocQB6=O9FBKcb+gL%81=SptBMRdMPux)Z5bEo zQtYd{K=kFl8tu5PAJmxM^T%lGcBk*8n^2c2l?aEUbcPH1w6O5IUx#A9g7i>OchTvbsch&GXo*NK#xkSM|? zN5goLV}^FH8#-DTvR6cT5C65!z$b-L?laFK(FiY#K6A{G#w?4TL@7wE`UN`%t8v9w zi#1DuX3+TclP0u3uc@_GEZvXRhJnPw0eM`;kVRA3XvTOF4-!Gp&dfELsF?L02zu+{ zA%2ya4R~mKjf=<6Q=+NuxcRG+ak#&KpRy2qc4oWyOaE2T-5N;Ek^!eAHRUL1114pYbG*d2=rAI3Zdh?7%N{=2;|8!Sx_tZ`IE0m(^=KpY>%bK%O$ z8N>$)X(0)@zro=|N9>eF= zz7`xvSgZ9nrqDg~6&%?R99bdrQREXUkWBD;$qyZJaqKJ(YWTn=EsK@oI`bJE;k)g+ zU;vay9&fH4CsX>R)xVHrY5)==(EKa8e9;R-w`tJ{8)UcQ!UZ~Q8g`=T4`f5}-u$P{al>SNSaP**yHzW4f=HTieEA}mT0!&OEj zZKWLgi*&G~QQ}XCPb9-DO}Z40Gi|6DN0AHejO7~Z6Gv^kT3(-$G>j@FR`&YgNFz84 zp=b7bQcZ62Hv49-2iGTEt*QOaHH91jihKReD7x4Ot&=SEWSbiyytM|l`HB{fA*?2CWb!`F%$V{EBsdjMEOs@`b$6gBRKf^nsN`I6sU^s> z==#|eIb7l6j75Mti0Jx78+r4I3FH;DyL@>S z6?LGdfQ748lNFjpBc6J?*Jq9Nl_G}B^;i?Nfk=*MA6_#2Q_JkPLf+e^WdzTY*Fz*n ziEq9_f42Nkz~+h&v>!&?S8Ys917(QNK5Zsnp5Gy5x&a`=L$W^*zRX6mb|3eKZxrn- zNnyd00KPSxA5?AsoNNdg`!>Iu;x`;@Ft3`aC1Y$tmJv6fi@^s$)KPZ{ZLt1GZhYIH z`G;Ek&`Yi5_4h|xO)i%}mSHaY$?vIu>oZXdPxfdef}IhwiW5h%=;a1nZ<&4syr*ja zotW7h{MYU6b(EB-9+NA-GdjZ_<4VUnZ@z5$J?aCG_}Fi!UGLJ&xNyp$_-B5_i7{Gw zAJo?N%n98|W3Ap!GYf<3=FL-jckY=eq5u#yg+cCy$SYmTrwiAh61%s`l-Kj2-~Rh! zgb*W=p9OXAtj_#41g{3S!^bWewXVG=&5^8@Uf^V*9}9hh!h%wqul(f5*~B%CMXZ_n zu?rYrv5#3_R64Y4y?uw&ne4fkv|zJ;r=dQrC$fZ6p=4#x85p;fDky7%m83vhwV~r= ztLum@iw^mX-(24`V>5_;*khK^Z=28$d;@%4S6$m>SvfmGgmLv2Ojb%LNl43Yp+rg? z5X9W%EI{LP1RJ+VkLZ6=PrJKwm5Rmf1#qRbs_JY2rq<4`^iH$eVt%VYqI`~gh{ms;%9gUUeYgChTXN|GjtE3@^%@c9kTOT%Hg)C}n3I%`?v8 z*IF}@B$!GV2hN%Lqxdw^>*fp}-?mL+F>Ox1`A8p^!nNW*7)ey48>C3fby(KYFtT{E z|1!N}$V|J+g8@6wVN)o-4O3DMj9Dnrl=*j4JZ@9C@AqidX#Wa$Pu@D<>(}^qX?Z7R zZ)8(V+b&^bn8m|yS}kd+zYZ<<2{D4W3{_Mxn+<6=q2Z66iwo(ET*y`%)ecSF6G9V}wZ=`BbOkUI>wkYGH)S0Gf34DgIwJ2=pw!VO#?OdQ{94Vu*dbL8=k z0XCD;y3i2dK+Pp!5(-rc9R02yR-q@#@~?k4Zs!GDcG_lrj9mQ!rmSbs^IIWFrs+rEIwQzgtw<_o%YnE4Ia)zcnp?MO z?FyzJXn-(?HA(Fo$RdwbSTLTEHZdy}*6^)2sDuk9ff7b%ltDkb?~JMQr$&EF4<$vA zP*uZBi7v#>Rd430vQZKG2>quO)`J=Ltq@chIfxo1$HB>e^}2igx(kd*q_|Dss!R#(Fz_w69RB96FC9zxm>0M?(KP1zy5qtarkFB z#trE>*p$1eCjgLz9KIWT@Ppml28dY5riF;^bX?=O@)reUygCk|>|K6i$(WWf0X z=Vd~6HvYrK0=fyaZc8jst*Rt=uO?Kr(gWJzA4?XM9wkLy3-&WghNn9%A3D1aYO~aM%55O0zA``VX|Ia{T#0yYFxUyp8Pl)}8Pe z=zkrq+%E{Yk7@}$?_mfKqmZf6%c)~$wJ6|sAQ2|2Y9)65`~9krD;&`|+jwN2l|H4B zQZMp)#G0TqP$!!LCcjYSYZJTwyLzh(Eda20K3K})!elID+)~#K;grqd7*#CzrWW`1 z)-d|Mya}aN$ekqeU~jOwgB8;4^Co&UB{Ib*xG5P``9Q+xQu(YkuE>*%r#NSF_l-6o zLMpL}XliO+Ml_7=_Z{A%A;MVO*c1VG>$Y*KBSbdYYyhC2%His=bt4G&=D5i+$)F&p zqnQv1$Sr_x{AnkKIZ}edD{iJ(n%!Yj03BV)-{ee&Wu$AP8}_GPcZg*{2ZAVOl)T(f zQgS#2Cz7-r{&oFoQg-;L_YQFfnl>5c!i}MS%Co<>b95N_m%<8a{$*7U!mytAPdvZ9 zjcy8uk-}k~wqdnY>b~vs(Efkdfklx}5Kd3N*H3=ePj5Okv`U2Wp1|7!7I&Qx85X#Q zFWa^_Q1MpKe#zl>IG9rwmP|Jvw_vv{@Z*w{^qZ92Ao1;?`N|kL0`1TIiSG^#_8bR0 zvrAnqC&4y+TYic|ba1z0P!BP9C_X-N@UGmmblz(=XWE$Yz59|VTro%1S;^q?MYoFo zd60jV{o)sUgv{ErVn-!^?*=(&EQfO@ZL$hYQ`U??**%E-cn4$x%_XLNlW51lTt?E8cK zLVbl49(dFoXuPYWXh$B@7Uyfgjr_&Q)rC6(F*9O*mcXhg=ayqXqdXP~yki#aJ03Qe zik2^>7_bE21q(@c$~9|_%%-?&_9iPfp->0{`DpRI9aJQk0A8E}>R zK!Se<#w>t9<@uo5ZL5l6FCU+qgA## z@}a~TaY^amIn1(d4W-A zik61=+iTy;!SfEE(`t;#POk=3_)*)>ifp2S`63B*30b4J4qNKHw1{5Un}AOlt)V%z z*fg+>bJ0JhcFLBCfiz+xBvgBkvj*IWxbt`vln2ebBep}Bh6zR>vLdygw9?e5-CrbT z2vhD|NM#qbl$gY;anZv3?PdZ=@volE{teUAplopg{4(+}=USIykGrhj$I?-Eg`sC!~rn|EJm8mGI89I8l zi~@*iMmu5iCt4_WjK+6UaH$4{LRuKLg-BAX@7_gLQt{!DQXwO9sOnLqk!&W_q_n@= z%>@jyUSPgq!i%!}oXeUyHRbJ-peV8uLywD0hR1>|v`UcA9Qyl1IEh++IiL#!b?xmw z;M{7BDoFtk&n_z`5K>aY&XUE3%ztR%kx0^^G5&xLnK=BYMD#ZSJ60qh*8%(U!hO$= zoNqM9&mN7RWDOoP5Q}h=M$)2LSWa3PZ}#mPd;&+haFlFiieq-JD-6H2 zW2#D{CFOM`Ho&rXvKQ*TIS>7-2leP-!X)6d<3C!$&;tBtKS}5F|6Lt|Vqc)>y)$FS zOA{QzNKEV*KvF<555barE_I>Jll*2z@6pwja)K-z{C~DX`vFqC ztCDjpk~5+Uy)mPd9kRb1u)idnwvyMRpoG# zlf13A@=2os-U_fIj+UU%4;5pCl-H`lqAKD2E~zJS41fP@#;@=`g&qI`75$|HRf|+> zm}3>m*>-(t2nJQW=T0y9#~;}kDkUv*M69-`HG8OBw!CLNZo#}fc#Qb|EJ*QAs9xN@ zg;gTCgt#M;KHvHjUo~7XTNKXdMSG<~)KfVUW`vWrMd%|tTy|)i25eOb5ejq6sRE{Z+0g?U*kBF#X+u5$9`JCdrYWzi7vrPa!;F?vcivL*&9r%De zK}!}DC({*D_o+{-CB6_)z4Z)aiOE_>&7GIb?=g?$@1OHQE1D~Ee z|NQx*)o6i4K*#UZ!Y4slvJb=SW6Rgg*P4j=DsnTk@BAMa2dqq)FKj*8rnn27b%PFeKS7i^&>0N>vO1^gfH)k&O}z4(ET7;7Xq-prc2iQ_Ey&OPEK25&h&ulm*9vg{@c1;K##uui_g_rBWa3E zR50E_@MVSo2Dt>i;k?Ptj#`nKC561DAqcOy9T%Ob?}zS>O54Y4wf2Pazzzun%Q#uf znfWM8bDII+uQ0Ule0{R0`E^ZIN{$8Er92DRkKl>xq06^Npr@+?gT?*>Z@<#hANuIN zd_kY5yE$c_{WPFYP5ZYa*~-caO-BJn(AI|J-~(f-!#6>ZUYx{-zlwwPxLG|R+D z_LDjS*8x1YWkhtY5ab*K01!}jLN(48C8I`$n*=Xu7B>JQFAq84V?m`7GHTeQ^Xl-BBZSmI<52Y1fF4a4R4c*_uGy>?sB%>tX zto|lsrt%$A8e|2HG+17bSSL8{SI~O_VBl1lOB45MX}fOJZvFybUvv8q599BoM24d@ z&UfN3r65m17};>q%+}(k)nAc?Hyk^_EMUhpfd#wL`C>|)>qcDGCpL~jgHFpd)On|f zo$tamCHP3V*6Lt+vo~5&ij->3mcyRKvMqUXYWTBb=kw_7Eq6i}o7Lp0R#s8)QXZ}3 z2XYh8Lzv5{Hui&vL>T_7oxp3xTO6}c#}^g#wnAU}Y9FY{rxp0iN3A-AY=y`6%k5uH zrjtQ4@z`Bf8zUvxkVG?dG0oTOiB1^D>s=6mR`ViG!v?-WI9s~q!wt`@W}rW`1(#uUkDA_jWr`^y*WMBoA~ML+|bHJ3a4b zm~zEI&PtZj6{L7+?pJiwXRluEGD(ShJl zj(wc2f3%k>AD)!xev^N=`btC1St{{O9j{7t@I+0PF%c|=nnFt8Cpxm^l^gW6>x*M^ z#`b+Wdioez?7~rvT_-Y|aiG-{E0o$`iVsbmNdu%naH7$tfd2$j?z ztvk@V*ZRFOW-?P)Q)(L})dU%tu@uAQMpAuON8Xy@hG+zH>_)}zjQmi&(cSevM%p*b zN1xU9MSmUa*GG4t1Ay{yd9~*mVC#hAb;f zPEUUzA?Zin=|)JVbpqN8I{g2+(V=^M>-3@CJ+R?|^Gn8i{i^LLR8@TXE~n7HgBD+y z??&tIc3~xVvT9u~WRfV+JG>+YQ6a>Ix8 zm-HWBNFx^(!xk2y@08O>e}ZI3oWE=*Vg&RAEt&S8bM0P_yko+vz0foJul;A`GcX`- zYik3ZCcny5`)x?$6R}|0P-EJV5!#C#@E~#fJbymy+KS z8XW8ci%2c*9Lc}9F4}28vBae0l594u`ua~CHO?f56Fz5Ga9a1L2*tNlk-+pVVFdsY zO?%H&B9r)(n8B_RWFt^uckr!X=;=0{Z~<;^d0EEGix-IgOmHsMnFjE7>#N8Ofezmtl>18PtBIB&Paphysgli}YTq*cm7 zD#decD^K+3&jC`+O7SD-B;>~s!&8Id7{;jO7CIrObdFC)6T z?qPxL!LLxZDK;l(Vw?&Zl3d2;pF-<*G!>b-7|ca;al*6H^+DAPl-)`8hgoKnG8w8xMn;l-5Sb4t@H-X~8Ws&E_I5pcfh27p+ zgW7a51dbv@xLET=ZQ-&`4Uy}x>99UrayAReL59f8M3zWz%I!oSLl_vIQj%Q<3PSn{ ztD%r$g75JttQzqsC@TJsobh*d(iMDId8GxK8{MzP|70GIqQ=pYOHp4JQ7OSy<_S$D zR77Gsmn2mr5=BzI4`PlK(P2`MLuADqlE0O5k;_pPI`V$>h<0qU`F4e5P7qHD4F`e7 zPdSr;xXArMg$ib=hrgX27K`8YNT^===BYebHF-aA9Ic_udCn z1waZh1;vN@_oi=(y6i+n@PJnLcmZ1gn26{PNcA8I`?edsgIGRiC~c!lgWz_LVmLnh zbltZgm~`8$w4F_GIW(hspkb9v}2-I z+dWj5V_#BNmk0!B>i-LawH;*l`wNSrj!t$Vm)~MOoWG)Nz5(&X}+ z-5%SkA*s5u&1~xd#iknoFrF^W0f}`pp$FW)fFMM-bJGOyZ>+Ag+Qrf?$E6u2Jbj)k zMl38Rg|L-cu3X0x6NuNI6%Z}HH>{S!b;Qby3ZbDBJZW z^+OXk_r%Ra$ttBG%(@gqkHlM7J|SYkI6v`lR$w^j;|enGIgc_hfIA*ReCK}<~G%xRQ$%@>nCysT6S4Hxx7t2>{pAHMjRzSX^qWR zq?@Ea=uZHOPlV!_+)w5V1&51FEg`)7ffD2dI3l>~>8(9l_$auWZ{+z59W`0MZBnj1 z$^yOjUN`U^D9I+od_iHM90=i17}2z-Xry#-P@$O#HKe3)LQuU4WkbwA=VDg*=c+ro zsXCuN&Fu|h27_s%J4^CGpirQX4o{(~86%=NY!4Gl1+`AATB}BIFnGbH-==wpa#;;k zAVMaPNE=-Nm2w9|sTXr>3M)?P+EV~>i1PjRP?8)CNIf?&V8ltGP>{L(v6o6PAY!Ku zA><^dhmSO2lQQMgkVi(A7K)1MkBlJz^4iio>q@$>G=PCDcB~m*{d}!_CR57!CJQJH zrxEg}D_ZtIdH6V&@RKlScAj6;9dj0m`HdPUQ^bm$G_#a0K@n^uk{TN-ZVUqbtpL## zx3mO1F0T>b(aNc~Vk2;ZgV+8PPrnO{1le3zN7MZr$lb$IClCaI0*k(=c^pn3jr{{1 zd#$Ij6Uy>6#Mlq$?tF`_mZWth&cNw!EWP^-QzIM%NxBg{BfeN zJ2n43z!i$m({-&F%r{{DakR;=O|QJ6x-{3y+Pbi~c$X!ZnNWz8mp5lZN=FCZ+Sh8Y1N4gjLbjNW`j<<55;uLluce zJ5GixA|;Q8NXD%)m1tMOWWhzkMS@X~qM$AYPnmJVE!+}@?zztQ1A)+!)FD`5=S7s^ zf4H%bW5Cg`-c-cSnUD%@Dunk-Bu{us=nk~vA>3l$yaX*(I;VfrTvy^jJx_aSEl7&% z{tey69%-o$>Ex0ilrDrx-8qn=skC!8EL{G(C1xu?>o4;p@3oVanue#_52Ap#CoraN z_ksy#h5bXz1afYte_J&R6}yYpO5b(3<~CNr*d)}GN(zhHj&~aC2t`Hv?k{{e-gYu% z3Q5n)c>MYI@xNOrY!^35vob6w0p7SZAP4$UW^eClOv62n-zWI^mOAfq(c5axzH!-| zaG0VT$-y!GF}H=`G0AK8xg%5}pm?IEjuqS+jtjpm4fpbnB~eTaRfv@L3n>qoK|?0m zyoL=onKdgM^^zxUetv8w-vhF=xcU82kv`g4E6Myh^7ds+^>JKS=T)N2T)V8awDfUh zVP>ZH;d~8TMn(o#1d8~4jSthA-Syh85PY9vP1 zVXp=if=<*IR8gu}Im)5xzroSyw`Q8&(bEn(k&IYPMT*6Y=i0R%M0Q>1w-TBrKF2E# zQ$p&T2fWM`kilCVK55=EYI&=#wH_ok-R~fqOBL@`Nahf}f1e*+uYRzC!ItkC9YZwY z?((?P8UD;(B4T0@p~xy#&~`dv66FsQ8EW7vXsDRrDp)2e)JzhEzbU&JPkYnhPHpWXSKi;G@P8EOPVh5Y_w@l86lXnd9;# zHpG;_WXMU-w*QXq8pjczaEb3Ck7PP7Z{rgXtkhq#hju!!O0D!OWM8eKdwqR^`sH1* zx-c}=s)m}5r9_ZF&TGn9tnc$`<9^wOB?+IB%8`&n5x{TMQv{;x*87xqcjZEz%tY*A zY{T;udPDs@n1GX_sJxvs7G^n9V6kHEipMc5IR$!jCsKbsykbd4KW|}SRN!CQ%CyP{Yzs>wUY+Xt`lO9^4@lG+ z1@TDG9yXQpDi%c@|EJ*Q>SyI+q(L zHQUy3ZF|BDAfO`5>(AipelF)Y;wbso*~gz=KX6P7`(9 zstL8>9lOdM6fqQCT@}Rpr#ThGN&II^3tWOJ$yV%WkzuK+zjB79GyO>)nCCpTwnDbE z1X9No`QZm6rTzKA2P5VCGsl#Qq}g)5JylP&K^s+kjvxG1CoGX7j16qygI{+^8k4Kx z11OeX$+Zv4aaFZM7bS2$d})#yOmJaUg! zob1ZNWpm0)NDpss_Ie@?9~?GQnLXB;^QdPhMqBu&c>Xu$8Z8CZ*}l73=Vup)NvADN zkDQH;E7eO$LqSsh-OrEJwyiDKbOu7g_qTeS*K}u}2t`N0Mdf1IMO&>aQu;xtuap0h zYUhJfZmO*!NcDLWf!~RChn4*kO4Mj`P`%?W!tTsqrT30%|LG=PXv_7t;QVCHRKCZS z#o-M%ZDn5I8r@BJ>b*UtpVoCz+`5}k|6ZVl!)X_9 z?@Md@?gL=2`=MFChCx3GJzFz?z}l z!X&lH102S6gJagrow1706l3y(%mEXM1fu5&Y(iwLA0^~^7%sG*V+Gc)J8_{Iouh@9 zehE8p%8Adrs}7#S<^Bl1azb(Nu*OWpP7pGI#1*z?8{%bJ9~{YNfaRSA4N|cVQqpl`m}j z3>mQUf-{Ndg4}`z^DsM0e~eO1DfEQyq4z=J`>}m4P*;{EOC`iq@VW z^P1(4{S2JXx@shJbR=R6Sv$nY)v4juN>^9CySZY0!Lg>FVXzv>lYALAg9Mt(jFzcz6j2ru9R=MV#ZcKNQ7ES zT{s0C+}nnd3Ied9pDnlViF4w8B6Sp1gmUi!H(*rD(^=e3#1Q*`Ha4aJ9Q;NPL%~i# z?385F3LZir=|iFt-XP5Y`%`vUB-gO3CE-C|AFs2kwm^GK-GyF?^$v01`})fsm&Uwq zOD?@d#_etlHHpVJ2N1iMSsYeHmfs8ye#;{oN~xpe3Lf`dHpPecZY_MNn8HX_&qB&C zp@S}kIWtGc#QgkxmD1K$9Q^#NQz2|9yL8ZEg~*1Zo#je zK03wRW6@enK>d=~XjhT<;eTw+sJg*2y?_~>-8cXJO<4x&O}SS@L|Q_;A^K|(c~RNg zS5+}iNe(DP2}D&9=^k7iDG_cIU8x=xNmm9-v-l;^{3Y3-Ey=NP zQvj0J2=JzX=e~wDh8$dz*Wu0_W2>s}wsPa`q@i-J^msTy!Wr46hXNVKR!LBw7$*#0;$>&A; zar>#gn0y900PET*_#~XFL_mc?D{mw$Z_E|IHh=hW{QOXs7pQ1mZbVV9g)wS|Q>n%b zdsYt$N;Ag044={@)ZJHBhf{% zw0y*uf->LfGlg9LN76M0$JMss*v=-6ZCe{OcG9S6Y&EuR+eXtQ4H~Pljg4*F&bRM; zGiP>o_TTQFInRAxJjZRawU$moBLfnYXb@jWzV4@GLt6JB$_mL)&@QJvH zNHV;LjN&Ml5T)_(?(o#+=O@A2kHc&I#S6YcUwG_1+`+j%9IXqL3E)&)t<_{VRFzmaRS za8TC zl=I^wR!L0SPN{jMS$8kv7whvd(6Wc8Seokm(1^X_I$k?ttxon1Sd2&aJ_&F_;T<01 z+CA^L{!rCd!-($9*`RZmih@}EVZUB{=?tiPC9&R@{h~Frz~yz>MGASu#A33xG=|Zk z1@L#rbW-B!MHC=wYj0m}o{DH`h7=Qi{}th55}l>2J;LK`>C3$D(pne zDRP#Aw@302OS`Zh#JEDr6FI&9S%@>AusQtY5wlFR#L$lVYYRP@w+FRGeQ>G|WcRDt znROmWRomaQ;Ie;=zXCs^lni8&nT!@)D6)CBf%^c69JQOjtc=uoYRZMie+Rh3)U?cO zxi00uIjWkICeb%+UldtywNe0`N(Pm zGzg6xLBJTstE+_#5*Wx2uL<2jZ;SuJx7{w*z;+t+8gLboc~=qL&h0asV)8e-l*l;( z5kEn&!HQf&^2PCCY$H5|F>J zn0~xH56zLF2)@wi_!_m5hZt_X zK{~0fl*E8p5P77^pxHIgm*~M`tbduriDg=MM9=~}ozBPO>1_|xI>FN0@NGH&Z#t^^aI5{2EJ1=TR4rMPl94E(sQ@W|C^92s@HkR#Y zeDYKm5Y15}M|w^(`)f2e<040jZY1aS=6avIf)6yNYY}@FB z5nVEc-MB@=nC25|@v5AMrdd2XT={0$wAh41-PSb6KXMgYghEl5G^m|7e5Yo@;)83t zqD{qeS0#_ZrJ;Mm`vAF52l#W|&EBnOR`M2Iz`7q00u>eYzY=2&jq<80v)&Ly008h- zGx5b8eBWQ@e<-lC@%aj*`+VFE{UXeA2c_fre0U~#Kd7#+_ubX_gr;qNr0r!jE)B-i z(oMUI#M2|#uwKB58r#gL^U-x7aj99NU{T8^n&-OLFvkmdQDaYICNV5_zM()!`o6!F z`Uhm+=5noWjm648n?=U=Xh$;}iCsU|F2^Z1A67(aUN3D79mTlasK2Wf$E>!tM%S() z$(FWdW;Mswh$hFKhro{o9~#3H>zeQ)}%P zTktVFYY;rp6+rtfB1N$*%i$OyQIsrEmkfSYuRvF6pp>_x8i}Q9uhe$>{mRtAq4hu( z6&F)1&L<{KvyN*MVXV!1Kp8@Z^mMBSzP|Ck)Jv#0<^+l>^;FX(_LQVb7H8wGx7le^ z+jf(3oMngIPcj~p5iW4fPb*@nq)NEBG${$*Uzf^~21$K?qjy^oKNM@%zF z9QCO1vuTlYgkiD?K?l7lxp-078g3Zu)Nm+$FB9R4bAb(jAfB|4jv#e?Bznx=(lCb# zqctf&K0d7C?sVZK`n?E9F%WUCPDa;X@Tt{ErPGD1r>lj3zolJf)>5fDYw2 z3=#jZnmuLS6s4Kd_n0CRuC9R6qyPbq$~T3MjKIw(S-?M}PD z1s(+Zm7AHiI4XpEIHM?tj8Uczl|MJtvKjby^<1Vdgo;sS79m$zQZy0AR7wbH4#j&xWe{~S1wD{h|#Ie|;gbp5dYx&!g7S>wOWQ^^I0_BMSu^Foo2-wv8( zxOqVj&r`|w$BcAugS;5=VjYYKP;TCk;ESLCcg%|ds8_;75e3Djp#1pp?!IGSP%)jY z@nRBtRP1##U~JzQ{5;Au9Fm|AwYFwtW@ZKpI6=$HnXR;Fq5zH3IcDi3uWuSaU{k&n zQxp7>bMKG=*s5aJoDG&cSN!>d4^D4TI+V`fa=}vol{7b}gP|e+60kc?;N#60s@)@q zq)|oigrYZMX&_c_S41QJsto*tA+=aKZ-3u2t!93wf#;{5Mft*4beWG1MT0dM0bgyz zOj^urOo6n3!@qXTXh?xnP>{?xn2?m45vi0FL)2tFfRZ6yYDS%n`B$A*)q#wUeEIzQ3K35v=;u!$J7Hs*Z>kn^tL0^H^q% zP>FGSpgUdWNacXFHEmKO7py|K*$PH?x*qtVrl~2t+6hr3+!hru2V2^m;#kkWTXD=M zM5+YZ-{f}$ z_SQa2ZaZUl7j26EVcL^SrV~mnX!nPe!PwwMtgeCkyUL>b3e{w$>Nvkz)bq;Ckf*OQ zr{~M^-F@op8fkIs=8NK&XCfCAstgtVamg=w{aO~e17JkCyrza04~2t`Ex-s51qFr3 zG3MpP3%qgFF5B!K9DogeoE4K36G9B!k}hO2ptM*n8*S;+I9o7+^&Y*xZ+;fD9FxtR zUdw52;@-;69lVrAqP@uS%YT#ugRFTMTkv$cl^1iL(L!mf0TgcwF^v*?&?EH#`#3{- z2`)w_#48QVG%?O8G0fq@r`8ZJ>q`GtkUsnsLM!3A_3cTJ-}Kpe92Cic+%`jck=Z6t!R6gWJG zY$xHc)^WZZ$H!csI#d|G&8~pPMb&W(Gb75{#l=7A+X=axMKu*!?&Mc@6z+1)B|?k8 zyh>w}Mz+N1Q-k#RL_^$*y5itIP4M_=e7Vt)xoKr)Mh(Uh3)8b9KY$DYMgX|fERcJizVP7ftjyc>-j2in3Puk&-EGh+3U8`X zH;uK%I3Om=_=0sT*5!WH+=%N%`@=Zpw!Urck+O07Gi>VILo4)!@$hA5lWs8{NZRPd^6X*KSBei}g*k5pQ2Q~8{b_!^vtSbANMn_jsNy^-|2l*p2E%DEH2qeeZr--!wT zM9xjH5=h4H>(zxM8GIy7+WRF34&{>-9sdKCCM{rwZNMCFQzb9^pyg^=SS?nOd$UrrXB6)xr zVHaHf2oI{!QDJ$F`Oo5+cI+jExEbXpio)O8wa3dPR6rf#*UgqtN==)3Eu)%b87Sx&`r~qq=LtLQ~hw!h_+U(e}MU z>A$nFGvD^0*h>;9^*2~0rH-Ps(Gl@Dd0sbf;ippKNB(!tJ}yP58NkFlyY@@5^c-|; zUpYw8=7(xK$Y_&__rB-+M_cN=jzzP^BNY!!xF)=ZIW=LWNlmb2lQAGF3FG8(s{T%pld0P5& zZ(n2)&vhqZ2Dz0$rx@)tGrVszz~W&y{Crlioy_0{7_WqXShDfSyqa8B$xZn`Ok@;| zjyKb=;z?yC1+i$LRC*-49j1TtBV;KBl_p16g&z$+{|ZcP@-GqB=PCU9<(dGB2it~* z594npkBzx-RA#&-QVE-=0)@OvQjwBGKpBdx7Max-OdL$Dq;IB}*;K~K)BstDrsV`2 zAWu8=fccP_=HD?69<6?s=%v{K@QWE@I7eF(BL$jdFAMr&9o?IFkPAwm1o!M@C1s8_ zT$WLiI=AWwptP{inxWKgzOBOe=zEnlLsn@~1w9Pqd5bcL`lQWI0>5Z?g6UMCqN1?$ z6;&MGp0$c2;;6$K~bTZ9Swk2xkb^b~5R^fU_ULYWY)vBDzj{OqjsVPT{PqtO%)Ma3fkQxbA@*0cwAL|37$6O-)=yWhT7s z6E93uSy_27ad~!Dj0qQLPBsKTFtl*(K7gZ{keV7wC7VeRwNtjA_%6PmkCSDWFdI%P zxMGxu)5iV=G3x?u6!}Iqam-3~ zS1V4DsjJKiO*+(4d?v6IN60dx_!TCMuL)K{^sC(ImCUgTN+WEbiV8Jlv3!HdyVMI` z-)<8fT;;iRUa?(<1e6d_#im@@pU_&>fLc`uWh2RCUH@1G!M z{Sh4lrDsk|EKs)2DL6NEhYTb*|3rxz;m&NhA!Cuh6HK3Olzq!@GXM&EHtvvIntB(m z&-cyJ*e3jug!Ob*$w5HiCnh5!xv#x|>BrJ@lc z2MIL@K4CzFZoZ=#?^-Xw&07Sldx;*kfBHdaJHL-RelNi86Fvz3mGJoZSZ}?^0#Q22 zAKLx>bcD#YOQwi-^zQ9AN95XP?q}*@o_8ErSac1JF0Hfn#eUBgf^j|(4H{_#wOnyJ zi%jEv6tba2JcyM+&+*}+ZzDAS^UR3e;OgNb!w-6bpn|IuAR)4|cme;q6}Y|q$jn2P zoTvUL<8j^l&ZDin6Yq2G;aaOpQ*W@pzjgVOB3khNIL2h<;bSEPgjPcDQk@TS@r8nDV&8J#P;jx4I!WJa$oEUYPXB;)le+ zgAKUbn~x8ST2o;~CdmEbb2-8Q^Ns>LPiWzkyC@2!({}4lQ3W zwnI6x@SIVhWNJ&hjdOk!EbB$v2@w>T?`b3GN#f45E}l0u$xRzSLd2Sbq()lyTlhzQ zIbjfLNzCI+8k-^&v?(!Q!i$_6k{hxDNgHoG4xMdTz^01_Raf>;3$}TwZR)le`OSt4 z|L4im`tQ>18=`!)r7oz-g!0{2KdyTz4;NoXy+Rm&-Hq;CMgsok>I`dT{J!xhCZdb& zO=qQnFIx2n><$+PYc*|G9_HAD3R-}l$CZ(R7kIw5n8t+wd*Q$7dW=B+b5NtM;{Xo$ z;Hd=*EB^~|mzPHdZ*%}$TvZK?RL9A~gM*!WulQ55A~3cOb_{`Uw(1z?l7@y9SY%u_ zzqhCHw*@wopdQ08sEYRX?7TdZm)94Wi9EUJDW{8wUeAzoj%UQ+qBOvKI#K5NqNicN z;)geFWSN}p)K7>T5pOf|f2aB0P#~_dEdKD`il1mM;jQ;0wiz_KLN!5CIqI@<%8skR z=4-drRl1^Hd!@OMy{U2L?Bzs2cXH@W~E!T<6YyRg%2b!d^U)1>) zr04H^vYPJeKK5xQ-;LK*9)1c9o#5sV0OQw&CindH_>iD|hJL{ioRfWfbT1Hk=elSUC@FUx&jqG~Fros>~<^sO>Caq+xR#oQjL{2|Kxn+;0TCg1SbZtl){UorRbW)ck zw^^dYc}=7lMzBUz(4)dh)8f8h>a-IHHYoL*L}Tu$uj27b;Cl^;CHoKN6>ldk;-4G0 zWwhUwru~edXuj{NC-V0v=ldJy@kZ9wWh{{XX2uQgMWOqaKJWAMJN~Ai1=RCKF$nU{ z&xod`S4-P=k=?6X4;oeO2lIw$-Hn%1eK_x`%kc)z(M)$0oEzzquBr-#;NV~hibNDx zQ-;*hhWG{El2m6w$)u9)m{?3n3~DR^35{f#QL2uy3>JVXvh|4pKA&H#XJz#V!?Ij&^r$_nY$ zt)j_g=Oq?Gwejv?blIO*WZ})Z$F&7EE;O#Un1_dONILpwu3c+?7YVkjS~A(m&-t^? zzQkD+zcv?i^crhO!{tMx!90WE3imJWwQI@!%tm<_?OnNQ@F$s zIkEX!qX#l18XlFuMC?|0VeE37*Fx;3k?S_FD+zgipYIb=ZswO%894pr{P-aDuof%+ zcXc(YpDP^HVX>lpPB){m$hp9wTXwd$@{9aaU3&sI9Z0#Cv?yZHw94` z3Zh36T+(J+M}Z1T;USBZ+jkjsEI2c1{Vx47_`#MHap3YXRALP^6<6Yk=}1C2a&d7^ zR2MbrbgVK}C=IzHM1i(~;=*D??Y4!P8TK%$w2+u3Rc+%DnMYK43RKbIH{uP>1}bCm z9y^AmzedVm2zkze=1mrfmt1H$IAjFcN`klqg9_QT_}j&c|GtD7#wEEz!LZ?cg>2sG zJ-pg=J=k)8z4ojhzS-Y;wAj5hE0#fOs|HUtBc@5;xRlrc)Oc}NQG?dldhmiAY;`p8QO&2e8 z5a1U7T0c&N^aAlT?_(+PwmxtSn^(&f)RqaQqKJWAA=Q^+No(U7A7p-?iK<$(P>LW+ zTigBaKxi(o=x=pZ9*p@_RaG$=bP|D&PenykPfyRKbGI`$Z-Kst;U=cBj8a*!H-B(s z5j-bSuxrbiA9>!Z>=;~%c;^g{j*ecrq8lAin?}^TmO$Ko6RN8^VQ^$tQdLfxOO6PN zP;=VBARaCf{JH*Eu~}okx3p11g2<_;$9<>fj&g1 zTX~hZ5MI5-A;JKpoe=LZM-yvftp z!p{^usU_A1d`-q2zD0zA5%PEg%SPTl^XxoV$Zkx$1fe|v>Cxs?BoX@=)bpwI$A zlY_ny{~&tfcLl^@$<-R{JJoKncjbK4<&3tm7w&Oj4J`F56KvY80pq$=I?Z*qt31ZF z8IoGO);yIP0ZVH^nDLYkHo=Pil%L)5XZfep$~=g}SnJW9;@iNkQ1R6Q6V8-Lg2v0! z(HqabZvh?qNc2IO%XMmVTvd`BQJw&;qnm|+U~X%8aaZGWAW{n zcu1Pk#lk<7rKx<0KvaxKX1+Ah zuLT@rDneV`q}+*I&?>wM>U}@0zrXuUQ$s4^PE$c@Kxy#E$`(Yy)sYt*6&z9Kgj@Zr zz@~a81h%e2osGt4$qO^gQg_+W0hPR+ozAy$ndvu+kZA zNba^A6-ECSA_X4r%)qu>e8}6xZvZp((u;54+&b{)r=vqi$ZJ=^U9}Axlhu6GHu-XY z%Bj@3v9U3}_UPcUoIN8+%$}*(Vk!WEOpq)?qdrAKJYmq)8NH8wIWVm-y6)QouZ;nK z{iOZ^4W3?lHZ*YW4@c7V2EH;4prYGSB+X@LruLz;<|wEt-!wLN4Ym_s8mFJVEf#$m z`yIcbzp}oO_AQ$G#)bvLeZS?a+oBL)iz6gi>la^~GMmhxtY=nwk-$-0^|o4Bk#~1K z%Fxqj~9_}2SIveWz*rQNj}Wyli!{E3DMV=+qP|HHyZ^s*{#c|sbT-uQ4Jo7 z?q3D8!Hsj{8QE9Q7Jt1Tt0aoR+Cvw1Y}z*p?Bn*L&h#I0zXcY*Dr?8l>SB9d1Pov$ zjywenx2KPb`9bDJzBGvny;5Pog%<9d)xRLIcTqivq!Jn`u0 z==k^kuzGfUR^s;JVs5iKIF}35ayY+`XrZ<9U#I~Z94bIVU~@bvc05)C(z7Bsci zYqO&DTOxGKH+pe)Yr41T$XVUVec!>sx;{Z!S(i6YUk)|G+ z7Q4ym8xfG}leD3O12###nBNC~O1fU~rpT#(3QbGd5w?fm?sDy|eE%-9&594~?$Bq% zY!YK!TW6`{a^oxR%j+gwf!A6yxR&^>s}dl!Xc&}D(s}yO2>}TKAuA!OzCNC|0106y zR2-K5Wie*-K^WImtF)kC%hxqs5wurx$#rwOcq)DWO2k2u9a3RcmK9a1&0t5lTvmcP zmSpHeg0+izBxO>b&~KDA_X`FCg}{b@+?)0F9Uj8LC4V4lPhxDuV#NVW{Jos*wVv;J z*{HVyqRx4ca3X!QD0Gsp$hUa96$XyuA3%g?v!sM%STaRYL`UpEukpydI_HKnW>NLT z6soW?qbP!~vZ6?O7goCc)+LN)Z|kh63gcfLS^rQ(sDg z4Kx-JQ5sUTT6^qf(*`Z+Zu(QQxfn0)-FA3T07g+JF{$b_DP=d)+Vq}!TGF-OQYvp3 z0cdBw=NQJa^|#((Sk#gNAB#s+R8$H>5e5@ug4{{qkIeBNlI&NPfHPGGS(cn6+=-+;e1Qc>+m=>~vyn{u*O z{-!~h@xyXGiK9Gam)TB1a|RhcP~t7Py<*_26YqmpT}UM6D1zqVmKw#YqC_G) z;Ymr^WT+rjY5vWc|8+1p>w|}g5keh0=xaaA_L%e5gsbs^K*CMVk~1+CYT|_vHe;H+MFJU7~F(3C}Qy8YmRGbSQUEkAWi-=4w-*h1?7>iv13vF|j7 ztz(7U-+ESKjhB8|*fcC}8<@V*%dY-;&i>E+J@6`;b=H5XLt;ZqcBIBXbQdpcb0}yc zt?$n25j1z_t*w1o)OfGoTd1dyc{8+IYV~OmY-D-1;>-B{&WIri4_4FPnv;CEShcU!o$6^R;NbDj?5Jlp1MyGDu_8?y;5O04Geg2pt5+?f%SL}oxC3UHc+=zl~M5M}C zMOhIdL7Syy;!#i>&CjDCVFrR-hlsEUo6+GgpE)nOqCSk6ZEd`D-Ug;jtRi}f%p{GN zzBJH)*H^@2_}Pe;_m^4T?#GjG%tp^8rvtd3LM~Fdpa^HexC-`J7t#fBbuQ`jaf@S) zlQyEJ{K8%QA3KoZt1n-P;k9nAj1LWhbqhUn`Orq=dyP zP59sV{}y?`zQ_4>E`N|RAx&+s&O&}a4mCxj@1%a<5Z4V~yrMj^Aj8Go#>zVPpmm)?Xx7f7Gg!|B#(BgV+&+ZKthxWrO3(S3bsJVQM*%kd}T&2{2k zJiF+pj{H}9;MxFxA^mr?+{=ufM+fFY5K#iQa~T0mgxKKIKSbX*^}&X9nb$YDXgw4m zN@gTpNs14t`QF>e&@e#c<2oKMtOs0*F_p!VY%kQFyq0698tU%wkWv49e%v)tNqQ1} zd*Xjt(%~vx5_nFYik(F;vwR}$ae%|t_#lFAZ){z5*^9R*>DFojgsxrpGLdB zmbW))vm=F_44+JW&WQ;XGWSc0n)fooq@EIrts^@&oRM+g>}7jT>(7=209NDAWOe_o#8 zIvmygIB@F3v?+O;?8=$;bma~AI7rXNyHv{{>z%T`G)ZlU{O`Cyb>$^;%`WYsVe#8G zR#3=m+oC7&(AghRw0$DtVD)!}Ol|F(NnRxYYPA_N2cN?`WPj&MutPeVM_wvSO~~Ij z^GVd80eF@(-*K>Pa)S36KJbyM=W%r%f4njjC zo1S@9oI+*tV&U}1DhYi0*Rm7YyF9zm7lqLmW@!VBuZ1mB;0WkM%h^7*6x9#RK7gb` zIx^@OCLMXr&Y>Mc*AAwcuxD4w!8>9EtKP0Xwx_2jJ~i0J^5V`BSc4v{M;t8JQkwat z**!@PSm3B{ZS8>{*fh=mxVkeqSo7ZonO;^XxWIw&o)#iP6W{Ob=VN?In}ijQmVaO8`V0T+ zs?Qs%+4O{O-}HNwBcj5$Cl;0@meR-1NIiz^B<@j>IE>>Mh)oy>^47bJ; zt+Ro5ai%t93mzX&N{^J(u#G}S7j6bjyFUPbW+*%ECXE5S#>ItFpT6mkDJ z$yhFMFgZeEgoVj`^2T*IOKM>Gy`?^Rt>+$Pr|;NhcB{;6nVe9AVa;(vy_C6@iwhnO z?nkXLEI3SL>aF_Zzc$+J^acAyIQjTI))rra zw|WO@bP0KPgl~aay~XEkpH}b! zx(E8r<2-(O!`jMAc_MrCoOV;GdS>K-n3rr!iz%avCRwtvk$X5^e`Vsq?bKg2_3|M6 zi_*c}ijSAqrs3m7jR_v2Zgs7?#=8j8&6Ifoa5DSxvheqSz~V}4XwJj2_F47rn9D3z z?0@hxShid=^SD^eDT%1&W*Ak66G1ylCPy~+h-1A>9yrCaQ;XPwgBdU0v-|Ce-}Who2cShDX~jMF9YDRiMW_|` zi`Gl@BQumP}A%e*&Wy6x9zB7 zrc4i)m2-3?4c@07aS3$Wj;?=;%e7Qb>E$G0thC)cTK` zjGTXPwaG#^HKAk4X3EqJ2d((XIp;*wMU>I1xK&ZxE#Y&$-_Z&YDJw*k4A7r!$XFe= zdldC$r5P#n6H_A}v1G)u0OQuaK@6}MIS(%pVac_nnPQ4IES*Wn$~1>6=x{3VG{RY) zMJECjlAx$yl1mJeFuD_9al;-RkK2YE2gNe#Q1UxSo>&L8Xqx3!%ylnm zbrxxQA|C8G$EA0PVX_4u8X;PUS1N&`g@SlAe6$2353P>Lw5}|PXR8T<&1_-LE};xB z;r!CK-Hb;xyS!9KS3q6#cDw>hy8Q3h#5>%p_zab+`5|wzeK!n|qb^k{@8dUqk!Tcv z{+KkU_SQa!4My#2uMu`k8yW&ZROr*c&}-azcCclU2m{WbsQdtiwj}9xPg7~EAx^^vAhs`8J8A6KP1$l zmKc0#&+edqba-)x8L_#Y{Qys@R%=$0dEw)5|B8C6IPE7YS8GLvPu(vmFjYpbzdNlY z(K8v`3JB-NCo2gYhs67;H`s>IRyUOKE5lqsU8M)H>V>U*aQu0|4ZMpljE1U2X&%@N z?}S@=L> zV!5F7ALB*T`xq#jf7a2l@l54LV*H`M`=+*4$gvo!h-eo^fY1t9(wU9-nv-;pTN1K{W+)}X@wjDXF~C_1vK z@0z$rhs~IAdAePE$tMW+eMo!uh&?$_mlU_c6CZv8{Fu3|`Xv1Pm!W!c z$eW)v=suY}yi2ITHl_1GLZ+ z$sGBec6E{bdVCpiGr9Y^+)E3P1NKcE!vn3%K$@`r!cW|%oX%c*aNe_nsgPlu1u zI8JfbJ1%i`zAb1jEj42PKHHn5cIRlfylegZ({2BFJ2c?G$64bO=FpQ1h}tY@-yGt8 zwB3qi9XBz)KKjzw3KqO{58ACf!dh*9;WKxenH#XE_djnx(`gI>)qJ1>+Jkfci1dL? zq4`_8@yX8Thr<&SW<5c$|86IN|2|$$!RnG-2cm&12f)(#GnjC|fJgrb1na860xULY z=+z~!E48nF?()gX~vw*yRgs zLE;pT_1KuUY3#$_RRTYQknwb11VighB6@;TmYuA+BbPTqE3K%A+;p{M6|f&#;ppb; zB8GNth^8S3sjF$epW7Dd)JTE2c5>eIkh%d^$T3w=$Ir zvY%{Zoe_`-Jd)>C`)B>ttJh*dfgN=;D{6bXC1!o=TA#7o$cw0A*Od`Me#-MKMPzg6JIqI71X{a z;gmECW|q(mN1@W|?G>732c@Y-qM=|B;!)ueQ1ReVkVG021dx>m=YZ&iWHOufw=!iv z)OkZW-6+h@ML}&=dbN1WCw+;&5u?;&-%{|j*FFL3&BJkOLaajsQzf>*DskAvFv*c!pBc@k4zj_-)RDaFr z{)#8f5TuN}ts>5+X4L;!kbvsaRR5g%CE_raT%A8#W=29mWm0A?<3|!R_6}JUw|m&>z?#mk{YhQZJSqfk=SJWn2~#3Pa8w29GbwhKRr}5Q-rH zr@}8<(-F@i&5KAaCl;5KVq#h3bvE?#h1Qq=i4g@>xnC;KZZ}#PzU-&`7TisMTpbKgC3%vJSi{ku&b|sA1}? zrpMnqbHK=dnU{fALw(c&{7WJ$priQDT|;B`Q?u=dEq*w~);F@kOcW}0IBfbL$JkDZ zsE;2}Ulk~GR595TV2DN8A}PezB#5{$Lq%bN5P~8DBpVr#;G}LO0Q{Szq&h$c1#%o z_^r&HOX1~8_`gdsC+jcTY1!(sB-&QO+E$QKj-A{y*rrq}qjTb~3P+JBzbsYd(V9Wj zh1B0raVRG|Z8PB73elSt|5On!+yq^}JDb>g}FGVG~#{Z$tR7a;1 z$EqTQnW~_J8$N~lm0SJK5d%GCs+GkHD$c|-1_sCKSWyhqaB(_FQbK}TJ;@78LsOPO zR@EyiB~Oeu9Au{0Be9EzPfdIEf!!#1JauWI`M@%W9%EtS!IYXP2cu@F_EBo|+sW%f z=+0VTEfyP!z*he%zWB#&GA(*h{CZz-dyTP|BfWv1YF~pK@bmr7ANpI;C~ZN{U9G1s z$IuYSTJ4_`M5k|LZqfjV&6pt)8k*_^n(6_boq{1!=$-1}4jSW@(XtRh&DN;X>&92Y zI5vXM%JYzs>Sd7q{nuu)@3n35;L~B1zd2aK4^Y`gkNyatIjpbTbZW|d2S)FdZxJ?c z10Qv*gN0bNUBTq`(@}B3>0LYV($Aj>!B`B2q^BYu$azwHMCN0-^0eCxASLL6+94;g zs0WhjEC(F34GwT@z#@>i((42w%qYoVdw-4a^y+{w!*dj%0D80J`r#&oJmrsgSF%s_ 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
^?5+Z1t90XKl-tETD;dd+|EJ8n?}` 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

b4VY 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%0D6mF>d56bZDRtj8 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

kb7E`Ov_Uosx_iVu8fq0I+s6< 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%0DK1k0Cd=|2MX*|=&*ipF;o(( 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 z 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 Fe*k=4tQr6S literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-126-output-2.png b/006_data.core_files/figure-html/cell-126-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..8cbca85ee744baf6b2090a1fe5ea234b15495eb6 GIT binary patch literal 19746 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 literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-20-output-1.png b/006_data.core_files/figure-html/cell-20-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d16f21b2b0f8d6ba940dd8e3db2f6ac77d7db3 GIT binary patch literal 26587 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 literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-21-output-1.png b/006_data.core_files/figure-html/cell-21-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3b7b430f6d4003d42340e51a66050c80354c01 GIT binary patch literal 26186 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

    I;8OJ(~7kV`(f@$fKVY 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 literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-22-output-1.png b/006_data.core_files/figure-html/cell-22-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..df679a668eb32ee78ed4c037b5355598e3a05199 GIT binary patch literal 26641 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

    p6S)N|ZF;*XLfTfM5(5 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 a>`0nOd1O+&)H8;;5k*;5nT%_Or2hd|B3XX` literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-24-output-1.png b/006_data.core_files/figure-html/cell-24-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..865dfc322687af4088da0d62e139a112c1116444 GIT binary patch literal 13732 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

    p6S)N|ZF;*XLfTfM5(5 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 a>`0nOd1O+&)H8;;5k*;5nT%_Or2hd|B3XX` literal 0 HcmV?d00001 diff --git a/006_data.core_files/figure-html/cell-25-output-1.png b/006_data.core_files/figure-html/cell-25-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..1a7889669fb3fa42385c6b1d161aedb901a56629 GIT binary patch literal 14133 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≻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 IT|D7`0DhUGw*UYD literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-134-output-1.png b/009_data.preprocessing_files/figure-html/cell-134-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..045dca98e6c5543f7b5d19438fa613c7a8a470a8 GIT binary patch literal 7778 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 cDB6wSi2QwN!O!st$gdUURj(IayM55c>n+a literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-134-output-2.png b/009_data.preprocessing_files/figure-html/cell-134-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..9a3082ed315ecde345296d1e6adb7b7733e904dc GIT binary patch literal 9769 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 literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-135-output-1.png b/009_data.preprocessing_files/figure-html/cell-135-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..045dca98e6c5543f7b5d19438fa613c7a8a470a8 GIT binary patch literal 7778 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 cDB6wSi2QwN!O!st$gdUURj(IayM55c>n+a literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-135-output-2.png b/009_data.preprocessing_files/figure-html/cell-135-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..e6442ad7753cbd807760036ad42fcca41b8b2ffb GIT binary patch literal 9489 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 cDB6wSi2QwN!O!st$gdUURj(IayM55c>n+a literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-136-output-2.png b/009_data.preprocessing_files/figure-html/cell-136-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..7a48ab7131b99985f146b150b40f42c62aaef486 GIT binary patch literal 8058 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 literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-137-output-1.png b/009_data.preprocessing_files/figure-html/cell-137-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..045dca98e6c5543f7b5d19438fa613c7a8a470a8 GIT binary patch literal 7778 zcmbtZ1yq#ln;-Ss0{5zfNEo0rA`*gxA|fE&EpVx!yW{FrlrV-8kdST!WQc)5MUWm5 z1_T^XLSh&?huY^e?tk~}p0oe6JLjO2@At;@{OWtCuBt$Di1`o-g`!csd0i8Q+8YPY zZ4c~&e>O0w4ALyyv^OLP%7pgE)LEf4t5r&ysX^Z?VO#21;hk|_)gh+ zc(}Mr2nss>^92ECHygo$LkB`(kb^Ea4ct*EI&X}yyG>7eZ{}Gv$T$R_899Ki7A)m zTYbA8`|RE#Usl$s=!C2@!|z@N2S=Y*!}uJhy*k@#NH84lBLpRHk+SiJhRR8g8<;GA zgQ*~okUhpN5pR5pJ`Jho64>+eIm-=X=+x-8L@_mnaQVr}Ni0^>u|G#8QIu0!*TN!=k0IQ| z$j7JBZ)rkf*mBF%&#xNZ`qrLkV^8i(4-E(mR1Tcxg}06#JC-EMh79|ChN3v{*`D;r z(s?gmUhwtv%d>7zKo8+-vu?#}qAl5^{InlFeAr)NsgN7_^}$$c+>TxNtKe^+;MXB_ zXDUi*;mH@mmjUNG;$1rFoDUz=m#2uzr%#`5X>04gPjhlU#rPQIHf-$cvohJ1Q{9M_Z;Oj!y9*HskrAnILW|}70xKwLL!mg9AI^? z{Ul&o!zCsb^lC3$?)k%%*RXFKwaYz53#+TWutfUbf4}WbdH3)br|6^5P=$w5`Qp0y z<=QFmD1Q6)ny-&fQ&(4+_In;xgU56*#3p?SKb%NNhFmCZu6h0a-s7>HxrXIvuW{Jg zE$VXD=K7*ev8fcY9|mRCh80dGB_qbQ;|u-e_QW*#!-|@OWGSl>{h~fxB^SB3STCG` ze{^y(SHg43wx_^Aer01Txz*R#ms!Z-?=xr4ARqDQnbTJVU}8@n_-=0?ei_C zx3I+vuz7`wQRi}1lO#$F3zbw<_}vI&ytM4n1<#%_t*@=++=ygmzU-C}A%rE{_ZG!8 zSaiZXC^H*d!o`dOG1#GE+d+IFPQq)NOGZX!ol4Df9KiO!G{0+-!n~ z-o1Odg@iQL*Vmb)11j&_y&KLd2(K+0BRXYv*44@#`ZW9c`ua<)!m*A6Su2zQ^7?p6 zZ)dtfOmuX{&h~1ZytL)a=c;OtNsQm>41Yc`@AYe0dIkoDzKYaT*^-iy>hWa%OF^4H zg~nBy^`UfnK|y$!k?)?N56(^;*nA2Jr-w`nj^8wB-Kq+QvxiebcV$IlqN3>O>8*O} zf_Jv_jH^oT)3FyVEqSOUTv9}i{q4QOtYODsU)FeEAPsrSuIb6?sZS;8Gu31PWZE#Q z?f}+t`O958hN`%^WGVkwR;>&o_C2>S-GxSC#C$!qg9i^9*7(fRM4n(_DR{&x$#eSj z)y~dNKk8(5cYx;sasWHo4eecW&2Md&5}mFY9Z3JMDO zPNZrm7HYkI(AwAifje8PhYlSoEziu(X6#%2n5m2$$Y^sEr(z&=Nn^YtNyO>1I1SSU zS*S67QELSYTtB(EuBfKwN}*YuX~j?wj$@L2XDxJ!n4cYI7G%)e-0ZcLubrC)Qy$Qj zV`N}JFN`)z_^%XfZf!Y>tHK_9DgN702&s{B=OI&WZf@$v&`wd3q&IqVZ9eSbLyh(X zk#dj8kM>lU?ZBZ{%yDMsyioQa{e0a*&8t_h=DyQcS5JlMNqqG6sRCOGFCSyJSzQp8pocxy+}=)PGz)O;5;~p@hn=ritQ#j_ z;&9JOG0(KNI@xcE8(9#PkJswb3~9hAF|w!7C?CG5@Q8)GTpWNQWZ@Blv9F5_U)jEB z2xla>#S8bpvWo&V%5op?nCw(w*FmH6Ookpjcwj$MY*bMsU|gw=_FqoE;;YFhXv*g{ z?YBHd@4wUZ^lVH_OlGwwIZq?~2D5}mju)kWO#Mi?eJ}niUO+&=tHES4ZuTa1gxJCP z6%M1?6%^7zczvm!PfETq6yQi8Be2aQa9Yis^> z%WA*!IiiyN@+!Nlrzd~u)>ItbZW#Qf0zwmCBof4&1rz}ho|*V-7%8)eyT}d>4$?ZF zoL6Wdrv0{eZ!-+iRI)ld6f8$LaO8+KbpGdq+!4DOs=E>$n)Rk-GYmn%dg%O;!BHjAT`1WsYv4q1X~1OavAD zo#{d{it*IECY`+2IKem%3icQjQa{!)k#YsDloCYEmGGFD3(dbBK0GpVcCvpMtzm3p zLVxU7x|;O*^%EyfU{?Y+R_us*It_!tQ{CJ+cQZ3HlIwfc>VWkHl?L~-S*l6s4Tp%% z?p&?0nVBNM6D7>sw{J(Mrt&<=J$)oGXb<~j&-9Y2>gqh$QtDEd8U;JFHkqBW^kzRh z0?7-Di@4?!2oqPnEi6Fzc1?I)w>0YS(}a^`);lC;wG%}hy9*42_wL(=ZjI%qu8lmVm{xm_ao*dr?}+-XTM@7? zM1YvkZyxuuv$J)JjC0r4eB|Zj?Ha=9shf+0<$n9(K3(sPjSX_id$z7C*|<4NA=!5Uxm z=gJbfk!l={T)R5h_0qh4>Fr@bWW~^ZTlK?kBaM;eXd({{+ZBBP%W4XC;F86=1FVu> z1)qi&LU!$W@SP?fnHws@?$h{!=D(!F#J@S*+Ex$zFYn9Z0X}xD%6%AZ`eBHo(I=Pyh27C-QbcjHK zN3?w-6QHfC2)g@8_+fhm4X@{>#?pREIcQ?u*t9uPuP~ECoX|%VBrhX_(7);~WHZL` z>f|kvvu`N|b+CQccp-HW=bBgJJP)9huD)5{P4TrQ=y-~zI*8X+ZVu=&1*QF%jO?WA zvL`?JcU1Hl>~nboOD%@) z5)ywY-4Hjy^XC<0Hs|g}2wAZzRehsS3W0}O>+91$;s4RV(e@x4sDMGE@NsHt>Pb`I z@F6D4=)}bQsPk$({QN3^{PBmIYt?p9%YXU}T=ilj7Z=w}Q&UqbR@EvvZ%%J-Z`R9h z*P&?_mX>Oqf=ws(|5!}wwc8B~g}hGXr6xm~5xY5^DPq~D-{qYPYVKA-vfuZ`3; ze*cKIj5X?<3I=qE$-tA-at?u!LM;SB-HY*kfXD*_xL0qnBQCD%pgz$bGaiE8(q*3i zc@DDo7>^#ckOX!H-RUqs6u6oMk}`vyS2qU~D%7`OT~IA8t3(Du!EfHYSy*1y0XkV~ zU^M$AwYoZBq0h(A9xtrm>gu|%vZ8za`rokvCWdF+T`DU-gSwAo7EywaIFJ6k9O{c9 z0^E&{Sn~mZb6rOoTbi3Y<>;g`KFB^p{u;Vh%x&~0A}Tzmx;1X!PK8ZQ8&3%~efsoi*nsWF?V!?TWL zDSOF_!ote_H-8SrwHgo*Fx?S)pl@3Lqzja%zuuOdTrxdqH}k;0^PvIoSU0lbaJw(^?Wq-UwBX$4vQXc z2uDVye6G?`lUmk(SRjixpe;7;fOV`61v^WsDJyq@m^{wJ1Rm?dQ5wW|ArGfmXsN5s z3F5A4$$={dhz`#)EYCCb9iz9hv57Od!eGg=5!PE|lE0rlU@l<=I0H7Q_|ryNS=rd^ ztl(q;hm6AgAMTX4(%-(Uly;XaH&+w)hmQSTQ`3EA3ybOabBZ9rGz|?C(7i?cYHEa1 z+H7O@QJja*m>aOx=xr(HACp0;zj-)U(46d$&?HXI%C zc)Zmgv2p;iqK%tW?twnJ?*K6ur};!nz2`KFYwzCi;AYCulmpk}YuBzhq-=d}#p!;a zmvrwzUj;imyF+wzy+B~y*=p>Hnodqd`{>vTcD81NCEUM7fDKv(9<=@R(j2}P$I;Nx zpomBnq#$_QUHn|vLBrGq0k*&Rj_qs8ee1FY3aHdeNfMq)Q0Z2z`;^`QG{ii4lA5cP zooCmT)ep80v??b%JA1?X_x7OR4XZtJrKuBV@7=$TXu0_KcuWQycs`ih1WE5A3rkA? zXhXECL~SJt6BCzWOHpb)~fXWe=XI`ztJbb03eu!pWRU zXpej__eM!H^n|&u^~<1Ga=?pXGQf%QiiqfxS+{Ej1k`{EIR3{UFJP!FqVk>_(-3BAaavI3onRLG$VZgzeM^ z!NYI(;rXR^$J8be-{9a-pqe6G2zC@qCAf|yv#F`2;Zh=+2%BP6ZkQx>DMa%|&>nim zbsBBsQ89Jbr$e$0@r9tV1W5f=fPgw^g2tYk(2cgH&K_ zcsLDI7dHpT^I-fRX#tS2AhllEb)B=JrF(r9;sFg{EN#$1AWv0Hsy#ZPF)38zY7a%=Ae|T< zol!D5UxCf{y3E#6lu1fN#1UW+MKCsbx`hdd`rF(Luuim25Wl;Y4AP*N77BtguL?XU@z|%6~=+UFvwSJzUBXUh}UJ^cYsU%_Kh#|^oB@oo$ z4E$!Q#-pR6My7L7l}cBy{x#?`LPIPvF#^Srrh=y~e&*pxlXMn4FxPr;{Js_?X?SUyD~uZzuji;z*PC#H-;2NFGF> z5NOz?jUivq0+nza%mpx%IPY&LS|wFgU67yU=JoqPy>o+8WR>vvu)a9%7-;G@$r-rP zX9H&UDWn^okgs`C`iWk(AjtqY5ER01tr&q4_Xkgy49jh?P(p>h^j(CYPed8a9@hSR z-Cqln;F7Cn@f)MyqCiw|K~K-tEIxvQb07;t)S{An#Qp1IOu+#)_hkF8 z&h+EFi!m6?D~G;|kdLU=`mYLvbMIOsR=SQ{vTQt}k|d!6?AwLBLY_j6~? zyyf8Jj0dap`Us2o2PV0oJ!5^m#WfZHsmr0ghYufCxq0(JJj}L`pO?2)zfgA(L@cvq zgrbUy2&N6vNyk9l0)2BxUe}=vl?8oJy~JFt^NZ7Eg#L2mtUP81N#BQ!=P3KL`RIVJ z;@INSWS7cVOAIAQI(RHb?^dnfvXbwO4n2K+TWH1hH+T29!|As}x^bE13K-SfkRRDZ zB_yC9L1HU6gfp_!sVt5K=?n*g2FAgPGBPqkZlMbHyW_wv*@NPc^l)%rxS)=CR(hG-t7mJQqp7LsL6BMnt0)h`P}9ZbWuY2aP}6{Uc_dqd%-M5>1N8~nc2H^= z06ccE^H{HilU#KmEAyZ_q*gvzB4rCjMg%%UQejMVY-|?z%z?3ry1F`O{b&p(4Pq{C zxD50eSjVbDHJle^6d(}ll1D(GV{&o#DMZsC29%aXJQcDSG^kEQ>z-46&h-%J34>`F zkB&Z03f|dTn45dK3~_ZQl$yu4wiCGEKJ7se;t=JU0RBsW>@*0~Dgs5w#lbOppDK}A z3C39laQyX5oSNbxTG}4(p}_Ho-%+2_Ao@UH62V@)Q#j1J92cl0D(KOw@}>N-Cr-lUs>I9k4@wi&{#% zSN32N#PJZ~K)}lJUBCgq^YHO$!@NZNmTVO@fqBYp2yE@oFKf-u&s(vuh8WEQ;n{6( zu2UiG?0#u3NBLAD2ho-$R78_AYAq%_{BYff_){&@3B7W(4)mw#;{A1qbSCe|>F?o^ zMDo;9tJWo=p4lXJz^SY}^zXkR!`A~&^4coypgei<hVnSgaEXOKYmvs?YX@q#0MbTon*lscXbRk_GP{ z1%<)E8AE{l1wy4Hpf!g;Kw<4-)7nE7ocmgCPU5rY#SSy@UC_-Z!d)XmMpjk=a#3TRQM z&$d0qX3lU2r46XmfI(~bTs{~WtukwsG9a6%*jQ@@K~o1{e>9Tw8?nPC%XB13+F+fB zoRB|`_=m^NCr}0|63;3;VzN{^mr_<*dJEvp7pkHS`lAgxH=?4VB3{Hkwre~*tl6%? z$}%GUqE*;I8X6G@XtS(ZW33^j>tJCExywQC+m<*dd;%Jl_GsK=FJ cDB6wSi2QwN!O!st$gdUURj(IayM55c>n+a literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-137-output-2.png b/009_data.preprocessing_files/figure-html/cell-137-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b1a094884cd528e09d0ea3a871414b599f02dccb GIT binary patch literal 10107 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 F`(K=O)E)o; literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-138-output-1.png b/009_data.preprocessing_files/figure-html/cell-138-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..045dca98e6c5543f7b5d19438fa613c7a8a470a8 GIT binary patch literal 7778 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 cDB6wSi2QwN!O!st$gdUURj(IayM55c>n+a literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-138-output-2.png b/009_data.preprocessing_files/figure-html/cell-138-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..0e98fcf7dab86f9440bbe552a458edfacd66e981 GIT binary patch literal 9613 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 F{}0!CPL2Qo literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-139-output-1.png b/009_data.preprocessing_files/figure-html/cell-139-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..cf18c230c009a5b58275ebe44f28f00c19edf7e5 GIT binary patch literal 8061 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 literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-53-output-1.png b/009_data.preprocessing_files/figure-html/cell-53-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3817a07efe7c3dd5425e7aff075f95229f2311 GIT binary patch literal 32858 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

    +hlqP*Jj+j}OBn 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 literal 0 HcmV?d00001 diff --git a/020_analysis_files/figure-html/cell-9-output-16.png b/020_analysis_files/figure-html/cell-9-output-16.png new file mode 100644 index 0000000000000000000000000000000000000000..76fe157d95ec7997612aec37da48a9e6d4623576 GIT binary patch literal 18722 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 B!ngnc literal 0 HcmV?d00001 diff --git a/020_analysis_files/figure-html/cell-9-output-17.png b/020_analysis_files/figure-html/cell-9-output-17.png new file mode 100644 index 0000000000000000000000000000000000000000..e85aa57e8d09af95a58544cacea8f7ba89099394 GIT binary patch literal 231294 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�tcwWffwV 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

    fJ^=zDqi$O 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 z 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 literal 0 HcmV?d00001 diff --git a/020_analysis_files/figure-html/cell-9-output-3.png b/020_analysis_files/figure-html/cell-9-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e3d59d3870c08c93d8513bede79d3ff96e2dbbc8 GIT binary patch literal 40623 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Ð&Zw#2pTJM-htk;SWs|%JBn0Ulut4c;rjJ_ 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 H*Y)~8k)hMO literal 0 HcmV?d00001 diff --git a/020_analysis_files/figure-html/cell-9-output-6.png b/020_analysis_files/figure-html/cell-9-output-6.png new file mode 100644 index 0000000000000000000000000000000000000000..bce16c33f6a92bcb8caea9b718e75c99da472fc5 GIT binary patch literal 57865 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 W?0>h9$uAUnhl+y6b^NuPcm4|ouk|PZ literal 0 HcmV?d00001 diff --git a/024_callback.core_files/figure-html/cell-10-output-1.png b/024_callback.core_files/figure-html/cell-10-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..dd93f388ce59722a2898b17a629068778f69c0e5 GIT binary patch literal 24738 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 VML7vur|sEuR>wfQDvS+PJez_ufV8 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 literal 0 HcmV?d00001 diff --git a/024_callback.core_files/figure-html/cell-5-output-1.png b/024_callback.core_files/figure-html/cell-5-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9c3c01199cc9381533833225a4c0988a7bdb12cc GIT binary patch literal 19776 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 X{<9_B66=AdnK5{}`njxgN@xNAL^$t;Cw?=q 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 L7gNq(zyEwY`r literal 0 HcmV?d00001 diff --git a/027_callback.MVP_files/figure-html/cell-11-output-1.png b/027_callback.MVP_files/figure-html/cell-11-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..94230cd5d009eb021c0e5ee5b41069071950f0d9 GIT binary patch literal 17672 zcmbV!1z6TuzpaG<#*B)J0R||D(x|kGsDyxYqaq+6Ani*kimfPugaV>;z0%Sa-7T%s zE!}X}=KJP5_ndRjJ?G3k504}BzW>AowUoAE!!Y@{*1!1Wh=#( zEnCjEb~S!;k!yMee+XDhs97tT8(7<2w$xvC;j;CO>*m(ijjrsq)wi@VGB@Mp;OF2y zviF*`^$jaQPEON*eSpK<(vY)+J+%@SS$E^Sy4A8}n=X@|<>6vsM$49+v5`D;O6lgC zfo6v{Pi&YLhbJ{``{RZB64Sp49_dhu^b)6)c=h~rrG?}^X-T^^&2~XwGjp0R27TpB zd))Lwe5;2%t$@m5j|YXm{x(|u&Mq!vjnfPXUA{%d{p0qcjH5UEb*!}OCLNrpLpCLj zooTUU$BTF9t-{kRJEnNBoSyv4t&@9qtiYd_q*vj^mo2;g@X}iH>!W|JUyeUNu(<9c zzfL~GMZWjx)!KXHuirO+{)7Cfxqrus>%p@Ag1vQA-M3LM!kp)4BCg~-x*faP^_JMo zm*@M$t($G?rX$XF)m6MdXHzCJ$+~afsmqry?-X^s8TV?ajvClo9ib=LEOq$E5t;Yr z+>@_1zdU$B;mVbF@$vCT)WvR9KE(scM_zBu(l*bYPiAzP8@_UMvgCN{wXyDs!u)(z zi~21GWy(F-6s0mUnCE9(7i;nF)~!yHJ(-g&RsMD@JykPO#(B^7(9+Qrjn+geN8PGs z(m+rogI9q>F!Otf$Imy2Crlae5?DCB|>{`WI*HZ@Gv$(zD_3PIk76x!#cEwkFtLVRTW=)-r(MYNc zzxZA%W1~yjc&(<*{CJ&%Oq5ED#x3Kv7~Dnb!iAd0oLS+Qzuu#t3Tc+Lw6v^FGEsG! zY__wX`gvbD$yoV<57()I#+14=o4)F|r|zuqUL32E8^>$(c}R0y%(NdLE8@)FdScP0 zPCG1pFs(?hLEl@ub9nLF!!6`RZMw@(;Yr>tOto#w94TbiNVknqq3XnpbQF1C*IUl? z$NJ^dC!FU#zI*p>h4zMJIX7m;j4t>KD&JYNX`{8W6!yu}2Hxs)J99~wlq$FFI(YlDMh%HZ zG#oBu4=c_wDPO%Bd~f3(jcZ)iKi#%(`!0ug3&~@0(K2mJuKAVoxcO9{m#R+0U~_t3 zOiD}Ths$3drFz{O`gmdEK10L^wydhND_k-NVV#UG^vY?y!ig!?v3|7JUqs*=b0rgKM|s@a24bfwJXp?M?gTp zjU(N5KqDkLINZ1<^3jtgN_a3E?0I^tZt`{CFJHbSUa#kI@31t_F6gs;*XlfbfsKtV zQa;GlxH>#2EWlnWcZWMAR4y>Kz5S}hxpV9X51!qw>lmj)>G0ZYs(SY9y_xa8Lt#}B z-@mJcgoYZoy=q?tSxn zq7g1C%)dIkbCD+&H;M z$ac)$d~RykxH9-5_EITAfra0^rD@*n2I7O{4T~gF)TXubrRHM6%R_w)CRAlDtvA?% zoyX0hA8t8hADxY$n;FhyN^+dGoE$Nn^!+k(b#OS|Y1Yy!f9~1tir+uKHqQ%iaLCqa+xgcW)rwN3 zs&tk5cUTM3)6<984m9-iQL`sBbS*98539yTBeu3_BvYNVJr?Fh<(iS}Sbp!XKjl#< z$4Z5UJj0zV%kD2um${5}zBWJ1#wNM(zPPHEgppPgPhFWz=AxB{RKz;EjM) z=&!c6ngm0+$wb6bgj}GgpOBqdP?y`()J=)AXSZpT*2}&*@nWc}6baz@;zf|AS!zyO zuXc)Avr^m@i3@?EnQHpW7ruDyyBjU)G!u?>k&=_E!@`gCMp1k5Zj8Fjfld?ZBE#Rd z^j3wr52ki84zy z#TH0)i@|VqcYFH26g(zUw`D`n2ZR9w9!H z+Gs~_HW^#nWI?;ZXw+$={_k-bA8!PmeY!J**RZrZA}qjz`KV5YT1tz3l%RF@TawWp zW20qaec0sMm79d+qX&3$!%;~z;;y)@-ozMH^EIzeSiJM&GkUkn z?Bgl@qE|H;lub4dKmx4TmzUqVTb|#nNo~z0#_C7(>`Ob1$M7DT9B|c6v%ZL= zCb7YzU-ZnHIZ?&!tZ`}aHx1PEVo{7|<=5$p60R=TRAN0LQq^Z$oSDKw% zmu~U!@;0yIeAFmf6?&oS#es8t*UI<0xw(;`>#a`+bDkYIJ}JE`%yjgy_7#;cvv(?uP$8X9o@mziI;%e6Hppf1ZZXw%#uAe`D zcGepPj{6KDc(|}7<3261+Cm2kWc>Id%11UaiC$;+MGDfNXvG3&hN6(?pOKL8eR)XE z-b=)^fp0RgwDYGwPwOy#JGDP|*bAok`f_qP6iuq*2 zv+8Q40|o1M9V-?&dgxG|^*}?-nKNg6=4U5&={=zU8_3AWJQ1+!l*#JYW|Q7o?5oG@ z8>g3-)`j0aNuBA9%IvMfJ5}L_8n2+Jcmd(vyy!Asqk7iESI{Oh&yj9B$C#fE9`rzg zBS6rg5we4KXInn9h7gr5R{5q7KWo4gn=lUQP%K%z)9dQlDAvr(3g7ZAO zF7rus@rI*GOr15Ys!T;rFYpYK@b zTU3`Ndg;?L#Y}q}s~?}1yN~0^>Q4B}+Uc?x&$cI9c^y_R4idlLRE5T9!t6^K?WB}A zOi+Zyu;afQHs$UZEjSdoL(<^q7dN-q1F9Mter(I?mJjymo_HycWOCR3#cI zBKCZ^K8uts%+FpxMlm3b^5RoXISZmL+#bFCd)Gep$-3`asgpZhW_rRrg4GiY*bW^! z=QJ}`fv0Vv-o3kuA8*sALIaqBYi!pr10LPKe?Ng-)W(2Pf6h8&qBUMZ+iARpG?QcI zE&bf)fI~GY=DL%M+qJD;kdyc17--;Sp5-6q{CKp(0m-TC>pmq4{P?N5XoWEd4mNLt+V=DMG`|sq) zcV=~AfzFZf`bE9SL@Ul+jEsX-PJOuY^QxX|!2GU@wggJ3M0eK=5kM0~&1#r;0o4KY z+)n9la~GXCkEp7;aJ;!)S!ZzIAigS(eXss-S=`;yDlm|>Fh&}sKVfzjV8Z72k5e^N zUER32IK~vwoZQ@AVDakO7)`nul4@Qa9`82p5xj;t{kaUU}As$dNd&w z)W&Czdiw{gQndtc{J2FLFTtxE-cjWpP6D-amjNdUo(rN{G2QYG#va(0)J3cFy4}Ce zzJLGe%GQ*7jDptZ4NKo#9PKQjD^c6FYgbfFlq$OELgDEA(_P1n`)Xs-29g`Cac4UR zfIpc%g4X3|A3ZijCLvN@*1x{3+auxVvBC7AUeKCykk?RB?o*m9AI}zgi}kJAN}p1&@2danb%y}i z^b0*LS{1Wx`cxS7MoN6FCSs&KtUuFi|0wp6_ScOQV_*n?gizJh%mDTHJmtbmPs2Y{)EwINu{bje zvqPhq8w}CHr#Tu?#>RVVr1f&2RFGy*&@)JJHL#LOFlP*fO)>Nds7@F6z!y4BPv%M6 z^$a{`n4G7A(yV*l(Q$k{=`U!bfETR>Oub@Whpruqk2^dyvO;iqg)gM)r)zQKhEZl(3k$+yVc`6f0dBrMEiq`hDU07)cZR4_eT zY`j{rx8nVMj*Q=@`Ar*?00wJ8>La8%Qop@_g1$j`mz1n*EgDXEy#C__3;j|`u8aqx z)7V9)h3PIrNeGhyp6p3(G*f(i%=A%WDS|}<5nfs7#h#gU9ZzWYx;@WZuY~DQnm@&; z{OzfLvP+VdE^*Bnl!QF@{a^=2Z}{uwJySL|CjB@B&|ceRemo6jttrpN?1NVM(I^h@ zq60Vcn};L{4ysmWWw|UmgU@wCsi+2C^6g41Yw^x83bZPtNo`aqcQ>PX_~c3PXzJT0 zL;FXw!txgALD#y=g9bl!M@GeZFlP?u?h>^4b$4Od-KCppaq2#E54g0vf`SJ+M~<4+ z+O@9xJa=|Ee;{B7+6mpZBl0(Ieyp483b1}W`kBjd>W0lwi#Bju#XE_|W8b#Ov5JUj z>pBjDOZM~N$->b@9zA?mp(rN;Aj9m%sjJghN3BCP^o~C^&>3gHX0M|=QL608xe5$4 zZ7{8GEdPLe`?Ry!UXRupcir4N>Ib{bq|piSX+E3YYT-JoLGR1D z6T_(;I*!9R_5k{$j*Cs46v}W2)5cxLWU%SAXg@V+HYVU#z&{aS5sdSh&;uHhO<#AG z`bU+C&dLzENXNd1<$@odxpuYZ>(0tpF&2M^Xdp=;Rpgm^#l zy#B3Dw5KmF(PeRAe~D(?m7M)9`KqL$c^>KQGFcED|CEdmI9K^s&(zTFSJjgSD9muv2t+c=&$*BI$-Yt3I2&J$CK8 z!aG(^z=cL!OdGrG=nFFiej?=#w;-y|~j zJlU){5~V_kGvl{w3lx;2n#nQ*?nbL8R41EiPVx|#|c0k&`MZDG6ywF=*5g;n$1RIhm{O3rY+WH;(f5G0b0>!c(?fh8?sUy*>(CDQG_y zj;M;lAL7mV0x;1s@vFqVb6FVtM1dye5ywbETI-1g59id2I zc>vh(Q?N-WXk{tQ(4xYkqmMYv4d*dtw{+R`U3TvKJ+8(+7-t>J9{cg#`O#-P`K2I* za#RYEEQ6L}gl5Xvs9in$B2twayHEVywfyJ%2s`G;p0gC0?N8{f40#OEiCL1Hn_I#x z0rFoIWHbrClwcx=ba!9VH#FR?!KvGrrwaNMku}rHP7Pi~bO&%9mcYk`MIySLHvD|t z+!anohzf;P=B6{hI{FK*_*!)o%e1^j@F8zzo1RJuk7}p~XvZeSKHNIl(F}TMw4XP7 zIm}I2P^*Km#E+gmvu*WwK1J0_GroIkdvhSEuE}MW-WU{_2*|J4vOCO_ffT}? zTppGjO$l!#5@{cJ7bBZTLPA2bsa-OPnQ2Rg`t0P8o!l(iZ$`Z8cu&>2`uci%Xj|ma_d;LEf?9mKuL5<6K`#+4dPULG2M^?dy!D@0v}O@u zS+ZsMIi0+OqK-;1n#@9~e9-BD+3((Z7d(VcoS0QBEG;daREe>g9x0Z09x?U?t}*E- z^rGSL_V*vKiMjz%3fcX0a7{r$fs~X~rOU!-ps->@pwsS75bVs@jFH0qb=k~czJA3w zIi1ET&QTUlTG(bvHHgx%$r?igaxfWc$z)^@-30p2z-tihFgeJW!fOtZvpkA2U0|ZS z8|)VNGoEMy?d|O=yqN?ngRx8R!M#76=~$WdtMHH0wLl3rV1VH$EMz-L6==3?G=((k z8=RdjEIeAwyA$8D?f)KxY`s`fQPGg)l#Z2-0ia78Qs;O^L*0iTIhKl)l^9^ zEUU#6Hg9St!epdUga`7{1{IVY{cQ-$`=PlV>m!1iH;K)C5M7wkLtifOFP;7#r#JKS zJ`*1}8}x{;{#T~7hO%a356bwweQlP8h?EqxY=1!X1t`ED&qdh@`ln5IzUFtHyNT`r z%qKb8RaQ1R{Qx4j2^a;W7v-W?N0TmnUP077d!%Y}Hb)CIe<(Q5V>2f-h>!_kHyuGi zMJcSFkGgR&B?^maTowA1(V?H4=prcQNZf=G$Gr;(!&;)-L;D~a4ftSHu;k0?V971+ zhF=HQqSzI`y^VH>%Hv)=82_@|o;!Ynb z*vwR$J0Wr4x-xbxlrYh`-{Kn>h1H<6D+B9zf=+-@_kGrzPk(4Dj24VEgk3OiDM3El$gg4>YRc zc8WmUH4%!3CTsHX>OIhF?V;Xp-M+nRJcLg`fT(xXyk)}gAxyIqrBufuMlR2f8E<-q z%t-QI9KfJrpK`30dR3SlC*Om@jv`+1=^p5Rq;-;A2fV4lYb>peS<}Z)ac`gP7I^2! zZxRXlj|3`kN;v5a(C{pD)sFz@wm8q4k_rdJaB*>A-Uj%)8=t5Kt)btte~K%9O_fqoS-w0Hu>b(q*yS26CR%%hv@l4$W9YR#zJ>u6^r~7H-yK`- zXd4h;yWIKZYpEG9MxIQE$z#aOP=ydF10c^%a2uUb7Zi<7AW$A6t&pD$yN(fNZ-9gt zq##sPuQfDlt=YJn3%?A7QoAHU^jQ17I;!c1ye!wtLceH$xLkPV>{&l({66OxDc}4< z$NTv{PJ8*Q+H31A$X;}?m1_8vn3o!n^pv|3yJ^s#{~{FA!-M`T;Hr6qJT7 z_KB`OvMK@I9@wS7< zj@6Q-zqetRpJAX=tzO_8e+{8J6kZv$q6?sm_2^Ky8!b^;Un9R9WE|R_9+v?gy#Uqa z$=9D;D43n7rxV8B2$Ke_8=q;29>*9FEryzFRlwrygF^XQ(5BZ1iQkejS}LT|6Fb>o zua{;!U<_6LDYN^$TD7RJ?rSub66^l&6(@FY+``0UPN;Fh&Ea4BLuxr5Hu05CZ#eM$ zG>pIfb02jXCMoTY~U{E4l$<@{H z;qsjxpeu)LAizdUV)Kru$A8ny0&uTpK6ubR_-Cm*)v0-h-o#+DNo8fF43bYK)v`kd z3(x}`K{o4gvnWl{X#IfgM23W9jOi2Z`y2Q0tX#dG3q_5agcFJgW#fH$NO@GJSFe*r zsCD)8GYMs)ykvAEdHy^XN*OPdkWdTXL#sFmK%fK zPq~^~G-urzW4QHlub~RiEO;1iPrScKS_K+e4G;lfMfOS6H8}(TM`aa(vjJAw_eS0`~{Qyc{1!h(~vds>dj1ooM zPt++5Gk8zvIp9Gk=q(3swDM`=1!|%9x06`gVPpxFoBN_*p`H~$WYCJ%fT%hB~ zLj=u!G#JQukq951wj0DUaPsZ+n+vg+TAgk$XX8DNwC??;O&>3EcuQm6qXc~b?NR3! z?Gph0181MySRArU_4M&!9cW<5`Q~{u^Y$-GjTE!6qBNWP@n0G;-rA1ZxX>rd(Q0IK z7H!j~u+vyIJ6_aCDKgF)v-0G)Eqw3v^wfrqG|h)rj~Csp>J}Ay8rLXTTPLzaaoTci z{qxTtWU#b{$IF*V1|>VmzL1J&1x*I)Rb~u?0Uj{ z$lwEGHPV2MszQzGj}RN`XFb{p>4v7w#&TFCP`8oqBdBN_CCv%E@uX5-EDpAUPM9aU+m z*c|zh=f85+;9mcwEhm>j@P3UzwYbfZKhmG=95ks{>Fk@-pT5M{mS33WRXhBGR#7AG z9;=K|%iyJfF1K}^Y13a~+XmF88G78uHADE!?YNv}4WukJ)HqcClcneXbK?*NUyVj@ zPdAk?q4l+VFK%D8c_hVNv{5-Lv^05ho?5{w9)E!hno+}bvqI)siFBr~Qoc0g#EP@r znCm>+nx^?i^ELb5@fjWVYFj_;p(o-wn&92pG)l9s({cW@;KtLe=G*7WVrQ!g+r)et zs|(|rUB}-XQWu(dOg%k5+SqGP)7O<=)3_%(&xh)o6lnF&()UkqQ^*w>aWbj=^@x4z zo;@)iKb{~mO#{L>PZ$(h71M$|6L4GS7(TM^Q;}+)%hC9}UcCw>(%0~>oTVaU(;EzB zkWy?19A*skFjxmZGOq!H7yLiUahq9>XnibiTZE9x3M7kyqli}9T=o9lJAmaMfjf!) z>K2Woy+MA5rKATY{{7re5Wyogk|O<%nMPu`&^tBUmbH}>-(}9Kzp5LMeDF_wMAdu` z9G(`|3hEW9ot{kG9%O6^K|ehCdi^`hGCEQNAU5dh>!&W36&D{d@*)>`n=iF{eMm?M za`6Hg_~wlfR<@XhfuJ%5GQm>~qCyz$9SgWT!c2Olq6cpZOW1 zSz})Bjxa@{RM2eh+Ga8p->mX1MbSr|vFf1Otm22-DAv=dgP$KAJIbJ28lmDOR_57$ zdBLfPOC-eMFAC;0NX4!ro2{#E$Xaa~Tq5;rp8=zWy1QT(3I%}!AvC8t3&wnyR;Xudd!#uIXUr3d(&jdqv z=7JvU!*KfG)i4*TvW9RF1)+$j;p0EI?@nAYwgeWadTV;Sp1E``p8#a@f_V0 zv08JlOR;ubbunDFPWQgW_NQgv8F$p#QEIYmWJ`2c(kBsKPqwf(m^w&2JM`%N_ml$q zV8~>|AtXn?6dI$S!z`9kbgz=vi6q;-)AkR`y*s2$q$oJMBzXZts+OfpY1{IAN+Uk`Y-$l@MtVMXZ)<}O_>ck0y; zEN%F+f&KJaDe^HX{?mfb9&+|2+fSd25%Qt2bXjdbfBW!jtCx%F)0w$-arDxCc87Iu z{QD~K*QNh!hvU+_C+{}Qm-_sMn*ElP*DbVLif5y^RBA8uTvJ+oi=BONf=^Fe`Qqs~@5cm>r4qx#X zb<)5jrV@kdrcvRkA9n~sL*52KbR?rO1(?_7bu7rYe@pmqhkkRvLQFZhCy6u&ob293 zA^(J8#DKwUgy|aU$qSWOtq8;;eOl>XP1WPd6)BCR%?TsRd*2-~50Q8JqeAL)MmFu1 zLYqx0%<{j*W{e8H^WS#m>^7-g+fI3Eb(mSw*Vm(p4R_cSMCDafUcno{clpa*NAs6Ls%FNf z-dc|e4!Nz^RPDtfe3HRl%4CI`{I=+ITU{9%^*KY5v`7ie zhWkFY8;!YM|D7uuEB!C*7NHbcJHdiD49nhdweYlV-?sd%i7KJHH+GJtWUcK?Yzgv{ zYL4xRp+imKRcfp@#;Uqf(p{6xK5J0ledx1W!|v8=`xkHf9~-lm9wEf?%|7v%|>OBVEeHh42h67 zh;lvfsFm5lFCj#vu)#X$$v+fX2+;r3`pExe5Cltzi_*78p%oxkJU_yWk45B{4q$*) z))&J;Vpr&a#i0tr_88WsRFEnjib#UxCmOjQiQFOcKO!;^6%RukrKO1|$TPT#rZSv)70_%}&@X5*y)?F&bb8nHCD|?q*3~KtL==`c(Q(ns^>_C!;;PLixIq zHdUv^sA%MctOXk@@E%=hs==eesAntEwck7>sien*LRVWh^rdjZ#-(#MD`({f^#F}@ zjJOGoa|YHBZY4^(7KisN@fb%%E&1>lvU#jyp{j^O6;i?&e$=t`=Z*ZIH`HLQ#y`Ia zO@%hfs7fKeKM2Z^U`ml%sqrXr?{RT9xakR=Ip8k*j!2~tgQ)aNd9J%vXb16b$EJ4f zoLodbc+O0$yv(fl)wCJ;`ubW5`g;_CwW=wc z{UGY2vSTyrRCa&m+;4;M39IyxBu ztmHjTa>WbZJ}sI0M!`8w7io~};g!99RwLQ#y#EFv))-Z1sZsi8uCG##qVt!0ImD_E>)5$hunY7)Sa- z8_x54K?;+NScf>-%Y1_#{Vl3Q+hB1|OO`G4ZqaHJ9s7dGH?v?%Z)So7lNI+?aC8NF z>4~XlX1m%HM_pNve~lYD50$Y*0TK?=u9FRu`w7x(St`f4TAh$M)W z2P9#mp7dd4Vj6ND(gF|M37xghI!v0SEXH)7uHrV2%5qI3*)2x;hsRISb{?CQU}b6z z@@r|R(+f_VkYKOqWZ9BGkQ{$qx6~o1Y5VD0by z=_N(kCV0hR6s`fD>s@fc5UBx{cM!&CfF^>B%7jOs?Bu)l7MJOLcql;r=}vxYNV_u$ zE#wYAUS3%v4q8QyqO>ize0%VxM=-3A7vQTVA~h+~pn;?+sA}7IZR5}i2icva)-HYb zJ=l+CZlLkMpLt7n+*sA4^3j$t!EjYJ}IOv$|3mUFl7qCAf`H zIMvkaLzA0y|5+0BCCzT%GJHvh?5&f(`%Z{2v|DzH70VlyjO*^uT-f=xye0P10A~p0 z`XSxBBepbsCz##VbsXEotov+8-fZ+z=8B!gdWF*sOsB^an4jxw)^h|o&aGzu+oj=f z%#K}OG+E76x%B$If9X~K&ZxIZcVZCA?H!=4wN0>hS<|O>I;)o5$Ni=JJhD{p%;C&7 zcDKX-yBnT*t%yE%W~O4=>ats8<}`wYg1O*^=b*oqvdzx%gq!U`6jJpVYJKo_G@cJmIk zNF*qbE_^_N-C!fUCr=|=uVU75lvA= zkAyS)hj;#mw{M@kM2=$Nn9b--cw@?2b4bA4k~=~%2uG5Wx#FVBK79(`I{f?03+lM$<)}a z8Dm1jLGE=%4Z#)I*^A~~K)K;@*=ZU6ii~VuYeyj7-penOhy+t$PvY5fII895)&o) zo#4&iZ^8aT$q*Jt#1vrYoYUS)KIZAudM5~0%~^*fx#x%7D=~}<@XzP`A=P{R9M5|; zOD1VJ-j;D^C^p?zY(r=8*-tc`Z%9rz`KV8siS5zG?J9MR-g-xTkkRpJC8x({H7-l_ zO)C9O?o4z8FM&!YZMzSh@{`I&%^c~2=D8Us7NgBZ(e=~%ztj#%*Q?Yv7Y=Of)O*mD zeRV~B-3m6fS<2orlc0=d$j?!KkF_t|nUcR!pi_d2u47;$06;%bZw8wTmpkt-X)(^2 zHWjsI?-c@}drHO9onLv@wxx4@7PQsmnoN=xq5i$@kDJQxr7?MC9fb~6<(+#eW&V10zh~YF+IG9g zmva6C%Q!-JPse5624nMcVD+ld!NvztS~ZlH_I&GWme1vIh>Jbl!F`%o8vzI5Qs9NR z?;4DrDqELOVUB?$*BEl4x5Z&d88fIFSTBe_4zn(DXe63-BMFm7B}4V?FieJkHyVNP z4jRFpO3cYgmK{>mX$<8&y}UXWT01P~=g*OhyZ49kHMzByRO8~!ZZ{29rfJ_2qyMgK z+Tb1|n&o6PdP#IrO@q%=CvvJGbYH66g09S^C;UCVbBycB@hr@C{_4b3SQQ-pg5Ni( z;VMU6R5$D^>=|8O`#-pJP=*|i6|sg@Ez+-_Iw5}G+%s}msA(Z>RcV5(Io&2FbpQGRLf^b)i*l-^zI5%-(=Rv3hmyA<80I(*|3*)=(;3iWY#-v=%T?7-9LY%eR*n`KTphR9N53#^Ua%RG9d|r zRr6Yb2MdlBCS^Zf>Vli&+K;7T0K&@8uZ(wB#c2m}Xr&JdGC68UpF>d8$vE}R>ziRm zZpe1Y4saZi#7OEK@o}L?cY7)A;{=Ytju(#B3VaIu>oxxRGkVbEa&Dxs4cXT}zC}|u zlQO)_b@#s=;Kg76MOE3lU4w9{NEpp!xX(0^HB{_SEd3AGDx8d)l^Hp|D7WZN7c}EUD z!rMs*%B+*#6Y^5kL)=@-@?oC!48vRp-kBJI$Y_j)Zd*5|=#_Mw8E>IB zr*<(2*+%O)jVqJ1BMv-_w8@MWrqOTMH~c7j=w)ohwqnq2${?eN6s4cG$25hpj??f z38H=$WA?32Fich-;Qa9G$fI~ylBkxqHH*u$+D|N z%Y%+ESJYj4`fe-=XN3>r`~?!$uB-}d!;4MvEVh!vQeA&u)wFf@e=cfk!c|yJ;cVrD zEj!7m>MW!?FJ_X)fByL=qIBHnI1E$JGuNFw`e!6LsEg<{0cp}1swn#*mpwo6n#2SO zMK{i%)=5I zqwXkhV6KiguEV)rbID4a8DA1bD}yEBmfLV+K;F+0{$^s1#qUFLPWT$8Gh|8y5&4v^ zc*GxkDFw(1sMi#75j@N43+G;Dxc4lRJOD9A;XaJ^jfo z=Cmm%4vs5~sFvKHHPP`E_Rqy9DOiCzcSe0n3iWkOkURMX;2ZFs%K5j;*e3dx%g&ZpI zV3BUB!oDRU9H77o-r^Sz=glQPeLpz1F)$-8^18NpoCiQql)fK=|5yTd4;~82C#OAe zP~sFkeb(8K<6}{kn&*$tuV1JPy|9bAZ-w)8$9Cdg_E1VO(}v`AbBqkGV{|h85QG9a zNL1)KJeRhEkues^x8xYV+I!adNVH^V%H^PVO{1uw+Y1W{E&>TW*6}IpVVb)JkvjM1 z4Ic~}eFB|l3fAvFQT{DA7Y{qJD$RK9W!RnrEd>1yFo7pVr@=a$!fPH~&nWyImKi_T z+P_3=r`N)}+JGOyTS;e)ZrC0ZAPFA`JAJL^QO#Om_>B#aaR!)C9z1-wFk^9Hc90U_ zFetEP*De#7?@h9B;=KxFT@kNk1;J@q?e3t1{QNbY8x5Yo| znt)$_oCO_wSh{L`fev;|=$=0Xb5`C&T_i@Zy+tyb-(>_TZGfN!OxSa~8?qg;5 zx3u@3a2w!!_d)oV$x%KSvV1V11@~TS;W6TPAwalZqzqn{V*LLomRwbE=A`z7zAlD~ zZl$V`CvDei@iE@1Dwrc>kOogtz=-S3JZm~MZx+MWPBbAdc*n@fqP_Tlj;sn#UaJg^ ztn>C7Mq(Wc#i@95prtc#aV`ue4}mqjF)rY@ZaSko%#Eja^mg5KV4h?-#z+&{eS4dwf@!Mdlpx${d9Y3WUI*1 PEJ#v9_Dt;QORoP1yXy^( literal 0 HcmV?d00001 diff --git a/027_callback.MVP_files/figure-html/cell-12-output-1.png b/027_callback.MVP_files/figure-html/cell-12-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..79b59f7a7c51a1f1befeccf868e485145bb996e5 GIT binary patch literal 14966 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 Hdh6c+=T_=w literal 0 HcmV?d00001 diff --git a/027_callback.MVP_files/figure-html/cell-13-output-1.png b/027_callback.MVP_files/figure-html/cell-13-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..89a7ec86dfbe2654c67c417deeb5d17324cc622c GIT binary patch literal 12711 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 BB!~b2 literal 0 HcmV?d00001 diff --git a/027_callback.MVP_files/figure-html/cell-15-output-1.png b/027_callback.MVP_files/figure-html/cell-15-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..cbf8a6fd25832fc89511dcbe226b149c4c467ae9 GIT binary patch literal 10877 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 literal 0 HcmV?d00001 diff --git a/027_callback.MVP_files/figure-html/cell-22-output-1.png b/027_callback.MVP_files/figure-html/cell-22-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2abb4c6dff32d34882dcfb2ef12034c3d2f37c5d GIT binary patch literal 152884 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�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 G_WuCBY&((w literal 0 HcmV?d00001 diff --git a/027_callback.MVP_files/figure-html/cell-8-output-1.png b/027_callback.MVP_files/figure-html/cell-8-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba28fbcc1218924adcdb139ffe743cab519790d GIT binary patch literal 17654 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 literal 0 HcmV?d00001 diff --git a/027_callback.MVP_files/figure-html/cell-9-output-1.png b/027_callback.MVP_files/figure-html/cell-9-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c2c8db168ebc86a285a93dd2a6f4833bb6e755 GIT binary patch literal 16782 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 F@^2pvba(&& literal 0 HcmV?d00001 diff --git a/029_models.layers_files/figure-html/cell-58-output-1.png b/029_models.layers_files/figure-html/cell-58-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..abc5788ec46addd515fe007668a1b909c5638a53 GIT binary patch literal 19014 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 literal 0 HcmV?d00001 diff --git a/031_models.positional_encoders_files/figure-html/cell-3-output-1.png b/031_models.positional_encoders_files/figure-html/cell-3-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3090e140fbd15f8a0be8b94fc1b3ac42166e5381 GIT binary patch literal 112231 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�Dw((S#&U$Qm6ab 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≶62H1HPx#K0*nn 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 literal 0 HcmV?d00001 diff --git a/031_models.positional_encoders_files/figure-html/cell-5-output-2.png b/031_models.positional_encoders_files/figure-html/cell-5-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..083a57ec10aa06eb0e8be2fab7955883a385d823 GIT binary patch literal 9313 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 JD{dje{tq*o>(c-L literal 0 HcmV?d00001 diff --git a/031_models.positional_encoders_files/figure-html/cell-5-output-3.png b/031_models.positional_encoders_files/figure-html/cell-5-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..7f756cbbaffa1a4a6cc6f37a3d2ed3c144803a4c GIT binary patch literal 9408 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 literal 0 HcmV?d00001 diff --git a/031_models.positional_encoders_files/figure-html/cell-7-output-2.png b/031_models.positional_encoders_files/figure-html/cell-7-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..3231a0ee73febcf72b034258ad27a4deaa566e9b GIT binary patch literal 8441 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 literal 0 HcmV?d00001 diff --git a/031_models.positional_encoders_files/figure-html/cell-8-output-1.png b/031_models.positional_encoders_files/figure-html/cell-8-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..08edb3bf5d21b4fb4e2d07a885d945772655fa4c GIT binary patch literal 9155 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 literal 0 HcmV?d00001 diff --git a/031_models.positional_encoders_files/figure-html/cell-8-output-2.png b/031_models.positional_encoders_files/figure-html/cell-8-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..3231a0ee73febcf72b034258ad27a4deaa566e9b GIT binary patch literal 8441 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 literal 0 HcmV?d00001 diff --git a/050_models.TSTPlus_files/figure-html/cell-15-output-1.png b/050_models.TSTPlus_files/figure-html/cell-15-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..951e9a158b3795635a458c3364e86f0efca0c5c5 GIT binary patch literal 58934 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 RdJ_RZS{m2Y@v2sj{sZn5+y?*v literal 0 HcmV?d00001 diff --git a/050_models.TSTPlus_files/figure-html/cell-15-output-2.png b/050_models.TSTPlus_files/figure-html/cell-15-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5e45243c2f397a04b4c708520eb86b037273618b GIT binary patch literal 40836 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 dP_A1?d_r5J5mv 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 TK0{9Q5#=r@p3gdW#pizjj-j9& literal 0 HcmV?d00001 diff --git a/061_models.XCM_files/figure-html/cell-6-output-3.png b/061_models.XCM_files/figure-html/cell-6-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..d938a85ef4f9ac40100454b1fd6c7459fdf40b35 GIT binary patch literal 17358 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 literal 0 HcmV?d00001 diff --git a/062_models.XCMPlus_files/figure-html/cell-5-output-1.png b/062_models.XCMPlus_files/figure-html/cell-5-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..151f8048d7c883e92f278478ca283dace2fe39bb GIT binary patch literal 20873 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 literal 0 HcmV?d00001 diff --git a/062_models.XCMPlus_files/figure-html/cell-5-output-2.png b/062_models.XCMPlus_files/figure-html/cell-5-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..1d12ab5bffd9167f6f03443283a5375b8252df8c GIT binary patch literal 12310 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 B;%EQ> literal 0 HcmV?d00001 diff --git a/062_models.XCMPlus_files/figure-html/cell-6-output-3.png b/062_models.XCMPlus_files/figure-html/cell-6-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..b0a3c23bc01ba5ea20393cede5bae2fe19a7ded9 GIT binary patch literal 12601 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ⅇ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 F{{V(_mFoZi literal 0 HcmV?d00001 diff --git a/068_models.TSiTPlus_files/figure-html/cell-8-output-1.png b/068_models.TSiTPlus_files/figure-html/cell-8-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..742dd51a750a55d71404a932be34690a8aa80338 GIT binary patch literal 7014 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 pDg4*|j`Oo_{ + + + + + + + + +tsai - Analysis + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + +
    + + + +
    + +
    +
    +

    Analysis

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    fastai Learner extensions useful to perform prediction analysis.

    +
    +
    +

    source

    +
    +

    Learner.show_probas

    +
    +
     Learner.show_probas (figsize=(6, 6), ds_idx=1, dl=None, one_batch=False,
    +                      max_n=None, nrows:int=1, ncols:int=1, imsize:int=3,
    +                      suptitle:str=None, sharex:Union[bool,Literal['none',
    +                      'all','row','col']]=False, sharey:Union[bool,Literal
    +                      ['none','all','row','col']]=False,
    +                      squeeze:bool=True,
    +                      width_ratios:Optional[Sequence[float]]=None,
    +                      height_ratios:Optional[Sequence[float]]=None,
    +                      subplot_kw:Optional[dict[str,Any]]=None,
    +                      gridspec_kw:Optional[dict[str,Any]]=None)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    figsizetupleNoneWidth, height in inches of the returned figure
    ds_idxint1
    dlNoneTypeNone
    one_batchboolFalse
    max_nNoneTypeNone
    nrowsint1Number of rows in returned axes grid
    ncolsint1Number of columns in returned axes grid
    imsizeint3Size (in inches) of images that will be displayed in the returned figure
    suptitlestrNoneTitle to be set to returned figure
    sharexbool | Literal[‘none’, ‘all’, ‘row’, ‘col’]False
    shareybool | Literal[‘none’, ‘all’, ‘row’, ‘col’]False
    squeezeboolTrue
    width_ratiosSequence[float] | NoneNone
    height_ratiosSequence[float] | NoneNone
    subplot_kwdict[str, Any] | NoneNone
    gridspec_kwdict[str, Any] | NoneNone
    Returns(plt.Figure, plt.Axes)Returns both fig and ax as a tuple
    +
    +

    source

    +
    +
    +

    Learner.plot_confusion_matrix

    +
    +
     Learner.plot_confusion_matrix (ds_idx=1, dl=None, thr=0.5,
    +                                normalize=False, title='Confusion matrix',
    +                                cmap='Blues', norm_dec=2, figsize=(5, 5),
    +                                title_fontsize=12, fontsize=10,
    +                                plot_txt=True, **kwargs)
    +
    +

    Plot the confusion matrix, with title and using cmap.

    +
    +

    source

    +
    +
    +

    Learner.plot_top_losses

    +
    +
     Learner.plot_top_losses (X, y, k:int=9, largest=True, bs:int=64,
    +                          **kwargs)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    Xarray-like object representing the independent variables
    yarray-like object representing the target
    kint9Optional. #items to plot
    largestboolTrueFlag to show largest or smallest losses
    bsint64batch size
    kwargs
    +
    +

    source

    +
    +
    +

    Learner.top_losses

    +
    +
     Learner.top_losses (X, y, k:int=9, largest=True, bs:int=64)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    Xarray-like object representing the independent variables
    yarray-like object representing the target
    kint9Optional. #items to plot
    largestboolTrueFlag to show largest or smallest losses
    bsint64batch size
    +
    +
    +

    Permutation importance

    +

    We’ve also introduced 2 methods to help you better understand how important certain features or certain steps are for your model. Both methods use permutation importance.

    +

    ⚠️The permutation feature or step importance is defined as the decrease in a model score when a single feature or step value is randomly shuffled.

    +

    So if you using accuracy (higher is better), the most important features or steps will be those with a lower value on the chart (as randomly shuffling them reduces performance).

    +

    The opposite occurs for metrics like mean squared error (lower is better). In this case, the most important features or steps will be those with a higher value on the chart.

    +

    There are 2 issues with step importance:

    +
      +
    • there may be many steps and the analysis could take very long
    • +
    • steps will likely have a high autocorrelation
    • +
    +

    For those reasons, we’ve introduced an argument (n_steps) to group steps. In this way you’ll be able to know which part of the time series is the most important.

    +

    Feature importance has been adapted from https://www.kaggle.com/cdeotte/lstm-feature-importance by Chris Deotte (Kaggle GrandMaster).

    +
    +

    source

    +
    +

    Learner.feature_importance

    +
    +
     Learner.feature_importance (X=None, y=None, bs:int=None,
    +                             partial_n:(<class'int'>,<class'float'>)=None,
    +                             method:str='permutation',
    +                             feature_names:list=None, sel_classes:(<class'
    +                             str'>,<class'list'>)=None,
    +                             key_metric_idx:int=0, show_chart:bool=True,
    +                             figsize:tuple=None, title:str=None,
    +                             return_df:bool=True,
    +                             save_df_path:pathlib.Path=None,
    +                             random_state:int=23, verbose:bool=True)
    +
    +

    Calculates feature importance as the drop in the model’s validation loss or metric when a feature value is randomly shuffled

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    XNoneTypeNonearray-like object containing the time series. If None, all data in the validation set will be used.
    yNoneTypeNonearray-like object containing the targets. If None, all targets in the validation set will be used.
    bsintNonebatch size. If None, the default batch size of the dataloader will be used.
    partial_n(<class ‘int’>, <class ‘float’>)None# (int) or % (float) of used to measure feature importance. If None, all data will be used.
    methodstrpermutationMethod used to invalidate feature. Use ‘permutation’ for shuffling or ‘ablation’ for setting values to np.nan.
    feature_nameslistNoneOptional list of feature names that will be displayed if available. Otherwise var_0, var_1, etc.
    sel_classes(<class ‘str’>, <class ‘list’>)Noneclasses for which the analysis will be made
    key_metric_idxint0Optional position of the metric used. If None or no metric is available, the loss will be used.
    show_chartboolTrueFlag to indicate if a chart showing permutation feature importance will be plotted.
    figsizetupleNoneSize of the chart.
    titlestrNoneOptional string that will be used as the chart title. If None ‘Permutation Feature Importance’.
    return_dfboolTrueFlag to indicate if the dataframe with feature importance will be returned.
    save_df_pathPathNonePath where dataframe containing the permutation feature importance results will be saved.
    random_stateint23Optional int that controls the shuffling applied to the data.
    verboseboolTrueFlag that controls verbosity.
    +
    +

    source

    +
    +
    +

    Learner.step_importance

    +
    +
     Learner.step_importance (X=None, y=None, bs:int=None,
    +                          partial_n:(<class'int'>,<class'float'>)=None,
    +                          method:str='permutation', step_names:list=None,
    +                          sel_classes:(<class'str'>,<class'list'>)=None,
    +                          n_steps:int=1, key_metric_idx:int=0,
    +                          show_chart:bool=True, figsize:tuple=(10, 5),
    +                          title:str=None, xlabel=None,
    +                          return_df:bool=True,
    +                          save_df_path:pathlib.Path=None,
    +                          random_state:int=23, verbose:bool=True)
    +
    +

    Calculates step importance as the drop in the model’s validation loss or metric when a step/s value/s is/are randomly shuffled

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    XNoneTypeNonearray-like object containing the time series. If None, all data in the validation set will be used.
    yNoneTypeNonearray-like object containing the targets. If None, all targets in the validation set will be used.
    bsintNonebatch size used to compute predictions. If None, the batch size used in the validation set will be used.
    partial_n(<class ‘int’>, <class ‘float’>)None# (int) or % (float) of used to measure feature importance. If None, all data will be used.
    methodstrpermutationMethod used to invalidate feature. Use ‘permutation’ for shuffling or ‘ablation’ for setting values to np.nan.
    step_nameslistNoneOptional list of step names that will be displayed if available. Otherwise 0, 1, 2, etc.
    sel_classes(<class ‘str’>, <class ‘list’>)Noneclasses for which the analysis will be made
    n_stepsint1# of steps that will be analyzed at a time. Default is 1.
    key_metric_idxint0Optional position of the metric used. If None or no metric is available, the loss will be used.
    show_chartboolTrueFlag to indicate if a chart showing permutation feature importance will be plotted.
    figsizetuple(10, 5)Size of the chart.
    titlestrNoneOptional string that will be used as the chart title. If None ‘Permutation Feature Importance’.
    xlabelNoneTypeNoneOptional string that will be used as the chart xlabel. If None ‘steps’.
    return_dfboolTrueFlag to indicate if the dataframe with feature importance will be returned.
    save_df_pathPathNonePath where dataframe containing the permutation feature importance results will be saved.
    random_stateint23Optional int that controls the shuffling applied to the data.
    verboseboolTrueFlag that controls verbosity.
    +
    +
    from tsai.data.external import get_UCR_data
    +from tsai.data.preprocessing import TSRobustScale, TSStandardize
    +from tsai.learner import ts_learner
    +from tsai.models.FCNPlus import FCNPlus
    +from tsai.metrics import accuracy
    +
    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +tfms  = [None, [TSClassification()]]
    +batch_tfms = TSRobustScale()
    +batch_tfms = TSStandardize()
    +dls = get_ts_dls(X, y, splits=splits, sel_vars=[0, 3, 5, 8, 10], sel_steps=slice(-30, None), tfms=tfms, batch_tfms=batch_tfms)
    +learn = ts_learner(dls, FCNPlus, metrics=accuracy, train_metrics=True)
    +learn.fit_one_cycle(2)
    +learn.plot_metrics()
    +learn.show_probas()
    +learn.plot_confusion_matrix()
    +learn.plot_top_losses(X[splits[1]], y[splits[1]], largest=True)
    +learn.top_losses(X[splits[1]], y[splits[1]], largest=True)
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    epochtrain_losstrain_accuracyvalid_lossvalid_accuracytime
    01.7925110.1875001.6194600.21666700:02
    11.5926810.6328121.4759910.25000000:01
    +
    +
    +
    +
    +

    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    +

    +
    +
    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    (TensorBase([2.3713, 2.3146, 2.2843, 2.2581, 2.2408, 2.2264, 2.2254, 2.2237,
    +             2.2230]),
    + [9, 56, 128, 25, 104, 116, 57, 72, 108])
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    learn.feature_importance()
    +
    +
    X.shape: (180, 24, 51)
    +y.shape: (180,)
    +Selected metric: accuracy
    +Computing feature importance (permutation method)...
    +  0 feature: BASELINE             accuracy: 0.277778
    +  0 feature: var_0                accuracy: 0.238889
    +  3 feature: var_3                accuracy: 0.172222
    +  5 feature: var_5                accuracy: 0.261111
    +  8 feature: var_8                accuracy: 0.250000
    + 10 feature: var_10               accuracy: 0.266667
    +
    +
    +
    + + +
    +
    + +
    + + 100.00% [6/6 00:04<00:00] +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Featureaccuracyaccuracy_change
    0var_30.1722220.105556
    1var_00.2388890.038889
    2var_80.2500000.027778
    3var_50.2611110.016667
    4var_100.2666670.011111
    5BASELINE0.277778-0.000000
    + +
    +
    +
    +
    +
    learn.step_importance(n_steps=5);
    +
    +
    X.shape: (180, 24, 51)
    +y.shape: (180,)
    +Selected metric: accuracy
    +Computing step importance...
    +  0 step: BASELINE             accuracy: 0.277778
    +  1 step: 21 to 25             accuracy: 0.288889
    +  2 step: 26 to 30             accuracy: 0.255556
    +  3 step: 31 to 35             accuracy: 0.194444
    +  4 step: 36 to 40             accuracy: 0.216667
    +  5 step: 41 to 45             accuracy: 0.272222
    +  6 step: 46 to 50             accuracy: 0.283333
    +
    +
    +
    + + +
    +
    + +
    + + 100.00% [7/7 00:04<00:00] +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    +

    +
    +
    +
    +
    +

    You may pass an X and y if you want to analyze a particular group of samples:

    +
    learn.feature_importance(X=X[splits[1]], y=y[splits[1]])
    +

    If you have a large validation dataset, you may also use the partial_n argument to select a fixed amount of samples (integer) or a percentage of the validation dataset (float):

    +
    learn.feature_importance(partial_n=.1)
    +
    learn.feature_importance(partial_n=100)
    + + +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/calibration.html b/calibration.html new file mode 100644 index 000000000..e16c600b9 --- /dev/null +++ b/calibration.html @@ -0,0 +1,1361 @@ + + + + + + + + + +tsai - Calibration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Calibration

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Functionality to calibrate a trained, binary classification model using temperature scaling.

    +
    +
    +

    source

    +
    +

    ECELoss

    +
    +
     ECELoss (n_bins=10)
    +
    +

    Calculates the Expected Calibration Error of a model.

    +
    +

    source

    +
    +
    +

    TemperatureSetter

    +
    +
     TemperatureSetter (model, lr=0.01, max_iter=1000, line_search_fn=None,
    +                    n_bins=10, verbose=True)
    +
    +

    Calibrates a binary classification model optimizing temperature

    +
    +

    source

    +
    +
    +

    ModelWithTemperature

    +
    +
     ModelWithTemperature (model)
    +
    +

    A decorator which wraps a model with temperature scaling

    +
    +

    source

    +
    +
    +

    plot_calibration_curve

    +
    +
     plot_calibration_curve (labels, logits, cal_logits=None, figsize=(6, 6),
    +                         n_bins=10, strategy='uniform')
    +
    +
    +

    source

    +
    +
    +

    Learner.calibrate_model

    +
    +
     Learner.calibrate_model (X=None, y=None, lr=0.01, max_iter=10000,
    +                          line_search_fn=None, n_bins=10,
    +                          strategy='uniform', show_plot=True, figsize=(6,
    +                          6), verbose=True)
    +
    +
    +
    from tsai.basics import *
    +from tsai.models.FCNPlus import FCNPlus
    +
    +
    +
    X, y, splits = get_UCR_data('FingerMovements', split_data=False)
    +tfms  = [None, [TSClassification()]]
    +batch_tfms = TSRobustScale()
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +learn = ts_learner(dls, FCNPlus, metrics=accuracy)
    +learn.fit_one_cycle(2)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    00.6968260.7060160.43000000:04
    10.6902090.6997200.49000000:03
    +
    +
    +
    +
    learn.calibrate_model()
    +calibrated_model = learn.calibrated_model
    +
    +
    Before temperature - NLL: 0.700, ECE: 0.066
    +Calibrating the model...
    +...model calibrated
    +Optimal temperature: 6.383
    +After temperature  - NLL: 0.693, ECE: 0.019
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/callback.core.html b/callback.core.html new file mode 100644 index 000000000..58935e559 --- /dev/null +++ b/callback.core.html @@ -0,0 +1,1476 @@ + + + + + + + + + +tsai - Callback + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Callback

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Miscellaneous callbacks for timeseriesAI.

    +
    +
    +

    Events

    +

    A callback can implement actions on the following events: * before_fit: called before doing anything, ideal for initial setup. * before_epoch: called at the beginning of each epoch, useful for any behavior you need to reset at each epoch. * before_train: called at the beginning of the training part of an epoch. * before_batch: called at the beginning of each batch, just after drawing said batch. It can be used to do any setup necessary for the batch (like hyper-parameter scheduling) or to change the input/target before it goes in the model (change of the input with techniques like mixup for instance). * after_pred: called after computing the output of the model on the batch. It can be used to change that output before it’s fed to the loss. * after_loss: called after the loss has been computed, but before the backward pass. It can be used to add any penalty to the loss (AR or TAR in RNN training for instance). * before_backward: called after the loss has been computed, but only in training mode (i.e. when the backward pass will be used) * after_backward: called after the backward pass, but before the update of the parameters. It can be used to do any change to the gradients before said update (gradient clipping for instance). * after_step: called after the step and before the gradients are zeroed. * after_batch: called at the end of a batch, for any clean-up before the next one. * after_train: called at the end of the training phase of an epoch. * before_validate: called at the beginning of the validation phase of an epoch, useful for any setup needed specifically for validation. * after_validate: called at the end of the validation part of an epoch. * after_epoch: called at the end of an epoch, for any clean-up before the next one. * after_fit: called at the end of training, for final clean-up.

    +
    +
    +

    Learner attributes

    +

    When writing a callback, the following attributes of Learner are available:

    +
      +
    • model: the model used for training/validation
    • +
    • data: the underlying DataLoaders
    • +
    • loss_func: the loss function used
    • +
    • opt: the optimizer used to udpate the model parameters
    • +
    • opt_func: the function used to create the optimizer
    • +
    • cbs: the list containing all Callbacks
    • +
    • dl: current DataLoader used for iteration
    • +
    • x/xb: last input drawn from self.dl (potentially modified by callbacks). xb is always a tuple (potentially with one element) and x is detuplified. You can only assign to xb.
    • +
    • y/yb: last target drawn from self.dl (potentially modified by callbacks). yb is always a tuple (potentially with one element) and y is detuplified. You can only assign to yb.
    • +
    • pred: last predictions from self.model (potentially modified by callbacks)
    • +
    • loss: last computed loss (potentially modified by callbacks)
    • +
    • n_epoch: the number of epochs in this training
    • +
    • n_iter: the number of iterations in the current self.dl
    • +
    • epoch: the current epoch index (from 0 to n_epoch-1)
    • +
    • iter: the current iteration index in self.dl (from 0 to n_iter-1)
    • +
    +

    The following attributes are added by TrainEvalCallback and should be available unless you went out of your way to remove that callback: * train_iter: the number of training iterations done since the beginning of this training * pct_train: from 0. to 1., the percentage of training iterations completed * training: flag to indicate if we’re in training mode or not

    +

    The following attribute is added by Recorder and should be available unless you went out of your way to remove that callback: * smooth_loss: an exponentially-averaged version of the training loss

    +
    +
    +

    Transform scheduler

    +
    +

    source

    +
    +

    TransformScheduler

    +
    +
     TransformScheduler (schedule_func:<built-infunctioncallable>,
    +                     show_plot:bool=False)
    +
    +

    A callback to schedule batch transforms during training based on a function (sched_lin, sched_exp, sched_cos (default), etc)

    +
    +
    TransformScheduler(SchedCos(1, 0))
    +
    +
    TransformScheduler(<fastai.callback.schedule._Annealer object>)
    +
    +
    +
    +
    p = torch.linspace(0.,1,100)
    +f = combine_scheds([0.3, 0.4, 0.3], [SchedLin(1.,1.), SchedCos(1.,0.), SchedLin(0.,.0), ])
    +plt.plot(p, [f(o) for o in p]);
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    p = torch.linspace(0.,1,100)
    +f = combine_scheds([0.3, 0.7], [SchedCos(0.,1.), SchedCos(1.,0.)])
    +plt.plot(p, [f(o) for o in p]);
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +
    +

    ShowGraph

    +
    +

    source

    +
    +

    ShowGraph

    +
    +
     ShowGraph (plot_metrics:bool=True, final_losses:bool=True,
    +            perc:float=0.5)
    +
    +

    (Modified) Update a graph of training and validation loss

    +
    +
    +
    +

    SaveModel

    +
    +

    source

    +
    +

    SaveModel

    +
    +
     SaveModel (monitor='valid_loss', comp=None, min_delta=0.0, fname='model',
    +            every_epoch=False, at_end=False, with_opt=False,
    +            reset_on_fit=True, verbose=False)
    +
    +

    A TrackerCallback that saves the model’s best during training and loads it at the end with a verbose option.

    +
    +
    +
    +

    Weight per sample loss

    +

    This process shows an example of how the weights could be calculated. This particular regression method was published in:

    +

    Yang, Y., Zha, K., Chen, Y. C., Wang, H., & Katabi, D. (2021). Delving into Deep Imbalanced Regression. arXiv preprint arXiv:2102.09554.
    +(https://arxiv.org/pdf/2102.09554.pdf)

    +
    +

    source

    +
    +

    prepare_LDS_weights

    +
    +
     prepare_LDS_weights (labels, n_bins=None, label_range=None,
    +                      reweight='inv', lds_kernel='gaussian', lds_ks=9,
    +                      lds_sigma=1, max_rel_weight=None, show_plot=True)
    +
    +
    +

    source

    +
    +
    +

    get_lds_kernel_window

    +
    +
     get_lds_kernel_window (lds_kernel='gaussian', lds_ks=9, lds_sigma=1)
    +
    +

    Function to determine the label distribution smoothing kernel window

    +

    lds_kernel (str): LDS kernel type lds_ks (int): LDS kernel size (should be an odd number). lds_sigma (float): LDS gaussian/laplace kernel sigma

    +
    +
    labels = np.concatenate([np.random.normal(-20, 1, 10), np.random.normal(0, 2, 100), np.random.normal(12, 2, 300)], -1)
    +labels[(-1<labels) & (labels<1)] = 0   # This is done to create some 'gaps' for demo purposes
    +labels[(10<labels) & (labels<12)] = 0  # This is done to create some 'gaps' for demo purposes
    +
    +n_bins = 50
    +label_range=None
    +reweight = 'inv'
    +lds_kernel='gaussian'
    +lds_ks=5
    +lds_sigma=2
    +
    +weights_per_sample = prepare_LDS_weights(labels, n_bins, label_range=label_range, reweight=reweight, 
    +                                         lds_kernel=lds_kernel, lds_ks=lds_ks, lds_sigma=lds_sigma, show_plot=True)
    +
    +n_bins = 50
    +label_range=None
    +reweight = 'sqrt_inv'
    +lds_kernel='gaussian'
    +lds_ks=5
    +lds_sigma=2
    +
    +weights_per_sample = prepare_LDS_weights(labels, n_bins, label_range=label_range, reweight=reweight, 
    +                                         lds_kernel=lds_kernel, lds_ks=lds_ks, lds_sigma=lds_sigma, show_plot=True)
    +
    +n_bins = None
    +label_range=None
    +reweight = 'sqrt_inv'
    +lds_kernel='triang'
    +lds_ks=9
    +lds_sigma=1
    +
    +weights_per_sample = prepare_LDS_weights(labels, n_bins, label_range=label_range, reweight=reweight, 
    +                                         lds_kernel=lds_kernel, lds_ks=lds_ks, lds_sigma=lds_sigma, show_plot=True)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    WeightedPerSampleLoss

    +
    +
     WeightedPerSampleLoss (instance_weights)
    +
    +

    Basic class handling tweaks of the training loop by changing a Learner in various events

    +
    +
    +
    +

    BatchSubsampler

    +
    +

    source

    +
    +

    BatchSubsampler

    +
    +
     BatchSubsampler (sample_pct:Optional[float]=None,
    +                  step_pct:Optional[float]=None, same_seq_len:bool=True,
    +                  update_y:bool=False)
    +
    +

    Callback that selects a percentage of samples and/ or sequence steps with replacement from each training batch

    +
    +
    +
    +

    Args:

    +

    sample_pct: percentage of random samples (or instances) that will be drawn. If 1. the output batch will contain the same number of samples as the input batch. step_pct: percentage of random sequence steps that will be drawn. If 1. the output batch will contain the same number of sequence steps as the input batch. If used with models that don’t use a pooling layer, this must be set to 1 to keep the same dimensions. With CNNs, this value may be different. same_seq_len: If True, it ensures that the output has the same shape as the input, even if the step_pct chosen is < 1. Defaults to True. update_y: used with step_pct. If True, it applies the same random indices to y. It can only be used with sequential targets.

    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/callback.experimental.html b/callback.experimental.html new file mode 100644 index 000000000..e5799a189 --- /dev/null +++ b/callback.experimental.html @@ -0,0 +1,1474 @@ + + + + + + + + + +tsai - Experimental Callbacks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Experimental Callbacks

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Miscellaneous experimental callbacks for timeseriesAI.

    +
    +
    +

    Gambler’s loss: noisy labels

    +
    +

    source

    +
    +

    gambler_loss

    +
    +
     gambler_loss (reward=2)
    +
    +
    +

    source

    +
    +
    +

    GamblersCallback

    +
    +
     GamblersCallback (after_create=None, before_fit=None, before_epoch=None,
    +                   before_train=None, before_batch=None, after_pred=None,
    +                   after_loss=None, before_backward=None,
    +                   after_cancel_backward=None, after_backward=None,
    +                   before_step=None, after_cancel_step=None,
    +                   after_step=None, after_cancel_batch=None,
    +                   after_batch=None, after_cancel_train=None,
    +                   after_train=None, before_validate=None,
    +                   after_cancel_validate=None, after_validate=None,
    +                   after_cancel_epoch=None, after_epoch=None,
    +                   after_cancel_fit=None, after_fit=None)
    +
    +

    A callback to use metrics with gambler’s loss

    +
    +
    from tsai.data.external import *
    +from tsai.data.core import *
    +from tsai.models.InceptionTime import *
    +from tsai.models.layers import *
    +from tsai.learner import *
    +from fastai.metrics import *
    +from tsai.metrics import *
    +
    +
    +
    X, y, splits = get_UCR_data('NATOPS', return_split=False)
    +tfms = [None, TSCategorize()]
    +dsets = TSDatasets(X, y, tfms=tfms, splits=splits)
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[64, 128])
    +loss_func = gambler_loss()
    +learn = ts_learner(dls, InceptionTime(dls.vars, dls.c + 1), loss_func=loss_func, cbs=GamblersCallback, metrics=[accuracy])
    +learn.fit_one_cycle(1)
    +
    + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    01.8400551.9453970.16666700:05
    +
    +
    +
    +
    +
    +

    Uncertainty-based data augmentation

    +
    +

    source

    +
    +

    UBDAug

    +
    +
     UBDAug (batch_tfms:list, N:int=2, C:int=4, S:int=1)
    +
    +

    A callback to implement the uncertainty-based data augmentation.

    +
    +
    from tsai.models.utils import *
    +
    +
    +
    X, y, splits = get_UCR_data('NATOPS', return_split=False)
    +tfms = [None, TSCategorize()]
    +dsets = TSDatasets(X, y, tfms=tfms, splits=splits)
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, batch_tfms=[TSStandardize()])
    +model = build_ts_model(InceptionTime, dls=dls)
    +TS_tfms = [TSMagScale(.75, p=.5), TSMagWarp(.1, p=0.5),  TSWindowWarp(.25, p=.5), 
    +           TSSmooth(p=0.5), TSRandomResizedCrop(.1, p=.5), 
    +           TSRandomCropPad(.3, p=0.5), 
    +           TSMagAddNoise(.5, p=.5)]
    +
    +ubda_cb = UBDAug(TS_tfms, N=2, C=4, S=2)
    +learn = ts_learner(dls, model, cbs=ubda_cb, metrics=accuracy)
    +learn.fit_one_cycle(1)
    +
    + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    01.8170801.7911190.07777800:14
    +
    +
    +
    +
    +
    +

    BatchLossFilter

    +
    +

    source

    +
    +

    BatchLossFilter

    +
    +
     BatchLossFilter (loss_perc=1.0, schedule_func:Optional[<built-
    +                  infunctioncallable>]=None)
    +
    +

    Callback that selects the hardest samples in every batch representing a percentage of the total loss

    +
    +
    +
    +

    RandomWeightLossWrapper

    +
    +

    source

    +
    +

    RandomWeightLossWrapper

    +
    +
     RandomWeightLossWrapper (after_create=None, before_fit=None,
    +                          before_epoch=None, before_train=None,
    +                          before_batch=None, after_pred=None,
    +                          after_loss=None, before_backward=None,
    +                          after_cancel_backward=None, after_backward=None,
    +                          before_step=None, after_cancel_step=None,
    +                          after_step=None, after_cancel_batch=None,
    +                          after_batch=None, after_cancel_train=None,
    +                          after_train=None, before_validate=None,
    +                          after_cancel_validate=None, after_validate=None,
    +                          after_cancel_epoch=None, after_epoch=None,
    +                          after_cancel_fit=None, after_fit=None)
    +
    +

    Basic class handling tweaks of the training loop by changing a Learner in various events

    +
    +
    +
    +

    BatchMasker

    +
    +

    source

    +
    +

    BatchMasker

    +
    +
     BatchMasker (r:float=0.15, lm:int=3, stateful:bool=True, sync:bool=False,
    +              subsequence_mask:bool=True, variable_mask:bool=False,
    +              future_mask:bool=False, schedule_func:Optional[<built-
    +              infunctioncallable>]=None)
    +
    +

    Callback that applies a random mask to each sample in a training batch

    +
    +
    +
    +

    Args:

    +

    r: probability of masking. subsequence_mask: apply a mask to random subsequences. lm: average mask len when using stateful (geometric) masking. stateful: geometric distribution is applied so that average mask length is lm. sync: all variables have the same masking. variable_mask: apply a mask to random variables. Only applicable to multivariate time series. future_mask: used to train a forecasting model. schedule_func: if a scheduler is passed, it will modify the probability of masking during training.

    +
    +
    +

    SamplerWithReplacement

    +
    +

    source

    +
    +

    SamplerWithReplacement

    +
    +
     SamplerWithReplacement (after_create=None, before_fit=None,
    +                         before_epoch=None, before_train=None,
    +                         before_batch=None, after_pred=None,
    +                         after_loss=None, before_backward=None,
    +                         after_cancel_backward=None, after_backward=None,
    +                         before_step=None, after_cancel_step=None,
    +                         after_step=None, after_cancel_batch=None,
    +                         after_batch=None, after_cancel_train=None,
    +                         after_train=None, before_validate=None,
    +                         after_cancel_validate=None, after_validate=None,
    +                         after_cancel_epoch=None, after_epoch=None,
    +                         after_cancel_fit=None, after_fit=None)
    +
    +

    Callback that modify the sampler to select a percentage of samples and/ or sequence steps with replacement from each training batch

    + + +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/callback.mvp.html b/callback.mvp.html new file mode 100644 index 000000000..dd6418067 --- /dev/null +++ b/callback.mvp.html @@ -0,0 +1,1612 @@ + + + + + + + + + +tsai - MVP (aka TSBERT) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    MVP (aka TSBERT)

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Self-Supervised Pretraining of Time Series Models

    +
    +

    Masked Value Predictor callback used to predict time series step values after a binary mask has been applied.

    +
    +

    source

    +
    +

    self_mask

    +
    +
     self_mask (o)
    +
    +
    +

    source

    +
    +
    +

    create_future_mask

    +
    +
     create_future_mask (o, r=0.15, sync=False)
    +
    +
    +

    source

    +
    +
    +

    create_variable_mask

    +
    +
     create_variable_mask (o, r=0.15)
    +
    +
    +

    source

    +
    +
    +

    create_subsequence_mask

    +
    +
     create_subsequence_mask (o, r=0.15, lm=3, stateful=True, sync=False)
    +
    +
    +
    t = torch.rand(16, 3, 100)
    +mask = create_subsequence_mask(t, sync=False)
    +test_eq(mask.shape, t.shape)
    +mask = create_subsequence_mask(t, sync=True)
    +test_eq(mask.shape, t.shape)
    +mask = create_variable_mask(t)
    +test_eq(mask.shape, t.shape)
    +mask = create_future_mask(t)
    +test_eq(mask.shape, t.shape)
    +
    +
    +
    o = torch.randn(2, 3, 4)
    +o[o>.5] = np.nan
    +test_eq(torch.isnan(self_mask(o)).sum(), 0)
    +
    +
    +
    t = torch.rand(16, 30, 100)
    +mask = create_subsequence_mask(t, r=.15) # default settings
    +test_eq(mask.dtype, torch.bool)
    +plt.figure(figsize=(10, 3))
    +plt.pcolormesh(mask[0], cmap='cool')
    +plt.title(f'sample 0 subsequence mask (sync=False) - default mean: {mask[0].float().mean().item():.3f}')
    +plt.show()
    +plt.figure(figsize=(10, 3))
    +plt.pcolormesh(mask[1], cmap='cool')
    +plt.title(f'sample 1 subsequence mask (sync=False) - default mean: {mask[1].float().mean().item():.3f}')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    t = torch.rand(16, 30, 100)
    +mask = create_subsequence_mask(t, r=.5) # 50% of values masked
    +test_eq(mask.dtype, torch.bool)
    +plt.figure(figsize=(10, 3))
    +plt.pcolormesh(mask[0], cmap='cool')
    +plt.title(f'sample 0 subsequence mask (r=.5) mean: {mask[0].float().mean().item():.3f}')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    t = torch.rand(16, 30, 100)
    +mask = create_subsequence_mask(t, lm=5) # average length of mask = 5 
    +test_eq(mask.dtype, torch.bool)
    +plt.figure(figsize=(10, 3))
    +plt.pcolormesh(mask[0], cmap='cool')
    +plt.title(f'sample 0 subsequence mask (lm=5) mean: {mask[0].float().mean().item():.3f}')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    t = torch.rand(16, 30, 100)
    +mask = create_subsequence_mask(t, stateful=False) # individual time steps masked 
    +test_eq(mask.dtype, torch.bool)
    +plt.figure(figsize=(10, 3))
    +plt.pcolormesh(mask[0], cmap='cool')
    +plt.title(f'per sample subsequence mask (stateful=False) mean: {mask[0].float().mean().item():.3f}')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    t = torch.rand(1, 30, 100)
    +mask = create_subsequence_mask(t, sync=True) # all time steps masked simultaneously
    +test_eq(mask.dtype, torch.bool)
    +plt.figure(figsize=(10, 3))
    +plt.pcolormesh(mask[0], cmap='cool')
    +plt.title(f'per sample subsequence mask (sync=True) mean: {mask[0].float().mean().item():.3f}')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    t = torch.rand(1, 30, 100)
    +mask = create_variable_mask(t) # masked variables
    +test_eq(mask.dtype, torch.bool)
    +plt.figure(figsize=(10, 3))
    +plt.pcolormesh(mask[0], cmap='cool')
    +plt.title(f'per sample variable mask mean: {mask[0].float().mean().item():.3f}')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    t = torch.rand(1, 30, 100)
    +mask = create_future_mask(t, r=.15, sync=True) # masked steps
    +test_eq(mask.dtype, torch.bool)
    +plt.figure(figsize=(10, 3))
    +plt.pcolormesh(mask[0], cmap='cool')
    +plt.title(f'future mask mean: {mask[0].float().mean().item():.3f}')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    t = torch.rand(1, 30, 100)
    +mask = create_future_mask(t, r=.15, sync=False) # masked steps
    +mask = create_future_mask(t, r=.15, sync=True) # masked steps
    +test_eq(mask.dtype, torch.bool)
    +plt.figure(figsize=(10, 3))
    +plt.pcolormesh(mask[0], cmap='cool')
    +plt.title(f'future mask mean: {mask[0].float().mean().item():.3f}')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    create_mask

    +
    +
     create_mask (o, r=0.15, lm=3, stateful=True, sync=False,
    +              subsequence_mask=True, variable_mask=False,
    +              future_mask=False)
    +
    +
    +

    source

    +
    +
    +

    MVP

    +
    +
     MVP (r:float=0.15, subsequence_mask:bool=True, lm:float=3.0,
    +      stateful:bool=True, sync:bool=False, variable_mask:bool=False,
    +      future_mask:bool=False, custom_mask:Optional=None,
    +      sel_vars:Optional[list]=None, nan_to_num:int=0,
    +      window_size:Optional[tuple]=None, dropout:float=0.1, crit:<built-
    +      infunctioncallable>=None, weights_path:Optional[str]=None,
    +      target_dir:str='./models/MVP', fname:str='model',
    +      save_best:bool=True, verbose:bool=False)
    +
    +

    Basic class handling tweaks of the training loop by changing a Learner in various events

    +
    +
    +

    Experiments

    +
    +
    from tsai.data.external import get_UCR_data, check_data
    +from tsai.data.preprocessing import TSStandardize, TSNan2Value
    +from tsai.data.core import TSCategorize, get_ts_dls
    +from tsai.learner import ts_learner
    +from tsai.models.InceptionTimePlus import InceptionTimePlus
    +
    +
    +
    dsid = 'MoteStrain'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +check_data(X, y, splits, False)
    +X[X<-1] = np.nan # This is to test the model works well even if nan values are passed through the dataloaders.
    +
    +
    X      - shape: [1272 samples x 1 features x 84 timesteps]  type: memmap  dtype:float32  isnan: 0
    +y      - shape: (1272,)  type: memmap  dtype:<U1  n_classes: 2 (636 samples per class) ['1', '2']  isnan: False
    +splits - n_splits: 2 shape: [20, 1252]  overlap: False
    +
    +
    +
    +
    # Pre-train
    +tfms  = [None, [TSCategorize()]]
    +batch_tfms = [TSStandardize(by_var=True)]
    +unlabeled_dls = get_ts_dls(X, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +learn = ts_learner(unlabeled_dls, InceptionTimePlus, cbs=[MVP(fname=f'{dsid}', window_size=(.5, 1))]) # trained on variable window size
    +learn.fit_one_cycle(1, 3e-3)
    +
    + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_losstime
    01.2709721.19497400:06
    +
    +
    +
    +
    learn = ts_learner(unlabeled_dls, InceptionTimePlus, cbs=[MVP(weights_path=f'models/MVP/{dsid}.pth')])
    +learn.fit_one_cycle(1, 3e-3)
    +
    + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_losstime
    00.8377411.20048400:07
    +
    +
    +
    +
    learn.MVP.show_preds(sharey=True) # these preds are highly inaccurate as the model's been trained for just 1 epoch for testing purposes
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    # Fine-tune
    +tfms  = [None, [TSCategorize()]]
    +batch_tfms = [TSStandardize(by_var=True), TSNan2Value()]
    +labeled_dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=64)
    +learn = ts_learner(labeled_dls, InceptionTimePlus, pretrained=True, weights_path=f'models/MVP/{dsid}.pth', metrics=accuracy)
    +learn.fit_one_cycle(1)
    +
    + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    00.7730150.7442670.46086300:09
    +
    +
    +
    +
    tfms  = [None, [TSCategorize()]]
    +batch_tfms = [TSStandardize(by_var=True), TSNan2Value()]
    +unlabeled_dls = get_ts_dls(X, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=64)
    +fname = f'{dsid}_test'
    +mvp = MVP(subsequence_mask=True, sync='random', variable_mask=True, future_mask=True, fname=fname)
    +learn = ts_learner(unlabeled_dls, InceptionTimePlus, metrics=accuracy, cbs=mvp) # Metrics will not be used!
    +
    +
    /Users/nacho/opt/anaconda3/envs/py37torch113/lib/python3.7/site-packages/ipykernel_launcher.py:42: UserWarning: Only future_mask will be used
    +
    +
    +
    +
    tfms  = [None, [TSCategorize()]]
    +batch_tfms = [TSStandardize(by_var=True)]
    +unlabeled_dls = get_ts_dls(X, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=64)
    +fname = f'{dsid}_test'
    +mvp = MVP(subsequence_mask=True, sync='random', variable_mask=True, future_mask=True, custom_mask=partial(create_future_mask, r=.15),
    +                fname=fname)
    +learn = ts_learner(unlabeled_dls, InceptionTimePlus, metrics=accuracy, cbs=mvp) # Metrics will not be used!
    +
    +
    /Users/nacho/opt/anaconda3/envs/py37torch113/lib/python3.7/site-packages/ipykernel_launcher.py:40: UserWarning: Only custom_mask will be used
    +
    +
    +
    +
    try: os.remove("models/MVP/MoteStrain.pth")
    +except OSError: pass
    +try: os.remove("models/MVP/model.pth")
    +except OSError: pass
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/callback.noisy_student.html b/callback.noisy_student.html new file mode 100644 index 000000000..a994fe702 --- /dev/null +++ b/callback.noisy_student.html @@ -0,0 +1,1390 @@ + + + + + + + + + +tsai - Noisy student + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Noisy student

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    Callback to apply noisy student self-training (a semi-supervised learning approach) based on:

    +

    Xie, Q., Luong, M. T., Hovy, E., & Le, Q. V. (2020). Self-training with noisy student improves imagenet classification. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 10687-10698).

    +
    +

    source

    +
    +

    NoisyStudent

    +
    +
     NoisyStudent (dl2:fastai.data.load.DataLoader, bs:Optional[int]=None,
    +               l2pl_ratio:int=1, batch_tfms:Optional[list]=None,
    +               do_setup:bool=True, pseudolabel_sample_weight:float=1.0,
    +               verbose=False)
    +
    +

    A callback to implement the Noisy Student approach. In the original paper this was used in combination with noise: - stochastic depth: .8 - RandAugment: N=2, M=27 - dropout: .5

    +

    Steps: 1. Build the dl you will use as a teacher 2. Create dl2 with the pseudolabels (either soft or hard preds) 3. Pass any required batch_tfms to the callback

    +
    +
    from tsai.data.all import *
    +from tsai.models.all import *
    +from tsai.tslearner import *
    +
    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, return_split=False)
    +X = X.astype(np.float32)
    +
    +
    +
    pseudolabeled_data = X
    +soft_preds = True
    +
    +pseudolabels = ToNumpyCategory()(y) if soft_preds else OneHot()(y)
    +dsets2 = TSDatasets(pseudolabeled_data, pseudolabels)
    +dl2 = TSDataLoader(dsets2, num_workers=0)
    +noisy_student_cb = NoisyStudent(dl2, bs=256, l2pl_ratio=2, verbose=True)
    +tfms = [None, TSClassification]
    +learn = TSClassifier(X, y, splits=splits, tfms=tfms, batch_tfms=[TSStandardize(), TSRandomSize(.5)], cbs=noisy_student_cb)
    +learn.fit_one_cycle(1)
    +
    +
    labels / pseudolabels per training batch              : 171 / 85
    +relative labeled/ pseudolabel sample weight in dataset: 4.0
    +
    +X: torch.Size([171, 24, 51])  X2: torch.Size([85, 24, 51])  X_comb: torch.Size([256, 24, 41])
    +y: torch.Size([171])  y2: torch.Size([85])  y_comb: torch.Size([256])
    +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    01.7821441.7584710.25000000:00
    +
    +
    +
    +
    pseudolabeled_data = X
    +soft_preds = False
    +
    +pseudolabels = ToNumpyCategory()(y) if soft_preds else OneHot()(y)
    +pseudolabels = pseudolabels.astype(np.float32)
    +dsets2 = TSDatasets(pseudolabeled_data, pseudolabels)
    +dl2 = TSDataLoader(dsets2, num_workers=0)
    +noisy_student_cb = NoisyStudent(dl2, bs=256, l2pl_ratio=2, verbose=True)
    +tfms = [None, TSClassification]
    +learn = TSClassifier(X, y, splits=splits, tfms=tfms, batch_tfms=[TSStandardize(), TSRandomSize(.5)], cbs=noisy_student_cb)
    +learn.fit_one_cycle(1)
    +
    +
    labels / pseudolabels per training batch              : 171 / 85
    +relative labeled/ pseudolabel sample weight in dataset: 4.0
    +
    +X: torch.Size([171, 24, 51])  X2: torch.Size([85, 24, 51])  X_comb: torch.Size([256, 24, 51])
    +y: torch.Size([171, 6])  y2: torch.Size([85, 6])  y_comb: torch.Size([256, 6])
    +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    01.8984011.8411820.15555600:00
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/callback.predictiondynamics.html b/callback.predictiondynamics.html new file mode 100644 index 000000000..190d165d8 --- /dev/null +++ b/callback.predictiondynamics.html @@ -0,0 +1,1346 @@ + + + + + + + + + +tsai - PredictionDynamics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    PredictionDynamics

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Callback used to visualize model predictions during training.

    +
    +

    This is an implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on a blog post by Andrej Karpathy I read some time ago that I really liked. One of the things he mentioned was this:

    +
    +

    visualize prediction dynamics. I like to visualize model predictions on a fixed test batch during the course of training. The “dynamics” of how these predictions move will give you incredibly good intuition for how the training progresses. Many times it is possible to feel the network “struggle” to fit your data if it wiggles too much in some way, revealing instabilities. Very low or very high learning rates are also easily noticeable in the amount of jitter.” A. Karpathy

    +
    +
    +

    source

    +
    +

    PredictionDynamics

    +
    +
     PredictionDynamics (show_perc=1.0, figsize=(10, 6), alpha=0.3, size=30,
    +                     color='lime', cmap='gist_rainbow', normalize=False,
    +                     sensitivity=None, specificity=None)
    +
    +

    Basic class handling tweaks of the training loop by changing a Learner in various events

    +
    +
    from tsai.basics import *
    +from tsai.models.InceptionTime import *
    +
    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +check_data(X, y, splits, False)
    +
    +
    X      - shape: [360 samples x 24 features x 51 timesteps]  type: memmap  dtype:float32  isnan: 0
    +y      - shape: (360,)  type: memmap  dtype:<U3  n_classes: 6 (60 samples per class) ['1.0', '2.0', '3.0', '4.0', '5.0', '6.0']  isnan: False
    +splits - n_splits: 2 shape: [180, 180]  overlap: False
    +
    +
    +
    +
    tfms  = [None, [Categorize()]]
    +batch_tfms = [TSStandardize(by_var=True)]
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +learn = ts_learner(dls, InceptionTime, metrics=accuracy, cbs=PredictionDynamics()) 
    +learn.fit_one_cycle(2, 3e-3)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    01.8854621.7738720.23888900:05
    11.4256671.6404180.37777800:05
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + +
    train_lossvalid_lossaccuracy
    11.4256671.6404180.377778
    + +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.core.html b/data.core.html new file mode 100644 index 000000000..e80d8eed9 --- /dev/null +++ b/data.core.html @@ -0,0 +1,3655 @@ + + + + + + + + + +tsai - Data Core + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Data Core

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Main Numpy and Times Series functions used throughout the library.

    +
    +
    +
    from tsai.data.external import get_UCR_data
    +
    +
    +
    dsid = 'OliveOil'
    +X_train, y_train, X_valid, y_valid = get_UCR_data(dsid, on_disk=True, force_download=True)
    +X_on_disk, y_on_disk, splits = get_UCR_data(dsid, on_disk=True, return_split=False, force_download=True)
    +X_in_memory, y_in_memory, splits = get_UCR_data(dsid, on_disk=False, return_split=False, force_download=True)
    +y_tensor = cat2int(y_on_disk)
    +y_array = y_tensor.numpy()
    +
    +
    +

    source

    +
    +

    ToNumpyTensor

    +
    +
     ToNumpyTensor (enc=None, dec=None, split_idx=None, order=None)
    +
    +

    Transforms an object into NumpyTensor

    +
    +

    source

    +
    +
    +

    NumpyTensor

    +
    +
     NumpyTensor (o, dtype=None, device=None, copy=None, requires_grad=False,
    +              **kwargs)
    +
    +

    Returns a tensor with subclass NumpyTensor that has a show method

    +
    +

    source

    +
    +
    +

    TSTensor

    +
    +
     TSTensor (o, dtype=None, device=None, copy=None, requires_grad=False,
    +           **kwargs)
    +
    +

    Returns a tensor with subclass TSTensor that has a show method

    +
    +

    source

    +
    +
    +

    show_tuple

    +
    +
     show_tuple (tup, nrows:int=1, ncols:int=1,
    +             sharex:Union[bool,Literal['none','all','row','col']]=False,
    +             sharey:Union[bool,Literal['none','all','row','col']]=False,
    +             squeeze:bool=True,
    +             width_ratios:Optional[Sequence[float]]=None,
    +             height_ratios:Optional[Sequence[float]]=None,
    +             subplot_kw:Optional[dict[str,Any]]=None,
    +             gridspec_kw:Optional[dict[str,Any]]=None)
    +
    +

    Display a timeseries plot from a decoded tuple

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    tup
    nrowsint1
    ncolsint1
    sharexbool | Literal[‘none’, ‘all’, ‘row’, ‘col’]False
    shareybool | Literal[‘none’, ‘all’, ‘row’, ‘col’]False
    squeezeboolTrue- If True, extra dimensions are squeezed out from the returned
    array of ~matplotlib.axes.Axes:

    - if only one subplot is constructed (nrows=ncols=1), the
    resulting single Axes object is returned as a scalar.
    - for Nx1 or 1xM subplots, the returned object is a 1D numpy
    object array of Axes objects.
    - for NxM, subplots with N>1 and M>1 are returned as a 2D array.

    - If False, no squeezing at all is done: the returned Axes object is
    always a 2D array containing Axes instances, even if it ends up
    being 1x1.
    width_ratiosSequence[float] | NoneNoneDefines the relative widths of the columns. Each column gets a
    relative width of width_ratios[i] / sum(width_ratios).
    If not given, all columns will have the same width. Equivalent
    to gridspec_kw={'width_ratios': [...]}.
    height_ratiosSequence[float] | NoneNoneDefines the relative heights of the rows. Each row gets a
    relative height of height_ratios[i] / sum(height_ratios).
    If not given, all rows will have the same height. Convenience
    for gridspec_kw={'height_ratios': [...]}.
    subplot_kwdict[str, Any] | NoneNoneDict with keywords passed to the
    ~matplotlib.figure.Figure.add_subplot call used to create each
    subplot.
    gridspec_kwdict[str, Any] | NoneNoneDict with keywords passed to the ~matplotlib.gridspec.GridSpec
    constructor used to create the grid the subplots are placed on.
    +
    +

    source

    +
    +
    +

    ToTSTensor

    +
    +
     ToTSTensor (enc=None, dec=None, split_idx=None, order=None)
    +
    +

    Transforms an object into TSTensor

    +
    +
    a = np.random.randn(2, 3, 4).astype(np.float16)
    +assert np.shares_memory(a, NumpyTensor(a))
    +assert np.shares_memory(a, TSTensor(a))
    +
    +
    +
    a = np.random.randn(2, 3, 4).astype(np.float32)
    +assert np.shares_memory(a, NumpyTensor(a))
    +assert np.shares_memory(a, TSTensor(a))
    +
    +
    +
    a = np.random.randint(10, size=10).astype(np.int64)
    +assert np.shares_memory(a, NumpyTensor(a))
    +assert np.shares_memory(a, TSTensor(a))
    +
    +
    +
    a = np.random.randint(10, size=10).astype(np.int32)
    +assert np.shares_memory(a, NumpyTensor(a))
    +assert np.shares_memory(a, TSTensor(a))
    +
    +
    +
    a = torch.rand(2, 3, 4).float()
    +assert np.shares_memory(a, NumpyTensor(a))
    +assert np.shares_memory(a, TSTensor(a))
    +
    +
    +
    a = torch.randint(3, (10,))
    +assert np.shares_memory(a, NumpyTensor(a))
    +assert np.shares_memory(a, TSTensor(a))
    +
    +
    +
    t = TSTensor(torch.randn(2, 3, 4))
    +p = torch.tensor(3., requires_grad=True)
    +test = torch.add(t, p)
    +test_eq(test.requires_grad, True)
    +test_eq(type(t.data), torch.Tensor)
    +test_eq(type(t), TSTensor)
    +
    +
    +
    l = L([0,1,2,3], [4,5,6,7], [8, 9, 10, 11])
    +TSTensor(l), TSTensor(l).data
    +
    +
    (TSTensor(vars:3, len:4, device=cpu, dtype=torch.int64),
    + tensor([[ 0,  1,  2,  3],
    +         [ 4,  5,  6,  7],
    +         [ 8,  9, 10, 11]]))
    +
    +
    +
    +
    t = TSTensor(X_train)
    +for i in range(4):
    +    print(t, t.ndim, torch.is_tensor(t))
    +    if i < 3: t = t[0]
    +
    +
    TSTensor(samples:30, vars:1, len:570, device=cpu, dtype=torch.float32) 3 True
    +TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32) 2 True
    +TSTensor(len:570, device=cpu, dtype=torch.float32) 1 True
    +TSTensor([-0.6113752722740173], device=cpu, dtype=torch.float32) 0 True
    +
    +
    +
    +
    TSTensor(X_on_disk)
    +
    +
    TSTensor(samples:60, vars:1, len:570, device=cpu, dtype=torch.float32)
    +
    +
    +
    +
    ToTSTensor()(X_on_disk)
    +
    +
    TSTensor(samples:60, vars:1, len:570, device=cpu, dtype=torch.float32)
    +
    +
    +
    +
    TSTensor(X_train).show();
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    TSTensor(X_train).show(title='1');
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    show_tuple((TSTensor(X_train), ['1', '2']))
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    show_tuple((TSTensor(np.arange(10).reshape(2,5)), 1))
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    show_tuple((TSTensor(np.arange(10).reshape(2,5)), '1'))
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    show_tuple((TSTensor(np.arange(10).reshape(2,5)), [1,2]))
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    show_tuple((TSTensor(np.arange(10).reshape(2,5)), ['1', '2']))
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSMaskTensor

    +
    +
     TSMaskTensor (o, dtype=None, device=None, copy=None, requires_grad=False,
    +               **kwargs)
    +
    +

    Returns a tensor with subclass NumpyTensor that has a show method

    +
    +

    source

    +
    +
    +

    TSLabelTensor

    +
    +
     TSLabelTensor (o, dtype=None, device=None, copy=None,
    +                requires_grad=False, **kwargs)
    +
    +

    Returns a tensor with subclass NumpyTensor that has a show method

    +
    +
    t = TSLabelTensor(torch.randint(0,10,(1, 2, 3)))
    +t, t[0], t[0][0], t[0][0][0]
    +
    +
    (TSLabelTensor(shape:(1, 2, 3), device=cpu, dtype=torch.int64),
    + TSLabelTensor(shape:(2, 3), device=cpu, dtype=torch.int64),
    + TSLabelTensor(shape:(3,), device=cpu, dtype=torch.int64),
    + 7)
    +
    +
    +
    +
    t = TSMaskTensor(torch.randint(0,10,(1, 2, 3)))
    +t, t[0], t[0][0], t[0][0][0]
    +
    +
    (TSMaskTensor(shape:(1, 2, 3), device=cpu, dtype=torch.int64),
    + TSMaskTensor(shape:(2, 3), device=cpu, dtype=torch.int64),
    + TSMaskTensor(shape:(3,), device=cpu, dtype=torch.int64),
    + 1)
    +
    +
    +
    +

    source

    +
    +
    +

    TSClassification

    +
    +
     TSClassification (vocab=None, sort=True)
    +
    +

    Vectorized, reversible transform of category string to vocab id

    +
    +

    source

    +
    +
    +

    ToInt

    +
    +
     ToInt (enc=None, dec=None, split_idx=None, order=None)
    +
    +

    Transforms an object dtype to int

    +
    +

    source

    +
    +
    +

    ToFloat

    +
    +
     ToFloat (enc=None, dec=None, split_idx=None, order=None)
    +
    +

    Transforms an object dtype to float (vectorized)

    +
    +
    a = np.random.randint(0, 2, 10)
    +b = np.array(['1', '2', '3'])
    +c = np.array(['1.0', '2.0', '3.0'])
    +t = torch.randint(0, 2, (10, ))
    +test_eq(ToFloat()(a).dtype, 'float32')
    +test_eq(ToFloat()(b).dtype, 'float32')
    +test_eq(ToFloat()(c).dtype, 'float32')
    +test_eq(ToFloat()(t).dtype, torch.float32)
    +
    +
    +
    a = np.random.rand(10)*10
    +b = np.array(['1.0', '2.0', '3.0'])
    +t = torch.rand(10)*10
    +test_eq(ToInt()(a).dtype, 'int64')
    +test_eq(ToInt()(b).dtype, 'int64')
    +test_eq(ToInt()(t).dtype, torch.long)
    +
    +
    +
    t = TSClassification()
    +t.setup(y_on_disk[splits[0]])
    +y_encoded = t(y_on_disk)
    +print(y_encoded)
    +test_eq(t.decodes(y_encoded), y_on_disk)
    +
    +
    TensorCategory([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
    +                3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
    +                1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3])
    +
    +
    +
    +
    y_multi= np.random.randint(0,3,20)
    +y_multi = np.asarray(alphabet[y_multi]).reshape(4,5)
    +tfm = TSClassification()
    +tfm.setup(y_multi)
    +enc_y_multi = tfm(y_multi)
    +test_eq(y_multi, tfm.decode(enc_y_multi))
    +enc_y_multi
    +
    +
    TensorCategory([[0, 1, 1, 1, 2],
    +                [0, 1, 2, 1, 0],
    +                [2, 1, 0, 1, 2],
    +                [0, 2, 0, 2, 2]])
    +
    +
    +
    +

    source

    +
    +
    +

    TSMultiLabelClassification

    +
    +
     TSMultiLabelClassification (c=None, vocab=None, add_na=False, sort=True)
    +
    +

    Reversible combined transform of multi-category strings to one-hot encoded vocab id

    +
    +

    source

    +
    +
    +

    TSTensorBlock

    +
    +
     TSTensorBlock (type_tfms=None, item_tfms=None, batch_tfms=None,
    +                dl_type=None, dls_kwargs=None)
    +
    +

    Initialize self. See help(type(self)) for accurate signature.

    +
    +

    source

    +
    +
    +

    NumpyTensorBlock

    +
    +
     NumpyTensorBlock (type_tfms=None, item_tfms=None, batch_tfms=None,
    +                   dl_type=None, dls_kwargs=None)
    +
    +

    Initialize self. See help(type(self)) for accurate signature.

    +
    +
    test_eq(NumpyTensorBlock().item_tfms[0].__name__, 'ToNumpyTensor')
    +test_eq(TSTensorBlock().item_tfms[0].__name__, 'ToTSTensor')
    +
    +
    +

    source

    +
    +
    +

    TSDataset

    +
    +
     TSDataset (X, y=None, split=None, sel_vars=None, sel_steps=None,
    +            types=None, dtype=None, device=None)
    +
    +

    Initialize self. See help(type(self)) for accurate signature.

    +
    +

    source

    +
    +
    +

    NumpyDataset

    +
    +
     NumpyDataset (X, y=None, types=None)
    +
    +

    Initialize self. See help(type(self)) for accurate signature.

    +
    +

    source

    +
    +
    +

    TorchDataset

    +
    +
     TorchDataset (X, y=None)
    +
    +

    Initialize self. See help(type(self)) for accurate signature.

    +
    +
    a = np.random.rand(5,6,7)
    +b = np.random.rand(5)
    +ds = NumpyDataset(a,b)
    +xb, yb = ds[[0,4]]
    +test_eq(xb.shape, (2,6,7))
    +test_eq(yb.shape, (2,))
    +
    +
    +

    source

    +
    +
    +

    TSTfmdLists

    +
    +
     TSTfmdLists (items=None, *rest, use_list=False, match=None)
    +
    +

    A Pipeline of tfms applied to a collection of items

    + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    itemslistItems to apply Transforms to
    use_listboolNoneUse list in L
    +
    +

    source

    +
    +
    +

    NoTfmLists

    +
    +
     NoTfmLists (items=None, *rest, use_list=False, match=None)
    +
    +

    A Pipeline of tfms applied to a collection of items

    +
    +
    items = X_on_disk
    +tl = TfmdLists(items, tfms=None, splits=splits)
    +test_eq(len(tl), len(X_on_disk))
    +test_eq(len(tl.train), len(splits[0]))
    +test_eq(len(tl.valid), len(splits[1]))
    +test_eq(tl[[0,4,7]], X_on_disk[[0,4,7]])
    +test_eq(tl.train[[0,4,7]], X_on_disk[splits[0][0,4,7]])
    +test_eq(tl.valid[[0,4,7]], X_on_disk[splits[1][0,4,7]])
    +test_eq(tl[0], items[0])
    +test_eq(tl[[0,1]], items[[0,1]])
    +test_eq(tl.decode(tl[0]), tl[0])
    +test_eq((tl.split_idx, tl.train.split_idx, tl.valid.split_idx), (None, 0, 1))
    +
    +
    +
    items = X_on_disk
    +tl = TSTfmdLists(items, tfms=None, splits=splits)
    +test_eq(len(tl), len(X_on_disk))
    +test_eq(len(tl.train), len(splits[0]))
    +test_eq(len(tl.valid), len(splits[1]))
    +test_eq(tl[[0,4,7]], X_on_disk[[0,4,7]])
    +test_eq(tl.train[[0,4,7]], X_on_disk[splits[0][0,4,7]])
    +test_eq(tl.valid[[0,4,7]], X_on_disk[splits[1][0,4,7]])
    +test_eq(tl[0], items[0])
    +test_eq(tl[[0,1]], items[[0,1]])
    +test_eq(tl.decode(tl[0]), tl[0])
    +test_eq((tl.split_idx, tl.train.split_idx, tl.valid.split_idx), (None, 0, 1))
    +
    +
    +
    items = X_on_disk
    +ntl = NoTfmLists(items, splits=splits)
    +test_eq(len(ntl), len(X_on_disk))
    +test_eq(len(ntl.train), len(splits[0]))
    +test_eq(len(ntl.valid), len(splits[1]))
    +test_eq(ntl._splits, np.arange(len(X_on_disk)))
    +test_eq(ntl.train._splits, np.arange(len(splits[0])))
    +test_eq(ntl.valid._splits, np.arange(len(splits[0]), len(X_on_disk)))
    +print(ntl)
    +print(ntl.train)
    +print(ntl.valid)
    +test_eq(ntl[[0,4,7]], X_on_disk[[0,4,7]])
    +test_eq(ntl.train[[0,4,7]], X_on_disk[splits[0][0,4,7]])
    +test_eq(ntl.valid[[0,4,7]], X_on_disk[splits[1][0,4,7]])
    +test_eq(ntl[0], items[0])
    +test_eq(ntl[[0,1]], items[[0,1]])
    +test_eq(ntl[:], X_on_disk)
    +ntl[0].shape, stack(ntl[[0,1]]).shape
    +test_eq(ntl.decode(ntl[0]), ntl[0])
    +assert id(items) == id(ntl.items) == id(ntl.train.items) == id(ntl.valid.items)
    +test_eq((ntl.split_idx, ntl.train.split_idx, ntl.valid.split_idx), (None, 0, 1))
    +
    +
    NoTfmLists: memmap(60, 1, 570)
    +NoTfmLists: memmap(30, 1, 570)
    +NoTfmLists: memmap(30, 1, 570)
    +
    +
    +
    +
    subitems = X_on_disk
    +new_ntl = ntl._new(X_on_disk)
    +test_eq(new_ntl[:], X_on_disk)
    +
    +
    +
    idxs = random_choice(len(X_on_disk), 10, False)
    +new_ntl = ntl._new(X_on_disk[idxs])
    +test_eq(new_ntl[:], X_on_disk[idxs])
    +
    +
    +
    idxs = random_choice(len(X_on_disk), 10, False)
    +new_ntl = ntl.valid._new(X_on_disk[idxs])
    +test_eq(new_ntl[:], X_on_disk[idxs])
    +
    +
    +

    source

    +
    +
    +

    tscoll_repr

    +
    +
     tscoll_repr (c, max_n=10)
    +
    +

    String repr of up to max_n items of (possibly lazy) collection c

    +
    +

    source

    +
    +
    +

    NumpyDatasets

    +
    +
     NumpyDatasets (items:list=None, tfms:MutableSequence|Pipeline=None,
    +                tls:TfmdLists=None, n_inp:int=None, dl_type=None,
    +                use_list:bool=None, do_setup:bool=True,
    +                split_idx:int=None, train_setup:bool=True,
    +                splits:list=None, types=None, verbose:bool=False)
    +
    +

    A dataset that creates tuples from X (and y) and applies tfms of type item_tfms

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    itemslistItems to apply Transforms to
    tfmsMutableSequence | PipelineTransform(s) or Pipeline to apply
    tlsNoneTypeNone
    n_inpNoneTypeNone
    dl_typeTfmdDLNoneType of DataLoader
    use_listboolNoneUse list in L
    do_setupboolTrueCall setup() for Transform
    split_idxintNoneApply Transform(s) to training or validation set. 0 for training set and 1 for validation set
    train_setupboolTrueApply Transform(s) only on training DataLoader
    splitslistNoneIndices for training and validation sets
    typesNoneTypeNoneTypes of data in items
    verboseboolFalsePrint verbose output
    +
    +

    source

    +
    +
    +

    TSDatasets

    +
    +
     TSDatasets (items:list=None, tfms:MutableSequence|Pipeline=None,
    +             tls:TfmdLists=None, n_inp:int=None, dl_type=None,
    +             use_list:bool=None, do_setup:bool=True, split_idx:int=None,
    +             train_setup:bool=True, splits:list=None, types=None,
    +             verbose:bool=False)
    +
    +

    A dataset that creates tuples from X (and optionally y) and applies item_tfms

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    itemslistItems to apply Transforms to
    tfmsMutableSequence | PipelineTransform(s) or Pipeline to apply
    tlsNoneTypeNone
    n_inpNoneTypeNone
    dl_typeTfmdDLNoneType of DataLoader
    use_listboolNoneUse list in L
    do_setupboolTrueCall setup() for Transform
    split_idxintNoneApply Transform(s) to training or validation set. 0 for training set and 1 for validation set
    train_setupboolTrueApply Transform(s) only on training DataLoader
    splitslistNoneIndices for training and validation sets
    typesNoneTypeNoneTypes of data in items
    verboseboolFalsePrint verbose output
    +
    +
    dsets = TSDatasets(X_on_disk, y_on_disk, splits=splits, tfms=[None, TSClassification()], inplace=True)
    +i = random_choice(len(splits[0]), 10, False).tolist()
    +test_eq(dsets.subset(i), dsets.train.subset(i))
    +dsets.valid.subset(i)
    +dsets.valid.subset(i)[[0,6,8]]
    +test_eq(dsets.subset(i)[[0,6,8]], dsets.train.subset(i)[[0,6,8]])
    +dsets.subset([0,7,3])
    +dsets.subset(i), dsets.train.subset(i), dsets.valid.subset(i)
    +
    +
    ((#10) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(2)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3))] ...],
    + (#10) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(2)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3))] ...],
    + (#10) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(2)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3))] ...])
    +
    +
    +
    +
    tfms = [None, TSClassification()]
    +dsets = TSDatasets(X_on_disk, y_on_disk, splits=splits, tfms=tfms, inplace=False)
    +assert id(X_on_disk) == id(dsets.ptls[0].items) == id(dsets.train.ptls[0].items) == id(dsets.valid.ptls[0].items)
    +
    +tfms = None
    +dsets = TSDatasets(X_on_disk, splits=splits, tfms=tfms, inplace=False)
    +assert id(X_on_disk) == id(dsets.ptls[0].items) == id(dsets.train.ptls[0].items) == id(dsets.valid.ptls[0].items)
    +
    +
    +

    source

    +
    +
    +

    TSDatasets.add_unlabeled

    +
    +
     TSDatasets.add_unlabeled (X, inplace=True)
    +
    +
    +

    source

    +
    +
    +

    TSDatasets.add_test

    +
    +
     TSDatasets.add_test (X, y=None, inplace=True)
    +
    +
    +

    source

    +
    +
    +

    TSDatasets.add_dataset

    +
    +
     TSDatasets.add_dataset (X, y=None, inplace=True)
    +
    +
    +

    source

    +
    +
    +

    NumpyDatasets.add_unlabeled

    +
    +
     NumpyDatasets.add_unlabeled (X, inplace=True)
    +
    +
    +

    source

    +
    +
    +

    NumpyDatasets.add_test

    +
    +
     NumpyDatasets.add_test (X, y=None, inplace=True)
    +
    +
    +

    source

    +
    +
    +

    NumpyDatasets.add_dataset

    +
    +
     NumpyDatasets.add_dataset (X, y=None, inplace=True)
    +
    +
    +

    source

    +
    +
    +

    add_ds

    +
    +
     add_ds (dsets, X, y=None, inplace=True)
    +
    +

    Create test datasets from X (and y) using validation transforms of dsets

    +
    +
    dsets = TSDatasets(X_on_disk, y_on_disk, splits=splits, tfms=[None, TSClassification()], inplace=True)
    +print(dsets.train[0][0].shape, dsets.train[[0,1]][0].shape)
    +print(dsets.split_idx, dsets.train.split_idx, dsets.valid.split_idx)
    +print(dsets.new_empty())
    +dsets
    +
    +
    torch.Size([1, 570]) torch.Size([2, 1, 570])
    +None 0 1
    +(#0) []
    +
    +
    +
    (#60) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1))] ...]
    +
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_on_disk, splits=splits, tfms=[None, TSClassification()], inplace=False)
    +print(dsets.train[0][0].shape, dsets.train[[0,1]][0].shape)
    +print(dsets.split_idx, dsets.train.split_idx, dsets.valid.split_idx)
    +print(dsets.new_empty())
    +dsets
    +
    +
    torch.Size([1, 570]) torch.Size([2, 1, 570])
    +None 0 1
    +(#0) []
    +
    +
    +
    (#60) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([0])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([0])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([0])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([0])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([0])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([1])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([1])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([1])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([1])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([1]))] ...]
    +
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_on_disk, tfms=[None, TSClassification()], splits=splits, inplace=True)
    +
    +idxs = random_choice(len(dsets), 10, False)
    +test_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])
    +test_eq(dsets[idxs][1].numpy(), y_array[idxs])
    +
    +idxs = random_choice(len(dsets.train), 10, False)
    +test_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])
    +test_eq(dsets.train[idxs][1].numpy(), y_array[splits[0][idxs]])
    +
    +idxs = random_choice(len(dsets.valid), 10, False)
    +test_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])
    +test_eq(dsets.valid[idxs][1].numpy(), y_array[splits[1][idxs]])
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_on_disk, tfms=[None, TSClassification()], splits=splits, inplace=False)
    +assert id(X_on_disk) == id(dsets.tls[0].items) == id(dsets.ptls[0].items)
    +assert id(X_on_disk) == id(dsets.train.tls[0].items) == id(dsets.train.ptls[0].items)
    +assert id(X_on_disk) == id(dsets.valid.tls[0].items) == id(dsets.valid.ptls[0].items)
    +
    +idxs = random_choice(len(dsets), 10, False)
    +test_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])
    +test_eq(dsets[idxs][1].numpy(), y_array[idxs])
    +
    +
    +idxs = random_choice(len(dsets.train), 10, False)
    +test_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])
    +test_eq(dsets.train[idxs][1].numpy(), y_array[splits[0][idxs]])
    +
    +idxs = random_choice(len(dsets.valid), 10, False)
    +test_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])
    +test_eq(dsets.valid[idxs][1].numpy(), y_array[splits[1][idxs]])
    +
    +
    +
    dsets = TSDatasets(X_on_disk, splits=splits, inplace=True)
    +
    +idxs = random_choice(len(dsets), 10, False)
    +test_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])
    +
    +idxs = random_choice(len(dsets.train), 10, False)
    +test_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])
    +
    +idxs = random_choice(len(dsets.valid), 10, False)
    +test_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])
    +
    +
    +
    dsets = TSDatasets(X_on_disk, splits=splits, inplace=False)
    +assert np.shares_memory(X_on_disk, dsets.tls[0].items)
    +assert np.shares_memory(X_on_disk, dsets.ptls[0].items)
    +assert np.shares_memory(X_on_disk, dsets.train.tls[0].items)
    +assert np.shares_memory(X_on_disk, dsets.train.ptls[0].items)
    +assert np.shares_memory(X_on_disk, dsets.valid.tls[0].items)
    +assert np.shares_memory(X_on_disk, dsets.valid.ptls[0].items)
    +
    +idxs = random_choice(len(dsets), 10, False)
    +test_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])
    +
    +idxs = random_choice(len(dsets.train), 10, False)
    +test_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])
    +
    +idxs = random_choice(len(dsets.valid), 10, False)
    +test_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits, inplace=True)
    +
    +idxs = random_choice(len(dsets), 10, False)
    +test_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])
    +test_eq(dsets[idxs][1].numpy(), y_array[idxs])
    +
    +idxs = random_choice(len(dsets.train), 10, False)
    +test_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])
    +test_eq(dsets.train[idxs][1].numpy(), y_array[splits[0][idxs]])
    +
    +idxs = random_choice(len(dsets.valid), 10, False)
    +test_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])
    +test_eq(dsets.valid[idxs][1].numpy(), y_array[splits[1][idxs]])
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits, inplace=False)
    +assert np.shares_memory(X_on_disk, dsets.tls[0].items)
    +assert np.shares_memory(X_on_disk, dsets.ptls[0].items)
    +assert np.shares_memory(X_on_disk, dsets.train.tls[0].items)
    +assert np.shares_memory(X_on_disk, dsets.train.ptls[0].items)
    +assert np.shares_memory(X_on_disk, dsets.valid.tls[0].items)
    +assert np.shares_memory(X_on_disk, dsets.valid.ptls[0].items)
    +
    +idxs = random_choice(len(dsets), 10, False)
    +test_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])
    +test_eq(dsets[idxs][1].numpy(), y_array[idxs])
    +
    +idxs = random_choice(len(dsets.train), 10, False)
    +test_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])
    +test_eq(dsets.train[idxs][1].numpy(), y_array[splits[0][idxs]])
    +
    +idxs = random_choice(len(dsets.valid), 10, False)
    +test_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])
    +test_eq(dsets.valid[idxs][1].numpy(), y_array[splits[1][idxs]])
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_on_disk, tfms=[None, TSClassification()], splits=None, inplace=True)
    +
    +idxs = random_choice(len(dsets), 10, False)
    +test_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])
    +test_eq(dsets[idxs][1].numpy(), y_array[idxs])
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_on_disk, tfms=[None, TSClassification()], splits=None, inplace=False)
    +assert id(X_on_disk) == id(dsets.tls[0].items) == id(dsets.ptls[0].items)
    +assert id(X_on_disk) == id(dsets.train.tls[0].items) == id(dsets.train.ptls[0].items)
    +
    +idxs = random_choice(len(dsets), 10, False)
    +test_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])
    +test_eq(dsets[idxs][1].numpy(), y_array[idxs])
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits)
    +test_eq(dsets.train[0:10], dsets.add_dataset(X_on_disk[0:10], y_array[0:10])[:])
    +test_eq(dsets.train[0:10][0], dsets.add_dataset(X_on_disk[0:10])[:][0])
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits)
    +torch.save(dsets, 'export/dsets.pth')
    +del dsets
    +dsets = torch.load('export/dsets.pth')
    +dsets
    +
    +
    (#60) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1))] ...]
    +
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits)
    +torch.save(dsets.train, 'export/dsets.pth')
    +del dsets
    +dsets = torch.load('export/dsets.pth')
    +dsets
    +
    +
    (#30) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1))] ...]
    +
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits)
    +test_eq(len(dsets.train), len(X_train))
    +dsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits)
    +test_eq(len(dsets.train), len(X_train))
    +dsets = TSDatasets(X_on_disk, y_array, tfms=[add(1), TSCategorize()], splits=splits)
    +test_eq(len(dsets.train), len(X_train))
    +# test_eq(dsets.train[0][0].data, tensor(X_train[0] + 1))
    +test_eq(dsets.train[0][1].item(), y_tensor[0])
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_on_disk, tfms=[None, TSCategorize()], splits=splits)
    +test_eq(len(dsets.add_test(X_train, y_train)), len(X_train))
    +test_eq(len(dsets.add_unlabeled(X_train)), len(X_train))
    +
    +
    +
    X_tensor = torch.randn(100, 4, 50)
    +y_tensor = torch.randint(0, 2, size=(len(X_tensor),))
    +tensor_splits = (np.arange(80), np.arange(80, 100))
    +dsets = TSDatasets(X_tensor, y_tensor, tfms=[None, TSClassification()], splits=tensor_splits)
    +test_eq(type(dsets[0][0]), TSTensor)
    +
    +
    +

    source

    +
    +
    +

    TSDataLoader

    +
    +
     TSDataLoader (dataset, bs=64, shuffle=False, drop_last=False,
    +               num_workers=0, verbose=False, do_setup=True, vocab=None,
    +               sort=False, weights=None, partial_n=None, sampler=None,
    +               pin_memory=False, timeout=0, batch_size=None, indexed=None,
    +               n=None, device=None, persistent_workers=False,
    +               pin_memory_device='', wif=None, before_iter=None,
    +               after_item=None, before_batch=None, after_batch=None,
    +               after_iter=None, create_batches=None, create_item=None,
    +               create_batch=None, retain=None, get_idxs=None, sample=None,
    +               shuffle_fn=None, do_batch=None)
    +
    +

    Transformed DataLoader

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    datasetMap- or iterable-style dataset from which to load the data
    bsint64Size of batch
    shuffleboolFalseWhether to shuffle data
    drop_lastboolFalse
    num_workersintNoneNumber of CPU cores to use in parallel (default: All available up to 16)
    verboseboolFalseWhether to print verbose logs
    do_setupboolTrueWhether to run setup() for batch transform(s)
    vocabNoneTypeNone
    sortboolFalse
    weightsNoneTypeNone
    partial_nNoneTypeNone
    samplerNoneTypeNone
    pin_memoryboolFalse
    timeoutint0
    batch_sizeNoneTypeNone
    indexedNoneTypeNone
    nNoneTypeNone
    deviceNoneTypeNone
    persistent_workersboolFalse
    pin_memory_devicestr
    wifNoneTypeNone
    before_iterNoneTypeNone
    after_itemNoneTypeNone
    before_batchNoneTypeNone
    after_batchNoneTypeNone
    after_iterNoneTypeNone
    create_batchesNoneTypeNone
    create_itemNoneTypeNone
    create_batchNoneTypeNone
    retainNoneTypeNone
    get_idxsNoneTypeNone
    sampleNoneTypeNone
    shuffle_fnNoneTypeNone
    do_batchNoneTypeNone
    +
    +

    source

    +
    +
    +

    NumpyDataLoader

    +
    +
     NumpyDataLoader (dataset, bs=64, shuffle=False, drop_last=False,
    +                  num_workers=0, verbose=False, do_setup=True, vocab=None,
    +                  sort=False, weights=None, partial_n=None, sampler=None,
    +                  pin_memory=False, timeout=0, batch_size=None,
    +                  indexed=None, n=None, device=None,
    +                  persistent_workers=False, pin_memory_device='',
    +                  wif=None, before_iter=None, after_item=None,
    +                  before_batch=None, after_batch=None, after_iter=None,
    +                  create_batches=None, create_item=None,
    +                  create_batch=None, retain=None, get_idxs=None,
    +                  sample=None, shuffle_fn=None, do_batch=None)
    +
    +

    Transformed DataLoader

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    datasetMap- or iterable-style dataset from which to load the data
    bsint64Size of batch
    shuffleboolFalseWhether to shuffle data
    drop_lastboolFalse
    num_workersintNoneNumber of CPU cores to use in parallel (default: All available up to 16)
    verboseboolFalseWhether to print verbose logs
    do_setupboolTrueWhether to run setup() for batch transform(s)
    vocabNoneTypeNone
    sortboolFalse
    weightsNoneTypeNone
    partial_nNoneTypeNone
    samplerNoneTypeNone
    pin_memoryboolFalse
    timeoutint0
    batch_sizeNoneTypeNone
    indexedNoneTypeNone
    nNoneTypeNone
    deviceNoneTypeNone
    persistent_workersboolFalse
    pin_memory_devicestr
    wifNoneTypeNone
    before_iterNoneTypeNone
    after_itemNoneTypeNone
    before_batchNoneTypeNone
    after_batchNoneTypeNone
    after_iterNoneTypeNone
    create_batchesNoneTypeNone
    create_itemNoneTypeNone
    create_batchNoneTypeNone
    retainNoneTypeNone
    get_idxsNoneTypeNone
    sampleNoneTypeNone
    shuffle_fnNoneTypeNone
    do_batchNoneTypeNone
    +
    +

    source

    +
    +
    +

    TSDataLoaders

    +
    +
     TSDataLoaders (*loaders, path='.', device=None)
    +
    +

    Basic wrapper around several DataLoaders.

    +
    +

    source

    +
    +
    +

    NumpyDataLoaders

    +
    +
     NumpyDataLoaders (*loaders, path='.', device=None)
    +
    +

    Basic wrapper around several DataLoaders.

    +
    +

    source

    +
    +
    +

    StratifiedSampler

    +
    +
     StratifiedSampler (y, bs:int=64, shuffle:bool=False,
    +                    drop_last:bool=False)
    +
    +

    Sampler where batches preserve the percentage of samples for each class

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    yThe target variable for supervised learning problems. Stratification is done based on the y labels.
    bsint64Batch size
    shuffleboolFalseFlag to shuffle each class’s samples before splitting into batches.
    drop_lastboolFalseFlag to drop the last incomplete batch.
    +
    +
    a = np.concatenate([np.zeros(90), np.ones(10)])
    +sampler = StratifiedSampler(a, bs=32, shuffle=True, drop_last=True)
    +idxs = np.array(list(iter(sampler)))
    +print(idxs[:32])
    +print(a[idxs][:32])
    +test_eq(a[idxs][:32].mean(), .1)
    +
    +
    [[ 0  2  8 17 18 21 27 29 34 38 39 43 45 48 52 54 55 60 61 63 66 67 68 69
    +  71 73 78 80 81 84 90 92 95 99  1  6 11 12 15 16 20 23 24 28 30 33 36 37
    +  40 41 42 44 49 59 62 64 65 74 75 76 77 79 86 87 91 93 96  3  4  5  7  9
    +  10 13 14 19 22 25 26 31 32 35 46 47 50 51 53 56 57 58 70 72 82 83 85 88
    +  89 94 97 98]]
    +[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
    +  0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
    +  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 0. 0. 0. 0. 0.
    +  0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
    +  0. 1. 1. 1.]]
    +
    +
    +
    +

    source

    +
    +
    +

    get_c

    +
    +
     get_c (dls)
    +
    +
    +

    source

    +
    +
    +

    get_best_dls_params

    +
    +
     get_best_dls_params (dls, n_iters=10, num_workers=[0, 1, 2, 4, 8],
    +                      pin_memory=[True, False], prefetch_factor=[2, 4, 8],
    +                      return_best=True, verbose=True)
    +
    +
    +

    source

    +
    +
    +

    get_best_dl_params

    +
    +
     get_best_dl_params (dl, n_iters=10, num_workers=[0, 1, 2, 4, 8],
    +                     pin_memory=[True, False], prefetch_factor=[2, 4, 8],
    +                     return_best=True, verbose=True)
    +
    +
    +

    source

    +
    +
    +

    get_ts_dls

    +
    +
     get_ts_dls (X, y=None, splits=None, sel_vars=None, sel_steps=None,
    +             tfms=None, inplace=True, path='.', bs=64, batch_tfms=None,
    +             num_workers=0, device=None, shuffle_train=True,
    +             drop_last=True, weights=None, partial_n=None, sampler=None,
    +             sort=False, **kwargs)
    +
    +
    +
    # Tests
    +a = np.arange(10)
    +
    +for s in [None, np.arange(10), np.arange(10).tolist(), L(np.arange(10).tolist()), (np.arange(10).tolist(), None), (np.arange(10).tolist(), L())]:
    +    test_eq(_check_splits(a, s), (L(np.arange(10).tolist()), L()))
    +
    +
    +

    source

    +
    +
    +

    get_subset_dl

    +
    +
     get_subset_dl (dl, idxs)
    +
    +
    +

    source

    +
    +
    +

    get_ts_dl

    +
    +
     get_ts_dl (X, y=None, split=None, sel_vars=None, sel_steps=None,
    +            tfms=None, inplace=True, path='.', bs=64, batch_tfms=None,
    +            num_workers=0, device=None, shuffle_train=True,
    +            drop_last=True, weights=None, partial_n=None, sampler=None,
    +            sort=False, **kwargs)
    +
    +
    +
    X, y, splits = get_UCR_data(dsid, on_disk=False, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=8)
    +dls = get_best_dls_params(dls, prefetch_factor=[2, 4, 8, 16])
    +
    +
    
    +Dataloader 0
    +
    +   num_workers:  0  pin_memory: True   prefetch_factor:  2  -  time:    1.400 ms/iter
    +   num_workers:  0  pin_memory: False  prefetch_factor:  2  -  time:    0.620 ms/iter
    +
    +   best dl params:
    +       best num_workers    : 0
    +       best pin_memory     : False
    +       best prefetch_factor: 2
    +       return_best         : True
    +
    +
    +
    +Dataloader 1
    +
    +   num_workers:  0  pin_memory: True   prefetch_factor:  2  -  time:    0.261 ms/iter
    +   num_workers:  0  pin_memory: False  prefetch_factor:  2  -  time:    0.306 ms/iter
    +
    +   best dl params:
    +       best num_workers    : 0
    +       best pin_memory     : True
    +       best prefetch_factor: 2
    +       return_best         : True
    +
    +
    +
    +
    +
    +
    y_int = np.random.randint(0, 4, size=len(X))
    +dls = get_ts_dls(X, y_int, splits=splits, bs=8)
    +test_eq(hasattr(dls, "vocab"), False)
    +
    +dls = get_ts_dls(X, y_int, splits=splits, bs=8, vocab=[0,1,2,3])
    +test_eq(dls.vocab, [0,1,2,3])
    +test_eq(dls.c, 4)
    +test_eq(dls.cat, True)
    +
    +
    +
    X, y, splits = get_UCR_data(dsid, on_disk=False, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=8)
    +b=first(dls.train)
    +dls.decode(b)
    +test_eq(X.shape[1], dls.vars)
    +test_eq(X.shape[-1], dls.len)
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=64, inplace=True)
    +
    +idxs = random_choice(len(dls.valid_ds), 10, False)
    +new_dl = get_subset_dl(dls.train, idxs)
    +
    +idxs = random_choice(len(dls.valid_ds), 10, False)
    +new_dl = get_subset_dl(dls.valid, idxs)
    +test_eq(new_dl.one_batch()[0].cpu().numpy(), X[splits[1][idxs]])
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +weights = np.random.rand(len(X))
    +dls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=64, inplace=True, weights=weights)
    +weights2 = weights[splits[0]] / weights[splits[0]].sum()
    +test_eq(dls.train.weights, weights2)
    +test_eq(dls.valid.weights, None)
    +
    +
    +
    partial_n = 12
    +X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +dls = get_ts_dls(X, y, splits=splits, tfms=[None, TSClassification()], bs=64, inplace=True, partial_n=partial_n)
    +test_eq(len(dls.train.one_batch()[0]), partial_n)
    +
    +partial_n = .1
    +X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSClassification()], bs=64, inplace=True, partial_n=partial_n)
    +test_eq(len(dls.train.one_batch()[0]), int(round(len(dls.train.dataset) * partial_n)))
    +
    +

    You’ll now be able to pass a sampler to a tsai dataloader.

    +

    You should use a sampler for the train set and a sampler for the validation set. You’ll need to pass an object with the same length as each dataset. For example, the splits like in the case below.

    +

    ⚠️ Remember to set shuffle=False when using a sampler since they a mutually exclusive. This means that when you use a sampler, you always need to set the shuffle in the dataloader to False. The sampler will control whether the indices are shuffled or not (you can set shuffle to True or False in the sampler).

    +

    drop_last is managed in the dataloder though.

    +
    +
    X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +train_sampler = torch.utils.data.sampler.RandomSampler(splits[0])
    +valid_sampler = torch.utils.data.sampler.SequentialSampler(splits[1])
    +dls = get_ts_dls(X, y, splits=splits, tfms=[None, TSClassification()], bs=8, inplace=True,
    +                 shuffle=False, drop_last=True, sampler=[train_sampler, valid_sampler])
    +print('train')
    +for _ in dls.train:
    +    print(dls.train.idxs)
    +print('valid')
    +for _ in dls.valid:
    +    print(dls.valid.idxs)
    +
    +
    train
    +[22, 25, 16, 3, 26, 28, 7, 18]
    +[5, 4, 12, 27, 29, 24, 9, 11]
    +[0, 2, 8, 17, 21, 20, 23, 10]
    +valid
    +[0, 1, 2, 3, 4, 5, 6, 7]
    +[8, 9, 10, 11, 12, 13, 14, 15]
    +[16, 17, 18, 19, 20, 21, 22, 23]
    +[24, 25, 26, 27, 28, 29]
    +
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +train_sampler = torch.utils.data.sampler.SequentialSampler(splits[0])
    +valid_sampler = torch.utils.data.sampler.SequentialSampler(splits[1])
    +dls = get_ts_dls(X, y, splits=splits, tfms=[None, TSClassification()], bs=64, inplace=True,
    +                 shuffle=False, sampler=[train_sampler, valid_sampler])
    +test_eq(dls.get_idxs(), np.arange(len(splits[0])))
    +test_eq(dls.train.get_idxs(), np.arange(len(splits[0])))
    +test_eq(dls.valid.get_idxs(), np.arange(len(splits[1])))
    +xb = dls.valid.one_batch()[0].cpu().numpy()
    +test_close(xb, X[dls.valid.split_idxs])
    +
    +X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +train_sampler = torch.utils.data.sampler.RandomSampler(splits[0])
    +valid_sampler = torch.utils.data.sampler.SequentialSampler(splits[0])
    +dls = get_ts_dls(X, y, splits=splits, tfms=[None, TSClassification()], bs=32, inplace=True,
    +                 shuffle=False, drop_last=True, sampler=[train_sampler, valid_sampler])
    +test_ne(dls.train.get_idxs(), np.arange(len(splits[0])))
    +test_eq(np.sort(dls.train.get_idxs()), np.arange(len(splits[0])))
    +test_eq(dls.valid.get_idxs(), np.arange(len(splits[1])))
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=64, inplace=False)
    +
    +idxs = random_choice(len(dls.valid_ds), 10, False)
    +new_dl = get_subset_dl(dls.train, idxs)
    +
    +idxs = random_choice(len(dls.valid_ds), 10, False)
    +new_dl = get_subset_dl(dls.valid, idxs)
    +test_eq(new_dl.one_batch()[0].cpu().numpy(), X[splits[1][idxs]])
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=8)
    +b = dls.one_batch()
    +input_idxs = dls.input_idxs
    +test_eq(b[0].cpu().numpy(), X[input_idxs])
    +b = dls.train.one_batch()
    +input_idxs = dls.train.input_idxs
    +test_eq(b[0].cpu().numpy(), X[input_idxs])
    +assert max(input_idxs) < len(splits[0])
    +b = dls.valid.one_batch()
    +input_idxs = dls.valid.input_idxs
    +test_eq(b[0].cpu().numpy(), X[input_idxs])
    +assert min(input_idxs) >= len(splits[0])
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSCategorize()], splits=splits, bs=8)
    +b=first(dls.train)
    +dls.decode(b)
    +test_eq(X.shape[1], dls.vars)
    +test_eq(X.shape[-1], dls.len)
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSCategorize()], splits=splits, bs=8, weights=np.random.randint(0, 3, len(y)))
    +b=first(dls.train)
    +dls.decode(b)
    +test_eq(X.shape[1], dls.vars)
    +test_eq(X.shape[-1], dls.len)
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +dsets = TSDatasets(X, y, tfms=[None, TSCategorize()], splits=splits)
    +ts_dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, device=default_device(), bs=4)
    +torch.save(ts_dls, 'export/ts_dls.pth')
    +del ts_dls
    +ts_dls = torch.load('export/ts_dls.pth')
    +for xb,yb in ts_dls.train:
    +    test_eq(tensor(X[ts_dls.train.idxs]), xb.cpu())
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSCategorize()], splits=splits, bs=4)
    +for xb,yb in dls.train:
    +    test_eq(xb.cpu().numpy(), X[dls.train.input_idxs])
    +for xb,yb in dls.valid:
    +    test_eq(xb.cpu().numpy(), X[dls.valid.input_idxs])
    +
    +
    +
    test_eq((ts_dls.train.shuffle, ts_dls.valid.shuffle, ts_dls.train.drop_last, ts_dls.valid.drop_last), (True, False, True, False))
    +
    +
    +
    dsid = 'OliveOil'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSCategorize()], splits=splits, bs=8, num_workers=0)
    +xb, yb = first(dls.train)
    +test_eq(tensor(X[dls.train.idxs]), xb.cpu())
    +
    +
    +
    test_eq((dls.train.shuffle, dls.valid.shuffle, dls.train.drop_last, dls.valid.drop_last), (True, False, True, False))
    +
    +
    +
    # multiclass
    +dsid = 'OliveOil'
    +X, y, splits = get_UCR_data(dsid, on_disk=True, split_data=False)
    +dls = get_ts_dls(X, y, tfms=[None, TSCategorize()], splits=splits, inplace=True)
    +dls.show_dist()
    +dls.train.show_dist()
    +xb,yb = first(dls.train)
    +test_eq((dls.cat, dls.c), (True, 4))
    +test_ne(dls.cws.cpu().numpy(), None)
    +dls.decoder((xb, ))
    +dls.decoder((xb[0], ))
    +dls.decoder((xb, yb))
    +dls.decoder((xb[0], yb[0]))
    +dls.decoder(yb)
    +dls.decoder(yb[0])
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    '1'
    +
    +
    +
    +
    new_dl = dls.new_dl(X)
    +first(new_dl)
    +
    +
    (TSTensor(samples:60, vars:1, len:570, device=cpu, dtype=torch.float32),)
    +
    +
    +
    +
    new_dl = dls.new_dl(X, y=y)
    +first(new_dl)
    +
    +
    (TSTensor(samples:60, vars:1, len:570, device=cpu, dtype=torch.float32),
    + TensorCategory([2, 3, 2, 2, 0, 1, 1, 3, 3, 1, 2, 0, 0, 3, 0, 1, 0, 3, 3, 3, 1,
    +                 3, 3, 3, 3, 3, 0, 3, 1, 1, 3, 3, 2, 3, 3, 3, 1, 1, 3, 2, 3, 0,
    +                 3, 0, 3, 1, 1, 2, 1, 1, 1, 3, 3, 1, 2, 1, 1, 3, 0, 0]))
    +
    +
    +
    +
    dls.train.dataset.split_idxs, dls.train.dataset.splits, dls.valid.split_idxs
    +
    +
    (array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
    +        17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], dtype=int8),
    + (#30) [0,1,2,3,4,5,6,7,8,9...],
    + array([30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
    +        47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], dtype=int8))
    +
    +
    +
    +
    # 2d input array and tfms == None return a NoTfmLists object
    +X, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)
    +X = X[:, 0]
    +tfms=[None, TSCategorize()]
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, bs=8)
    +test_eq(1, dls.vars)
    +test_eq(X.shape[-1], dls.len)
    +test_eq(type(dls.tls[0]).__name__, 'NoTfmLists')
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, bs=8, inplace=False)
    +test_eq(1, dls.vars)
    +test_eq(X.shape[-1], dls.len)
    +test_eq(type(dls.tls[0]).__name__, 'NoTfmLists')
    +
    +
    +
    # regression
    +dsid = 'OliveOil'
    +X, y, splits = get_UCR_data(dsid, on_disk=True, split_data=False)
    +dls = get_ts_dls(X, np.random.rand(60, ), tfms=[None, ToNumpyTensor], splits=splits)
    +dls.show_dist()
    +dls.train.show_dist()
    +xb,yb = first(dls.train)
    +dls.decoder((xb, ))
    +dls.decoder((xb[0], ))
    +dls.decoder((xb, yb))
    +dls.decoder((xb[0], yb[0]))
    +dls.decoder(yb)
    +dls.decoder(yb[0])
    +test_eq((dls.cat, dls.c), (False, 1))
    +test_eq(dls.cws, None)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    # regression, multilabel
    +dsid = 'OliveOil'
    +X, y, splits = get_UCR_data(dsid, on_disk=True, split_data=False)
    +dls = get_ts_dls(X, np.random.rand(60, 3) * 5, tfms=[None, ToNumpyTensor], splits=splits)
    +dls.show_dist()
    +dls.train.show_dist()
    +xb,yb = first(dls.train)
    +dls.decoder((xb, ))
    +dls.decoder((xb[0], ))
    +dls.decoder((xb, yb))
    +dls.decoder((xb[0], yb[0]))
    +dls.decoder(yb)
    +dls.decoder(yb[0])
    +test_eq((dls.cat, dls.c, dls.d),(False, 1, 3))
    +test_eq(dls.cws, None)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    # multiclass, multilabel
    +dsid = 'OliveOil'
    +X, y, splits = get_UCR_data(dsid, on_disk=True, split_data=False)
    +cm = {
    +    '1':'A',
    +    '2':['B', 'C'],
    +    '3':['B', 'D'] ,
    +    '4':'E',
    +    }
    +keys = cm.keys()
    +new_cm = {k:v for k,v in zip(keys, [listify(v) for v in cm.values()])}
    +y_multi = np.array([new_cm[yi] if yi in keys else listify(yi) for yi in y], dtype=object)
    +dls = get_ts_dls(X, y_multi, tfms=[None, TSMultiLabelClassification()], splits=splits)
    +dls.show_dist()
    +dls.train.show_dist()
    +xb,yb = first(dls.train)
    +dls.decoder((xb, ))
    +dls.decoder((xb[0], ))
    +dls.decoder((xb, yb))
    +dls.decoder((xb[0], yb[0]))
    +dls.decoder(yb)
    +dls.decoder(yb[0])
    +test_eq((dls.cat, dls.c), (True, 5))
    +test_ne(dls.cws.cpu().numpy(), None)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    dsid = 'OliveOil'
    +X, y, splits = get_UCR_data(dsid, on_disk=True, split_data=False)
    +cm = {
    +    '1':'A',
    +    '2':['B', 'C'],
    +    '3':['B', 'D'] ,
    +    '4':'E',
    +    }
    +keys = cm.keys()
    +new_cm = {k:v for k,v in zip(keys, [listify(v) for v in cm.values()])}
    +y_multi = np.array([new_cm[yi] if yi in keys else listify(yi) for yi in y], dtype=object)
    +dls = get_ts_dls(X, y_multi, tfms=[None, TSMultiLabelClassification()], splits=splits)
    +test_eq(dls.new(X[0]).one_batch().shape, (1, 570))
    +test_eq(dls.new(X[:15]).one_batch().shape, (15, 1, 570))
    +test_eq(dls.train.new(X[0]).one_batch().shape, (1, 570))
    +test_eq(dls.valid.new(X[:15]).one_batch().shape, (15, 1, 570))
    +
    +
    +
    bs = 25
    +dsets = TSDatasets(X, y, tfms=[None, TSCategorize()], splits=splits)
    +dls   = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[bs, bs*2], batch_tfms=add(1), num_workers=0)
    +xb,yb = dls.train.one_batch()
    +test_eq(xb.cpu().data, tensor(X_on_disk[splits[0]][dls.train.idxs]) + 1)
    +
    +
    +
    dsets = TSDatasets(X, y, tfms=[None, TSCategorize()], splits=splits)
    +dls   = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[bs, bs*2])
    +xb,yb = dls.train.one_batch()
    +test_eq(xb.shape, (min(bs, len(splits[0])), X.shape[1], X.shape[-1]))
    +it = iter(dls.valid)
    +for xb,yb in it:
    +    test_close(xb.cpu(), TSTensor(X[splits[1]][dls.valid.idxs]))
    +
    +
    +
    bs = 64
    +dsets = TSDatasets(X, y, tfms=[add(1), TSCategorize()], splits=RandomSplitter(valid_pct=.3)(y_array))
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[bs, bs*2])
    +xb,yb = dls.train.one_batch()
    +test_eq(xb.shape, (min(bs, len(dsets.train)), X_on_disk.shape[1], X_on_disk.shape[-1]))
    +xb,yb = dls.valid.one_batch()
    +test_eq(xb.shape, (min(bs*2, len(dsets.valid)), X_on_disk.shape[1], X_on_disk.shape[-1]))
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_array, tfms=[None, TSCategorize()], splits=splits)
    +dls   = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[32, 64])
    +for i in range(10):
    +    dl = dls.train if random.random() < .5 else dls.valid
    +    xb,yb = dl.one_batch()
    +    torch.equal(xb.cpu(), TSTensor(X_on_disk[dl.input_idxs]))
    +
    +dsets = TSDatasets(X_on_disk, y_array, tfms=[None, TSCategorize()])
    +dls   = TSDataLoaders.from_dsets(dsets, bs=32)
    +for i in range(10):
    +    xb,yb = dls.one_batch()
    +    torch.equal(xb.cpu(), TSTensor(X_on_disk[dl.input_idxs]))
    +
    +dsets = TSDatasets(X_on_disk, tfms=None)
    +dls   = TSDataLoaders.from_dsets(dsets, bs=32)
    +for i in range(10):
    +    xb = dls.one_batch()
    +    torch.equal(xb[0].cpu(), TSTensor(X_on_disk[dl.input_idxs]))
    +
    +
    +
    dsets = TSDatasets(X_on_disk, y_array, tfms=[None, TSCategorize()])
    +dls   = TSDataLoaders.from_dsets(dsets, bs=32)
    +test_eq(dls.split_idxs, L(np.arange(len(X_on_disk)).tolist()))
    +
    +
    +
    X, y, splits = get_UCR_data('NATOPS', return_split=False)
    +tfms  = [None, [TSCategorize()]]
    +dls = get_ts_dls(X, y, tfms=tfms, splits=splits, bs=[64, 128])
    +dls.show_batch()
    +dls.show_dist()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    # test passing a list with categories instead of a numpy array
    +dsid = 'NATOPS'
    +bs = 64
    +X2, y2, splits2 = get_UCR_data(dsid, return_split=False)
    +vocab = sorted(set(y))
    +tfms = [None, [TSCategorize(vocab=vocab)]]
    +dsets = TSDatasets(X2, y2, tfms=tfms, splits=splits2)
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[bs, bs*2])
    +dls.train.one_batch()
    +
    +
    (TSTensor(samples:64, vars:24, len:51, device=cpu, dtype=torch.float32),
    + TensorCategory([0, 3, 0, 5, 0, 0, 5, 3, 3, 1, 2, 0, 0, 2, 5, 2, 2, 4, 5, 3, 2,
    +                 4, 2, 1, 1, 0, 1, 2, 0, 4, 4, 4, 4, 2, 0, 0, 3, 3, 0, 5, 4, 3,
    +                 2, 5, 5, 2, 2, 4, 3, 0, 2, 4, 4, 5, 5, 0, 5, 3, 2, 1, 0, 3, 4,
    +                 2]))
    +
    +
    +
    +
    # MultiCategory
    +bs = 64
    +n_epochs = 100
    +tfms = [None, [MultiCategorize()]]
    +dsets = TSDatasets(X2, y2, tfms=tfms, splits=splits2)
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=bs)
    +dls.train.one_batch()
    +
    +
    (TSTensor(samples:64, vars:24, len:51, device=cpu, dtype=torch.float32),
    + TensorMultiCategory([[7, 0, 1],
    +                      [4, 0, 1],
    +                      [7, 0, 1],
    +                      [5, 0, 1],
    +                      [2, 0, 1],
    +                      [2, 0, 1],
    +                      [2, 0, 1],
    +                      [7, 0, 1],
    +                      [5, 0, 1],
    +                      [3, 0, 1],
    +                      [6, 0, 1],
    +                      [7, 0, 1],
    +                      [3, 0, 1],
    +                      [6, 0, 1],
    +                      [7, 0, 1],
    +                      [7, 0, 1],
    +                      [6, 0, 1],
    +                      [7, 0, 1],
    +                      [5, 0, 1],
    +                      [3, 0, 1],
    +                      [3, 0, 1],
    +                      [7, 0, 1],
    +                      [7, 0, 1],
    +                      [2, 0, 1],
    +                      [4, 0, 1],
    +                      [4, 0, 1],
    +                      [2, 0, 1],
    +                      [4, 0, 1],
    +                      [6, 0, 1],
    +                      [2, 0, 1],
    +                      [2, 0, 1],
    +                      [5, 0, 1],
    +                      [2, 0, 1],
    +                      [5, 0, 1],
    +                      [4, 0, 1],
    +                      [7, 0, 1],
    +                      [2, 0, 1],
    +                      [3, 0, 1],
    +                      [4, 0, 1],
    +                      [6, 0, 1],
    +                      [2, 0, 1],
    +                      [7, 0, 1],
    +                      [2, 0, 1],
    +                      [3, 0, 1],
    +                      [4, 0, 1],
    +                      [5, 0, 1],
    +                      [5, 0, 1],
    +                      [2, 0, 1],
    +                      [5, 0, 1],
    +                      [2, 0, 1],
    +                      [3, 0, 1],
    +                      [5, 0, 1],
    +                      [6, 0, 1],
    +                      [7, 0, 1],
    +                      [5, 0, 1],
    +                      [2, 0, 1],
    +                      [7, 0, 1],
    +                      [4, 0, 1],
    +                      [5, 0, 1],
    +                      [6, 0, 1],
    +                      [7, 0, 1],
    +                      [4, 0, 1],
    +                      [7, 0, 1],
    +                      [3, 0, 1]]))
    +
    +
    +

    The combination of splits, sel_vars and sel_steps is very powerful, as it allows you to perform advanced indexing of the array-like X.

    +
    +
    from tsai.data.validation import TSSplitter
    +
    +
    +
    X = np.arange(16*5*50).reshape(16,5,50)
    +y = alphabet[np.random.randint(0,3, 16)]
    +splits = TSSplitter(show_plot=False)(y)
    +tfms = [None, TSCategorize()]
    +batch_tfms = None
    +dls = get_ts_dls(X, y, splits=splits, sel_vars=[0, 1, 3], sel_steps=slice(-10, None), tfms=tfms, batch_tfms=batch_tfms)
    +xb,yb=dls.train.one_batch()
    +test_close(X[dls.input_idxs][:, [0, 1, 3]][...,slice(-10, None)], xb.cpu().numpy())
    +new_dl = dls.train.new_dl(X[:5], y[:5])
    +print(new_dl.one_batch())
    +new_empty_dl = dls.new_empty() # when exported
    +dl = new_empty_dl.new_dl(X[:10], y[:10], bs=64) # after export
    +dl.one_batch()
    +
    +
    (TSTensor(samples:5, vars:3, len:10, device=cpu, dtype=torch.int64), TensorCategory([2, 2, 2, 2, 2]))
    +
    +
    +
    (TSTensor(samples:10, vars:3, len:10, device=cpu, dtype=torch.int64),
    + TensorCategory([2, 2, 2, 0, 2, 2, 0, 2, 1, 1]))
    +
    +
    +
    +

    source

    +
    +
    +

    get_dl_percent_per_epoch

    +
    +
     get_dl_percent_per_epoch (dl, model, n_batches=None)
    +
    +
    +

    source

    +
    +
    +

    get_time_per_batch

    +
    +
     get_time_per_batch (dl, model=None, n_batches=None)
    +
    +
    +
    X, y, splits = get_UCR_data('NATOPS', split_data=False)
    +tfms  = [None, [TSCategorize()]]
    +dls = get_ts_dls(X, y, tfms=tfms, splits=splits)
    +train_dl = dls.train
    +xb, _ = train_dl.one_batch()
    +model = nn.Linear(xb.shape[-1], 2).to(xb.device)
    +t = get_dl_percent_per_epoch(train_dl, model, n_batches=10)
    +print(t)
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    93.70%
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.external.html b/data.external.html new file mode 100644 index 000000000..e72aa3b6b --- /dev/null +++ b/data.external.html @@ -0,0 +1,2178 @@ + + + + + + + + + +tsai - External data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    External data

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Helper functions used to download and extract common time series datasets.

    +
    +
    +

    source

    +
    +

    decompress_from_url

    +
    +
     decompress_from_url (url, target_dir=None, verbose=False)
    +
    +
    +

    source

    +
    +
    +

    download_data

    +
    +
     download_data (url, fname=None, c_key='archive', force_download=False,
    +                timeout=4, verbose=False)
    +
    +

    Download url to fname.

    +
    +

    source

    +
    +
    +

    get_UCR_univariate_list

    +
    +
     get_UCR_univariate_list ()
    +
    +
    +

    source

    +
    +
    +

    get_UCR_multivariate_list

    +
    +
     get_UCR_multivariate_list ()
    +
    +
    +

    source

    +
    +
    +

    get_UCR_data

    +
    +
     get_UCR_data (dsid, path='.', parent_dir='data/UCR', on_disk=True,
    +               mode='c', Xdtype='float32', ydtype=None, return_split=True,
    +               split_data=True, force_download=False, verbose=False)
    +
    +
    +
    from fastai.data.transforms import get_files
    +
    +
    +
    PATH = Path('.')
    +dsids = ['ECGFiveDays', 'AtrialFibrillation'] # univariate and multivariate
    +for dsid in dsids:
    +    print(dsid)
    +    tgt_dir = PATH/f'data/UCR/{dsid}'
    +    if os.path.isdir(tgt_dir): shutil.rmtree(tgt_dir)
    +    test_eq(len(get_files(tgt_dir)), 0) # no file left
    +    X_train, y_train, X_valid, y_valid = get_UCR_data(dsid)
    +    test_eq(len(get_files(tgt_dir, '.npy')), 6)
    +    test_eq(len(get_files(tgt_dir, '.npy')), len(get_files(tgt_dir))) # test no left file/ dir
    +    del X_train, y_train, X_valid, y_valid
    +    X_train, y_train, X_valid, y_valid = get_UCR_data(dsid)
    +    test_eq(X_train.ndim, 3)
    +    test_eq(y_train.ndim, 1)
    +    test_eq(X_valid.ndim, 3)
    +    test_eq(y_valid.ndim, 1)
    +    test_eq(len(get_files(tgt_dir, '.npy')), 6)
    +    test_eq(len(get_files(tgt_dir, '.npy')), len(get_files(tgt_dir))) # test no left file/ dir
    +    test_eq(X_train.ndim, 3)
    +    test_eq(y_train.ndim, 1)
    +    test_eq(X_valid.ndim, 3)
    +    test_eq(y_valid.ndim, 1)
    +    test_eq(X_train.dtype, np.float32)
    +    test_eq(X_train.__class__.__name__, 'memmap')
    +    del X_train, y_train, X_valid, y_valid
    +    X_train, y_train, X_valid, y_valid = get_UCR_data(dsid, on_disk=False)
    +    test_eq(X_train.__class__.__name__, 'ndarray')
    +    del X_train, y_train, X_valid, y_valid
    +
    +
    ECGFiveDays
    +AtrialFibrillation
    +
    +
    +
    +
    X_train, y_train, X_valid, y_valid = get_UCR_data('natops')
    +
    +
    +
    dsid = 'natops' 
    +X_train, y_train, X_valid, y_valid = get_UCR_data(dsid, verbose=True)
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +test_eq(X[splits[0]], X_train)
    +test_eq(y[splits[1]], y_valid)
    +test_eq(X[splits[0]], X_train)
    +test_eq(y[splits[1]], y_valid)
    +test_type(X, X_train)
    +test_type(y, y_train)
    +
    +
    Dataset: NATOPS
    +X_train: (180, 24, 51)
    +y_train: (180,)
    +X_valid: (180, 24, 51)
    +y_valid: (180,) 
    +
    +
    +
    +
    +

    source

    +
    +
    +

    check_data

    +
    +
     check_data (X, y=None, splits=None, show_plot=True)
    +
    +
    +
    dsid = 'ECGFiveDays'
    +X, y, splits = get_UCR_data(dsid, split_data=False, on_disk=False, force_download=False)
    +check_data(X, y, splits)
    +check_data(X[:, 0], y, splits)
    +y = y.astype(np.float32)
    +check_data(X, y, splits)
    +y[:10] = np.nan
    +check_data(X[:, 0], y, splits)
    +X, y, splits = get_UCR_data(dsid, split_data=False, on_disk=False, force_download=False)
    +splits = get_splits(y, 3)
    +check_data(X, y, splits)
    +check_data(X[:, 0], y, splits)
    +y[:5]= np.nan
    +check_data(X[:, 0], y, splits)
    +X, y, splits = get_UCR_data(dsid, split_data=False, on_disk=False, force_download=False)
    +
    +
    X      - shape: [884 samples x 1 features x 136 timesteps]  type: ndarray  dtype:float32  isnan: 0
    +y      - shape: (884,)  type: ndarray  dtype:<U1  n_classes: 2 (442 samples per class) ['1', '2']  isnan: False
    +splits - n_splits: 2 shape: [23, 861]  overlap: False
    +X      - shape: (884, 136)  type: ndarray  dtype:float32  isnan: 0
    +y      - shape: (884,)  type: ndarray  dtype:<U1  n_classes: 2 (442 samples per class) ['1', '2']  isnan: False
    +splits - n_splits: 2 shape: [23, 861]  overlap: False
    +X      - shape: [884 samples x 1 features x 136 timesteps]  type: ndarray  dtype:float32  isnan: 0
    +y      - shape: (884,)  type: ndarray  dtype:float32  isnan: 0
    +splits - n_splits: 2 shape: [23, 861]  overlap: False
    +X      - shape: (884, 136)  type: ndarray  dtype:float32  isnan: 0
    +y      - shape: (884,)  type: ndarray  dtype:float32  isnan: 10
    +splits - n_splits: 2 shape: [23, 861]  overlap: False
    +X      - shape: [884 samples x 1 features x 136 timesteps]  type: ndarray  dtype:float32  isnan: 0
    +y      - shape: (884,)  type: ndarray  dtype:<U1  n_classes: 2 (442 samples per class) ['1', '2']  isnan: False
    +splits - n_splits: 3 shape: [[589, 295], [589, 295], [590, 294]]  overlap: [False, False, False]
    +X      - shape: (884, 136)  type: ndarray  dtype:float32  isnan: 0
    +y      - shape: (884,)  type: ndarray  dtype:<U1  n_classes: 2 (442 samples per class) ['1', '2']  isnan: False
    +splits - n_splits: 3 shape: [[589, 295], [589, 295], [590, 294]]  overlap: [False, False, False]
    +X      - shape: (884, 136)  type: ndarray  dtype:float32  isnan: 0
    +y      - shape: (884,)  type: ndarray  dtype:<U1  n_classes: 3 (294 samples per class) ['1', '2', 'n']  isnan: False
    +splits - n_splits: 3 shape: [[589, 295], [589, 295], [590, 294]]  overlap: [False, False, False]
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    /var/folders/42/4hhwknbd5kzcbq48tmy_gbp00000gn/T/ipykernel_70492/278801922.py:23: UserWarning: y contains nan values
    +  warnings.warn('y contains nan values')
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    get_Monash_regression_list

    +
    +
     get_Monash_regression_list ()
    +
    +
    +

    source

    +
    +
    +

    get_Monash_regression_data

    +
    +
     get_Monash_regression_data (dsid, path='./data/Monash', on_disk=True,
    +                             mode='c', Xdtype='float32', ydtype=None,
    +                             split_data=True, force_download=False,
    +                             verbose=False, timeout=4)
    +
    +
    +
    dsid = "Covid3Month"
    +X_train, y_train, X_valid, y_valid = get_Monash_regression_data(dsid, on_disk=False, split_data=True, force_download=False)
    +X, y, splits = get_Monash_regression_data(dsid, on_disk=True, split_data=False, force_download=False, verbose=True)
    +if X_train is not None: 
    +    test_eq(X_train.shape, (140, 1, 84))
    +if X is not None: 
    +    test_eq(X.shape, (201, 1, 84))
    +
    +
    Dataset: Covid3Month
    +X      : (201, 1, 84)
    +y      : (201,)
    +splits : (#140) [0,1,2,3,4,5,6,7,8,9...] (#61) [140,141,142,143,144,145,146,147,148,149...] 
    +
    +
    +
    +
    +

    source

    +
    +
    +

    get_forecasting_list

    +
    +
     get_forecasting_list ()
    +
    +
    +

    source

    +
    +
    +

    get_forecasting_time_series

    +
    +
     get_forecasting_time_series (dsid, path='./data/forecasting/',
    +                              force_download=False, verbose=True,
    +                              **kwargs)
    +
    +
    +
    ts = get_forecasting_time_series("sunspots", force_download=False)
    +test_eq(len(ts), 2820)
    +ts
    +
    +
    Dataset: Sunspots
    +downloading data...
    +...done. Path = data/forecasting/Sunspots.csv
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Sunspots
    Month
    1749-01-3158.0
    1749-02-2862.6
    1749-03-3170.0
    1749-04-3055.7
    1749-05-3185.0
    ......
    1983-08-3171.8
    1983-09-3050.3
    1983-10-3155.8
    1983-11-3033.3
    1983-12-3133.4
    + +

    2820 rows × 1 columns

    +
    +
    +
    +
    +
    ts = get_forecasting_time_series("weather", force_download=False)
    +if ts is not None: 
    +    test_eq(len(ts), 70091)
    +    display(ts)
    +
    +
    Dataset: Weather
    +downloading data...
    +...done. Path = data/forecasting/Weather.csv.zip
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    p (mbar)T (degC)Tpot (K)Tdew (degC)rh (%)VPmax (mbar)VPact (mbar)VPdef (mbar)sh (g/kg)H2OC (mmol/mol)rho (g/m**3)WxWymax Wxmax WyDay sinDay cosYear sinYear cos
    0996.50-8.05265.38-8.7894.403.333.140.191.963.151307.86-0.204862-0.046168-0.614587-0.138503-1.776611e-121.0000000.0093320.999956
    1996.62-8.88264.54-9.7793.203.122.900.211.812.911312.25-0.245971-0.044701-0.619848-0.1126452.588190e-010.9659260.0100490.999950
    2996.84-8.81264.59-9.6693.503.132.930.201.832.941312.18-0.1755270.039879-0.6143440.1395765.000000e-010.8660250.0107660.999942
    3996.99-9.05264.34-10.0292.603.072.850.231.782.851313.61-0.050000-0.086603-0.190000-0.3290907.071068e-010.7071070.0114830.999934
    4997.46-9.63263.72-10.6592.202.942.710.231.692.711317.19-0.3682020.156292-0.8100440.3438438.660254e-010.5000000.0121990.999926
    ............................................................
    700861002.18-0.98272.01-5.3672.005.694.091.592.544.081280.70-0.855154-0.160038-1.336792-0.250174-9.990482e-010.0436190.0061830.999981
    700871001.40-1.40271.66-6.8466.295.513.651.862.273.651281.87-0.716196-0.726267-1.348134-1.367090-9.537170e-010.3007060.0069000.999976
    700881001.19-2.75270.32-6.9072.904.993.641.352.263.631288.02-0.6615010.257908-1.4534380.566672-8.433914e-010.5373000.0076170.999971
    700891000.65-2.89270.22-7.1572.304.933.571.372.223.571288.03-0.280621-0.209169-0.545207-0.406385-6.755902e-010.7372770.0083340.999965
    700901000.11-3.93269.23-8.0972.604.563.311.252.063.311292.41-0.516998-0.215205-0.923210-0.384295-4.617486e-010.8870110.0090500.999959
    + +

    70091 rows × 19 columns

    +
    +
    +
    +
    +

    source

    +
    +
    +

    convert_tsf_to_dataframe

    +
    +
     convert_tsf_to_dataframe (full_file_path_and_name,
    +                           replace_missing_vals_with='NaN',
    +                           value_column_name='series_value')
    +
    +
    +

    source

    +
    +
    +

    get_Monash_forecasting_data

    +
    +
     get_Monash_forecasting_data (dsid, path='./data/forecasting/',
    +                              force_download=False,
    +                              remove_from_disk=False, add_timestamp=True,
    +                              verbose=True)
    +
    +
    +

    source

    +
    +
    +

    get_fcst_horizon

    +
    +
     get_fcst_horizon (frequency, dsid)
    +
    +
    +

    source

    +
    +
    +

    preprocess_Monash_df

    +
    +
     preprocess_Monash_df (df, frequency)
    +
    +
    +
    dsid = 'covid_deaths_dataset'
    +df = get_Monash_forecasting_data(dsid, force_download=False)
    +if df is not None: 
    +    test_eq(df.shape, (56392, 3))
    +
    +
    Dataset: covid_deaths_dataset
    +downloading data...
    +...data downloaded
    +decompressing data...
    +...data decompressed
    +converting data to dataframe...
    +...done
    +
    +freq                   : daily
    +forecast_horizon       : 30
    +contain_missing_values : False
    +contain_equal_length   : True
    +
    +exploding dataframe...
    +...done
    +
    +
    +data.shape: (56392, 3)
    +
    +
    +
    +

    source

    +
    +
    +

    download_all_long_term_forecasting_data

    +
    +
     download_all_long_term_forecasting_data
    +                                          (target_dir='./data/long_forecas
    +                                          ting/', force_download=False,
    +                                          remove_zip=False,
    +                                          c_key='archive', timeout=4,
    +                                          verbose=True)
    +
    +
    +

    source

    +
    +
    +

    unzip_file

    +
    +
     unzip_file (file, target_dir)
    +
    +
    +

    source

    +
    +
    +

    get_long_term_forecasting_data

    +
    +
     get_long_term_forecasting_data (dsid,
    +                                 target_dir='./data/long_forecasting/',
    +                                 task='M', fcst_horizon=None,
    +                                 fcst_history=None, preprocess=True,
    +                                 force_download=False, remove_zip=False,
    +                                 return_df=True, show_plot=True,
    +                                 dtype=<class 'numpy.float32'>,
    +                                 verbose=True, **kwargs)
    +
    +

    Downloads (and preprocess) a pandas dataframe with the requested long-term forecasting dataset

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dsidID of the dataset to be used for long-term forecasting.
    target_dirstr./data/long_forecasting/Directory where the long-term forecasting data will be saved.
    taskstrM‘M’ for multivariate, ‘S’ for univariate and ‘MS’ for multivariate input with univariate output
    fcst_horizonNoneTypeNone# historical steps used as input. If None, the default is applied.
    fcst_historyNoneTypeNone# steps forecasted into the future. If None, the minimum default is applied.
    preprocessboolTrueFlag that indicates whether if the data is preprocessed before saving.
    force_downloadboolFalseFlag that indicates if the data should be downloaded again even if directory exists.
    remove_zipboolFalseFlag that indicates if the zip file should be removed after extracting the data.
    return_dfboolTrueFlag that indicates whether a dataframe (True) or X and and y arrays (False) are returned.
    show_plotboolTrueplot the splits
    dtypetypefloat32
    verboseboolTrueFlag tto indicate the verbosity.
    kwargs
    +
    +
    dsid = "ILI"
    +try:
    +    df = get_long_term_forecasting_data(dsid, target_dir='./data/forecasting/', force_download=False)
    +    print(f"{dsid:15}: {str(df.shape):15}")
    +    del df; gc.collect()
    +    remove_dir('./data/forecasting/', False)
    +except Exception as e:
    +    print(f"{dsid:15}: {str(e):15}")
    +
    + + +
    +
    + +
    + + 100.01% [54001664/53995526 00:09<00:00] +
    + +
    +
    +
    /Users/nacho/opt/anaconda3/envs/py39t20/lib/python3.9/site-packages/fastai/tabular/core.py:23: UserWarning: The argument 'infer_datetime_format' is deprecated and will be removed in a future version. A strict version of it is now the default, see https://pandas.pydata.org/pdeps/0004-consistent-to-datetime-parsing.html. You can safely remove this argument.
    +  df[date_field] = pd.to_datetime(df[date_field], infer_datetime_format=True)
    +
    +
    +
    ILI            : (966, 8)       
    +
    +
    +
    +
    dsid = "ILI"
    +try:
    +    X, y, splits, stats = get_long_term_forecasting_data(dsid, target_dir='./data/forecasting/', force_download=False, return_df=False, show_plot=False)
    +    print(f"{dsid:15} -  X.shape: {str(X.shape):20}  y.shape: {str(y.shape):20}  splits: {str([len(s) for s in splits]):25}  \
    +stats: {str([s.shape for s in stats]):30}")
    +    del X, y, splits, stats
    +    gc.collect()
    +    remove_dir('./data/forecasting/', False)
    +except Exception as e:
    +    print(f"{dsid:15}: {str(e):15}")
    +
    + + +
    +
    + +
    + + 100.01% [54001664/53995526 00:09<00:00] +
    + +
    +
    +
    /Users/nacho/opt/anaconda3/envs/py39t20/lib/python3.9/site-packages/fastai/tabular/core.py:23: UserWarning: The argument 'infer_datetime_format' is deprecated and will be removed in a future version. A strict version of it is now the default, see https://pandas.pydata.org/pdeps/0004-consistent-to-datetime-parsing.html. You can safely remove this argument.
    +  df[date_field] = pd.to_datetime(df[date_field], infer_datetime_format=True)
    +
    +
    +
    ILI             -  X.shape: (839, 7, 104)         y.shape: (839, 7, 24)          splits: [549, 74, 170]             stats: [(1, 7, 1), (1, 7, 1)]        
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.features.html b/data.features.html new file mode 100644 index 000000000..4b1f8e4bf --- /dev/null +++ b/data.features.html @@ -0,0 +1,3994 @@ + + + + + + + + + +tsai - Featurizing Time Series + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Featurizing Time Series

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Functions used to transform time series into a dataframe that can be used to create tabular dataloaders.

    +
    +

    In this case we are using tsfresh that is one of the most widely known libraries used to create features from time series. You can get more details about this library here: https://tsfresh.readthedocs.io/en/latest/

    +
    +

    source

    +
    +

    get_ts_features

    +
    +
     get_ts_features (X:Union[numpy.ndarray,torch.Tensor],
    +                  y:Union[NoneType,numpy.ndarray,torch.Tensor]=None,
    +                  features:Union[str,dict]='min',
    +                  n_jobs:Optional[int]=None, **kwargs)
    +
    +

    Args: X: np.array or torch.Tesnor of shape [samples, dimensions, timesteps]. y: Not required for unlabeled data. Otherwise, you need to pass it. features: ‘min’, ‘efficient’, ‘all’, or a dictionary. Be aware that ‘efficient’ and ‘all’ may required substantial memory and time.

    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, return_split=False)
    +X.shape
    +
    +
    (360, 24, 51)
    +
    +
    +

    There are 3 levels of fatures you can extract: ‘min’, ‘efficient’ and ‘all’. I’d encourage you to start with min as feature creation may take a long time.

    +

    In addition to this, you can pass a dictionary to build the desired features (see tsfresh documentation in the link above).

    +
    +
    ts_features_df = get_ts_features(X, y)
    +ts_features_df.shape
    +
    +
    Feature Extraction: 100%|██████████| 40/40 [00:09<00:00,  4.00it/s]
    +
    +
    +
    (360, 241)
    +
    +
    +

    The ‘min’ set creates a dataframe with 8 features per channel + 1 per target (total 193) for each time series sample (360).

    +
    +
    cont_names = ts_features_df.columns[:-1]
    +y_names = 'target'
    +dls = get_tabular_dls(ts_features_df, splits=splits, cont_names=cont_names, y_names=y_names)
    +dls.show_batch()
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    0__sum_values0__median0__mean0__length0__standard_deviation0__variance0__root_mean_square0__maximum0__absolute_maximum0__minimum1__sum_values1__median1__mean1__length1__standard_deviation1__variance1__root_mean_square1__maximum1__absolute_maximum1__minimum2__sum_values2__median2__mean2__length2__standard_deviation2__variance2__root_mean_square2__maximum2__absolute_maximum2__minimum3__sum_values3__median3__mean3__length3__standard_deviation3__variance3__root_mean_square3__maximum3__absolute_maximum3__minimum4__sum_values4__median4__mean4__length4__standard_deviation4__variance4__root_mean_square4__maximum4__absolute_maximum4__minimum5__sum_values5__median5__mean5__length5__standard_deviation5__variance5__root_mean_square5__maximum5__absolute_maximum5__minimum6__sum_values6__median6__mean6__length6__standard_deviation6__variance6__root_mean_square6__maximum6__absolute_maximum6__minimum7__sum_values7__median7__mean7__length7__standard_deviation7__variance7__root_mean_square7__maximum7__absolute_maximum7__minimum8__sum_values8__median8__mean8__length8__standard_deviation8__variance8__root_mean_square8__maximum8__absolute_maximum8__minimum9__sum_values9__median9__mean9__length9__standard_deviation9__variance9__root_mean_square9__maximum9__absolute_maximum9__minimum10__sum_values10__median10__mean10__length10__standard_deviation10__variance10__root_mean_square10__maximum10__absolute_maximum10__minimum11__sum_values11__median11__mean11__length11__standard_deviation11__variance11__root_mean_square11__maximum11__absolute_maximum11__minimum12__sum_values12__median12__mean12__length12__standard_deviation12__variance12__root_mean_square12__maximum12__absolute_maximum12__minimum13__sum_values13__median13__mean13__length13__standard_deviation13__variance13__root_mean_square13__maximum13__absolute_maximum13__minimum14__sum_values14__median14__mean14__length14__standard_deviation14__variance14__root_mean_square14__maximum14__absolute_maximum14__minimum15__sum_values15__median15__mean15__length15__standard_deviation15__variance15__root_mean_square15__maximum15__absolute_maximum15__minimum16__sum_values16__median16__mean16__length16__standard_deviation16__variance16__root_mean_square16__maximum16__absolute_maximum16__minimum17__sum_values17__median17__mean17__length17__standard_deviation17__variance17__root_mean_square17__maximum17__absolute_maximum17__minimum18__sum_values18__median18__mean18__length18__standard_deviation18__variance18__root_mean_square18__maximum18__absolute_maximum18__minimum19__sum_values19__median19__mean19__length19__standard_deviation19__variance19__root_mean_square19__maximum19__absolute_maximum19__minimum20__sum_values20__median20__mean20__length20__standard_deviation20__variance20__root_mean_square20__maximum20__absolute_maximum20__minimum21__sum_values21__median21__mean21__length21__standard_deviation21__variance21__root_mean_square21__maximum21__absolute_maximum21__minimum22__sum_values22__median22__mean22__length22__standard_deviation22__variance22__root_mean_square22__maximum22__absolute_maximum22__minimum23__sum_values23__median23__mean23__length23__standard_deviation23__variance23__root_mean_square23__maximum23__absolute_maximum23__minimumtarget
    0-29.398621-0.578626-0.57644451.00.0195950.0003840.576777-0.5361140.606751-0.606751-88.761322-1.745473-1.74041851.00.0339610.0011531.740749-1.6591811.779713-1.779713-35.539612-0.696636-0.69685551.00.0058600.0000340.696880-0.6858440.710908-0.71090863.8897970.8372081.25274151.00.6768220.4580881.4238852.1696772.1696770.536361-54.103661-1.758527-1.06085651.00.9524670.9071931.4256960.6193661.832052-1.832052-25.470938-0.562629-0.49943051.00.1766020.0311880.529735-0.1666680.659942-0.659942-33.909939-0.666688-0.66490151.00.0131680.0001730.665031-0.6439990.682598-0.682598-39.194389-0.766594-0.76851751.00.0070460.0000500.768550-0.7502280.782717-0.782717-9.894929-0.191213-0.19401851.00.0088620.0000790.194220-0.1828250.210663-0.21066341.5731090.6586930.81515951.00.2279950.0519820.8464431.1441421.1441420.601647-26.870213-0.801317-0.52686751.00.4106430.1686280.6679940.1830810.862615-0.862615-4.248524-0.096245-0.08330451.00.0331760.0011010.089668-0.0211260.121141-0.121141-33.603584-0.660318-0.65889451.00.0168150.0002830.659108-0.6262670.684841-0.684841-70.926521-1.409798-1.39071651.00.0312780.0009781.391068-1.3372751.423652-1.423652-26.984289-0.529285-0.52910451.00.0059230.0000350.529137-0.5173060.548614-0.54861456.1333010.7899741.10065351.00.4832930.2335721.2020851.7579481.7579480.587645-45.478088-1.421026-0.89172751.00.7397720.5472621.1586370.3865041.509923-1.509923-17.145500-0.387209-0.33618651.00.1277240.0163130.359631-0.1080170.469502-0.469502-25.565697-0.502589-0.50128851.00.0166130.0002760.501563-0.4658900.535957-0.535957-77.823814-1.519193-1.52595751.00.0282650.0007991.526219-1.4686851.564035-1.564035-36.996349-0.727857-0.72541951.00.0078820.0000620.725461-0.7054290.735931-0.73593158.4538310.7797821.14615451.00.6828390.4662691.3341432.0935262.0935260.433132-52.249134-1.582441-1.02449351.00.8159970.6658521.3097470.4191121.718448-1.718448-22.941730-0.449813-0.44983851.00.1795410.0322350.484344-0.1490440.718254-0.7182542.0
    1-22.630985-0.572027-0.44374551.00.5489650.3013630.7058840.8443841.284441-1.284441-43.583847-1.497262-0.85458551.01.0194061.0391881.3302271.0967101.692231-1.692231-31.147585-0.398927-0.61073751.00.3608470.1302100.709373-0.2564701.562690-1.56269035.9021190.4790880.70396351.00.3652700.1334220.7930871.5592411.5592410.320613-26.475592-1.411000-0.51912951.01.2507641.5644101.3542181.2467341.762012-1.762012-34.175106-0.647045-0.67010051.00.2739880.0750690.723950-0.1899101.339854-1.339854-25.383873-0.599582-0.49772351.00.3043140.0926070.5833830.1984170.860741-0.860741-23.190578-0.632231-0.45471751.00.2677740.0717030.5277030.0868100.735903-0.735903-9.2722450.044390-0.18180951.00.3103340.0963070.3596680.1038800.687320-0.68732033.8004530.6390430.66275451.00.1558070.0242760.6808220.9713930.9713930.338048-20.350363-0.685427-0.39902751.00.4015110.1612110.5660680.3888830.798647-0.798647-22.385489-0.310659-0.43893151.00.2028670.0411550.483545-0.2235070.780465-0.780465-23.431786-0.607775-0.45944751.00.5024950.2525010.6808760.5575471.097538-1.097538-35.239632-1.173477-0.69097351.00.7905430.6249581.0499530.8501091.334061-1.334061-23.722792-0.263811-0.46515351.00.3046230.0927950.556024-0.0964691.355410-1.35541036.5327070.5768220.71632851.00.2852040.0813410.7710161.3478091.3478090.321302-23.286812-1.098079-0.45660451.00.9349370.8741061.0404780.9730061.405902-1.405902-31.214712-0.552194-0.61205351.00.1466690.0215120.629381-0.4453011.042179-1.042179-23.984716-0.675121-0.47028951.00.5541800.3071160.7268340.8075351.182987-1.182987-39.006611-1.346193-0.76483551.00.8843660.7821031.1692201.0037161.507433-1.507433-28.776979-0.436710-0.56425551.00.3286550.1080140.652991-0.2684831.373182-1.37318233.1813160.4822280.65061451.00.3660020.1339570.7464961.5547171.5547170.254808-25.558233-1.347874-0.50114251.01.1102951.2327551.2181531.1499431.741076-1.741076-33.443592-0.659850-0.65575751.00.2468300.0609250.700673-0.2506321.340311-1.3403116.0
    2-35.085182-0.687561-0.68794551.00.0308690.0009530.688637-0.6242830.739868-0.739868-106.435272-2.126637-2.08696651.00.0892330.0079632.088873-1.9595782.215342-2.215342-43.562584-0.854689-0.85416851.00.0322740.0010420.854778-0.8010720.912399-0.91239973.8864671.2131131.44875451.00.6942680.4820081.6065172.3429022.3429020.642018-67.402786-2.043274-1.32162351.01.0215201.0435021.6703860.2176472.288412-2.288412-40.294270-0.799205-0.79008451.00.0485030.0023530.791571-0.6880590.888159-0.888159-34.629044-0.681434-0.67900151.00.0173850.0003020.679223-0.6492230.703762-0.703762-40.258858-0.804071-0.78938951.00.0331630.0011000.790086-0.7413030.842110-0.842110-12.998519-0.267240-0.25487351.00.0177190.0003140.255488-0.2245320.273925-0.27392547.9128840.8056940.93946851.00.2291890.0525280.9670201.2336791.2336790.697387-28.587210-0.880814-0.56053451.00.4033280.1626740.6905590.0383310.921428-0.921428-10.081242-0.202227-0.19767151.00.0302370.0009140.199971-0.1563390.284775-0.284775-33.949532-0.670309-0.66567751.00.0229190.0005250.666072-0.6293900.697200-0.697200-85.588051-1.724138-1.67819751.00.0807950.0065281.680141-1.5639661.791635-1.791635-36.548447-0.725060-0.71663651.00.0307280.0009440.717295-0.6713300.760870-0.76087065.1815261.1133611.27806951.00.4944490.2444791.3703801.9349851.9349850.748902-54.790508-1.635758-1.07432451.00.8179570.6690531.3502680.1391691.839433-1.839433-28.428947-0.573270-0.55743051.00.0538550.0029000.560026-0.4394130.630352-0.630352-26.714603-0.519391-0.52381651.00.0322240.0010380.524806-0.4895400.659033-0.659033-93.493767-1.865099-1.83321151.00.0924320.0085441.835540-1.7008412.010093-2.010093-43.577209-0.860299-0.85445551.00.0495610.0024560.855891-0.7960421.014816-1.01481665.8934861.0514411.29202951.00.6859990.4705951.4628512.1785142.1785140.574974-64.151787-1.856631-1.25787851.00.8040170.6464441.492884-0.0371612.008020-2.008020-39.252415-0.786807-0.76965551.00.0546000.0029810.771589-0.5821440.898071-0.8980713.0
    39.4183920.1243060.18467451.00.6835250.4672060.7080331.0986201.098620-0.619085-65.183624-1.598239-1.27811051.00.9314680.8676321.5815180.1941342.234432-2.234432-41.886803-0.976904-0.82131051.00.2522510.0636310.859174-0.3963031.147354-1.14735445.1669580.8011480.88562751.00.2788270.0777440.9284821.6355861.6355860.577137-35.295097-1.093421-0.69206151.01.5673982.4567361.7133841.3253272.416220-2.416220-19.785007-0.294643-0.38794151.00.2825000.0798060.479901-0.0080220.944945-0.944945-28.304108-0.693464-0.55498251.00.2026520.0410680.590824-0.2424340.741845-0.741845-36.350716-0.670180-0.71275951.00.1443700.0208430.727233-0.5231740.890112-0.890112-28.392370-0.522761-0.55671351.00.1077390.0116080.567042-0.4353340.710886-0.71088638.7833210.6584750.76045751.00.1650450.0272400.7781611.0252541.0252540.573761-29.159790-0.807073-0.57176151.00.4510580.2034530.7282600.0582121.089511-1.089511-0.3574310.210966-0.00700851.00.3591320.1289760.3592000.3581090.519043-0.519043-6.840534-0.255334-0.13412851.00.5046820.2547040.5222010.5825580.693457-0.693457-55.873280-1.168818-1.09555451.00.5631110.3170941.231801-0.2199401.721503-1.721503-37.602516-0.815972-0.73730451.00.1760430.0309910.758029-0.3607760.927193-0.92719343.4455990.8486230.85187551.00.2180350.0475390.8793351.3450851.3450850.596721-33.225483-1.050173-0.65148051.01.1464531.3143531.3186280.8908061.963266-1.963266-12.263644-0.319137-0.24046451.00.2767710.0766020.3666400.2442090.701782-0.701782-1.089832-0.055650-0.02136951.00.5492410.3016650.5496560.6564050.802634-0.802634-58.871620-1.318070-1.15434651.00.7937570.6300501.4009150.0361032.034981-2.034981-38.605354-0.873019-0.75696851.00.3099860.0960910.817980-0.1838161.145963-1.14596344.8495180.8650920.87940251.00.2788590.0777620.9225571.5117871.5117870.490558-35.374996-1.168080-0.69362751.01.3923851.9387351.5555881.1222892.264597-2.264597-23.718605-0.533045-0.46507151.00.2830100.0800950.5444130.0702850.913923-0.9139236.0
    40.670717-0.5516740.01315151.00.7963360.6341510.7964441.3034281.303428-0.740258-82.721443-2.117861-1.62198951.00.7458000.5562181.785236-0.3256932.317141-2.317141-42.753490-0.679642-0.83830451.00.3475710.1208050.907501-0.4505401.606419-1.60641943.9414560.6756030.86159751.00.5713900.3264871.0338452.1053192.1053190.364709-54.047619-2.158519-1.05975751.01.4513262.1063481.7970631.1288322.503777-2.503777-8.701278-0.097304-0.17061351.00.2547060.0648750.3065680.1436760.995945-0.995945-25.513714-0.696055-0.50026951.00.2743840.0752870.5705750.0899580.745964-0.745964-37.482643-0.790602-0.73495451.00.1168090.0136440.744178-0.5414650.878685-0.878685-33.195599-0.672431-0.65089451.00.1995840.0398340.680806-0.4290700.989809-0.98980934.5432700.5669180.67731951.00.2932520.0859970.7380771.2670091.2670090.387009-30.752882-0.775993-0.60299851.00.3153800.0994640.6804930.0637361.075059-1.0750595.4055600.2869170.10599151.00.2832770.0802460.3024560.3843800.392310-0.392310-10.194630-0.575963-0.19989551.00.6082740.3699970.6402770.9463590.946359-0.750195-67.181175-1.644588-1.31727851.00.4808660.2312321.402303-0.5242181.829902-1.829902-42.235485-0.693468-0.82814751.00.2667560.0711590.870049-0.6075961.443514-1.44351442.2861370.8499370.82914051.00.4458940.1988220.9414321.7981621.7981620.406039-45.729931-1.668248-0.89666551.01.0436431.0891901.3759360.7526022.014132-2.014132-2.5458630.035224-0.04991951.00.1760970.0310100.1830360.1694950.488377-0.488377-7.721382-0.629895-0.15140051.00.7318680.5356310.7473641.0815531.081553-0.841546-73.237610-1.826482-1.43603251.00.6686360.4470741.584065-0.2356372.140610-2.140610-44.032135-0.673831-0.86337551.00.3866340.1494860.945993-0.4194741.715174-1.71517441.5101660.7338730.81392551.00.5067570.2568030.9587891.9937381.9937380.362309-50.167858-1.763661-0.98368451.01.2475091.5562791.5886830.9559172.361580-2.361580-8.757638-0.146574-0.17171851.00.2367430.0560470.2924630.2021880.984318-0.9843186.0
    5-50.560036-0.925159-0.99137351.00.9705200.9419101.3873470.8007612.398621-2.398621-30.233727-0.178814-0.59281851.01.1032511.2171621.2524360.9729762.095890-2.095890-42.399975-0.641855-0.83137251.00.3693490.1364190.909724-0.2935711.665465-1.66546539.1976850.7353260.76858251.00.9728650.9464671.2398332.2237902.223790-0.900167-25.8614390.006240-0.50708751.01.1037171.2181901.2146311.0363802.057254-2.057254-54.733055-0.955823-1.07319751.00.3417520.1167951.126298-0.4071281.797132-1.797132-43.710899-0.780402-0.85707651.00.2443020.0596830.891215-0.5680181.237588-1.237588-16.875654-0.136531-0.33089551.00.3809010.1450860.5045570.3019340.825958-0.825958-12.057025-0.090500-0.23641251.00.2468390.0609290.3417900.0028090.739954-0.73995443.4130630.7794470.85123751.00.2246090.0504490.8803711.2447181.2447180.445537-16.459957-0.233873-0.32274451.00.3780000.1428840.4970390.2675690.802695-0.802695-29.580076-0.443360-0.58000251.00.2830710.0801290.645392-0.3409701.223840-1.223840-46.450630-0.899175-0.91079751.00.7114640.5061811.1557390.5681561.918004-1.918004-25.124174-0.161948-0.49263151.00.8041410.6466430.9430420.7270191.617498-1.617498-31.201376-0.434257-0.61179251.00.3131010.0980320.687256-0.1726931.229459-1.22945941.9379920.7931400.82231451.00.6412210.4111641.0427671.8125131.812513-0.339336-21.495180-0.052168-0.42147451.00.7999140.6398620.9041580.6209371.550453-1.550453-42.943439-0.776023-0.84202851.00.2251230.0506800.871603-0.2856061.344810-1.344810-52.034657-0.921795-1.02028751.00.8986300.8075371.3596040.6551262.344413-2.344413-27.837105-0.061648-0.54582651.00.9690400.9390391.1121890.9318541.992733-1.992733-36.875374-0.585629-0.72304751.00.3496260.1222380.803141-0.2154931.429438-1.42943840.2477420.7980900.78917151.00.7860850.6179301.1138771.9845811.984581-0.677269-23.811928-0.119661-0.46690151.00.9124580.8325791.0249760.8002611.841989-1.841989-52.909077-1.040256-1.03743351.00.3354960.1125571.090332-0.3342811.676773-1.6767734.0
    6-39.833595-0.581072-0.78105151.00.9090440.8263601.1984990.5685402.283604-2.283604-38.821877-0.786507-0.76121351.00.9619090.9252691.2266680.5116681.878216-1.878216-38.064991-0.843750-0.74637251.00.2894460.0837790.800532-0.1370361.416119-1.41611941.8325540.6154050.82024651.00.8521350.7261351.1827672.2786942.278694-0.571341-46.324547-0.797607-0.90832451.00.9667970.9346961.3265560.5424402.116034-2.116034-20.751741-0.570023-0.40689751.00.5814640.3381000.7096940.7680661.202626-1.202626-37.311344-0.603243-0.73159551.00.2366900.0560220.768930-0.4288481.151210-1.151210-24.191328-0.593942-0.47434051.00.3219640.1036610.5732880.1182050.778171-0.778171-10.869180-0.166239-0.21312151.00.1185230.0140480.243861-0.0551370.518928-0.51892837.0555420.6307200.72657951.00.1874770.0351470.7503771.0419331.0419330.511867-27.166332-0.715093-0.53267351.00.2975830.0885560.6101610.0322860.820952-0.820952-5.845339-0.214925-0.11461451.00.2195780.0482150.2476910.3027560.333025-0.333025-38.241142-0.594127-0.74982651.00.6278570.3942040.9779790.2569951.747855-1.747855-32.509758-0.579769-0.63744651.00.6907230.4770980.9399130.3385811.427238-1.427238-26.793001-0.502856-0.52535351.00.1405100.0197430.543819-0.3012020.999421-0.99942138.7000470.6075110.75882451.00.5840790.3411480.9575821.6452911.645291-0.209163-37.871262-0.758263-0.74257451.00.6486420.4207370.9859780.2972681.478050-1.478050-15.965348-0.512104-0.31304651.00.4369210.1909000.5374920.5435581.049285-1.049285-39.408485-0.581423-0.77271551.00.8014240.6422811.1132700.4976812.193919-2.193919-36.982643-0.627740-0.72515051.00.8568150.7341321.1224860.5179041.754343-1.754343-31.530857-0.578748-0.61825251.00.2790740.0778820.678320-0.2082441.305216-1.30521637.9095230.5334700.74332451.00.7962100.6339511.0892572.1038472.103847-0.552248-39.577774-0.742289-0.77603551.00.8493100.7213271.1504600.5754111.851035-1.851035-22.426970-0.587765-0.43974551.00.5532020.3060330.7066880.6897701.236947-1.2369475.0
    7-36.896690-0.912707-0.72346451.01.0640851.1322771.2867320.9122052.307096-2.307096-19.239029-0.282667-0.37723651.01.0524071.1075611.1179750.8818562.153838-2.153838-62.821152-1.281961-1.23178751.00.5309440.2819011.3413430.0981882.117577-2.11757755.3592451.1070401.08547551.00.9817490.9638321.4635882.3481342.348134-0.507044-23.6113090.024880-0.46296751.01.0223591.0452181.1222990.8848842.283836-2.283836-34.417664-0.666021-0.67485651.00.3363520.1131330.754031-0.0176471.378753-1.378753-38.069172-0.877256-0.74645451.00.3544190.1256130.826321-0.0770061.163693-1.163693-10.263086-0.051315-0.20123751.00.3704570.1372380.4215860.2564800.847701-0.847701-30.174412-0.570585-0.59165551.00.1731840.0299930.616481-0.3569801.046295-1.04629546.8659320.8775400.91894051.00.1883300.0354680.9380401.2022891.2022890.597824-24.255749-0.452062-0.47560351.00.3094310.0957480.5674030.0615710.980127-0.980127-10.561463-0.084279-0.20708851.00.2666640.0711090.3376310.1003900.787678-0.787678-35.248955-0.933832-0.69115651.00.7920440.6273341.0512040.6131021.636708-1.636708-16.299442-0.262266-0.31959751.00.8052760.6484690.8663780.6824061.797832-1.797832-50.258915-0.981771-0.98546951.00.3273220.1071391.038407-0.3829161.556926-1.55692650.6336331.0685980.99281651.00.6691710.4477891.1972781.8686721.868672-0.068966-22.703091-0.056605-0.44515951.00.7396520.5470840.8632790.6719851.762866-1.762866-24.762434-0.469707-0.48553851.00.2680930.0718740.554636-0.0001260.909962-0.909962-38.911346-0.915691-0.76296851.00.9412450.8859431.2116360.7476332.031039-2.031039-19.286667-0.411864-0.37817051.00.9384020.8805991.0117370.8500901.990998-1.990998-54.983307-1.106866-1.07810451.00.4982550.2482581.187673-0.0449801.856607-1.85660755.2728421.1427731.08378151.00.9124290.8325271.4167252.3388982.338898-0.387132-24.889832-0.118238-0.48803651.00.8727880.7617580.9999690.6860742.103849-2.103849-32.013580-0.695968-0.62771751.00.3531810.1247370.7202540.0515801.284638-1.2846384.0
    8-26.011322-0.536596-0.51002651.00.0556070.0030920.513048-0.4195690.570454-0.570454-92.222801-1.791812-1.80829051.00.0982980.0096631.810960-1.6993341.995639-1.995639-37.869225-0.712115-0.74253451.00.0480710.0023110.744088-0.6776410.836827-0.83682764.2456131.2864821.25971851.00.5868560.3444001.3897082.0071802.0071800.607638-38.855114-1.503779-0.76186551.01.1351161.2884891.3670871.1954781.817826-1.817826-28.189720-0.513122-0.55274051.00.1032270.0106560.562296-0.3694790.759343-0.759343-27.265202-0.548034-0.53461251.00.0227530.0005180.535096-0.4906230.572237-0.572237-39.857010-0.771910-0.78151051.00.0619020.0038320.783958-0.7176540.923757-0.923757-6.367034-0.115645-0.12484451.00.0601070.0036130.138560-0.0624560.225210-0.22521042.3728100.8867920.83083951.00.2010090.0404050.8548091.1091161.1091160.605396-13.769955-0.545444-0.26999951.00.5488120.3011950.6116320.6579590.810047-0.810047-11.842787-0.255244-0.23221251.00.0449010.0020160.236513-0.1452910.307812-0.307812-28.094807-0.559510-0.55087951.00.0438670.0019240.552622-0.4917680.597890-0.597890-73.582306-1.460591-1.44279051.00.1221980.0149321.447956-1.3048981.658409-1.658409-22.921581-0.463139-0.44944351.00.0524600.0027520.452494-0.3850890.526610-0.52661056.1092911.2018111.10018251.00.4450870.1981031.1868041.6766721.6766720.602798-29.902466-1.201119-0.58632351.00.9508690.9041511.1171061.0497861.495527-1.495527-23.161522-0.453892-0.45414751.00.0713120.0050850.459712-0.3081340.624632-0.624632-30.269337-0.606525-0.59351651.00.0539510.0029110.595963-0.5018980.661645-0.661645-85.624870-1.647284-1.67891951.00.1074650.0115491.682355-1.5488761.879864-1.879864-26.338734-0.505198-0.51644651.00.0556440.0030960.519435-0.4435950.624974-0.62497463.0658341.1335811.23658551.00.5366580.2880021.3480151.9355721.9355720.574532-40.009689-1.531141-0.78450451.01.0031451.0063011.2734780.9794401.697684-1.697684-26.970509-0.520441-0.52883451.00.0843880.0071210.535524-0.3475880.714076-0.7140763.0
    9-24.176491-0.488977-0.47404951.00.0431680.0018630.476010-0.3661970.527277-0.527277-87.327805-1.710973-1.71231051.00.0315610.0009961.712601-1.6318051.772976-1.772976-21.451313-0.408822-0.42061451.00.0327610.0010730.421888-0.3761940.493162-0.49316258.3976290.7481251.14505151.00.6926900.4798201.3382692.1033782.1033780.480623-48.922287-1.675132-0.95926151.00.9744410.9495351.3673750.8529681.817363-1.817363-29.856304-0.640901-0.58541851.00.1241950.0154240.598447-0.3120800.750260-0.750260-27.958775-0.565279-0.54821151.00.0351930.0012390.549340-0.4920600.583746-0.583746-37.864830-0.732618-0.74244851.00.0410910.0016880.743584-0.6920590.802448-0.802448-0.649227-0.005362-0.01273051.00.0392930.0015440.0413040.0350670.069732-0.06973243.4241450.7332170.85145451.00.2187250.0478410.8790991.1710121.1710120.632703-21.846182-0.721695-0.42835651.00.3897600.1519120.5791390.2879350.756129-0.756129-13.696244-0.290477-0.26855451.00.0494350.0024440.273066-0.1696510.314362-0.314362-28.335342-0.570419-0.55559551.00.0313280.0009810.556478-0.5082270.598616-0.598616-67.415817-1.322900-1.32187951.00.0206170.0004251.322040-1.2528321.356348-1.356348-14.509363-0.280158-0.28449751.00.0271590.0007380.285791-0.2373790.326241-0.32624154.2231450.8084091.06319951.00.4877720.2379211.1697491.7478801.7478800.582484-38.194836-1.286616-0.74891851.00.7200420.5184611.0389130.5894101.341641-1.341641-24.306427-0.513999-0.47659751.00.1137420.0129370.489981-0.2363200.606179-0.606179-20.204275-0.414832-0.39616251.00.0364960.0013320.397840-0.3289040.434622-0.434622-71.983742-1.408678-1.41144651.00.0318270.0010131.411805-1.3464051.477625-1.477625-23.991568-0.466880-0.47042351.00.0270610.0007320.471201-0.4308810.532167-0.53216753.2707440.7677351.04452451.00.6718430.4513731.2419362.0021482.0021480.376754-38.753330-1.399783-0.75986951.00.8820020.7779271.1641860.8855381.513484-1.513484-31.401262-0.670306-0.61571151.00.1521180.0231400.634224-0.2864980.862852-0.8628522.0
    +
    +
    +
    +
    x_cat, x_cont, yb = first(dls.train)
    +x_cont[:10]
    +
    +
    tensor([[-0.8581, -0.1346, -0.8581,  ...,  0.3235,  0.5841, -0.6917],
    +        [-0.0406,  0.0344, -0.0406,  ..., -0.0171, -1.7253,  1.2745],
    +        [ 1.7966, -0.0497,  1.7966,  ..., -0.6516,  0.9802, -1.0290],
    +        ...,
    +        [ 0.2804,  0.4747,  0.2804,  ..., -0.4816, -0.3325,  0.0887],
    +        [-0.1472, -0.1884, -0.1472,  ..., -0.1036, -1.2258,  0.8491],
    +        [-0.9960, -0.6116, -0.9960,  ...,  0.4602,  3.3105, -3.0129]])
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.image.html b/data.image.html new file mode 100644 index 000000000..880407c3b --- /dev/null +++ b/data.image.html @@ -0,0 +1,1500 @@ + + + + + + + + + +tsai - Imaging Time Series + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Imaging Time Series

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Main functions used to transform time series into TSImage tensors.

    +
    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, return_split=False)
    +
    +
    +

    source

    +
    +

    ToTSImage

    +
    +
     ToTSImage (enc=None, dec=None, split_idx=None, order=None)
    +
    +

    Delegates (__call__,decode,setup) to (encodes,decodes,setups) if split_idx matches

    +
    +

    source

    +
    +
    +

    TSImage

    +
    +
     TSImage (x, **kwargs)
    +
    +

    A Tensor which support subclass pickling, and maintains metadata when casting or after methods

    +
    +

    source

    +
    +
    +

    TSToPlot

    +
    +
     TSToPlot (size:Optional[int]=224, dpi:int=100, lw=1, **kwargs)
    +
    +

    Transforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by creating a matplotlib plot.

    +
    +
    out = TSToPlot()(TSTensor(X[:2]), split_idx=0)
    +print(out.shape)
    +out[0].show()
    +
    +
    torch.Size([2, 3, 224, 224])
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSToMat

    +
    +
     TSToMat (size=224, dpi=100, cmap=None, **kwargs)
    +
    +

    Transforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by creating a matplotlib matrix. Input data must be normalized with a range(-1, 1)

    +
    +
    out = TSToMat()(TSTensor(X[:2]), split_idx=0)
    +print(out.shape)
    +out[0].show()
    +
    +
    torch.Size([2, 3, 224, 224])
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    out = TSToMat(cmap='spring')(TSTensor(X[:2]), split_idx=0)
    +print(out.shape)
    +out[0].show()
    +
    +
    torch.Size([2, 3, 224, 224])
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSToJRP

    +
    +
     TSToJRP (size=224, cmap=None, dimension=1, time_delay=1, threshold=None,
    +          percentage=10)
    +
    +

    Transforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by applying Joint Recurrence Plot

    +
    +

    source

    +
    +
    +

    TSToRP

    +
    +
     TSToRP (size=224, cmap=None, dimension=1, time_delay=1, threshold=None,
    +         percentage=10, flatten=False)
    +
    +

    Transforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by applying Recurrence Plot. It requires input to be previously normalized between -1 and 1

    +
    +

    source

    +
    +
    +

    TSToMTF

    +
    +
     TSToMTF (size=224, cmap=None, n_bins=5, image_size=1.0,
    +          strategy='quantile', overlapping=False, flatten=False)
    +
    +

    Transforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by applying Markov Transition Field

    +
    +

    source

    +
    +
    +

    TSToGASF

    +
    +
     TSToGASF (size=224, cmap=None, range=None, image_size=1.0,
    +           sample_range=(-1, 1), method='summation', overlapping=False,
    +           flatten=False)
    +
    +

    Transforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by applying Gramian Angular Summation Field. It requires either input to be previously normalized between -1 and 1 or set range to (-1, 1)

    +
    +

    source

    +
    +
    +

    TSToGADF

    +
    +
     TSToGADF (size=224, cmap=None, range=None, image_size=1.0,
    +           sample_range=(-1, 1), method='summation', overlapping=False,
    +           flatten=False)
    +
    +

    Transforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by applying Gramian Angular Difference Field. It requires either input to be previously normalized between -1 and 1 or set range to (-1, 1)

    +
    +
    out = TSToRP()(TSTensor(X[:2]), split_idx=0)
    +print(out.shape)
    +out[0].show()
    +
    +
    torch.Size([2, 24, 224, 224])
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    o = TSTensor(X[0][1][None])
    +encoder = RecurrencePlot()
    +a = encoder.fit_transform(o.cpu().numpy())[0]
    +o = TSTensor(X[0])
    +encoder = RecurrencePlot()
    +b = encoder.fit_transform(o.cpu().numpy())[1]
    +test_eq(a,b) # channels can all be processed in parallel
    +
    +
    +
    test_eq(TSToRP()(TSTensor(X[0]), split_idx=False)[0], TSToRP()(TSTensor(X[0][0][None]), split_idx=False)[0])
    +test_eq(TSToRP()(TSTensor(X[0]), split_idx=False)[1], TSToRP()(TSTensor(X[0][1][None]), split_idx=False)[0])
    +test_eq(TSToRP()(TSTensor(X[0]), split_idx=False)[2], TSToRP()(TSTensor(X[0][2][None]), split_idx=False)[0])
    +
    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, return_split=False)
    +tfms = [None, Categorize()]
    +bts = [[TSNormalize(), TSToPlot(100)],
    +       [TSNormalize(), TSToMat(100)],
    +       [TSNormalize(), TSToGADF(100)],
    +       [TSNormalize(), TSToGASF(100)],
    +       [TSNormalize(), TSToMTF(100)],
    +       [TSNormalize(), TSToRP(100)]]
    +btns = ['Plot', 'Mat', 'GADF', 'GASF', 'MTF', 'RP']
    +dsets = TSDatasets(X, y, tfms=tfms, splits=splits)
    +for i, (bt, btn) in enumerate(zip(bts, btns)):
    +    dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=8, batch_tfms=bt)
    +    test_eq(dls.vars, 3 if i <2 else X.shape[1])
    +    test_eq(dls.vars, 3 if i <2 else X.shape[1])
    +    test_eq(dls.len, (100,100))
    +    xb, yb = dls.train.one_batch()
    +    print(i, btn, xb, xb.dtype, xb.min(), xb.max())
    +    xb[0].show()
    +    plt.show()
    +
    +
    0 Plot TSImage(shape:torch.Size([8, 3, 100, 100])) torch.float32 0.054901961237192154 1.0
    +1 Mat TSImage(shape:torch.Size([8, 3, 100, 100])) torch.float32 0.019607843831181526 1.0
    +2 GADF TSImage(shape:torch.Size([8, 24, 100, 100])) torch.float32 2.980232238769531e-07 0.9999997019767761
    +3 GASF TSImage(shape:torch.Size([8, 24, 100, 100])) torch.float32 0.0 0.938302218914032
    +4 MTF TSImage(shape:torch.Size([8, 24, 100, 100])) torch.float32 0.0 1.0
    +5 RP TSImage(shape:torch.Size([8, 24, 100, 100])) torch.float32 0.0 0.8106333613395691
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +

    The simplest way to train a model using time series to image transforms is this:

    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, return_split=False)
    +tfms = [None, Categorize()]
    +batch_tfms = [TSNormalize(), TSToGADF(224)]
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +learn = tsimage_learner(dls, xresnet34)
    +learn.fit_one_cycle(10)
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.metadatasets.html b/data.metadatasets.html new file mode 100644 index 000000000..c84d988f6 --- /dev/null +++ b/data.metadatasets.html @@ -0,0 +1,1333 @@ + + + + + + + + + +tsai - Metadataset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Metadataset

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    A dataset of datasets

    +
    +

    This functionality will allow you to create a dataset from data stores in multiple, smaller datasets.

    +

    I’d like to thank both Thomas Capelle (https://github.com/tcapelle) and Xander Dunn (https://github.com/xanderdunn) for their contributions to make this code possible.

    +

    This functionality allows you to use multiple numpy arrays instead of a single one, which may be very useful in many practical settings. It’s been tested it with 10k+ datasets and it works well.

    +
    +

    source

    +
    +

    TSMetaDatasets

    +
    +
     TSMetaDatasets (metadataset, splits)
    +
    +

    Base class for lists with subsets

    +
    +

    source

    +
    +
    +

    TSMetaDataset

    +
    +
     TSMetaDataset (dataset_list, **kwargs)
    +
    +

    Initialize self. See help(type(self)) for accurate signature.

    +

    Let’s create 3 datasets. In this case they will have different sizes.

    +
    +
    vocab = alphabet[:10]
    +dsets = []
    +for i in range(3):
    +    size = np.random.randint(50, 150)
    +    X = torch.rand(size, 5, 50)
    +    y = vocab[torch.randint(0, 10, (size,))]
    +    tfms = [None, TSClassification(vocab=vocab)]
    +    dset = TSDatasets(X, y, tfms=tfms)
    +    dsets.append(dset)
    +
    +
    +
    +metadataset = TSMetaDataset(dsets)
    +splits = TimeSplitter(show_plot=False)(metadataset)
    +metadatasets = TSMetaDatasets(metadataset, splits=splits)
    +dls = TSDataLoaders.from_dsets(metadatasets.train, metadatasets.valid)
    +xb, yb = dls.train.one_batch()
    +xb, yb
    +
    +
    (TSTensor(samples:64, vars:5, len:50, device=cpu, dtype=torch.float32),
    + TensorCategory([1, 0, 3, 9, 7, 2, 8, 6, 1, 1, 1, 8, 1, 1, 9, 2, 6, 6, 1, 5, 5,
    +                 6, 9, 2, 7, 1, 6, 4, 9, 2, 5, 0, 4, 9, 1, 4, 4, 6, 0, 8, 8, 5,
    +                 8, 6, 9, 0, 8, 8, 6, 4, 8, 9, 7, 3, 4, 7, 7, 8, 6, 2, 3, 0, 7,
    +                 4]))
    +
    +
    +

    You can train metadatasets as you would train any other time series model in tsai:

    +
    learn = ts_learner(dls, arch="TSTPlus")
    +learn.fit_one_cycle(1)
    +learn.export("test.pkl")
    +

    For inference, you should create the new metadatasets using the same method you used when you trained it. The you use fastai’s learn.get_preds method to generate predictions:

    +
    vocab = alphabet[:10]
    +dsets = []
    +for i in range(3):
    +    size = np.random.randint(50, 150)
    +    X = torch.rand(size, 5, 50)
    +    y = vocab[torch.randint(0, 10, (size,))]
    +    tfms = [None, TSClassification(vocab=vocab)]
    +    dset = TSDatasets(X, y, tfms=tfms)
    +    dsets.append(dset)
    +metadataset = TSMetaDataset(dsets)
    +dl = TSDataLoader(metadataset)
    +
    +
    +learn = load_learner("test.pkl")
    +learn.get_preds(dl=dl)
    +

    There also en easy way to map any particular sample in a batch to the original dataset and id:

    +
    +
    dls = TSDataLoaders.from_dsets(metadatasets.train, metadatasets.valid)
    +xb, yb = first(dls.train)
    +mappings = dls.train.dataset.mapping_idxs
    +for i, (xbi, ybi) in enumerate(zip(xb, yb)):
    +    ds, idx = mappings[i]
    +    test_close(dsets[ds][idx][0].data.cpu(), xbi.cpu())
    +    test_close(dsets[ds][idx][1].data.cpu(), ybi.cpu())
    +
    +

    For example the 3rd sample in this batch would be:

    +
    +
    dls.train.dataset.mapping_idxs[2]
    +
    +
    array([  0, 112], dtype=int32)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.mixed.html b/data.mixed.html new file mode 100644 index 000000000..b750ffa16 --- /dev/null +++ b/data.mixed.html @@ -0,0 +1,1770 @@ + + + + + + + + + +tsai - Mixed data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Mixed data

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    DataLoader than can take data from multiple dataloaders with different types of data

    +
    +
    +

    source

    +
    +

    MixedDataLoaders

    +
    +
     MixedDataLoaders (*loaders, path:str|Path='.', device=None)
    +
    +

    Basic wrapper around several DataLoaders.

    +
    +

    source

    +
    +
    +

    MixedDataLoader

    +
    +
     MixedDataLoader (*loaders, path='.', shuffle=False, device=None, bs=None)
    +
    +

    Accepts any number of DataLoader and a device

    +
    +

    source

    +
    +
    +

    get_mixed_dls

    +
    +
     get_mixed_dls (*dls, device=None, shuffle_train=None, shuffle_valid=None,
    +                **kwargs)
    +
    +
    +
    from tsai.data.tabular import *
    +
    +
    +
    path = untar_data(URLs.ADULT_SAMPLE)
    +df = pd.read_csv(path/'adult.csv')
    +# df['salary'] = np.random.rand(len(df)) # uncomment to simulate a cont dependent variable
    +target = 'salary'
    +splits = RandomSplitter()(range_of(df))
    +
    +cat_names = ['workclass', 'education', 'marital-status']
    +cont_names = ['age', 'fnlwgt']
    +dls1 = get_tabular_dls(df, cat_names=cat_names, cont_names=cont_names, y_names=target, splits=splits, bs=512)
    +dls1.show_batch()
    +
    +cat_names = None #['occupation', 'relationship', 'race']
    +cont_names = ['education-num']
    +dls2 = get_tabular_dls(df, cat_names=cat_names, cont_names=cont_names, y_names=target, splits=splits, bs=128)
    +dls2.show_batch()
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    workclasseducationmarital-statusagefnlwgtsalary
    0PrivateBachelorsMarried-civ-spouse59.999999131680.999115>=50k
    1Private12thNever-married18.000000311795.000052<50k
    2PrivateHS-gradMarried-civ-spouse45.000000350440.002257>=50k
    3Local-govMastersNever-married44.000000101593.001253<50k
    4?Some-collegeNever-married20.99999941355.995576<50k
    5PrivateBachelorsNever-married30.000000207668.000292<50k
    6Federal-govBachelorsNever-married28.000000281859.998606<50k
    7?Some-collegeNever-married20.999999180338.999810<50k
    8PrivateSome-collegeNever-married20.000000174713.999509<50k
    9Self-emp-not-incBachelorsMarried-civ-spouse50.000000334273.005863<50k
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    education-num_naeducation-numsalary
    0False9.0<50k
    1False9.0<50k
    2False13.0>=50k
    3False9.0<50k
    4False9.0<50k
    5False13.0>=50k
    6False10.0<50k
    7False10.0<50k
    8False13.0<50k
    9False10.0<50k
    +
    +
    +
    +
    dls = get_mixed_dls(dls1, dls2, bs=8)
    +first(dls.train)
    +first(dls.valid)
    +torch.save(dls,'export/mixed_dls.pth')
    +del dls
    +dls = torch.load('export/mixed_dls.pth')
    +dls.train.show_batch()
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    workclasseducationmarital-statusagefnlwgtsalary
    0State-govHS-gradNever-married43.00000023156.998049<50k
    1Private11thMarried-civ-spouse32.000000140092.001434<50k
    2Self-emp-not-incHS-gradNever-married43.00000048086.995399<50k
    3Self-emp-not-incAssoc-acdmNever-married34.000000177638.999728<50k
    4Local-govMastersMarried-civ-spouse65.000001146453.999176<50k
    5PrivateHS-gradMarried-civ-spouse33.000000227281.999333<50k
    6PrivateHS-gradNever-married33.000000194900.999911<50k
    7PrivateHS-gradDivorced23.000000259301.002460<50k
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    education-num_naeducation-numsalary
    0False9.0<50k
    1False7.0<50k
    2False9.0<50k
    3False12.0<50k
    4False14.0<50k
    5True10.0<50k
    6False9.0<50k
    7False9.0<50k
    +
    +
    +
    +
    xb, yb = first(dls.train)
    +xb
    +
    +
    ((tensor([[ 8, 12,  5],
    +          [ 5,  2,  3],
    +          [ 7, 12,  5],
    +          [ 7,  8,  5],
    +          [ 3, 13,  3],
    +          [ 5, 12,  3],
    +          [ 5, 12,  5],
    +          [ 5, 12,  1]]),
    +  tensor([[ 0.3222, -1.5782],
    +          [-0.4850, -0.4696],
    +          [ 0.3222, -1.3418],
    +          [-0.3383, -0.1136],
    +          [ 1.9368, -0.4093],
    +          [-0.4117,  0.3570],
    +          [-0.4117,  0.0500],
    +          [-1.1455,  0.6606]])),
    + (tensor([[1],
    +          [1],
    +          [1],
    +          [1],
    +          [1],
    +          [2],
    +          [1],
    +          [1]]),
    +  tensor([[-0.4258],
    +          [-1.2097],
    +          [-0.4258],
    +          [ 0.7502],
    +          [ 1.5342],
    +          [-0.0338],
    +          [-0.4258],
    +          [-0.4258]])))
    +
    +
    +
    +
    xs, ys = first(dls.train)
    +xs[0][0].shape, xs[0][1].shape, xs[1][0].shape, xs[1][1].shape
    +
    +
    (torch.Size([8, 3]),
    + torch.Size([8, 2]),
    + torch.Size([8, 1]),
    + torch.Size([8, 1]))
    +
    +
    +
    +
    from tsai.data.validation import TimeSplitter
    +from tsai.data.core import TSRegression, get_ts_dls
    +
    +
    +
    X = np.repeat(np.repeat(np.arange(8)[:, None, None], 2, 1), 5, 2).astype(float)
    +X = np.concatenate([X, X])
    +y = np.concatenate([np.arange(len(X)//2)]*2)
    +alphabet = np.array(list(string.ascii_lowercase))
    +# y = alphabet[y]
    +splits = TimeSplitter(.5, show_plot=False)(range_of(X))
    +tfms = [None, TSRegression()]
    +dls1 = get_ts_dls(X, y, splits=splits, tfms=tfms)
    +dls1.one_batch()
    +
    +
    (TSTensor(samples:8, vars:2, len:5, device=cpu, dtype=torch.float32),
    + tensor([7., 0., 2., 1., 5., 4., 3., 6.]))
    +
    +
    +
    +
    data = np.concatenate([np.repeat(np.arange(8)[:, None], 3, 1)*np.array([1, 10, 100])]*2)
    +df = pd.DataFrame(data, columns=['cat1', 'cat2', 'cont'])
    +df['cont'] = df['cont'].astype(float)
    +df['target'] = y
    +cat_names = ['cat1', 'cat2']
    +cont_names = ['cont']
    +target = 'target'
    +dls2 = get_tabular_dls(df, procs=[Categorify, FillMissing, #Normalize
    +                                 ], cat_names=cat_names, cont_names=cont_names, y_names=target, splits=splits, bs=8)
    +dls2.one_batch()
    +
    +
    (tensor([[2, 2],
    +         [5, 5],
    +         [1, 1],
    +         [7, 7],
    +         [3, 3],
    +         [6, 6],
    +         [8, 8],
    +         [4, 4]]),
    + tensor([[100.],
    +         [400.],
    +         [  0.],
    +         [600.],
    +         [200.],
    +         [500.],
    +         [700.],
    +         [300.]]),
    + tensor([[1],
    +         [4],
    +         [0],
    +         [6],
    +         [2],
    +         [5],
    +         [7],
    +         [3]], dtype=torch.int8))
    +
    +
    +
    +
    z = zip(_loaders[dls1.train.fake_l.num_workers == 0](dls1.train.fake_l))
    +for b in z: 
    +    print(b)
    +    break
    +
    +
    ((TSTensor(samples:8, vars:2, len:5, device=cpu, dtype=torch.float32), tensor([7., 0., 2., 1., 5., 4., 3., 6.])),)
    +
    +
    +
    +
    bs = 8
    +dls = get_mixed_dls(dls1, dls2, bs=bs)
    +dl = dls.train
    +xb, yb = dl.one_batch()
    +test_eq(len(xb), 2)
    +test_eq(len(xb[0]), bs)
    +test_eq(len(xb[1]), 2)
    +test_eq(len(xb[1][0]), bs)
    +test_eq(len(xb[1][1]), bs)
    +test_eq(xb[0].data[:, 0, 0].long(), xb[1][0][:, 0] - 1) # categorical data and ts are in synch
    +test_eq(xb[0].data[:, 0, 0], (xb[1][1]/100).flatten()) # continuous data and ts are in synch
    +test_eq(tensor(dl.input_idxs), yb.long().cpu())
    +dl = dls.valid
    +xb, yb = dl.one_batch()
    +test_eq(tensor(y[dl.input_idxs]), yb.long().cpu())
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.mixed_augmentation.html b/data.mixed_augmentation.html new file mode 100644 index 000000000..4e88a439b --- /dev/null +++ b/data.mixed_augmentation.html @@ -0,0 +1,1434 @@ + + + + + + + + + +tsai - Label-mixing transforms + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Label-mixing transforms

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Callbacks that perform data augmentation by mixing samples in different ways.

    +
    +
    +

    source

    +
    +

    MixHandler1d

    +
    +
     MixHandler1d (alpha=0.5)
    +
    +

    A handler class for implementing mixed sample data augmentation

    +
    +

    source

    +
    +
    +

    MixUp1d

    +
    +
     MixUp1d (alpha=0.4)
    +
    +

    Implementation of https://arxiv.org/abs/1710.09412

    +
    +
    from fastai.learner import *
    +from tsai.models.InceptionTime import *
    +from tsai.data.external import get_UCR_data
    +from tsai.data.core import get_ts_dls, TSCategorize
    +from tsai.data.preprocessing import TSStandardize
    +from tsai.learner import ts_learner
    +
    +
    +
    X, y, splits = get_UCR_data('NATOPS', return_split=False)
    +tfms = [None, TSCategorize()]
    +batch_tfms = TSStandardize()
    +dls = get_ts_dls(X, y, tfms=tfms, splits=splits, batch_tfms=batch_tfms)
    +learn = ts_learner(dls, InceptionTime, cbs=MixUp1d(0.4))
    +learn.fit_one_cycle(1)
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_losstime
    01.9084551.81190800:03
    +
    +
    +
    +

    source

    +
    +
    +

    CutMix1d

    +
    +
     CutMix1d (alpha=1.0)
    +
    +

    Implementation of https://arxiv.org/abs/1905.04899

    +
    +

    source

    +
    +
    +

    IntraClassCutMix1d

    +
    +
     IntraClassCutMix1d (alpha=1.0)
    +
    +

    Implementation of CutMix applied to examples of the same class

    +
    +
    X, y, splits = get_UCR_data('NATOPS', split_data=False)
    +tfms = [None, TSCategorize()]
    +batch_tfms = TSStandardize()
    +dls = get_ts_dls(X, y, tfms=tfms, splits=splits, batch_tfms=batch_tfms)
    +learn = ts_learner(dls, InceptionTime, cbs=IntraClassCutMix1d())
    +learn.fit_one_cycle(1)
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_losstime
    01.8134831.79201000:03
    +
    +
    +
    +
    X, y, splits = get_UCR_data('NATOPS', split_data=False)
    +tfms = [None, TSCategorize()]
    +batch_tfms = TSStandardize()
    +dls = get_ts_dls(X, y, tfms=tfms, splits=splits, batch_tfms=batch_tfms)
    +learn = ts_learner(dls, cbs=CutMix1d(1.))
    +learn.fit_one_cycle(1)
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_losstime
    01.8245091.77496400:04
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.preparation.html b/data.preparation.html new file mode 100644 index 000000000..4e4ddf4d0 --- /dev/null +++ b/data.preparation.html @@ -0,0 +1,8580 @@ + + + + + + + + + +tsai - Data preparation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Data preparation

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Functions required to prepare X (and y) from a pandas dataframe.

    +
    +
    +

    source

    +
    +

    apply_sliding_window

    +
    +
     apply_sliding_window (data, window_len:Union[int,list],
    +                       horizon:Union[int,list]=0,
    +                       x_vars:Union[int,list]=None,
    +                       y_vars:Union[int,list]=None)
    +
    +

    Applies a sliding window on an array-like input to generate a 3d X (and optionally y)

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dataand array-like object with the input data
    window_lenint | listsliding window length. When using a list, use negative numbers and 0.
    horizonint | list0horizon
    x_varsint | listNoneindices of the independent variables
    y_varsint | listNoneindices of the dependent variables (target). [] means no y will be created. None means all variables.
    +
    +

    source

    +
    +
    +

    prepare_sel_vars_and_steps

    +
    +
     prepare_sel_vars_and_steps (sel_vars=None, sel_steps=None, idxs=False)
    +
    +
    +

    source

    +
    +
    +

    prepare_idxs

    +
    +
     prepare_idxs (o, shape=None)
    +
    +
    +
    data = np.arange(20).reshape(-1,1).repeat(3, 1) * np.array([1, 10, 100])
    +df = pd.DataFrame(data, columns=['feat_1', 'feat_2', 'feat_3'])
    +df.head()
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    feat_1feat_2feat_3
    0000
    1110100
    2220200
    3330300
    4440400
    + +
    +
    +
    +
    +
    window_len = 8
    +horizon = 1
    +x_vars = None
    +y_vars = None
    +X, y = apply_sliding_window(data, window_len, horizon=horizon, x_vars=x_vars, y_vars=y_vars)
    +print(np.shares_memory(X, data))
    +print(np.shares_memory(y, data))
    +print(X.shape, y.shape)
    +test_eq(X.shape, (len(df) - (window_len - 1 + horizon), df.shape[1], window_len))
    +test_eq(y.shape, (len(df) - (window_len - 1 + horizon), df.shape[1]))
    +X[0], y[0]
    +
    +
    True
    +True
    +(12, 3, 8) (12, 3)
    +
    +
    +
    (array([[  0,   1,   2,   3,   4,   5,   6,   7],
    +        [  0,  10,  20,  30,  40,  50,  60,  70],
    +        [  0, 100, 200, 300, 400, 500, 600, 700]]),
    + array([  8,  80, 800]))
    +
    +
    +
    +
    window_len = 8
    +horizon = 1
    +x_vars = None
    +y_vars = 0
    +X, y = apply_sliding_window(df, window_len, horizon=horizon, x_vars=x_vars, y_vars=y_vars)
    +print(np.shares_memory(X, df))
    +print(np.shares_memory(y, df))
    +print(X.shape, y.shape)
    +test_eq(X.shape, (len(df) - (window_len - 1 + horizon), df.shape[1], window_len))
    +test_eq(y.shape, (len(df) - (window_len - 1 + horizon),))
    +X[0], y[0]
    +
    +
    True
    +True
    +(12, 3, 8) (12,)
    +
    +
    +
    (array([[  0,   1,   2,   3,   4,   5,   6,   7],
    +        [  0,  10,  20,  30,  40,  50,  60,  70],
    +        [  0, 100, 200, 300, 400, 500, 600, 700]]),
    + 8)
    +
    +
    +
    +
    window_len = 8
    +horizon = [1, 2]
    +x_vars = 0
    +y_vars = [1, 2]
    +X, y = apply_sliding_window(df, window_len, horizon=horizon, x_vars=x_vars, y_vars=y_vars)
    +print(np.shares_memory(X, df))
    +print(np.shares_memory(y, df))
    +print(X.shape, y.shape)
    +test_eq(X.shape, (len(df) - (window_len - 1 + max(horizon)), 1, window_len))
    +test_eq(y.shape, (len(df) - (window_len - 1 + max(horizon)), len(y_vars), len(horizon)))
    +X[0], y[0]
    +
    +
    True
    +False
    +(11, 1, 8) (11, 2, 2)
    +
    +
    +
    (array([[0, 1, 2, 3, 4, 5, 6, 7]]),
    + array([[ 80,  90],
    +        [800, 900]]))
    +
    +
    +
    +
    window_len = [-4, -2, -1, 0]
    +horizon = [1, 2, 4]
    +x_vars = 0
    +y_vars = [1, 2]
    +X, y = apply_sliding_window(df, window_len, horizon=horizon, x_vars=x_vars, y_vars=y_vars)
    +print(np.shares_memory(X, df))
    +print(np.shares_memory(y, df))
    +print(X.shape, y.shape)
    +test_eq(X.shape, (12, 1, 4))
    +test_eq(y.shape, (12, 2, 3))
    +X[0], y[0]
    +
    +
    False
    +False
    +(12, 1, 4) (12, 2, 3)
    +
    +
    +
    (array([[0, 2, 3, 4]]),
    + array([[ 50,  60,  80],
    +        [500, 600, 800]]))
    +
    +
    +
    +

    source

    +
    +
    +

    df2Xy

    +
    +
     df2Xy (df, sample_col=None, feat_col=None, data_cols=None,
    +        target_col=None, steps_in_rows=False, to3d=True, splits=None,
    +        sort_by=None, ascending=True, y_func=None, return_names=False)
    +
    +

    This function allows you to transform a pandas dataframe into X and y numpy arrays that can be used to create a TSDataset. sample_col: column that uniquely identifies each sample. feat_col: used for multivariate datasets. It indicates which is the column that indicates the feature by row. data_col: indicates ths column/s where the data is located. If None, it means all columns (except the sample_col, feat_col, and target_col) target_col: indicates the column/s where the target is. steps_in_rows: flag to indicate if each step is in a different row or in a different column (default). to3d: turns X to 3d (including univariate time series) sort_by: this is used to pass any colum/s that are needed to sort the steps in the sequence. If you pass a sample_col and/ or feat_col these will be automatically used before the sort_by column/s, and you don’t need to add them to the sort_by column/s list. y_func: function used to calculate y for each sample (and target_col) return_names: flag to return the names of the columns from where X was generated

    +
    +

    source

    +
    +
    +

    split_Xy

    +
    +
     split_Xy (X, y=None, splits=None)
    +
    +
    +
    df = pd.DataFrame()
    +df['sample_id'] = np.array([1,1,1,2,2,2,3,3,3])
    +df['var1'] = df['sample_id'] * 10 + df.index.values
    +df['var2'] = df['sample_id'] * 100 + df.index.values
    +df
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sample_idvar1var2
    0110100
    1111101
    2112102
    3223203
    4224204
    5225205
    6336306
    7337307
    8338308
    + +
    +
    +
    +
    +
    X_df, y_df = df2Xy(df, sample_col='sample_id', steps_in_rows=True)
    +test_eq(X_df[0], np.array([[10, 11, 12], [100, 101, 102]]))
    +
    +
    +
    n_samples = 1_000
    +n_rows = 10_000
    +
    +sample_ids = np.arange(n_samples).repeat(n_rows//n_samples).reshape(-1,1)
    +feat_ids = np.tile(np.arange(n_rows // n_samples), n_samples).reshape(-1,1)
    +cont = np.random.randn(n_rows, 6)
    +ind_cat = np.random.randint(0, 3, (n_rows, 1))
    +target = np.array([0,1,2])[ind_cat]
    +ind_cat2 = np.random.randint(0, 3, (n_rows, 1))
    +target2 = np.array([100,200,300])[ind_cat2]
    +data = np.concatenate([sample_ids, feat_ids, cont, target, target], -1)
    +columns = ['sample_id', 'feat_id'] + (np.arange(6) + 1).astype(str).tolist() + ['target'] + ['target2']
    +df = pd.DataFrame(data, columns=columns)
    +idx = random_choice(np.arange(len(df)), len(df), False)
    +new_dtypes = {'sample_id':np.int32, 'feat_id':np.int32, '1':np.float32, '2':np.float32, '3':np.float32, '4':np.float32, '5':np.float32, '6':np.float32}
    +df = df.astype(dtype=new_dtypes)
    +df = df.loc[idx].reset_index(drop=True)
    +df
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sample_idfeat_id123456targettarget2
    06252-1.3905490.770179-0.8484800.853631-0.3099840.8743382.02.0
    152641.1523972.064397-0.392603-0.275797-0.047526-2.2488142.02.0
    23976-1.0529300.631396-0.758800-0.606483-2.776054-0.4577551.01.0
    35288-0.178637-1.253319-1.1540140.9138761.051010-0.6357621.01.0
    424920.6125950.8882970.0650241.621935-0.1804790.3099771.01.0
    .................................
    99952721-0.4323251.6452621.502872-1.1448590.9196530.4143040.00.0
    99969205-0.724702-1.4718321.2090861.2065320.5556760.3527262.02.0
    999766261.122043-0.379357-0.344517-1.5450910.1878941.0625102.02.0
    9998717-0.053582-0.854992-1.118632-1.967820-0.3448040.1281050.00.0
    99994074-1.565716-0.947183-0.401944-1.309024-0.237755-0.7432512.02.0
    + +

    10000 rows × 10 columns

    +
    +
    +
    +
    +
    from scipy.stats import mode
    +
    +
    +
    def y_func(o): return mode(o, axis=1, keepdims=True).mode
    +X, y = df2xy(df, sample_col='sample_id', feat_col='feat_id', target_col=['target', 'target2'], sort_by=['sample_id', 'feat_id'], y_func=y_func)
    +test_eq(X.shape, (1000, 10, 6))
    +test_eq(y.shape, (1000, 2))
    +rand_idx = np.random.randint(0, np.max(df.sample_id))
    +sorted_df = df.sort_values(by=['sample_id', 'feat_id'], kind='stable').reset_index(drop=True)
    +test_eq(X[rand_idx], sorted_df[sorted_df.sample_id == rand_idx][['1', '2', '3', '4', '5', '6']].values)
    +test_eq(np.squeeze(mode(sorted_df[sorted_df.sample_id == rand_idx][['target', 'target2']].values).mode), y[rand_idx])
    +
    +
    +
    # Univariate
    +from io import StringIO
    +
    +
    +
    TESTDATA = StringIO("""sample_id;value_0;value_1;target
    +    rob;2;3;0
    +    alice;6;7;1
    +    eve;11;12;2
    +    """)
    +
    +df = pd.read_csv(TESTDATA, sep=";")
    +display(df)
    +X, y = df2Xy(df, sample_col='sample_id', target_col='target', data_cols=['value_0', 'value_1'], sort_by='sample_id')
    +test_eq(X.shape, (3, 1, 2))
    +test_eq(y.shape, (3,))
    +X, y
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sample_idvalue_0value_1target
    0rob230
    1alice671
    2eve11122
    + +
    +
    +
    +
    (array([[[ 6,  7]],
    + 
    +        [[11, 12]],
    + 
    +        [[ 2,  3]]]),
    + array([1, 2, 0]))
    +
    +
    +
    +
    # Univariate
    +TESTDATA = StringIO("""sample_id;timestep;values;target
    +    rob;1;2;0
    +    alice;1;6;1
    +    eve;1;11;2
    +    
    +    rob;2;3;0
    +    alice;2;7;1
    +    eve;2;12;2
    +    """)
    +
    +df = pd.read_csv(TESTDATA, sep=";")
    +display(df)
    +def y_func(o): return mode(o, axis=1).mode
    +X, y = df2xy(df, sample_col='sample_id', target_col='target', data_cols=['values'], sort_by='timestep', to3d=True, y_func=y_func)
    +test_eq(X.shape, (3, 1, 2))
    +test_eq(y.shape, (3, ))
    +print(X, y)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sample_idtimestepvaluestarget
    0rob120
    1alice161
    2eve1112
    3rob230
    4alice271
    5eve2122
    + +
    +
    +
    +
    [[[ 6  7]]
    +
    + [[11 12]]
    +
    + [[ 2  3]]] [1 2 0]
    +
    +
    +
    +
    # Multivariate
    +TESTDATA = StringIO("""sample_id;trait;value_0;value_1;target
    +    rob;green;2;3;0
    +    rob;yellow;3;4;0
    +    rob;blue;4;5;0
    +    rob;red;5;6;0
    +    alice;green;6;7;1
    +    alice;yellow;7;8;1
    +    alice;blue;8;9;1
    +    alice;red;9;10;1
    +    eve;yellow;11;12;2
    +    eve;green;10;11;2
    +    eve;blue;12;12;2
    +    eve;red;13;14;2
    +    """)
    +
    +df = pd.read_csv(TESTDATA, sep=";")
    +idx = random_choice(len(df), len(df), False)
    +df = df.iloc[idx]
    +display(df)
    +def y_func(o): return mode(o, axis=1).mode
    +X, y = df2xy(df, sample_col='sample_id', feat_col='trait', target_col='target', data_cols=['value_0', 'value_1'], y_func=y_func)
    +print(X, y)
    +test_eq(X.shape, (3, 4, 2))
    +test_eq(y.shape, (3,))
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sample_idtraitvalue_0value_1target
    9evegreen10112
    10eveblue12122
    3robred560
    0robgreen230
    6aliceblue891
    2robblue450
    1robyellow340
    4alicegreen671
    7alicered9101
    8eveyellow11122
    11evered13142
    5aliceyellow781
    + +
    +
    +
    +
    [[[ 8  9]
    +  [ 6  7]
    +  [ 9 10]
    +  [ 7  8]]
    +
    + [[12 12]
    +  [10 11]
    +  [13 14]
    +  [11 12]]
    +
    + [[ 4  5]
    +  [ 2  3]
    +  [ 5  6]
    +  [ 3  4]]] [1 2 0]
    +
    +
    +
    +
    # Multivariate, multi-label
    +TESTDATA = StringIO("""sample_id;trait;value_0;value_1;target1;target2
    +    rob;green;2;3;0;0
    +    rob;yellow;3;4;0;0
    +    rob;blue;4;5;0;0
    +    rob;red;5;6;0;0
    +    alice;green;6;7;1;0
    +    alice;yellow;7;8;1;0
    +    alice;blue;8;9;1;0
    +    alice;red;9;10;1;0
    +    eve;yellow;11;12;2;1
    +    eve;green;10;11;2;1
    +    eve;blue;12;12;2;1
    +    eve;red;13;14;2;1
    +    """)
    +
    +df = pd.read_csv(TESTDATA, sep=";")
    +display(df)
    +def y_func(o): return mode(o, axis=1, keepdims=True).mode
    +X, y = df2xy(df, sample_col='sample_id', feat_col='trait', target_col=['target1', 'target2'], data_cols=['value_0', 'value_1'], y_func=y_func)
    +test_eq(X.shape, (3, 4, 2))
    +test_eq(y.shape, (3, 2))
    +print(X, y)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sample_idtraitvalue_0value_1target1target2
    0robgreen2300
    1robyellow3400
    2robblue4500
    3robred5600
    4alicegreen6710
    5aliceyellow7810
    6aliceblue8910
    7alicered91010
    8eveyellow111221
    9evegreen101121
    10eveblue121221
    11evered131421
    + +
    +
    +
    +
    [[[ 8  9]
    +  [ 6  7]
    +  [ 9 10]
    +  [ 7  8]]
    +
    + [[12 12]
    +  [10 11]
    +  [13 14]
    +  [11 12]]
    +
    + [[ 4  5]
    +  [ 2  3]
    +  [ 5  6]
    +  [ 3  4]]] [[1 0]
    + [2 1]
    + [0 0]]
    +
    +
    +
    +
    # Multivariate, unlabeled
    +TESTDATA = StringIO("""sample_id;trait;value_0;value_1;target
    +    rob;green;2;3;0
    +    rob;yellow;3;4;0
    +    rob;blue;4;5;0
    +    rob;red;5;6;0
    +    alice;green;6;7;1
    +    alice;yellow;7;8;1
    +    alice;blue;8;9;1
    +    alice;red;9;10;1
    +    eve;yellow;11;12;2
    +    eve;green;10;11;2
    +    eve;blue;12;12;2
    +    eve;red;13;14;2
    +    """)
    +
    +df = pd.read_csv(TESTDATA, sep=";")
    +idx = random_choice(len(df), len(df), False)
    +df = df.iloc[idx]
    +display(df)
    +def y_func(o): return mode(o, axis=1, keepdims=True).mode
    +X, y = df2xy(df, sample_col='sample_id', feat_col='trait', data_cols=['value_0', 'value_1'], y_func=y_func)
    +print(X, y)
    +test_eq(X.shape, (3, 4, 2))
    +test_eq(y, None)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sample_idtraitvalue_0value_1target
    11evered13142
    3robred560
    9evegreen10112
    10eveblue12122
    6aliceblue891
    1robyellow340
    4alicegreen671
    2robblue450
    0robgreen230
    8eveyellow11122
    7alicered9101
    5aliceyellow781
    + +
    +
    +
    +
    [[[ 8  9]
    +  [ 6  7]
    +  [ 9 10]
    +  [ 7  8]]
    +
    + [[12 12]
    +  [10 11]
    +  [13 14]
    +  [11 12]]
    +
    + [[ 4  5]
    +  [ 2  3]
    +  [ 5  6]
    +  [ 3  4]]] None
    +
    +
    +
    +
    TESTDATA = StringIO("""sample_id;trait;timestep;values;target
    +    rob;green;1;2;0
    +    rob;yellow;1;3;0
    +    rob;blue;1;4;0
    +    rob;red;1;5;0
    +    alice;green;1;6;1
    +    alice;yellow;1;7;1
    +    alice;blue;1;8;1
    +    alice;red;1;9;1
    +    eve;yellow;1;11;2
    +    eve;green;1;10;2
    +    eve;blue;1;12;2
    +    eve;red;1;13;2
    +    
    +    rob;green;2;3;0
    +    rob;yellow;2;4;0
    +    rob;blue;2;5;0
    +    rob;red;2;6;0
    +    alice;green;2;7;1
    +    alice;yellow;2;8;1
    +    alice;blue;2;9;1
    +    alice;red;2;10;1
    +    eve;yellow;2;12;2
    +    eve;green;2;11;2
    +    eve;blue;2;13;2
    +    eve;red;2;14;2
    +    """)
    +
    +df = pd.read_csv(TESTDATA, sep=";")
    +display(df)
    +def y_func(o): return mode(o, axis=1).mode
    +X, y = df2xy(df, sample_col='sample_id', feat_col='trait', sort_by='timestep', target_col='target', data_cols=['values'], y_func=y_func)
    +print(X, y)
    +test_eq(X.shape, (3, 4, 2))
    +test_eq(y.shape, (3, ))
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sample_idtraittimestepvaluestarget
    0robgreen120
    1robyellow130
    2robblue140
    3robred150
    4alicegreen161
    5aliceyellow171
    6aliceblue181
    7alicered191
    8eveyellow1112
    9evegreen1102
    10eveblue1122
    11evered1132
    12robgreen230
    13robyellow240
    14robblue250
    15robred260
    16alicegreen271
    17aliceyellow281
    18aliceblue291
    19alicered2101
    20eveyellow2122
    21evegreen2112
    22eveblue2132
    23evered2142
    + +
    +
    +
    +
    [[[ 8  9]
    +  [ 6  7]
    +  [ 9 10]
    +  [ 7  8]]
    +
    + [[12 13]
    +  [10 11]
    +  [13 14]
    +  [11 12]]
    +
    + [[ 4  5]
    +  [ 2  3]
    +  [ 5  6]
    +  [ 3  4]]] [1 2 0]
    +
    +
    +
    +

    source

    +
    +
    +

    df2np3d

    +
    +
     df2np3d (df, groupby, data_cols=None)
    +
    +

    Transforms a df (with the same number of rows per group in groupby) to a 3d ndarray

    +
    +
    user = np.array([1,2]).repeat(4).reshape(-1,1)
    +val = np.random.rand(8, 3)
    +data = np.concatenate([user, val], axis=-1)
    +df = pd.DataFrame(data, columns=['user', 'x1', 'x2', 'x3'])
    +test_eq(df2np3d(df, ['user'], ['x1', 'x2', 'x3']).shape, (2, 3, 4))
    +
    +
    +

    source

    +
    +
    +

    add_missing_value_cols

    +
    +
     add_missing_value_cols (df, cols=None, dtype=<class 'float'>,
    +                         fill_value=None)
    +
    +
    +
    data = np.random.randn(10, 2)
    +mask = data > .8
    +data[mask] = np.nan
    +df = pd.DataFrame(data, columns=['A', 'B'])
    +df = add_missing_value_cols(df, cols=None, dtype=float)
    +test_eq(df['A'].isnull().sum(), df['missing_A'].sum())
    +test_eq(df['B'].isnull().sum(), df['missing_B'].sum())
    +df
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ABmissing_Amissing_B
    00.476712-0.8807970.00.0
    1NaN-1.5172101.00.0
    2-1.348997-0.8784410.00.0
    3NaN0.2907561.00.0
    40.569218-1.4157770.00.0
    50.591641-2.1338600.00.0
    6NaNNaN1.01.0
    7NaN-0.1193971.00.0
    8-0.7279880.0572540.00.0
    9-0.631352-0.2190280.00.0
    + +
    +
    +
    +
    +

    source

    +
    +
    +

    add_missing_timestamps

    +
    +
     add_missing_timestamps (df, datetime_col=None, use_index=False,
    +                         unique_id_cols=None, groupby=None,
    +                         fill_value=nan, range_by_group=True,
    +                         start_date=None, end_date=None, freq=None)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dfpandas DataFrame
    datetime_colNoneTypeNonecolumn that contains the datetime data (without duplicates within groups)
    use_indexboolFalseindicates if the index contains the datetime data
    unique_id_colsNoneTypeNonecolumn used to identify unique_ids
    groupbyNoneTypeNonesame as unique_id_cols. Will be deprecated. Kept for compatiblity.
    fill_valuefloatnanvalues that will be insert where missing dates exist. Default:np.nan
    range_by_groupboolTrueif True, dates will be filled between min and max dates for each group. Otherwise, between the min and max dates in the df.
    start_dateNoneTypeNonestart date to fill in missing dates (same for all unique_ids)
    end_dateNoneTypeNoneend date to fill in missing dates (same for all unique_ids)
    freqNoneTypeNonefrequency used to fill in the missing datetime
    +
    +
    # Filling dates between min and max dates
    +dates = pd.date_range('2021-05-01', '2021-05-07').values
    +data = np.zeros((len(dates), 3))
    +data[:, 0] = dates
    +data[:, 1] = np.random.rand(len(dates))
    +data[:, 2] = np.random.rand(len(dates))
    +cols = ['date', 'feature1', 'feature2']
    +date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float, 'feature2': float})
    +date_df_with_missing_dates = date_df.drop([1,3]).reset_index(drop=True)
    +date_df_with_missing_dates
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    datefeature1feature2
    02021-05-010.5372480.670897
    12021-05-030.2999120.421039
    22021-05-050.6483720.204641
    32021-05-060.0174750.022183
    42021-05-070.9659190.470055
    + +
    +
    +
    +
    +
    # No groups
    +expected_output_df = date_df.copy()
    +expected_output_df.loc[[1,3], ['feature1', 'feature2']] = np.nan
    +display(expected_output_df)
    +output_df = add_missing_timestamps(date_df_with_missing_dates.copy(), 
    +                                   'date', 
    +                                   unique_id_cols=None, 
    +                                   fill_value=np.nan, 
    +                                   range_by_group=False)
    +test_eq(output_df, expected_output_df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    datefeature1feature2
    02021-05-010.5372480.670897
    12021-05-02NaNNaN
    22021-05-030.2999120.421039
    32021-05-04NaNNaN
    42021-05-050.6483720.204641
    52021-05-060.0174750.022183
    62021-05-070.9659190.470055
    + +
    +
    +
    +
    +
    # Filling dates between min and max dates for each value in groupby column
    +dates = pd.date_range('2021-05-01', '2021-05-07').values
    +dates = np.concatenate((dates, dates))
    +data = np.zeros((len(dates), 4))
    +data[:, 0] = dates
    +data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))
    +data[:, 2] = np.random.rand(len(dates))
    +data[:, 3] = np.random.rand(len(dates))
    +cols = ['date', 'id', 'feature1', 'feature2']
    +date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})
    +date_df_with_missing_dates = date_df.drop([0,1,3,8,11,13]).reset_index(drop=True)
    +date_df_with_missing_dates
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-0300.0593980.255853
    12021-05-0500.2355360.455261
    22021-05-0600.7244230.280910
    32021-05-0700.3036820.853959
    42021-05-0110.0224240.408510
    52021-05-0310.5081900.603880
    62021-05-0410.3309240.108156
    72021-05-0610.6014810.020182
    + +
    +
    +
    +
    +
    # groupby='id', range_by_group=True
    +expected_output_df = date_df.drop([0,1,13]).reset_index(drop=True)  
    +expected_output_df.loc[[1,6,9], ['feature1', 'feature2']] = np.nan
    +display(expected_output_df)
    +output_df = add_missing_timestamps(date_df_with_missing_dates.copy(), 
    +                                   'date', 
    +                                   unique_id_cols='id', 
    +                                   fill_value=np.nan, 
    +                                   range_by_group=True)
    +test_eq(expected_output_df, output_df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-0300.0593980.255853
    12021-05-040NaNNaN
    22021-05-0500.2355360.455261
    32021-05-0600.7244230.280910
    42021-05-0700.3036820.853959
    52021-05-0110.0224240.408510
    62021-05-021NaNNaN
    72021-05-0310.5081900.603880
    82021-05-0410.3309240.108156
    92021-05-051NaNNaN
    102021-05-0610.6014810.020182
    + +
    +
    +
    +
    +
    # groupby='id', range_by_group=False
    +expected_output_df = date_df.copy() 
    +expected_output_df.loc[[0,1,3,8,11,13], ['feature1', 'feature2']] = np.nan
    +display(expected_output_df)
    +output_df = add_missing_timestamps(date_df_with_missing_dates.copy(), 
    +                                   'date', 
    +                                   unique_id_cols='id', 
    +                                   fill_value=np.nan, 
    +                                   range_by_group=False)
    +test_eq(expected_output_df, output_df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-010NaNNaN
    12021-05-020NaNNaN
    22021-05-0300.0593980.255853
    32021-05-040NaNNaN
    42021-05-0500.2355360.455261
    52021-05-0600.7244230.280910
    62021-05-0700.3036820.853959
    72021-05-0110.0224240.408510
    82021-05-021NaNNaN
    92021-05-0310.5081900.603880
    102021-05-0410.3309240.108156
    112021-05-051NaNNaN
    122021-05-0610.6014810.020182
    132021-05-071NaNNaN
    + +
    +
    +
    +
    +
    # Filling dates between min and max timestamps
    +dates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values
    +data = np.zeros((len(dates), 3))
    +data[:, 0] = dates
    +data[:, 1] = np.random.rand(len(dates))
    +data[:, 2] = np.random.rand(len(dates))
    +cols = ['date', 'feature1', 'feature2']
    +date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float, 'feature2': float})
    +date_df_with_missing_dates = date_df.drop([1,3]).reset_index(drop=True)
    +date_df_with_missing_dates
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    datefeature1feature2
    02021-05-01 00:00:000.7748460.624488
    12021-05-01 08:00:000.6838370.441230
    22021-05-01 16:00:000.1422690.279095
    32021-05-01 20:00:000.9536860.205123
    + +
    +
    +
    +
    +
    # No groups
    +expected_output_df = date_df.copy()
    +expected_output_df.loc[[1,3], ['feature1', 'feature2']] = np.nan
    +display(expected_output_df)
    +output_df = add_missing_timestamps(date_df_with_missing_dates.copy(), 'date', groupby=None, fill_value=np.nan, range_by_group=False, freq='4H')
    +test_eq(output_df, expected_output_df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    datefeature1feature2
    02021-05-01 00:00:000.7748460.624488
    12021-05-01 04:00:00NaNNaN
    22021-05-01 08:00:000.6838370.441230
    32021-05-01 12:00:00NaNNaN
    42021-05-01 16:00:000.1422690.279095
    52021-05-01 20:00:000.9536860.205123
    + +
    +
    +
    +
    +
    # Filling missing values between min and max timestamps for each value in groupby column
    +
    +dates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values
    +dates = np.concatenate((dates, dates))
    +data = np.zeros((len(dates), 4))
    +data[:, 0] = dates
    +data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))
    +data[:, 2] = np.random.rand(len(dates))
    +data[:, 3] = np.random.rand(len(dates))
    +cols = ['date', 'id', 'feature1', 'feature2']
    +date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})
    +date_df_with_missing_dates = date_df.drop([0,1,3,8,9,11]).reset_index(drop=True)
    +date_df_with_missing_dates
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-01 08:00:0000.4387840.084472
    12021-05-01 16:00:0000.0596130.445215
    22021-05-01 20:00:0000.5118070.001034
    32021-05-01 00:00:0010.9701150.280121
    42021-05-01 04:00:0010.7750510.436359
    52021-05-01 16:00:0010.4699870.457442
    + +
    +
    +
    +
    +
    # groupby='id', range_by_group=True
    +expected_output_df = date_df.drop([0,1,11]).reset_index(drop=True)  
    +expected_output_df.loc[[1,6,7], ['feature1', 'feature2']] = np.nan
    +display(expected_output_df)
    +output_df = add_missing_timestamps(date_df_with_missing_dates.copy(),
    +                                   'date', 
    +                                   groupby='id', 
    +                                   fill_value=np.nan, 
    +                                   range_by_group=True, 
    +                                   freq='4H')
    +test_eq(expected_output_df, output_df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-01 08:00:0000.4387840.084472
    12021-05-01 12:00:000NaNNaN
    22021-05-01 16:00:0000.0596130.445215
    32021-05-01 20:00:0000.5118070.001034
    42021-05-01 00:00:0010.9701150.280121
    52021-05-01 04:00:0010.7750510.436359
    62021-05-01 08:00:001NaNNaN
    72021-05-01 12:00:001NaNNaN
    82021-05-01 16:00:0010.4699870.457442
    + +
    +
    +
    +
    +
    # groupby='id', range_by_group=False
    +expected_output_df = date_df.copy() 
    +expected_output_df.loc[[0,1,3,8,9,11], ['feature1', 'feature2']] = np.nan
    +display(expected_output_df)
    +output_df = add_missing_timestamps(date_df_with_missing_dates.copy(), 
    +                                   'date', 
    +                                   groupby='id', 
    +                                   fill_value=np.nan, 
    +                                   range_by_group=False, 
    +                                   freq='4H')
    +test_eq(expected_output_df, output_df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-01 00:00:000NaNNaN
    12021-05-01 04:00:000NaNNaN
    22021-05-01 08:00:0000.4387840.084472
    32021-05-01 12:00:000NaNNaN
    42021-05-01 16:00:0000.0596130.445215
    52021-05-01 20:00:0000.5118070.001034
    62021-05-01 00:00:0010.9701150.280121
    72021-05-01 04:00:0010.7750510.436359
    82021-05-01 08:00:001NaNNaN
    92021-05-01 12:00:001NaNNaN
    102021-05-01 16:00:0010.4699870.457442
    112021-05-01 20:00:001NaNNaN
    + +
    +
    +
    +
    +
    # No groups, with duplicate dates ==> FAILS
    +dates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values
    +data = np.zeros((len(dates), 3))
    +data[:, 0] = dates
    +data[:, 1] = np.random.rand(len(dates))
    +data[:, 2] = np.random.rand(len(dates))
    +cols = ['date', 'feature1', 'feature2']
    +date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float, 'feature2': float})
    +date_df_with_missing_dates = date_df.drop([1,3]).reset_index(drop=True)
    +date_df_with_missing_dates.loc[3, 'date'] = date_df_with_missing_dates.loc[2, 'date']
    +display(date_df_with_missing_dates)
    +test_fail(add_missing_timestamps, args=[date_df_with_missing_dates, 'date'], kwargs=dict(groupby=None, fill_value=np.nan, range_by_group=False, freq='4H'), )
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    datefeature1feature2
    02021-05-01 00:00:000.7550920.002068
    12021-05-01 08:00:000.5706930.087019
    22021-05-01 16:00:000.2288690.856618
    32021-05-01 16:00:000.3495060.428253
    + +
    +
    +
    +
    +
    # groupby='id', range_by_group=True, with duplicate dates ==> FAILS
    +
    +dates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values
    +dates = np.concatenate((dates, dates))
    +data = np.zeros((len(dates), 4))
    +data[:, 0] = dates
    +data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))
    +data[:, 2] = np.random.rand(len(dates))
    +data[:, 3] = np.random.rand(len(dates))
    +cols = ['date', 'id', 'feature1', 'feature2']
    +date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})
    +date_df_with_missing_dates = date_df.drop([0,1,8,9,11]).reset_index(drop=True)
    +date_df_with_missing_dates.loc[3, 'date'] = date_df_with_missing_dates.loc[2, 'date']
    +display(date_df_with_missing_dates)
    +test_fail(add_missing_timestamps, args=[date_df_with_missing_dates, 'date'], kwargs=dict(groupby='id', fill_value=np.nan, range_by_group=True, freq='4H'), 
    +          contains='cannot handle a non-unique multi-index!')
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-01 08:00:0000.0403450.312874
    12021-05-01 12:00:0000.7134240.597211
    22021-05-01 16:00:0000.4683820.652314
    32021-05-01 16:00:0000.3966910.605664
    42021-05-01 00:00:0010.8046460.964115
    52021-05-01 04:00:0010.0899250.072410
    62021-05-01 16:00:0010.8307860.560658
    + +
    +
    +
    +
    +
    # groupby='id', range_by_group=FALSE, with duplicate dates ==> FAILS
    +
    +dates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values
    +dates = np.concatenate((dates, dates))
    +data = np.zeros((len(dates), 4))
    +data[:, 0] = dates
    +data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))
    +data[:, 2] = np.random.rand(len(dates))
    +data[:, 3] = np.random.rand(len(dates))
    +cols = ['date', 'id', 'feature1', 'feature2']
    +date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})
    +date_df_with_missing_dates = date_df.drop([0,1,8,9,11]).reset_index(drop=True)
    +date_df_with_missing_dates.loc[3, 'date'] = date_df_with_missing_dates.loc[2, 'date']
    +display(date_df_with_missing_dates)
    +test_fail(add_missing_timestamps, args=[date_df_with_missing_dates, 'date'], kwargs=dict(groupby='id', fill_value=np.nan, range_by_group=False, freq='4H'), 
    +          contains='cannot handle a non-unique multi-index!')
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-01 08:00:0000.4485080.953596
    12021-05-01 12:00:0000.8688020.526845
    22021-05-01 16:00:0000.2230700.304842
    32021-05-01 16:00:0000.6456610.270956
    42021-05-01 00:00:0010.0172500.787757
    52021-05-01 04:00:0010.7833410.608269
    62021-05-01 16:00:0010.4262470.926149
    + +
    +
    +
    +
    +

    source

    +
    +
    +

    time_encoding

    +
    +
     time_encoding (series, freq, max_val=None)
    +
    +

    Transforms a pandas series of dtype datetime64 (of any freq) or DatetimeIndex into 2 float arrays

    +

    Available options: microsecond, millisecond, second, minute, hour, day = day_of_month = dayofmonth, day_of_week = weekday = dayofweek, day_of_year = dayofyear, week = week_of_year = weekofyear, month and year

    +
    +
    for freq in ['microsecond', 'second', 'minute', 'hour', 'day', 'dayofweek', 'dayofyear', 'month']:
    +    tdf = pd.DataFrame(pd.date_range('2021-03-01', dt.datetime.today()), columns=['date'])
    +    a,b = time_encoding(tdf.date, freq=freq)
    +    plt.plot(a)
    +    plt.plot(b)
    +    plt.title(freq)
    +    plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    for freq in ['microsecond', 'second', 'minute', 'hour', 'day', 'dayofweek', 'dayofyear', 'month']:
    +    dateindex = pd.date_range('2021-03-01', dt.datetime.today())
    +    a,b = time_encoding(dateindex, freq=freq)
    +    plt.plot(a)
    +    plt.plot(b)
    +    plt.title(freq)
    +    plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    dow_sin, dow_cos = time_encoding(date_df['date'], 'dayofweek')
    +plt.plot(dow_sin)
    +plt.plot(dow_cos)
    +plt.title('DayOfWeek')
    +plt.show()
    +date_df['dow_sin'] = dow_sin
    +date_df['dow_cos'] = dow_cos
    +date_df
    +
    +
    +
    +

    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2dow_sindow_cos
    02021-05-01 00:00:0000.7735970.465634-0.974928-0.222521
    12021-05-01 04:00:0000.2655260.963753-0.974928-0.222521
    22021-05-01 08:00:0000.4485080.953596-0.974928-0.222521
    32021-05-01 12:00:0000.8688020.526845-0.974928-0.222521
    42021-05-01 16:00:0000.2230700.304842-0.974928-0.222521
    52021-05-01 20:00:0000.6456610.270956-0.974928-0.222521
    62021-05-01 00:00:0010.0172500.787757-0.974928-0.222521
    72021-05-01 04:00:0010.7833410.608269-0.974928-0.222521
    82021-05-01 08:00:0010.6298750.170726-0.974928-0.222521
    92021-05-01 12:00:0010.3029270.682136-0.974928-0.222521
    102021-05-01 16:00:0010.4262470.926149-0.974928-0.222521
    112021-05-01 20:00:0010.8306240.543715-0.974928-0.222521
    + +
    +
    +
    +
    +

    source

    +
    +
    +

    get_gaps

    +
    +
     get_gaps (o:torch.Tensor, forward:bool=True, backward:bool=True,
    +           nearest:bool=True, normalize:bool=True)
    +
    +

    Number of sequence steps from previous, to next and/or to nearest real value along the last dimension of 3D arrays or tensors

    +
    +

    source

    +
    +
    +

    nearest_gaps

    +
    +
     nearest_gaps (o, normalize=True)
    +
    +

    Number of sequence steps to nearest real value along the last dimension of 3D arrays or tensors

    +
    +

    source

    +
    +
    +

    backward_gaps

    +
    +
     backward_gaps (o, normalize=True)
    +
    +

    Number of sequence steps to next real value along the last dimension of 3D arrays or tensors

    +
    +

    source

    +
    +
    +

    forward_gaps

    +
    +
     forward_gaps (o, normalize=True)
    +
    +

    Number of sequence steps since previous real value along the last dimension of 3D arrays or tensors

    +
    +
    t = torch.rand(1, 2, 8)
    +arr = t.numpy()
    +t[t <.6] = np.nan
    +test_ge(nearest_gaps(t).min().item(), 0)
    +test_ge(nearest_gaps(arr).min(), 0)
    +test_le(nearest_gaps(t).min().item(), 1)
    +test_le(nearest_gaps(arr).min(), 1)
    +test_eq(torch.isnan(forward_gaps(t)).sum(), 0)
    +test_eq(np.isnan(forward_gaps(arr)).sum(), 0)
    +ag = get_gaps(t)
    +test_eq(ag.shape, (1,6,8))
    +test_eq(torch.isnan(ag).sum(), 0)
    +
    +
    +

    source

    +
    +
    +

    add_delta_timestamp_cols

    +
    +
     add_delta_timestamp_cols (df, cols=None, groupby=None, forward=True,
    +                           backward=True, nearest=True, normalize=True)
    +
    +
    +
    # Add delta timestamp features for the no groups setting
    +dates = pd.date_range('2021-05-01', '2021-05-07').values
    +data = np.zeros((len(dates), 2))
    +data[:, 0] = dates
    +data[:, 1] = np.random.rand(len(dates))
    +
    +cols = ['date', 'feature1']
    +date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float})
    +date_df.loc[[1,3,4],'feature1'] = np.nan
    +date_df
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    datefeature1
    02021-05-010.132532
    12021-05-02NaN
    22021-05-030.403176
    32021-05-04NaN
    42021-05-05NaN
    52021-05-060.179554
    62021-05-070.446536
    + +
    +
    +
    +
    +
    # No groups
    +expected_output_df = date_df.copy()
    +expected_output_df['feature1_dt_fwd'] = np.array([1,1,2,1,2,3,1])
    +expected_output_df['feature1_dt_bwd'] = np.array([2,1,3,2,1,1,1])
    +expected_output_df['feature1_dt_nearest'] = np.array([1,1,2,1,1,1,1])
    +
    +display(expected_output_df)
    +output_df = add_delta_timestamp_cols(date_df, cols='feature1', normalize=False)
    +test_eq(expected_output_df, output_df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    datefeature1feature1_dt_fwdfeature1_dt_bwdfeature1_dt_nearest
    02021-05-010.132532121
    12021-05-02NaN111
    22021-05-030.403176232
    32021-05-04NaN121
    42021-05-05NaN211
    52021-05-060.179554311
    62021-05-070.446536111
    + +
    +
    +
    +
    +
    # Add delta timestamp features within a group
    +dates = pd.date_range('2021-05-01', '2021-05-07').values
    +dates = np.concatenate((dates, dates))
    +data = np.zeros((len(dates), 3))
    +data[:, 0] = dates
    +data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))
    +data[:, 2] = np.random.rand(len(dates))
    +
    +cols = ['date', 'id', 'feature1']
    +date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float})
    +date_df.loc[[1,3,4,8,9,11],'feature1'] = np.nan
    +date_df
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1
    02021-05-0100.405327
    12021-05-020NaN
    22021-05-0300.055934
    32021-05-040NaN
    42021-05-050NaN
    52021-05-0600.698408
    62021-05-0700.064831
    72021-05-0110.407541
    82021-05-021NaN
    92021-05-031NaN
    102021-05-0410.113590
    112021-05-051NaN
    122021-05-0610.548088
    132021-05-0710.348813
    + +
    +
    +
    +
    +
    # groupby='id'
    +expected_output_df = date_df.copy()
    +expected_output_df['feature1_dt_fwd'] = np.array([1,1,2,1,2,3,1,1,1,2,3,1,2,1])
    +expected_output_df['feature1_dt_bwd'] = np.array([2,1,3,2,1,1,1,3,2,1,2,1,1,1])
    +expected_output_df['feature1_dt_nearest'] = np.array([1,1,2,1,1,1,1,1,1,1,2,1,1,1])
    +
    +display(expected_output_df)
    +output_df = add_delta_timestamp_cols(date_df, cols='feature1', groupby='id', normalize=False)
    +test_eq(expected_output_df, output_df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature1_dt_fwdfeature1_dt_bwdfeature1_dt_nearest
    02021-05-0100.405327121
    12021-05-020NaN111
    22021-05-0300.055934232
    32021-05-040NaN121
    42021-05-050NaN211
    52021-05-0600.698408311
    62021-05-0700.064831111
    72021-05-0110.407541131
    82021-05-021NaN121
    92021-05-031NaN211
    102021-05-0410.113590322
    112021-05-051NaN111
    122021-05-0610.548088211
    132021-05-0710.348813111
    + +
    +
    +
    +

    SlidingWindow and SlidingWindowPanel are 2 useful functions that will allow you to create an array with segments of a pandas dataframe based on multiple criteria.

    +
    +

    source

    +
    +
    +

    SlidingWindow

    +
    +
     SlidingWindow (window_len:int, stride:Optional[int]=1, start:int=0,
    +                pad_remainder:bool=False, padding:str='post',
    +                padding_value:float=nan, add_padding_feature:bool=True,
    +                get_x:Union[NoneType,int,list]=None,
    +                get_y:Union[NoneType,int,list]=None,
    +                y_func:Optional[<built-infunctioncallable>]=None,
    +                output_processor:Optional[<built-
    +                infunctioncallable>]=None, copy:bool=False,
    +                horizon:Union[int,list]=1, seq_first:bool=True,
    +                sort_by:Optional[list]=None, ascending:bool=True,
    +                check_leakage:bool=True)
    +
    +

    Applies a sliding window to a 1d or 2d input (np.ndarray, torch.Tensor or pd.DataFrame)

    +

    Input:

    +
        You can use np.ndarray, pd.DataFrame or torch.Tensor as input
    +
    +    shape: (seq_len, ) or (seq_len, n_vars) if seq_first=True else (n_vars, seq_len)
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    window_lenintlength of lookback window
    strideUnion[None, int]1n datapoints the window is moved ahead along the sequence. Default: 1. If None, stride=window_len (no overlap)
    startint0determines the step where the first window is applied: 0 (default) or a given step (int). Previous steps will be discarded.
    pad_remainderboolFalseallows to pad remainder subsequences when the sliding window is applied and get_y == [] (unlabeled data).
    paddingstrpost‘pre’ or ‘post’ (optional, defaults to ‘pre’): pad either before or after each sequence. If pad_remainder == False, it indicates the starting point to create the sequence (‘pre’ from the end, and ‘post’ from the beginning)
    padding_valuefloatnanvalue (float) that will be used for padding. Default: np.nan
    add_padding_featureboolTrueadd an additional feature indicating whether each timestep is padded (1) or not (0).
    get_xUnion[None, int, list]Noneindices of columns that contain the independent variable (xs). If None, all data will be used as x.
    get_yUnion[None, int, list]Noneindices of columns that contain the target (ys). If None, all data will be used as y. [] means no y data is created (unlabeled data).
    y_funcOptional[callable]Noneoptional function to calculate the ys based on the get_y col/s and each y sub-window. y_func must be a function applied to axis=1!
    output_processorOptional[callable]Noneoptional function to process the final output (X (and y if available)). This is useful when some values need to be removed.The function should take X and y (even if it’s None) as arguments.
    copyboolFalsecopy the original object to avoid changes in it.
    horizonUnion[int, list]1number of future datapoints to predict (y). If get_y is [] horizon will be set to 0.
    seq_firstboolTrueTrue if input shape (seq_len, n_vars), False if input shape (n_vars, seq_len)
    sort_byOptional[list]Nonecolumn/s used for sorting the array in ascending order
    ascendingboolTrueused in sorting
    check_leakageboolTruechecks if there’s leakage in the output between X and y
    +
    +
    wl = 5
    +stride = 5
    +
    +t = np.repeat(np.arange(13).reshape(-1,1), 3, axis=-1)
    +print('input shape:', t.shape)
    +X, y = SlidingWindow(wl, stride=stride, pad_remainder=True, get_y=[])(t)
    +X
    +
    +
    input shape: (13, 3)
    +
    +
    +
    array([[[ 0.,  1.,  2.,  3.,  4.],
    +        [ 0.,  1.,  2.,  3.,  4.],
    +        [ 0.,  1.,  2.,  3.,  4.],
    +        [ 0.,  0.,  0.,  0.,  0.]],
    +
    +       [[ 5.,  6.,  7.,  8.,  9.],
    +        [ 5.,  6.,  7.,  8.,  9.],
    +        [ 5.,  6.,  7.,  8.,  9.],
    +        [ 0.,  0.,  0.,  0.,  0.]],
    +
    +       [[10., 11., 12., nan, nan],
    +        [10., 11., 12., nan, nan],
    +        [10., 11., 12., nan, nan],
    +        [ 0.,  0.,  0.,  1.,  1.]]])
    +
    +
    +
    +
    wl = 5
    +t = np.arange(10)
    +print('input shape:', t.shape)
    +X, y = SlidingWindow(wl)(t)
    +test_eq(X.shape[1:], (1, wl))
    +itemify(X,)
    +
    +
    input shape: (10,)
    +
    +
    +
    (#5) [(array([[0, 1, 2, 3, 4]]),),(array([[1, 2, 3, 4, 5]]),),(array([[2, 3, 4, 5, 6]]),),(array([[3, 4, 5, 6, 7]]),),(array([[4, 5, 6, 7, 8]]),)]
    +
    +
    +
    +
    wl = 5
    +h = 1
    +
    +t = np.arange(10)
    +print('input shape:', t.shape)
    +X, y = SlidingWindow(wl, stride=1, horizon=h)(t)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (1, wl))
    +test_eq(items[0][1].shape, ())
    +
    +
    input shape: (10,)
    +[(array([[0, 1, 2, 3, 4]]), 5), (array([[1, 2, 3, 4, 5]]), 6), (array([[2, 3, 4, 5, 6]]), 7), (array([[3, 4, 5, 6, 7]]), 8), (array([[4, 5, 6, 7, 8]]), 9)]
    +
    +
    +
    +
    wl = 5
    +h = 2 # 2 or more
    +
    +t = np.arange(10)
    +print('input shape:', t.shape)
    +X, y = SlidingWindow(wl, horizon=h)(t)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (1, wl))
    +test_eq(items[0][1].shape, (2, ))
    +
    +
    input shape: (10,)
    +[(array([[0, 1, 2, 3, 4]]), array([5, 6])), (array([[1, 2, 3, 4, 5]]), array([6, 7])), (array([[2, 3, 4, 5, 6]]), array([7, 8])), (array([[3, 4, 5, 6, 7]]), array([8, 9]))]
    +
    +
    +
    +
    wl = 5
    +h = 2 # 2 or more
    +
    +t = np.arange(10).reshape(1, -1)
    +print('input shape:', t.shape)
    +X, y = SlidingWindow(wl, stride=1, horizon=h, get_y=None, seq_first=False)(t)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (1, wl))
    +test_eq(items[0][1].shape, (2, ))
    +
    +
    input shape: (1, 10)
    +[(array([[0, 1, 2, 3, 4]]), array([5, 6])), (array([[1, 2, 3, 4, 5]]), array([6, 7])), (array([[2, 3, 4, 5, 6]]), array([7, 8])), (array([[3, 4, 5, 6, 7]]), array([8, 9]))]
    +
    +
    +
    +
    wl = 5
    +h = 2 # 2 or more
    +
    +t = np.arange(10).reshape(1, -1)
    +print('input shape:', t.shape)
    +X, y = SlidingWindow(wl, stride=1, horizon=h, seq_first=False)(t)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (1, wl))
    +
    +
    input shape: (1, 10)
    +[(array([[0, 1, 2, 3, 4]]), array([5, 6])), (array([[1, 2, 3, 4, 5]]), array([6, 7])), (array([[2, 3, 4, 5, 6]]), array([7, 8])), (array([[3, 4, 5, 6, 7]]), array([8, 9]))]
    +
    +
    +
    +
    wl = 5
    +
    +t = np.arange(10).reshape(1, -1)
    +print('input shape:', t.shape)
    +X, y = SlidingWindow(wl, stride=3, horizon=1, get_y=None, seq_first=False)(t)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (1, wl))
    +test_eq(items[0][1].shape, ())
    +
    +
    input shape: (1, 10)
    +[(array([[0, 1, 2, 3, 4]]), 5), (array([[3, 4, 5, 6, 7]]), 8)]
    +
    +
    +
    +
    wl = 5
    +start = 3
    +
    +t = np.arange(20)
    +print('input shape:', t.shape)
    +X, y = SlidingWindow(wl, stride=None, horizon=1, start=start)(t)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (1, wl))
    +test_eq(items[0][1].shape, ())
    +
    +
    input shape: (20,)
    +[(array([[3, 4, 5, 6, 7]]), 8), (array([[ 8,  9, 10, 11, 12]]), 13), (array([[13, 14, 15, 16, 17]]), 18)]
    +
    +
    +
    +
    wl = 5
    +
    +t = np.arange(20)
    +print('input shape:', t.shape)
    +df = pd.DataFrame(t, columns=['var'])
    +display(df)
    +X, y = SlidingWindow(wl, stride=None, horizon=1, get_y=None)(df)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (1, wl))
    +test_eq(items[0][1].shape, ())
    +
    +
    input shape: (20,)
    +[(array([[0, 1, 2, 3, 4]]), 5), (array([[5, 6, 7, 8, 9]]), 10), (array([[10, 11, 12, 13, 14]]), 15)]
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    var
    00
    11
    22
    33
    44
    55
    66
    77
    88
    99
    1010
    1111
    1212
    1313
    1414
    1515
    1616
    1717
    1818
    1919
    + +
    +
    +
    +
    +
    wl = 5
    +
    +t = np.arange(20)
    +print('input shape:', t.shape)
    +df = pd.DataFrame(t, columns=['var'])
    +display(df)
    +X, y = SlidingWindow(wl, stride=1, horizon=1, get_y=None)(df)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (1, wl))
    +test_eq(items[0][1].shape, ())
    +
    +
    input shape: (20,)
    +[(array([[0, 1, 2, 3, 4]]), 5), (array([[1, 2, 3, 4, 5]]), 6), (array([[2, 3, 4, 5, 6]]), 7), (array([[3, 4, 5, 6, 7]]), 8), (array([[4, 5, 6, 7, 8]]), 9), (array([[5, 6, 7, 8, 9]]), 10), (array([[ 6,  7,  8,  9, 10]]), 11), (array([[ 7,  8,  9, 10, 11]]), 12), (array([[ 8,  9, 10, 11, 12]]), 13), (array([[ 9, 10, 11, 12, 13]]), 14), (array([[10, 11, 12, 13, 14]]), 15), (array([[11, 12, 13, 14, 15]]), 16), (array([[12, 13, 14, 15, 16]]), 17), (array([[13, 14, 15, 16, 17]]), 18), (array([[14, 15, 16, 17, 18]]), 19)]
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    var
    00
    11
    22
    33
    44
    55
    66
    77
    88
    99
    1010
    1111
    1212
    1313
    1414
    1515
    1616
    1717
    1818
    1919
    + +
    +
    +
    +
    +
    wl = 5
    +
    +t = np.arange(20)
    +print('input shape:', t.shape)
    +df = pd.DataFrame(t, columns=['var']).T
    +display(df)
    +X, y = SlidingWindow(wl, stride=None, horizon=1, get_y=None, seq_first=False)(df)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (1, wl))
    +test_eq(items[0][1].shape, ())
    +
    +
    input shape: (20,)
    +[(array([[0, 1, 2, 3, 4]]), 5), (array([[5, 6, 7, 8, 9]]), 10), (array([[10, 11, 12, 13, 14]]), 15)]
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    012345678910111213141516171819
    var012345678910111213141516171819
    + +
    +
    +
    +
    +
    wl = 5
    +n_vars = 3
    +
    +t = (torch.stack(n_vars * [torch.arange(10)]).T * tensor([1, 10, 100]))
    +print('input shape:', t.shape)
    +df = pd.DataFrame(t, columns=[f'var_{i}' for i in range(n_vars)])
    +display(df)
    +X, y = SlidingWindow(wl, horizon=1)(df)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (n_vars, wl))
    +
    +
    input shape: torch.Size([10, 3])
    +[(array([[  0,   1,   2,   3,   4],
    +       [  0,  10,  20,  30,  40],
    +       [  0, 100, 200, 300, 400]]), array([  5,  50, 500])), (array([[  1,   2,   3,   4,   5],
    +       [ 10,  20,  30,  40,  50],
    +       [100, 200, 300, 400, 500]]), array([  6,  60, 600])), (array([[  2,   3,   4,   5,   6],
    +       [ 20,  30,  40,  50,  60],
    +       [200, 300, 400, 500, 600]]), array([  7,  70, 700])), (array([[  3,   4,   5,   6,   7],
    +       [ 30,  40,  50,  60,  70],
    +       [300, 400, 500, 600, 700]]), array([  8,  80, 800])), (array([[  4,   5,   6,   7,   8],
    +       [ 40,  50,  60,  70,  80],
    +       [400, 500, 600, 700, 800]]), array([  9,  90, 900]))]
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    var_0var_1var_2
    0000
    1110100
    2220200
    3330300
    4440400
    5550500
    6660600
    7770700
    8880800
    9990900
    + +
    +
    +
    +
    +
    wl = 5
    +n_vars = 3
    +
    +t = (torch.stack(n_vars * [torch.arange(10)]).T * tensor([1, 10, 100]))
    +print('input shape:', t.shape)
    +df = pd.DataFrame(t, columns=[f'var_{i}' for i in range(n_vars)])
    +display(df)
    +X, y = SlidingWindow(wl, horizon=1, get_y="var_0")(df)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (n_vars, wl))
    +
    +
    input shape: torch.Size([10, 3])
    +[(array([[  0,   1,   2,   3,   4],
    +       [  0,  10,  20,  30,  40],
    +       [  0, 100, 200, 300, 400]]), 5), (array([[  1,   2,   3,   4,   5],
    +       [ 10,  20,  30,  40,  50],
    +       [100, 200, 300, 400, 500]]), 6), (array([[  2,   3,   4,   5,   6],
    +       [ 20,  30,  40,  50,  60],
    +       [200, 300, 400, 500, 600]]), 7), (array([[  3,   4,   5,   6,   7],
    +       [ 30,  40,  50,  60,  70],
    +       [300, 400, 500, 600, 700]]), 8), (array([[  4,   5,   6,   7,   8],
    +       [ 40,  50,  60,  70,  80],
    +       [400, 500, 600, 700, 800]]), 9)]
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    var_0var_1var_2
    0000
    1110100
    2220200
    3330300
    4440400
    5550500
    6660600
    7770700
    8880800
    9990900
    + +
    +
    +
    +
    +
    wl = 5
    +n_vars = 3
    +
    +t = (torch.stack(n_vars * [torch.arange(10)]).T * tensor([1, 10, 100]))
    +print('input shape:', t.shape)
    +columns=[f'var_{i}' for i in range(n_vars-1)]+['target']
    +df = pd.DataFrame(t, columns=columns)
    +display(df)
    +X, y = SlidingWindow(wl, horizon=1, get_x=columns[:-1], get_y='target')(df)
    +items = itemify(X, y)
    +print(items)
    +test_eq(items[0][0].shape, (n_vars-1, wl))
    +test_eq(items[0][1].shape, ())
    +
    +
    input shape: torch.Size([10, 3])
    +[(array([[ 0,  1,  2,  3,  4],
    +       [ 0, 10, 20, 30, 40]]), 500), (array([[ 1,  2,  3,  4,  5],
    +       [10, 20, 30, 40, 50]]), 600), (array([[ 2,  3,  4,  5,  6],
    +       [20, 30, 40, 50, 60]]), 700), (array([[ 3,  4,  5,  6,  7],
    +       [30, 40, 50, 60, 70]]), 800), (array([[ 4,  5,  6,  7,  8],
    +       [40, 50, 60, 70, 80]]), 900)]
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    var_0var_1target
    0000
    1110100
    2220200
    3330300
    4440400
    5550500
    6660600
    7770700
    8880800
    9990900
    + +
    +
    +
    +
    +
    n_vars = 3
    +
    +t = (np.random.rand(1000, n_vars) - .5).cumsum(0)
    +print(t.shape)
    +plt.plot(t)
    +plt.show()
    +X, y = SlidingWindow(5, stride=None, horizon=0, get_x=[0,1], get_y=2)(t)
    +test_eq(X[0].shape, (n_vars-1, wl))
    +test_eq(y[0].shape, ())
    +print(X.shape, y.shape)
    +
    +
    (1000, 3)
    +(200, 2, 5) (200,)
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    wl = 5
    +n_vars = 3
    +
    +t = (np.random.rand(100, n_vars) - .5).cumsum(0)
    +print(t.shape)
    +columns=[f'var_{i}' for i in range(n_vars-1)]+['target']
    +df = pd.DataFrame(t, columns=columns)
    +display(df)
    +X, y = SlidingWindow(5, horizon=0, get_x=columns[:-1], get_y='target')(df)
    +test_eq(X[0].shape, (n_vars-1, wl))
    +test_eq(y[0].shape, ())
    +print(X.shape, y.shape)
    +
    +
    (100, 3)
    +(96, 2, 5) (96,)
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    var_0var_1target
    00.1540720.197194-0.083179
    10.402744-0.248788-0.560573
    20.4482090.224215-0.681264
    30.6315020.406760-1.162043
    41.0999730.179926-0.712690
    ............
    95-0.4050793.662311-2.779159
    96-0.4456253.488809-2.663381
    97-0.1873493.304898-2.695971
    98-0.1006523.505663-2.590652
    990.3712723.279901-2.764369
    + +

    100 rows × 3 columns

    +
    +
    +
    +
    +
    seq_len = 100
    +n_vars = 5
    +t = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)
    +print(t.shape)
    +columns=[f'var_{i}' for i in range(n_vars-1)]+['target']
    +df = pd.DataFrame(t, columns=columns)
    +display(df)
    +X, y = SlidingWindow(5, stride=1, horizon=0, get_x=columns[:-1], get_y='target', seq_first=True)(df)
    +test_eq(X[0].shape, (n_vars-1, wl))
    +test_eq(y[0].shape, ())
    +print(X.shape, y.shape)
    +
    +
    (100, 5)
    +(96, 4, 5) (96,)
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    var_0var_1var_2var_3target
    00.443639-0.288128-0.0497320.2889150.325872
    1-0.047608-0.0097380.0567680.5413950.017496
    2-0.2439720.1022270.3613870.6283970.049012
    3-0.7212660.0451040.7240620.9406930.510875
    4-0.6412690.1419270.7938371.1589030.417040
    ..................
    953.4881172.3455120.7454830.2585682.468550
    963.1870061.9458440.8332280.5111982.115330
    973.0198621.7398020.4887320.8813242.387837
    983.3142471.9920000.1192300.7977942.327720
    993.3945782.0124580.0032440.3871252.345970
    + +

    100 rows × 5 columns

    +
    +
    +
    +
    +
    seq_len = 100
    +n_vars = 5
    +
    +t = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)
    +print(t.shape)
    +columns=[f'var_{i}' for i in range(n_vars-1)] + ['target']
    +df = pd.DataFrame(t, columns=columns).T
    +display(df)
    +X, y = SlidingWindow(5, stride=1, horizon=0, get_x=columns[:-1], get_y='target', seq_first=False)(df)
    +test_eq(X[0].shape, (n_vars-1, wl))
    +test_eq(y[0].shape, ())
    +print(X.shape, y.shape)
    +
    +
    (100, 5)
    +(96, 4, 5) (96,)
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    0123456789...90919293949596979899
    var_0-0.407162-0.742169-1.193053-1.058644-0.721243-1.056788-1.316226-1.247859-1.391482-1.258618...-2.847911-3.118643-3.444248-3.036050-2.664068-2.473782-2.508080-2.878210-2.841170-2.688932
    var_10.111643-0.286318-0.221917-0.026094-0.332200-0.376518-0.1447630.2253610.4871340.435856...1.5691581.2945481.5644551.5012431.4909281.4506021.4407301.7556071.3809861.236284
    var_2-0.126951-0.484267-0.480375-0.706987-0.571379-0.561959-0.717696-0.586035-0.298053-0.047405...-1.748096-1.508691-1.158258-1.116485-1.153738-1.575450-1.875091-1.613255-1.274859-1.592096
    var_3-0.462238-0.748774-0.625473-0.360442-0.789178-0.530832-0.785290-0.4134520.083685-0.110964...-4.873450-4.382297-4.531454-4.087051-4.087801-4.391084-4.262526-4.650170-4.465874-4.535273
    target0.2414540.084139-0.0129740.0963280.5010350.6970430.2291850.4974300.5529220.218345...-4.582426-4.194067-3.785398-3.808516-3.629740-3.398645-3.828007-3.600028-3.614195-3.592783
    + +

    5 rows × 100 columns

    +
    +
    +
    +
    +
    seq_len = 100
    +n_vars = 5
    +t = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)
    +print(t.shape)
    +columns=[f'var_{i}' for i in range(n_vars-1)] + ['target']
    +df = pd.DataFrame(t, columns=columns).T
    +display(df)
    +X, y = SlidingWindow(5, stride=None, horizon=0, get_x=columns[:-1], get_y='target', seq_first=False)(df)
    +test_eq(X[0].shape, (n_vars-1, wl))
    +test_eq(y[0].shape, ())
    +print(X.shape, y.shape)
    +
    +
    (100, 5)
    +(20, 4, 5) (20,)
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    0123456789...90919293949596979899
    var_00.210943-0.264863-0.3079420.176782-0.1882440.1188240.5933530.6114080.1763960.566034...-4.738294-5.138743-5.203979-4.835758-4.534974-4.310112-4.366365-4.328250-4.527717-4.432726
    var_1-0.086375-0.4574130.0255710.4282560.6115730.319714-0.0851290.1617350.052730-0.356617...7.2035397.3005347.2679546.8389237.0541346.6125327.1082696.9660007.4079157.332567
    var_20.166139-0.231839-0.468804-0.565628-0.500941-0.706951-0.881385-1.138549-0.978276-0.952727...0.3919420.8023560.3956880.0332880.1472830.5899110.3608470.3220190.4781200.278228
    var_3-0.234297-0.467480-0.925036-0.572783-0.3455850.149537-0.078098-0.577732-0.771975-0.322283...-1.487032-1.971348-2.300616-2.767312-2.657974-2.880908-2.567235-2.758240-2.605518-2.166444
    target-0.416187-0.164800-0.283554-0.534897-0.896808-0.456572-0.889556-1.178456-0.877891-1.176442...-6.094650-6.510793-6.408799-6.685696-6.672726-6.210781-6.377436-5.974001-5.755187-5.608240
    + +

    5 rows × 100 columns

    +
    +
    +
    +
    +
    from tsai.data.validation import TrainValidTestSplitter
    +
    +
    +
    seq_len = 100
    +n_vars = 5
    +t = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)
    +print(t.shape)
    +columns=[f'var_{i}' for i in range(n_vars-1)]+['target']
    +df = pd.DataFrame(t, columns=columns)
    +display(df)
    +X, y = SlidingWindow(5, stride=1, horizon=0, get_x=columns[:-1], get_y='target', seq_first=True)(df)
    +splits = TrainValidTestSplitter(valid_size=.2, shuffle=False)(y)
    +X.shape, y.shape, splits
    +
    +
    (100, 5)
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    var_0var_1var_2var_3target
    00.123248-0.0815960.0994440.447980-0.397975
    10.469671-0.3344990.3078670.141345-0.131085
    20.522902-0.6968170.3865970.1568180.128043
    30.487025-0.966153-0.050574-0.248479-0.088962
    40.396284-1.319821-0.113121-0.3792270.313690
    ..................
    956.138836-1.6029171.7130491.421797-1.873899
    965.892472-1.8969141.4011371.065859-2.239942
    975.421917-1.7285681.4812700.998533-2.157474
    985.763120-1.4043301.9313611.295956-1.934397
    995.827842-1.7624381.8317121.014259-1.831573
    + +

    100 rows × 5 columns

    +
    +
    +
    +
    ((96, 4, 5),
    + (96,),
    + ((#77) [0,1,2,3,4,5,6,7,8,9...], (#19) [77,78,79,80,81,82,83,84,85,86...]))
    +
    +
    +
    +
    data = np.concatenate([np.linspace(0, 1, 11).reshape(-1,1).repeat(2, 1), np.arange(11).reshape(-1,1)], -1)
    +df_test = pd.DataFrame(data, columns=['col1', 'col2', 'target'])
    +df_test['target'] = df_test['target'].astype(int)
    +df_test
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    col1col2target
    00.00.00
    10.10.11
    20.20.22
    30.30.33
    40.40.44
    50.50.55
    60.60.66
    70.70.77
    80.80.88
    90.90.99
    101.01.010
    + +
    +
    +
    +
    +
    def _y_func(o): return o[:, 0]
    +
    +
    +
    for wl in np.arange(1, 20):
    +    x, y = SlidingWindow(wl, None, pad_remainder=True, get_x=['col1', 'col2'], get_y=['target'], horizon=-wl, y_func=_y_func)(df_test)
    +    test_eq(x.shape[0], math.ceil((len(df_test))/wl))
    +    test_eq(x.shape[0], y.shape[0])
    +    test_eq(x.shape[2], wl)
    +    test_close(x[:, 0, 0]*10, y)
    +
    +
    +
    for wl in np.arange(1, 20):
    +    x, y = SlidingWindow(wl, None, pad_remainder=True, get_x=['col1', 'col2'], get_y=['target'], horizon=-wl, y_func=None)(df_test)
    +    test_eq(x.shape[0], math.ceil((len(df_test))/ wl))
    +    test_eq(x.shape[0], y.shape[0])
    +    test_eq(x.shape[2], wl)
    +
    +
    +
    for wl in np.arange(1, len(df_test)+1):
    +    x, y = SlidingWindow(wl, None, pad_remainder=False, get_x=['col1', 'col2'], get_y=['target'], horizon=-wl, y_func=None)(df_test)
    +    test_eq(x.shape[0], len(df_test) // wl)
    +    test_eq(x.shape[0], y.shape[0])
    +    test_eq(x.shape[2], wl)
    +
    +
    +
    for wl in np.arange(1, 20):
    +    x, _ = SlidingWindow(wl, None, pad_remainder=True, get_x=['col1', 'col2'], get_y=[], horizon=0)(df_test)
    +    test_eq(x.shape[0], math.ceil((len(df_test))/wl))
    +    test_eq(x.shape[2], wl)
    +
    +
    +
    for wl in np.arange(2, len(df_test)):
    +    x, _ = SlidingWindow(wl, wl, pad_remainder=False, get_x=['col1', 'col2'], get_y=[], horizon=0)(df_test)
    +    test_eq(x.shape[0], len(df_test) // wl)
    +    test_eq(x.shape[2], wl)
    +
    +
    +
    df = pd.DataFrame()
    +df['sample_id'] = np.concatenate([np.ones(n)*(i + 1) for i,n in enumerate([13])])
    +df['var1'] = df['sample_id'] + df.index.values - 1
    +df['var2'] = df['var1'] * 10
    +df['target'] = (df['var1']).astype(int)
    +df['sample_id'] = df['sample_id'].astype(int)
    +df
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sample_idvar1var2target
    010.00.00
    111.010.01
    212.020.02
    313.030.03
    414.040.04
    515.050.05
    616.060.06
    717.070.07
    818.080.08
    919.090.09
    10110.0100.010
    11111.0110.011
    12112.0120.012
    + +
    +
    +
    +
    +
    X, y = SlidingWindow(window_len=3, stride=2, start=3, pad_remainder=False, padding="pre", padding_value=np.nan, add_padding_feature=False,
    +                     get_x=["var1", "var2"], get_y=["target"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,
    +                     ascending=True, check_leakage=True)(df)
    +test_eq(X.shape, (2, 2, 3))
    +test_eq(y.shape, (2, 4))
    +X, y
    +
    +
    (array([[[ 4.,  5.,  6.],
    +         [40., 50., 60.]],
    + 
    +        [[ 6.,  7.,  8.],
    +         [60., 70., 80.]]]),
    + array([[ 7,  8,  9, 10],
    +        [ 9, 10, 11, 12]]))
    +
    +
    +
    +
    X, y = SlidingWindow(window_len=3, stride=2, start=3, pad_remainder=True, padding="pre", padding_value=np.nan, add_padding_feature=False,
    +                     get_x=["var1", "var2"], get_y=["target"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,
    +                     ascending=True, check_leakage=True)(df)
    +test_eq(X.shape, (3, 2, 3))
    +test_eq(y.shape, (3, 4))
    +X, y
    +
    +
    (array([[[nan,  3.,  4.],
    +         [nan, 30., 40.]],
    + 
    +        [[ 4.,  5.,  6.],
    +         [40., 50., 60.]],
    + 
    +        [[ 6.,  7.,  8.],
    +         [60., 70., 80.]]]),
    + array([[ 5,  6,  7,  8],
    +        [ 7,  8,  9, 10],
    +        [ 9, 10, 11, 12]]))
    +
    +
    +
    +
    X, y = SlidingWindow(window_len=3, stride=2, start=3, pad_remainder=False, padding="post", padding_value=np.nan, add_padding_feature=False,
    +                     get_x=["var1", "var2"], get_y=["target"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,
    +                     ascending=True, check_leakage=True)(df)
    +test_eq(X.shape, (2, 2, 3))
    +test_eq(y.shape, (2, 4))
    +X, y
    +
    +
    (array([[[ 3.,  4.,  5.],
    +         [30., 40., 50.]],
    + 
    +        [[ 5.,  6.,  7.],
    +         [50., 60., 70.]]]),
    + array([[ 6,  7,  8,  9],
    +        [ 8,  9, 10, 11]]))
    +
    +
    +
    +
    X, y = SlidingWindow(window_len=3, stride=2, start=3, pad_remainder=True, padding="post", padding_value=np.nan, add_padding_feature=False,
    +                     get_x=["var1", "var2"], get_y=["target"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,
    +                     ascending=True, check_leakage=True)(df)
    +test_eq(X.shape, (3, 2, 3))
    +test_eq(y.shape, (3, 4))
    +X, y
    +
    +
    (array([[[ 3.,  4.,  5.],
    +         [30., 40., 50.]],
    + 
    +        [[ 5.,  6.,  7.],
    +         [50., 60., 70.]],
    + 
    +        [[ 7.,  8.,  9.],
    +         [70., 80., 90.]]]),
    + array([[ 6.,  7.,  8.,  9.],
    +        [ 8.,  9., 10., 11.],
    +        [10., 11., 12., nan]]))
    +
    +
    +
    +
    X, y = SlidingWindow(window_len=10, stride=2, start=3, pad_remainder=True, padding="pre", padding_value=np.nan, add_padding_feature=False,
    +                     get_x=["var1", "var2"], get_y=["target"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,
    +                     ascending=True, check_leakage=True)(df)
    +test_eq(X.shape, (1, 2, 10))
    +test_eq(y.shape, (1, 4))
    +X, y
    +
    +
    (array([[[nan, nan, nan, nan,  3.,  4.,  5.,  6.,  7.,  8.],
    +         [nan, nan, nan, nan, 30., 40., 50., 60., 70., 80.]]]),
    + array([[ 9, 10, 11, 12]]))
    +
    +
    +
    +
    X, y = SlidingWindow(window_len=10, stride=2, start=3, pad_remainder=True, padding="post", padding_value=np.nan, add_padding_feature=False,
    +                     get_x=["var1", "var2"], get_y=["target"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,
    +                     ascending=True, check_leakage=True)(df)
    +test_eq(X.shape, (1, 2, 10))
    +test_eq(y.shape, (1, 4))
    +X, y
    +
    +
    (array([[[  3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,  11.,  12.],
    +         [ 30.,  40.,  50.,  60.,  70.,  80.,  90., 100., 110., 120.]]]),
    + array([[nan, nan, nan, nan]]))
    +
    +
    +
    +

    source

    +
    +
    +

    SlidingWindowPanel

    +
    +
     SlidingWindowPanel (window_len:int, unique_id_cols:list,
    +                     stride:Optional[int]=1, start:int=0,
    +                     pad_remainder:bool=False, padding:str='post',
    +                     padding_value:float=nan,
    +                     add_padding_feature:bool=True,
    +                     get_x:Union[NoneType,int,list]=None,
    +                     get_y:Union[NoneType,int,list]=None,
    +                     y_func:Optional[<built-infunctioncallable>]=None,
    +                     output_processor:Optional[<built-
    +                     infunctioncallable>]=None, copy:bool=False,
    +                     horizon:Union[int,list]=1, seq_first:bool=True,
    +                     sort_by:Optional[list]=None, ascending:bool=True,
    +                     check_leakage:bool=True, return_key:bool=False,
    +                     verbose:bool=True)
    +
    +

    Applies a sliding window to a pd.DataFrame.

    +

    Args: window_len = length of lookback window unique_id_cols = pd.DataFrame columns that will be used to identify a time series for each entity. stride = n datapoints the window is moved ahead along the sequence. Default: 1. If None, stride=window_len (no overlap) start = determines the step where the first window is applied: 0 (default), a given step (int), or random within the 1st stride (None). pad_remainder = allows to pad remainder subsequences when the sliding window is applied and get_y == [] (unlabeled data). padding = ‘pre’ or ‘post’ (optional, defaults to ‘pre’): pad either before or after each sequence. If pad_remainder == False, it indicates the starting point to create the sequence (‘pre’ from the end, and ‘post’ from the beginning) padding_value = value (float) that will be used for padding. Default: np.nan add_padding_feature = add an additional feature indicating whether each timestep is padded (1) or not (0). horizon = number of future datapoints to predict (y). If get_y is [] horizon will be set to 0. * 0 for last step in each sub-window. * n > 0 for a range of n future steps (1 to n). * n < 0 for a range of n past steps (-n + 1 to 0). * list : for those exact timesteps. get_x = indices of columns that contain the independent variable (xs). If None, all data will be used as x. get_y = indices of columns that contain the target (ys). If None, all data will be used as y. [] means no y data is created (unlabeled data). y_func = function to calculate the ys based on the get_y col/s and each y sub-window. y_func must be a function applied to axis=1! output_processor = optional function to filter output (X (and y if available)). This is useful when some values need to be removed. The function should take X and y (even if it’s None) as arguments. copy = copy the original object to avoid changes in it. seq_first = True if input shape (seq_len, n_vars), False if input shape (n_vars, seq_len) sort_by = column/s used for sorting the array in ascending order ascending = used in sorting check_leakage = checks if there’s leakage in the output between X and y return_key = when True, the key corresponsing to unique_id_cols for each sample is returned verbose = controls verbosity. True or 1 displays progress bar. 2 or more show records that cannot be created due to its length.

    +

    Input: You can use np.ndarray, pd.DataFrame or torch.Tensor as input shape: (seq_len, ) or (seq_len, n_vars) if seq_first=True else (n_vars, seq_len)

    +
    +
    samples = 100_000
    +wl = 5
    +n_vars = 10
    +
    +t = (torch.stack(n_vars * [torch.arange(samples)]).T * tensor([10**i for i in range(n_vars)]))
    +df = pd.DataFrame(t, columns=[f'var_{i}' for i in range(n_vars)])
    +df['time'] = np.arange(len(t))
    +df['device'] = 0
    +df['target'] = np.random.randint(0, 2, len(df))
    +df2 = df.copy()
    +df3 = df.copy()
    +cols = ['var_0', 'var_1', 'var_2', 'device', 'target']
    +df2[cols] = df2[cols] + 1
    +df3[cols] = df3[cols] + 2
    +df2 = df2.loc[:3]
    +df['region'] = 'A'
    +df2['region'] = 'A'
    +df3['region'] = 'B'
    +df = pd.concat([df, df2, df3], ignore_index=True)
    +df['index'] = np.arange(len(df))
    +df = df.sample(frac=1).reset_index(drop=True)
    +display(df.head())
    +df.shape
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    var_0var_1var_2var_3var_4var_5var_6var_7var_8var_9timedevicetargetregionindex
    0860088600808600800860080008600800008600800000860080000008600800000008600800000000860080000000008600800A86008
    1900039000129000102900010009000100009000100000900010000009000100000009000100000000900010000000009000122B190005
    2438194381724381702438170004381700004381700000438170000004381700000004381700000000438170000000004381723B143821
    3807518074928074902807490008074900008074900000807490000008074900000008074900000000807490000000008074923B180753
    4849178491528491502849150008491500008491500000849150000008491500000008491500000000849150000000008491523B184919
    + +
    +
    +
    +
    (200004, 15)
    +
    +
    +
    +
    X, y = SlidingWindowPanel(window_len=5, unique_id_cols=['device'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], 
    +                          horizon=0, seq_first=True, sort_by=['time'], ascending=True, return_key=False)(df)
    +X.shape, y.shape
    +
    +
    processing data...
    +...data processed
    +concatenating X...
    +...X concatenated
    +concatenating y...
    +...y concatenated
    +
    +
    + + +
    +
    + +
    +
    +
    ((199992, 10, 5), (199992,))
    +
    +
    +
    +
    X, y, key = SlidingWindowPanel(window_len=5, unique_id_cols=['device'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], 
    +                               horizon=0, seq_first=True, sort_by=['time'], ascending=True, return_key=True)(df)
    +X.shape, y.shape, key.shape
    +
    +
    processing data...
    +...data processed
    +concatenating X...
    +...X concatenated
    +concatenating y...
    +...y concatenated
    +
    +
    + + +
    +
    + +
    +
    +
    ((199992, 10, 5), (199992,), (199992,))
    +
    +
    +
    +
    X, y = SlidingWindowPanel(window_len=5, unique_id_cols=['device', 'region'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], 
    +                          horizon=0, seq_first=True, sort_by=['time'], ascending=True)(df)
    +X.shape, y.shape
    +
    +
    processing data...
    +...data processed
    +concatenating X...
    +...X concatenated
    +concatenating y...
    +...y concatenated
    +
    +
    + + +
    +
    + +
    +
    +
    ((199992, 10, 5), (199992,))
    +
    +
    +
    +
    # y_func must be a function applied to axis=1!
    +def y_max(o): return np.max(o, axis=1)
    +
    +
    +
    X, y = SlidingWindowPanel(window_len=5, unique_id_cols=['device', 'region'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], 
    +                          y_func=y_max, horizon=5, seq_first=True, sort_by=['time'], ascending=True)(df)
    +X.shape, y.shape
    +
    +
    processing data...
    +...data processed
    +concatenating X...
    +...X concatenated
    +concatenating y...
    +...y concatenated
    +
    +
    + + +
    +
    + +
    + + 0.00% [0/3 00:00<?] +
    + +
    +
    +
    ((199982, 10, 5), (199982,))
    +
    +
    +
    +

    source

    +
    +
    +

    identify_padding

    +
    +
     identify_padding (float_mask, value=-1)
    +
    +

    Identifies padded subsequences in a mask of type float

    +

    This function identifies as padded subsequences those where all values == nan from the end of the sequence (last dimension) across all channels, and sets those values to the selected value (default = -1)

    +

    Args: mask: boolean or float mask value: scalar that will be used to identify padded subsequences

    +
    +
    wl = 5
    +stride = 5
    +
    +t = np.repeat(np.arange(13).reshape(-1,1), 3, axis=-1)
    +print('input shape:', t.shape)
    +X, _ = SlidingWindow(wl, stride=stride, pad_remainder=True, get_y=[])(t)
    +X = tensor(X)
    +X[0, 1, -2:] = np.nan
    +X[1,..., :3] = np.nan
    +print(X)
    +identify_padding(torch.isnan(X).float())
    +
    +
    input shape: (13, 3)
    +tensor([[[ 0.,  1.,  2.,  3.,  4.],
    +         [ 0.,  1.,  2., nan, nan],
    +         [ 0.,  1.,  2.,  3.,  4.],
    +         [ 0.,  0.,  0.,  0.,  0.]],
    +
    +        [[nan, nan, nan,  8.,  9.],
    +         [nan, nan, nan,  8.,  9.],
    +         [nan, nan, nan,  8.,  9.],
    +         [nan, nan, nan,  0.,  0.]],
    +
    +        [[10., 11., 12., nan, nan],
    +         [10., 11., 12., nan, nan],
    +         [10., 11., 12., nan, nan],
    +         [ 0.,  0.,  0.,  1.,  1.]]])
    +
    +
    +
    tensor([[[0., 0., 0., 0., 0.],
    +         [0., 0., 0., 1., 1.],
    +         [0., 0., 0., 0., 0.],
    +         [0., 0., 0., 0., 0.]],
    +
    +        [[1., 1., 1., 0., 0.],
    +         [1., 1., 1., 0., 0.],
    +         [1., 1., 1., 0., 0.],
    +         [1., 1., 1., 0., 0.]],
    +
    +        [[0., 0., 0., 1., 1.],
    +         [0., 0., 0., 1., 1.],
    +         [0., 0., 0., 1., 1.],
    +         [0., 0., 0., 0., 0.]]])
    +
    +
    +
    +
    +

    Forecasting data preparation

    +
    +

    source

    +
    +

    basic_data_preparation_fn

    +
    +
     basic_data_preparation_fn (df, drop_duplicates=True, datetime_col=None,
    +                            use_index=False, keep='last',
    +                            add_missing_datetimes=True, freq='1D',
    +                            method=None, sort_by=None)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dfdataframe to preprocess
    drop_duplicatesboolTrueflag to indicate if rows with duplicate datetime info should be removed
    datetime_colNoneTypeNonestr indicating the name of the column/s that contains the datetime info
    use_indexboolFalseflag to indicate if the datetime info is in the index
    keepstrlaststr to indicate what data should be kept in case of duplicate rows
    add_missing_datetimesboolTrueflaf to indicate if missing datetimes should be added
    freqstr1Dstr to indicate the frequency used in the datetime info. Used in case missing timestamps exists
    methodNoneTypeNonestr indicating the method used to fill data for missing timestamps: None, ‘bfill’, ‘ffill’
    sort_byNoneTypeNonestr or list of str to indicate if how to sort data. If use_index=True the index will be used to sort the dataframe.
    +
    +
    df_len = 100
    +datetime_col = 'datetime' 
    +df = pd.DataFrame(np.arange(df_len), columns=['value'])
    +df['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df_len, freq='1D')
    +df['type'] = 1
    +# drop 10 rows at random
    +df = df.drop(df.sample(10).index)
    +# add 2 duplicated rows
    +df = pd.concat([df, df.sample(2)])
    +display(df)
    +
    +new_df = basic_data_preparation_fn(df, drop_duplicates=True, datetime_col=datetime_col, use_index=False, keep='last', 
    +                                   add_missing_datetimes=True, freq='1D', method='ffill', sort_by=datetime_col)
    +display(new_df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    valuedatetimetype
    001749-03-311
    111749-04-011
    331749-04-031
    441749-04-041
    551749-04-051
    ............
    96961749-07-051
    97971749-07-061
    99991749-07-081
    001749-03-311
    19191749-04-191
    + +

    92 rows × 3 columns

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    valuedatetimetype
    001749-03-311
    111749-04-011
    211749-04-021
    331749-04-031
    441749-04-041
    ............
    95951749-07-041
    96961749-07-051
    97971749-07-061
    98971749-07-071
    99991749-07-081
    + +

    100 rows × 3 columns

    +
    +
    +
    +
    +

    source

    +
    +
    +

    check_safe_conversion

    +
    +
     check_safe_conversion (o, dtype='float32', cols=None)
    +
    +

    Checks if the conversion to float is safe

    +
    +
    assert check_safe_conversion(-2**11, 'float16') == True
    +assert check_safe_conversion(-2**11 - 1, 'float16') == False
    +assert check_safe_conversion(2**24, 'float32') == True
    +assert check_safe_conversion(2**24+1, 'float32') == False
    +assert check_safe_conversion(2**53, 'float64') == True
    +assert check_safe_conversion(2**53+1, 'float64') == False
    +
    +df = pd.DataFrame({'a': [1, 2, 3], 'b': [2**24, 2**24+1, 2**24+2]})
    +assert not check_safe_conversion(df, 'float32')
    +assert check_safe_conversion(df, 'int32')
    +assert check_safe_conversion(df, 'float32', cols='a')
    +assert not check_safe_conversion(df, 'float32', cols='b')
    +
    +
    -2147483648 1 3 2147483647
    +-2147483648 16777216 16777218 2147483647
    +
    +
    +
    /var/folders/42/4hhwknbd5kzcbq48tmy_gbp00000gn/T/ipykernel_30986/657350933.py:39: UserWarning: Unsafe conversion to float32: {'a': True, 'b': False}
    +  warnings.warn(f"Unsafe conversion to {dtype}: {dict(zip(cols, checks))}")
    +/var/folders/42/4hhwknbd5kzcbq48tmy_gbp00000gn/T/ipykernel_30986/657350933.py:39: UserWarning: Unsafe conversion to float32: {'b': False}
    +  warnings.warn(f"Unsafe conversion to {dtype}: {dict(zip(cols, checks))}")
    +
    +
    +
    +

    source

    +
    +
    +

    prepare_forecasting_data

    +
    +
    from tsai.data.validation import get_forecasting_splits
    +
    +
    +
    fcst_history = 10 
    +fcst_horizon = 5
    +stride = 1
    +valid_size=0.2
    +test_size=0.2
    +
    +df = pd.DataFrame()
    +df['target'] = np.arange(50)
    +
    +X, y = prepare_forecasting_data(df, fcst_history, fcst_horizon)
    +splits = get_forecasting_splits(df, fcst_history, fcst_horizon, valid_size=valid_size, test_size=test_size, stride=stride, show_plot=False)
    +assert y[splits[0]][-1][0][-1] == y[splits[1]][0][0][0] - stride
    +assert y[splits[1]][-1][0][-1] == y[splits[2]][0][0][0] - stride
    +for s,t in zip(splits, ['\ntrain_split:', '\nvalid_split:', '\ntest_split :']):
    +    print(t)
    +    for xi, yi in zip(X[s], y[s]):
    +        print(xi, yi)
    +
    +
    
    +train_split:
    +[[0 1 2 3 4 5 6 7 8 9]] [[10 11 12 13 14]]
    +[[ 1  2  3  4  5  6  7  8  9 10]] [[11 12 13 14 15]]
    +[[ 2  3  4  5  6  7  8  9 10 11]] [[12 13 14 15 16]]
    +[[ 3  4  5  6  7  8  9 10 11 12]] [[13 14 15 16 17]]
    +[[ 4  5  6  7  8  9 10 11 12 13]] [[14 15 16 17 18]]
    +[[ 5  6  7  8  9 10 11 12 13 14]] [[15 16 17 18 19]]
    +[[ 6  7  8  9 10 11 12 13 14 15]] [[16 17 18 19 20]]
    +[[ 7  8  9 10 11 12 13 14 15 16]] [[17 18 19 20 21]]
    +[[ 8  9 10 11 12 13 14 15 16 17]] [[18 19 20 21 22]]
    +[[ 9 10 11 12 13 14 15 16 17 18]] [[19 20 21 22 23]]
    +[[10 11 12 13 14 15 16 17 18 19]] [[20 21 22 23 24]]
    +[[11 12 13 14 15 16 17 18 19 20]] [[21 22 23 24 25]]
    +[[12 13 14 15 16 17 18 19 20 21]] [[22 23 24 25 26]]
    +[[13 14 15 16 17 18 19 20 21 22]] [[23 24 25 26 27]]
    +[[14 15 16 17 18 19 20 21 22 23]] [[24 25 26 27 28]]
    +[[15 16 17 18 19 20 21 22 23 24]] [[25 26 27 28 29]]
    +
    +valid_split:
    +[[20 21 22 23 24 25 26 27 28 29]] [[30 31 32 33 34]]
    +[[21 22 23 24 25 26 27 28 29 30]] [[31 32 33 34 35]]
    +[[22 23 24 25 26 27 28 29 30 31]] [[32 33 34 35 36]]
    +[[23 24 25 26 27 28 29 30 31 32]] [[33 34 35 36 37]]
    +[[24 25 26 27 28 29 30 31 32 33]] [[34 35 36 37 38]]
    +[[25 26 27 28 29 30 31 32 33 34]] [[35 36 37 38 39]]
    +
    +test_split :
    +[[30 31 32 33 34 35 36 37 38 39]] [[40 41 42 43 44]]
    +[[31 32 33 34 35 36 37 38 39 40]] [[41 42 43 44 45]]
    +[[32 33 34 35 36 37 38 39 40 41]] [[42 43 44 45 46]]
    +[[33 34 35 36 37 38 39 40 41 42]] [[43 44 45 46 47]]
    +[[34 35 36 37 38 39 40 41 42 43]] [[44 45 46 47 48]]
    +[[35 36 37 38 39 40 41 42 43 44]] [[45 46 47 48 49]]
    +
    +
    +
    +
    fcst_history = 10 
    +fcst_horizon = 5
    +stride = 1
    +valid_size=0.2
    +test_size=0.2
    +
    +df = pd.DataFrame()
    +df['target'] = np.arange(50)
    +
    +X, y = prepare_forecasting_data(df, fcst_history, fcst_horizon, x_vars=None, y_vars=[])
    +splits = get_forecasting_splits(df, fcst_history, fcst_horizon, valid_size=valid_size, test_size=test_size, stride=stride, show_plot=False)
    +assert y is None
    +
    +
    +
    df_len = 100
    +n_values = 3
    +datetime_col = 'datetime' 
    +df = pd.DataFrame()
    +for i in range(n_values):
    +    df[f"value_{i}"] = (np.arange(df_len) * 10**i).astype(np.float32)
    +display(df)
    +
    +fcst_history = 10
    +fcst_horizon = 5
    +x_vars = df.columns
    +y_vars = None
    +dtype = None
    +
    +X, y = prepare_forecasting_data(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, x_vars=x_vars, y_vars=y_vars, dtype=dtype)
    +test_eq(X.shape, (86, 3, 10))
    +test_eq(y.shape, (86, 3, 5))
    +test_eq(y[:3, :, 0],  X[:3, :, -1] + np.array([1, 10, 100]).reshape(1, 1, -1))
    +print(X[:3].astype(int))
    +print(y[:3].astype(int))
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    value_0value_1value_2
    00.00.00.0
    11.010.0100.0
    22.020.0200.0
    33.030.0300.0
    44.040.0400.0
    ............
    9595.0950.09500.0
    9696.0960.09600.0
    9797.0970.09700.0
    9898.0980.09800.0
    9999.0990.09900.0
    + +

    100 rows × 3 columns

    +
    +
    +
    +
    [[[   0    1    2    3    4    5    6    7    8    9]
    +  [   0   10   20   30   40   50   60   70   80   90]
    +  [   0  100  200  300  400  500  600  700  800  900]]
    +
    + [[   1    2    3    4    5    6    7    8    9   10]
    +  [  10   20   30   40   50   60   70   80   90  100]
    +  [ 100  200  300  400  500  600  700  800  900 1000]]
    +
    + [[   2    3    4    5    6    7    8    9   10   11]
    +  [  20   30   40   50   60   70   80   90  100  110]
    +  [ 200  300  400  500  600  700  800  900 1000 1100]]]
    +[[[  10   11   12   13   14]
    +  [ 100  110  120  130  140]
    +  [1000 1100 1200 1300 1400]]
    +
    + [[  11   12   13   14   15]
    +  [ 110  120  130  140  150]
    +  [1100 1200 1300 1400 1500]]
    +
    + [[  12   13   14   15   16]
    +  [ 120  130  140  150  160]
    +  [1200 1300 1400 1500 1600]]]
    +
    +
    +
    +
    df_len = 100
    +n_values = 3
    +datetime_col = 'datetime' 
    +df = pd.DataFrame()
    +for i in range(n_values):
    +    df[f"value_{i}"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)
    +
    +df['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df_len, freq='1D')
    +df['type'] = np.random.randint(0, 4, df_len)
    +df['target'] = np.arange(df_len)
    +display(df)
    +
    +fcst_history = 10
    +fcst_horizon = 5
    +x_vars = ['value_0', 'value_1', 'value_2', 'target']
    +y_vars = 'target'
    +dtype = np.float32
    +
    +X, y = prepare_forecasting_data(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, x_vars=x_vars, y_vars=y_vars, dtype=dtype)
    +test_eq(X.shape, (86, 4, 10))
    +test_eq(y.shape, (86, 1, 5))
    +print(X[:3].astype(int))
    +print(y[:3])
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    value_0value_1value_2datetimetypetarget
    00.00.00.01749-03-3130
    110.0100.01000.01749-04-0111
    220.0200.02000.01749-04-0212
    330.0300.03000.01749-04-0313
    440.0400.04000.01749-04-0424
    .....................
    95950.09500.095000.01749-07-04095
    96960.09600.096000.01749-07-05096
    97970.09700.097000.01749-07-06397
    98980.09800.098000.01749-07-07298
    99990.09900.099000.01749-07-08199
    + +

    100 rows × 6 columns

    +
    +
    +
    +
    [[[    0    10    20    30    40    50    60    70    80    90]
    +  [    0   100   200   300   400   500   600   700   800   900]
    +  [    0  1000  2000  3000  4000  5000  6000  7000  8000  9000]
    +  [    0     1     2     3     4     5     6     7     8     9]]
    +
    + [[   10    20    30    40    50    60    70    80    90   100]
    +  [  100   200   300   400   500   600   700   800   900  1000]
    +  [ 1000  2000  3000  4000  5000  6000  7000  8000  9000 10000]
    +  [    1     2     3     4     5     6     7     8     9    10]]
    +
    + [[   20    30    40    50    60    70    80    90   100   110]
    +  [  200   300   400   500   600   700   800   900  1000  1100]
    +  [ 2000  3000  4000  5000  6000  7000  8000  9000 10000 11000]
    +  [    2     3     4     5     6     7     8     9    10    11]]]
    +[[[10. 11. 12. 13. 14.]]
    +
    + [[11. 12. 13. 14. 15.]]
    +
    + [[12. 13. 14. 15. 16.]]]
    +
    +
    +
    +

    source

    +
    +
    +

    get_today

    +
    +
     get_today (datetime_format='%Y-%m-%d')
    +
    +
    +
    test_eq(get_today(), dt.datetime.today().strftime("%Y-%m-%d"))
    +
    +
    +

    source

    +
    +
    +

    split_fcst_datetime

    +
    +
     split_fcst_datetime (fcst_datetime)
    +
    +

    Define fcst start and end dates

    + + + + + + + + + + + + + +
    Details
    fcst_datetimestr or list of str with datetime
    +
    +
    test_eq(split_fcst_datetime(None), (None, None))
    +test_eq(split_fcst_datetime('2020-01-01'), ('2020-01-01', '2020-01-01'))
    +test_eq(split_fcst_datetime(['2019-01-01', '2020-01-01']), ['2019-01-01', '2020-01-01'])
    +
    +
    +

    source

    +
    +
    +

    set_df_datetime

    +
    +
     set_df_datetime (df, datetime_col=None, use_index=False)
    +
    +

    Make sure datetime column or index is of the right date type.

    +
    +
    # Test
    +df_len = 100
    +n_values = 3
    +datetime_col = 'datetime'
    +df = pd.DataFrame()
    +for i in range(n_values):
    +    df[f"value_{i}"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)
    +df['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df_len, freq='1D')
    +set_df_datetime(df, datetime_col=datetime_col)
    +test_eq(df['datetime'].dtypes, np.dtype('datetime64[ns]'))
    +df_index = df.set_index('datetime')
    +set_df_datetime(df_index, use_index=True)
    +test_eq(df_index.index.dtype, np.dtype('datetime64[ns]'))
    +
    +
    +

    source

    +
    +
    +

    get_df_datetime_bounds

    +
    +
     get_df_datetime_bounds (df, datetime_col=None, use_index=False)
    +
    +

    Returns the start date and and dates used by the forecast

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dfdataframe containing forecasting data
    datetime_colNoneTypeNonestr data column containing the datetime
    use_indexboolFalsebool flag to indicate if index should be used to get column
    +
    +
    # Test
    +df_len = 100
    +n_values = 3
    +datetime_col = 'datetime'
    +df = pd.DataFrame()
    +for i in range(n_values):
    +    df[f"value_{i}"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)
    +df['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df_len, freq='1D')
    +test_eq(get_df_datetime_bounds(df, datetime_col=datetime_col), (df['datetime'].min(), df['datetime'].max()))
    +df_index = df.set_index('datetime')
    +test_eq(get_df_datetime_bounds(df_index, use_index=True), (df_index.index.min(), df_index.index.max()))
    +
    +
    +

    source

    +
    +
    +

    get_fcst_bounds

    +
    +
     get_fcst_bounds (df, fcst_datetime, fcst_history=None, fcst_horizon=None,
    +                  freq='D', datetime_format='%Y-%m-%d', datetime_col=None,
    +                  use_index=False)
    +
    +

    Returns the start and end datetimes used by the forecast

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dfdataframe containing forecasting data
    fcst_datetimedatetime for which a fcst is created. Optionally tuple of datatimes if the fcst is created for a range of dates.
    fcst_historyNoneTypeNone# steps used as input
    fcst_horizonNoneTypeNone# predicted steps
    freqstrDdatetime units. May contain a letters only or a combination of ints + letters: eg. “7D”
    datetime_formatstr%Y-%m-%dformat used to convert “today”
    datetime_colNoneTypeNonestr data column containing the datetime
    use_indexboolFalsebool flag to indicate if index should be used to get column
    +
    +
    from datetime import timedelta
    +
    +
    +
    # Test
    +df_len = 100
    +n_values = 3
    +datetime_col = 'datetime'
    +df = pd.DataFrame()
    +for i in range(n_values):
    +    df[f"value_{i}"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)
    +freq = "7D"
    +today = pd.Timestamp(get_today()).floor(freq)
    +df['datetime'] = pd.date_range(None, today, periods=df_len, freq=freq)
    +display(df)
    +max_dt = pd.Timestamp(df['datetime'].max()).floor(freq)
    +fcst_history = 30
    +fcst_horizon = 10
    +fcst_datetime = max_dt - timedelta(weeks=fcst_horizon)
    +print('fcst_datetime :', fcst_datetime)
    +start_datetime, end_datetime = get_fcst_bounds(df, fcst_datetime, datetime_col=datetime_col, fcst_history=fcst_history, fcst_horizon=fcst_horizon, freq=freq)
    +print('start_datetime:', start_datetime)
    +print('end_datetime  :', end_datetime)
    +dates = pd.date_range(start_datetime, end_datetime, freq=freq)
    +print(dates)
    +test_eq(len(dates), fcst_history + fcst_horizon)
    +test_eq(end_datetime, max_dt)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    value_0value_1value_2datetime
    00.00.00.02021-11-25
    110.0100.01000.02021-12-02
    220.0200.02000.02021-12-09
    330.0300.03000.02021-12-16
    440.0400.04000.02021-12-23
    ...............
    95950.09500.095000.02023-09-21
    96960.09600.096000.02023-09-28
    97970.09700.097000.02023-10-05
    98980.09800.098000.02023-10-12
    99990.09900.099000.02023-10-19
    + +

    100 rows × 4 columns

    +
    +
    +
    +
    fcst_datetime : 2023-08-10 00:00:00
    +start_datetime: 2023-01-19 00:00:00
    +end_datetime  : 2023-10-19 00:00:00
    +DatetimeIndex(['2023-01-19', '2023-01-26', '2023-02-02', '2023-02-09',
    +               '2023-02-16', '2023-02-23', '2023-03-02', '2023-03-09',
    +               '2023-03-16', '2023-03-23', '2023-03-30', '2023-04-06',
    +               '2023-04-13', '2023-04-20', '2023-04-27', '2023-05-04',
    +               '2023-05-11', '2023-05-18', '2023-05-25', '2023-06-01',
    +               '2023-06-08', '2023-06-15', '2023-06-22', '2023-06-29',
    +               '2023-07-06', '2023-07-13', '2023-07-20', '2023-07-27',
    +               '2023-08-03', '2023-08-10', '2023-08-17', '2023-08-24',
    +               '2023-08-31', '2023-09-07', '2023-09-14', '2023-09-21',
    +               '2023-09-28', '2023-10-05', '2023-10-12', '2023-10-19'],
    +              dtype='datetime64[ns]', freq='7D')
    +
    +
    +
    +

    source

    +
    +
    +

    filter_df_by_datetime

    +
    +
     filter_df_by_datetime (df, start_datetime=None, end_datetime=None,
    +                        datetime_col=None, use_index=False)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dfdataframe containing forecasting data
    start_datetimeNoneTypeNonelower datetime bound
    end_datetimeNoneTypeNoneupper datetime bound
    datetime_colNoneTypeNonestr data column containing the datetime
    use_indexboolFalsebool flag to indicate if index should be used to get column
    +
    +
    # Test
    +df_len = 100
    +n_values = 3
    +datetime_col = 'datetime'
    +df = pd.DataFrame()
    +for i in range(n_values):
    +    df[f"value_{i}"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)
    +freq = "7D"
    +df['datetime'] = pd.date_range(None, pd.Timestamp(get_today()).floor(freq), periods=df_len, freq=freq)
    +display(df)
    +max_dt = pd.Timestamp(df['datetime'].max()).floor(freq)
    +fcst_history = 30
    +fcst_horizon = 10
    +fcst_datetime = pd.date_range(end=fcst_datetime, periods=fcst_horizon + 1, freq=freq).floor(freq)[-1]
    +start_datetime, end_datetime = get_fcst_bounds(df, fcst_datetime, datetime_col=datetime_col, fcst_history=fcst_history, fcst_horizon=fcst_horizon, freq=freq)
    +test_eq(len(filter_df_by_datetime(df, start_datetime=start_datetime, end_datetime=end_datetime, datetime_col=datetime_col)), fcst_history + fcst_horizon)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    value_0value_1value_2datetime
    00.00.00.02021-11-25
    110.0100.01000.02021-12-02
    220.0200.02000.02021-12-09
    330.0300.03000.02021-12-16
    440.0400.04000.02021-12-23
    ...............
    95950.09500.095000.02023-09-21
    96960.09600.096000.02023-09-28
    97970.09700.097000.02023-10-05
    98980.09800.098000.02023-10-12
    99990.09900.099000.02023-10-19
    + +

    100 rows × 4 columns

    +
    +
    +
    +
    +

    source

    +
    +
    +

    get_fcst_data_from_df

    +
    +
     get_fcst_data_from_df (df, fcst_datetime, fcst_history=None,
    +                        fcst_horizon=None, freq='D',
    +                        datetime_format='%Y-%m-%d', datetime_col=None,
    +                        use_index=False)
    +
    +

    Get forecasting data from a dataframe

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dfdataframe containing forecasting data
    fcst_datetimedatetime for which a fcst is created. Optionally tuple of datatimes if the fcst is created for a range of dates.
    fcst_historyNoneTypeNone# steps used as input
    fcst_horizonNoneTypeNone# predicted steps
    freqstrDdatetime units. May contain a letters only or a combination of ints + letters: eg. “7D”
    datetime_formatstr%Y-%m-%dformat used to convert “today”
    datetime_colNoneTypeNonestr data column containing the datetime
    use_indexboolFalsebool flag to indicate if index should be used to get column
    +
    +
    # Test
    +df_len = 100
    +n_values = 3
    +datetime_col = 'datetime'
    +df = pd.DataFrame()
    +for i in range(n_values):
    +    df[f"value_{i}"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)
    +freq = "7D"
    +df['datetime'] = pd.date_range(None, pd.Timestamp(get_today()).floor(freq), periods=df_len, freq=freq)
    +display(df)
    +max_dt = pd.Timestamp(df['datetime'].max()).floor(freq)
    +fcst_history = 30
    +fcst_horizon = 10
    +fcst_datetime = pd.date_range(end=fcst_datetime, periods=fcst_horizon + 1, freq=freq).floor(freq)[-1]
    +test_eq(len(get_fcst_data_from_df(df, fcst_datetime, fcst_history=fcst_history, fcst_horizon=fcst_horizon, freq=freq, datetime_col=datetime_col)), 
    +                                  fcst_history + fcst_horizon)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    value_0value_1value_2datetime
    00.00.00.02021-11-25
    110.0100.01000.02021-12-02
    220.0200.02000.02021-12-09
    330.0300.03000.02021-12-16
    440.0400.04000.02021-12-23
    ...............
    95950.09500.095000.02023-09-21
    96960.09600.096000.02023-09-28
    97970.09700.097000.02023-10-05
    98980.09800.098000.02023-10-12
    99990.09900.099000.02023-10-19
    + +

    100 rows × 4 columns

    +
    +
    +
    + + +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.preprocessing.html b/data.preprocessing.html new file mode 100644 index 000000000..f04c7e70a --- /dev/null +++ b/data.preprocessing.html @@ -0,0 +1,6660 @@ + + + + + + + + + +tsai - Data preprocessing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Data preprocessing

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Functions used to preprocess time series (both X and y).

    +
    +
    +
    from tsai.data.external import get_UCR_data
    +
    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, return_split=False)
    +tfms = [None, Categorize()]
    +dsets = TSDatasets(X, y, tfms=tfms, splits=splits)
    +
    +
    +

    source

    +
    +

    ToNumpyCategory

    +
    +
     ToNumpyCategory (**kwargs)
    +
    +

    Categorize a numpy batch

    +
    +
    t = ToNumpyCategory()
    +y_cat = t(y)
    +y_cat[:10]
    +
    +
    array([3, 2, 2, 3, 2, 4, 0, 5, 2, 1])
    +
    +
    +
    +
    test_eq(t.decode(tensor(y_cat)), y)
    +test_eq(t.decode(np.array(y_cat)), y)
    +
    +
    +

    source

    +
    +
    +

    OneHot

    +
    +
     OneHot (n_classes=None, **kwargs)
    +
    +

    One-hot encode/ decode a batch

    +
    +
    oh_encoder = OneHot()
    +y_cat = ToNumpyCategory()(y)
    +oht = oh_encoder(y_cat)
    +oht[:10]
    +
    +
    array([[0., 0., 0., 1., 0., 0.],
    +       [0., 0., 1., 0., 0., 0.],
    +       [0., 0., 1., 0., 0., 0.],
    +       [0., 0., 0., 1., 0., 0.],
    +       [0., 0., 1., 0., 0., 0.],
    +       [0., 0., 0., 0., 1., 0.],
    +       [1., 0., 0., 0., 0., 0.],
    +       [0., 0., 0., 0., 0., 1.],
    +       [0., 0., 1., 0., 0., 0.],
    +       [0., 1., 0., 0., 0., 0.]])
    +
    +
    +
    +
    n_classes = 10
    +n_samples = 100
    +
    +t = torch.randint(0, n_classes, (n_samples,))
    +oh_encoder = OneHot()
    +oht = oh_encoder(t)
    +test_eq(oht.shape, (n_samples, n_classes))
    +test_eq(torch.argmax(oht, dim=-1), t)
    +test_eq(oh_encoder.decode(oht), t)
    +
    +
    +
    n_classes = 10
    +n_samples = 100
    +
    +a = np.random.randint(0, n_classes, (n_samples,))
    +oh_encoder = OneHot()
    +oha = oh_encoder(a)
    +test_eq(oha.shape, (n_samples, n_classes))
    +test_eq(np.argmax(oha, axis=-1), a)
    +test_eq(oh_encoder.decode(oha), a)
    +
    +
    +

    source

    +
    +
    +

    TSNan2Value

    +
    +
     TSNan2Value (value=0, median=False, by_sample_and_var=True,
    +              sel_vars=None)
    +
    +

    Replaces any nan values by a predefined value or median

    +
    +
    o = TSTensor(torch.randn(16, 10, 100))
    +o[0,0] = float('nan')
    +o[o > .9] = float('nan')
    +o[[0,1,5,8,14,15], :, -20:] = float('nan')
    +nan_vals1 = torch.isnan(o).sum()
    +o2 = Pipeline(TSNan2Value(), split_idx=0)(o.clone())
    +o3 = Pipeline(TSNan2Value(median=True, by_sample_and_var=True), split_idx=0)(o.clone())
    +o4 = Pipeline(TSNan2Value(median=True, by_sample_and_var=False), split_idx=0)(o.clone())
    +nan_vals2 = torch.isnan(o2).sum()
    +nan_vals3 = torch.isnan(o3).sum()
    +nan_vals4 = torch.isnan(o4).sum()
    +test_ne(nan_vals1, 0)
    +test_eq(nan_vals2, 0)
    +test_eq(nan_vals3, 0)
    +test_eq(nan_vals4, 0)
    +
    +
    +
    o = TSTensor(torch.randn(16, 10, 100))
    +o[o > .9] = float('nan')
    +o = TSNan2Value(median=True, sel_vars=[0,1,2,3,4])(o)
    +test_eq(torch.isnan(o[:, [0,1,2,3,4]]).sum().item(), 0)
    +
    +
    +

    source

    +
    +
    +

    TSStandardize

    +
    +
     TSStandardize (mean=None, std=None, by_sample=False, by_var=False,
    +                by_step=False, exc_vars=None, eps=1e-08,
    +                use_single_batch=True, verbose=False, **kwargs)
    +
    +

    Standardizes batch of type TSTensor

    +

    Args: - mean: you can pass a precalculated mean value as a torch tensor which is the one that will be used, or leave as None, in which case it will be estimated using a batch. - std: you can pass a precalculated std value as a torch tensor which is the one that will be used, or leave as None, in which case it will be estimated using a batch. If both mean and std values are passed when instantiating TSStandardize, the rest of arguments won’t be used. - by_sample: if True, it will calculate mean and std for each individual sample. Otherwise based on the entire batch. - by_var: * False: mean and std will be the same for all variables. * True: a mean and std will be be different for each variable. * a list of ints: (like [0,1,3]) a different mean and std will be set for each variable on the list. Variables not included in the list won’t be standardized. * a list that contains a list/lists: (like[0, [1,3]]) a different mean and std will be set for each element of the list. If multiple elements are included in a list, the same mean and std will be set for those variable in the sublist/s. (in the example a mean and std is determined for variable 0, and another one for variables 1 & 3 - the same one). Variables not included in the list won’t be standardized. - by_step: if False, it will standardize values for each time step. - exc_vars: list of variables that won’t be standardized. - eps: it avoids dividing by 0 - use_single_batch: if True a single training batch will be used to calculate mean & std. Else the entire training set will be used.

    +
    +
    batch_tfms=[TSStandardize(by_sample=True, by_var=False, verbose=True)]
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=128, num_workers=0, batch_tfms=batch_tfms)
    +xb, yb = next(iter(dls.train))
    +test_close(xb.mean(), 0, eps=1e-1)
    +test_close(xb.std(), 1, eps=1e-1)
    +
    +
    +
    exc_vars = [0, 2, 6, 8, 12]
    +batch_tfms=[TSStandardize(by_var=True, exc_vars=exc_vars)]
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=128, num_workers=0, batch_tfms=batch_tfms)
    +xb, yb = next(iter(dls.train))
    +test_eq(len(dls.train.after_batch.fs[0].mean.flatten()), 24)
    +test_eq(len(dls.train.after_batch.fs[0].std.flatten()), 24)
    +test_eq(dls.train.after_batch.fs[0].mean.flatten()[exc_vars].cpu(), torch.zeros(len(exc_vars)))
    +test_eq(dls.train.after_batch.fs[0].std.flatten()[exc_vars].cpu(), torch.ones(len(exc_vars)))
    +print(dls.train.after_batch.fs[0].mean.flatten().data)
    +print(dls.train.after_batch.fs[0].std.flatten().data)
    +
    +
    tensor([ 0.0000, -1.3398,  0.0000,  0.9952, -0.8438, -0.4308,  0.0000, -0.6077,
    +         0.0000,  0.7781, -0.4869, -0.0969,  0.0000, -1.0620, -0.6171,  0.9253,
    +        -0.7023, -0.3077, -0.5600, -1.1922, -0.7503,  0.9491, -0.7744, -0.4356])
    +tensor([1.0000, 0.8743, 1.0000, 0.7510, 1.1557, 0.5370, 1.0000, 0.2666, 1.0000,
    +        0.2380, 0.4047, 0.3274, 1.0000, 0.6371, 0.2798, 0.5287, 0.8642, 0.4297,
    +        0.5842, 0.7581, 0.3162, 0.6739, 1.0118, 0.4958])
    +
    +
    +
    +
    from tsai.data.validation import TimeSplitter
    +
    +
    +
    X_nan = np.random.rand(100, 5, 10)
    +idxs = random_choice(len(X_nan), int(len(X_nan)*.5), False)
    +X_nan[idxs, 0] = float('nan')
    +idxs = random_choice(len(X_nan), int(len(X_nan)*.5), False)
    +X_nan[idxs, 1, -10:] = float('nan')
    +batch_tfms = TSStandardize(by_var=True)
    +dls = get_ts_dls(X_nan, batch_tfms=batch_tfms, splits=TimeSplitter(show_plot=False)(range_of(X_nan)))
    +test_eq(torch.isnan(dls.after_batch[0].mean).sum(), 0)
    +test_eq(torch.isnan(dls.after_batch[0].std).sum(), 0)
    +xb = first(dls.train)[0]
    +test_ne(torch.isnan(xb).sum(), 0)
    +test_ne(torch.isnan(xb).sum(), torch.isnan(xb).numel())
    +batch_tfms = [TSStandardize(by_var=True), Nan2Value()]
    +dls = get_ts_dls(X_nan, batch_tfms=batch_tfms, splits=TimeSplitter(show_plot=False)(range_of(X_nan)))
    +xb = first(dls.train)[0]
    +test_eq(torch.isnan(xb).sum(), 0)
    +
    +
    +
    batch_tfms=[TSStandardize(by_sample=True, by_var=False, verbose=False)]
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=128, num_workers=0, after_batch=batch_tfms)
    +xb, yb = next(iter(dls.train))
    +test_close(xb.mean(), 0, eps=1e-1)
    +test_close(xb.std(), 1, eps=1e-1)
    +xb, yb = next(iter(dls.valid))
    +test_close(xb.mean(), 0, eps=1e-1)
    +test_close(xb.std(), 1, eps=1e-1)
    +
    +
    +
    tfms = [None, TSClassification()]
    +batch_tfms = TSStandardize(by_sample=True)
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=[64, 128], inplace=True)
    +xb, yb = dls.train.one_batch()
    +test_close(xb.mean(), 0, eps=1e-1)
    +test_close(xb.std(), 1, eps=1e-1)
    +xb, yb = dls.valid.one_batch()
    +test_close(xb.mean(), 0, eps=1e-1)
    +test_close(xb.std(), 1, eps=1e-1)
    +
    +
    +
    tfms = [None, TSClassification()]
    +batch_tfms = TSStandardize(by_sample=True, by_var=False, verbose=False)
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=[64, 128], inplace=False)
    +xb, yb = dls.train.one_batch()
    +test_close(xb.mean(), 0, eps=1e-1)
    +test_close(xb.std(), 1, eps=1e-1)
    +xb, yb = dls.valid.one_batch()
    +test_close(xb.mean(), 0, eps=1e-1)
    +test_close(xb.std(), 1, eps=1e-1)
    +
    +
    +

    source

    +
    +
    +

    TSNormalize

    +
    +
     TSNormalize (min=None, max=None, range=(-1, 1), by_sample=False,
    +              by_var=False, by_step=False, clip_values=True,
    +              use_single_batch=True, verbose=False, **kwargs)
    +
    +

    Normalizes batch of type TSTensor

    +
    +
    +
    +

    mul_max’]

    +

    Built-in mutable sequence.

    +

    If no argument is given, the constructor creates a new empty list. The argument must be an iterable if specified.

    +
    +
    +
    +

    mul_min’]

    +

    Built-in mutable sequence.

    +

    If no argument is given, the constructor creates a new empty list. The argument must be an iterable if specified.

    +
    +
    batch_tfms = [TSNormalize()]
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=128, num_workers=0, after_batch=batch_tfms)
    +xb, yb = next(iter(dls.train))
    +assert xb.max() <= 1
    +assert xb.min() >= -1
    +
    +
    +
    batch_tfms=[TSNormalize(by_sample=True, by_var=False, verbose=False)]
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=128, num_workers=0, after_batch=batch_tfms)
    +xb, yb = next(iter(dls.train))
    +assert xb.max() <= 1
    +assert xb.min() >= -1
    +
    +
    +
    batch_tfms = [TSNormalize(by_var=[0, [1, 2]], use_single_batch=False, clip_values=False, verbose=False)]
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=128, num_workers=0, after_batch=batch_tfms)
    +xb, yb = next(iter(dls.train))
    +assert xb[:, [0, 1, 2]].max() <= 1
    +assert xb[:, [0, 1, 2]].min() >= -1
    +
    +
    +

    source

    +
    +
    +

    TSStandardizeTuple

    +
    +
     TSStandardizeTuple (x_mean, x_std, y_mean=None, y_std=None, eps=1e-05)
    +
    +

    Standardizes X (and y if provided)

    +
    +
    a, b = TSTensor([1., 2, 3]), TSTensor([4., 5, 6])
    +mean, std = a.mean(), b.std()
    +tuple_batch_tfm = TSStandardizeTuple(mean, std)
    +a_tfmd, b_tfmd = tuple_batch_tfm((a, b))
    +test_ne(a, a_tfmd)
    +test_ne(b, b_tfmd)
    +
    +
    +

    source

    +
    +
    +

    TSCatEncode

    +
    +
     TSCatEncode (a, sel_var)
    +
    +

    Encodes a variable based on a categorical array

    +
    +
    # static input
    +a = np.random.randint(10, 20, 512)[:, None, None].repeat(10, 1).repeat(28, 2)
    +b = TSTensor(torch.randint(0, 30, (512,), device='cpu').unsqueeze(-1).unsqueeze(-1).repeat(1, 10, 28))
    +output = TSCatEncode(a, sel_var=0)(b)
    +test_eq(0 <= output[:, 0].min() <= len(np.unique(a)), True)
    +test_eq(0 <= output[:, 0].max() <= len(np.unique(a)), True)
    +test_eq(output[:, 0], output[:, 0, 0][:, None].repeat(1, 28))
    +output[:, 0].data
    +
    +
    tensor([[0, 0, 0,  ..., 0, 0, 0],
    +        [0, 0, 0,  ..., 0, 0, 0],
    +        [0, 0, 0,  ..., 0, 0, 0],
    +        ...,
    +        [4, 4, 4,  ..., 4, 4, 4],
    +        [4, 4, 4,  ..., 4, 4, 4],
    +        [0, 0, 0,  ..., 0, 0, 0]])
    +
    +
    +
    +
    # non-static input
    +a = np.random.randint(10, 20, 512)[:, None, None].repeat(10, 1).repeat(28, 2)
    +b = TSTensor(torch.randint(0, 30, (512, 10, 28), device='cpu'))
    +output = TSCatEncode(a, sel_var=0)(b)
    +test_eq(0 <= output[:, 0].min() <= len(np.unique(a)), True)
    +test_eq(0 <= output[:, 0].max() <= len(np.unique(a)), True)
    +test_ne(output[:, 0], output[:, 0, 0][:, None].repeat(1, 28))
    +output[:, 0].data
    +
    +
    tensor([[10,  0,  0,  ...,  4,  0,  0],
    +        [10,  0,  0,  ...,  0,  0,  0],
    +        [ 0,  2,  0,  ...,  0, 10,  6],
    +        ...,
    +        [ 1,  0,  9,  ...,  0,  0,  0],
    +        [ 0,  0,  5,  ...,  0,  0,  0],
    +        [ 0,  0,  0,  ...,  0,  0,  5]])
    +
    +
    +
    +

    source

    +
    +
    +

    TSDropFeatByKey

    +
    +
     TSDropFeatByKey (key_var, p, sel_vars, sel_steps=None, **kwargs)
    +
    +

    Randomly drops selected features at selected steps based with a given probability per feature, step and a key variable

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    key_varint representing the variable that contains the key information
    parray of shape (n_keys, n_features, n_steps) representing the probabilities of dropping a feature at a given step for a given key
    sel_varsint or slice or list of ints or array of ints representing the variables to drop
    sel_stepsNoneTypeNoneint or slice or list of ints or array of ints representing the steps to drop
    kwargs
    +
    +
    n_devices = 4
    +key_var = 0
    +
    +for sel_vars in [1, [1], [1,3,5], slice(3, 5)]:
    +    for sel_steps in [None, -1, 27, [27], [25, 26], slice(10, 20)]:
    +        o = TSTensor(torch.rand(512, 10, 28))
    +        o[:, key_var] = torch.randint(0, n_devices, (512, 28))
    +        n_vars = 1 if isinstance(sel_vars, Integral) else len(sel_vars) if isinstance(sel_vars, list) else sel_vars.stop - sel_vars.start
    +        n_steps = o.shape[-1] if sel_steps is None else 1 if isinstance(sel_steps, Integral) else \
    +            len(sel_steps) if isinstance(sel_steps, list) else sel_steps.stop - sel_steps.start
    +        p = torch.rand(n_devices, n_vars, n_steps) * .5 + .5
    +        output = TSDropFeatByKey(key_var, p, sel_vars, sel_steps)(o)
    +        assert torch.isnan(output).sum((0, 2))[sel_vars].sum() > 0
    +        assert torch.isnan(output).sum((0, 2))[~np.array(np.arange(o.shape[1])[sel_vars])].sum() == 0
    +
    +
    +

    source

    +
    +
    +

    TSClipOutliers

    +
    +
     TSClipOutliers (min=None, max=None, by_sample=False, by_var=False,
    +                 use_single_batch=False, verbose=False, **kwargs)
    +
    +

    Clip outliers batch of type TSTensor based on the IQR

    +
    +
    batch_tfms=[TSClipOutliers(-1, 1, verbose=True)]
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=128, num_workers=0, after_batch=batch_tfms)
    +xb, yb = next(iter(dls.train))
    +assert xb.max() <= 1
    +assert xb.min() >= -1
    +test_close(xb.min(), -1, eps=1e-1)
    +test_close(xb.max(), 1, eps=1e-1)
    +xb, yb = next(iter(dls.valid))
    +test_close(xb.min(), -1, eps=1e-1)
    +test_close(xb.max(), 1, eps=1e-1)
    +
    +
    TSClipOutliers min=-1, max=1
    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSClip

    +
    +
     TSClip (min=-6, max=6, **kwargs)
    +
    +

    Clip batch of type TSTensor

    +
    +
    t = TSTensor(torch.randn(10, 20, 100)*10)
    +test_le(TSClip()(t).max().item(), 6)
    +test_ge(TSClip()(t).min().item(), -6)
    +
    +
    +

    source

    +
    +
    +

    TSSelfMissingness

    +
    +
     TSSelfMissingness (sel_vars=None, **kwargs)
    +
    +

    Applies missingness from samples in a batch to random samples in the batch for selected variables

    +
    +
    t = TSTensor(torch.randn(10, 20, 100))
    +t[t>.8] = np.nan
    +t2 = TSSelfMissingness()(t.clone())
    +t3 = TSSelfMissingness(sel_vars=[0,3,5,7])(t.clone())
    +assert (torch.isnan(t).sum() < torch.isnan(t2).sum()) and (torch.isnan(t2).sum() >  torch.isnan(t3).sum())
    +
    +
    +

    source

    +
    +
    +

    TSRobustScale

    +
    +
     TSRobustScale (median=None, iqr=None, quantile_range=(25.0, 75.0),
    +                use_single_batch=True, exc_vars=None, eps=1e-08,
    +                verbose=False, **kwargs)
    +
    +

    This Scaler removes the median and scales the data according to the quantile range (defaults to IQR: Interquartile Range)

    +
    +
    batch_tfms = TSRobustScale(verbose=True, use_single_batch=False)
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, batch_tfms=batch_tfms, num_workers=0)
    +xb, yb = next(iter(dls.train))
    +xb.min()
    +
    +
    TSRobustScale median=torch.Size([1, 24, 1]) iqr=torch.Size([1, 24, 1])
    +
    +
    +
    TSTensor([-2.3502116203308105], device=cpu, dtype=torch.float32)
    +
    +
    +
    +
    exc_vars = [0, 2, 6, 8, 12]
    +batch_tfms = TSRobustScale(use_single_batch=False, exc_vars=exc_vars)
    +dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, batch_tfms=batch_tfms, num_workers=0)
    +xb, yb = next(iter(dls.train))
    +test_eq(len(dls.train.after_batch.fs[0].median.flatten()), 24)
    +test_eq(len(dls.train.after_batch.fs[0].iqr.flatten()), 24)
    +test_eq(dls.train.after_batch.fs[0].median.flatten()[exc_vars].cpu(), torch.zeros(len(exc_vars)))
    +test_eq(dls.train.after_batch.fs[0].iqr.flatten()[exc_vars].cpu(), torch.ones(len(exc_vars)))
    +print(dls.train.after_batch.fs[0].median.flatten().data)
    +print(dls.train.after_batch.fs[0].iqr.flatten().data)
    +
    +
    tensor([ 0.0000, -1.7305,  0.0000,  0.7365, -1.2736, -0.5528,  0.0000, -0.7074,
    +         0.0000,  0.7087, -0.7014, -0.1120,  0.0000, -1.3332, -0.5958,  0.7563,
    +        -1.0129, -0.3985, -0.5186, -1.5125, -0.7353,  0.7326, -1.1495, -0.5359])
    +tensor([1.0000, 4.2788, 1.0000, 4.8008, 8.0682, 2.2777, 1.0000, 0.6955, 1.0000,
    +        1.4875, 2.6386, 1.4756, 1.0000, 2.9811, 1.2507, 3.2291, 5.9906, 1.9098,
    +        1.3428, 3.6368, 1.3689, 4.4213, 6.9907, 2.1939])
    +
    +
    +
    +

    source

    +
    +
    +

    TSGaussianStandardize

    +
    +
     TSGaussianStandardize (E_mean:np.ndarray, S_mean:np.ndarray,
    +                        E_std:np.ndarray, S_std:np.ndarray, eps=1e-08,
    +                        split_idx=0, **kwargs)
    +
    +

    Scales each batch using modeled mean and std based on UNCERTAINTY MODELING FOR OUT-OF-DISTRIBUTION GENERALIZATION https://arxiv.org/abs/2202.03958

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    E_meannp.ndarrayMean expected value
    S_meannp.ndarrayUncertainty (standard deviation) of the mean
    E_stdnp.ndarrayStandard deviation expected value
    S_stdnp.ndarrayUncertainty (standard deviation) of the standard deviation
    epsfloat1e-08(epsilon) small amount added to standard deviation to avoid deviding by zero
    split_idxint0Flag to indicate to which set is this transofrm applied. 0: training, 1:validation, None:both
    kwargs
    +
    +

    source

    +
    +
    +

    get_random_stats

    +
    +
     get_random_stats (E_mean, S_mean, E_std, S_std)
    +
    +
    +

    source

    +
    +
    +

    get_stats_with_uncertainty

    +
    +
     get_stats_with_uncertainty (o, sel_vars=None,
    +                             sel_vars_zero_mean_unit_var=False, bs=64,
    +                             n_trials=None, axis=(0, 2))
    +
    +
    +
    arr = np.random.rand(1000, 2, 50)
    +E_mean, S_mean, E_std, S_std = get_stats_with_uncertainty(arr, sel_vars=None, bs=64, n_trials=None, axis=(0,2))
    +new_mean, new_std = get_random_stats(E_mean, S_mean, E_std, S_std)
    +new_mean2, new_std2 = get_random_stats(E_mean, S_mean, E_std, S_std)
    +test_ne(new_mean, new_mean2)
    +test_ne(new_std, new_std2)
    +test_eq(new_mean.shape, (1, 2, 1))
    +test_eq(new_std.shape, (1, 2, 1))
    +new_mean, new_std
    +
    + + +
    +
    + +
    + + 100.00% [15/15 00:00<00:00] +
    + +
    +
    +
    (array([[[0.49649504],
    +         [0.49636062]]]),
    + array([[[0.28626438],
    +         [0.28665599]]]))
    +
    +
    +

    TSGaussianStandardize can be used jointly with TSStandardized in the following way:

    +
    X, y, splits = get_UCR_data('LSST', split_data=False)
    +tfms = [None, TSClassification()]
    +E_mean, S_mean, E_std, S_std = get_stats_with_uncertainty(X, sel_vars=None, bs=64, n_trials=None, axis=(0,2))
    +batch_tfms = [TSGaussianStandardize(E_mean, S_mean, E_std, S_std, split_idx=0), TSStandardize(E_mean, S_mean, split_idx=1)]
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=[32, 64])
    +learn = ts_learner(dls, InceptionTimePlus, metrics=accuracy, cbs=[ShowGraph()])
    +learn.fit_one_cycle(1, 1e-2)
    +

    In this way the train batches are scaled based on mean and standard deviation distributions while the valid batches are scaled with a fixed mean and standard deviation values.

    +

    The intent is to improve out-of-distribution performance. This method is inspired by UNCERTAINTY MODELING FOR OUT-OF-DISTRIBUTION GENERALIZATION https://arxiv.org/abs/2202.03958.

    +
    +

    source

    +
    +
    +

    TSDiff

    +
    +
     TSDiff (lag=1, pad=True, **kwargs)
    +
    +

    Differences batch of type TSTensor

    +
    +
    t = TSTensor(torch.arange(24).reshape(2,3,4))
    +test_eq(TSDiff()(t)[..., 1:].float().mean(), 1)
    +test_eq(TSDiff(lag=2, pad=False)(t).float().mean(), 2)
    +
    +
    +

    source

    +
    +
    +

    TSLog

    +
    +
     TSLog (ex=None, **kwargs)
    +
    +

    Log transforms batch of type TSTensor + 1. Accepts positive and negative numbers

    +
    +
    t = TSTensor(torch.rand(2,3,4)) * 2 - 1 
    +tfm = TSLog()
    +enc_t = tfm(t)
    +test_ne(enc_t, t)
    +test_close(tfm.decodes(enc_t).data, t.data)
    +
    +
    +

    source

    +
    +
    +

    TSCyclicalPosition

    +
    +
     TSCyclicalPosition (cyclical_var=None, magnitude=None, drop_var=False,
    +                     **kwargs)
    +
    +

    Concatenates the position along the sequence as 2 additional variables (sine and cosine)

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    cyclical_varNoneTypeNoneOptional variable to indicate the steps withing the cycle (ie minute of the day)
    magnitudeNoneTypeNoneAdded for compatibility. It’s not used.
    drop_varboolFalseFlag to indicate if the cyclical var is removed
    kwargs
    +
    +
    bs, c_in, seq_len = 1,3,100
    +t = TSTensor(torch.rand(bs, c_in, seq_len))
    +enc_t = TSCyclicalPosition()(t)
    +test_ne(enc_t, t)
    +assert t.shape[1] == enc_t.shape[1] - 2
    +plt.plot(enc_t[0, -2:].cpu().numpy().T)
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    bs, c_in, seq_len = 1,3,100
    +t1 = torch.rand(bs, c_in, seq_len)
    +t2 = torch.arange(seq_len)
    +t2 = torch.cat([t2[35:], t2[:35]]).reshape(1, 1, -1)
    +t = TSTensor(torch.cat([t1, t2], 1))
    +mask = torch.rand_like(t) > .8
    +t[mask] = np.nan
    +enc_t = TSCyclicalPosition(3)(t)
    +test_ne(enc_t, t)
    +assert t.shape[1] == enc_t.shape[1] - 2
    +plt.plot(enc_t[0, -2:].cpu().numpy().T)
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSLinearPosition

    +
    +
     TSLinearPosition (linear_var:int=None, var_range:tuple=None,
    +                   magnitude=None, drop_var:bool=False,
    +                   lin_range:tuple=(-1, 1), **kwargs)
    +
    +

    Concatenates the position along the sequence as 1 additional variable

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    linear_varintNoneOptional variable to indicate the steps withing the cycle (ie minute of the day)
    var_rangetupleNoneOptional range indicating min and max values of the linear variable
    magnitudeNoneTypeNoneAdded for compatibility. It’s not used.
    drop_varboolFalseFlag to indicate if the cyclical var is removed
    lin_rangetuple(-1, 1)
    kwargs
    +
    +
    bs, c_in, seq_len = 1,3,100
    +t = TSTensor(torch.rand(bs, c_in, seq_len))
    +enc_t = TSLinearPosition()(t)
    +test_ne(enc_t, t)
    +assert t.shape[1] == enc_t.shape[1] - 1
    +plt.plot(enc_t[0, -1].cpu().numpy().T)
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    t = torch.arange(100)
    +t1 = torch.cat([t[30:], t[:30]]).reshape(1, 1, -1)
    +t2 = torch.cat([t[52:], t[:52]]).reshape(1, 1, -1)
    +t = torch.cat([t1, t2]).float()
    +mask = torch.rand_like(t) > .8
    +t[mask] = np.nan
    +t = TSTensor(t)
    +enc_t = TSLinearPosition(linear_var=0, var_range=(0, 100), drop_var=True)(t)
    +test_ne(enc_t, t)
    +assert t.shape[1] == enc_t.shape[1]
    +plt.plot(enc_t[0, -1].cpu().numpy().T)
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSMissingness

    +
    +
     TSMissingness (sel_vars=None, feature_idxs=None, magnitude=None,
    +                **kwargs)
    +
    +

    Concatenates data missingness for selected features along the sequence as additional variables

    +
    +
    bs, c_in, seq_len = 1,3,100
    +t = TSTensor(torch.rand(bs, c_in, seq_len))
    +t[t>.5] = np.nan
    +enc_t = TSMissingness(sel_vars=[0,2])(t)
    +test_eq(enc_t.shape[1], 5)
    +test_eq(enc_t[:, 3:], torch.isnan(t[:, [0,2]]).float())
    +
    +
    +

    source

    +
    +
    +

    TSPositionGaps

    +
    +
     TSPositionGaps (sel_vars=None, feature_idxs=None, magnitude=None,
    +                 forward=True, backward=False, nearest=False,
    +                 normalize=True, **kwargs)
    +
    +

    Concatenates gaps for selected features along the sequence as additional variables

    +
    +
    bs, c_in, seq_len = 1,3,8
    +t = TSTensor(torch.rand(bs, c_in, seq_len))
    +t[t>.5] = np.nan
    +enc_t = TSPositionGaps(sel_vars=[0,2], forward=True, backward=True, nearest=True, normalize=False)(t)
    +test_eq(enc_t.shape[1], 9)
    +enc_t.data
    +
    +
    tensor([[[0.2875, 0.0553,    nan,    nan, 0.1478, 0.1234, 0.0835, 0.1465],
    +         [   nan,    nan, 0.3967,    nan, 0.0654,    nan, 0.2289, 0.1094],
    +         [0.3820, 0.1613, 0.4825, 0.1379,    nan,    nan, 0.3000, 0.4673],
    +         [1.0000, 1.0000, 1.0000, 2.0000, 3.0000, 1.0000, 1.0000, 1.0000],
    +         [1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 2.0000, 3.0000, 1.0000],
    +         [1.0000, 3.0000, 2.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000],
    +         [1.0000, 1.0000, 1.0000, 3.0000, 2.0000, 1.0000, 1.0000, 1.0000],
    +         [1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000],
    +         [1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000]]])
    +
    +
    +
    +

    source

    +
    +
    +

    TSRollingMean

    +
    +
     TSRollingMean (sel_vars=None, feature_idxs=None, magnitude=None,
    +                window=2, replace=False, **kwargs)
    +
    +

    Calculates the rolling mean for all/ selected features alongside the sequence

    +

    It replaces the original values or adds additional variables (default) If nan values are found, they will be filled forward and backward

    +
    +
    bs, c_in, seq_len = 1,3,8
    +t = TSTensor(torch.rand(bs, c_in, seq_len))
    +t[t > .6] = np.nan
    +print(t.data)
    +enc_t = TSRollingMean(sel_vars=[0,2], window=3)(t)
    +test_eq(enc_t.shape[1], 5)
    +print(enc_t.data)
    +enc_t = TSRollingMean(window=3, replace=True)(t)
    +test_eq(enc_t.shape[1], 3)
    +print(enc_t.data)
    +
    +
    tensor([[[   nan, 0.3836,    nan,    nan, 0.0237, 0.4363,    nan, 0.1834],
    +         [0.2749, 0.5018,    nan, 0.4008, 0.2797, 0.4010, 0.4323, 0.3692],
    +         [0.4013,    nan, 0.1272, 0.2202, 0.4324, 0.3293, 0.5350, 0.3919]]])
    +tensor([[[0.3836, 0.3836, 0.3836, 0.3836, 0.0237, 0.4363, 0.4363, 0.1834],
    +         [0.2749, 0.5018,    nan, 0.4008, 0.2797, 0.4010, 0.4323, 0.3692],
    +         [0.4013, 0.4013, 0.1272, 0.2202, 0.4324, 0.3293, 0.5350, 0.3919],
    +         [0.3836, 0.3836, 0.3836, 0.3836, 0.2636, 0.2812, 0.2988, 0.3520],
    +         [0.4013, 0.4013, 0.3099, 0.2496, 0.2599, 0.3273, 0.4322, 0.4187]]])
    +tensor([[[0.3836, 0.3836, 0.3836, 0.3836, 0.2636, 0.2812, 0.2988, 0.3520],
    +         [0.2749, 0.3883, 0.4261, 0.4681, 0.3941, 0.3605, 0.3710, 0.4008],
    +         [0.4013, 0.4013, 0.3099, 0.2496, 0.2599, 0.3273, 0.4322, 0.4187]]])
    +
    +
    +
    +

    source

    +
    +
    +

    TSLogReturn

    +
    +
     TSLogReturn (lag=1, pad=True, **kwargs)
    +
    +

    Calculates log-return of batch of type TSTensor. For positive values only

    +
    +
    t = TSTensor([1,2,4,8,16,32,64,128,256]).float()
    +test_eq(TSLogReturn(pad=False)(t).std(), 0)
    +
    +
    +

    source

    +
    +
    +

    TSAdd

    +
    +
     TSAdd (add, **kwargs)
    +
    +

    Add a defined amount to each batch of type TSTensor.

    +
    +
    t = TSTensor([1,2,3]).float()
    +test_eq(TSAdd(1)(t), TSTensor([2,3,4]).float())
    +
    +
    +

    source

    +
    +
    +

    TSClipByVar

    +
    +
     TSClipByVar (var_min_max, **kwargs)
    +
    +

    Clip batch of type TSTensor by variable

    +

    Args: var_min_max: list of tuples containing variable index, min value (or None) and max value (or None)

    +
    +
    t = TSTensor(torch.rand(16, 3, 10) * tensor([1,10,100]).reshape(1,-1,1))
    +max_values = t.max(0).values.max(-1).values.data
    +max_values2 = TSClipByVar([(1,None,5), (2,10,50)])(t).max(0).values.max(-1).values.data
    +test_le(max_values2[1], 5)
    +test_ge(max_values2[2], 10)
    +test_le(max_values2[2], 50)
    +
    +
    +

    source

    +
    +
    +

    TSDropVars

    +
    +
     TSDropVars (drop_vars, **kwargs)
    +
    +

    Drops selected variable from the input

    +
    +
    t = TSTensor(torch.arange(24).reshape(2, 3, 4))
    +enc_t = TSDropVars(2)(t)
    +test_ne(t, enc_t)
    +enc_t.data
    +
    +
    tensor([[[ 0,  1,  2,  3],
    +         [ 4,  5,  6,  7]],
    +
    +        [[12, 13, 14, 15],
    +         [16, 17, 18, 19]]])
    +
    +
    +
    +

    source

    +
    +
    +

    TSOneHotEncode

    +
    +
     TSOneHotEncode (sel_var:int, unique_labels:list, add_na:bool=False,
    +                 drop_var:bool=True, magnitude=None, **kwargs)
    +
    +

    Delegates (__call__,decode,setup) to (encodes,decodes,setups) if split_idx matches

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    sel_varintVariable that is one-hot encoded
    unique_labelslistList containing all labels (excluding nan values)
    add_naboolFalseFlag to indicate if values not included in vocab should be set as 0
    drop_varboolTrueFlag to indicate if the selected var is removed
    magnitudeNoneTypeNoneAdded for compatibility. It’s not used.
    kwargs
    +
    +
    bs = 2
    +seq_len = 5
    +t_cont = torch.rand(bs, 1, seq_len)
    +t_cat = torch.randint(0, 3, t_cont.shape)
    +t = TSTensor(torch.cat([t_cat, t_cont], 1))
    +t_cat
    +
    +
    tensor([[[0, 2, 1, 0, 2]],
    +
    +        [[0, 0, 1, 1, 2]]])
    +
    +
    +
    +
    tfm = TSOneHotEncode(0, [0, 1, 2])
    +output = tfm(t)[:, -3:].data
    +test_eq(t_cat, torch.argmax(tfm(t)[:, -3:], 1)[:, None])
    +tfm(t)[:, -3:].data
    +
    +
    tensor([[[1., 0., 0., 1., 0.],
    +         [0., 0., 1., 0., 0.],
    +         [0., 1., 0., 0., 1.]],
    +
    +        [[1., 1., 0., 0., 0.],
    +         [0., 0., 1., 1., 0.],
    +         [0., 0., 0., 0., 1.]]])
    +
    +
    +
    +
    bs = 2
    +seq_len = 5
    +t_cont = torch.rand(bs, 1, seq_len)
    +t_cat = torch.tensor([[10.,  5., 11., np.nan, 12.], [ 5., 12., 10., np.nan, 11.]])[:, None]
    +t = TSTensor(torch.cat([t_cat, t_cont], 1))
    +t_cat
    +
    +
    tensor([[[10.,  5., 11., nan, 12.]],
    +
    +        [[ 5., 12., 10., nan, 11.]]])
    +
    +
    +
    +
    tfm = TSOneHotEncode(0, [10, 11, 12], drop_var=False)
    +mask = ~torch.isnan(t[:, 0])
    +test_eq(tfm(t)[:, 0][mask], t[:, 0][mask])
    +tfm(t)[:, -3:].data
    +
    +
    tensor([[[1., 0., 0., 0., 0.],
    +         [0., 0., 1., 0., 0.],
    +         [0., 0., 0., 0., 1.]],
    +
    +        [[0., 0., 1., 0., 0.],
    +         [0., 0., 0., 0., 1.],
    +         [0., 1., 0., 0., 0.]]])
    +
    +
    +
    +
    t1 = torch.randint(3, 7, (2, 1, 10))
    +t2 = torch.rand(2, 1, 10)
    +t = TSTensor(torch.cat([t1, t2], 1))
    +output = TSOneHotEncode(0, [3, 4, 5], add_na=True, drop_var=True)(t)
    +test_eq((t1 > 5).float(), output.data[:, [1]])
    +test_eq((t1 == 3).float(), output.data[:, [2]])
    +test_eq((t1 == 4).float(), output.data[:, [3]])
    +test_eq((t1 == 5).float(), output.data[:, [4]])
    +test_eq(output.shape, (t.shape[0], 5, t.shape[-1]))
    +
    +
    +

    source

    +
    +
    +

    TSPosition

    +
    +
     TSPosition (steps:list, magnitude=None, **kwargs)
    +
    +

    Delegates (__call__,decode,setup) to (encodes,decodes,setups) if split_idx matches

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    stepslistList containing the steps passed as an additional variable. Theu should be normalized.
    magnitudeNoneTypeNoneAdded for compatibility. It’s not used.
    kwargs
    +
    +
    t = TSTensor(torch.rand(2, 1, 10)).float()
    +a = np.linspace(-1, 1, 10).astype('float64')
    +TSPosition(a)(t).data.dtype, t.dtype
    +
    +
    (torch.float32, torch.float32)
    +
    +
    +
    +

    source

    +
    +
    +

    PatchEncoder

    +
    +
     PatchEncoder (patch_len:int, patch_stride:int=None,
    +               pad_at_start:bool=True, value:float=0.0, seq_len:int=None,
    +               merge_dims:bool=True, reduction:str='none',
    +               reduction_dim:int=-1, swap_dims:tuple=None)
    +
    +

    Creates a sequence of patches from a 3d input tensor.

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    patch_lenintNumber of time steps in each patch.
    patch_strideintNoneStride of the patch.
    pad_at_startboolTrueIf True, pad the input tensor at the start to ensure that the input tensor is evenly divisible by the patch length.
    valuefloat0.0Value to pad the input tensor with.
    seq_lenintNoneNumber of time steps in the input tensor. If None, make sure seq_len >= patch_len and a multiple of stride
    merge_dimsboolTrueIf True, merge channels within the same patch.
    reductionstrnonetype of reduction applied. Available: “none”, “mean”, “min”, “max”, “mode”
    reduction_dimint-1dimension where the reduction is applied
    swap_dimstupleNoneIf True, swap the time and channel dimensions.
    +
    +
    seq_len = 17
    +patch_len = 10
    +patch_stride = 5
    +
    +z11 = torch.arange(seq_len).reshape(1, 1, -1)
    +z12 = torch.arange(seq_len).reshape(1, 1, -1) * 10
    +z1 = torch.cat((z11, z12), dim=1)
    +z21 = torch.arange(seq_len).reshape(1, 1, -1)
    +z22 = torch.arange(seq_len).reshape(1, 1, -1) * 10
    +z2 = torch.cat((z21, z22), dim=1) + 1
    +z31 = torch.arange(seq_len).reshape(1, 1, -1)
    +z32 = torch.arange(seq_len).reshape(1, 1, -1) * 10
    +z3 = torch.cat((z31, z32), dim=1) + 2
    +z = torch.cat((z11, z21, z31), dim=0)
    +z = torch.cat((z1, z2, z3), dim=0)
    +print(z.shape, "\n")
    +print(z)
    +
    +patch_encoder = PatchEncoder(patch_len=patch_len, patch_stride=patch_stride, value=-1, seq_len=seq_len, merge_dims=True)
    +output = patch_encoder(z)
    +print(output.shape, "\n")
    +first_token = output[..., 0]
    +expected_first_token = torch.tensor([[-1, -1, -1,  0,  1,  2,  3,  4,  5,  6, -1, -1, -1,  0, 10, 20, 30, 40,
    +         50, 60],
    +        [-1, -1, -1,  1,  2,  3,  4,  5,  6,  7, -1, -1, -1,  1, 11, 21, 31, 41,
    +         51, 61],
    +        [-1, -1, -1,  2,  3,  4,  5,  6,  7,  8, -1, -1, -1,  2, 12, 22, 32, 42,
    +         52, 62]])
    +test_eq(first_token, expected_first_token)
    +
    +
    torch.Size([3, 2, 17]) 
    +
    +tensor([[[  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,
    +           14,  15,  16],
    +         [  0,  10,  20,  30,  40,  50,  60,  70,  80,  90, 100, 110, 120, 130,
    +          140, 150, 160]],
    +
    +        [[  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,
    +           15,  16,  17],
    +         [  1,  11,  21,  31,  41,  51,  61,  71,  81,  91, 101, 111, 121, 131,
    +          141, 151, 161]],
    +
    +        [[  2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,  14,  15,
    +           16,  17,  18],
    +         [  2,  12,  22,  32,  42,  52,  62,  72,  82,  92, 102, 112, 122, 132,
    +          142, 152, 162]]])
    +torch.Size([3, 20, 3]) 
    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSPatchEncoder

    +
    +
     TSPatchEncoder (patch_len:int, patch_stride:int=None,
    +                 pad_at_start:bool=True, value:float=0.0,
    +                 seq_len:int=None, merge_dims:bool=True,
    +                 reduction:str='none', reduction_dim:int=-2,
    +                 swap_dims:tuple=None)
    +
    +

    Tansforms a time series into a sequence of patches along the last dimension

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    patch_lenintNumber of time steps in each patch.
    patch_strideintNoneStride of the patch.
    pad_at_startboolTrueIf True, pad the input tensor at the start to ensure that the input tensor is evenly divisible by the patch length.
    valuefloat0.0Value to pad the input tensor with.
    seq_lenintNoneNumber of time steps in the input tensor. If None, make sure seq_len >= patch_len and a multiple of stride
    merge_dimsboolTrueIf True, merge channels within the same patch.
    reductionstrnonetype of reduction applied. Available: “none”, “mean”, “min”, “max”, “mode”
    reduction_dimint-2dimension where the y reduction is applied.
    swap_dimstupleNoneIf True, swap the time and channel dimensions.
    +
    +
    bs = 2
    +c_in = 1
    +seq_len = 10
    +patch_len = 4
    +
    +t = TSTensor(torch.arange(bs * c_in * seq_len).reshape(bs, c_in, seq_len))
    +print(t.data)
    +print(t.shape, "\n")
    +
    +patch_encoder = TSPatchEncoder(patch_len=patch_len, patch_stride=1, seq_len=seq_len)
    +output = patch_encoder(t)
    +test_eq(output.shape, ([bs, patch_len, 7]))
    +print("first patch:\n", output[..., 0].data, "\n")
    +
    +patch_encoder = TSPatchEncoder(patch_len=patch_len, patch_stride=None, seq_len=seq_len)
    +output = patch_encoder(t)
    +test_eq(output.shape, ([bs, patch_len, 3]))
    +print("first patch:\n", output[..., 0].data, "\n")
    +
    +
    tensor([[[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9]],
    +
    +        [[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]])
    +torch.Size([2, 1, 10]) 
    +
    +first patch:
    + tensor([[ 0,  1,  2,  3],
    +        [10, 11, 12, 13]]) 
    +
    +first patch:
    + tensor([[ 0,  0,  0,  1],
    +        [ 0,  0, 10, 11]]) 
    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSTuplePatchEncoder

    +
    +
     TSTuplePatchEncoder (patch_len:int, patch_stride:int=None,
    +                      pad_at_start:bool=True, value:float=0.0,
    +                      seq_len:int=None, merge_dims:bool=True,
    +                      reduction:str='none', reduction_dim:int=-2,
    +                      swap_dims:tuple=None)
    +
    +

    Tansforms a time series with x and y into sequences of patches along the last dimension

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    patch_lenintNumber of time steps in each patch.
    patch_strideintNoneStride of the patch.
    pad_at_startboolTrueIf True, pad the input tensor at the start to ensure that the input tensor is evenly divisible by the patch length.
    valuefloat0.0Value to pad the input tensor with.
    seq_lenintNoneNumber of time steps in the input tensor. If None, make sure seq_len >= patch_len and a multiple of stride
    merge_dimsboolTrueIf True, merge y channels within the same patch.
    reductionstrnonetype of reduction applied to y. Available: “none”, “mean”, “min”, “max”, “mode”
    reduction_dimint-2dimension where the y reduction is applied.
    swap_dimstupleNoneIf True, swap the time and channel dimensions in y.
    +
    +
    # test
    +bs = 2
    +c_in = 2
    +seq_len = 10
    +patch_len = 4
    +
    +x = torch.arange(bs * c_in * seq_len).reshape(bs, c_in, seq_len)
    +y = torch.arange(bs * c_in * seq_len).reshape(bs, c_in, seq_len) * 10
    +print(x)
    +print(y)
    +
    +
    +patch_encoder = TSTuplePatchEncoder(patch_len=patch_len, patch_stride=1, seq_len=seq_len, merge_dims=True)
    +x_out, y_out = patch_encoder((x, y))
    +test_eq(x_out.shape, ([bs, c_in * patch_len, 7]))
    +test_eq(y_out.shape, ([bs, c_in * patch_len, 7]))
    +print("first x patch:\n", x_out[..., 0].data, "\n")
    +print("first y patch:\n", y_out[..., 0].data, "\n")
    +
    +patch_encoder = TSTuplePatchEncoder(patch_len=patch_len, patch_stride=1, seq_len=seq_len, merge_dims=False, reduction="max")
    +x_out, y_out = patch_encoder((x, y))
    +test_eq(x_out.shape, ([bs, c_in * patch_len, 7]))
    +test_eq(y_out.shape, ([bs, c_in, 7]))
    +print("first x patch:\n", x_out[..., 0].data, "\n")
    +print("first y patch:\n", y_out[..., 0].data, "\n")
    +
    +
    tensor([[[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
    +         [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]],
    +
    +        [[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
    +         [30, 31, 32, 33, 34, 35, 36, 37, 38, 39]]])
    +tensor([[[  0,  10,  20,  30,  40,  50,  60,  70,  80,  90],
    +         [100, 110, 120, 130, 140, 150, 160, 170, 180, 190]],
    +
    +        [[200, 210, 220, 230, 240, 250, 260, 270, 280, 290],
    +         [300, 310, 320, 330, 340, 350, 360, 370, 380, 390]]])
    +first x patch:
    + tensor([[ 0,  1,  2,  3, 10, 11, 12, 13],
    +        [20, 21, 22, 23, 30, 31, 32, 33]]) 
    +
    +first y patch:
    + tensor([[  0,  10,  20,  30, 100, 110, 120, 130],
    +        [200, 210, 220, 230, 300, 310, 320, 330]]) 
    +
    +first x patch:
    + tensor([[ 0,  1,  2,  3, 10, 11, 12, 13],
    +        [20, 21, 22, 23, 30, 31, 32, 33]]) 
    +
    +first y patch:
    + tensor([[ 30, 130],
    +        [230, 330]]) 
    +
    +
    +
    +
    +
    +

    sklearn API transforms

    +
    +

    source

    +
    +

    object2date

    +
    +
     object2date (x, format=None)
    +
    +
    +

    source

    +
    +
    +

    TSShrinkDataFrame

    +
    +
     TSShrinkDataFrame (columns=None, skip=None, obj2cat=True, int2uint=False,
    +                    verbose=True)
    +
    +

    A transformer to shrink dataframe or series memory usage

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    columnsNoneTypeNoneList[str], optional. Columns to shrink, all columns by default.
    skipNoneTypeNoneList[str], optional. Columns to skip, None by default.
    obj2catboolTruebool, optional. Convert object columns to category, True by default.
    int2uintboolFalsebool, optional. Convert int columns to uint, False by default.
    verboseboolTruebool, optional. Print memory usage info. True by default.
    +
    +
    df = pd.DataFrame()
    +df["ints64"] = np.random.randint(0,3,10)
    +df['floats64'] = np.random.rand(10)
    +tfm = TSShrinkDataFrame()
    +df = tfm.fit_transform(df)
    +test_eq(df["ints64"].dtype, "int8")
    +test_eq(df["floats64"].dtype, "float32")
    +
    +
    Initial memory usage: 288.00 B  
    +Final memory usage  : 178.00 B   (-38.2%)
    +
    +
    +
    +
    # test with date
    +df = pd.DataFrame()
    +df["dates"] = pd.date_range('1/1/2011', periods=10, freq='M').astype(str)
    +df["ints64"] = np.random.randint(0,3,10)
    +df['floats64'] = np.random.rand(10)
    +tfm = TSShrinkDataFrame()
    +df = tfm.fit_transform(df)
    +test_eq(df["dates"].dtype, "datetime64[ns]")
    +test_eq(df["ints64"].dtype, "int8")
    +test_eq(df["floats64"].dtype, "float32")
    +
    +
    Initial memory usage: 368.00 B  
    +Final memory usage  : 258.00 B   (-29.9%)
    +
    +
    +
    +
    # test with date and series
    +df = pd.DataFrame()
    +df["dates"] = pd.date_range('1/1/2011', periods=10, freq='M').astype(str)
    +tfm = TSShrinkDataFrame()
    +df = tfm.fit_transform(df["dates"])
    +test_eq(df.dtype, "datetime64[ns]")
    +
    +
    Initial memory usage: 208.00 B  
    +Final memory usage  : 208.00 B   (0.0%)
    +
    +
    +
    +

    source

    +
    +
    +

    TSOneHotEncoder

    +
    +
     TSOneHotEncoder (columns=None, drop=True, add_na=True, dtype=<class
    +                  'numpy.int8'>)
    +
    +

    Encode categorical variables using one-hot encoding

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    columnsNoneTypeNone(str or List[str], optional): Column name(s) to encode. If None, all columns will be encoded. Defaults to None.
    dropboolTrue(bool, optional): Whether to drop the original columns after encoding. Defaults to True.
    add_naboolTrue(bool, optional): Whether to add a ‘NaN’ category for missing values. Defaults to True.
    dtypetypeint8(type, optional): Data type of the encoded output. Defaults to np.int64.
    +
    +
    df = pd.DataFrame()
    +df["a"] = np.random.randint(0,2,10)
    +df["b"] = np.random.randint(0,3,10)
    +unique_cols = len(df["a"].unique()) + len(df["b"].unique())
    +tfm = TSOneHotEncoder()
    +tfm.fit(df)
    +df = tfm.transform(df)
    +test_eq(df.shape[1], unique_cols)
    +
    +
    +

    source

    +
    +
    +

    TSCategoricalEncoder

    +
    +
     TSCategoricalEncoder (columns=None, add_na=True, sort=True,
    +                       categories='auto', inplace=True, prefix=None,
    +                       suffix=None, drop=False)
    +
    +

    A transformer to encode categorical columns

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    columnsNoneTypeNoneList[str], optional. Columns to encode, all columns by default.
    add_naboolTruebool, optional. Add a NaN category, True by default.
    sortboolTruebool, optional. Sort categories by frequency, True by default.
    categoriesstrautodict, optional. The custom mapping of categories. ‘auto’ by default.
    inplaceboolTruebool, optional. Modify input DataFrame, True by default.
    prefixNoneTypeNonestr, optional. Prefix for created column names. None by default.
    suffixNoneTypeNonestr, optional. Suffix for created column names. None by default.
    dropboolFalsebool, optional. Drop original columns, False by default.
    +

    Stateful transforms like TSCategoricalEncoder can easily be serialized.

    +
    +
    import joblib
    +
    +
    +
    df = pd.DataFrame()
    +df["a"] = alphabet[np.random.randint(0,2,100)]
    +df["b"] = ALPHABET[np.random.randint(0,3,100)]
    +display(df)
    +a_unique = len(df["a"].unique())
    +b_unique = len(df["b"].unique())
    +tfm = TSCategoricalEncoder()
    +tfm.fit(df, idxs=slice(0, 50))
    +joblib.dump(tfm, "data/TSCategoricalEncoder.joblib")
    +tfm = joblib.load("data/TSCategoricalEncoder.joblib")
    +df.loc[0, "a"] = 'z'
    +df.loc[1, "a"] = 'h'
    +df = tfm.transform(df)
    +display(df)
    +test_eq(df['a'].max(), a_unique)
    +test_eq(df['b'].max(), b_unique)
    +df = tfm.inverse_transform(df)
    +display(df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ab
    0bB
    1bA
    2bC
    3aC
    4bC
    .........
    95aA
    96aA
    97aB
    98aA
    99bB
    + +

    100 rows × 2 columns

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ab
    002
    101
    223
    313
    423
    .........
    9511
    9611
    9712
    9811
    9922
    + +

    100 rows × 2 columns

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ab
    0#na#B
    1#na#A
    2bC
    3aC
    4bC
    .........
    95aA
    96aA
    97aB
    98aA
    99bB
    + +

    100 rows × 2 columns

    +
    +
    +
    +
    +
    df = pd.DataFrame()
    +df["a"] = alphabet[np.random.randint(0,2,100)]
    +df["a"] = df["a"].astype('category')
    +df["b"] = ALPHABET[np.random.randint(0,3,100)]
    +display(df)
    +a_unique = len(df["a"].unique())
    +b_unique = len(df["b"].unique())
    +tfm = TSCategoricalEncoder()
    +tfm.fit(df)
    +joblib.dump(tfm, "data/TSCategoricalEncoder.joblib")
    +tfm = joblib.load("data/TSCategoricalEncoder.joblib")
    +df["a"] = alphabet[np.random.randint(0,5,100)]
    +df["a"] = df["a"].astype('category')
    +df["b"] = ALPHABET[np.random.randint(0,3,100)]
    +display(df)
    +df = tfm.transform(df)
    +display(df)
    +test_eq(df['a'].max(), a_unique)
    +test_eq(df['b'].max(), b_unique)
    +df = tfm.inverse_transform(df)
    +display(df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ab
    0bB
    1aC
    2bC
    3aC
    4bB
    .........
    95bA
    96bA
    97aA
    98bB
    99bB
    + +

    100 rows × 2 columns

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ab
    0dA
    1aA
    2cA
    3aA
    4aB
    .........
    95cC
    96dB
    97cA
    98bB
    99eB
    + +

    100 rows × 2 columns

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ab
    001
    111
    201
    311
    412
    .........
    9503
    9602
    9701
    9822
    9902
    + +

    100 rows × 2 columns

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ab
    0#na#A
    1aA
    2#na#A
    3aA
    4aB
    .........
    95#na#C
    96#na#B
    97#na#A
    98bB
    99#na#B
    + +

    100 rows × 2 columns

    +
    +
    +
    +
    +
    df = pd.DataFrame()
    +df["a"] = alphabet[np.random.randint(0,2,100)]
    +df["a"] = df["a"].astype('category')
    +s = df['a']
    +display(s)
    +tfm = TSCategoricalEncoder()
    +tfm.fit(s)
    +joblib.dump(tfm, "data/TSCategoricalEncoder.joblib")
    +tfm = joblib.load("data/TSCategoricalEncoder.joblib")
    +s = tfm.transform(s)
    +display(s)
    +s = tfm.inverse_transform(s)
    +display(s)
    +
    +
    0     a
    +1     b
    +2     a
    +3     a
    +4     a
    +     ..
    +95    a
    +96    a
    +97    a
    +98    a
    +99    b
    +Name: a, Length: 100, dtype: category
    +Categories (2, object): ['a', 'b']
    +
    +
    +
    0     1
    +1     2
    +2     1
    +3     1
    +4     1
    +     ..
    +95    1
    +96    1
    +97    1
    +98    1
    +99    2
    +Length: 100, dtype: int8
    +
    +
    +
    0     a
    +1     b
    +2     a
    +3     a
    +4     a
    +     ..
    +95    a
    +96    a
    +97    a
    +98    a
    +99    b
    +Length: 100, dtype: object
    +
    +
    +
    +

    source

    +
    +
    +

    TSTargetEncoder

    +
    +
     TSTargetEncoder (target_column, columns=None, inplace=True, prefix=None,
    +                  suffix=None, drop=True, dtypes=['object', 'category'])
    +
    +

    Mixin class for all transformers in scikit-learn.

    +

    If :term:get_feature_names_out is defined, then :class:BaseEstimator will automatically wrap transform and fit_transform to follow the set_output API. See the :ref:developer_api_set_output for details.

    + + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    class:OneToOneFeatureMixin and :class:ClassNamePrefixFeaturesOutMixin are helpful mixins for defining :term:get_feature_names_out.
    TypeDefaultDetails
    target_columncolumn containing the target
    columnsNoneTypeNoneList[str], optional. Columns to encode, all non-numerical columns by default.
    inplaceboolTruebool, optional. Modify input DataFrame, True by default.
    prefixNoneTypeNonestr, optional. Prefix for created column names. None by default.
    suffixNoneTypeNonestr, optional. Suffix for created column names. None by default.
    dropboolTruebool, optional. Drop original columns, False by default.
    dtypeslist[‘object’, ‘category’]List[str]. List with dtypes that will be used to identify columns to encode if not explicitly passed.
    +
    +
    from sklearn.model_selection import train_test_split
    +
    +# Create a dataframe with 100 rows
    +np.random.seed(42)
    +df = pd.DataFrame({
    +    'category1': np.random.choice(['cat', 'dog', 'rabbit'], 100),
    +    'category2': np.random.choice(['large', 'small'], 100),
    +    'continuous': np.random.rand(100),
    +    'target': np.random.randint(0, 2, 100)
    +})
    +
    +display(df)
    +
    +# Split the data into train and test sets
    +train_idx, test_idx = train_test_split(np.arange(100), test_size=0.2, random_state=42)
    +print(train_idx.shape)
    +
    +# Initialize the encoder
    +encoder = TSTargetEncoder(columns=['category1', 'category2'], target_column='target', inplace=False, suffix="te", drop=False)
    +
    +# Fit the encoder using the training data
    +encoder.fit(df, idxs=train_idx)
    +
    +# Transform the whole dataframe
    +df_encoded = encoder.transform(df)
    +
    +# Check the results
    +for c in ["category1", "category2"]:
    +    for v in df[c].unique():
    +        assert df.loc[train_idx][df.loc[train_idx, c] == v]["target"].mean() == df_encoded[df_encoded[c] == v][f"{c}_te"].mean()
    +        
    +df_encoded
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    category1category2continuoustarget
    0rabbitsmall0.8960910
    1catsmall0.3180031
    2rabbitsmall0.1100521
    3rabbitlarge0.2279350
    4catlarge0.4271080
    ...............
    95catsmall0.3254000
    96catlarge0.7464910
    97rabbitsmall0.6496331
    98catsmall0.8492230
    99catlarge0.6576131
    + +

    100 rows × 4 columns

    +
    +
    +
    +
    (80,)
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    category1category2continuoustargetcategory1_tecategory2_te
    0rabbitsmall0.89609100.5652170.500000
    1catsmall0.31800310.5555560.500000
    2rabbitsmall0.11005210.5652170.500000
    3rabbitlarge0.22793500.5652170.521739
    4catlarge0.42710800.5555560.521739
    .....................
    95catsmall0.32540000.5555560.500000
    96catlarge0.74649100.5555560.521739
    97rabbitsmall0.64963310.5652170.500000
    98catsmall0.84922300.5555560.500000
    99catlarge0.65761310.5555560.521739
    + +

    100 rows × 6 columns

    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSDateTimeEncoder

    +
    +
     TSDateTimeEncoder (datetime_columns=None, prefix=None, drop=True,
    +                    time=False, attr=['Year', 'Month', 'Week', 'Day',
    +                    'Dayofweek', 'Dayofyear', 'Is_month_end',
    +                    'Is_month_start', 'Is_quarter_end',
    +                    'Is_quarter_start', 'Is_year_end', 'Is_year_start'])
    +
    +

    Base class for all estimators in scikit-learn.

    +

    Inheriting from this class provides default implementations of:

    +
      +
    • setting and getting parameters used by GridSearchCV and friends;
    • +
    • textual and HTML representation displayed in terminals and IDEs;
    • +
    • estimator serialization;
    • +
    • parameters validation;
    • +
    • data validation;
    • +
    • feature names validation.
    • +
    +

    Read more in the :ref:User Guide <rolling_your_own_estimator>.

    +
    +
    import datetime as dt
    +
    +
    +
    df = pd.DataFrame()
    +df.loc[0, "date"] = dt.datetime.now()
    +df.loc[1, "date"] = dt.datetime.now() + pd.Timedelta(1, unit="D")
    +tfm = TSDateTimeEncoder()
    +joblib.dump(tfm, "data/TSDateTimeEncoder.joblib")
    +tfm = joblib.load("data/TSDateTimeEncoder.joblib")
    +tfm.fit_transform(df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    _Year_Month_Week_Day_Dayofweek_Dayofyear_Is_month_end_Is_month_start_Is_quarter_end_Is_quarter_start_Is_year_end_Is_year_start
    02023624175168FalseFalseFalseFalseFalseFalse
    12023624186169FalseFalseFalseFalseFalseFalse
    + +
    +
    +
    +
    +

    source

    +
    +
    +

    TSDropIfTrueCols

    +
    +
     TSDropIfTrueCols (columns=None)
    +
    +

    Base class for all estimators in scikit-learn.

    +

    Inheriting from this class provides default implementations of:

    +
      +
    • setting and getting parameters used by GridSearchCV and friends;
    • +
    • textual and HTML representation displayed in terminals and IDEs;
    • +
    • estimator serialization;
    • +
    • parameters validation;
    • +
    • data validation;
    • +
    • feature names validation.
    • +
    +

    Read more in the :ref:User Guide <rolling_your_own_estimator>.

    +
    +
    # test TSDropIfTrueCols
    +df = pd.DataFrame()
    +df["a"] = [0, 0, 1, 0, 0]
    +df["b"] = [0, 0, 0, 0, 0]
    +df["c"] = [0, 1, 0, 0, 1]
    +
    +expected_output = pd.DataFrame()
    +expected_output["b"] = [0, 0, 0, 0]
    +expected_output["c"] = [0, 1, 0, 1]
    +
    +tfm = TSDropIfTrueCols("a")
    +output = tfm.fit_transform(df)
    +test_eq(output, expected_output),
    +
    +
    (None,)
    +
    +
    +
    +

    source

    +
    +
    +

    TSApplyFunction

    +
    +
     TSApplyFunction (function, groups=None, group_keys=False, axis=1,
    +                  columns=None, reset_index=False, drop=True)
    +
    +

    Base class for all estimators in scikit-learn.

    +

    Inheriting from this class provides default implementations of:

    +
      +
    • setting and getting parameters used by GridSearchCV and friends;
    • +
    • textual and HTML representation displayed in terminals and IDEs;
    • +
    • estimator serialization;
    • +
    • parameters validation;
    • +
    • data validation;
    • +
    • feature names validation.
    • +
    +

    Read more in the :ref:User Guide <rolling_your_own_estimator>.

    +
    +
    df = pd.DataFrame()
    +df["a"] = [0, 0, 1, 0, 0]
    +df["b"] = [0, 0, 0, 0, 0]
    +df["c"] = [0, 1, 0, 0, 1]
    +
    +df.apply(lambda x: 1, )
    +
    +
    a    1
    +b    1
    +c    1
    +dtype: int64
    +
    +
    +
    +
    # test ApplyFunction without groups
    +df = pd.DataFrame()
    +df["a"] = [0, 0, 1, 0, 0]
    +df["b"] = [0, 0, 0, 0, 0]
    +df["c"] = [0, 1, 0, 0, 1]
    +
    +expected_output = pd.Series([1,1,1])
    +
    +tfm = TSApplyFunction(lambda x: 1, axis=0, reset_index=True)
    +output = tfm.fit_transform(df)
    +test_eq(output, expected_output)
    +
    +
    +
    # test ApplyFunction with groups and square function
    +df = pd.DataFrame()
    +df["a"] = [0, 1, 2, 3, 4]
    +df["id"] = [0, 0, 0, 1, 1]
    +
    +expected_output = pd.Series([5, 25])
    +
    +tfm = TSApplyFunction(lambda x: (x["a"]**2).sum(), groups="id")
    +
    +output = tfm.fit_transform(df)
    +test_eq(output, expected_output)
    +
    +
    +

    source

    +
    +
    +

    TSMissingnessEncoder

    +
    +
     TSMissingnessEncoder (columns=None)
    +
    +

    Base class for all estimators in scikit-learn.

    +

    Inheriting from this class provides default implementations of:

    +
      +
    • setting and getting parameters used by GridSearchCV and friends;
    • +
    • textual and HTML representation displayed in terminals and IDEs;
    • +
    • estimator serialization;
    • +
    • parameters validation;
    • +
    • data validation;
    • +
    • feature names validation.
    • +
    +

    Read more in the :ref:User Guide <rolling_your_own_estimator>.

    +
    +
    data = np.random.rand(10,3)
    +data[data > .8] = np.nan
    +df = pd.DataFrame(data, columns=["a", "b", "c"])
    +tfm = TSMissingnessEncoder()
    +tfm.fit(df)
    +joblib.dump(tfm, "data/TSMissingnessEncoder.joblib")
    +tfm = joblib.load("data/TSMissingnessEncoder.joblib")
    +df = tfm.transform(df)
    +df
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abca_missingb_missingc_missing
    0NaNNaNNaN111
    10.5113420.5015160.798295000
    20.6499640.7019670.795793000
    3NaN0.3379950.375583100
    40.0939820.5782800.035942000
    50.4655980.5426450.286541000
    60.5908330.0305000.037348000
    7NaN0.3601910.127061100
    80.5222430.7699940.215821000
    90.6228900.0853470.051682000
    + +
    +
    +
    +
    +

    source

    +
    +
    +

    TSSortByColumns

    +
    +
     TSSortByColumns (columns, ascending=True, inplace=True, kind='stable',
    +                  na_position='last', ignore_index=False, key=None)
    +
    +

    Transforms a dataframe by sorting by columns.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    columnsColumns to sort by
    ascendingboolTrueAscending or descending
    inplaceboolTruePerform operation in place
    kindstrstableType of sort to use
    na_positionstrlastWhere to place NaNs
    ignore_indexboolFalseDo not preserve index
    keyNoneTypeNoneFunction to apply to values before sorting
    +
    +
    # Test
    +df = pd.DataFrame(np.random.rand(10,3), columns=["a", "b", "c"])
    +df_ori = df.copy()
    +tfm = TSSortByColumns(["a", "b"])
    +df = tfm.fit_transform(df)
    +test_eq(df_ori.sort_values(["a", "b"]).values, df.values)
    +
    +
    +

    source

    +
    +
    +

    TSSelectColumns

    +
    +
     TSSelectColumns (columns)
    +
    +

    Transform used to select columns

    + + + + + + + + + + + + + +
    Details
    columnsstr or List[str]. Selected columns.
    +
    +
    # Test
    +df = pd.DataFrame(np.random.rand(10,3), columns=["a", "b", "c"])
    +df_ori = df.copy()
    +tfm = TSSelectColumns(["a", "b"])
    +df = tfm.fit_transform(df)
    +test_eq(df_ori[["a", "b"]].values, df.values)
    +df = tfm.inverse_transform(df)
    +
    +
    +

    source

    +
    +
    +

    TSStepsSinceStart

    +
    +
     TSStepsSinceStart (datetime_col, datetime_unit='D', start_datetime=None,
    +                    drop=False, dtype=None)
    +
    +

    Add a column indicating the number of steps since the start in each row

    +
    +
    # Test
    +df = pd.DataFrame(np.random.rand(10,3), columns=["a", "b", "c"])
    +df["datetime"] = pd.date_range("2020-01-01", periods=10)
    +display(df)
    +df_ori = df.copy()
    +tfm = TSStepsSinceStart("datetime", datetime_unit="D", drop=True, dtype=np.int32)
    +df = tfm.fit_transform(df)
    +display(df)
    +test_eq(df["days_since_start"].values, np.arange(10))
    +df = tfm.inverse_transform(df)
    +test_eq(df_ori.values, df.values)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abcdatetime
    00.6432880.4582530.5456172020-01-01
    10.9414650.3861030.9611912020-01-02
    20.9053510.1957910.0693612020-01-03
    30.1007780.0182220.0944432020-01-04
    40.6830070.0711890.3189762020-01-05
    50.8448750.0232720.8144682020-01-06
    60.2818550.1181650.6967372020-01-07
    70.6289430.8774720.7350712020-01-08
    80.8034810.2820350.1774402020-01-09
    90.7506150.8068350.9905052020-01-10
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abcdays_since_start
    00.6432880.4582530.5456170
    10.9414650.3861030.9611911
    20.9053510.1957910.0693612
    30.1007780.0182220.0944433
    40.6830070.0711890.3189764
    50.8448750.0232720.8144685
    60.2818550.1181650.6967376
    70.6289430.8774720.7350717
    80.8034810.2820350.1774408
    90.7506150.8068350.9905059
    + +
    +
    +
    +
    +

    source

    +
    +
    +

    TSStandardScaler

    +
    +
     TSStandardScaler (columns=None, mean=None, std=None, eps=1e-06)
    +
    +

    Scale the values of specified columns in the input DataFrame to have a mean of 0 and standard deviation of 1.

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    columnsNoneTypeNoneColumn name(s) to be transformed. If None, all columns are transformed. Defaults to None.
    meanNoneTypeNoneMean value for each column. If None, the mean value of each column is calculated during the fit method. Defaults to None.
    stdNoneTypeNoneStdev value for each column. If None, the standard deviation value of each column is calculated during the fit method. Defaults to None.
    epsfloat1e-06A small value to avoid division by zero. Defaults to 1e-6.
    +
    +
    # Test
    +df = pd.DataFrame(np.random.rand(100,3), columns=["a", "b", "c"])
    +tfm = TSStandardScaler()
    +df = tfm.fit_transform(df)
    +test_close(df.mean().values, np.zeros(3), 1e-3)
    +test_close(df.std().values, np.ones(3), 1e-3)
    +
    +
    +
    # Test
    +df = pd.DataFrame(np.random.rand(1000,3), columns=["a", "b", "c"])
    +tfm = TSStandardScaler()
    +df = tfm.fit_transform(df, idxs=slice(0, 800))
    +test_close(df.mean().values, np.zeros(3), 1e-1)
    +test_close(df.std().values, np.ones(3), 1e-1)
    +
    +
    +

    source

    +
    +
    +

    TSRobustScaler

    +
    +
     TSRobustScaler (columns=None, quantile_range=(25.0, 75.0), eps=1e-06)
    +
    +

    This Scaler removes the median and scales the data according to the quantile range (defaults to IQR: Interquartile Range)

    +
    +
    # test RobustScaler
    +df = pd.DataFrame(np.random.rand(100,3), columns=["a", "b", "c"])
    +df["a"] = df["a"] * 100
    +df["b"] = df["b"] * 10
    +tfm = TSRobustScaler()
    +df = tfm.fit_transform(df)
    +test_close(df.median().values, np.zeros(3), 1e-3)
    +
    +
    +

    source

    +
    +
    +

    TSAddMissingTimestamps

    +
    +
     TSAddMissingTimestamps (datetime_col=None, use_index=False,
    +                         unique_id_cols=None, fill_value=nan,
    +                         range_by_group=True, start_date=None,
    +                         end_date=None, freq=None)
    +
    +

    Mixin class for all transformers in scikit-learn.

    +

    If :term:get_feature_names_out is defined, then :class:BaseEstimator will automatically wrap transform and fit_transform to follow the set_output API. See the :ref:developer_api_set_output for details.

    +

    :class:OneToOneFeatureMixin and :class:ClassNamePrefixFeaturesOutMixin are helpful mixins for defining :term:get_feature_names_out.

    +
    +
    # Test
    +df = pd.DataFrame(np.random.rand(10,3), columns=["a", "b", "c"])
    +df["datetime"] = pd.date_range("2020-01-01", periods=10)
    +df = df.iloc[[0, 2, 3, 5, 6, 8, 9]]
    +display(df)
    +tfm = TSAddMissingTimestamps(datetime_col="datetime", freq="D")
    +df = tfm.fit_transform(df)
    +display(df)
    +test_eq(df.shape[0], 10)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abcdatetime
    00.2111260.7524680.0512942020-01-01
    20.3945720.5299410.1613672020-01-03
    30.5719960.8054320.7601612020-01-04
    50.3610750.4084560.6796972020-01-06
    60.0566800.0346730.3919112020-01-07
    80.2598280.8860860.8956902020-01-09
    90.2972870.2299940.4113042020-01-10
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    datetimeabc
    02020-01-010.2111260.7524680.051294
    12020-01-02NaNNaNNaN
    22020-01-030.3945720.5299410.161367
    32020-01-040.5719960.8054320.760161
    42020-01-05NaNNaNNaN
    52020-01-060.3610750.4084560.679697
    62020-01-070.0566800.0346730.391911
    72020-01-08NaNNaNNaN
    82020-01-090.2598280.8860860.895690
    92020-01-100.2972870.2299940.411304
    + +
    +
    +
    +
    +
    # Test
    +# Filling dates between min and max dates for each value in groupby column
    +dates = pd.date_range('2021-05-01', '2021-05-07').values
    +dates = np.concatenate((dates, dates))
    +data = np.zeros((len(dates), 4))
    +data[:, 0] = dates
    +data[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))
    +data[:, 2] = np.random.rand(len(dates))
    +data[:, 3] = np.random.rand(len(dates))
    +cols = ['date', 'id', 'feature1', 'feature2']
    +date_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})
    +date_df_with_missing_dates = date_df.drop([0,1,3,8,11,13]).reset_index(drop=True)
    +display(date_df_with_missing_dates)
    +tfm = TSAddMissingTimestamps(datetime_col="date", unique_id_cols="id", freq="D")
    +df = tfm.fit_transform(date_df_with_missing_dates.copy())
    +display(df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-0300.8260650.793818
    12021-05-0500.8243500.577807
    22021-05-0600.3969920.866102
    32021-05-0700.1563170.289440
    42021-05-0110.7379510.467681
    52021-05-0310.6712710.411190
    62021-05-0410.2706440.427486
    72021-05-0610.9925820.564232
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-0300.8260650.793818
    12021-05-040NaNNaN
    22021-05-0500.8243500.577807
    32021-05-0600.3969920.866102
    42021-05-0700.1563170.289440
    52021-05-0110.7379510.467681
    62021-05-021NaNNaN
    72021-05-0310.6712710.411190
    82021-05-0410.2706440.427486
    92021-05-051NaNNaN
    102021-05-0610.9925820.564232
    + +
    +
    +
    +
    +
    # Test
    +display(date_df_with_missing_dates)
    +tfm = TSAddMissingTimestamps(datetime_col="date", unique_id_cols="id", freq="D", range_by_group=False)
    +df = tfm.fit_transform(date_df_with_missing_dates.copy())
    +display(df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-0300.8260650.793818
    12021-05-0500.8243500.577807
    22021-05-0600.3969920.866102
    32021-05-0700.1563170.289440
    42021-05-0110.7379510.467681
    52021-05-0310.6712710.411190
    62021-05-0410.2706440.427486
    72021-05-0610.9925820.564232
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    dateidfeature1feature2
    02021-05-010NaNNaN
    12021-05-020NaNNaN
    22021-05-0300.8260650.793818
    32021-05-040NaNNaN
    42021-05-0500.8243500.577807
    52021-05-0600.3969920.866102
    62021-05-0700.1563170.289440
    72021-05-0110.7379510.467681
    82021-05-021NaNNaN
    92021-05-0310.6712710.411190
    102021-05-0410.2706440.427486
    112021-05-051NaNNaN
    122021-05-0610.9925820.564232
    132021-05-071NaNNaN
    + +
    +
    +
    +
    +

    source

    +
    +
    +

    TSDropDuplicates

    +
    +
     TSDropDuplicates (datetime_col=None, use_index=False,
    +                   unique_id_cols=None, keep='last', reset_index=False)
    +
    +

    Drop rows with duplicated values in a set of columns, optionally including a datetime column or index

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    datetime_colNoneTypeNone(str or List[str], optional): Name(s) of column(s) containing datetime values. If None, the index is used if use_index=True.
    use_indexboolFalse(bool, optional): Whether to include the index in the set of columns for checking duplicates. Defaults to False.
    unique_id_colsNoneTypeNone(str or List[str], optional): Name(s) of column(s) to be included in the set of columns for checking duplicates. Defaults to None.
    keepstrlast(str, optional): Which duplicated values to keep. Choose from {‘first’, ‘last’, False}. Defaults to ‘last’.
    reset_indexboolFalse(bool, optional): Whether to reset the index after dropping duplicates. Ignored if use_index=False. Defaults to False.
    +
    +
    # Test
    +df = pd.DataFrame(np.random.rand(10,3), columns=["a", "b", "c"])
    +df["datetime"] = pd.date_range("2020-01-01", periods=10)
    +df['user_id'] = np.sort(np.random.randint(0, 2, 10))
    +df = df.iloc[[0, 2, 2, 3, 5, 6, 6, 8, 9]]
    +df.reset_index(drop=True, inplace=True)
    +display(df)
    +tfm = TSDropDuplicates(datetime_col="datetime", unique_id_cols="a")
    +df = tfm.fit_transform(df)
    +display(df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abcdatetimeuser_id
    00.2015280.9344330.6890882020-01-010
    10.0162000.8183800.0401392020-01-030
    20.0162000.8183800.0401392020-01-030
    30.8899130.9919630.2940672020-01-040
    40.8655620.1028430.1259552020-01-061
    50.9791520.6738390.8468872020-01-071
    60.9791520.6738390.8468872020-01-071
    70.6031500.6825320.5753592020-01-091
    80.4290620.2759230.7685812020-01-101
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abcdatetimeuser_id
    00.2015280.9344330.6890882020-01-010
    20.0162000.8183800.0401392020-01-030
    30.8899130.9919630.2940672020-01-040
    40.8655620.1028430.1259552020-01-061
    60.9791520.6738390.8468872020-01-071
    70.6031500.6825320.5753592020-01-091
    80.4290620.2759230.7685812020-01-101
    + +
    +
    +
    +
    +

    source

    +
    +
    +

    TSFillMissing

    +
    +
     TSFillMissing (columns=None, unique_id_cols=None, method='ffill',
    +                value=0)
    +
    +

    Fill missing values in specified columns using the specified method and/ or value.

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    columnsNoneTypeNone(str or List[str], optional): Column name(s) to be transformed. If None, all columns are transformed. Defaults to None.
    unique_id_colsNoneTypeNone(str or List[str], optional): Col name(s) with unique ids for each row. If None, uses all rows at once. Defaults to None .
    methodstrffill(str, optional): The method to use for filling missing values, e.g. ‘ffill’, ‘bfill’. If None, value is used. Defaults to None.
    valueint0(scalar or dict or Series, optional): The value to use for filling missing values. If None, method is used. Defaults to None.
    +
    +
    # Test
    +df = pd.DataFrame(np.random.rand(20,3), columns=["a", "b", "c"])
    +df.loc[np.random.rand(20) > .5, 'a'] = np.nan
    +df["datetime"] = pd.date_range("2020-01-01", periods=20)
    +df['user_id'] = np.sort(np.random.randint(0, 2, 20))
    +df = df.iloc[[0, 2, 2, 3, 5, 6, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]
    +df.reset_index(drop=True, inplace=True)
    +display(df)
    +tfm = TSFillMissing(columns="a", method="ffill", value=0)
    +df = tfm.fit_transform(df)
    +display(df)
    +test_eq(df['a'].isna().sum(), 0)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abcdatetimeuser_id
    0NaN0.0599430.1309742020-01-010
    10.7341510.3413190.4785282020-01-030
    20.7341510.3413190.4785282020-01-030
    30.9288600.3319720.4653372020-01-040
    4NaN0.6313750.4263982020-01-060
    50.5481450.1746470.2959322020-01-070
    60.5481450.1746470.2959322020-01-070
    7NaN0.5768810.5639202020-01-090
    80.5002790.0693940.0898772020-01-100
    90.6009120.3409590.9172682020-01-110
    100.4065910.1432810.7147192020-01-120
    11NaN0.5254700.6978332020-01-131
    12NaN0.7921910.6763612020-01-141
    13NaN0.9459250.2958242020-01-151
    14NaN0.2719550.2178912020-01-161
    15NaN0.6337120.5934612020-01-171
    160.0162430.7287780.3235302020-01-181
    17NaN0.5565780.3427312020-01-191
    180.1345760.0944190.8315182020-01-201
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abcdatetimeuser_id
    00.0000000.0599430.1309742020-01-010
    10.7341510.3413190.4785282020-01-030
    20.7341510.3413190.4785282020-01-030
    30.9288600.3319720.4653372020-01-040
    40.9288600.6313750.4263982020-01-060
    50.5481450.1746470.2959322020-01-070
    60.5481450.1746470.2959322020-01-070
    70.5481450.5768810.5639202020-01-090
    80.5002790.0693940.0898772020-01-100
    90.6009120.3409590.9172682020-01-110
    100.4065910.1432810.7147192020-01-120
    110.4065910.5254700.6978332020-01-131
    120.4065910.7921910.6763612020-01-141
    130.4065910.9459250.2958242020-01-151
    140.4065910.2719550.2178912020-01-161
    150.4065910.6337120.5934612020-01-171
    160.0162430.7287780.3235302020-01-181
    170.0162430.5565780.3427312020-01-191
    180.1345760.0944190.8315182020-01-201
    + +
    +
    +
    +
    +

    source

    +
    +
    +

    TSMissingnessEncoder

    +
    +
     TSMissingnessEncoder (columns=None)
    +
    +

    Base class for all estimators in scikit-learn.

    +

    Inheriting from this class provides default implementations of:

    +
      +
    • setting and getting parameters used by GridSearchCV and friends;
    • +
    • textual and HTML representation displayed in terminals and IDEs;
    • +
    • estimator serialization;
    • +
    • parameters validation;
    • +
    • data validation;
    • +
    • feature names validation.
    • +
    +

    Read more in the :ref:User Guide <rolling_your_own_estimator>.

    +
    +
    # Test
    +df = pd.DataFrame(np.random.rand(20,3), columns=["a", "b", "c"])
    +df.loc[np.random.rand(20) > .5, 'a'] = np.nan
    +df["datetime"] = pd.date_range("2020-01-01", periods=20)
    +df['user_id'] = np.sort(np.random.randint(0, 2, 20))
    +df = df.iloc[[0, 2, 2, 3, 5, 6, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]
    +df.reset_index(drop=True, inplace=True)
    +display(df)
    +tfm = TSMissingnessEncoder(columns="a")
    +df = tfm.fit_transform(df)
    +display(df)
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abcdatetimeuser_id
    00.8736190.9955690.5827142020-01-010
    10.4027040.6725070.6821922020-01-030
    20.4027040.6725070.6821922020-01-030
    3NaN0.1332100.6323962020-01-040
    40.7006110.7534720.8728592020-01-060
    5NaN0.7302490.6191732020-01-070
    6NaN0.7302490.6191732020-01-070
    7NaN0.6171060.8499592020-01-090
    80.1962460.1255500.9634802020-01-101
    90.1080450.4784910.5855642020-01-111
    10NaN0.0860320.0570272020-01-121
    110.1054830.5855880.5443452020-01-131
    120.2337410.6377740.8200682020-01-141
    13NaN0.4981300.6893102020-01-151
    14NaN0.3077710.6136382020-01-161
    150.8979350.8099240.5831302020-01-171
    160.7302220.3648220.6409662020-01-181
    170.4661820.1899360.7017382020-01-191
    18NaN0.3586220.9113392020-01-201
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    abcdatetimeuser_ida_missing
    00.8736190.9955690.5827142020-01-0100
    10.4027040.6725070.6821922020-01-0300
    20.4027040.6725070.6821922020-01-0300
    3NaN0.1332100.6323962020-01-0401
    40.7006110.7534720.8728592020-01-0600
    5NaN0.7302490.6191732020-01-0701
    6NaN0.7302490.6191732020-01-0701
    7NaN0.6171060.8499592020-01-0901
    80.1962460.1255500.9634802020-01-1010
    90.1080450.4784910.5855642020-01-1110
    10NaN0.0860320.0570272020-01-1211
    110.1054830.5855880.5443452020-01-1310
    120.2337410.6377740.8200682020-01-1410
    13NaN0.4981300.6893102020-01-1511
    14NaN0.3077710.6136382020-01-1611
    150.8979350.8099240.5831302020-01-1710
    160.7302220.3648220.6409662020-01-1810
    170.4661820.1899360.7017382020-01-1910
    18NaN0.3586220.9113392020-01-2011
    + +
    +
    +
    +

    With these sklearn preprocessing API transforms it’s possible to build data preprocessing pipelines like this one:

    +
    from sklearn.pipeline import Pipeline
    +
    +cont_cols = ['cont_0', 'cont_1', 'cont_2', 'cont_3', 'cont_4', 'cont_5']
    +pipe = Pipeline([
    +    ('shrinker', TSShrinkDataFrame()), 
    +    ('drop_duplicates', TSDropDuplicates('date', unique_id_cols='user_id')),
    +    ('add_mts', TSAddMissingTimestamps(datetime_col='date', unique_id_cols='user_id', freq='D', range_by_group=False)),
    +    ('onehot_encoder', TSOneHotEncoder(['cat_0'])),
    +    ('cat_encoder', TSCategoricalEncoder(['user_id', 'cat_1'])),
    +    ('steps_since_start', TSStepsSinceStart('date', datetime_unit='D', start_datetime='2017-01-01'), dtype=np.int32),
    +    ('missing_encoder', TSMissingnessEncoder(['cont_1'])),
    +    ('fill_missing', TSFillMissing(cont_cols, unique_id_cols='user_id', value=0)),
    +    ], 
    +    verbose=True)
    +df = pipe.fit_transform(df)
    +
    +
    +

    y transforms

    +
    +

    source

    +
    +

    Preprocessor

    +
    +
     Preprocessor (preprocessor, **kwargs)
    +
    +

    Initialize self. See help(type(self)) for accurate signature.

    +
    +
    # Standardize
    +from tsai.data.validation import TimeSplitter
    +
    +
    +
    y = random_shuffle(np.random.randn(1000) * 10 + 5)
    +splits = TimeSplitter()(y)
    +preprocessor = Preprocessor(StandardScaler)
    +preprocessor.fit(y[splits[0]])
    +y_tfm = preprocessor.transform(y)
    +test_close(preprocessor.inverse_transform(y_tfm), y)
    +plt.hist(y, 50, label='ori',)
    +plt.hist(y_tfm, 50, label='tfm')
    +plt.legend(loc='best')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    # RobustScaler
    +y = random_shuffle(np.random.randn(1000) * 10 + 5)
    +splits = TimeSplitter()(y)
    +preprocessor = Preprocessor(RobustScaler)
    +preprocessor.fit(y[splits[0]])
    +y_tfm = preprocessor.transform(y)
    +test_close(preprocessor.inverse_transform(y_tfm), y)
    +plt.hist(y, 50, label='ori',)
    +plt.hist(y_tfm, 50, label='tfm')
    +plt.legend(loc='best')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    # Normalize
    +y = random_shuffle(np.random.rand(1000) * 3 + .5)
    +splits = TimeSplitter()(y)
    +preprocessor = Preprocessor(Normalizer)
    +preprocessor.fit(y[splits[0]])
    +y_tfm = preprocessor.transform(y)
    +test_close(preprocessor.inverse_transform(y_tfm), y)
    +plt.hist(y, 50, label='ori',)
    +plt.hist(y_tfm, 50, label='tfm')
    +plt.legend(loc='best')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    # BoxCox
    +y = random_shuffle(np.random.rand(1000) * 10 + 5)
    +splits = TimeSplitter()(y)
    +preprocessor = Preprocessor(BoxCox)
    +preprocessor.fit(y[splits[0]])
    +y_tfm = preprocessor.transform(y)
    +test_close(preprocessor.inverse_transform(y_tfm), y)
    +plt.hist(y, 50, label='ori',)
    +plt.hist(y_tfm, 50, label='tfm')
    +plt.legend(loc='best')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    # YeoJohnshon
    +y = random_shuffle(np.random.randn(1000) * 10 + 5)
    +y = np.random.beta(.5, .5, size=1000)
    +splits = TimeSplitter()(y)
    +preprocessor = Preprocessor(YeoJohnshon)
    +preprocessor.fit(y[splits[0]])
    +y_tfm = preprocessor.transform(y)
    +test_close(preprocessor.inverse_transform(y_tfm), y)
    +plt.hist(y, 50, label='ori',)
    +plt.hist(y_tfm, 50, label='tfm')
    +plt.legend(loc='best')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    # QuantileTransformer
    +y = - np.random.beta(1, .5, 10000) * 10
    +splits = TimeSplitter()(y)
    +preprocessor = Preprocessor(Quantile)
    +preprocessor.fit(y[splits[0]])
    +plt.hist(y, 50, label='ori',)
    +y_tfm = preprocessor.transform(y)
    +plt.legend(loc='best')
    +plt.show()
    +plt.hist(y_tfm, 50, label='tfm')
    +plt.legend(loc='best')
    +plt.show()
    +test_close(preprocessor.inverse_transform(y_tfm), y, 1e-1)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    ReLabeler

    +
    +
     ReLabeler (cm)
    +
    +

    Changes the labels in a dataset based on a dictionary (class mapping) Args: cm = class mapping dictionary

    +
    +
    vals = {0:'a', 1:'b', 2:'c', 3:'d', 4:'e'}
    +y = np.array([vals[i] for i in np.random.randint(0, 5, 20)])
    +labeler = ReLabeler(dict(a='x', b='x', c='y', d='z', e='z'))
    +y_new = labeler(y)
    +test_eq(y.shape, y_new.shape)
    +y, y_new
    +
    +
    (array(['d', 'd', 'a', 'd', 'b', 'e', 'a', 'd', 'b', 'c', 'b', 'e', 'b',
    +        'b', 'a', 'e', 'd', 'e', 'c', 'e'], dtype='<U1'),
    + array(['z', 'z', 'x', 'z', 'x', 'z', 'x', 'z', 'x', 'y', 'x', 'z', 'x',
    +        'x', 'x', 'z', 'z', 'z', 'y', 'z'], dtype='<U1'))
    +
    +
    + + +
    +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.tabular.html b/data.tabular.html new file mode 100644 index 000000000..cc4d527c6 --- /dev/null +++ b/data.tabular.html @@ -0,0 +1,2259 @@ + + + + + + + + + +tsai - Time Series Tabular Data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Time Series Tabular Data

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Main Tabular functions used throughout the library. This is helpful when you have additional time series data like metadata, time series features, etc.

    +
    +
    +

    source

    +
    +

    get_tabular_ds

    +
    +
     get_tabular_ds (df, procs=[<class 'fastai.tabular.core.Categorify'>,
    +                 <class 'fastai.tabular.core.FillMissing'>, <class
    +                 'fastai.data.transforms.Normalize'>], cat_names=None,
    +                 cont_names=None, y_names=None, groupby=None,
    +                 y_block=None, splits=None, do_setup=True, inplace=False,
    +                 reduce_memory=True, device=None)
    +
    +
    +

    source

    +
    +
    +

    get_tabular_dls

    +
    +
     get_tabular_dls (df, procs=[<class 'fastai.tabular.core.Categorify'>,
    +                  <class 'fastai.tabular.core.FillMissing'>, <class
    +                  'fastai.data.transforms.Normalize'>], cat_names=None,
    +                  cont_names=None, y_names=None, bs=64, y_block=None,
    +                  splits=None, do_setup=True, inplace=False,
    +                  reduce_memory=True, device=None,
    +                  path:Union[str,pathlib.Path]='.')
    +
    +
    +

    source

    +
    +
    +

    preprocess_df

    +
    +
     preprocess_df (df, procs=[<class 'fastai.tabular.core.Categorify'>,
    +                <class 'fastai.tabular.core.FillMissing'>, <class
    +                'fastai.data.transforms.Normalize'>], cat_names=None,
    +                cont_names=None, y_names=None, sample_col=None,
    +                reduce_memory=True)
    +
    +
    +
    path = untar_data(URLs.ADULT_SAMPLE)
    +df = pd.read_csv(path/'adult.csv')
    +# df['salary'] = np.random.rand(len(df)) # uncomment to simulate a cont dependent variable
    +
    +cat_names = ['workclass', 'education', 'education-num', 'marital-status', 'occupation', 'relationship', 'race', 'sex',
    +             'capital-gain', 'capital-loss', 'native-country']
    +cont_names = ['age', 'fnlwgt', 'hours-per-week']
    +target = ['salary']
    +splits = RandomSplitter()(range_of(df))
    +
    +dls = get_tabular_dls(df, cat_names=cat_names, cont_names=cont_names, y_names='salary', splits=splits, bs=512, device=device)
    +dls.show_batch()
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    workclasseducationeducation-nummarital-statusoccupationrelationshipracesexcapital-gaincapital-lossnative-countryagefnlwgthours-per-weeksalary
    0PrivateSome-college10.0DivorcedExec-managerialNot-in-familyWhiteMale00United-States48.000000190072.00000550.000000>=50k
    1Self-emp-not-incSome-college10.0Married-civ-spouseSalesHusbandWhiteMale00United-States72.000001284120.00296440.000000<50k
    2PrivateSome-college10.0Married-civ-spouseProtective-servHusbandBlackMale00United-States72.00000153684.00249740.000000<50k
    3Self-emp-incSome-college10.0Married-civ-spouseFarming-fishingHusbandWhiteMale00United-States47.000000337049.99887540.000000<50k
    4PrivateHS-grad9.0DivorcedCraft-repairNot-in-familyWhiteMale00United-States46.000000207677.00070730.000000<50k
    5Private5th-6th3.0DivorcedPriv-house-servUnmarriedWhiteFemale00Mexico45.000000265082.99914235.000000<50k
    6PrivateAssoc-acdm12.0Never-marriedOther-serviceNot-in-familyWhiteFemale00United-States28.000000150296.00132879.999999<50k
    7PrivateHS-grad9.0Married-civ-spouseExec-managerialHusbandWhiteMale00United-States50.00000094080.99935340.000000>=50k
    8PrivateAssoc-voc11.0Married-civ-spouseExec-managerialHusbandWhiteMale00Germany58.000000235624.00030240.000000>=50k
    9PrivateHS-grad9.0Never-marriedOther-serviceUnmarriedBlackFemale00Japan29.000000419721.00899640.000000<50k
    +
    +
    +
    +
    metrics = mae if dls.c == 1 else accuracy
    +learn = tabular_learner(dls, layers=[200, 100], y_range=None, metrics=metrics)
    +learn.fit(1, 1e-2)
    +
    + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    00.3495250.2889220.86609300:05
    +
    +
    +
    +
    learn.dls.one_batch()
    +
    +
    (tensor([[  5,  12,   9,  ...,   1,   1,  21],
    +         [  1,  10,  13,  ...,   1,   1,   3],
    +         [  5,   4,   2,  ...,   1,   1,   6],
    +         ...,
    +         [  5,   6,   4,  ...,   1,   1,  40],
    +         [  3,  10,  13,  ...,   1,   1,  40],
    +         [  5,  12,   9,  ..., 116,   1,  40]]),
    + tensor([[-0.2593,  0.1234,  1.1829],
    +         [-0.9913, -1.4041, -0.0347],
    +         [-0.1129,  0.4583, -0.0347],
    +         ...,
    +         [-1.5769, -0.1989,  0.3712],
    +         [ 0.4727, -1.4400,  0.3712],
    +         [ 1.5708, -0.2222, -0.0347]]),
    + tensor([[1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [1],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [0],
    +         [0],
    +         [1],
    +         [0],
    +         [0],
    +         [1],
    +         [1]], dtype=torch.int8))
    +
    +
    +
    +
    learn.model
    +
    +
    TabularModel(
    +  (embeds): ModuleList(
    +    (0): Embedding(10, 6)
    +    (1): Embedding(17, 8)
    +    (2): Embedding(17, 8)
    +    (3): Embedding(8, 5)
    +    (4): Embedding(16, 8)
    +    (5): Embedding(7, 5)
    +    (6): Embedding(6, 4)
    +    (7): Embedding(3, 3)
    +    (8): Embedding(117, 23)
    +    (9): Embedding(90, 20)
    +    (10): Embedding(43, 13)
    +  )
    +  (emb_drop): Dropout(p=0.0, inplace=False)
    +  (bn_cont): BatchNorm1d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +  (layers): Sequential(
    +    (0): LinBnDrop(
    +      (0): Linear(in_features=106, out_features=200, bias=False)
    +      (1): ReLU(inplace=True)
    +      (2): BatchNorm1d(200, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    )
    +    (1): LinBnDrop(
    +      (0): Linear(in_features=200, out_features=100, bias=False)
    +      (1): ReLU(inplace=True)
    +      (2): BatchNorm1d(100, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    )
    +    (2): LinBnDrop(
    +      (0): Linear(in_features=100, out_features=2, bias=True)
    +    )
    +  )
    +)
    +
    +
    +
    +
    path = untar_data(URLs.ADULT_SAMPLE)
    +df = pd.read_csv(path/'adult.csv')
    +cat_names = ['workclass', 'education', 'education-num', 'marital-status', 'occupation', 'relationship', 'race', 'sex',
    +             'capital-gain', 'capital-loss', 'native-country']
    +cont_names = ['age', 'fnlwgt', 'hours-per-week']
    +target = ['salary']
    +df, procs = preprocess_df(df, procs=[Categorify, FillMissing, Normalize], cat_names=cat_names, cont_names=cont_names, y_names=target, 
    +                          sample_col=None, reduce_memory=True)
    +df.head()
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    workclasseducationeducation-nummarital-statusoccupationrelationshipracesexcapital-gaincapital-lossnative-countryagefnlwgthours-per-weeksalary
    0581230651148400.763796-0.838084-0.0354291
    151314152521011400.3972330.4449870.3695191
    25120105311140-0.042642-0.886734-0.6833480
    3615153111221140-0.042642-0.728873-0.0354291
    47603963111400.250608-1.0183140.7744680
    + +
    +
    +
    +
    +
    procs.classes, procs.means, procs.stds
    +
    +
    ({'workclass': ['#na#', ' ?', ' Federal-gov', ' Local-gov', ' Never-worked', ' Private', ' Self-emp-inc', ' Self-emp-not-inc', ' State-gov', ' Without-pay'],
    +  'education': ['#na#', ' 10th', ' 11th', ' 12th', ' 1st-4th', ' 5th-6th', ' 7th-8th', ' 9th', ' Assoc-acdm', ' Assoc-voc', ' Bachelors', ' Doctorate', ' HS-grad', ' Masters', ' Preschool', ' Prof-school', ' Some-college'],
    +  'education-num': ['#na#', 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0],
    +  'marital-status': ['#na#', ' Divorced', ' Married-AF-spouse', ' Married-civ-spouse', ' Married-spouse-absent', ' Never-married', ' Separated', ' Widowed'],
    +  'occupation': ['#na#', ' ?', ' Adm-clerical', ' Armed-Forces', ' Craft-repair', ' Exec-managerial', ' Farming-fishing', ' Handlers-cleaners', ' Machine-op-inspct', ' Other-service', ' Priv-house-serv', ' Prof-specialty', ' Protective-serv', ' Sales', ' Tech-support', ' Transport-moving'],
    +  'relationship': ['#na#', ' Husband', ' Not-in-family', ' Other-relative', ' Own-child', ' Unmarried', ' Wife'],
    +  'race': ['#na#', ' Amer-Indian-Eskimo', ' Asian-Pac-Islander', ' Black', ' Other', ' White'],
    +  'sex': ['#na#', ' Female', ' Male'],
    +  'capital-gain': ['#na#', 0, 114, 401, 594, 914, 991, 1055, 1086, 1111, 1151, 1173, 1409, 1424, 1455, 1471, 1506, 1639, 1797, 1831, 1848, 2009, 2036, 2050, 2062, 2105, 2174, 2176, 2202, 2228, 2290, 2329, 2346, 2354, 2387, 2407, 2414, 2463, 2538, 2580, 2597, 2635, 2653, 2829, 2885, 2907, 2936, 2961, 2964, 2977, 2993, 3103, 3137, 3273, 3325, 3411, 3418, 3432, 3456, 3464, 3471, 3674, 3781, 3818, 3887, 3908, 3942, 4064, 4101, 4386, 4416, 4508, 4650, 4687, 4787, 4865, 4931, 4934, 5013, 5060, 5178, 5455, 5556, 5721, 6097, 6360, 6418, 6497, 6514, 6723, 6767, 6849, 7298, 7430, 7443, 7688, 7896, 7978, 8614, 9386, 9562, 10520, 10566, 10605, 11678, 13550, 14084, 14344, 15020, 15024, 15831, 18481, 20051, 22040, 25124, 25236, 27828, 34095, 41310, 99999],
    +  'capital-loss': ['#na#', 0, 155, 213, 323, 419, 625, 653, 810, 880, 974, 1092, 1138, 1258, 1340, 1380, 1408, 1411, 1485, 1504, 1539, 1564, 1573, 1579, 1590, 1594, 1602, 1617, 1628, 1648, 1651, 1668, 1669, 1672, 1719, 1721, 1726, 1735, 1740, 1741, 1755, 1762, 1816, 1825, 1844, 1848, 1876, 1887, 1902, 1944, 1974, 1977, 1980, 2001, 2002, 2042, 2051, 2057, 2080, 2129, 2149, 2163, 2174, 2179, 2201, 2205, 2206, 2231, 2238, 2246, 2258, 2267, 2282, 2339, 2352, 2377, 2392, 2415, 2444, 2457, 2467, 2472, 2489, 2547, 2559, 2603, 2754, 2824, 3004, 3683, 3770, 3900, 4356],
    +  'native-country': ['#na#', ' ?', ' Cambodia', ' Canada', ' China', ' Columbia', ' Cuba', ' Dominican-Republic', ' Ecuador', ' El-Salvador', ' England', ' France', ' Germany', ' Greece', ' Guatemala', ' Haiti', ' Holand-Netherlands', ' Honduras', ' Hong', ' Hungary', ' India', ' Iran', ' Ireland', ' Italy', ' Jamaica', ' Japan', ' Laos', ' Mexico', ' Nicaragua', ' Outlying-US(Guam-USVI-etc)', ' Peru', ' Philippines', ' Poland', ' Portugal', ' Puerto-Rico', ' Scotland', ' South', ' Taiwan', ' Thailand', ' Trinadad&Tobago', ' United-States', ' Vietnam', ' Yugoslavia']},
    + {'age': 38.58164675532078,
    +  'fnlwgt': 189778.36651208502,
    +  'hours-per-week': 40.437455852092995},
    + {'age': 13.640223192304274,
    +  'fnlwgt': 105548.3568809908,
    +  'hours-per-week': 12.347239175707989})
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.transforms.html b/data.transforms.html new file mode 100644 index 000000000..3c2d26082 --- /dev/null +++ b/data.transforms.html @@ -0,0 +1,2187 @@ + + + + + + + + + +tsai - Time Series Data Augmentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Time Series Data Augmentation

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Functions used to transform TSTensors (Data Augmentation)

    +
    +
    +
    from tsai.data.core import TSCategorize
    +from tsai.data.external import get_UCR_data
    +from tsai.data.preprocessing import TSStandardize
    +
    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, return_split=False)
    +tfms = [None, TSCategorize()]
    +batch_tfms = TSStandardize()
    +dls = get_ts_dls(X, y, tfms=tfms, splits=splits, batch_tfms=batch_tfms, bs=128)
    +xb, yb = next(iter(dls.train))
    +
    +
    +

    source

    +
    +

    TSIdentity

    +
    +
     TSIdentity (magnitude=None, **kwargs)
    +
    +

    Applies the identity tfm to a TSTensor batch

    +
    +
    test_eq(TSIdentity()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSShuffle_HLs

    +
    +
     TSShuffle_HLs (magnitude=1.0, ex=None, **kwargs)
    +
    +

    Randomly shuffles HIs/LOs of an OHLC TSTensor batch

    +
    +
    test_eq(TSShuffle_HLs()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSShuffleSteps

    +
    +
     TSShuffleSteps (magnitude=1.0, ex=None, **kwargs)
    +
    +

    Randomly shuffles consecutive sequence datapoints in batch

    +
    +
    t = TSTensor(torch.arange(11).float())
    +tt_ = []
    +for _ in range(1000):
    +    tt = TSShuffleSteps()(t, split_idx=0)
    +    test_eq(len(set(tt.tolist())), len(t))
    +    test_ne(tt, t)
    +    tt_.extend([t for i,t in enumerate(tt) if t!=i])
    +x, y = np.unique(tt_, return_counts=True) # This is to visualize distribution which should be equal for all and half for first and last items
    +plt.bar(x, y);
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSGaussianNoise

    +
    +
     TSGaussianNoise (magnitude=0.5, additive=True, ex=None, **kwargs)
    +
    +

    Applies additive or multiplicative gaussian noise

    +
    +
    test_eq(TSGaussianNoise(.1, additive=True)(xb, split_idx=0).shape, xb.shape)
    +test_eq(TSGaussianNoise(.1, additive=False)(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSMagMulNoise

    +
    +
     TSMagMulNoise (magnitude=1, ex=None, **kwargs)
    +
    +

    Applies multiplicative noise on the y-axis for each step of a TSTensor batch

    +
    +

    source

    +
    +
    +

    TSMagAddNoise

    +
    +
     TSMagAddNoise (magnitude=1, ex=None, **kwargs)
    +
    +

    Applies additive noise on the y-axis for each step of a TSTensor batch

    +
    +
    test_eq(TSMagAddNoise()(xb, split_idx=0).shape, xb.shape)
    +test_eq(TSMagMulNoise()(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSMagAddNoise()(xb, split_idx=0), xb)
    +test_ne(TSMagMulNoise()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    random_cum_linear_generator

    +
    +
     random_cum_linear_generator (o, magnitude=0.1)
    +
    +
    +

    source

    +
    +
    +

    random_cum_noise_generator

    +
    +
     random_cum_noise_generator (o, magnitude=0.1, noise=None)
    +
    +
    +

    source

    +
    +
    +

    random_cum_curve_generator

    +
    +
     random_cum_curve_generator (o, magnitude=0.1, order=4, noise=None)
    +
    +
    +

    source

    +
    +
    +

    random_curve_generator

    +
    +
     random_curve_generator (o, magnitude=0.1, order=4, noise=None)
    +
    +
    +

    source

    +
    +
    +

    TSTimeNoise

    +
    +
     TSTimeNoise (magnitude=0.1, ex=None, **kwargs)
    +
    +

    Applies noise to each step in the x-axis of a TSTensor batch based on smooth random curve

    +
    +
    test_eq(TSTimeNoise()(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSTimeNoise()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSMagWarp

    +
    +
     TSMagWarp (magnitude=0.02, ord=4, ex=None, **kwargs)
    +
    +

    Applies warping to the y-axis of a TSTensor batch based on a smooth random curve

    +
    +
    test_eq(TSMagWarp()(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSMagWarp()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSTimeWarp

    +
    +
     TSTimeWarp (magnitude=0.1, ord=6, ex=None, **kwargs)
    +
    +

    Applies time warping to the x-axis of a TSTensor batch based on a smooth random curve

    +
    +
    test_eq(TSTimeWarp()(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSTimeWarp()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSWindowWarp

    +
    +
     TSWindowWarp (magnitude=0.1, ex=None, **kwargs)
    +
    +

    Applies window slicing to the x-axis of a TSTensor batch based on a random linear curve based on https://halshs.archives-ouvertes.fr/halshs-01357973/document

    +
    +
    test_eq(TSWindowWarp()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSMagScalePerVar

    +
    +
     TSMagScalePerVar (magnitude=0.5, ex=None, **kwargs)
    +
    +

    Applies per_var scaling to the y-axis of a TSTensor batch based on a scalar

    +
    +

    source

    +
    +
    +

    TSMagScale

    +
    +
     TSMagScale (magnitude=0.5, ex=None, **kwargs)
    +
    +

    Applies scaling to the y-axis of a TSTensor batch based on a scalar

    +
    +
    test_eq(TSMagScale()(xb, split_idx=0).shape, xb.shape)
    +test_eq(TSMagScalePerVar()(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSMagScale()(xb, split_idx=0), xb)
    +test_ne(TSMagScalePerVar()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    test_interpolate

    +
    +
     test_interpolate (mode='linear')
    +
    +
    +
    # Run the test
    +test_interpolate('linear')
    +
    +
    linear interpolation is not supported by mps. You can try a different mode
    +Error: The operator 'aten::upsample_linear1d.out' is not currently implemented for the MPS device. If you want this op to be added in priority during the prototype phase of this feature, please comment on https://github.com/pytorch/pytorch/issues/77764. As a temporary fix, you can set the environment variable `PYTORCH_ENABLE_MPS_FALLBACK=1` to use the CPU as a fallback for this op. WARNING: this will be slower than running natively on MPS.
    +
    +
    +
    False
    +
    +
    +
    +
    test_interpolate('nearest')
    +
    +
    True
    +
    +
    +
    +

    source

    +
    +
    +

    TSRandomResizedCrop

    +
    +
     TSRandomResizedCrop (magnitude=0.1, size=None, scale=None, ex=None,
    +                      mode='nearest', **kwargs)
    +
    +

    Randomly amplifies a sequence focusing on a random section of the steps

    +
    +
    if test_interpolate('nearest'):
    +    test_eq(TSRandomResizedCrop(.5)(xb, split_idx=0).shape, xb.shape)
    +    test_ne(TSRandomResizedCrop(size=.8, scale=(.5, 1))(xb, split_idx=0).shape, xb.shape)
    +    test_ne(TSRandomResizedCrop(size=20, scale=(.5, 1))(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSWindowSlicing

    +
    +
     TSWindowSlicing (magnitude=0.1, ex=None, mode='nearest', **kwargs)
    +
    +

    Randomly extracts an resize a ts slice based on https://halshs.archives-ouvertes.fr/halshs-01357973/document

    +
    +
    if test_interpolate('nearest'):
    +    test_eq(TSWindowSlicing()(xb, split_idx=0).shape, xb.shape)
    +    test_ne(TSWindowSlicing()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSRandomZoomOut

    +
    +
     TSRandomZoomOut (magnitude=0.1, ex=None, mode='nearest', **kwargs)
    +
    +

    Randomly compresses a sequence on the x-axis

    +
    +
    if test_interpolate('nearest'):
    +    test_eq(TSRandomZoomOut(.5)(xb, split_idx=0).shape, xb.shape)#
    +
    +
    +

    source

    +
    +
    +

    TSRandomTimeScale

    +
    +
     TSRandomTimeScale (magnitude=0.1, ex=None, mode='nearest', **kwargs)
    +
    +

    Randomly amplifies/ compresses a sequence on the x-axis keeping the same length

    +
    +
    if test_interpolate('nearest'):
    +    test_eq(TSRandomTimeScale(.5)(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSRandomTimeStep

    +
    +
     TSRandomTimeStep (magnitude=0.02, ex=None, mode='nearest', **kwargs)
    +
    +

    Compresses a sequence on the x-axis by randomly selecting sequence steps and interpolating to previous size

    +
    +
    if test_interpolate('nearest'):
    +    test_eq(TSRandomTimeStep()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSResampleSteps

    +
    +
     TSResampleSteps (step_pct=1.0, same_seq_len=True, magnitude=None,
    +                  **kwargs)
    +
    +

    Transform that randomly selects and sorts sequence steps (with replacement) maintaining the sequence length

    +
    +
    test_eq(TSResampleSteps(step_pct=.9, same_seq_len=False)(xb, split_idx=0).shape[-1], round(.9*xb.shape[-1]))
    +test_eq(TSResampleSteps(step_pct=.9, same_seq_len=True)(xb, split_idx=0).shape[-1], xb.shape[-1])
    +
    +
    +

    source

    +
    +
    +

    TSBlur

    +
    +
     TSBlur (magnitude=1.0, ex=None, filt_len=None, **kwargs)
    +
    +

    Blurs a sequence applying a filter of type [1, 0, 1]

    +
    +
    test_eq(TSBlur(filt_len=7)(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSBlur()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSSmooth

    +
    +
     TSSmooth (magnitude=1.0, ex=None, filt_len=None, **kwargs)
    +
    +

    Smoothens a sequence applying a filter of type [1, 5, 1]

    +
    +
    test_eq(TSSmooth(filt_len=7)(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSSmooth()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSFreqDenoise

    +
    +
     TSFreqDenoise (magnitude=0.1, ex=None, wavelet='db4', level=2, thr=None,
    +                thr_mode='hard', pad_mode='per', **kwargs)
    +
    +

    Denoises a sequence applying a wavelet decomposition method

    +
    +

    source

    +
    +
    +

    maddest

    +
    +
     maddest (d, axis=None)
    +
    +
    +
    try: import pywt
    +except ImportError: pass
    +
    +
    +
    if 'pywt' in dir():
    +    test_eq(TSFreqDenoise()(xb, split_idx=0).shape, xb.shape)
    +    test_ne(TSFreqDenoise()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSRandomFreqNoise

    +
    +
     TSRandomFreqNoise (magnitude=0.1, ex=None, wavelet='db4', level=2,
    +                    mode='constant', **kwargs)
    +
    +

    Applys random noise using a wavelet decomposition method

    +
    +
    if 'pywt' in dir():
    +    test_eq(TSRandomFreqNoise()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSRandomResizedLookBack

    +
    +
     TSRandomResizedLookBack (magnitude=0.1, mode='nearest', **kwargs)
    +
    +

    Selects a random number of sequence steps starting from the end and return an output of the same shape

    +
    +
    if test_interpolate('nearest'):
    +    for i in range(100):
    +        o = TSRandomResizedLookBack()(xb, split_idx=0)
    +        test_eq(o.shape[-1], xb.shape[-1])
    +
    +
    +

    source

    +
    +
    +

    TSRandomLookBackOut

    +
    +
     TSRandomLookBackOut (magnitude=0.1, **kwargs)
    +
    +

    Selects a random number of sequence steps starting from the end and set them to zero

    +
    +
    for i in range(100):
    +    o = TSRandomLookBackOut()(xb, split_idx=0)
    +    test_eq(o.shape[-1], xb.shape[-1])
    +
    +
    +

    source

    +
    +
    +

    TSVarOut

    +
    +
     TSVarOut (magnitude=0.05, ex=None, **kwargs)
    +
    +

    Set the value of a random number of variables to zero

    +
    +
    test_eq(TSVarOut()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSCutOut

    +
    +
     TSCutOut (magnitude=0.05, ex=None, **kwargs)
    +
    +

    Sets a random section of the sequence to zero

    +
    +
    test_eq(TSCutOut()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSTimeStepOut

    +
    +
     TSTimeStepOut (magnitude=0.05, ex=None, **kwargs)
    +
    +

    Sets random sequence steps to zero

    +
    +
    test_eq(TSTimeStepOut()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSRandomCropPad

    +
    +
     TSRandomCropPad (magnitude=0.05, ex=None, **kwargs)
    +
    +

    Crops a section of the sequence of a random length

    +
    +
    test_eq(TSRandomCropPad()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSMaskOut

    +
    +
     TSMaskOut (magnitude=0.1, compensate:bool=False, ex=None, **kwargs)
    +
    +

    Applies a random mask

    +
    +
    test_eq(TSMaskOut()(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSMaskOut()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSInputDropout

    +
    +
     TSInputDropout (magnitude=0.0, ex=None, **kwargs)
    +
    +

    Applies input dropout with required_grad=False

    +
    +
    test_eq(TSInputDropout(.1)(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSInputDropout(.1)(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSTranslateX

    +
    +
     TSTranslateX (magnitude=0.1, ex=None, **kwargs)
    +
    +

    Moves a selected sequence window a random number of steps

    +
    +
    test_eq(TSTranslateX()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSRandomShift

    +
    +
     TSRandomShift (magnitude=0.02, ex=None, **kwargs)
    +
    +

    Shifts and splits a sequence

    +
    +
    test_eq(TSRandomShift()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSHorizontalFlip

    +
    +
     TSHorizontalFlip (magnitude=1.0, ex=None, **kwargs)
    +
    +

    Flips the sequence along the x-axis

    +
    +
    test_eq(TSHorizontalFlip()(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSHorizontalFlip()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSRandomTrend

    +
    +
     TSRandomTrend (magnitude=0.1, ex=None, **kwargs)
    +
    +

    Randomly rotates the sequence along the z-axis

    +
    +
    test_eq(TSRandomTrend()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSVerticalFlip

    +
    +
     TSVerticalFlip (magnitude=1.0, ex=None, **kwargs)
    +
    +

    Applies a negative value to the time sequence

    +
    +
    test_eq(TSVerticalFlip()(xb, split_idx=0).shape, xb.shape)
    +test_ne(TSVerticalFlip()(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSResize

    +
    +
     TSResize (magnitude=-0.5, size=None, ex=None, mode='nearest', **kwargs)
    +
    +

    Resizes the sequence length of a time series

    +
    +
    if test_interpolate('nearest'):
    +    for sz in np.linspace(.2, 2, 10): test_eq(TSResize(sz)(xb, split_idx=0).shape[-1], int(round(xb.shape[-1]*(1+sz))))
    +    test_ne(TSResize(1)(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TSRandomSize

    +
    +
     TSRandomSize (magnitude=0.1, ex=None, mode='nearest', **kwargs)
    +
    +

    Randomly resizes the sequence length of a time series

    +
    +
    if test_interpolate('nearest'):
    +    seq_len_ = []
    +    for i in range(100):
    +        o = TSRandomSize(.5)(xb, split_idx=0)
    +        seq_len_.append(o.shape[-1])
    +    test_lt(min(seq_len_), xb.shape[-1])
    +    test_gt(max(seq_len_), xb.shape[-1])
    +
    +
    +

    source

    +
    +
    +

    TSRandomLowRes

    +
    +
     TSRandomLowRes (magnitude=0.5, ex=None, mode='nearest', **kwargs)
    +
    +

    Randomly resizes the sequence length of a time series to a lower resolution

    +
    +

    source

    +
    +
    +

    TSDownUpScale

    +
    +
     TSDownUpScale (magnitude=0.5, ex=None, mode='nearest', **kwargs)
    +
    +

    Downscales a time series and upscales it again to previous sequence length

    +
    +
    if test_interpolate('nearest'):
    +    test_eq(TSDownUpScale()(xb, split_idx=0).shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSRandomDownUpScale

    +
    +
     TSRandomDownUpScale (magnitude=0.5, ex=None, mode='nearest', **kwargs)
    +
    +

    Randomly downscales a time series and upscales it again to previous sequence length

    +
    +
    if test_interpolate('nearest'):
    +    test_eq(TSRandomDownUpScale()(xb, split_idx=0).shape, xb.shape)
    +    test_ne(TSDownUpScale()(xb, split_idx=0), xb)
    +    test_eq(TSDownUpScale()(xb, split_idx=1), xb)
    +
    +
    +

    source

    +
    +
    +

    TSRandomConv

    +
    +
     TSRandomConv (magnitude=0.05, ex=None, ks=[1, 3, 5, 7], **kwargs)
    +
    +

    Applies a convolution with a random kernel and random weights with required_grad=False

    +
    +
    for i in range(5):
    +    o = TSRandomConv(magnitude=0.05, ex=None, ks=[1, 3, 5, 7])(xb, split_idx=0)
    +    test_eq(o.shape, xb.shape)
    +
    +
    +

    source

    +
    +
    +

    TSRandom2Value

    +
    +
     TSRandom2Value (magnitude=0.1, sel_vars=None, sel_steps=None,
    +                 static=False, value=nan, **kwargs)
    +
    +

    Randomly sets selected variables of type TSTensor to predefined value (default: np.nan)

    +
    +
    t = TSTensor(torch.ones(2, 3, 10))
    +TSRandom2Value(magnitude=0.5, sel_vars=None, sel_steps=None, static=False, value=0)(t, split_idx=0).data
    +
    +
    tensor([[[0., 0., 1., 0., 1., 1., 0., 1., 1., 0.],
    +         [1., 1., 0., 1., 1., 1., 1., 1., 1., 0.],
    +         [1., 1., 1., 1., 1., 0., 0., 1., 1., 1.]],
    +
    +        [[1., 1., 1., 1., 1., 0., 1., 1., 0., 1.],
    +         [0., 0., 0., 0., 0., 1., 0., 1., 0., 1.],
    +         [0., 1., 0., 1., 0., 0., 0., 1., 0., 0.]]])
    +
    +
    +
    +
    t = TSTensor(torch.ones(2, 3, 10))
    +TSRandom2Value(magnitude=0.5, sel_vars=[1], sel_steps=slice(-5, None), static=False, value=0)(t, split_idx=0).data
    +
    +
    tensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [1., 1., 1., 1., 1., 0., 1., 0., 0., 0.],
    +         [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]],
    +
    +        [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [1., 1., 1., 1., 1., 0., 1., 0., 0., 0.],
    +         [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]])
    +
    +
    +
    +
    t = TSTensor(torch.ones(2, 3, 10))
    +TSRandom2Value(magnitude=0.5, sel_vars=[1], sel_steps=None, static=True, value=0)(t, split_idx=0).data
    +
    +
    tensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
    +         [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]],
    +
    +        [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]])
    +
    +
    +
    +
    t = TSTensor(torch.ones(2, 3, 10))
    +TSRandom2Value(magnitude=1, sel_vars=1, sel_steps=None, static=False, value=0)(t, split_idx=0).data
    +
    +
    tensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
    +         [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]],
    +
    +        [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
    +         [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]])
    +
    +
    +
    +
    t = TSTensor(torch.ones(2, 3, 10))
    +TSRandom2Value(magnitude=1, sel_vars=[1,2], sel_steps=None, static=False, value=0)(t, split_idx=0).data
    +
    +
    tensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
    +         [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]],
    +
    +        [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
    +         [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]])
    +
    +
    +
    +
    t = TSTensor(torch.ones(2, 3, 10))
    +TSRandom2Value(magnitude=1, sel_vars=1, sel_steps=[1,3,5], static=False, value=0)(t, split_idx=0).data
    +
    +
    tensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.],
    +         [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]],
    +
    +        [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.],
    +         [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]])
    +
    +
    +
    +
    t = TSTensor(torch.ones(2, 3, 10))
    +TSRandom2Value(magnitude=1, sel_vars=[1,2], sel_steps=[1,3,5], static=False, value=0)(t, split_idx=0).data
    +
    +
    tensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.],
    +         [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.]],
    +
    +        [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
    +         [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.],
    +         [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.]]])
    +
    +
    +
    +
    t = TSTensor(torch.ones(2,3,4))
    +TSRandom2Value(magnitude=.5, sel_vars=[0,2])(t, split_idx=0).data
    +
    +
    tensor([[[1., nan, nan, 1.],
    +         [1., 1., 1., 1.],
    +         [1., nan, 1., 1.]],
    +
    +        [[nan, 1., 1., nan],
    +         [1., 1., 1., 1.],
    +         [nan, nan, 1., 1.]]])
    +
    +
    +
    +
    t = TSTensor(torch.ones(2,3,4))
    +TSRandom2Value(magnitude=.5, sel_steps=slice(2, None))(t, split_idx=0).data
    +
    +
    tensor([[[1., 1., 1., nan],
    +         [1., 1., nan, 1.],
    +         [1., 1., nan, nan]],
    +
    +        [[1., 1., nan, 1.],
    +         [1., 1., nan, nan],
    +         [1., 1., nan, 1.]]])
    +
    +
    +
    +
    t = TSTensor(torch.ones(2,3,100))
    +test_gt(np.isnan(TSRandom2Value(magnitude=.5)(t, split_idx=0)).sum().item(), 0)
    +t = TSTensor(torch.ones(2,3,100))
    +test_gt(np.isnan(TSRandom2Value(magnitude=.5, sel_vars=[0,2])(t, split_idx=0)[:, [0,2]]).sum().item(), 0)
    +t = TSTensor(torch.ones(2,3,100))
    +test_eq(np.isnan(TSRandom2Value(magnitude=.5, sel_vars=[0,2])(t, split_idx=0)[:, 1]).sum().item(), 0)
    +
    +
    +

    source

    +
    +
    +

    TSMask2Value

    +
    +
     TSMask2Value (mask_fn, value=nan, sel_vars=None, **kwargs)
    +
    +

    Randomly sets selected variables of type TSTensor to predefined value (default: np.nan)

    +
    +
    t = TSTensor(torch.ones(2,3,100))
    +def _mask_fn(o, r=.15, value=np.nan):
    +    return torch.rand_like(o) > (1-r)
    +test_gt(np.isnan(TSMask2Value(_mask_fn)(t, split_idx=0)).sum().item(), 0)
    +
    +
    +

    source

    +
    +
    +

    TSSelfDropout

    +
    +
     TSSelfDropout (p:float=1.0, nm:str=None, before_call:callable=None,
    +                **kwargs)
    +
    +

    Applies dropout to a tensor with nan values by rotating axis=0 inplace

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    pfloat1.0Probability of applying Transform
    nmstrNone
    before_callcallableNoneOptional batchwise preprocessing function
    kwargs
    +
    +

    source

    +
    +
    +

    self_mask

    +
    +
     self_mask (o)
    +
    +
    +
    t = TSTensor(torch.ones(2,3,100))
    +mask = torch.rand_like(t) > .7
    +t[mask] = np.nan
    +nan_perc = np.isnan(t).float().mean().item()
    +t2 = TSSelfDropout()(t, split_idx=0)
    +test_gt(torch.isnan(t2).float().mean().item(), nan_perc)
    +nan_perc, torch.isnan(t2).float().mean().item()
    +
    +
    (0.30000001192092896, 0.49000000953674316)
    +
    +
    +
    +

    source

    +
    +
    +

    RandAugment

    +
    +
     RandAugment (tfms:list, N:int=1, M:int=3, **kwargs)
    +
    +

    A transform that before_call its state at each __call__

    +
    +
    test_ne(RandAugment(TSMagAddNoise, N=5, M=10)(xb, split_idx=0), xb)
    +
    +
    +

    source

    +
    +
    +

    TestTfm

    +
    +
     TestTfm (tfm, magnitude=1.0, ex=None, **kwargs)
    +
    +

    Utility class to test the output of selected tfms during training

    +
    +

    source

    +
    +
    +

    get_tfm_name

    +
    +
     get_tfm_name (tfm)
    +
    +
    +
    test_eq(get_tfm_name(partial(TSMagScale()))==get_tfm_name((partial(TSMagScale()), 0.1, .05))==get_tfm_name(TSMagScale())==get_tfm_name((TSMagScale(), 0.1, .05)), True)
    +
    +
    +
    all_TS_randaugs_names = [get_tfm_name(t) for t in all_TS_randaugs]
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.unwindowed.html b/data.unwindowed.html new file mode 100644 index 000000000..622dd487f --- /dev/null +++ b/data.unwindowed.html @@ -0,0 +1,1442 @@ + + + + + + + + + +tsai - Unwindowed datasets + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Unwindowed datasets

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Functionality that will allow you to create a dataset that applies sliding windows to the input data on the fly. This heavily reduces the size of the input data files, as only the original unwindowed data needs to be stored.

    +
    +

    I’d like to thank both Thomas Capelle (https://github.com/tcapelle) and Xander Dunn (https://github.com/xanderdunn) for their contributions to make this code possible.

    +
    +

    source

    +
    +

    TSUnwindowedDatasets

    +
    +
     TSUnwindowedDatasets (dataset, splits)
    +
    +

    Base class for lists with subsets

    +
    +

    source

    +
    +
    +

    TSUnwindowedDataset

    +
    +
     TSUnwindowedDataset (X=None, y=None, y_func=None, window_size=1,
    +                      stride=1, drop_start=0, drop_end=0, seq_first=True,
    +                      **kwargs)
    +
    +

    Initialize self. See help(type(self)) for accurate signature.

    +
    +
    def y_func(y): return y.astype('float').mean(1)
    +
    +

    This approach works with both univariate and multivariate data.

    +
      +
    • Univariate: we’ll use a simple array with 20 values, one with the seq_len first (X0), the other with seq_len second (X1).
    • +
    • Multivariate: we’ll use 2 time series arrays, one with the seq_len first (X2), the other with seq_len second (X3). No sliding window has been applied to them yet.
    • +
    +
    +
    # Univariate
    +X0 = np.arange(20).astype(float)
    +X1 = np.arange(20).reshape(1, -1).astype(float)
    +X0.shape, X0, X1.shape, X1
    +
    +
    ((20,),
    + array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12.,
    +        13., 14., 15., 16., 17., 18., 19.]),
    + (1, 20),
    + array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11., 12.,
    +         13., 14., 15., 16., 17., 18., 19.]]))
    +
    +
    +
    +
    # Multivariate
    +X2 = np.arange(20).reshape(-1,1)*np.array([1, 10, 100]).reshape(1,-1).astype(float)
    +X3 = np.arange(20).reshape(1,-1)*np.array([1, 10, 100]).reshape(-1,1).astype(float)
    +X2.shape, X3.shape, X2, X3
    +
    +
    ((20, 3),
    + (3, 20),
    + array([[0.0e+00, 0.0e+00, 0.0e+00],
    +        [1.0e+00, 1.0e+01, 1.0e+02],
    +        [2.0e+00, 2.0e+01, 2.0e+02],
    +        [3.0e+00, 3.0e+01, 3.0e+02],
    +        [4.0e+00, 4.0e+01, 4.0e+02],
    +        [5.0e+00, 5.0e+01, 5.0e+02],
    +        [6.0e+00, 6.0e+01, 6.0e+02],
    +        [7.0e+00, 7.0e+01, 7.0e+02],
    +        [8.0e+00, 8.0e+01, 8.0e+02],
    +        [9.0e+00, 9.0e+01, 9.0e+02],
    +        [1.0e+01, 1.0e+02, 1.0e+03],
    +        [1.1e+01, 1.1e+02, 1.1e+03],
    +        [1.2e+01, 1.2e+02, 1.2e+03],
    +        [1.3e+01, 1.3e+02, 1.3e+03],
    +        [1.4e+01, 1.4e+02, 1.4e+03],
    +        [1.5e+01, 1.5e+02, 1.5e+03],
    +        [1.6e+01, 1.6e+02, 1.6e+03],
    +        [1.7e+01, 1.7e+02, 1.7e+03],
    +        [1.8e+01, 1.8e+02, 1.8e+03],
    +        [1.9e+01, 1.9e+02, 1.9e+03]]),
    + array([[0.0e+00, 1.0e+00, 2.0e+00, 3.0e+00, 4.0e+00, 5.0e+00, 6.0e+00,
    +         7.0e+00, 8.0e+00, 9.0e+00, 1.0e+01, 1.1e+01, 1.2e+01, 1.3e+01,
    +         1.4e+01, 1.5e+01, 1.6e+01, 1.7e+01, 1.8e+01, 1.9e+01],
    +        [0.0e+00, 1.0e+01, 2.0e+01, 3.0e+01, 4.0e+01, 5.0e+01, 6.0e+01,
    +         7.0e+01, 8.0e+01, 9.0e+01, 1.0e+02, 1.1e+02, 1.2e+02, 1.3e+02,
    +         1.4e+02, 1.5e+02, 1.6e+02, 1.7e+02, 1.8e+02, 1.9e+02],
    +        [0.0e+00, 1.0e+02, 2.0e+02, 3.0e+02, 4.0e+02, 5.0e+02, 6.0e+02,
    +         7.0e+02, 8.0e+02, 9.0e+02, 1.0e+03, 1.1e+03, 1.2e+03, 1.3e+03,
    +         1.4e+03, 1.5e+03, 1.6e+03, 1.7e+03, 1.8e+03, 1.9e+03]]))
    +
    +
    +

    Now, instead of applying SlidingWindow to create and save the time series that can be consumed by a time series model, we can use a dataset that creates the data on the fly. In this way we avoid the need to create and save large files. This approach is also useful when you want to test different sliding window sizes, as otherwise you would need to create files for every size you want to test.The dataset will create the samples correctly formatted and ready to be passed on to a time series architecture.

    +
    +
    wds0 = TSUnwindowedDataset(X0, window_size=5, stride=2, seq_first=True)[:][0]
    +wds1 = TSUnwindowedDataset(X1, window_size=5, stride=2, seq_first=False)[:][0]
    +test_eq(wds0, wds1)
    +wds0, wds0.data, wds1, wds1.data
    +
    +
    (TSTensor(samples:8, vars:1, len:5, device=cpu),
    + tensor([[[ 0.,  1.,  2.,  3.,  4.]],
    + 
    +         [[ 2.,  3.,  4.,  5.,  6.]],
    + 
    +         [[ 4.,  5.,  6.,  7.,  8.]],
    + 
    +         [[ 6.,  7.,  8.,  9., 10.]],
    + 
    +         [[ 8.,  9., 10., 11., 12.]],
    + 
    +         [[10., 11., 12., 13., 14.]],
    + 
    +         [[12., 13., 14., 15., 16.]],
    + 
    +         [[14., 15., 16., 17., 18.]]]),
    + TSTensor(samples:8, vars:1, len:5, device=cpu),
    + tensor([[[ 0.,  1.,  2.,  3.,  4.]],
    + 
    +         [[ 2.,  3.,  4.,  5.,  6.]],
    + 
    +         [[ 4.,  5.,  6.,  7.,  8.]],
    + 
    +         [[ 6.,  7.,  8.,  9., 10.]],
    + 
    +         [[ 8.,  9., 10., 11., 12.]],
    + 
    +         [[10., 11., 12., 13., 14.]],
    + 
    +         [[12., 13., 14., 15., 16.]],
    + 
    +         [[14., 15., 16., 17., 18.]]]))
    +
    +
    +
    +
    wds2 = TSUnwindowedDataset(X2, window_size=5, stride=2, seq_first=True)[:][0]
    +wds3 = TSUnwindowedDataset(X3, window_size=5, stride=2, seq_first=False)[:][0]
    +test_eq(wds2, wds3)
    +wds2, wds3, wds2.data, wds3.data
    +
    +
    (TSTensor(samples:8, vars:3, len:5, device=cpu),
    + TSTensor(samples:8, vars:3, len:5, device=cpu),
    + tensor([[[0.0000e+00, 1.0000e+00, 2.0000e+00, 3.0000e+00, 4.0000e+00],
    +          [0.0000e+00, 1.0000e+01, 2.0000e+01, 3.0000e+01, 4.0000e+01],
    +          [0.0000e+00, 1.0000e+02, 2.0000e+02, 3.0000e+02, 4.0000e+02]],
    + 
    +         [[2.0000e+00, 3.0000e+00, 4.0000e+00, 5.0000e+00, 6.0000e+00],
    +          [2.0000e+01, 3.0000e+01, 4.0000e+01, 5.0000e+01, 6.0000e+01],
    +          [2.0000e+02, 3.0000e+02, 4.0000e+02, 5.0000e+02, 6.0000e+02]],
    + 
    +         [[4.0000e+00, 5.0000e+00, 6.0000e+00, 7.0000e+00, 8.0000e+00],
    +          [4.0000e+01, 5.0000e+01, 6.0000e+01, 7.0000e+01, 8.0000e+01],
    +          [4.0000e+02, 5.0000e+02, 6.0000e+02, 7.0000e+02, 8.0000e+02]],
    + 
    +         [[6.0000e+00, 7.0000e+00, 8.0000e+00, 9.0000e+00, 1.0000e+01],
    +          [6.0000e+01, 7.0000e+01, 8.0000e+01, 9.0000e+01, 1.0000e+02],
    +          [6.0000e+02, 7.0000e+02, 8.0000e+02, 9.0000e+02, 1.0000e+03]],
    + 
    +         [[8.0000e+00, 9.0000e+00, 1.0000e+01, 1.1000e+01, 1.2000e+01],
    +          [8.0000e+01, 9.0000e+01, 1.0000e+02, 1.1000e+02, 1.2000e+02],
    +          [8.0000e+02, 9.0000e+02, 1.0000e+03, 1.1000e+03, 1.2000e+03]],
    + 
    +         [[1.0000e+01, 1.1000e+01, 1.2000e+01, 1.3000e+01, 1.4000e+01],
    +          [1.0000e+02, 1.1000e+02, 1.2000e+02, 1.3000e+02, 1.4000e+02],
    +          [1.0000e+03, 1.1000e+03, 1.2000e+03, 1.3000e+03, 1.4000e+03]],
    + 
    +         [[1.2000e+01, 1.3000e+01, 1.4000e+01, 1.5000e+01, 1.6000e+01],
    +          [1.2000e+02, 1.3000e+02, 1.4000e+02, 1.5000e+02, 1.6000e+02],
    +          [1.2000e+03, 1.3000e+03, 1.4000e+03, 1.5000e+03, 1.6000e+03]],
    + 
    +         [[1.4000e+01, 1.5000e+01, 1.6000e+01, 1.7000e+01, 1.8000e+01],
    +          [1.4000e+02, 1.5000e+02, 1.6000e+02, 1.7000e+02, 1.8000e+02],
    +          [1.4000e+03, 1.5000e+03, 1.6000e+03, 1.7000e+03, 1.8000e+03]]]),
    + tensor([[[0.0000e+00, 1.0000e+00, 2.0000e+00, 3.0000e+00, 4.0000e+00],
    +          [0.0000e+00, 1.0000e+01, 2.0000e+01, 3.0000e+01, 4.0000e+01],
    +          [0.0000e+00, 1.0000e+02, 2.0000e+02, 3.0000e+02, 4.0000e+02]],
    + 
    +         [[2.0000e+00, 3.0000e+00, 4.0000e+00, 5.0000e+00, 6.0000e+00],
    +          [2.0000e+01, 3.0000e+01, 4.0000e+01, 5.0000e+01, 6.0000e+01],
    +          [2.0000e+02, 3.0000e+02, 4.0000e+02, 5.0000e+02, 6.0000e+02]],
    + 
    +         [[4.0000e+00, 5.0000e+00, 6.0000e+00, 7.0000e+00, 8.0000e+00],
    +          [4.0000e+01, 5.0000e+01, 6.0000e+01, 7.0000e+01, 8.0000e+01],
    +          [4.0000e+02, 5.0000e+02, 6.0000e+02, 7.0000e+02, 8.0000e+02]],
    + 
    +         [[6.0000e+00, 7.0000e+00, 8.0000e+00, 9.0000e+00, 1.0000e+01],
    +          [6.0000e+01, 7.0000e+01, 8.0000e+01, 9.0000e+01, 1.0000e+02],
    +          [6.0000e+02, 7.0000e+02, 8.0000e+02, 9.0000e+02, 1.0000e+03]],
    + 
    +         [[8.0000e+00, 9.0000e+00, 1.0000e+01, 1.1000e+01, 1.2000e+01],
    +          [8.0000e+01, 9.0000e+01, 1.0000e+02, 1.1000e+02, 1.2000e+02],
    +          [8.0000e+02, 9.0000e+02, 1.0000e+03, 1.1000e+03, 1.2000e+03]],
    + 
    +         [[1.0000e+01, 1.1000e+01, 1.2000e+01, 1.3000e+01, 1.4000e+01],
    +          [1.0000e+02, 1.1000e+02, 1.2000e+02, 1.3000e+02, 1.4000e+02],
    +          [1.0000e+03, 1.1000e+03, 1.2000e+03, 1.3000e+03, 1.4000e+03]],
    + 
    +         [[1.2000e+01, 1.3000e+01, 1.4000e+01, 1.5000e+01, 1.6000e+01],
    +          [1.2000e+02, 1.3000e+02, 1.4000e+02, 1.5000e+02, 1.6000e+02],
    +          [1.2000e+03, 1.3000e+03, 1.4000e+03, 1.5000e+03, 1.6000e+03]],
    + 
    +         [[1.4000e+01, 1.5000e+01, 1.6000e+01, 1.7000e+01, 1.8000e+01],
    +          [1.4000e+02, 1.5000e+02, 1.6000e+02, 1.7000e+02, 1.8000e+02],
    +          [1.4000e+03, 1.5000e+03, 1.6000e+03, 1.7000e+03, 1.8000e+03]]]))
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/data.validation.html b/data.validation.html new file mode 100644 index 000000000..c89be805f --- /dev/null +++ b/data.validation.html @@ -0,0 +1,2954 @@ + + + + + + + + + +tsai - Spliting data + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Spliting data

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Functions required to perform cross-validation and transform unique time series sequence into multiple samples ready to be used by a time series model.

    +
    +
    +

    source

    +
    +

    RandomSplitter

    +
    +
     RandomSplitter (valid_pct=0.2, seed=None)
    +
    +

    Create function that splits items between train/val with valid_pct randomly.

    +
    +

    source

    +
    +
    +

    balance_idx

    +
    +
     balance_idx (o, shuffle=False, strategy='oversample', random_state=None,
    +              verbose=False)
    +
    +
    +

    source

    +
    +
    +

    leakage_finder

    +
    +
     leakage_finder (*splits, verbose=True)
    +
    +

    You can pass splits as a tuple, or train, valid, …

    +
    +

    source

    +
    +
    +

    check_splits_overlap

    +
    +
     check_splits_overlap (splits)
    +
    +
    +

    source

    +
    +
    +

    check_overlap

    +
    +
     check_overlap (a, b, c=None)
    +
    +

    Checks if there’s overlap between array-like objects

    +
    +
    a = np.arange(10)
    +b = np.arange(10, 20)
    +test_eq(check_overlap(a, b), False)
    +a = np.arange(10)
    +b = np.arange(9, 20)
    +test_eq(check_overlap(a, b), [9])
    +a = np.arange(10)
    +b = np.arange(10, 20)
    +c = np.arange(20, 30)
    +test_eq(check_overlap(a, b, c), False)
    +a = np.arange(10)
    +b = np.arange(10, 20)
    +c = np.arange(10, 30)
    +test_eq(check_overlap(a, b, c), ([], [], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]))
    +
    +
    +
    y = np.concatenate([[i] * np.random.randint(10, 100) for i in range(5)])
    +train_split = np.random.choice(len(y), int(len(y) * .8), False)
    +c, v = np.unique(y[train_split], return_counts=True)
    +print(f"{'imbalanced:':25} {c} {v}")
    +
    +oversampled_train_split = train_split[balance_idx(y[train_split], strategy="oversample")]
    +osc, osv = np.unique(y[oversampled_train_split], return_counts=True)
    +print(f"{'balanced (oversample):':25} {osc} {osv}")
    +test_eq(osv, [max(v)] * len(v))
    +
    +undersampled_train_split = train_split[balance_idx(y[train_split], strategy="undersample")]
    +usc, usv = np.unique(y[undersampled_train_split], return_counts=True)
    +print(f"{'balanced (undersample):':25} {usc} {usv}")
    +test_eq(usv, [min(v)] * len(v))
    +
    +
    imbalanced:               [0 1 2 3 4] [24 43 64 41  8]
    +balanced (oversample):    [0 1 2 3 4] [64 64 64 64 64]
    +balanced (undersample):   [0 1 2 3 4] [8 8 8 8 8]
    +
    +
    +
    +
    l = L(list(concat(np.zeros(5), np.ones(10)).astype(int)))
    +balanced_idx = balance_idx(l)
    +test_eq(np.mean(l[balanced_idx]), 0.5)
    +test_eq(isinstance(balanced_idx, L), True)
    +
    +l = list(concat(np.zeros(5), np.ones(10)).astype(int))
    +balanced_idx = balance_idx(l)
    +test_eq(np.mean(L(l)[balanced_idx]), 0.5)
    +test_eq(isinstance(balanced_idx, L), True)
    +
    +a = concat(np.zeros(5), np.ones(10)).astype(int)
    +balanced_idx = balance_idx(a)
    +test_eq(np.mean(a[balanced_idx]), 0.5)
    +test_eq(isinstance(balanced_idx, L), True)
    +
    +t = concat(torch.zeros(5), torch.ones(10))
    +balanced_idx = balance_idx(t, shuffle=True)
    +test_eq(t[balanced_idx].mean(), 0.5)
    +test_eq(isinstance(balanced_idx, L), True)
    +
    +
    +
    a, b = np.arange(100_000), np.arange(100_000, 200_000)
    +
    +
    +
    soft_labels = True
    +filter_pseudolabels = .5
    +balanced_pseudolabels = True
    +
    +pseudolabels = torch.rand(1000, 3)
    +pseudolabels = torch.softmax(pseudolabels, -1) if soft_labels else torch.argmax(pseudolabels, -1)
    +hpl = torch.argmax(pseudolabels, -1) if soft_labels else pseudolabels
    +
    +if filter_pseudolabels and pseudolabels.ndim > 1: 
    +    error = 1 - pseudolabels.max(-1).values
    +    filt_pl_idx = np.arange(len(error))[error < filter_pseudolabels]
    +    filt_pl = pseudolabels[error < filter_pseudolabels]
    +    assert len(filt_pl) > 0, 'no filtered pseudolabels'
    +    filt_hpl = torch.argmax(filt_pl, -1)
    +else: 
    +    filt_pl_idx = np.arange(len(pseudolabels))
    +    filt_pl = filt_hpl = pseudolabels
    +
    +
    +
    pl_split = filt_pl_idx[balance_idx(filt_hpl)] if balanced_pseudolabels else filt_pl_idx
    +test_eq(hpl[pl_split].float().mean(), np.mean(np.unique(hpl)))
    +
    +
    +

    source

    +
    +
    +

    TrainValidTestSplitter

    +
    +
     TrainValidTestSplitter (n_splits:int=1, valid_size:Union[float,int]=0.2,
    +                         test_size:Union[float,int]=0.0,
    +                         train_only:bool=False, stratify:bool=True,
    +                         balance:bool=False, strategy:str='oversample',
    +                         shuffle:bool=True,
    +                         random_state:Optional[int]=None,
    +                         verbose:bool=False, **kwargs)
    +
    +

    Split items into random train, valid (and test optional) subsets.

    +
    +

    source

    +
    +
    +

    plot_splits

    +
    +
     plot_splits (splits)
    +
    +
    +

    source

    +
    +
    +

    get_splits

    +
    +
     get_splits (o, n_splits:int=1, valid_size:float=0.2, test_size:float=0.0,
    +             train_only:bool=False,
    +             train_size:Union[NoneType,float,int]=None,
    +             balance:bool=False, strategy:str='oversample',
    +             shuffle:bool=True, stratify:bool=True,
    +             check_splits:bool=True, random_state:Optional[int]=None,
    +             show_plot:bool=True, verbose:bool=False)
    +
    +

    Arguments: o : object to which splits will be applied, usually target. n_splits : number of folds. Must be an int >= 1. valid_size : size of validation set. Only used if n_splits = 1. If n_splits > 1 valid_size = (1. - test_size) / n_splits. test_size : size of test set. Default = 0. train_only : if True valid set == train set. This may be useful for debugging purposes. train_size : size of the train set used. Default = None (the remainder after assigning both valid and test). Useful for to get learning curves with different train sizes or get a small batch to debug a neural net. balance : whether to balance data so that train always contain the same number of items per class. strategy : strategy to balance data (“undersample” or “oversample”). Default = “oversample”. shuffle : whether to shuffle data before splitting into batches. Note that the samples within each split will be shuffle. stratify : whether to create folds preserving the percentage of samples for each class. check_splits : whether to perform leakage and completion checks. random_state : when shuffle is True, random_state affects the ordering of the indices. Pass an int for reproducible output. show_plot : plot the split distribution

    +
    +
    n_splits                = 5
    +valid_size              = 0.2
    +test_size               = 0.2
    +train_only              = False  # set to True for debugging (valid = train)
    +train_size              = 5000
    +stratify                = True
    +balance                 = False
    +shuffle                 = True
    +predefined_splits       = None
    +show_plot               = True 
    +
    +
    +check_splits = True
    +random_state = 23
    +
    +y = np.random.randint(0, 3, 10000) + 100
    +
    +splits = get_splits(y, n_splits=n_splits, valid_size=valid_size, test_size=test_size, shuffle=shuffle, balance=balance, stratify=stratify,
    +                    train_only=train_only, train_size=train_size, check_splits=check_splits, random_state=random_state, show_plot=show_plot, verbose=True)
    +splits
    +
    +
    +
    +

    +
    +
    +
    +
    +
    (((#5000) [3490,2428,4475,8317,2802,6834,2954,7671,3383,9554...],
    +  (#1600) [1680,6677,5879,4428,5511,8312,372,5127,7012,3021...],
    +  (#2000) [1263,6498,1602,1838,1073,5304,1210,1037,8789,6175...]),
    + ((#5000) [3442,4237,470,3901,3808,3793,6286,8546,6254,9530...],
    +  (#1600) [9160,5451,3628,143,2054,7225,7124,8057,1405,5089...],
    +  (#2000) [1263,6498,1602,1838,1073,5304,1210,1037,8789,6175...]),
    + ((#5000) [9850,7451,7338,9742,3258,1527,4450,5678,2932,1693...],
    +  (#1600) [6186,5970,376,7848,3786,1663,7193,3647,3277,553...],
    +  (#2000) [1263,6498,1602,1838,1073,5304,1210,1037,8789,6175...]),
    + ((#5000) [1853,7308,7375,3851,1852,3820,2601,3868,8718,7190...],
    +  (#1600) [4182,6419,6265,4837,168,9627,2500,9951,1610,7547...],
    +  (#2000) [1263,6498,1602,1838,1073,5304,1210,1037,8789,6175...]),
    + ((#5000) [7878,6392,453,4817,4676,5738,6482,4033,8114,7337...],
    +  (#1600) [7682,6416,2877,9164,1583,342,2916,4806,8776,2046...],
    +  (#2000) [1263,6498,1602,1838,1073,5304,1210,1037,8789,6175...]))
    +
    +
    +
    +
    train_size=256
    +y = np.random.randint(0, 3, 1000) + 100
    +splits = get_splits(y, train_size=train_size, train_only=True)
    +test_eq(splits[0], splits[1])
    +test_eq(len(splits[0]), train_size)
    +splits
    +
    +
    valid == train
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    ((#256) [550,813,388,595,948,198,354,749,175,812...],
    + (#256) [550,813,388,595,948,198,354,749,175,812...])
    +
    +
    +
    +

    source

    +
    +
    +

    get_walk_forward_splits

    +
    +
     get_walk_forward_splits (o, n_splits=1, train_size=None, valid_size=0.2,
    +                          test_size=0.0, anchored=False, gap=0.0,
    +                          test_after_valid=True, random_state=None,
    +                          show_plot=True)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    o3D object with shape [samples x features x steps] containing the time series we need to split
    n_splitsint1# of splits
    train_sizeNoneTypeNoneoptional: training set size as an int or a float. None when using and anchored strategy.
    valid_sizefloat0.2validation set size as an int or a float
    test_sizefloat0.0test set size as an int or a float
    anchoredboolFalsestarting point for train set remains the same for all splits
    gapfloat0.0# of samples to exclude from the end of each train set before the validation set. Entered as an int or a float
    test_after_validboolTrueflag to indicate if validation and test will be samples randomly or sequentially
    random_stateNoneTypeNoneinteger that can be used to generate reproducible results
    show_plotboolTrueplots the splits created
    +
    +
    o = np.random.rand(10_000, 3,  50) # shape: [samples x features x steps]
    +
    +splits = get_walk_forward_splits(
    +    o, 
    +    n_splits=4, 
    +    train_size=.6,
    +    valid_size=0.1, 
    +    test_size=0.1, 
    +    anchored = True,
    +    gap = 100,
    +    test_after_valid = True,
    +    random_state = None,
    +    show_plot=True,
    +)
    +
    +splits = get_walk_forward_splits(
    +    o, 
    +    n_splits=3, 
    +    train_size=0.3,
    +    valid_size=0.1, 
    +    test_size=0.1, 
    +    anchored = False,
    +    gap = 0.,
    +    test_after_valid = False,
    +    random_state = None,
    +    show_plot=True,
    +)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    TSSplitter

    +
    +
     TSSplitter (valid_size=0.2, test_size=0.0, fcst_horizon=0,
    +             show_plot=True)
    +
    +

    Create function that splits items between train/val with valid_size without shuffling data.

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    valid_sizefloat0.2int or float indicating the validation set size
    test_sizefloat0.0int or float indicating the test set size
    fcst_horizonint0int that indicates the number of time steps removed at the end of train (and validation)
    show_plotboolTrueflag that indicates if a plot showing the splits will be created
    +
    +
    y = np.arange(1000) + 100
    +test_eq(TimeSplitter(valid_size=0.2)(y)[1], L(np.arange(800, 1000).tolist()))
    +test_eq(TimeSplitter(valid_size=0.2)(y)[0], TimeSplitter(valid_size=200)(y)[0])
    +TimeSplitter(valid_size=0.2, show_plot=True)(y)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    ((#800) [0,1,2,3,4,5,6,7,8,9...],
    + (#200) [800,801,802,803,804,805,806,807,808,809...])
    +
    +
    +
    +
    n_splits                = 5
    +valid_size              = 0.2  
    +test_size               = 0
    +train_only              = False  # set to True for debugging (valid = train)
    +train_size              = None
    +stratify                = True
    +balance                 = True
    +shuffle                 = True
    +predefined_splits       = None
    +show_plot               = True 
    +
    +
    +check_splits = True
    +random_state = 23
    +
    +splits = get_splits(y, n_splits=n_splits, valid_size=valid_size, test_size=test_size, shuffle=shuffle, balance=balance, stratify=stratify,
    +                    train_only=train_only, train_size=train_size, check_splits=check_splits, random_state=random_state, show_plot=show_plot, verbose=True)
    +split = splits[0] if n_splits == 1 else splits[0][0]
    +y[split].mean(), split
    +
    +
    stratify set to False as n_splits=5 cannot be greater than the min number of members in each class (1).
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    list([splits[0], splits[1], splits[2], splits[3], splits[4]])
    +
    +
    [((#800) [314,194,782,789,502,917,137,415,904,181...],
    +  (#200) [362,151,934,378,95,597,500,117,980,844...]),
    + ((#800) [312,198,777,788,515,910,145,413,898,186...],
    +  (#200) [352,133,955,396,64,596,442,79,991,882...]),
    + ((#800) [311,197,783,791,507,922,145,416,908,184...],
    +  (#200) [338,125,912,361,54,594,486,88,994,859...]),
    + ((#800) [296,181,782,789,493,917,130,401,905,165...],
    +  (#200) [405,199,953,444,113,610,515,137,997,881...]),
    + ((#800) [320,190,782,788,506,906,141,412,893,178...],
    +  (#200) [336,149,942,358,49,582,472,70,990,907...])]
    +
    +
    +
    +
    n_splits = 5
    +valid_size = 0.
    +test_size = 0.
    +shuffle = True
    +stratify = True
    +train_only = True
    +train_size = None
    +check_splits = True
    +random_state = 1
    +show_plot = True 
    +
    +splits = get_splits(y, n_splits=n_splits, valid_size=valid_size, test_size=test_size, shuffle=shuffle, stratify=stratify,
    +                    train_only=train_only, train_size=train_size, check_splits=check_splits, random_state=random_state, show_plot=show_plot, verbose=True)
    +for split in splits: 
    +    test_eq(len(split[0]), len(y))
    +    test_eq(np.sort(split[0]), np.arange(len(y)))
    +
    +
    stratify set to False as n_splits=5 cannot be greater than the min number of members in each class (1).
    +valid == train
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    n_splits = 5
    +y = np.random.randint(0, 2, 1000)
    +
    +splits = get_splits(y, n_splits=n_splits, shuffle=False, check_splits=True)
    +test_eq(np.concatenate((L(zip(*splits))[1])), np.arange(len(y)))
    +
    +splits = get_splits(y, n_splits=n_splits, shuffle=True, check_splits=True)
    +test_eq(np.sort(np.concatenate((L(zip(*splits))[1]))), np.arange(len(y)))
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    n_splits = 2
    +y = np.random.randint(0, 2, 1000)
    +
    +splits = get_splits(y, n_splits=n_splits, test_size=0.2, shuffle=False)
    +for i in range(n_splits): leakage_finder(*splits[i])
    +test_eq(len(splits), n_splits)
    +test_eq(len(splits[0]), 3)
    +s = []
    +[s.extend(split) for split in splits[0]]
    +test_eq(np.sort(s), np.arange(len(y)))
    +s = []
    +[s.extend(split) for split in splits[1]]
    +test_eq(np.sort(s), np.arange(len(y)))
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    y = np.random.randint(0, 2, 1000)
    +splits1 = get_splits(y, valid_size=.25, test_size=0, random_state=23, stratify=True, shuffle=True)
    +splits2 = get_splits(y, valid_size=.25, test_size=0, random_state=23, stratify=True, shuffle=True)
    +splits3 = get_splits(y, valid_size=.25, test_size=0, random_state=None, stratify=True, shuffle=True)
    +splits4 = get_splits(y, valid_size=.25, test_size=0, random_state=None, stratify=True, shuffle=True)
    +test_eq(splits1[0], splits2[0])
    +test_ne(splits3[0], splits4[0])
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    y = np.random.randint(0, 2, 100)
    +splits = get_splits(y, valid_size=.25, test_size=0, random_state=23, stratify=True, shuffle=True)
    +test_eq(len(splits), 2)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    y = np.random.randint(0, 2, 100)
    +splits = get_splits(y, valid_size=.25, test_size=0, random_state=23, stratify=True)
    +test_eq(len(splits), 2)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    y = np.random.randint(0, 2, 100)
    +splits = get_splits(y, valid_size=.25, test_size=20, random_state=23, stratify=True)
    +test_eq(len(splits), 3)
    +leakage_finder(*splits)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    splits = TrainValidTestSplitter(valid_size=.25, test_size=20, random_state=23, stratify=True)(np.random.randint(0, 2, 100))
    +test_eq(len(splits[1]), 25)
    +test_eq(len(splits[2]), 20)
    +
    +
    +
    o = np.random.randint(0, 2, 1000)
    +for p in [1, .75, .5, .25, .125]:
    +    splits = get_splits(o, train_size=p)
    +    test_eq(len(splits[0]), len(o) * .8 * p)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    y = L([0] * 50 + [1] * 25 + [2] * 15 + [3] * 10)
    +splits = get_splits(y, valid_size=.2, test_size=.2)
    +test_eq(np.mean(y[splits[0]])==np.mean(y[splits[1]])==np.mean(y[splits[2]]), True)
    +splits
    +
    +
    +
    +

    +
    +
    +
    +
    +
    ((#60) [58,95,53,44,28,69,9,12,22,88...],
    + (#20) [89,71,60,4,19,37,75,13,46,30...],
    + (#20) [76,68,74,29,16,97,14,21,90,82...])
    +
    +
    +
    +
    y = L([0] * 50 + [1] * 25 + [2] * 15 + [3] * 10)
    +splits = get_splits(y, n_splits=1, valid_size=.2, test_size=.2, shuffle=False)
    +# test_eq(splits[0] + splits[1] + splits[2], np.arange(100))
    +splits
    +
    +
    +
    +

    +
    +
    +
    +
    +
    ((#60) [0,1,2,3,4,5,6,7,8,9...],
    + (#20) [60,61,62,63,64,65,66,67,68,69...],
    + (#20) [80,81,82,83,84,85,86,87,88,89...])
    +
    +
    +
    +
    splits = get_splits(np.random.randint(0,5,100), valid_size=0.213, test_size=17)
    +test_eq(len(splits[1]), 21)
    +test_eq(len(splits[2]), 17)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    splits = get_splits(np.random.randint(0,5,100), valid_size=0.213, test_size=17, train_size=.2)
    +splits
    +
    +
    +
    +

    +
    +
    +
    +
    +
    ((#12) [37,38,62,60,16,22,95,44,94,98...],
    + (#21) [88,93,5,31,57,23,90,18,15,40...],
    + (#17) [4,86,47,33,59,52,99,48,70,3...])
    +
    +
    +
    +

    source

    +
    +
    +

    combine_split_data

    +
    +
     combine_split_data (xs, ys=None)
    +
    +

    xs is a list with X_train, X_valid, …. ys is None or a list with y_train, y_valid, ….

    +
    +

    source

    +
    +
    +

    get_predefined_splits

    +
    +
     get_predefined_splits (*xs)
    +
    +

    xs is a list with X_train, X_valid, …

    +
    +

    source

    +
    +
    +

    get_splits_len

    +
    +
     get_splits_len (splits)
    +
    +
    +
    X_train, y_train, X_valid, y_valid = np.random.rand(3,3,4), np.random.randint(0,2,3), np.random.rand(2,3,4), np.random.randint(0,2,2)
    +X, y, splits = combine_split_data([X_train, X_valid], [y_train, y_valid])
    +test_eq(X_train, X[splits[0]])
    +test_eq(X_valid, X[splits[1]])
    +test_type(X_train, X)
    +test_type(y_train, y)
    +
    +
    +
    X_train, y_train, X_valid, y_valid = np.random.rand(3,4), np.random.randint(0,2,3), np.random.rand(2,4), np.random.randint(0,2,2)
    +X, y, splits = combine_split_data([X_train, X_valid], [y_train, y_valid])
    +test_eq(X_train[:, None], X[splits[0]])
    +test_eq(X_valid[:, None], X[splits[1]])
    +test_type(X_train, X)
    +test_type(y_train, y)
    +
    +
    +
    +

    Forecasting

    +
    +

    source

    +
    +

    get_df_usable_idxs

    +
    +
     get_df_usable_idxs (df, fcst_history, fcst_horizon, stride=1,
    +                     unique_id_cols=None, return_np_indices=False)
    +
    +

    Calculates the indices that can be used from a df when using a sliding window

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dfdataframe containing a sorted time series
    fcst_history# historical steps used as input (size of the sliding window for the input)
    fcst_horizon# steps forecasted into the future (size of the sliding window for the target)
    strideint1int or tuple of 2 int containing the strides of the sliding windows (input and target)
    unique_id_colsNoneTypeNonestr indicating the column/s with the unique identifier/s for each entity
    return_np_indicesboolFalsebool indicating what type of indices are returned. Default to False (dataframe indices)
    +
    +

    source

    +
    +
    +

    get_usable_idxs

    +
    +
     get_usable_idxs (df, fcst_history, fcst_horizon, stride=1)
    +
    +
    +

    source

    +
    +
    +

    calculate_fcst_stats

    +
    +
     calculate_fcst_stats (df, fcst_history, fcst_horizon, splits,
    +                       x_vars=None, y_vars=None, subset_size=None)
    +
    +

    Calculates the training stats required in a forecasting task

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dfdataframe containing a sorted time series for a single entity or subject
    fcst_history# historical steps used as input.
    fcst_horizon# steps forecasted into the future.
    splitssplits that will be used to train the model. splits[0] is the train split:
    x_varsNoneTypeNonefeatures used as input
    y_varsNoneTypeNonefeatures used as output
    subset_sizeNoneTypeNoneint or float to determne the number of train samples used to calculate the mean and std
    +
    +

    source

    +
    +
    +

    get_forecasting_splits

    +
    +
     get_forecasting_splits (df, fcst_history, fcst_horizon, stride=1,
    +                         valid_size=0.0, test_size=0.2,
    +                         valid_cutoff_datetime=None,
    +                         test_cutoff_datetime=None, datetime_col=None,
    +                         use_index=False, unique_id_cols=None,
    +                         show_plot=True)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dfdataframe containing a sorted time series
    fcst_history# historical steps used as input (size of the sliding window for the input)
    fcst_horizon# steps forecasted into the future (size of the sliding window for the target)
    strideint1int or tuple of 2 int containing the strides of the sliding windows (input and target)
    valid_sizefloat0.0int or float indicating the size of the training set (based on datetimes)
    test_sizefloat0.2int or float indicating the size of the test set (based on datetimes)
    valid_cutoff_datetimeNoneTypeNonefirst prediction datetime of validation dataset
    test_cutoff_datetimeNoneTypeNonefirst prediction datetime of test dataset
    datetime_colNoneTypeNonestr indicating the column with the datetime values
    use_indexboolFalseflag to indicate if the datetime is in the index
    unique_id_colsNoneTypeNonestr indicating the column/s with the unique identifier/s for each entity
    show_plotboolTrueflag to indicate if splits should be plotted
    +
    +
    df1_len = 100
    +df2_len = 80
    +
    +datetime_col = 'datetime' 
    +df1 = pd.DataFrame(np.arange(df1_len), columns=['value'])
    +df1['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df1_len, freq='1D')
    +df1['type'] = 1
    +
    +df = df1
    +display(df)
    +
    +# settings
    +fcst_history          = 10
    +fcst_horizon          = 1
    +stride                = 1
    +unique_id_cols        = 'type'
    +datetime_col          = 'datetime' 
    +use_index             = False
    +valid_size            = 0.1  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +test_size             = 0.2  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +valid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset
    +test_cutoff_datetime  = '1749-12-24' # first prediction datetime of test dataset
    +valid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +test_cutoff_datetime  = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +
    +
    +splits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, 
    +                                unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,
    +                                valid_size=valid_size, test_size=test_size, 
    +                                valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)
    +
    +print(f"splits size   : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})")
    +
    +# settings
    +fcst_history          = 10
    +fcst_horizon          = 5
    +stride                = 5
    +unique_id_cols        = 'type'
    +datetime_col          = 'datetime' 
    +use_index             = False
    +valid_size            = 0.1  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +test_size             = 0.2  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +valid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset
    +test_cutoff_datetime  = '1749-12-24' # first prediction datetime of test dataset
    +valid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +test_cutoff_datetime  = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +
    +
    +splits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, 
    +                                unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,
    +                                valid_size=valid_size, test_size=test_size, 
    +                                valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)
    +
    +print(f"splits size   : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})")
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    valuedatetimetype
    001749-03-311
    111749-04-011
    221749-04-021
    331749-04-031
    441749-04-041
    ............
    95951749-07-041
    96961749-07-051
    97971749-07-061
    98981749-07-071
    99991749-07-081
    + +

    100 rows × 3 columns

    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    splits size   : [63, 9, 18] (90: [0.7, 0.1, 0.2])
    +splits size   : [12, 2, 4] (18: [0.67, 0.11, 0.22])
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    df1_len = 100
    +df2_len = 80
    +
    +datetime_col = 'datetime' 
    +df1 = pd.DataFrame(np.arange(df1_len), columns=['value'])
    +df1['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df1_len, freq='1D')
    +df1['type'] = 1
    +df1_index = df1.set_index("datetime")
    +
    +df = df1_index
    +display(df)
    +
    +# settings
    +fcst_history          = 10
    +fcst_horizon          = 1
    +stride                = 1
    +unique_id_cols        = 'type'
    +datetime_col          = 'datetime' 
    +use_index             = True
    +valid_size            = 0.1  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +test_size             = 0.2  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +valid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset
    +test_cutoff_datetime  = '1749-12-24' # first prediction datetime of test dataset
    +valid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +test_cutoff_datetime  = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +
    +
    +splits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, 
    +                                unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,
    +                                valid_size=valid_size, test_size=test_size, 
    +                                valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)
    +
    +print(f"splits size   : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})")
    +
    +# settings
    +fcst_history          = 10
    +fcst_horizon          = 5
    +stride                = 5
    +unique_id_cols        = 'type'
    +datetime_col          = 'datetime' 
    +use_index             = True
    +valid_size            = 0.1  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +test_size             = 0.2  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +valid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset
    +test_cutoff_datetime  = '1749-12-24' # first prediction datetime of test dataset
    +valid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +test_cutoff_datetime  = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +
    +
    +splits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, 
    +                                unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,
    +                                valid_size=valid_size, test_size=test_size, 
    +                                valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)
    +
    +print(f"splits size   : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})")
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    valuetype
    datetime
    1749-03-3101
    1749-04-0111
    1749-04-0221
    1749-04-0331
    1749-04-0441
    .........
    1749-07-04951
    1749-07-05961
    1749-07-06971
    1749-07-07981
    1749-07-08991
    + +

    100 rows × 2 columns

    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    splits size   : [63, 9, 18] (90: [0.7, 0.1, 0.2])
    +splits size   : [12, 2, 4] (18: [0.67, 0.11, 0.22])
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    df1_len = 100
    +df2_len = 80
    +
    +datetime_col = 'datetime' 
    +df1 = pd.DataFrame(np.arange(df1_len), columns=['value'])
    +df1['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df1_len, freq='1D')
    +df1['type'] = 1
    +df1_index = df1.set_index("datetime")
    +df2 = pd.DataFrame(np.arange(df2_len) * 10, columns=['value'])
    +df2['datetime'] = pd.date_range(pd.to_datetime('1749-04-15'), periods=df2_len, freq='1D')
    +df2['type'] = 2
    +df_comb = pd.concat([df1, df2]).reset_index(drop=True).reset_index(drop=True)
    +
    +
    +df = df_comb
    +display(df)
    +
    +# settings
    +fcst_history          = 10
    +fcst_horizon          = 3
    +stride                = 1
    +unique_id_cols        = 'type'
    +datetime_col          = 'datetime' 
    +use_index             = False
    +valid_size            = 0.1  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +test_size             = 0.2  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +valid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset
    +test_cutoff_datetime  = '1749-12-24' # first prediction datetime of test dataset
    +valid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +test_cutoff_datetime  = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +
    +
    +splits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, 
    +                                unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,
    +                                valid_size=valid_size, test_size=test_size, 
    +                                valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)
    +
    +print(f"splits size   : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})")
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    valuedatetimetype
    001749-03-311
    111749-04-011
    221749-04-021
    331749-04-031
    441749-04-041
    ............
    1757501749-06-292
    1767601749-06-302
    1777701749-07-012
    1787801749-07-022
    1797901749-07-032
    + +

    180 rows × 3 columns

    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    splits size   : [101, 16, 31] (148: [0.68, 0.11, 0.21])
    +
    +
    +
    +
    df1_len = 100
    +df2_len = 80
    +
    +datetime_col = 'datetime' 
    +df1 = pd.DataFrame(np.arange(df1_len), columns=['value'])
    +df1['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df1_len, freq='1D')
    +df1['type'] = 1
    +df1_index = df1.set_index("datetime")
    +df2 = pd.DataFrame(np.arange(df2_len) * 10, columns=['value'])
    +df2['datetime'] = pd.date_range(pd.to_datetime('1749-04-15'), periods=df2_len, freq='1D')
    +df2['type'] = 2
    +df_comb = pd.concat([df1, df2]).reset_index(drop=True).reset_index(drop=True)
    +df_comb_index = df_comb.set_index("datetime")
    +df_comb_index.index.name = None
    +
    +
    +df = df_comb_index
    +display(df)
    +
    +# settings
    +fcst_history          = 15
    +fcst_horizon          = 5
    +stride                = 1
    +unique_id_cols        = 'type'
    +datetime_col          = 'datetime' 
    +use_index             = True
    +valid_size            = 0.1  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +test_size             = 0.2  # a percent (float) or a number of samples (int) - .1 means 10% of the dates
    +valid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset
    +test_cutoff_datetime  = '1749-12-24' # first prediction datetime of test dataset
    +valid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +test_cutoff_datetime  = None # datetime compatible with the datetime_col containing the starting date for the validation dataset
    +
    +
    +splits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, 
    +                                unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,
    +                                valid_size=valid_size, test_size=test_size, 
    +                                valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)
    +
    +print(f"splits size   : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})")
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    valuetype
    1749-03-3101
    1749-04-0111
    1749-04-0221
    1749-04-0331
    1749-04-0441
    .........
    1749-06-297502
    1749-06-307602
    1749-07-017702
    1749-07-027802
    1749-07-037902
    + +

    180 rows × 2 columns

    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    splits size   : [83, 14, 29] (126: [0.66, 0.11, 0.23])
    +
    +
    +
    +

    source

    +
    +
    +

    get_long_term_forecasting_splits

    +
    +
     get_long_term_forecasting_splits (df, fcst_history, fcst_horizon,
    +                                   dsid=None, show_plot=True)
    +
    +

    Returns the train, valid and test splits for long-range time series datasets

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dfdataframe containing a sorted time series for a single entity or subject
    fcst_history# historical steps used as input.
    fcst_horizon# steps forecasted into the future.
    dsidNoneTypeNonedataset name
    show_plotboolTrueplot the splits
    + + +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/export.html b/export.html new file mode 100644 index 000000000..3a99cdc43 --- /dev/null +++ b/export.html @@ -0,0 +1,1365 @@ + + + + + + + + + +tsai - nb2py + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    nb2py

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    nb2py will allow you to convert the notebook (.ipynb) where the function is executed to a python script.

    +
    +

    The conversion applies these rules:

    +
      +
    • The notebook will be automatically saved when the function is executed.
    • +
    • Only code cells will be converted (not markdown cells).
    • +
    • A header will be added to indicate the script has been automatically generated. It also indicates where the original ipynb is.
    • +
    • Cells with a #hide flag won’t be converted. Flag variants like # hide, #Hide, #HIDE, … are also acceptable.
    • +
    • Empty cells and unnecessary empty lines within cells will be removed.
    • +
    • By default the script will be created with the same name and in the same folder of the original notebook. But you can pass a dir folder and a different name if you wish.
    • +
    • If a script with the same name already exists, it will be overwriten.
    • +
    +

    This code is required to identify flags in the notebook. We are looking for #hide flags.

    +

    This code automatically gets the name of the notebook. It’s been tested to work on Jupyter notebooks, Jupyter Lab and Google Colab.

    +
    +

    source

    +
    +

    get_script_path

    +
    +
     get_script_path (nb_name=None)
    +
    +
    +

    source

    +
    +
    +

    nb_name_to_py

    +
    +
     nb_name_to_py (nb_name)
    +
    +
    +

    source

    +
    +
    +

    get_nb_path

    +
    +
     get_nb_path ()
    +
    +

    Returns the absolute path of the notebook, or raises a FileNotFoundError exception if it cannot be determined.

    +
    +

    source

    +
    +
    +

    get_colab_nb_name

    +
    +
     get_colab_nb_name ()
    +
    +
    +

    source

    +
    +
    +

    get_nb_name

    +
    +
     get_nb_name (d=None)
    +
    +

    Returns the short name of the notebook w/o the .ipynb extension, or raises a FileNotFoundError exception if it cannot be determined.

    +

    This code is used when trying to save a file to google drive. We first need to mount the drive.

    +
    +

    source

    +
    +
    +

    nb2py

    +
    +
     nb2py (nb:str<absoluteorrelativefullpathtothenotebookyouwanttoconverttoap
    +        ythonscript>=None, folder:str<absoluteorrelativepathtofolderofthes
    +        criptyouwillcreate.Defaultstocurrentnb'sdirectory>=None, name:str<
    +        nameofthescriptyouwanttocreate.Defaultstocurrentnbname.ipynbby.py>
    +        =None, save:<savesthenbbeforeconvertingittoascript>=True,
    +        run:<importandrunthescript>=False,
    +        verbose:<controlsverbosity>=True)
    +
    +

    Converts a notebook to a python script in a predefined folder.

    +
    +
    if not is_colab():
    +    nb = None
    +    folder = None
    +    name = None
    +    pyname = nb2py(nb=nb, folder=folder, name=name)
    +    if pyname is not None: 
    +        assert os.path.isfile(pyname)
    +        os.remove(pyname)
    +        assert not os.path.isfile(pyname)
    +
    +    nb = '001_export.ipynb'
    +    folder = None
    +    name = None
    +    pyname = nb2py(nb=nb, folder=folder, name=name)
    +    if pyname is not None: 
    +        assert os.path.isfile(pyname)
    +        os.remove(pyname)
    +        assert not os.path.isfile(pyname)
    +
    +    nb = '../nbs/001_export'
    +    folder = None
    +    name = None
    +    pyname = nb2py(nb=nb, folder=folder, name=name)
    +    if pyname is not None: 
    +        assert os.path.isfile(pyname)
    +        os.remove(pyname)
    +        assert not os.path.isfile(pyname)
    +
    +    nb = None
    +    folder = '../test_export/'
    +    name = None
    +    pyname = nb2py(nb=nb, folder=folder, name=name)
    +    if pyname is not None: 
    +        assert os.path.isfile(pyname)
    +        shutil.rmtree(folder)
    +        assert not os.path.isfile(pyname)
    +
    +
    nb2py couldn't get the nb name. Pass it as an nb argument and rerun nb2py.
    +001_export.ipynb converted to /Users/nacho/notebooks/tsai/nbs/001_export.py
    +001_export.ipynb converted to /Users/nacho/notebooks/tsai/nbs/../nbs/001_export.py
    +nb2py couldn't get the nb name. Pass it as an nb argument and rerun nb2py.
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 000000000..3d3f07488 --- /dev/null +++ b/index.html @@ -0,0 +1,1517 @@ + + + + + + + + + +tsai + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    tsai

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    +
    +



    +

    CI PyPI Conda (channel only) DOI PRs

    +
    +

    Description

    +
    +

    State-of-the-art Deep Learning library for Time Series and Sequences.

    +
    +

    tsai is an open-source deep learning package built on top of Pytorch & fastai focused on state-of-the-art techniques for time series tasks like classification, regression, forecasting, imputation…

    +

    tsai is currently under active development by timeseriesAI.

    +
    +
    +

    What’s new:

    +

    During the last few releases, here are some of the most significant additions to tsai:

    +
      +
    • New models: PatchTST (Accepted by ICLR 2023), RNN with Attention (RNNAttention, LSTMAttention, GRUAttention), TabFusionTransformer, …
    • +
    • New datasets: we have increased the number of datasets you can download using tsai: +
        +
      • 128 univariate classification datasets
      • +
      • 30 multivariate classification datasets
      • +
      • 15 regression datasets
      • +
      • 62 forecasting datasets
      • +
      • 9 long term forecasting datasets
      • +
    • +
    • New tutorials: PatchTST. Based on some of your requests, we are planning to release additional tutorials on data preparation and forecasting.
    • +
    • New functionality: sklearn-type pipeline transforms, walk-foward cross validation, reduced RAM requirements, and a lot of new functionality to perform more accurate time series forecasts.
    • +
    • Pytorch 2.0 support.
    • +
    +
    +
    +

    Installation

    +
    +

    Pip install

    +

    You can install the latest stable version from pip using:

    +
    pip install tsai
    +

    If you plan to develop tsai yourself, or want to be on the cutting edge, you can use an editable install. First install PyTorch, and then:

    +
    git clone https://github.com/timeseriesAI/tsai
    +pip install -e "tsai[dev]"
    +

    Note: starting with tsai 0.3.0 tsai will only install hard dependencies. Other soft dependencies (which are only required for selected tasks) will not be installed by default (this is the recommended approach. If you require any of the dependencies that is not installed, tsai will ask you to install it when necessary). If you still want to install tsai with all its dependencies you can do it by running:

    +
    pip install tsai[extras]
    +
    +
    +

    Conda install

    +

    You can also install tsai using conda (note that if you replace conda with mamba the install process will be much faster and more reliable):

    +
    conda install -c timeseriesai tsai
    +
    +
    +
    +

    Documentation

    +

    Here’s the link to the documentation.

    +
    +
    +

    Available models:

    +

    Here’s a list with some of the state-of-the-art models available in tsai:

    + +

    plus other custom models like: TransformerModel, LSTMAttention, GRUAttention, …

    +
    +
    +

    How to start using tsai?

    +

    To get to know the tsai package, we’d suggest you start with this notebook in Google Colab: 01_Intro_to_Time_Series_Classification It provides an overview of a time series classification task.

    +

    We have also develop many other tutorial notebooks.

    +

    To use tsai in your own notebooks, the only thing you need to do after you have installed the package is to run this:

    +
    from tsai.all import *
    +
    +
    +

    Examples

    +

    These are just a few examples of how you can use tsai:

    +
    +

    Binary, univariate classification

    +

    Training:

    +
    from tsai.basics import *
    +
    +X, y, splits = get_classification_data('ECG200', split_data=False)
    +tfms = [None, TSClassification()]
    +batch_tfms = TSStandardize()
    +clf = TSClassifier(X, y, splits=splits, path='models', arch="InceptionTimePlus", tfms=tfms, batch_tfms=batch_tfms, metrics=accuracy, cbs=ShowGraph())
    +clf.fit_one_cycle(100, 3e-4)
    +clf.export("clf.pkl") 
    +

    Inference:

    +
    from tsai.inference import load_learner
    +
    +clf = load_learner("models/clf.pkl")
    +probas, target, preds = clf.get_X_preds(X[splits[1]], y[splits[1]])
    +
    +
    +

    Multi-class, multivariate classification

    +

    Training:

    +
    from tsai.basics import *
    +
    +X, y, splits = get_classification_data('LSST', split_data=False)
    +tfms = [None, TSClassification()]
    +batch_tfms = TSStandardize(by_sample=True)
    +mv_clf = TSClassifier(X, y, splits=splits, path='models', arch="InceptionTimePlus", tfms=tfms, batch_tfms=batch_tfms, metrics=accuracy, cbs=ShowGraph())
    +mv_clf.fit_one_cycle(10, 1e-2)
    +mv_clf.export("mv_clf.pkl")
    +

    Inference:

    +
    from tsai.inference import load_learner
    +
    +mv_clf = load_learner("models/mv_clf.pkl")
    +probas, target, preds = mv_clf.get_X_preds(X[splits[1]], y[splits[1]])
    +
    +
    +

    Multivariate Regression

    +

    Training:

    +
    from tsai.basics import *
    +
    +X, y, splits = get_regression_data('AppliancesEnergy', split_data=False)
    +tfms = [None, TSRegression()]
    +batch_tfms = TSStandardize(by_sample=True)
    +reg = TSRegressor(X, y, splits=splits, path='models', arch="TSTPlus", tfms=tfms, batch_tfms=batch_tfms, metrics=rmse, cbs=ShowGraph(), verbose=True)
    +reg.fit_one_cycle(100, 3e-4)
    +reg.export("reg.pkl")
    +

    Inference:

    +
    from tsai.inference import load_learner
    +
    +reg = load_learner("models/reg.pkl")
    +raw_preds, target, preds = reg.get_X_preds(X[splits[1]], y[splits[1]])
    +

    The ROCKETs (RocketClassifier, RocketRegressor, MiniRocketClassifier, MiniRocketRegressor, MiniRocketVotingClassifier or MiniRocketVotingRegressor) are somewhat different models. They are not actually deep learning models (although they use convolutions) and are used in a different way.

    +

    ⚠️ You’ll also need to install sktime to be able to use them. You can install it separately:

    +
    pip install sktime
    +

    or use:

    +
    pip install tsai[extras]
    +

    Training:

    +
    from sklearn.metrics import mean_squared_error, make_scorer
    +from tsai.data.external import get_Monash_regression_data
    +from tsai.models.MINIROCKET import MiniRocketRegressor
    +
    +X_train, y_train, *_ = get_Monash_regression_data('AppliancesEnergy')
    +rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)
    +reg = MiniRocketRegressor(scoring=rmse_scorer)
    +reg.fit(X_train, y_train)
    +reg.save('MiniRocketRegressor')
    +

    Inference:

    +
    from sklearn.metrics import mean_squared_error
    +from tsai.data.external import get_Monash_regression_data
    +from tsai.models.MINIROCKET import load_minirocket
    +
    +*_, X_test, y_test = get_Monash_regression_data('AppliancesEnergy')
    +reg = load_minirocket('MiniRocketRegressor')
    +y_pred = reg.predict(X_test)
    +mean_squared_error(y_test, y_pred, squared=False)
    +
    +
    +

    Forecasting

    +

    You can use tsai for forecast in the following scenarios:

    +
      +
    • univariate or multivariate time series input
    • +
    • univariate or multivariate time series output
    • +
    • single or multi-step ahead
    • +
    +

    You’ll need to: * prepare X (time series input) and the target y (see documentation) * select PatchTST or one of tsai’s models ending in Plus (TSTPlus, InceptionTimePlus, TSiTPlus, etc). The model will auto-configure a head to yield an output with the same shape as the target input y.

    +
    +

    Single step

    +

    Training:

    +
    from tsai.basics import *
    +
    +ts = get_forecasting_time_series("Sunspots").values
    +X, y = SlidingWindow(60, horizon=1)(ts)
    +splits = TimeSplitter(235)(y) 
    +tfms = [None, TSForecasting()]
    +batch_tfms = TSStandardize()
    +fcst = TSForecaster(X, y, splits=splits, path='models', tfms=tfms, batch_tfms=batch_tfms, bs=512, arch="TSTPlus", metrics=mae, cbs=ShowGraph())
    +fcst.fit_one_cycle(50, 1e-3)
    +fcst.export("fcst.pkl")
    +

    Inference:

    +
    from tsai.inference import load_learner
    +
    +fcst = load_learner("models/fcst.pkl", cpu=False)
    +raw_preds, target, preds = fcst.get_X_preds(X[splits[1]], y[splits[1]])
    +raw_preds.shape
    +# torch.Size([235, 1])
    +
    +
    +

    Multi-step

    +

    This example show how to build a 3-step ahead univariate forecast.

    +

    Training:

    +
    from tsai.basics import *
    +
    +ts = get_forecasting_time_series("Sunspots").values
    +X, y = SlidingWindow(60, horizon=3)(ts)
    +splits = TimeSplitter(235, fcst_horizon=3)(y) 
    +tfms = [None, TSForecasting()]
    +batch_tfms = TSStandardize()
    +fcst = TSForecaster(X, y, splits=splits, path='models', tfms=tfms, batch_tfms=batch_tfms, bs=512, arch="TSTPlus", metrics=mae, cbs=ShowGraph())
    +fcst.fit_one_cycle(50, 1e-3)
    +fcst.export("fcst.pkl")
    +

    Inference:

    +
    from tsai.inference import load_learner
    +fcst = load_learner("models/fcst.pkl", cpu=False)
    +raw_preds, target, preds = fcst.get_X_preds(X[splits[1]], y[splits[1]])
    +raw_preds.shape
    +# torch.Size([235, 3])
    +
    +
    +
    +
    +

    Input data format

    +

    The input format for all time series models and image models in tsai is the same. An np.ndarray (or array-like object like zarr, etc) with 3 dimensions:

    +

    [# samples x # variables x sequence length]

    +

    The input format for tabular models in tsai (like TabModel, TabTransformer and TabFusionTransformer) is a pandas dataframe. See example.

    +
    +
    +

    How to contribute to tsai?

    +

    We welcome contributions of all kinds. Development of enhancements, bug fixes, documentation, tutorial notebooks, …

    +

    We have created a guide to help you start contributing to tsai. You can read it here.

    +
    +
    +

    Enterprise support and consulting services:

    +

    Want to make the most out of timeseriesAI/tsai in a professional setting? Let us help. Send us an email to learn more: info@timeseriesai.co

    +
    +
    +

    Citing tsai

    +

    If you use tsai in your research please use the following BibTeX entry:

    +
    @Misc{tsai,
    +    author =       {Ignacio Oguiza},
    +    title =        {tsai - A state-of-the-art deep learning library for time series and sequential data},
    +    howpublished = {Github},
    +    year =         {2023},
    +    url =          {https://github.com/timeseriesAI/tsai}
    +}
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/inference.html b/inference.html new file mode 100644 index 000000000..6aa86b4ae --- /dev/null +++ b/inference.html @@ -0,0 +1,1569 @@ + + + + + + + + + +tsai - Inference + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Inference

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Code required for inference.

    +
    +
    +

    source

    +
    +

    Learner.get_X_preds

    +
    +
     Learner.get_X_preds (X, y=None, bs=64, with_input=False,
    +                      with_decoded=True, with_loss=False, act=None)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    X
    yNoneTypeNone
    bsint64
    with_inputboolFalsereturns the input as well
    with_decodedboolTruereturns decoded predictions as well
    with_lossboolFalsereturns the loss per item as well
    actNoneTypeNoneApply activation to predictions, defaults to self.loss_func’s activation
    +

    Get the predictions and targets, optionally with_input and with_loss.

    +

    with_decoded will also return the decoded predictions (it reverses the transforms applied).

    +

    The order of the output is the following:

    +
      +
    • input (optional): if with_input is True
    • +
    • probabiblities (for classification) or predictions (for regression)
    • +
    • target: if y is provided. Otherwise None.
    • +
    • predictions: predicted labels. Predictions will be decoded if with_decoded=True.
    • +
    • loss (optional): if with_loss is set to True and y is not None.
    • +
    +
    +
    from tsai.data.external import get_UCR_data
    +
    +
    +
    dsid = 'OliveOil'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +X_test = X[splits[1]]
    +y_test = y[splits[1]]
    +
    +
    +
    learn = load_learner("./models/test.pth")
    +
    +

    ⚠️ Warning: load_learner (from fastai) requires all your custom code be in the exact same place as when exporting your Learner (the main script, or the module you imported it from).

    +
    +
    test_probas, test_targets, test_preds = learn.get_X_preds(X_test, with_decoded=True)
    +test_probas, test_targets, test_preds
    +
    + + +
    +
    + +
    +
    +
    (tensor([[0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2639],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2641],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2421, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640]]),
    + None,
    + array(['4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
    +        '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
    +        '4', '4', '4', '4'], dtype='<U1'))
    +
    +
    +
    +
    import torch
    +from fastcore.test import test_close
    +
    +
    +
    torch_test_probas, torch_test_targets, torch_test_preds = learn.get_X_preds(torch.from_numpy(X_test), with_decoded=True)
    +torch_test_probas, torch_test_targets, torch_test_preds
    +test_close(test_probas, torch_test_probas)
    +
    + + +
    +
    + +
    +
    +
    +
    test_probas2, test_targets2, test_preds2 = learn.get_X_preds(X_test, y_test, with_decoded=True)
    +test_probas2, test_targets2, test_preds2
    +
    + + +
    +
    + +
    +
    +
    (tensor([[0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2639],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2641],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2421, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640]]),
    + tensor([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
    +         3, 3, 3, 3, 3, 3]),
    + array(['4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
    +        '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
    +        '4', '4', '4', '4'], dtype='<U1'))
    +
    +
    +
    +
    test_probas3, test_targets3, test_preds3, test_losses3 = learn.get_X_preds(X_test, y_test, with_loss=True, with_decoded=True)
    +test_probas3, test_targets3, test_preds3, test_losses3
    +
    + + +
    +
    + +
    +
    +
    (tensor([[0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2639],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2641],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2421, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2421, 0.2364, 0.2641],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640],
    +         [0.2574, 0.2422, 0.2364, 0.2640]]),
    + tensor([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
    +         3, 3, 3, 3, 3, 3]),
    + array(['4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
    +        '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',
    +        '4', '4', '4', '4'], dtype='<U1'),
    + TensorBase([1.3572, 1.3572, 1.3572, 1.3571, 1.3572, 1.4181, 1.4181, 1.4181,
    +             1.4181, 1.4181, 1.4181, 1.4181, 1.4181, 1.4181, 1.4423, 1.4422,
    +             1.4422, 1.4422, 1.3316, 1.3316, 1.3316, 1.3316, 1.3316, 1.3316,
    +             1.3316, 1.3316, 1.3316, 1.3316, 1.3317, 1.3317]))
    +
    +
    +
    +
    from fastcore.test import test_eq
    +
    +
    +
    test_eq(test_probas, test_probas2)
    +test_eq(test_preds, test_preds2)
    +test_eq(test_probas, test_probas3)
    +test_eq(test_preds, test_preds3)
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/learner.html b/learner.html new file mode 100644 index 000000000..b26b08027 --- /dev/null +++ b/learner.html @@ -0,0 +1,1761 @@ + + + + + + + + + +tsai - Learner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Learner

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    fastai Learner extensions.

    +
    +
    +

    source

    +
    +

    Learner.show_batch

    +
    +
     Learner.show_batch (**kwargs)
    +
    +
    +

    source

    +
    +
    +

    Learner.remove_all_cbs

    +
    +
     Learner.remove_all_cbs (max_iters=10)
    +
    +
    +

    source

    +
    +
    +

    Learner.one_batch

    +
    +
     Learner.one_batch (i, b)
    +
    +
    +

    source

    +
    +
    +

    Learner.inverse_transform

    +
    +
     Learner.inverse_transform (df:pandas.core.frame.DataFrame)
    +
    +

    Applies sklearn-type pipeline inverse transforms

    +
    +

    source

    +
    +
    +

    Learner.transform

    +
    +
     Learner.transform (df:pandas.core.frame.DataFrame)
    +
    +

    Applies sklearn-type pipeline transforms

    +

    ⚠️ Important: save_all and load_all methods are designed for small datasets only. If you are using a larger dataset, you should use the standard save and load_learner methods.

    +
    +

    source

    +
    +
    +

    load_all

    +
    +
     load_all (path='export', dls_fname='dls', model_fname='model',
    +           learner_fname='learner', device=None, pickle_module=<module
    +           'pickle' from '/opt/hostedtoolcache/Python/3.9.18/x64/lib/pytho
    +           n3.9/pickle.py'>, verbose=False)
    +
    +
    +

    source

    +
    +
    +

    Learner.save_all

    +
    +
     Learner.save_all (path='export', dls_fname='dls', model_fname='model',
    +                   learner_fname='learner', verbose=False)
    +
    +
    +
    from tsai.data.core import get_ts_dls
    +from tsai.utils import remove_dir
    +
    +
    +
    X = np.random.rand(100, 2, 10)
    +dls = get_ts_dls(X)
    +learn = Learner(dls, InceptionTimePlus(2, 1), loss_func=MSELossFlat())
    +learn.save_all(Path.home()/'tmp', verbose=True)
    +learn2 = load_all(Path.home()/'tmp', verbose=True)
    +remove_dir(Path.home()/'tmp')
    +
    +
    Learner saved:
    +path          = '/Users/nacho/tmp'
    +dls_fname     = '['dls_0.pth', 'dls_1.pth']'
    +model_fname   = 'model.pth'
    +learner_fname = 'learner.pkl'
    +Learner loaded:
    +path          = '/Users/nacho/tmp'
    +dls_fname     = '['dls_0.pth', 'dls_1.pth']'
    +model_fname   = 'model.pth'
    +learner_fname = 'learner.pkl'
    +/Users/nacho/tmp directory removed.
    +
    +
    +
    +

    source

    +
    +
    +

    Learner.plot_metrics

    +
    +
     Learner.plot_metrics (nrows:int=1, ncols:int=1, figsize:tuple=None,
    +                       imsize:int=3, suptitle:str=None, sharex:Union[bool,
    +                       Literal['none','all','row','col']]=False, sharey:Un
    +                       ion[bool,Literal['none','all','row','col']]=False,
    +                       squeeze:bool=True,
    +                       width_ratios:Optional[Sequence[float]]=None,
    +                       height_ratios:Optional[Sequence[float]]=None,
    +                       subplot_kw:Optional[dict[str,Any]]=None,
    +                       gridspec_kw:Optional[dict[str,Any]]=None)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    nrowsint1Number of rows in returned axes grid
    ncolsint1Number of columns in returned axes grid
    figsizetupleNoneWidth, height in inches of the returned figure
    imsizeint3Size (in inches) of images that will be displayed in the returned figure
    suptitlestrNoneTitle to be set to returned figure
    sharexbool | Literal[‘none’, ‘all’, ‘row’, ‘col’]False
    shareybool | Literal[‘none’, ‘all’, ‘row’, ‘col’]False
    squeezeboolTrue
    width_ratiosSequence[float] | NoneNone
    height_ratiosSequence[float] | NoneNone
    subplot_kwdict[str, Any] | NoneNone
    gridspec_kwdict[str, Any] | NoneNone
    Returns(plt.Figure, plt.Axes)Returns both fig and ax as a tuple
    +
    +

    source

    +
    +
    +

    Recorder.plot_metrics

    +
    +
     Recorder.plot_metrics (nrows=None, ncols=None, figsize=None,
    +                        final_losses=True, perc=0.5, imsize:int=3,
    +                        suptitle:str=None, sharex:Union[bool,Literal['none
    +                        ','all','row','col']]=False, sharey:Union[bool,Lit
    +                        eral['none','all','row','col']]=False,
    +                        squeeze:bool=True,
    +                        width_ratios:Optional[Sequence[float]]=None,
    +                        height_ratios:Optional[Sequence[float]]=None,
    +                        subplot_kw:Optional[dict[str,Any]]=None,
    +                        gridspec_kw:Optional[dict[str,Any]]=None)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    nrowsint1Number of rows in returned axes grid
    ncolsint1Number of columns in returned axes grid
    figsizetupleNoneWidth, height in inches of the returned figure
    final_lossesboolTrue
    percfloat0.5
    imsizeint3Size (in inches) of images that will be displayed in the returned figure
    suptitlestrNoneTitle to be set to returned figure
    sharexbool | Literal[‘none’, ‘all’, ‘row’, ‘col’]False
    shareybool | Literal[‘none’, ‘all’, ‘row’, ‘col’]False
    squeezeboolTrue
    width_ratiosSequence[float] | NoneNone
    height_ratiosSequence[float] | NoneNone
    subplot_kwdict[str, Any] | NoneNone
    gridspec_kwdict[str, Any] | NoneNone
    Returns(plt.Figure, plt.Axes)Returns both fig and ax as a tuple
    +
    +

    source

    +
    +
    +

    get_arch

    +
    +
     get_arch (arch_name)
    +
    +
    +
    for arch_name in all_arch_names:
    +    get_arch(arch_name)
    +
    +
    +

    source

    +
    +
    +

    ts_learner

    +
    +
     ts_learner (dls, arch=None, c_in=None, c_out=None, seq_len=None, d=None,
    +             s_cat_idxs=None, s_cat_embeddings=None,
    +             s_cat_embedding_dims=None, s_cont_idxs=None, o_cat_idxs=None,
    +             o_cat_embeddings=None, o_cat_embedding_dims=None,
    +             o_cont_idxs=None, splitter=<function trainable_params>,
    +             loss_func=None, opt_func=<function Adam>, lr=0.001, cbs=None,
    +             metrics=None, path=None, model_dir='models', wd=None,
    +             wd_bn_bias=False, train_bn=True, moms=(0.95, 0.85, 0.95),
    +             train_metrics=False, valid_metrics=True, seed=None,
    +             device=None, verbose=False, patch_len=None,
    +             patch_stride=None, fusion_layers=128, fusion_act='relu',
    +             fusion_dropout=0.0, fusion_use_bn=True, pretrained=False,
    +             weights_path=None, exclude_head=True, cut=-1, init=None,
    +             arch_config={})
    +
    +
    +

    source

    +
    +
    +

    tsimage_learner

    +
    +
     tsimage_learner (dls, arch=None, pretrained=False, loss_func=None,
    +                  opt_func=<function Adam>, lr=0.001, cbs=None,
    +                  metrics=None, path=None, model_dir='models', wd=None,
    +                  wd_bn_bias=False, train_bn=True, moms=(0.95, 0.85,
    +                  0.95), c_in=None, c_out=None, device=None,
    +                  verbose=False, init=None, arch_config={})
    +
    +
    +

    source

    +
    +
    +

    Learner.decoder

    +
    +
     Learner.decoder (o)
    +
    +
    +
    from tsai.data.core import *
    +from tsai.data.external import get_UCR_data
    +from tsai.models.FCNPlus import FCNPlus
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', verbose=True, split_data=False)
    +tfms  = [None, [TSCategorize()]]
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms)
    +learn = ts_learner(dls, FCNPlus)
    +for p in learn.model.parameters():
    +    p.requires_grad=False
    +test_eq(count_parameters(learn.model), 0)
    +learn.freeze()
    +test_eq(count_parameters(learn.model), 1540)
    +learn.unfreeze()
    +test_eq(count_parameters(learn.model), 264580)
    +
    +learn = ts_learner(dls, 'FCNPlus')
    +for p in learn.model.parameters():
    +    p.requires_grad=False
    +test_eq(count_parameters(learn.model), 0)
    +learn.freeze()
    +test_eq(count_parameters(learn.model), 1540)
    +learn.unfreeze()
    +test_eq(count_parameters(learn.model), 264580)
    +
    +
    Dataset: OliveOil
    +X      : (60, 1, 570)
    +y      : (60,)
    +splits : (#30) [0,1,2,3,4,5,6,7,8,9...] (#30) [30,31,32,33,34,35,36,37,38,39...] 
    +
    +
    +
    +
    +
    learn.show_batch();
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    from fastai.metrics import accuracy
    +from tsai.data.preprocessing import TSRobustScale
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', split_data=False)
    +tfms  = [None, TSClassification()]
    +batch_tfms = TSRobustScale()
    +dls = get_ts_dls(X, y, tfms=tfms, splits=splits, batch_tfms=batch_tfms)
    +learn = ts_learner(dls, FCNPlus, metrics=accuracy, train_metrics=True)
    +learn.fit_one_cycle(2)
    +learn.plot_metrics()
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    epochtrain_losstrain_accuracyvalid_lossvalid_accuracytime
    01.4808750.2666671.3904610.30000000:02
    11.4766550.2666671.3873700.30000000:01
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    if not os.path.exists("./models"): os.mkdir("./models")
    +if not os.path.exists("./data"): os.mkdir("./data")
    +np.save("data/X_test.npy", X[splits[1]])
    +np.save("data/y_test.npy", y[splits[1]])
    +learn.export("./models/test.pth")
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/losses.html b/losses.html new file mode 100644 index 000000000..947f3c21c --- /dev/null +++ b/losses.html @@ -0,0 +1,1387 @@ + + + + + + + + + +tsai - Losses + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Losses

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Losses not available in fastai or Pytorch.

    +
    +
    +

    source

    +
    +

    HuberLoss

    +
    +
     HuberLoss (reduction='mean', delta=1.0)
    +
    +

    Huber loss

    +

    Creates a criterion that uses a squared term if the absolute element-wise error falls below delta and a delta-scaled L1 term otherwise. This loss combines advantages of both :class:L1Loss and :class:MSELoss; the delta-scaled L1 region makes the loss less sensitive to outliers than :class:MSELoss, while the L2 region provides smoothness over :class:L1Loss near 0. See Huber loss <https://en.wikipedia.org/wiki/Huber_loss>_ for more information. This loss is equivalent to nn.SmoothL1Loss when delta == 1.

    +
    +

    source

    +
    +
    +

    LogCoshLoss

    +
    +
     LogCoshLoss (reduction='mean', delta=1.0)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +
    inp = torch.rand(8, 3, 10)
    +targ = torch.randn(8, 3, 10)
    +test_close(HuberLoss(delta=1)(inp, targ), nn.SmoothL1Loss()(inp, targ))
    +LogCoshLoss()(inp, targ)
    +
    +
    tensor(0.4588)
    +
    +
    +
    +

    source

    +
    +
    +

    MaskedLossWrapper

    +
    +
     MaskedLossWrapper (crit)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    inp = torch.rand(8, 3, 10)
    +targ = torch.randn(8, 3, 10)
    +targ[targ >.8] = np.nan
    +nn.L1Loss()(inp, targ), MaskedLossWrapper(nn.L1Loss())(inp, targ)
    +
    +
    (tensor(nan), tensor(1.0520))
    +
    +
    +
    +

    source

    +
    +
    +

    CenterPlusLoss

    +
    +
     CenterPlusLoss (loss, c_out, λ=0.01, logits_dim=None)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    CenterLoss

    +
    +
     CenterLoss (c_out, logits_dim=None)
    +
    +

    Code in Pytorch has been slightly modified from: https://github.com/KaiyangZhou/pytorch-center-loss/blob/master/center_loss.py Based on paper: Wen et al. A Discriminative Feature Learning Approach for Deep Face Recognition. ECCV 2016.

    +

    Args: c_out (int): number of classes. logits_dim (int): dim 1 of the logits. By default same as c_out (for one hot encoded logits)

    +
    +
    c_in = 10
    +x = torch.rand(64, c_in).to(device=default_device())
    +x = F.softmax(x, dim=1)
    +label = x.max(dim=1).indices
    +CenterLoss(c_in).to(x.device)(x, label), CenterPlusLoss(LabelSmoothingCrossEntropyFlat(), c_in).to(x.device)(x, label)
    +
    +
    (tensor(9.2481, grad_fn=<DivBackward0>),
    + TensorBase(2.3559, grad_fn=<AliasBackward0>))
    +
    +
    +
    +
    CenterPlusLoss(LabelSmoothingCrossEntropyFlat(), c_in)
    +
    +
    CenterPlusLoss(loss=FlattenedLoss of LabelSmoothingCrossEntropy(), c_out=10, λ=0.01)
    +
    +
    +
    +

    source

    +
    +
    +

    FocalLoss

    +
    +
     FocalLoss (alpha:Optional[torch.Tensor]=None, gamma:float=2.0,
    +            reduction:str='mean')
    +
    +

    Weighted, multiclass focal loss

    +
    +
    inputs = torch.normal(0, 2, (16, 2)).to(device=default_device())
    +targets = torch.randint(0, 2, (16,)).to(device=default_device())
    +FocalLoss()(inputs, targets)
    +
    +
    tensor(0.9829)
    +
    +
    +
    +

    source

    +
    +
    +

    TweedieLoss

    +
    +
     TweedieLoss (p=1.5, eps=1e-08)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    c_in = 10
    +output = torch.rand(64).to(device=default_device())
    +target = torch.rand(64).to(device=default_device())
    +TweedieLoss().to(output.device)(output, target)
    +
    +
    tensor(3.0539)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/metrics.html b/metrics.html new file mode 100644 index 000000000..d6ac0dd29 --- /dev/null +++ b/metrics.html @@ -0,0 +1,1375 @@ + + + + + + + + + +tsai - Metrics + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Metrics

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Metrics not included in fastai.

    +
    +
    +

    source

    +
    +

    MatthewsCorrCoefBinary

    +
    +
     MatthewsCorrCoefBinary (sample_weight=None)
    +
    +

    Matthews correlation coefficient for single-label classification problems

    +
    +

    source

    +
    +
    +

    get_task_metrics

    +
    +
     get_task_metrics (dls, binary_metrics=None, multi_class_metrics=None,
    +                   regression_metrics=None, verbose=True)
    +
    +

    All metrics applicable to multi classification have been created by Doug Williams (https://github.com/williamsdoug). Thanks a lot Doug!!

    +
    +

    source

    +
    +
    +

    F1_multi

    +
    +
     F1_multi (*args, **kwargs)
    +
    +
    +

    source

    +
    +
    +

    Fbeta_multi

    +
    +
     Fbeta_multi (inp, targ, beta=1.0, thresh=0.5, sigmoid=True)
    +
    +

    Computes Fbeta when inp and targ are the same size.

    +
    +

    source

    +
    +
    +

    balanced_accuracy_multi

    +
    +
     balanced_accuracy_multi (inp, targ, thresh=0.5, sigmoid=True)
    +
    +

    Computes balanced accuracy when inp and targ are the same size.

    +
    +

    source

    +
    +
    +

    specificity_multi

    +
    +
     specificity_multi (inp, targ, thresh=0.5, sigmoid=True)
    +
    +

    Computes specificity (true negative rate) when inp and targ are the same size.

    +
    +

    source

    +
    +
    +

    recall_multi

    +
    +
     recall_multi (inp, targ, thresh=0.5, sigmoid=True)
    +
    +

    Computes recall when inp and targ are the same size.

    +
    +

    source

    +
    +
    +

    precision_multi

    +
    +
     precision_multi (inp, targ, thresh=0.5, sigmoid=True)
    +
    +

    Computes precision when inp and targ are the same size.

    +
    +

    source

    +
    +
    +

    metrics_multi_common

    +
    +
     metrics_multi_common (inp, targ, thresh=0.5, sigmoid=True,
    +                       by_sample=False)
    +
    +

    Computes TP, TN, FP, FN when inp and targ are the same size.

    +
    +

    source

    +
    +
    +

    accuracy_multi

    +
    +
     accuracy_multi (inp, targ, thresh=0.5, sigmoid=True, by_sample=False)
    +
    +

    Computes accuracy when inp and targ are the same size.

    +
    +

    source

    +
    +
    +

    mae

    +
    +
     mae (inp, targ)
    +
    +

    Mean absolute error between inp and targ.

    +
    +

    source

    +
    +
    +

    mape

    +
    +
     mape (inp, targ)
    +
    +

    Mean absolute percentage error between inp and targ.

    +
    +
    n_classes = 4
    +inp = torch.normal(0, 1, (16, 20, n_classes))
    +targ = torch.randint(0, n_classes, (16, 20)).to(torch.int8)
    +_mAP(inp, targ)
    +
    +
    0.27493315845795063
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.convtranplus.html b/models.convtranplus.html new file mode 100644 index 000000000..e67f41aee --- /dev/null +++ b/models.convtranplus.html @@ -0,0 +1,1853 @@ + + + + + + + + + +tsai - ConvTranPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    ConvTranPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    ConvTran: Improving Position Encoding of Transformers for Multivariate Time Series Classification

    +
    +

    This is a Pytorch implementation of ConvTran adapted by Ignacio Oguiza and based on:

    +

    Foumani, N. M., Tan, C. W., Webb, G. I., & Salehi, M. (2023). Improving Position Encoding of Transformers for Multivariate Time Series Classification. arXiv preprint arXiv:2305.16642.

    +

    Pre-print: https://arxiv.org/abs/2305.16642v1

    +

    Original repository: https://github.com/Navidfoumani/ConvTran

    +
    +

    source

    +
    +

    tAPE

    +
    +
     tAPE (d_model:int, seq_len=1024, dropout:float=0.1, scale_factor=1.0)
    +
    +

    time Absolute Position Encoding

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    d_modelintthe embedding dimension
    seq_lenint1024the max. length of the incoming sequence
    dropoutfloat0.1dropout value
    scale_factorfloat1.0
    +
    +
    t = torch.randn(8, 50, 128)
    +assert tAPE(128, 50)(t).shape == t.shape
    +
    +
    +

    source

    +
    +
    +

    AbsolutePositionalEncoding

    +
    +
     AbsolutePositionalEncoding (d_model:int, seq_len=1024, dropout:float=0.1,
    +                             scale_factor=1.0)
    +
    +

    Absolute positional encoding

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    d_modelintthe embedding dimension
    seq_lenint1024the max. length of the incoming sequence
    dropoutfloat0.1dropout value
    scale_factorfloat1.0
    +
    +
    t = torch.randn(8, 50, 128)
    +assert AbsolutePositionalEncoding(128, 50)(t).shape == t.shape
    +
    +
    +

    source

    +
    +
    +

    LearnablePositionalEncoding

    +
    +
     LearnablePositionalEncoding (d_model:int, seq_len=1024,
    +                              dropout:float=0.1)
    +
    +

    Learnable positional encoding

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    d_modelintthe embedding dimension
    seq_lenint1024the max. length of the incoming sequence
    dropoutfloat0.1dropout value
    +
    +
    t = torch.randn(8, 50, 128)
    +assert LearnablePositionalEncoding(128, 50)(t).shape == t.shape
    +
    +
    +

    source

    +
    +
    +

    Attention

    +
    +
     Attention (d_model:int, n_heads:int=8, dropout:float=0.01)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool
    TypeDefaultDetails
    d_modelintEmbedding dimension
    n_headsint8number of attention heads
    dropoutfloat0.01dropout
    +
    +
    t = torch.randn(8, 50, 128)
    +assert Attention(128)(t).shape == t.shape
    +
    +
    +

    source

    +
    +
    +

    Attention_Rel_Scl

    +
    +
     Attention_Rel_Scl (d_model:int, seq_len:int, n_heads:int=8,
    +                    dropout:float=0.01)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool
    TypeDefaultDetails
    d_modelintEmbedding dimension
    seq_lenintsequence length
    n_headsint8number of attention heads
    dropoutfloat0.01dropout
    +
    +
    t = torch.randn(8, 50, 128)
    +assert Attention_Rel_Scl(128, 50)(t).shape == t.shape
    +
    +
    +

    source

    +
    +
    +

    Attention_Rel_Vec

    +
    +
     Attention_Rel_Vec (d_model:int, seq_len:int, n_heads:int=8,
    +                    dropout:float=0.01)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool
    TypeDefaultDetails
    d_modelintEmbedding dimension
    seq_lenintsequence length
    n_headsint8number of attention heads
    dropoutfloat0.01dropout
    +
    +
    t = torch.randn(8, 50, 128)
    +assert Attention_Rel_Vec(128, 50)(t).shape == t.shape
    +
    +
    +

    source

    +
    +
    +

    ConvTranBackbone

    +
    +
     ConvTranBackbone (c_in:int, seq_len:int, d_model=16, n_heads:int=8,
    +                   dim_ff:int=256, abs_pos_encode:str='tAPE',
    +                   rel_pos_encode:str='eRPE', dropout:float=0.01)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    + + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool
    TypeDefaultDetails
    c_inint
    seq_lenint
    d_modelint16Internal dimension of transformer embeddings
    n_headsint8Number of multi-headed attention heads
    dim_ffint256Dimension of dense feedforward part of transformer layer
    abs_pos_encodestrtAPEAbsolute Position Embedding. choices={‘tAPE’, ‘sin’, ‘learned’, None}
    rel_pos_encodestreRPERelative Position Embedding. choices={‘eRPE’, ‘vector’, None}
    dropoutfloat0.01Droupout regularization ratio
    +
    +
    t = torch.randn(8, 5, 20)
    +assert ConvTranBackbone(5, 20)(t).shape, (8, 16, 20)
    +
    +
    +

    source

    +
    +
    +

    ConvTranPlus

    +
    +
     ConvTranPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,
    +               d_model:int=16, n_heads:int=8, dim_ff:int=256,
    +               abs_pos_encode:str='tAPE', rel_pos_encode:str='eRPE',
    +               encoder_dropout:float=0.01, fc_dropout:float=0.1,
    +               use_bn:bool=True, flatten:bool=True, custom_head:Any=None)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inintNumber of channels in input
    c_outintNumber of channels in output
    seq_lenintNumber of input sequence length
    dtupleNoneoutput shape (excluding batch dimension).
    d_modelint16Internal dimension of transformer embeddings
    n_headsint8Number of multi-headed attention heads
    dim_ffint256Dimension of dense feedforward part of transformer layer
    abs_pos_encodestrtAPEAbsolute Position Embedding. choices={‘tAPE’, ‘sin’, ‘learned’, None}
    rel_pos_encodestreRPERelative Position Embedding. choices={‘eRPE’, ‘vector’, None}
    encoder_dropoutfloat0.01Droupout regularization ratio for the encoder
    fc_dropoutfloat0.1Droupout regularization ratio for the head
    use_bnboolTrueindicates if batchnorm will be applied to the model head.
    flattenboolTruethis will flatten the output of the encoder before applying the head if True.
    custom_headtyping.AnyNonecustom head that will be applied to the model head (optional).
    +
    +
    xb = torch.randn(16, 5, 20)
    +
    +model = ConvTranPlus(5, 3, 20, d=None)
    +output = model(xb)
    +assert output.shape == (16, 3)
    +
    +
    +
    xb = torch.randn(16, 5, 20)
    +
    +model = ConvTranPlus(5, 3, 20, d=5)
    +output = model(xb)
    +assert output.shape == (16, 5, 3)
    +
    +
    +
    xb = torch.randn(16, 5, 20)
    +
    +model = ConvTranPlus(5, 3, 20, d=(2, 10))
    +output = model(xb)
    +assert output.shape == (16, 2, 10, 3)
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.explainability.html b/models.explainability.html new file mode 100644 index 000000000..d21e81e55 --- /dev/null +++ b/models.explainability.html @@ -0,0 +1,1231 @@ + + + + + + + + + +tsai - Explainability + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Explainability

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Functionality to help with both global and local explainability.

    +
    +
    +

    source

    +
    +

    get_attribution_map

    +
    +
     get_attribution_map (model, modules, x, y=None, detach=True, cpu=False,
    +                      apply_relu=True)
    +
    +
    +

    source

    +
    +
    +

    get_acts_and_grads

    +
    +
     get_acts_and_grads (model, modules, x, y=None, detach=True, cpu=False)
    +
    +

    Returns activations and gradients for given modules in a model and a single input or a batch. Gradients require y value(s). If they are not provided, it will use the predictions.

    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.fcn.html b/models.fcn.html new file mode 100644 index 000000000..507b41397 --- /dev/null +++ b/models.fcn.html @@ -0,0 +1,1293 @@ + + + + + + + + + +tsai - FCN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    FCN

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial PyTorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on:

    +
      +
    • Wang, Z., Yan, W., & Oates, T. (2017, May). Time series classification from scratch with deep neural networks: A strong baseline. In 2017 international joint conference on neural networks (IJCNN) (pp. 1578-1585). IEEE.

    • +
    • Fawaz, H. I., Forestier, G., Weber, J., Idoumghar, L., & Muller, P. A. (2019). Deep learning for time series classification: a review. Data Mining and Knowledge Discovery, 33(4), 917-963.

    • +
    +

    Official FCN TensorFlow implementation: https://github.com/hfawaz/dl-4-tsc/blob/master/classifiers/fcn.py.

    +

    Note: kernel filter size 8 has been replaced by 7 (since we believe it’s a bug).

    +
    +

    source

    +
    +

    FCN

    +
    +
     FCN (c_in, c_out, layers=[128, 256, 128], kss=[7, 5, 3])
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 16
    +nvars = 3
    +seq_len = 128
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +model = FCN(nvars, c_out)
    +test_eq(model(xb).shape, (bs, c_out))
    +model
    +
    +
    FCN(
    +  (convblock1): ConvBlock(
    +    (0): Conv1d(3, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    +    (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (convblock2): ConvBlock(
    +    (0): Conv1d(128, 256, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)
    +    (1): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (convblock3): ConvBlock(
    +    (0): Conv1d(256, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    +    (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (gap): GAP1d(
    +    (gap): AdaptiveAvgPool1d(output_size=1)
    +    (flatten): Flatten(full=False)
    +  )
    +  (fc): Linear(in_features=128, out_features=2, bias=True)
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.fcnplus.html b/models.fcnplus.html new file mode 100644 index 000000000..10ba357f2 --- /dev/null +++ b/models.fcnplus.html @@ -0,0 +1,1340 @@ + + + + + + + + + +tsai - FCNPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    FCNPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co

    +
    +
    +

    source

    +
    +

    FCNPlus

    +
    +
     FCNPlus (c_in, c_out, layers=[128, 256, 128], kss=[7, 5, 3], coord=False,
    +          separable=False, use_bn=False, fc_dropout=0.0, zero_norm=False,
    +          act=<class 'torch.nn.modules.activation.ReLU'>, act_kwargs={},
    +          residual=False, custom_head=None)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    xb = torch.rand(16, 3, 10)
    +test_eq(FCNPlus(3, 2)(xb).shape, [xb.shape[0], 2])
    +test_eq(FCNPlus(3, 2, coord=True, separable=True, act=Swish, residual=True)(xb).shape, [xb.shape[0], 2])
    +test_eq(nn.Sequential(*FCNPlus(3, 2).children())(xb).shape, [xb.shape[0], 2])
    +test_eq(FCNPlus(3, 2, custom_head=partial(mlp_head, seq_len=10))(xb).shape, [xb.shape[0], 2])
    +
    +
    +
    from tsai.models.utils import *
    +
    +
    +
    model = build_ts_model(FCNPlus, 2, 3)
    +model[-1]
    +
    +
    Sequential(
    +  (0): AdaptiveAvgPool1d(output_size=1)
    +  (1): Squeeze(dim=-1)
    +  (2): Linear(in_features=128, out_features=3, bias=True)
    +)
    +
    +
    +
    +
    from tsai.models.FCN import *
    +
    +
    +
    test_eq(count_parameters(FCN(3,2)), count_parameters(FCNPlus(3,2)))
    +
    +
    +
    FCNPlus(3,2)
    +
    +
    FCNPlus(
    +  (backbone): _FCNBlockPlus(
    +    (convblock1): ConvBlock(
    +      (0): Conv1d(3, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (convblock2): ConvBlock(
    +      (0): Conv1d(128, 256, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)
    +      (1): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (convblock3): ConvBlock(
    +      (0): Conv1d(256, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (add): Sequential()
    +  )
    +  (head): Sequential(
    +    (0): AdaptiveAvgPool1d(output_size=1)
    +    (1): Squeeze(dim=-1)
    +    (2): Linear(in_features=128, out_features=2, bias=True)
    +  )
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.gatedtabtransformer.html b/models.gatedtabtransformer.html new file mode 100644 index 000000000..fb919c79c --- /dev/null +++ b/models.gatedtabtransformer.html @@ -0,0 +1,1302 @@ + + + + + + + + + +tsai - GatedTabTransformer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    GatedTabTransformer

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This implementation is based on:

    +
      +
    • Cholakov, R., & Kolev, T. (2022). The GatedTabTransformer. An enhanced deep learning architecture for tabular modeling. arXiv preprint arXiv:2201.00199. arXiv preprint https://arxiv.org/abs/2201.00199

    • +
    • Huang, X., Khetan, A., Cvitkovic, M., & Karnin, Z. (2020). TabTransformer: Tabular Data Modeling Using Contextual Embeddings. arXiv preprint https://arxiv.org/pdf/2012.06678

    • +
    +

    Official repo: https://github.com/radi-cho/GatedTabTransformer

    +
    +

    source

    +
    +

    GatedTabTransformer

    +
    +
     GatedTabTransformer (classes, cont_names, c_out, column_embed=True,
    +                      add_shared_embed=False, shared_embed_div=8,
    +                      embed_dropout=0.1, drop_whole_embed=False,
    +                      d_model=32, n_layers=6, n_heads=8, d_k=None,
    +                      d_v=None, d_ff=None, res_attention=True,
    +                      attention_act='gelu', res_dropout=0.1,
    +                      norm_cont=True, mlp_d_model=32, mlp_d_ffn=64,
    +                      mlp_layers=4)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +
    from fastcore.test import test_eq
    +from fastcore.basics import first
    +from fastai.data.external import untar_data, URLs
    +from fastai.tabular.data import TabularDataLoaders
    +from fastai.tabular.core import Categorify, FillMissing
    +from fastai.data.transforms import Normalize
    +import pandas as pd
    +
    +
    +
    path = untar_data(URLs.ADULT_SAMPLE)
    +df = pd.read_csv(path/'adult.csv')
    +dls = TabularDataLoaders.from_csv(path/'adult.csv', path=path, y_names="salary",
    +    cat_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race'],
    +    cont_names = ['age', 'fnlwgt', 'education-num'],
    +    procs = [Categorify, FillMissing, Normalize])
    +x_cat, x_cont, yb = first(dls.train)
    +model = GatedTabTransformer(dls.classes, dls.cont_names, dls.c)
    +test_eq(model(x_cat, x_cont).shape, (dls.train.bs, dls.c))
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.gmlp.html b/models.gmlp.html new file mode 100644 index 000000000..ed7eb3a73 --- /dev/null +++ b/models.gmlp.html @@ -0,0 +1,1285 @@ + + + + + + + + + +tsai - gMLP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    gMLP

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial PyTorch implementation based on:

    +
      +
    • Liu, H., Dai, Z., So, D. R., & Le, Q. V. (2021). Pay Attention to MLPs. arXiv preprint arXiv:2105.08050.

    • +
    • Cholakov, R., & Kolev, T. (2022). The GatedTabTransformer. An enhanced deep learning architecture for tabular modeling. arXiv preprint arXiv:2201.00199.

    • +
    +
    +

    source

    +
    +

    gMLP

    +
    +
     gMLP (c_in, c_out, seq_len, patch_size=1, d_model=256, d_ffn=512,
    +       depth=6)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +
    bs = 16
    +c_in = 3
    +c_out = 2
    +seq_len = 64
    +patch_size = 4
    +xb = torch.rand(bs, c_in, seq_len)
    +model = gMLP(c_in, c_out, seq_len, patch_size=patch_size)
    +test_eq(model(xb).shape, (bs, c_out))
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.hydramultirocketplus.html b/models.hydramultirocketplus.html new file mode 100644 index 000000000..5b96b7f0f --- /dev/null +++ b/models.hydramultirocketplus.html @@ -0,0 +1,1492 @@ + + + + + + + + + +tsai - HydraMultiRocketPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    HydraMultiRocketPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Hydra: competing convolutional kernels for fast and accurate time series classification.

    +
    +

    This is a Pytorch implementation of Hydra-MultiRocket adapted by Ignacio Oguiza and based on:

    +

    Dempster, A., Schmidt, D. F., & Webb, G. I. (2023). Hydra: Competing convolutional kernels for fast and accurate time series classification. Data Mining and Knowledge Discovery, 1-27.

    +

    Original paper: https://link.springer.com/article/10.1007/s10618-023-00939-3

    +

    Original repository: https://github.com/angus924/hydra

    +
    +

    source

    +
    +

    HydraMultiRocketBackbonePlus

    +
    +
     HydraMultiRocketBackbonePlus (c_in, c_out, seq_len, d=None, k=8, g=64,
    +                               max_c_in=8, clip=True, num_features=50000,
    +                               max_dilations_per_kernel=32, kernel_size=9,
    +                               max_num_channels=None, max_num_kernels=84,
    +                               use_bn=True, fc_dropout=0,
    +                               custom_head=None, zero_init=True,
    +                               use_diff=True, device=device(type='cpu'))
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    HydraMultiRocketPlus

    +
    +
     HydraMultiRocketPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,
    +                       k:int=8, g:int=64, max_c_in:int=8, clip:bool=True,
    +                       num_features:int=50000,
    +                       max_dilations_per_kernel:int=32, kernel_size:int=9,
    +                       max_num_channels:int=None, max_num_kernels:int=84,
    +                       use_bn:bool=True, fc_dropout:float=0.0,
    +                       custom_head:Any=None, zero_init:bool=True,
    +                       use_diff:bool=True, device:str=device(type='cpu'))
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inintnum of channels in input
    c_outintnum of channels in output
    seq_lenintsequence length
    dtupleNoneshape of the output (when ndim > 1)
    kint8number of kernels per group in HydraBackbone
    gint64number of groups in HydraBackbone
    max_c_inint8max number of channels per group in HydraBackbone
    clipboolTrueclip values >= 0 in HydraBackbone
    num_featuresint50000number of MultiRocket features
    max_dilations_per_kernelint32max dilations per kernel in MultiRocket
    kernel_sizeint9kernel size in MultiRocket
    max_num_channelsintNonemax number of channels in MultiRocket
    max_num_kernelsint84max number of kernels in MultiRocket
    use_bnboolTrueuse batch norm
    fc_dropoutfloat0.0dropout probability
    custom_headtyping.AnyNoneoptional custom head as a torch.nn.Module or Callable
    zero_initboolTrueset head weights and biases to zero
    use_diffboolTrueuse diff(X) as input
    devicestrcpudevice to use
    +
    +
    xb = torch.randn(16, 5, 20).to(default_device())
    +yb = torch.randint(0, 3, (16, 20)).to(default_device())
    +
    +model = HydraMultiRocketPlus(5, 3, 20, d=None).to(default_device())
    +output = model(xb)
    +assert output.shape == (16, 3)
    +output.shape
    +
    +
    torch.Size([16, 3])
    +
    +
    +
    +
    xb = torch.randn(16, 5, 20).to(default_device())
    +yb = torch.randint(0, 3, (16, 20)).to(default_device())
    +
    +model = HydraMultiRocketPlus(5, 3, 20, d=None, use_diff=False).to(default_device())
    +output = model(xb)
    +assert output.shape == (16, 3)
    +output.shape
    +
    +
    torch.Size([16, 3])
    +
    +
    +
    +
    xb = torch.randn(16, 5, 20).to(default_device())
    +yb = torch.randint(0, 3, (16, 5, 20)).to(default_device())
    +
    +model = HydraMultiRocketPlus(5, 3, 20, d=20, use_diff=True).to(default_device())
    +output = model(xb)
    +assert output.shape == (16, 20, 3)
    +output.shape
    +
    +
    torch.Size([16, 20, 3])
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.hydraplus.html b/models.hydraplus.html new file mode 100644 index 000000000..e13033c4e --- /dev/null +++ b/models.hydraplus.html @@ -0,0 +1,1454 @@ + + + + + + + + + +tsai - HydraPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    HydraPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Hydra: competing convolutional kernels for fast and accurate time series classification.

    +
    +

    This is a Pytorch implementation of Hydra adapted by Ignacio Oguiza and based on:

    +

    Dempster, A., Schmidt, D. F., & Webb, G. I. (2023). Hydra: Competing convolutional kernels for fast and accurate time series classification. Data Mining and Knowledge Discovery, 1-27.

    +

    Original paper: https://link.springer.com/article/10.1007/s10618-023-00939-3

    +

    Original repository: https://github.com/angus924/hydra

    +
    +

    source

    +
    +

    HydraBackbonePlus

    +
    +
     HydraBackbonePlus (c_in, c_out, seq_len, k=8, g=64, max_c_in=8,
    +                    clip=True, device=device(type='cpu'), zero_init=True)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    HydraPlus

    +
    +
     HydraPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None, k:int=8,
    +            g:int=64, max_c_in:int=8, clip:bool=True, use_bn:bool=True,
    +            fc_dropout:float=0.0, custom_head:Any=None,
    +            zero_init:bool=True, use_diff:bool=True,
    +            device:str=device(type='cpu'))
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inintnum of channels in input
    c_outintnum of channels in output
    seq_lenintsequence length
    dtupleNoneshape of the output (when ndim > 1)
    kint8number of kernels per group
    gint64number of groups
    max_c_inint8max number of channels per group
    clipboolTrueclip values >= 0
    use_bnboolTrueuse batch norm
    fc_dropoutfloat0.0dropout probability
    custom_headtyping.AnyNoneoptional custom head as a torch.nn.Module or Callable
    zero_initboolTrueset head weights and biases to zero
    use_diffboolTrueuse diff(X) as input
    devicestrcpudevice to use
    +
    +
    xb = torch.randn(16, 5, 20).to(default_device())
    +yb = torch.randint(0, 3, (16, 20)).to(default_device())
    +
    +model = HydraPlus(5, 3, 20, d=None).to(default_device())
    +output = model(xb)
    +assert output.shape == (16, 3)
    +output.shape
    +
    +
    torch.Size([16, 3])
    +
    +
    +
    +
    xb = torch.randn(16, 5, 20).to(default_device())
    +yb = torch.randint(0, 3, (16, 20)).to(default_device())
    +
    +model = HydraPlus(5, 3, 20, d=None, use_diff=False).to(default_device())
    +output = model(xb)
    +assert output.shape == (16, 3)
    +output.shape
    +
    +
    torch.Size([16, 3])
    +
    +
    +
    +
    xb = torch.randn(16, 5, 20).to(default_device())
    +yb = torch.randint(0, 3, (16, 5, 20)).to(default_device())
    +
    +model = HydraPlus(5, 3, 20, d=20, use_diff=True).to(default_device())
    +output = model(xb)
    +assert output.shape == (16, 20, 3)
    +output.shape
    +
    +
    torch.Size([16, 20, 3])
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.inceptiontime.html b/models.inceptiontime.html new file mode 100644 index 000000000..b6e9a269f --- /dev/null +++ b/models.inceptiontime.html @@ -0,0 +1,1409 @@ + + + + + + + + + +tsai - InceptionTime + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    InceptionTime

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    An ensemble of deep Convolutional Neural Network (CNN) models, inspired by the Inception-v4 architecture

    +
    +

    This is an unofficial PyTorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on:

    +

    Fawaz, H. I., Lucas, B., Forestier, G., Pelletier, C., Schmidt, D. F., Weber, J. & Petitjean, F. (2019). InceptionTime: Finding AlexNet for Time Series Classification. arXiv preprint arXiv:1909.04939.

    +

    Official InceptionTime tensorflow implementation: https://github.com/hfawaz/InceptionTime

    +
    +

    source

    +
    +

    InceptionTime

    +
    +
     InceptionTime (c_in, c_out, seq_len=None, nf=32, nb_filters=None, ks=40,
    +                bottleneck=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    InceptionBlock

    +
    +
     InceptionBlock (ni, nf=32, residual=True, depth=6, ks=40,
    +                 bottleneck=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    InceptionModule

    +
    +
     InceptionModule (ni, nf, ks=40, bottleneck=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    from tsai.models.utils import count_parameters
    +
    +
    +
    bs = 16
    +vars = 1
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, vars, seq_len)
    +test_eq(InceptionTime(vars,c_out)(xb).shape, [bs, c_out])
    +test_eq(InceptionTime(vars,c_out, bottleneck=False)(xb).shape, [bs, c_out])
    +test_eq(InceptionTime(vars,c_out, residual=False)(xb).shape, [bs, c_out])
    +test_eq(count_parameters(InceptionTime(3, 2)), 455490)
    +
    +
    +
    InceptionTime(3,2)
    +
    +
    InceptionTime(
    +  (inceptionblock): InceptionBlock(
    +    (inception): ModuleList(
    +      (0): InceptionModule(
    +        (bottleneck): Conv1d(3, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        (convs): ModuleList(
    +          (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)
    +          (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)
    +          (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)
    +        )
    +        (maxconvpool): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): Conv1d(3, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (concat): Concat(dim=1)
    +        (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (act): ReLU()
    +      )
    +      (1): InceptionModule(
    +        (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        (convs): ModuleList(
    +          (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)
    +          (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)
    +          (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)
    +        )
    +        (maxconvpool): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (concat): Concat(dim=1)
    +        (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (act): ReLU()
    +      )
    +      (2): InceptionModule(
    +        (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        (convs): ModuleList(
    +          (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)
    +          (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)
    +          (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)
    +        )
    +        (maxconvpool): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (concat): Concat(dim=1)
    +        (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (act): ReLU()
    +      )
    +      (3): InceptionModule(
    +        (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        (convs): ModuleList(
    +          (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)
    +          (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)
    +          (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)
    +        )
    +        (maxconvpool): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (concat): Concat(dim=1)
    +        (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (act): ReLU()
    +      )
    +      (4): InceptionModule(
    +        (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        (convs): ModuleList(
    +          (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)
    +          (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)
    +          (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)
    +        )
    +        (maxconvpool): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (concat): Concat(dim=1)
    +        (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (act): ReLU()
    +      )
    +      (5): InceptionModule(
    +        (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        (convs): ModuleList(
    +          (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)
    +          (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)
    +          (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)
    +        )
    +        (maxconvpool): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (concat): Concat(dim=1)
    +        (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (act): ReLU()
    +      )
    +    )
    +    (shortcut): ModuleList(
    +      (0): ConvBlock(
    +        (0): Conv1d(3, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    )
    +    (add): Add
    +    (act): ReLU()
    +  )
    +  (gap): GAP1d(
    +    (gap): AdaptiveAvgPool1d(output_size=1)
    +    (flatten): Flatten(full=False)
    +  )
    +  (fc): Linear(in_features=128, out_features=2, bias=True)
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.inceptiontimeplus.html b/models.inceptiontimeplus.html new file mode 100644 index 000000000..aa18b8f21 --- /dev/null +++ b/models.inceptiontimeplus.html @@ -0,0 +1,1830 @@ + + + + + + + + + +tsai - InceptionTimePlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    InceptionTimePlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is an unofficial PyTorch implementation of InceptionTime (Fawaz, 2019) created by Ignacio Oguiza.

    +
    +

    References: * Fawaz, H. I., Lucas, B., Forestier, G., Pelletier, C., Schmidt, D. F., Weber, J., … & Petitjean, F. (2020). Inceptiontime: Finding alexnet for time series classification. Data Mining and Knowledge Discovery, 34(6), 1936-1962. * Official InceptionTime tensorflow implementation: https://github.com/hfawaz/InceptionTime

    +
    +

    source

    +
    +

    InceptionBlockPlus

    +
    +
     InceptionBlockPlus (ni, nf, residual=True, depth=6, coord=False,
    +                     norm='Batch', zero_norm=False, act=<class
    +                     'torch.nn.modules.activation.ReLU'>, act_kwargs={},
    +                     sa=False, se=None, stoch_depth=1.0, ks=40,
    +                     bottleneck=True, padding='same', separable=False,
    +                     dilation=1, stride=1, conv_dropout=0.0, bn_1st=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    InceptionModulePlus

    +
    +
     InceptionModulePlus (ni, nf, ks=40, bottleneck=True, padding='same',
    +                      coord=False, separable=False, dilation=1, stride=1,
    +                      conv_dropout=0.0, sa=False, se=None, norm='Batch',
    +                      zero_norm=False, bn_1st=True, act=<class
    +                      'torch.nn.modules.activation.ReLU'>, act_kwargs={})
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    InceptionTimePlus

    +
    +
     InceptionTimePlus (c_in, c_out, seq_len=None, nf=32, nb_filters=None,
    +                    flatten=False, concat_pool=False, fc_dropout=0.0,
    +                    bn=False, y_range=None, custom_head=None, ks=40,
    +                    bottleneck=True, padding='same', coord=False,
    +                    separable=False, dilation=1, stride=1,
    +                    conv_dropout=0.0, sa=False, se=None, norm='Batch',
    +                    zero_norm=False, bn_1st=True, act=<class
    +                    'torch.nn.modules.activation.ReLU'>, act_kwargs={})
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    XCoordTime

    +
    +
     XCoordTime (c_in, c_out, seq_len=None, nf=32, nb_filters=None,
    +             flatten=False, concat_pool=False, fc_dropout=0.0, bn=False,
    +             y_range=None, custom_head=None, ks=40, bottleneck=True,
    +             padding='same', coord=False, separable=False, dilation=1,
    +             stride=1, conv_dropout=0.0, sa=False, se=None, norm='Batch',
    +             zero_norm=False, bn_1st=True, act=<class
    +             'torch.nn.modules.activation.ReLU'>, act_kwargs={})
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    InCoordTime

    +
    +
     InCoordTime (c_in, c_out, seq_len=None, nf=32, nb_filters=None,
    +              flatten=False, concat_pool=False, fc_dropout=0.0, bn=False,
    +              y_range=None, custom_head=None, ks=40, bottleneck=True,
    +              padding='same', coord=False, separable=False, dilation=1,
    +              stride=1, conv_dropout=0.0, sa=False, se=None, norm='Batch',
    +              zero_norm=False, bn_1st=True, act=<class
    +              'torch.nn.modules.activation.ReLU'>, act_kwargs={})
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    from tsai.data.core import TSCategorize
    +from tsai.models.utils import count_parameters
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 51
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +
    +test_eq(InceptionTimePlus(n_vars,c_out)(xb).shape, [bs, c_out])
    +test_eq(InceptionTimePlus(n_vars,c_out,concat_pool=True)(xb).shape, [bs, c_out])
    +test_eq(InceptionTimePlus(n_vars,c_out, bottleneck=False)(xb).shape, [bs, c_out])
    +test_eq(InceptionTimePlus(n_vars,c_out, residual=False)(xb).shape, [bs, c_out])
    +test_eq(InceptionTimePlus(n_vars,c_out, conv_dropout=.5)(xb).shape, [bs, c_out])
    +test_eq(InceptionTimePlus(n_vars,c_out, stoch_depth=.5)(xb).shape, [bs, c_out])
    +test_eq(InceptionTimePlus(n_vars, c_out, seq_len=seq_len, zero_norm=True, flatten=True)(xb).shape, [bs, c_out])
    +test_eq(InceptionTimePlus(n_vars,c_out, coord=True, separable=True, 
    +                          norm='Instance', zero_norm=True, bn_1st=False, fc_dropout=.5, sa=True, se=True, act=nn.PReLU, act_kwargs={})(xb).shape, [bs, c_out])
    +test_eq(InceptionTimePlus(n_vars,c_out, coord=True, separable=True,
    +                          norm='Instance', zero_norm=True, bn_1st=False, act=nn.PReLU, act_kwargs={})(xb).shape, [bs, c_out])
    +test_eq(count_parameters(InceptionTimePlus(3, 2)), 455490)
    +test_eq(count_parameters(InceptionTimePlus(6, 2, **{'coord': True, 'separable': True, 'zero_norm': True})), 77204)
    +test_eq(count_parameters(InceptionTimePlus(3, 2, ks=40)), count_parameters(InceptionTimePlus(3, 2, ks=[9, 19, 39])))
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 51
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +
    +model = InceptionTimePlus(n_vars, c_out)
    +model(xb).shape
    +test_eq(model[0](xb), model.backbone(xb))
    +test_eq(model[1](model[0](xb)), model.head(model[0](xb)))
    +test_eq(model[1].state_dict().keys(), model.head.state_dict().keys())
    +test_eq(len(ts_splitter(model)), 2)
    +
    +
    +
    test_eq(check_bias(InceptionTimePlus(2,3, zero_norm=True), is_conv)[0].sum(), 0)
    +test_eq(check_weight(InceptionTimePlus(2,3, zero_norm=True), is_bn)[0].sum(), 6)
    +test_eq(check_weight(InceptionTimePlus(2,3), is_bn)[0], np.array([1., 1., 1., 1., 1., 1., 1., 1.]))
    +
    +
    +
    for i in range(10): InceptionTimePlus(n_vars,c_out,stoch_depth=0.8,depth=9,zero_norm=True)(xb)
    +
    +
    +
    net = InceptionTimePlus(2,3,**{'coord': True, 'separable': True, 'zero_norm': True})
    +test_eq(check_weight(net, is_bn)[0], np.array([1., 1., 0., 1., 1., 0., 1., 1.]))
    +net
    +
    +
    InceptionTimePlus(
    +  (backbone): Sequential(
    +    (0): InceptionBlockPlus(
    +      (inception): ModuleList(
    +        (0): InceptionModulePlus(
    +          (bottleneck): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): Conv1d(3, 32, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (convs): ModuleList(
    +            (0): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (2): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +          )
    +          (mp_conv): Sequential(
    +            (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): Conv1d(3, 32, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (concat): Concat(dim=1)
    +          (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +          (act): ReLU()
    +        )
    +        (1): InceptionModulePlus(
    +          (bottleneck): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (convs): ModuleList(
    +            (0): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (2): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +          )
    +          (mp_conv): Sequential(
    +            (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (concat): Concat(dim=1)
    +          (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +          (act): ReLU()
    +        )
    +        (2): InceptionModulePlus(
    +          (bottleneck): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (convs): ModuleList(
    +            (0): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (2): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +          )
    +          (mp_conv): Sequential(
    +            (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (concat): Concat(dim=1)
    +          (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +        (3): InceptionModulePlus(
    +          (bottleneck): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (convs): ModuleList(
    +            (0): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (2): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +          )
    +          (mp_conv): Sequential(
    +            (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (concat): Concat(dim=1)
    +          (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +          (act): ReLU()
    +        )
    +        (4): InceptionModulePlus(
    +          (bottleneck): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (convs): ModuleList(
    +            (0): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (2): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +          )
    +          (mp_conv): Sequential(
    +            (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (concat): Concat(dim=1)
    +          (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +          (act): ReLU()
    +        )
    +        (5): InceptionModulePlus(
    +          (bottleneck): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (convs): ModuleList(
    +            (0): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +            (2): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): SeparableConv1d(
    +                (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)
    +                (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +              )
    +            )
    +          )
    +          (mp_conv): Sequential(
    +            (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +            (1): ConvBlock(
    +              (0): AddCoords1d()
    +              (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (concat): Concat(dim=1)
    +          (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +      )
    +      (shortcut): ModuleList(
    +        (0): ConvBlock(
    +          (0): AddCoords1d()
    +          (1): Conv1d(3, 128, kernel_size=(1,), stride=(1,), bias=False)
    +          (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +        (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +      (act): ModuleList(
    +        (0): ReLU()
    +        (1): ReLU()
    +      )
    +      (add): Add
    +    )
    +  )
    +  (head): Sequential(
    +    (0): Sequential(
    +      (0): GAP1d(
    +        (gap): AdaptiveAvgPool1d(output_size=1)
    +        (flatten): Reshape(bs)
    +      )
    +      (1): LinBnDrop(
    +        (0): Linear(in_features=128, out_features=3, bias=True)
    +      )
    +    )
    +  )
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    MultiInceptionTimePlus

    +
    +
     MultiInceptionTimePlus (feat_list, c_out, seq_len=None, nf=32,
    +                         nb_filters=None, depth=6, stoch_depth=1.0,
    +                         flatten=False, concat_pool=False, fc_dropout=0.0,
    +                         bn=False, y_range=None, custom_head=None)
    +
    +

    Class that allows you to create a model with multiple branches of InceptionTimePlus.

    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 51
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +
    +test_eq(count_parameters(MultiInceptionTimePlus([1,1,1], c_out)) > count_parameters(MultiInceptionTimePlus(3, c_out)), True)
    +test_eq(MultiInceptionTimePlus([1,1,1], c_out).to(xb.device)(xb).shape, MultiInceptionTimePlus(3, c_out).to(xb.device)(xb).shape)
    +
    +
    [W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.
    +
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 12
    +c_out = 10
    +xb = torch.rand(bs, n_vars, seq_len)
    +new_head = partial(conv_lin_nd_head, d=(5,2))
    +net = MultiInceptionTimePlus(n_vars, c_out, seq_len, custom_head=new_head)
    +print(net.to(xb.device)(xb).shape)
    +net.head
    +
    +
    torch.Size([16, 5, 2, 10])
    +
    +
    +
    Sequential(
    +  (0): create_conv_lin_nd_head(
    +    (0): Conv1d(128, 10, kernel_size=(1,), stride=(1,))
    +    (1): Linear(in_features=12, out_features=10, bias=True)
    +    (2): Transpose(-1, -2)
    +    (3): Reshape(bs, 5, 2, 10)
    +  )
    +)
    +
    +
    +
    +
    bs = 16
    +n_vars = 6
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +net = MultiInceptionTimePlus([1,2,3], c_out, seq_len)
    +print(net.to(xb.device)(xb).shape)
    +net.head
    +
    +
    torch.Size([16, 2])
    +
    +
    +
    Sequential(
    +  (0): Sequential(
    +    (0): GAP1d(
    +      (gap): AdaptiveAvgPool1d(output_size=1)
    +      (flatten): Reshape(bs)
    +    )
    +    (1): LinBnDrop(
    +      (0): Linear(in_features=384, out_features=2, bias=True)
    +    )
    +  )
    +)
    +
    +
    +
    +
    bs = 8
    +c_in = 7  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 10
    +xb2 = torch.randn(bs, c_in, seq_len)
    +model1 = MultiInceptionTimePlus([2, 5], c_out, seq_len)
    +model2 = MultiInceptionTimePlus([[0,2,5], [0,1,3,4,6]], c_out, seq_len)
    +test_eq(model1.to(xb2.device)(xb2).shape, (bs, c_out))
    +test_eq(model1.to(xb2.device)(xb2).shape, model2.to(xb2.device)(xb2).shape)
    +
    +
    +
    from tsai.data.external import *
    +from tsai.data.core import *
    +from tsai.data.preprocessing import *
    +
    +
    +
    X, y, splits = get_UCR_data('NATOPS', split_data=False)
    +tfms  = [None, [TSCategorize()]]
    +batch_tfms = TSStandardize()
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +model = InceptionTimePlus(dls.vars, dls.c, dls.len)
    +xb,yb=first(dls.train)
    +test_eq(model.to(xb.device)(xb).shape, (dls.bs, dls.c))
    +test_eq(count_parameters(model), 460038)
    +
    +
    +
    X, y, splits = get_UCR_data('NATOPS', split_data=False)
    +tfms  = [None, [TSCategorize()]]
    +batch_tfms = TSStandardize()
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +model = MultiInceptionTimePlus([4, 15, 5], dls.c, dls.len)
    +xb,yb=first(dls.train)
    +test_eq(model.to(xb.device)(xb).shape, (dls.bs, dls.c))
    +test_eq(count_parameters(model), 1370886)
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.layers.html b/models.layers.html new file mode 100644 index 000000000..d9829914c --- /dev/null +++ b/models.layers.html @@ -0,0 +1,3574 @@ + + + + + + + + + +tsai - Layers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Layers

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Helper functions used to build PyTorch timeseries models.

    +
    +
    +

    source

    +
    +

    test_module_to_torchscript

    +
    +
     test_module_to_torchscript (m:torch.nn.modules.module.Module,
    +                             inputs:torch.Tensor, trace:bool=True,
    +                             script:bool=True, serialize:bool=True,
    +                             verbose:bool=True)
    +
    +

    Tests if a PyTorch module can be correctly traced or scripted and serialized

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    mModuleThe PyTorch module to be tested.
    inputsTensorA tensor or tuple of tensors representing the inputs to the model.
    traceboolTrueIf True, attempts to trace the model. Defaults to True.
    scriptboolTrueIf True, attempts to script the model. Defaults to True.
    serializeboolTrueIf True, saves and loads the traced/scripted module to ensure it can be serialized. Defaults to True.
    verboseboolTrueIf True, prints detailed information about the tracing and scripting process. Defaults to True.
    +
    +
    m = nn.Linear(10, 2)
    +inp = torch.randn(3, 10)
    +test_module_to_torchscript(m, inp, trace=True, script=True, serialize=True, verbose=True)
    +
    +
    output.shape: torch.Size([3, 2])
    +Tracing...
    +...Linear has been successfully traced 😃
    +
    +
    +
    +
    True
    +
    +
    +
    +

    source

    +
    +
    +

    init_lin_zero

    +
    +
     init_lin_zero (m)
    +
    +
    +

    source

    +
    +
    +

    SwishBeta

    +
    +
     SwishBeta ()
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    SmeLU

    +
    +
     SmeLU (beta:float=2.0)
    +
    +

    Smooth ReLU activation function based on https://arxiv.org/pdf/2202.06499.pdf

    + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    betafloat2.0Beta value
    ReturnsNone
    +
    +

    source

    +
    +
    +

    Chomp1d

    +
    +
     Chomp1d (chomp_size)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    SameConv1d

    +
    +
     SameConv1d (ni, nf, ks=3, stride=1, dilation=1, **kwargs)
    +
    +

    Conv1d with padding=‘same’

    +
    +

    source

    +
    +
    +

    Pad1d

    +
    +
     Pad1d (padding, value=0.0)
    +
    +

    Pads the input tensor boundaries with a constant value.

    +

    For N-dimensional padding, use :func:torch.nn.functional.pad().

    +

    Args: padding (int, tuple): the size of the padding. If is int, uses the same padding in both boundaries. If a 2-tuple, uses (:math:\text{padding\_left}, :math:\text{padding\_right})

    +

    Shape: - Input: :math:(C, W_{in}) or :math:(N, C, W_{in}). - Output: :math:(C, W_{out}) or :math:(N, C, W_{out}), where

    +
      :math:`W_{out} = W_{in} + \text{padding\_left} + \text{padding\_right}`
    +

    Examples::

    +
    >>> # xdoctest: +IGNORE_WANT("non-deterministic")
    +>>> m = nn.ConstantPad1d(2, 3.5)
    +>>> input = torch.randn(1, 2, 4)
    +>>> input
    +tensor([[[-1.0491, -0.7152, -0.0749,  0.8530],
    +         [-1.3287,  1.8966,  0.1466, -0.2771]]])
    +>>> m(input)
    +tensor([[[ 3.5000,  3.5000, -1.0491, -0.7152, -0.0749,  0.8530,  3.5000,
    +           3.5000],
    +         [ 3.5000,  3.5000, -1.3287,  1.8966,  0.1466, -0.2771,  3.5000,
    +           3.5000]]])
    +>>> m = nn.ConstantPad1d(2, 3.5)
    +>>> input = torch.randn(1, 2, 3)
    +>>> input
    +tensor([[[ 1.6616,  1.4523, -1.1255],
    +         [-3.6372,  0.1182, -1.8652]]])
    +>>> m(input)
    +tensor([[[ 3.5000,  3.5000,  1.6616,  1.4523, -1.1255,  3.5000,  3.5000],
    +         [ 3.5000,  3.5000, -3.6372,  0.1182, -1.8652,  3.5000,  3.5000]]])
    +>>> # using different paddings for different sides
    +>>> m = nn.ConstantPad1d((3, 1), 3.5)
    +>>> m(input)
    +tensor([[[ 3.5000,  3.5000,  3.5000,  1.6616,  1.4523, -1.1255,  3.5000],
    +         [ 3.5000,  3.5000,  3.5000, -3.6372,  0.1182, -1.8652,  3.5000]]])
    +
    +

    source

    +
    +
    +

    same_padding1d

    +
    +
     same_padding1d (seq_len, ks, stride=1, dilation=1)
    +
    +

    Same padding formula as used in Tensorflow

    +
    +

    source

    +
    +
    +

    Conv2d

    +
    +
     Conv2d (ni, nf, kernel_size=None, ks=None, stride=1, padding='same',
    +         dilation=1, init='auto', bias_std=0.01, **kwargs)
    +
    +

    conv1d layer with padding=‘same’, ‘valid’, or any integer (defaults to ‘same’)

    +
    +

    source

    +
    +
    +

    Conv2dSame

    +
    +
     Conv2dSame (ni, nf, ks=(3, 3), stride=(1, 1), dilation=(1, 1), **kwargs)
    +
    +

    Conv2d with padding=‘same’

    +
    +

    source

    +
    +
    +

    Pad2d

    +
    +
     Pad2d (padding, value=0.0)
    +
    +

    Pads the input tensor boundaries with a constant value.

    +

    For N-dimensional padding, use :func:torch.nn.functional.pad().

    +

    Args: padding (int, tuple): the size of the padding. If is int, uses the same padding in all boundaries. If a 4-tuple, uses (:math:\text{padding\_left}, :math:\text{padding\_right}, :math:\text{padding\_top}, :math:\text{padding\_bottom})

    +

    Shape: - Input: :math:(N, C, H_{in}, W_{in}) or :math:(C, H_{in}, W_{in}). - Output: :math:(N, C, H_{out}, W_{out}) or :math:(C, H_{out}, W_{out}), where

    +
      :math:`H_{out} = H_{in} + \text{padding\_top} + \text{padding\_bottom}`
    +
    +  :math:`W_{out} = W_{in} + \text{padding\_left} + \text{padding\_right}`
    +

    Examples::

    +
    >>> # xdoctest: +IGNORE_WANT("non-deterministic")
    +>>> m = nn.ConstantPad2d(2, 3.5)
    +>>> input = torch.randn(1, 2, 2)
    +>>> input
    +tensor([[[ 1.6585,  0.4320],
    +         [-0.8701, -0.4649]]])
    +>>> m(input)
    +tensor([[[ 3.5000,  3.5000,  3.5000,  3.5000,  3.5000,  3.5000],
    +         [ 3.5000,  3.5000,  3.5000,  3.5000,  3.5000,  3.5000],
    +         [ 3.5000,  3.5000,  1.6585,  0.4320,  3.5000,  3.5000],
    +         [ 3.5000,  3.5000, -0.8701, -0.4649,  3.5000,  3.5000],
    +         [ 3.5000,  3.5000,  3.5000,  3.5000,  3.5000,  3.5000],
    +         [ 3.5000,  3.5000,  3.5000,  3.5000,  3.5000,  3.5000]]])
    +>>> # using different paddings for different sides
    +>>> m = nn.ConstantPad2d((3, 0, 2, 1), 3.5)
    +>>> m(input)
    +tensor([[[ 3.5000,  3.5000,  3.5000,  3.5000,  3.5000],
    +         [ 3.5000,  3.5000,  3.5000,  3.5000,  3.5000],
    +         [ 3.5000,  3.5000,  3.5000,  1.6585,  0.4320],
    +         [ 3.5000,  3.5000,  3.5000, -0.8701, -0.4649],
    +         [ 3.5000,  3.5000,  3.5000,  3.5000,  3.5000]]])
    +
    +

    source

    +
    +
    +

    same_padding2d

    +
    +
     same_padding2d (H, W, ks, stride=(1, 1), dilation=(1, 1))
    +
    +

    Same padding formula as used in Tensorflow

    +
    +
    bs = 2
    +c_in = 3
    +c_out = 5
    +h = 16
    +w = 20
    +t = torch.rand(bs, c_in, h, w)
    +test_eq(Conv2dSame(c_in, c_out, ks=3, stride=1, dilation=1, bias=False)(t).shape, (bs, c_out, h, w))
    +test_eq(Conv2dSame(c_in, c_out, ks=(3, 1), stride=1, dilation=1, bias=False)(t).shape, (bs, c_out, h, w))
    +test_eq(Conv2dSame(c_in, c_out, ks=3, stride=(1, 1), dilation=(2, 2), bias=False)(t).shape, (bs, c_out, h, w))
    +test_eq(Conv2dSame(c_in, c_out, ks=3, stride=(2, 2), dilation=(1, 1), bias=False)(t).shape, (bs, c_out, h//2, w//2))
    +test_eq(Conv2dSame(c_in, c_out, ks=3, stride=(2, 2), dilation=(2, 2), bias=False)(t).shape, (bs, c_out, h//2, w//2))
    +test_eq(Conv2d(c_in, c_out, ks=3, padding='same', stride=1, dilation=1, bias=False)(t).shape, (bs, c_out, h, w))
    +
    +
    +

    source

    +
    +
    +

    CausalConv1d

    +
    +
     CausalConv1d (ni, nf, ks, stride=1, dilation=1, groups=1, bias=True)
    +
    +

    Applies a 1D convolution over an input signal composed of several input planes.

    +

    In the simplest case, the output value of the layer with input size :math:(N, C_{\text{in}}, L) and output :math:(N, C_{\text{out}}, L_{\text{out}}) can be precisely described as:

    +

    .. math:: (N_i, C_{j}) = (C{j}) + {k = 0}^{C_{in} - 1} (C_{_j}, k) (N_i, k)

    +

    where :math:\star is the valid cross-correlation_ operator, :math:N is a batch size, :math:C denotes a number of channels, :math:L is a length of signal sequence.

    +

    This module supports :ref:TensorFloat32<tf32_on_ampere>.

    +

    On certain ROCm devices, when using float16 inputs this module will use :ref:different precision<fp16_on_mi200> for backward.

    +
      +
    • :attr:stride controls the stride for the cross-correlation, a single number or a one-element tuple.

    • +
    • :attr:padding controls the amount of padding applied to the input. It can be either a string {‘valid’, ‘same’} or a tuple of ints giving the amount of implicit padding applied on both sides.

    • +
    • :attr:dilation controls the spacing between the kernel points; also known as the à trous algorithm. It is harder to describe, but this link_ has a nice visualization of what :attr:dilation does.

    • +
    • :attr:groups controls the connections between inputs and outputs. :attr:in_channels and :attr:out_channels must both be divisible by :attr:groups. For example,

      +
        +
      • At groups=1, all inputs are convolved to all outputs.
      • +
      • At groups=2, the operation becomes equivalent to having two conv layers side by side, each seeing half the input channels and producing half the output channels, and both subsequently concatenated.
      • +
      • At groups= :attr:in_channels, each input channel is convolved with its own set of filters (of size :math:\frac{\text{out\_channels}}{\text{in\_channels}}).
      • +
    • +
    +

    Note: When groups == in_channels and out_channels == K * in_channels, where K is a positive integer, this operation is also known as a “depthwise convolution”.

    +
    In other words, for an input of size :math:`(N, C_{in}, L_{in})`,
    +a depthwise convolution with a depthwise multiplier `K` can be performed with the arguments
    +:math:`(C_\text{in}=C_\text{in}, C_\text{out}=C_\text{in} \times \text{K}, ..., \text{groups}=C_\text{in})`.
    +

    Note: In some circumstances when given tensors on a CUDA device and using CuDNN, this operator may select a nondeterministic algorithm to increase performance. If this is undesirable, you can try to make the operation deterministic (potentially at a performance cost) by setting torch.backends.cudnn.deterministic = True. See :doc:/notes/randomness for more information.

    +

    Note: padding='valid' is the same as no padding. padding='same' pads the input so the output has the shape as the input. However, this mode doesn’t support any stride values other than 1.

    +

    Note: This module supports complex data types i.e. complex32, complex64, complex128.

    +

    Args: in_channels (int): Number of channels in the input image out_channels (int): Number of channels produced by the convolution kernel_size (int or tuple): Size of the convolving kernel stride (int or tuple, optional): Stride of the convolution. Default: 1 padding (int, tuple or str, optional): Padding added to both sides of the input. Default: 0 padding_mode (str, optional): 'zeros', 'reflect', 'replicate' or 'circular'. Default: 'zeros' dilation (int or tuple, optional): Spacing between kernel elements. Default: 1 groups (int, optional): Number of blocked connections from input channels to output channels. Default: 1 bias (bool, optional): If True, adds a learnable bias to the output. Default: True

    +

    Shape: - Input: :math:(N, C_{in}, L_{in}) or :math:(C_{in}, L_{in}) - Output: :math:(N, C_{out}, L_{out}) or :math:(C_{out}, L_{out}), where

    +
      .. math::
    +      L_{out} = \left\lfloor\frac{L_{in} + 2 \times \text{padding} - \text{dilation}
    +                \times (\text{kernel\_size} - 1) - 1}{\text{stride}} + 1\right\rfloor
    +

    Attributes: weight (Tensor): the learnable weights of the module of shape :math:(\text{out\_channels}, \frac{\text{in\_channels}}{\text{groups}}, \text{kernel\_size}). The values of these weights are sampled from :math:\mathcal{U}(-\sqrt{k}, \sqrt{k}) where :math:k = \frac{groups}{C_\text{in} * \text{kernel\_size}} bias (Tensor): the learnable bias of the module of shape (out_channels). If :attr:bias is True, then the values of these weights are sampled from :math:\mathcal{U}(-\sqrt{k}, \sqrt{k}) where :math:k = \frac{groups}{C_\text{in} * \text{kernel\_size}}

    +

    Examples::

    +
    >>> m = nn.Conv1d(16, 33, 3, stride=2)
    +>>> input = torch.randn(20, 16, 50)
    +>>> output = m(input)
    +

    .. _cross-correlation: https://en.wikipedia.org/wiki/Cross-correlation

    +

    .. _link: https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md

    +
    +

    source

    +
    +
    +

    Conv1d

    +
    +
     Conv1d (ni, nf, kernel_size=None, ks=None, stride=1, padding='same',
    +         dilation=1, init='auto', bias_std=0.01, **kwargs)
    +
    +

    conv1d layer with padding=‘same’, ‘causal’, ‘valid’, or any integer (defaults to ‘same’)

    +
    +
    bs = 2
    +c_in = 3
    +c_out = 5
    +seq_len = 512
    +t = torch.rand(bs, c_in, seq_len)
    +dilation = 1
    +test_eq(CausalConv1d(c_in, c_out, ks=3, dilation=dilation)(t).shape, Conv1d(c_in, c_out, ks=3, padding="same", dilation=dilation)(t).shape)
    +dilation = 2
    +test_eq(CausalConv1d(c_in, c_out, ks=3, dilation=dilation)(t).shape, Conv1d(c_in, c_out, ks=3, padding="same", dilation=dilation)(t).shape)
    +
    +
    +
    bs = 2
    +ni = 3
    +nf = 5
    +seq_len = 6
    +ks = 3
    +t = torch.rand(bs, c_in, seq_len)
    +test_eq(Conv1d(ni, nf, ks, padding=0)(t).shape, (bs, c_out, seq_len - (2 * (ks//2))))
    +test_eq(Conv1d(ni, nf, ks, padding='valid')(t).shape, (bs, c_out, seq_len - (2 * (ks//2))))
    +test_eq(Conv1d(ni, nf, ks, padding='same')(t).shape, (bs, c_out, seq_len))
    +test_eq(Conv1d(ni, nf, ks, padding='causal')(t).shape, (bs, c_out, seq_len))
    +test_error('use kernel_size or ks but not both simultaneously', Conv1d, ni, nf, kernel_size=3, ks=3)
    +test_error('you need to pass a ks', Conv1d, ni, nf)
    +
    +
    +
    conv = Conv1d(ni, nf, ks, padding='same')
    +init_linear(conv, None, init='auto', bias_std=.01)
    +conv
    +
    +
    Conv1d(3, 5, kernel_size=(3,), stride=(1,), padding=(1,))
    +
    +
    +
    +
    conv = Conv1d(ni, nf, ks, padding='causal')
    +init_linear(conv, None, init='auto', bias_std=.01)
    +conv
    +
    +
    CausalConv1d(3, 5, kernel_size=(3,), stride=(1,))
    +
    +
    +
    +
    conv = Conv1d(ni, nf, ks, padding='valid')
    +init_linear(conv, None, init='auto', bias_std=.01)
    +weight_norm(conv)
    +conv
    +
    +
    Conv1d(3, 5, kernel_size=(3,), stride=(1,))
    +
    +
    +
    +
    conv = Conv1d(ni, nf, ks, padding=0)
    +init_linear(conv, None, init='auto', bias_std=.01)
    +weight_norm(conv)
    +conv
    +
    +
    Conv1d(3, 5, kernel_size=(3,), stride=(1,))
    +
    +
    +
    +

    source

    +
    +
    +

    SeparableConv1d

    +
    +
     SeparableConv1d (ni, nf, ks, stride=1, padding='same', dilation=1,
    +                  bias=True, bias_std=0.01)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 64
    +c_in = 6
    +c_out = 5
    +seq_len = 512
    +t = torch.rand(bs, c_in, seq_len)
    +test_eq(SeparableConv1d(c_in, c_out, 3)(t).shape, (bs, c_out, seq_len))
    +
    +
    +

    source

    +
    +
    +

    AddCoords1d

    +
    +
     AddCoords1d ()
    +
    +

    Add coordinates to ease position identification without modifying mean and std

    +
    +
    bs = 2
    +c_in = 3
    +c_out = 5
    +seq_len = 50
    +
    +t = torch.rand(bs, c_in, seq_len)
    +t = (t - t.mean()) / t.std()
    +test_eq(AddCoords1d()(t).shape, (bs, c_in + 1, seq_len))
    +new_t = AddCoords1d()(t)
    +test_close(new_t.mean(),0, 1e-2)
    +test_close(new_t.std(), 1, 1e-2)
    +
    +
    +

    source

    +
    +
    +

    ConvBlock

    +
    +
     ConvBlock (ni, nf, kernel_size=None, ks=3, stride=1, padding='same',
    +            bias=None, bias_std=0.01, norm='Batch', zero_norm=False,
    +            bn_1st=True, act=<class 'torch.nn.modules.activation.ReLU'>,
    +            act_kwargs={}, init='auto', dropout=0.0, xtra=None,
    +            coord=False, separable=False, **kwargs)
    +
    +

    Create a sequence of conv1d (ni to nf), activation (if act_cls) and norm_type layers.

    +
    +

    source

    +
    +
    +

    ResBlock1dPlus

    +
    +
     ResBlock1dPlus (expansion, ni, nf, coord=False, stride=1, groups=1,
    +                 reduction=None, nh1=None, nh2=None, dw=False, g2=1,
    +                 sa=False, sym=False, norm='Batch', zero_norm=True,
    +                 act_cls=<class 'torch.nn.modules.activation.ReLU'>, ks=3,
    +                 pool=<function AvgPool>, pool_first=True, **kwargs)
    +
    +

    Resnet block from ni to nh with stride

    +
    +

    source

    +
    +
    +

    SEModule1d

    +
    +
     SEModule1d (ni, reduction=16, act=<class
    +             'torch.nn.modules.activation.ReLU'>, act_kwargs={})
    +
    +

    Squeeze and excitation module for 1d

    +
    +
    t = torch.rand(8, 32, 12)
    +test_eq(SEModule1d(t.shape[1], 16, act=nn.ReLU, act_kwargs={})(t).shape, t.shape)
    +
    +
    +

    source

    +
    +
    +

    Norm

    +
    +
     Norm (nf, ndim=1, norm='Batch', zero_norm=False, init=True, **kwargs)
    +
    +

    Norm layer with nf features and ndim with auto init.

    +
    +
    bs = 2
    +ni = 3
    +nf = 5
    +sl = 4
    +ks = 5
    +
    +t = torch.rand(bs, ni, sl)
    +test_eq(ConvBlock(ni, nf, ks)(t).shape, (bs, nf, sl))
    +test_eq(ConvBlock(ni, nf, ks, padding='causal')(t).shape, (bs, nf, sl))
    +test_eq(ConvBlock(ni, nf, ks, coord=True)(t).shape, (bs, nf, sl))
    +
    +
    +
    test_eq(BN1d(ni)(t).shape, (bs, ni, sl))
    +test_eq(BN1d(ni).weight.data.mean().item(), 1.)
    +test_eq(BN1d(ni, zero_norm=True).weight.data.mean().item(), 0.)
    +
    +
    +
    test_eq(ConvBlock(ni, nf, ks, norm='batch', zero_norm=True)[1].weight.data.unique().item(), 0)
    +test_ne(ConvBlock(ni, nf, ks, norm='batch', zero_norm=False)[1].weight.data.unique().item(), 0)
    +test_eq(ConvBlock(ni, nf, ks, bias=False)[0].bias, None)
    +ConvBlock(ni, nf, ks, act=Swish, coord=True)
    +
    +
    ConvBlock(
    +  (0): AddCoords1d()
    +  (1): Conv1d(4, 5, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)
    +  (2): BatchNorm1d(5, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +  (3): Swish()
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    LinLnDrop

    +
    +
     LinLnDrop (n_in, n_out, ln=True, p=0.0, act=None, lin_first=False)
    +
    +

    Module grouping LayerNorm1d, Dropout and Linear layers

    +
    +
    LinLnDrop(2, 3, p=.5)
    +
    +
    LinLnDrop(
    +  (0): LayerNorm((2,), eps=1e-05, elementwise_affine=True)
    +  (1): Dropout(p=0.5, inplace=False)
    +  (2): Linear(in_features=2, out_features=3, bias=False)
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    LambdaPlus

    +
    +
     LambdaPlus (func, *args, **kwargs)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    ReZero

    +
    +
     ReZero (module)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Clip

    +
    +
     Clip (min=None, max=None)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Clamp

    +
    +
     Clamp (min=None, max=None)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    SoftMax

    +
    +
     SoftMax (dim=-1)
    +
    +

    SoftMax layer

    +
    +

    source

    +
    +
    +

    LastStep

    +
    +
     LastStep ()
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Max

    +
    +
     Max (dim=None, keepdim=False)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Reshape

    +
    +
     Reshape (*shape)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    View

    +
    +
     View (*shape)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Transpose

    +
    +
     Transpose (*dims, contiguous=False)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Permute

    +
    +
     Permute (*dims)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Unfold

    +
    +
     Unfold (dim, size, step=1)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Concat

    +
    +
     Concat (dim=1)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Add

    +
    +
     Add ()
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Unsqueeze

    +
    +
     Unsqueeze (dim=-1)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    Squeeze

    +
    +
     Squeeze (dim=-1)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 2
    +nf = 5
    +sl = 4
    +
    +t = torch.rand(bs, nf, sl)
    +test_eq(Permute(0,2,1)(t).shape, (bs, sl, nf))
    +test_eq(Max(1)(t).shape, (bs, sl))
    +test_eq(Transpose(1,2)(t).shape, (bs, sl, nf))
    +test_eq(Transpose(1,2, contiguous=True)(t).shape, (bs, sl, nf))
    +test_eq(View(-1, 2, 10)(t).shape, (bs, 1, 2, 10))
    +test_eq(Reshape(-1, 2, 10)(t).shape, (bs, 1, 2, 10))
    +test_eq(Reshape()(t).shape, (2, 20))
    +test_eq(Reshape(-1)(t).shape, (40,))
    +Transpose(1,2), Permute(0,2,1), View(-1, 2, 10), Transpose(1,2, contiguous=True), Reshape(-1, 2, 10), Noop
    +
    +
    (Transpose(1, 2),
    + Permute(dims=0, 2, 1),
    + View(bs, -1, 2, 10),
    + Transpose(dims=1, 2).contiguous(),
    + Reshape(bs, -1, 2, 10),
    + Sequential())
    +
    +
    +
    +

    source

    +
    +
    +

    DropPath

    +
    +
     DropPath (p=None)
    +
    +

    Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

    +

    It’s similar to Dropout but it drops individual connections instead of nodes. Original code in https://github.com/rwightman/pytorch-image-models (timm library)

    +
    +
    t = torch.ones(100,2,3)
    +test_eq(DropPath(0.)(t), t)
    +assert DropPath(0.5)(t).max() >= 1
    +
    +
    +

    source

    +
    +
    +

    Sharpen

    +
    +
     Sharpen (T=0.5)
    +
    +

    This is used to increase confidence in predictions - MixMatch paper

    +
    +
    n_samples = 1000
    +n_classes = 3
    +
    +t = (torch.rand(n_samples, n_classes) - .5) * 10
    +probas = F.softmax(t, -1)
    +sharpened_probas = Sharpen()(probas)
    +plt.plot(probas.flatten().sort().values, color='r')
    +plt.plot(sharpened_probas.flatten().sort().values, color='b')
    +plt.show()
    +test_gt(sharpened_probas[n_samples//2:].max(-1).values.sum().item(), probas[n_samples//2:].max(-1).values.sum().item())
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    Sequential

    +
    +
     Sequential (*args)
    +
    +

    Class that allows you to pass one or multiple inputs

    +
    +

    source

    +
    +
    +

    TimeDistributed

    +
    +
     TimeDistributed (module, batch_first=False)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    get_calibrator

    +
    +
     get_calibrator (calibrator=None, n_classes=1, **kwargs)
    +
    +
    +

    source

    +
    +
    +

    Matrix_Scale

    +
    +
     Matrix_Scale (n_classes=1, dirichlet=False)
    +
    +

    Used to perform Matrix Scaling (dirichlet=False) or Dirichlet calibration (dirichlet=True)

    +
    +

    source

    +
    +
    +

    Vector_Scale

    +
    +
     Vector_Scale (n_classes=1, dirichlet=False)
    +
    +

    Used to perform Vector Scaling (dirichlet=False) or Diagonal Dirichlet calibration (dirichlet=True)

    +
    +

    source

    +
    +
    +

    Temp_Scale

    +
    +
     Temp_Scale (temp=1.0, dirichlet=False)
    +
    +

    Used to perform Temperature Scaling (dirichlet=False) or Single-parameter Dirichlet calibration (dirichlet=True)

    +
    +
    bs = 2
    +c_out = 3
    +
    +t = torch.rand(bs, c_out)
    +for calibrator, cal_name in zip(['temp', 'vector', 'matrix'], ['Temp_Scale', 'Vector_Scale', 'Matrix_Scale']): 
    +    cal = get_calibrator(calibrator, n_classes=c_out)
    +#     print(calibrator)
    +#     print(cal.weight, cal.bias, '\n')
    +    test_eq(cal(t), t)
    +    test_eq(cal.__class__.__name__, cal_name)
    +for calibrator, cal_name in zip(['dtemp', 'dvector', 'dmatrix'], ['Temp_Scale', 'Vector_Scale', 'Matrix_Scale']):
    +    cal = get_calibrator(calibrator, n_classes=c_out)
    +#     print(calibrator)
    +#     print(cal.weight, cal.bias, '\n')
    +    test_eq(cal(t), F.log_softmax(t, dim=1))
    +    test_eq(cal.__class__.__name__, cal_name)
    +
    +
    +
    bs = 2
    +c_out = 3
    +
    +t = torch.rand(bs, c_out)
    +
    +test_eq(Temp_Scale()(t).shape, t.shape)
    +test_eq(Vector_Scale(c_out)(t).shape, t.shape)
    +test_eq(Matrix_Scale(c_out)(t).shape, t.shape)
    +test_eq(Temp_Scale(dirichlet=True)(t).shape, t.shape)
    +test_eq(Vector_Scale(c_out, dirichlet=True)(t).shape, t.shape)
    +test_eq(Matrix_Scale(c_out, dirichlet=True)(t).shape, t.shape)
    +
    +test_eq(Temp_Scale()(t), t)
    +test_eq(Vector_Scale(c_out)(t), t)
    +test_eq(Matrix_Scale(c_out)(t), t)
    +
    +
    +
    bs = 2
    +c_out = 5
    +
    +t = torch.rand(bs, c_out)
    +test_eq(Vector_Scale(c_out)(t), t)
    +test_eq(Vector_Scale(c_out).weight.data, torch.ones(c_out))
    +test_eq(Vector_Scale(c_out).weight.requires_grad, True)
    +test_eq(type(Vector_Scale(c_out).weight), torch.nn.parameter.Parameter)
    +
    +
    +
    bs = 2
    +c_out = 3
    +weight = 2
    +bias = 1
    +
    +t = torch.rand(bs, c_out)
    +test_eq(Matrix_Scale(c_out)(t).shape, t.shape)
    +test_eq(Matrix_Scale(c_out).weight.requires_grad, True)
    +test_eq(type(Matrix_Scale(c_out).weight), torch.nn.parameter.Parameter)
    +
    +
    +

    source

    +
    +
    +

    LogitAdjustmentLayer

    +
    +
     LogitAdjustmentLayer (class_priors)
    +
    +

    Logit Adjustment for imbalanced datasets

    +
    +
    bs, n_classes = 16, 3
    +class_priors = torch.rand(n_classes)
    +logits = torch.randn(bs, n_classes) * 2
    +test_eq(LogitAdjLayer(class_priors)(logits), logits + class_priors)
    +
    +
    +

    source

    +
    +
    +

    MaxPPVPool1d

    +
    +
     MaxPPVPool1d ()
    +
    +

    Drop-in replacement for AdaptiveConcatPool1d - multiplies nf by 2

    +
    +

    source

    +
    +
    +

    PPAuc

    +
    +
     PPAuc (dim=-1)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    PPV

    +
    +
     PPV (dim=-1)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 2
    +nf = 5
    +sl = 4
    +
    +t = torch.rand(bs, nf, sl)
    +test_eq(MaxPPVPool1d()(t).shape, (bs, nf*2, 1))
    +test_eq(MaxPPVPool1d()(t).shape, AdaptiveConcatPool1d(1)(t).shape)
    +
    +
    +

    source

    +
    +
    +

    AdaptiveWeightedAvgPool1d

    +
    +
     AdaptiveWeightedAvgPool1d (n_in, seq_len, mult=2, n_layers=2, ln=False,
    +                            dropout=0.5, act=ReLU(), zero_init=True)
    +
    +

    Global Pooling layer that performs a weighted average along the temporal axis

    +

    It can be considered as a channel-wise form of local temporal attention. Inspired by the paper: Hyun, J., Seong, H., & Kim, E. (2019). Universal Pooling–A New Pooling Method for Convolutional Neural Networks. arXiv preprint arXiv:1907.11440.

    +
    +

    source

    +
    +
    +

    GAWP1d

    +
    +
     GAWP1d (n_in, seq_len, n_layers=2, ln=False, dropout=0.5, act=ReLU(),
    +         zero_init=False)
    +
    +

    Global AdaptiveWeightedAvgPool1d + Flatten

    +
    +

    source

    +
    +
    +

    GACP1d

    +
    +
     GACP1d (output_size=1)
    +
    +

    Global AdaptiveConcatPool + Flatten

    +
    +

    source

    +
    +
    +

    GAP1d

    +
    +
     GAP1d (output_size=1)
    +
    +

    Global Adaptive Pooling + Flatten

    +
    +

    source

    +
    +
    +

    gwa_pool_head

    +
    +
     gwa_pool_head (n_in, c_out, seq_len, bn=True, fc_dropout=0.0)
    +
    +
    +

    source

    +
    +
    +

    GlobalWeightedAveragePool1d

    +
    +
     GlobalWeightedAveragePool1d (n_in, seq_len)
    +
    +

    Global Weighted Average Pooling layer

    +

    Inspired by Building Efficient CNN Architecture for Offline Handwritten Chinese Character Recognition https://arxiv.org/pdf/1804.01259.pdf

    +
    +
    t = torch.randn(16, 64, 50)
    +head = gwa_pool_head(64, 5, 50)
    +test_eq(head(t).shape, (16, 5))
    +
    +
    +

    source

    +
    +
    +

    attentional_pool_head

    +
    +
     attentional_pool_head (n_in, c_out, seq_len=None, bn=True, **kwargs)
    +
    +
    +

    source

    +
    +
    +

    GAttP1d

    +
    +
     GAttP1d (n_in, c_out, bn=False)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    AttentionalPool1d

    +
    +
     AttentionalPool1d (n_in, c_out, bn=False)
    +
    +

    Global Adaptive Pooling layer inspired by Attentional Pooling for Action Recognition https://arxiv.org/abs/1711.01467

    +
    +
    bs, c_in, seq_len = 16, 1, 50
    +c_out = 3
    +t = torch.rand(bs, c_in, seq_len)
    +test_eq(GAP1d()(t).shape, (bs, c_in))
    +test_eq(GACP1d()(t).shape, (bs, c_in*2))
    +bs, c_in, seq_len = 16, 4, 50
    +t = torch.rand(bs, c_in, seq_len)
    +test_eq(GAP1d()(t).shape, (bs, c_in))
    +test_eq(GACP1d()(t).shape, (bs, c_in*2))
    +test_eq(GAWP1d(c_in, seq_len, n_layers=2, ln=False, dropout=0.5, act=nn.ReLU(), zero_init=False)(t).shape, (bs, c_in))
    +test_eq(GAWP1d(c_in, seq_len, n_layers=2, ln=False, dropout=0.5, act=nn.ReLU(), zero_init=False)(t).shape, (bs, c_in))
    +test_eq(GAWP1d(c_in, seq_len, n_layers=1, ln=False, dropout=0.5, zero_init=False)(t).shape, (bs, c_in))
    +test_eq(GAWP1d(c_in, seq_len, n_layers=1, ln=False, dropout=0.5, zero_init=True)(t).shape, (bs, c_in))
    +test_eq(AttentionalPool1d(c_in, c_out)(t).shape, (bs, c_out, 1))
    +
    +
    +
    bs, c_in, seq_len = 16, 128, 50
    +c_out = 14
    +t = torch.rand(bs, c_in, seq_len)
    +attp = attentional_pool_head(c_in, c_out)
    +test_eq(attp(t).shape, (bs, c_out))
    +
    +
    +

    source

    +
    +
    +

    PoolingLayer

    +
    +
     PoolingLayer (method='cls', seq_len=None, token=True, seq_last=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    t = torch.arange(24).reshape(2, 3, 4).float()
    +test_eq(PoolingLayer('cls', token=True, seq_last=True)(t), tensor([[ 0.,  4.,  8.], [12., 16., 20.]]))
    +test_eq(PoolingLayer('max', token=True, seq_last=True)(t), tensor([[ 3.,  7., 11.], [15., 19., 23.]]))
    +test_close(PoolingLayer('mean', token=True, seq_last=True)(t), tensor([[ 2.,  6., 10.], [14., 18., 22.]]))
    +test_close(PoolingLayer('max-mean', token=True, seq_last=True)(t), tensor([[ 3.,  7., 11.,  2.,  6., 10.],
    +                                                                           [15., 19., 23., 14., 18., 22.]]))
    +test_close(PoolingLayer('flatten', token=True, seq_last=True)(t), tensor([[ 1.,  2.,  3.,  5.,  6.,  7.,  9., 10., 11.],
    +                                                                          [13., 14., 15., 17., 18., 19., 21., 22., 23.]]))
    +test_eq(PoolingLayer('linear', seq_len=4, token=True, seq_last=True)(t).shape, (2, 3))
    +test_eq(PoolingLayer('max', token=False, seq_last=True)(t), tensor([[ 3.,  7., 11.], [15., 19., 23.]]))
    +test_close(PoolingLayer('mean', token=False, seq_last=True)(t), tensor([[ 1.5000,  5.5000,  9.5000],
    +                                                                        [13.5000, 17.5000, 21.5000]]))
    +test_close(PoolingLayer('max-mean', token=False, seq_last=True)(t), tensor([[ 3.,  7., 11.,  1.5000,  5.5000,  9.5000],
    +                                                                            [15., 19., 23., 13.5000, 17.5000, 21.5000]]))
    +test_close(PoolingLayer('flatten', token=False, seq_last=True)(t), tensor([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10., 11.],
    +                                                                           [12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23.]]))
    +test_eq(PoolingLayer('linear', seq_len=4, token=False, seq_last=True)(t).shape, (2, 3))
    +
    +
    +
    t = torch.arange(24).reshape(2, 3, 4).swapaxes(1,2).float()
    +test_eq(PoolingLayer('cls', token=True, seq_last=False)(t), tensor([[ 0.,  4.,  8.], [12., 16., 20.]]))
    +test_eq(PoolingLayer('max', token=True, seq_last=False)(t), tensor([[ 3.,  7., 11.], [15., 19., 23.]]))
    +test_close(PoolingLayer('mean', token=True, seq_last=False)(t), tensor([[ 2.,  6., 10.], [14., 18., 22.]]))
    +test_close(PoolingLayer('max-mean', token=True, seq_last=False)(t), tensor([[ 3.,  7., 11.,  2.,  6., 10.],
    +                                                                           [15., 19., 23., 14., 18., 22.]]))
    +test_close(PoolingLayer('flatten', token=True, seq_last=False)(t), tensor([[ 1.,  5.,  9.,  2.,  6., 10.,  3.,  7., 11.],
    +                                                                           [13., 17., 21., 14., 18., 22., 15., 19., 23.]]))
    +t = torch.arange(24).reshape(2, 3, 4).swapaxes(1,2).float()
    +test_eq(PoolingLayer('conv1d', seq_len=4, token=False, seq_last=False)(t).shape, (2, 3))
    +test_eq(PoolingLayer('max', token=False, seq_last=False)(t), tensor([[ 3.,  7., 11.], [15., 19., 23.]]))
    +test_close(PoolingLayer('mean', token=False, seq_last=False)(t), tensor([[ 1.5000,  5.5000,  9.5000],
    +                                                                        [13.5000, 17.5000, 21.5000]]))
    +test_close(PoolingLayer('max-mean', token=False, seq_last=False)(t), tensor([[ 3.,  7., 11.,  1.5000,  5.5000,  9.5000],
    +                                                                            [15., 19., 23., 13.5000, 17.5000, 21.5000]]))
    +test_close(PoolingLayer('flatten', token=False, seq_last=False)(t), tensor([[ 0.,  4.,  8.,  1.,  5.,  9.,  2.,  6., 10.,  3.,  7., 11.],
    +                                                                            [12., 16., 20., 13., 17., 21., 14., 18., 22., 15., 19., 23.]]))
    +test_eq(PoolingLayer('conv1d', seq_len=4, token=False, seq_last=False)(t).shape, (2, 3))
    +
    +
    +

    source

    +
    +
    +

    ReGLU

    +
    +
     ReGLU ()
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    GEGLU

    +
    +
     GEGLU ()
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    get_act_fn

    +
    +
     get_act_fn (act, **act_kwargs)
    +
    +
    +
    test_eq(get_act_fn(nn.ReLU).__repr__(), "ReLU()")
    +test_eq(get_act_fn(nn.ReLU()).__repr__(), "ReLU()")
    +test_eq(get_act_fn(nn.LeakyReLU, negative_slope=0.05).__repr__(), "LeakyReLU(negative_slope=0.05)")
    +test_eq(get_act_fn('reglu').__repr__(), "ReGLU()")
    +test_eq(get_act_fn('leakyrelu', negative_slope=0.05).__repr__(), "LeakyReLU(negative_slope=0.05)")
    +
    +
    +

    source

    +
    +
    +

    RevIN

    +
    +
     RevIN (c_in:int, affine:bool=True, subtract_last:bool=False, dim:int=2,
    +        eps:float=1e-05)
    +
    +

    Reversible Instance Normalization layer adapted from

    +

    Kim, T., Kim, J., Tae, Y., Park, C., Choi, J. H., & Choo, J. (2021, September). Reversible instance normalization for accurate time-series forecasting against distribution shift. In International Conference on Learning Representations. Original code: https://github.com/ts-kim/RevIN

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inint#features (aka variables or channels)
    affineboolTrueflag to incidate if RevIN has learnable weight and bias
    subtract_lastboolFalse
    dimint2int or tuple of dimensions used to calculate mean and std
    epsfloat1e-05epsilon - parameter added for numerical stability
    +
    +

    source

    +
    +
    +

    RevIN

    +
    +
     RevIN (c_in:int, affine:bool=True, subtract_last:bool=False, dim:int=2,
    +        eps:float=1e-05)
    +
    +

    Reversible Instance Normalization layer adapted from

    +

    Kim, T., Kim, J., Tae, Y., Park, C., Choi, J. H., & Choo, J. (2021, September). Reversible instance normalization for accurate time-series forecasting against distribution shift. In International Conference on Learning Representations. Original code: https://github.com/ts-kim/RevIN

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inint#features (aka variables or channels)
    affineboolTrueflag to incidate if RevIN has learnable weight and bias
    subtract_lastboolFalse
    dimint2int or tuple of dimensions used to calculate mean and std
    epsfloat1e-05epsilon - parameter added for numerical stability
    +
    +
    t = ((torch.rand(16, 5, 100) - .25) * torch.Tensor([.01, .1, 1, 10, 100]).reshape(1, -1, 1)).cumsum(-1)
    +t_clone = t.clone()
    +l = RevIN(5)
    +t_norm = l(t, torch.tensor(True))
    +t_denorm = l(t_norm, torch.tensor(False))
    +test_close(t_clone, t_denorm, eps=1e-3)
    +
    +
    +
    model = RevIN(5, affine=True)
    +try:
    +    scripted_model = torch.jit.script(model)
    +    file_path = f"test_scripted_model.pt"
    +    torch.jit.save(scripted_model, file_path)
    +    scripted_model = torch.jit.load(file_path)
    +
    +    inp = ((torch.rand(16, 5, 100) - .25) * torch.Tensor([.01, .1, 1, 10, 100]).reshape(1, -1, 1)).cumsum(-1)
    +    normed_output = model(inp, torch.tensor(True))
    +    demormed_output = model(normed_output, torch.tensor(False))
    +    scripted_normed_output = scripted_model(inp, torch.tensor(True))
    +    scripted_denormed_output = scripted_model(scripted_normed_output, torch.tensor(False))
    +    test_close(normed_output, scripted_normed_output)
    +    test_close(demormed_output, scripted_denormed_output)
    +    os.remove(file_path)
    +    del scripted_model
    +    gc.collect()
    +    print('scripting ok')
    +except Exception as e:
    +    print(f'scripting failed: {e}')
    +
    +
    scripting ok
    +
    +
    +
    +

    source

    +
    +
    +

    create_pool_head

    +
    +
     create_pool_head (n_in, c_out, seq_len=None, concat_pool=False,
    +                   fc_dropout=0.0, bn=False, y_range=None, **kwargs)
    +
    +
    +
    bs = 16
    +nf = 12
    +c_out = 2
    +seq_len = 20
    +t = torch.rand(bs, nf, seq_len)
    +test_eq(create_pool_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))
    +test_eq(create_pool_head(nf, c_out, seq_len, concat_pool=True, fc_dropout=0.5)(t).shape, (bs, c_out))
    +create_pool_head(nf, c_out, seq_len, concat_pool=True, bn=True, fc_dropout=.5)
    +
    +
    Sequential(
    +  (0): GACP1d(
    +    (gacp): AdaptiveConcatPool1d(
    +      (ap): AdaptiveAvgPool1d(output_size=1)
    +      (mp): AdaptiveMaxPool1d(output_size=1)
    +    )
    +    (flatten): Reshape(bs)
    +  )
    +  (1): LinBnDrop(
    +    (0): BatchNorm1d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (1): Dropout(p=0.5, inplace=False)
    +    (2): Linear(in_features=24, out_features=2, bias=False)
    +  )
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    max_pool_head

    +
    +
     max_pool_head (n_in, c_out, seq_len, fc_dropout=0.0, bn=False,
    +                y_range=None, **kwargs)
    +
    +
    +
    bs = 16
    +nf = 12
    +c_out = 2
    +seq_len = 20
    +t = torch.rand(bs, nf, seq_len)
    +test_eq(max_pool_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))
    +
    +
    +

    source

    +
    +
    +

    create_pool_plus_head

    +
    +
     create_pool_plus_head (*args, lin_ftrs=None, fc_dropout=0.0,
    +                        concat_pool=True, bn_final=False, lin_first=False,
    +                        y_range=None)
    +
    +
    +
    bs = 16
    +nf = 12
    +c_out = 2
    +seq_len = 20
    +t = torch.rand(bs, nf, seq_len)
    +test_eq(create_pool_plus_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))
    +test_eq(create_pool_plus_head(nf, c_out, concat_pool=True, fc_dropout=0.5)(t).shape, (bs, c_out))
    +create_pool_plus_head(nf, c_out, seq_len, fc_dropout=0.5)
    +
    +
    Sequential(
    +  (0): AdaptiveConcatPool1d(
    +    (ap): AdaptiveAvgPool1d(output_size=1)
    +    (mp): AdaptiveMaxPool1d(output_size=1)
    +  )
    +  (1): Reshape(bs)
    +  (2): BatchNorm1d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +  (3): Dropout(p=0.25, inplace=False)
    +  (4): Linear(in_features=24, out_features=512, bias=False)
    +  (5): ReLU(inplace=True)
    +  (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +  (7): Dropout(p=0.5, inplace=False)
    +  (8): Linear(in_features=512, out_features=2, bias=False)
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    create_conv_head

    +
    +
     create_conv_head (*args, adaptive_size=None, y_range=None)
    +
    +
    +
    bs = 16
    +nf = 12
    +c_out = 2
    +seq_len = 20
    +t = torch.rand(bs, nf, seq_len)
    +test_eq(create_conv_head(nf, c_out, seq_len)(t).shape, (bs, c_out))
    +test_eq(create_conv_head(nf, c_out, adaptive_size=50)(t).shape, (bs, c_out))
    +create_conv_head(nf, c_out, 50)
    +
    +
    Sequential(
    +  (0): ConvBlock(
    +    (0): Conv1d(12, 6, kernel_size=(1,), stride=(1,), bias=False)
    +    (1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (1): ConvBlock(
    +    (0): Conv1d(6, 3, kernel_size=(1,), stride=(1,), bias=False)
    +    (1): BatchNorm1d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (2): ConvBlock(
    +    (0): Conv1d(3, 2, kernel_size=(1,), stride=(1,), bias=False)
    +    (1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (3): GAP1d(
    +    (gap): AdaptiveAvgPool1d(output_size=1)
    +    (flatten): Reshape(bs)
    +  )
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    create_mlp_head

    +
    +
     create_mlp_head (nf, c_out, seq_len=None, flatten=True, fc_dropout=0.0,
    +                  bn=False, lin_first=False, y_range=None)
    +
    +
    +
    bs = 16
    +nf = 12
    +c_out = 2
    +seq_len = 20
    +t = torch.rand(bs, nf, seq_len)
    +test_eq(create_mlp_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))
    +t = torch.rand(bs, nf, seq_len)
    +create_mlp_head(nf, c_out, seq_len, bn=True, fc_dropout=.5)
    +
    +
    Sequential(
    +  (0): Reshape(bs)
    +  (1): LinBnDrop(
    +    (0): BatchNorm1d(240, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (1): Dropout(p=0.5, inplace=False)
    +    (2): Linear(in_features=240, out_features=2, bias=False)
    +  )
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    create_fc_head

    +
    +
     create_fc_head (nf, c_out, seq_len=None, flatten=True, lin_ftrs=None,
    +                 y_range=None, fc_dropout=0.0, bn=False, bn_final=False,
    +                 act=ReLU(inplace=True))
    +
    +
    +
    bs = 16
    +nf = 12
    +c_out = 2
    +seq_len = 20
    +t = torch.rand(bs, nf, seq_len)
    +test_eq(create_fc_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))
    +create_mlp_head(nf, c_out, seq_len, bn=True, fc_dropout=.5)
    +
    +
    Sequential(
    +  (0): Reshape(bs)
    +  (1): LinBnDrop(
    +    (0): BatchNorm1d(240, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (1): Dropout(p=0.5, inplace=False)
    +    (2): Linear(in_features=240, out_features=2, bias=False)
    +  )
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    create_rnn_head

    +
    +
     create_rnn_head (*args, fc_dropout=0.0, bn=False, y_range=None)
    +
    +
    +
    bs = 16
    +nf = 12
    +c_out = 2
    +seq_len = 20
    +t = torch.rand(bs, nf, seq_len)
    +test_eq(create_rnn_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))
    +create_rnn_head(nf, c_out, seq_len, bn=True, fc_dropout=.5)
    +
    +
    Sequential(
    +  (0): LastStep()
    +  (1): LinBnDrop(
    +    (0): BatchNorm1d(12, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (1): Dropout(p=0.5, inplace=False)
    +    (2): Linear(in_features=12, out_features=2, bias=False)
    +  )
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    imputation_head

    +
    +
     imputation_head (c_in, c_out, seq_len=None, ks=1, y_range=None,
    +                  fc_dropout=0.0)
    +
    +
    +
    bs = 16
    +nf = 12
    +ni = 2
    +seq_len = 20
    +t = torch.rand(bs, nf, seq_len)
    +head = imputation_head(nf, ni, seq_len=None, ks=1, y_range=None, fc_dropout=0.)
    +test_eq(head(t).shape, (bs, ni, seq_len))
    +head = imputation_head(nf, ni, seq_len=None, ks=1, y_range=(.3,.7), fc_dropout=0.)
    +test_ge(head(t).min(), .3)
    +test_le(head(t).max(), .7)
    +y_range = (tensor([0.1000, 0.1000, 0.1000, 0.1000, 0.2000, 0.2000, 0.2000, 0.2000, 0.3000,
    +                   0.3000, 0.3000, 0.3000]),
    +           tensor([0.6000, 0.6000, 0.6000, 0.6000, 0.7000, 0.7000, 0.7000, 0.7000, 0.8000,
    +                   0.8000, 0.8000, 0.8000]))
    +test_ge(head(t).min(), .1)
    +test_le(head(t).max(), .9)
    +head = imputation_head(nf, ni, seq_len=None, ks=1, y_range=y_range, fc_dropout=0.)
    +head
    +
    +
    Sequential(
    +  (0): Dropout(p=0.0, inplace=False)
    +  (1): Conv1d(12, 2, kernel_size=(1,), stride=(1,))
    +  (2): fastai.layers.SigmoidRange(low=tensor([0.1000, 0.1000, 0.1000, 0.1000, 0.2000, 0.2000, 0.2000, 0.2000, 0.3000,
    +          0.3000, 0.3000, 0.3000]), high=tensor([0.6000, 0.6000, 0.6000, 0.6000, 0.7000, 0.7000, 0.7000, 0.7000, 0.8000,
    +          0.8000, 0.8000, 0.8000]))
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    create_conv_lin_nd_head

    +
    +
     create_conv_lin_nd_head (n_in, n_out, seq_len, d, conv_first=True,
    +                          conv_bn=False, lin_bn=False, fc_dropout=0.0,
    +                          **kwargs)
    +
    +

    Module to create a nd output head

    +
    +
    bs = 16
    +nf = 32
    +c = 5
    +seq_len = 10
    +d = 2
    +targ = torch.randint(0, c, (bs,d))
    +t = torch.randn(bs, nf, seq_len)
    +head = conv_lin_nd_head(nf, c, seq_len, d, conv_first=True, fc_dropout=.5)
    +inp = head(t)
    +test_eq(inp.shape, (bs, d, c))
    +loss = CrossEntropyLossFlat()(inp, targ)
    +loss, head
    +
    +
    (TensorBase(1.7074, grad_fn=<AliasBackward0>),
    + create_conv_lin_nd_head(
    +   (0): Conv1d(32, 5, kernel_size=(1,), stride=(1,))
    +   (1): Dropout(p=0.5, inplace=False)
    +   (2): Linear(in_features=10, out_features=2, bias=True)
    +   (3): Transpose(-1, -2)
    +   (4): Reshape(bs, 2, 5)
    + ))
    +
    +
    +
    +
    bs = 16
    +nf = 32
    +c = 5
    +seq_len = 10
    +d = [2, 8]
    +targ = torch.randint(0, c, [bs]+d)
    +t = torch.randn(bs, nf, seq_len)
    +head = conv_lin_nd_head(nf, c, seq_len, d, conv_first=False, fc_dropout=.5)
    +inp = head(t)
    +test_eq(inp.shape, [bs]+d+[c])
    +loss = CrossEntropyLossFlat()(inp, targ)
    +loss, head
    +
    +
    (TensorBase(1.6561, grad_fn=<AliasBackward0>),
    + create_conv_lin_nd_head(
    +   (0): Dropout(p=0.5, inplace=False)
    +   (1): Linear(in_features=10, out_features=16, bias=True)
    +   (2): Conv1d(32, 5, kernel_size=(1,), stride=(1,))
    +   (3): Transpose(-1, -2)
    +   (4): Reshape(bs, 2, 8, 5)
    + ))
    +
    +
    +
    +
    bs = 16
    +nf = 32
    +c = 1
    +seq_len = 10
    +d = 2
    +targ = torch.rand(bs, d)
    +t = torch.randn(bs, nf, seq_len)
    +head = conv_lin_nd_head(nf, c, seq_len, d, conv_first=False, fc_dropout=.5)
    +inp = head(t)
    +test_eq(inp.shape, (bs, d))
    +loss = L1LossFlat()(inp, targ)
    +loss, head
    +
    +
    (TensorBase(0.6017, grad_fn=<AliasBackward0>),
    + create_conv_lin_nd_head(
    +   (0): Dropout(p=0.5, inplace=False)
    +   (1): Linear(in_features=10, out_features=2, bias=True)
    +   (2): Conv1d(32, 1, kernel_size=(1,), stride=(1,))
    +   (3): Transpose(-1, -2)
    +   (4): Reshape(bs, 2)
    + ))
    +
    +
    +
    +
    bs = 16
    +nf = 32
    +c = 1
    +seq_len = 10
    +d = [2,3]
    +targ = torch.rand(bs, *d)
    +t = torch.randn(bs, nf, seq_len)
    +head = conv_lin_nd_head(nf, c, seq_len, d, conv_first=False, fc_dropout=.5)
    +inp = head(t)
    +test_eq(inp.shape, [bs]+d)
    +loss = L1LossFlat()(inp, targ)
    +loss, head
    +
    +
    (TensorBase(0.5439, grad_fn=<AliasBackward0>),
    + create_conv_lin_nd_head(
    +   (0): Dropout(p=0.5, inplace=False)
    +   (1): Linear(in_features=10, out_features=6, bias=True)
    +   (2): Conv1d(32, 1, kernel_size=(1,), stride=(1,))
    +   (3): Transpose(-1, -2)
    +   (4): Reshape(bs, 2, 3)
    + ))
    +
    +
    +
    +

    source

    +
    +
    +

    lin_nd_head

    +
    +
     lin_nd_head (n_in, n_out, seq_len=None, d=None, flatten=False,
    +              use_bn=False, fc_dropout=0.0)
    +
    +

    Module to create a nd output head with linear layers

    +
    +
    bs = 16
    +nf = 32
    +seq_len = 50
    +x = torch.normal(0, 1, (bs, nf, seq_len))
    +
    +for use_bn in [False, True]:
    +    for fc_dropout in [0, 0.2]:
    +        for flatten in [False, True]:
    +            for c in [1, 3]:
    +                for d in [None, (50,), (50,10), (30,5), (50,2,3), (30,2,3)]:
    +                    for q_len in [1, seq_len]:
    +                        head = lin_nd_head(nf, c, q_len, d, flatten=flatten, use_bn=use_bn, fc_dropout=fc_dropout)
    +                        test_eq(head(x).shape, (bs, ) + (d if d is not None else ()) + ((c,) if c != 1 else ()))
    +
    +
    +
    bs = 16
    +nf = 32
    +c = 5
    +seq_len = 10
    +d = 2
    +targ = torch.randint(0, c, (bs,d))
    +t = torch.randn(bs, nf, seq_len)
    +head = lin_nd_head(nf, c, seq_len, d, fc_dropout=.5)
    +inp = head(t)
    +test_eq(inp.shape, (bs, d, c))
    +loss = CrossEntropyLossFlat()(inp, targ)
    +loss, head
    +
    +
    (TensorBase(1.8360, grad_fn=<AliasBackward0>),
    + lin_nd_head(
    +   (0): Dropout(p=0.5, inplace=False)
    +   (1): Reshape(bs)
    +   (2): Linear(in_features=320, out_features=10, bias=True)
    +   (3): Reshape(bs, 2, 5)
    + ))
    +
    +
    +
    +
    bs = 16
    +nf = 32
    +c = 5
    +seq_len = 10
    +d = [2, 8]
    +targ = torch.randint(0, c, [bs]+d)
    +t = torch.randn(bs, nf, seq_len)
    +head = lin_nd_head(nf, c, seq_len, d, fc_dropout=.5)
    +inp = head(t)
    +test_eq(inp.shape, [bs]+d+[c])
    +loss = CrossEntropyLossFlat()(inp, targ)
    +loss, head
    +
    +
    (TensorBase(1.7557, grad_fn=<AliasBackward0>),
    + lin_nd_head(
    +   (0): Dropout(p=0.5, inplace=False)
    +   (1): Reshape(bs)
    +   (2): Linear(in_features=320, out_features=80, bias=True)
    +   (3): Reshape(bs, 2, 8, 5)
    + ))
    +
    +
    +
    +
    bs = 16
    +nf = 32
    +c = 1
    +seq_len = 10
    +d = 2
    +targ = torch.rand(bs, d)
    +t = torch.randn(bs, nf, seq_len)
    +head = lin_nd_head(nf, c, seq_len, d, fc_dropout=.5)
    +inp = head(t)
    +test_eq(inp.shape, (bs, d))
    +loss = L1LossFlat()(inp, targ)
    +loss, head
    +
    +
    (TensorBase(0.5978, grad_fn=<AliasBackward0>),
    + lin_nd_head(
    +   (0): Dropout(p=0.5, inplace=False)
    +   (1): Reshape(bs)
    +   (2): Linear(in_features=320, out_features=2, bias=True)
    +   (3): Reshape(bs, 2)
    + ))
    +
    +
    +
    +
    bs = 16
    +nf = 32
    +c = 1
    +seq_len = 10
    +d = [2,3]
    +targ = torch.rand(bs, *d)
    +t = torch.randn(bs, nf, seq_len)
    +head = lin_nd_head(nf, c, seq_len, d, fc_dropout=.5)
    +inp = head(t)
    +test_eq(inp.shape, [bs]+d)
    +loss = L1LossFlat()(inp, targ)
    +loss, head
    +
    +
    (TensorBase(0.8286, grad_fn=<AliasBackward0>),
    + lin_nd_head(
    +   (0): Dropout(p=0.5, inplace=False)
    +   (1): Reshape(bs)
    +   (2): Linear(in_features=320, out_features=6, bias=True)
    +   (3): Reshape(bs, 2, 3)
    + ))
    +
    +
    +
    +

    source

    +
    +
    +

    rocket_nd_head

    +
    +
     rocket_nd_head (n_in, n_out, seq_len=None, d=None, use_bn=False,
    +                 fc_dropout=0.0, zero_init=True)
    +
    +

    Module to create a nd output head with linear layers for the rocket family of models

    +
    +
    bs = 16
    +nf = 99
    +seq_len = 1
    +x = torch.normal(0, 1, (bs, nf, seq_len))
    +
    +for use_bn in [False, True]:
    +    for fc_dropout in [0, 0.2]:
    +        for c in [1, 3]:
    +            for d in [None, (50,), (50,10), (30,5), (50,2,3), (30,2,3)]:
    +                head = rocket_nd_head(nf, c, 1, d, use_bn=use_bn, fc_dropout=fc_dropout)
    +                test_eq(head(x).shape, (bs, ) + (d if d is not None else ()) + ((c,) if c != 1 else ()))
    +
    +
    +

    source

    +
    +
    +

    xresnet1d_nd_head

    +
    +
     xresnet1d_nd_head (n_in, n_out, seq_len=None, d=None, use_bn=False,
    +                    fc_dropout=0.0, zero_init=True)
    +
    +

    Module to create a nd output head with linear layers for the xresnet family of models

    +
    +
    bs = 16
    +nf = 99
    +seq_len = 2
    +x = torch.normal(0, 1, (bs, nf, seq_len))
    +
    +for use_bn in [False, True]:
    +    for fc_dropout in [0, 0.2]:
    +        for c in [1, 3]:
    +            for d in [None, (50,), (50,10), (30,5), (50,2,3), (30,2,3)]:
    +                head = xresnet1d_nd_head(nf, c, 1, d, use_bn=use_bn, fc_dropout=fc_dropout)
    +                test_eq(head(x).shape, (bs, ) + (d if d is not None else ()) + ((c,) if c != 1 else ()))
    +
    +
    +

    source

    +
    +
    +

    create_conv_3d_head

    +
    +
     create_conv_3d_head (n_in, n_out, seq_len, d, use_bn=False, **kwargs)
    +
    +

    Module to create a nd output head with a convolutional layer

    +
    +
    bs = 16
    +nf = 32
    +c = 5
    +seq_len = 10
    +d = 10
    +targ = torch.randint(0, c, (bs,d))
    +t = torch.randn(bs, nf, seq_len)
    +head = conv_3d_head(nf, c, seq_len, d)
    +inp = head(t)
    +test_eq(inp.shape, (bs, d, c))
    +loss = CrossEntropyLossFlat()(inp, targ)
    +loss, head
    +
    +
    (TensorBase(1.7321, grad_fn=<AliasBackward0>),
    + create_conv_3d_head(
    +   (0): ConvBlock(
    +     (0): Conv1d(32, 5, kernel_size=(1,), stride=(1,))
    +   )
    +   (1): Transpose(-1, -2)
    + ))
    +
    +
    +
    +
    bs = 16
    +nf = 32
    +c = 1
    +seq_len = 10
    +d = 10
    +targ = torch.rand(bs, d)
    +t = torch.randn(bs, nf, seq_len)
    +head = conv_3d_head(nf, c, seq_len, d)
    +inp = head(t)
    +test_eq(inp.shape, (bs, d))
    +loss = L1LossFlat()(inp, targ)
    +loss, head
    +
    +
    (TensorBase(0.5833, grad_fn=<AliasBackward0>),
    + create_conv_3d_head(
    +   (0): ConvBlock(
    +     (0): Conv1d(32, 1, kernel_size=(1,), stride=(1,))
    +   )
    +   (1): Transpose(-1, -2)
    +   (2): Squeeze(dim=-1)
    + ))
    +
    +
    +
    +

    source

    +
    +
    +

    universal_pool_head

    +
    +
     universal_pool_head (n_in, c_out, seq_len, mult=2, pool_n_layers=2,
    +                      pool_ln=True, pool_dropout=0.5, pool_act=ReLU(),
    +                      zero_init=True, bn=True, fc_dropout=0.0)
    +
    +
    +
    bs, c_in, seq_len = 16, 128, 50
    +c_out = 14
    +t = torch.rand(bs, c_in, seq_len)
    +uph = universal_pool_head(c_in, c_out, seq_len)
    +test_eq(uph(t).shape, (bs, c_out))
    +uph = universal_pool_head(c_in, c_out, seq_len, 2)
    +test_eq(uph(t).shape, (bs, c_out))
    +
    +
    +
    bs, c_in, seq_len = 16, 128, 50
    +c_out = 14
    +d = 5
    +t = torch.rand(bs, c_in, seq_len)
    +for head in heads: 
    +    print(head.__name__)
    +    if head.__name__ == "create_conv_3d_head":
    +        h = head(c_in, c_out, seq_len, seq_len)
    +        test_eq(h(t).shape, (bs, seq_len, c_out))
    +    elif 'nd' in head.__name__: 
    +        h = head(c_in, c_out, seq_len, d)
    +        test_eq(h(t).shape, (bs, d, c_out))
    +    else: 
    +        h = head(c_in, c_out, seq_len)
    +        test_eq(h(t).shape, (bs, c_out))
    +
    +
    create_mlp_head
    +create_fc_head
    +average_pool_head
    +max_pool_head
    +concat_pool_head
    +create_pool_plus_head
    +create_conv_head
    +create_rnn_head
    +create_conv_lin_nd_head
    +lin_nd_head
    +create_conv_3d_head
    +attentional_pool_head
    +universal_pool_head
    +gwa_pool_head
    +
    +
    +
    +

    source

    +
    +
    +

    SqueezeExciteBlock

    +
    +
     SqueezeExciteBlock (ni, reduction=16)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 2
    +ni = 32
    +sl = 4
    +t = torch.rand(bs, ni, sl)
    +test_eq(SqueezeExciteBlock(ni)(t).shape, (bs, ni, sl))
    +
    +
    +

    source

    +
    +
    +

    GaussianNoise

    +
    +
     GaussianNoise (sigma=0.1, is_relative_detach=True)
    +
    +

    Gaussian noise regularizer.

    +

    Args: sigma (float, optional): relative standard deviation used to generate the noise. Relative means that it will be multiplied by the magnitude of the value your are adding the noise to. This means that sigma can be the same regardless of the scale of the vector. is_relative_detach (bool, optional): whether to detach the variable before computing the scale of the noise. If False then the scale of the noise won’t be seen as a constant but something to optimize: this will bias the network to generate vectors with smaller values.

    +
    +
    t = torch.ones(2,3,4)
    +test_ne(GaussianNoise()(t), t)
    +test_eq(GaussianNoise()(t).shape, t.shape)
    +t = torch.ones(2,3)
    +test_ne(GaussianNoise()(t), t)
    +test_eq(GaussianNoise()(t).shape, t.shape)
    +t = torch.ones(2)
    +test_ne(GaussianNoise()(t), t)
    +test_eq(GaussianNoise()(t).shape, t.shape)
    +
    +
    +

    source

    +
    +
    +

    TokenLayer

    +
    +
     TokenLayer (token=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    PositionwiseFeedForward

    +
    +
     PositionwiseFeedForward (dim, dropout=0.0, act='reglu', mlp_ratio=1)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    t = torch.randn(2,3,10)
    +m = PositionwiseFeedForward(10, dropout=0., act='reglu', mlp_ratio=1)
    +test_eq(m(t).shape, t.shape)
    +m = PositionwiseFeedForward(10, dropout=0., act='smelu', mlp_ratio=1)
    +test_eq(m(t).shape, t.shape)
    +
    +
    +

    source

    +
    +
    +

    ScaledDotProductAttention

    +
    +
     ScaledDotProductAttention (d_model, n_heads, attn_dropout=0.0,
    +                            res_attention=False, lsa=False)
    +
    +

    Scaled Dot-Product Attention module (Attention is all you need by Vaswani et al., 2017) with optional residual attention from previous layer (Realformer: Transformer likes residual attention by He et al, 2020) and locality self sttention (Vision Transformer for Small-Size Datasets by Lee et al, 2021)

    +
    +
    B = 16
    +C = 10
    +M = 1500 # seq_len
    +
    +n_heads = 1
    +D = 128 # model dimension
    +N = 512 # max_seq_len - latent's index dimension
    +d_k = D // n_heads
    +
    +xb = torch.randn(B, C, M)
    +xb = (xb - xb.mean()) / xb.std()
    +
    +# Attention
    +# input (Q)
    +lin = nn.Linear(M, N, bias=False)
    +Q = lin(xb).transpose(1,2)
    +test_eq(Q.shape, (B, N, C))
    +
    +# q
    +to_q = nn.Linear(C, D, bias=False)
    +q = to_q(Q)
    +q = nn.LayerNorm(D)(q)
    +
    +# k, v
    +context = xb.transpose(1,2)
    +to_kv = nn.Linear(C, D * 2, bias=False)
    +k, v = to_kv(context).chunk(2, dim = -1)
    +k = k.transpose(-1, -2)
    +k = nn.LayerNorm(M)(k)
    +v = nn.LayerNorm(D)(v)
    +
    +test_eq(q.shape, (B, N, D))
    +test_eq(k.shape, (B, D, M))
    +test_eq(v.shape, (B, M, D))
    +
    +output, attn, scores = ScaledDotProductAttention(D, n_heads, res_attention=True)(q.unsqueeze(1), k.unsqueeze(1), v.unsqueeze(1))
    +test_eq(output.shape, (B, 1, N, D))
    +test_eq(attn.shape, (B, 1, N, M))
    +test_eq(scores.shape, (B, 1, N, M))
    +scores.mean(), scores.std()
    +
    +
    (tensor(1.3535e-10, grad_fn=<MeanBackward0>),
    + tensor(1.0555, grad_fn=<StdBackward0>))
    +
    +
    +
    +

    source

    +
    +
    +

    MultiheadAttention

    +
    +
     MultiheadAttention (d_model, n_heads, d_k=None, d_v=None,
    +                     res_attention=False, attn_dropout=0.0,
    +                     proj_dropout=0.0, qkv_bias=True, lsa=False)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    q = torch.rand([16, 3, 50, 8]) 
    +k = torch.rand([16, 3, 50, 8]).transpose(-1, -2)
    +v = torch.rand([16, 3, 50, 6])
    +attn_mask = torch.triu(torch.ones(50, 50)) # shape: q_len x q_len
    +key_padding_mask = torch.zeros(16, 50)
    +key_padding_mask[[1, 3, 6, 15], -10:] = 1
    +key_padding_mask = key_padding_mask.bool()
    +print('attn_mask', attn_mask.shape, 'key_padding_mask', key_padding_mask.shape)
    +output, attn = ScaledDotProductAttention(24, 3, attn_dropout=.1)(q, k, v, attn_mask=attn_mask, key_padding_mask=key_padding_mask)
    +output.shape, attn.shape
    +
    +
    attn_mask torch.Size([50, 50]) key_padding_mask torch.Size([16, 50])
    +
    +
    +
    (torch.Size([16, 3, 50, 6]), torch.Size([16, 3, 50, 50]))
    +
    +
    +
    +
    t = torch.rand(16, 50, 128)
    +output, attn = MultiheadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)(t, t, t, key_padding_mask=key_padding_mask, attn_mask=attn_mask)
    +output.shape, attn.shape
    +
    +
    (torch.Size([16, 50, 128]), torch.Size([16, 3, 50, 50]))
    +
    +
    +

    Test multi-head attention with self-locality attention

    +
    +
    # lsa (locality self-sttention)
    +t = torch.rand(16, 50, 128)
    +attn_mask = torch.eye(50).reshape(1, 1, 50, 50).bool()
    +output, attn = MultiheadAttention(d_model=128, n_heads=8, lsa=True)(t, t, t, key_padding_mask=key_padding_mask, attn_mask=attn_mask)
    +output.shape, attn.shape
    +
    +
    (torch.Size([16, 50, 128]), torch.Size([16, 8, 50, 50]))
    +
    +
    +
    +
    t = torch.rand(16, 50, 128)
    +att_mask = (torch.rand((50, 50)) > .85).float()
    +att_mask[att_mask == 1] = -np.inf
    +
    +mha = MultiheadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)
    +output, attn = mha(t, t, t, attn_mask=att_mask)
    +test_eq(torch.isnan(output).sum().item(), 0)
    +test_eq(torch.isnan(attn).sum().item(), 0)
    +loss = output[:2, :].sum()
    +test_eq(torch.isnan(loss).sum().item(), 0)
    +loss.backward()
    +for n, p in mha.named_parameters(): 
    +    if p.grad is not None:
    +        test_eq(torch.isnan(p.grad).sum().item(), 0)
    +
    +
    +
    t = torch.rand(16, 50, 128)
    +attn_mask = (torch.rand((50, 50)) > .85)
    +
    +# True values will be masked
    +mha = MultiheadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)
    +output, attn = mha(t, t, t, attn_mask=att_mask)
    +test_eq(torch.isnan(output).sum().item(), 0)
    +test_eq(torch.isnan(attn).sum().item(), 0)
    +loss = output[:2, :].sum()
    +test_eq(torch.isnan(loss).sum().item(), 0)
    +loss.backward()
    +for n, p in mha.named_parameters(): 
    +    if p.grad is not None:
    +        test_eq(torch.isnan(p.grad).sum().item(), 0)
    +
    +
    +

    source

    +
    +
    +

    MultiConv1d

    +
    +
     MultiConv1d (ni, nf=None, kss=[1, 3, 5, 7], keep_original=False,
    +              separable=False, dim=1, **kwargs)
    +
    +

    Module that applies multiple convolutions with different kernel sizes

    +
    +
    t = torch.rand(16, 6, 37)
    +test_eq(MultiConv1d(6, None, kss=[1,3,5], keep_original=True)(t).shape, [16, 24, 37])
    +test_eq(MultiConv1d(6, 36, kss=[1,3,5], keep_original=False)(t).shape, [16, 36, 37])
    +test_eq(MultiConv1d(6, None, kss=[1,3,5], keep_original=True, dim=-1)(t).shape, [16, 6, 37*4])
    +test_eq(MultiConv1d(6, 60, kss=[1,3,5], keep_original=True)(t).shape, [16, 60, 37])
    +test_eq(MultiConv1d(6, 60, kss=[1,3,5], separable=True)(t).shape, [16, 60, 37])
    +
    +
    +

    source

    +
    +
    +

    LSTMOutput

    +
    +
     LSTMOutput ()
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    t = ([1], [2], [3])
    +test_eq(LSTMOutput()(t), [1])
    +
    +
    +

    source

    +
    +
    +

    emb_sz_rule

    +
    +
     emb_sz_rule (n_cat)
    +
    +

    Rule of thumb to pick embedding size corresponding to n_cat (original from fastai)

    +
    +
    test_eq(emb_sz_rule(7), 5)
    +
    +
    +

    source

    +
    +
    +

    TSEmbedding

    +
    +
     TSEmbedding (ni, nf, std=0.01, padding_idx=None)
    +
    +

    Embedding layer with truncated normal initialization adapted from fastai

    +
    +

    source

    +
    +
    +

    MultiEmbedding

    +
    +
     MultiEmbedding (c_in, n_cat_embeds, cat_embed_dims=None, cat_pos=None,
    +                 std=0.01, cat_padding_idxs=None)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    a = alphabet[np.random.randint(0,3,40)]
    +b = ALPHABET[np.random.randint(6,10,40)]
    +c = np.random.rand(40).reshape(4,1,10)
    +map_a = {k:v for v,k in enumerate(np.unique(a))}
    +map_b = {k:v for v,k in enumerate(np.unique(b))}
    +n_embeds = [len(m.keys()) for m in [map_a, map_b]]
    +szs = [emb_sz_rule(n) for n in n_embeds]
    +a = np.asarray(a.map(map_a)).reshape(4,1,10)
    +b = np.asarray(b.map(map_b)).reshape(4,1,10)
    +inp = torch.from_numpy(np.concatenate((c,a,b), 1)).float()
    +memb = MultiEmbedding(3, n_embeds, cat_pos=[1,2])
    +# registered buffers are part of the state_dict() but not module.parameters()
    +assert all([(k in memb.state_dict().keys()) for k in ['cat_pos', 'cont_pos']])
    +embeddings = memb(inp)
    +print(n_embeds, szs, inp.shape, embeddings.shape)
    +test_eq(embeddings.shape, (inp.shape[0],sum(szs)+1,inp.shape[-1]))
    +
    +
    [3, 4] [3, 3] torch.Size([4, 3, 10]) torch.Size([4, 7, 10])
    +
    +
    +
    +
    me = MultiEmbedding(3, 4, cat_pos=2)
    +test_eq(me.cat_embed[0].weight.shape, (4,3))
    +test_eq(me.cat_pos.cpu().item(), 2)
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.minirocket.html b/models.minirocket.html new file mode 100644 index 000000000..ba1c771b8 --- /dev/null +++ b/models.minirocket.html @@ -0,0 +1,1433 @@ + + + + + + + + + +tsai - MINIROCKET + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    MINIROCKET

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    A Very Fast (Almost) Deterministic Transform for Time Series Classification.

    +
    +
    +

    source

    +
    +

    MiniRocketClassifier

    +
    +
     MiniRocketClassifier (num_features=10000, max_dilations_per_kernel=32,
    +                       random_state=None, alphas=array([1.e-03, 1.e-02,
    +                       1.e-01, 1.e+00, 1.e+01, 1.e+02, 1.e+03]),
    +                       normalize_features=True, memory=None,
    +                       verbose=False, scoring=None, class_weight=None,
    +                       **kwargs)
    +
    +

    Time series classification using MINIROCKET features and a linear classifier

    +
    +

    source

    +
    +
    +

    load_minirocket

    +
    +
     load_minirocket (fname, path='./models')
    +
    +
    +

    source

    +
    +
    +

    MiniRocketRegressor

    +
    +
     MiniRocketRegressor (num_features=10000, max_dilations_per_kernel=32,
    +                      random_state=None, alphas=array([1.e-03, 1.e-02,
    +                      1.e-01, 1.e+00, 1.e+01, 1.e+02, 1.e+03]),
    +                      normalize_features=True, memory=None, verbose=False,
    +                      scoring=None, **kwargs)
    +
    +

    Time series regression using MINIROCKET features and a linear regressor

    +
    +

    source

    +
    +
    +

    load_minirocket

    +
    +
     load_minirocket (fname, path='./models')
    +
    +
    +

    source

    +
    +
    +

    MiniRocketVotingClassifier

    +
    +
     MiniRocketVotingClassifier (n_estimators=5, weights=None, n_jobs=-1,
    +                             num_features=10000,
    +                             max_dilations_per_kernel=32,
    +                             random_state=None, alphas=array([1.e-03,
    +                             1.e-02, 1.e-01, 1.e+00, 1.e+01, 1.e+02,
    +                             1.e+03]), normalize_features=True,
    +                             memory=None, verbose=False, scoring=None,
    +                             class_weight=None, **kwargs)
    +
    +

    Time series classification ensemble using MINIROCKET features, a linear classifier and majority voting

    +
    +

    source

    +
    +
    +

    get_minirocket_preds

    +
    +
     get_minirocket_preds (X, fname, path='./models', model=None)
    +
    +
    +

    source

    +
    +
    +

    MiniRocketVotingRegressor

    +
    +
     MiniRocketVotingRegressor (n_estimators=5, weights=None, n_jobs=-1,
    +                            num_features=10000,
    +                            max_dilations_per_kernel=32,
    +                            random_state=None, alphas=array([1.e-03,
    +                            1.e-02, 1.e-01, 1.e+00, 1.e+01, 1.e+02,
    +                            1.e+03]), normalize_features=True,
    +                            memory=None, verbose=False, scoring=None,
    +                            **kwargs)
    +
    +

    Time series regression ensemble using MINIROCKET features, a linear regressor and a voting regressor

    +
    +
    # Univariate classification with sklearn-type API
    +dsid = 'OliveOil'
    +fname = 'MiniRocketClassifier'
    +X_train, y_train, X_test, y_test = get_UCR_data(dsid)
    +cls = MiniRocketClassifier()
    +cls.fit(X_train, y_train)
    +cls.save(fname)
    +pred = cls.score(X_test, y_test)
    +del cls
    +cls = load_minirocket(fname)
    +test_eq(cls.score(X_test, y_test), pred)
    +
    +
    OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
    +
    +
    +
    +
    # Multivariate classification with sklearn-type API
    +dsid = 'NATOPS'
    +X_train, y_train, X_test, y_test = get_UCR_data(dsid)
    +cls = MiniRocketClassifier()
    +cls.fit(X_train, y_train)
    +cls.score(X_test, y_test)
    +
    +
    0.9277777777777778
    +
    +
    +
    +
    # Multivariate classification with sklearn-type API
    +dsid = 'NATOPS'
    +X_train, y_train, X_test, y_test = get_UCR_data(dsid)
    +cls = MiniRocketVotingClassifier(5)
    +cls.fit(X_train, y_train)
    +cls.score(X_test, y_test)
    +
    +
    OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
    +OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
    +OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
    +OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
    +OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
    +
    +
    +
    0.9166666666666666
    +
    +
    +
    +
    from sklearn.metrics import mean_squared_error
    +
    +
    +
    # Univariate regression with sklearn-type API
    +dsid = 'Covid3Month'
    +fname = 'MiniRocketRegressor'
    +X_train, y_train, X_test, y_test = get_Monash_regression_data(dsid)
    +if X_train is not None:
    +    rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)
    +    reg = MiniRocketRegressor(scoring=rmse_scorer)
    +    reg.fit(X_train, y_train)
    +    reg.save(fname)
    +    del reg
    +    reg = load_minirocket(fname)
    +    y_pred = reg.predict(X_test)
    +    print(mean_squared_error(y_test, y_pred, squared=False))
    +
    +
    0.04099244037606886
    +
    +
    +
    +
    # Multivariate regression with sklearn-type API
    +dsid = 'AppliancesEnergy'
    +X_train, y_train, X_test, y_test = get_Monash_regression_data(dsid)
    +if X_train is not None:
    +    rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)
    +    reg = MiniRocketRegressor(scoring=rmse_scorer)
    +    reg.fit(X_train, y_train)
    +    reg.save(fname)
    +    del reg
    +    reg = load_minirocket(fname)
    +    y_pred = reg.predict(X_test)
    +    print(mean_squared_error(y_test, y_pred, squared=False))
    +
    +
    2.2938026879322577
    +
    +
    +
    +
    # Multivariate regression ensemble with sklearn-type API
    +if X_train is not None:
    +    reg = MiniRocketVotingRegressor(5, scoring=rmse_scorer)
    +    reg.fit(X_train, y_train)
    +    y_pred = reg.predict(X_test)
    +    print(mean_squared_error(y_test, y_pred, squared=False))
    +
    +
    OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
    +OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
    +
    +
    +
    2.286295546348893
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.minirocket_pytorch.html b/models.minirocket_pytorch.html new file mode 100644 index 000000000..1d4096988 --- /dev/null +++ b/models.minirocket_pytorch.html @@ -0,0 +1,1422 @@ + + + + + + + + + +tsai - MINIROCKET Pytorch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    MINIROCKET Pytorch

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    A Very Fast (Almost) Deterministic Transform for Time Series Classification.

    +
    +

    This is a Pytorch implementation of MiniRocket developed by Malcolm McLean and Ignacio Oguiza based on:

    +

    Dempster, A., Schmidt, D. F., & Webb, G. I. (2020). MINIROCKET: A Very Fast (Almost) Deterministic Transform for Time Series Classification. arXiv preprint arXiv:2012.08791.

    +

    Original paper: https://arxiv.org/abs/2012.08791

    +

    Original code: https://github.com/angus924/minirocket

    +
    +

    source

    +
    +

    MiniRocketFeatures

    +
    +
     MiniRocketFeatures (c_in, seq_len, num_features=10000,
    +                     max_dilations_per_kernel=32, random_state=None)
    +
    +

    This is a Pytorch implementation of MiniRocket developed by Malcolm McLean and Ignacio Oguiza

    +

    MiniRocket paper citation: @article{dempster_etal_2020, author = {Dempster, Angus and Schmidt, Daniel F and Webb, Geoffrey I}, title = {{MINIROCKET}: A Very Fast (Almost) Deterministic Transform for Time Series Classification}, year = {2020}, journal = {arXiv:2012.08791} } Original paper: https://arxiv.org/abs/2012.08791 Original code: https://github.com/angus924/minirocket

    +
    +

    source

    +
    +
    +

    get_minirocket_features

    +
    +
     get_minirocket_features (o, model, chunksize=1024, use_cuda=None,
    +                          to_np=True)
    +
    +

    Function used to split a large dataset into chunks, avoiding OOM error.

    +
    +

    source

    +
    +
    +

    MiniRocketHead

    +
    +
     MiniRocketHead (c_in, c_out, seq_len=1, bn=True, fc_dropout=0.0)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    MiniRocket

    +
    +
     MiniRocket (c_in, c_out, seq_len, num_features=10000,
    +             max_dilations_per_kernel=32, random_state=None, bn=True,
    +             fc_dropout=0)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    from tsai.imports import default_device
    +from fastai.metrics import accuracy
    +from fastai.callback.tracker import ReduceLROnPlateau
    +from tsai.data.all import *
    +from tsai.learner import *
    +
    +
    +
    # Offline feature calculation
    +dsid = 'ECGFiveDays'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +mrf = MiniRocketFeatures(c_in=X.shape[1], seq_len=X.shape[2]).to(default_device())
    +X_train = X[splits[0]]  # X_train may either be a np.ndarray or a torch.Tensor
    +mrf.fit(X_train)
    +X_tfm = get_minirocket_features(X, mrf)
    +tfms = [None, TSClassification()]
    +batch_tfms = TSStandardize(by_var=True)
    +dls = get_ts_dls(X_tfm, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=256)
    +learn = ts_learner(dls, MiniRocketHead, metrics=accuracy)
    +learn.fit(1, 1e-4, cbs=ReduceLROnPlateau(factor=0.5, min_lr=1e-8, patience=10))
    +
    + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    00.6931470.5308790.75261300:00
    +
    +
    +
    +
    # Online feature calculation
    +dsid = 'ECGFiveDays'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +tfms = [None, TSClassification()]
    +batch_tfms = TSStandardize()
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=256)
    +learn = ts_learner(dls, MiniRocket, metrics=accuracy)
    +learn.fit_one_cycle(1, 1e-2)
    +
    + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    00.6931470.7132970.50290400:06
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.minirocketplus_pytorch.html b/models.minirocketplus_pytorch.html new file mode 100644 index 000000000..88f1167f7 --- /dev/null +++ b/models.minirocketplus_pytorch.html @@ -0,0 +1,1567 @@ + + + + + + + + + +tsai - MINIROCKETPlus Pytorch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    MINIROCKETPlus Pytorch

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is a modified Pytorch implementation of MiniRocket originally developed by Malcolm McLean and Ignacio Oguiza and based on:

    +

    Dempster, A., Schmidt, D. F., & Webb, G. I. (2020). MINIROCKET: A Very Fast (Almost) Deterministic Transform for Time Series Classification. arXiv preprint arXiv:2012.08791.

    +

    Original paper: https://arxiv.org/abs/2012.08791

    +

    Original code: https://github.com/angus924/minirocket

    +
    +

    source

    +
    +

    MiniRocketFeaturesPlus

    +
    +
     MiniRocketFeaturesPlus (c_in, seq_len, num_features=10000,
    +                         max_dilations_per_kernel=32, kernel_size=9,
    +                         max_num_channels=9, max_num_kernels=84,
    +                         add_lsaz=False)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    MiniRocketPlus

    +
    +
     MiniRocketPlus (c_in, c_out, seq_len, num_features=10000,
    +                 max_dilations_per_kernel=32, kernel_size=9,
    +                 max_num_channels=None, max_num_kernels=84, bn=True,
    +                 fc_dropout=0, add_lsaz=False, custom_head=None,
    +                 zero_init=True)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    Flatten

    +
    +
     Flatten (*args, **kwargs)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    get_minirocket_features

    +
    +
     get_minirocket_features (o, model, chunksize=1024, use_cuda=None,
    +                          to_np=False)
    +
    +

    Function used to split a large dataset into chunks, avoiding OOM error.

    +
    +

    source

    +
    +
    +

    MiniRocketHead

    +
    +
     MiniRocketHead (c_in, c_out, seq_len=1, bn=True, fc_dropout=0.0)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    from tsai.imports import default_device
    +from fastai.metrics import accuracy
    +from fastai.callback.tracker import ReduceLROnPlateau
    +from tsai.data.all import *
    +from tsai.learner import *
    +
    +
    +
    # Offline feature calculation
    +dsid = 'ECGFiveDays'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +mrf = MiniRocketFeaturesPlus(c_in=X.shape[1], seq_len=X.shape[2]).to(default_device())
    +X_train = X[splits[0]]  # X_train may either be a np.ndarray or a torch.Tensor
    +mrf.fit(X_train)
    +X_tfm = get_minirocket_features(X, mrf).cpu().numpy()
    +tfms = [None, TSClassification()]
    +batch_tfms = TSStandardize(by_var=True)
    +dls = get_ts_dls(X_tfm, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=256)
    +learn = ts_learner(dls, MiniRocketHead, metrics=accuracy)
    +learn.fit(1, 1e-4, cbs=ReduceLROnPlateau(factor=0.5, min_lr=1e-8, patience=10))
    +
    +
    +
    # Online feature calculation
    +dsid = 'ECGFiveDays'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +tfms = [None, TSClassification()]
    +batch_tfms = TSStandardize()
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=256)
    +learn = ts_learner(dls, MiniRocketPlus, kernel_size=7, metrics=accuracy)
    +learn.fit_one_cycle(1, 1e-2)
    +
    +
    +
    from functools import partial
    +from fastcore.test import *
    +from tsai.models.utils import build_ts_model
    +from tsai.models.layers import mlp_head, rocket_nd_head
    +
    +
    +
    bs, c_in, seq_len = 8, 3, 50
    +c_out = 2
    +xb = torch.randn(bs, c_in, seq_len)
    +model = build_ts_model(MiniRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +model = build_ts_model(MiniRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len, add_lsaz=True)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +model = build_ts_model(MiniRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len, custom_head=mlp_head)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +
    +
    +
    X = np.random.rand(8, 10, 100)
    +y = np.random.rand(8, 1, 100)
    +splits = TimeSplitter(show_plot=False)(y)
    +tfms = [None, TSRegression()]
    +batch_tfms = TSStandardize(by_sample=True)
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +custom_head = partial(rocket_nd_head, d=dls.d)
    +model = MiniRocketPlus(dls.vars, dls.c, dls.len, custom_head=custom_head)
    +xb,yb = dls.one_batch()
    +test_eq(model.to(xb.device)(xb).shape[1:], y.shape[1:])
    +
    +
    +
    X = np.random.rand(16, 10, 100)
    +y = np.random.randint(0, 4, (16, 1, 100))
    +splits = TimeSplitter(show_plot=False)(y)
    +tfms = [None, TSClassification()]
    +batch_tfms = TSStandardize(by_sample=True)
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +custom_head = partial(rocket_nd_head, d=dls.d)
    +model = MiniRocketPlus(dls.vars, dls.c, dls.len, custom_head=custom_head)
    +xb,yb = dls.one_batch()
    +test_eq(model.to(xb.device)(xb).shape[1:], y.shape[1:]+(4,))
    +
    +
    +

    source

    +
    +
    +

    InceptionRocketFeaturesPlus

    +
    +
     InceptionRocketFeaturesPlus (c_in, seq_len, num_features=10000,
    +                              max_dilations_per_kernel=32,
    +                              kernel_sizes=array([3, 5, 7, 9]),
    +                              max_num_channels=None, max_num_kernels=84,
    +                              add_lsaz=True, same_n_feats_per_ks=False)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    InceptionRocketPlus

    +
    +
     InceptionRocketPlus (c_in, c_out, seq_len, num_features=10000,
    +                      max_dilations_per_kernel=32, kernel_sizes=[3, 5, 7,
    +                      9], max_num_channels=None, max_num_kernels=84,
    +                      same_n_feats_per_ks=False, add_lsaz=False, bn=True,
    +                      fc_dropout=0, custom_head=None, zero_init=True)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    from fastcore.test import *
    +from tsai.models.utils import build_ts_model
    +
    +
    +
    bs, c_in, seq_len = 8, 3, 50
    +c_out = 2
    +xb = torch.randn(bs, c_in, seq_len)
    +model = build_ts_model(InceptionRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +model = build_ts_model(InceptionRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len, add_lsaz=True)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +
    +
    +
    X = np.random.rand(8, 10, 100)
    +y = np.random.rand(8, 1, 100)
    +splits = TimeSplitter(show_plot=False)(y)
    +tfms = [None, TSRegression()]
    +batch_tfms = TSStandardize(by_sample=True)
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +custom_head = partial(rocket_nd_head, d=dls.d)
    +model = InceptionRocketPlus(dls.vars, dls.c, dls.len, custom_head=custom_head)
    +xb,yb = dls.one_batch()
    +test_eq(model.to(xb.device)(xb).shape[1:], y.shape[1:])
    +
    +
    +
    X = np.random.rand(16, 10, 100)
    +y = np.random.randint(0, 4, (16, 1, 100))
    +splits = TimeSplitter(show_plot=False)(y)
    +tfms = [None, TSClassification()]
    +batch_tfms = TSStandardize(by_sample=True)
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +custom_head = partial(rocket_nd_head, d=dls.d)
    +model = MiniRocketPlus(dls.vars, dls.c, dls.len, custom_head=custom_head)
    +xb,yb = dls.one_batch()
    +test_eq(model.to(xb.device)(xb).shape[1:], y.shape[1:]+(4,))
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.misc.html b/models.misc.html new file mode 100644 index 000000000..12d1a475b --- /dev/null +++ b/models.misc.html @@ -0,0 +1,1289 @@ + + + + + + + + + +tsai - Miscellaneous + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Miscellaneous

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This contains a set of experiments.

    +
    +
    +

    source

    +
    +

    InputWrapper

    +
    +
     InputWrapper (arch, c_in, c_out, seq_len, new_c_in=None,
    +               new_seq_len=None, **kwargs)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    from tsai.models.TST import *
    +
    +
    +
    xb = torch.randn(16, 1, 1000)
    +model = InputWrapper(TST, 1, 4, 1000, 10, 224)
    +test_eq(model.to(xb.device)(xb).shape, (16,4))
    +
    +
    +

    source

    +
    +
    +

    ResidualWrapper

    +
    +
     ResidualWrapper (model)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    RecursiveWrapper

    +
    +
     RecursiveWrapper (model, n_steps, anchored=False)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    xb = torch.randn(16, 1, 20)
    +model = RecursiveWrapper(TST(1, 1, 20), 5)
    +test_eq(model.to(xb.device)(xb).shape, (16, 5))
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.mlp.html b/models.mlp.html new file mode 100644 index 000000000..e5da1c3b6 --- /dev/null +++ b/models.mlp.html @@ -0,0 +1,1294 @@ + + + + + + + + + +tsai - MLP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    MLP

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial PyTorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on:

    +

    Fawaz, H. I., Forestier, G., Weber, J., Idoumghar, L., & Muller, P. A. (2019). Deep learning for time series classification: a review. Data Mining and Knowledge Discovery, 33(4), 917-963.

    +

    Official MLP TensorFlow implementation: https://github.com/hfawaz/dl-4-tsc/blob/master/classifiers/mlp.py

    +
    +

    source

    +
    +

    MLP

    +
    +
     MLP (c_in, c_out, seq_len, layers=[500, 500, 500], ps=[0.1, 0.2, 0.2],
    +      act=ReLU(inplace=True), use_bn=False, bn_final=False,
    +      lin_first=False, fc_dropout=0.0, y_range=None)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 16
    +nvars = 3
    +seq_len = 128
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +model = MLP(nvars, c_out, seq_len)
    +test_eq(model(xb).shape, (bs, c_out))
    +model
    +
    +
    MLP(
    +  (flatten): Reshape(bs)
    +  (mlp): ModuleList(
    +    (0): LinBnDrop(
    +      (0): Dropout(p=0.1, inplace=False)
    +      (1): Linear(in_features=384, out_features=500, bias=True)
    +      (2): ReLU(inplace=True)
    +    )
    +    (1): LinBnDrop(
    +      (0): Dropout(p=0.2, inplace=False)
    +      (1): Linear(in_features=500, out_features=500, bias=True)
    +      (2): ReLU(inplace=True)
    +    )
    +    (2): LinBnDrop(
    +      (0): Dropout(p=0.2, inplace=False)
    +      (1): Linear(in_features=500, out_features=500, bias=True)
    +      (2): ReLU(inplace=True)
    +    )
    +  )
    +  (head): Sequential(
    +    (0): LinBnDrop(
    +      (0): Linear(in_features=500, out_features=2, bias=True)
    +    )
    +  )
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.multiinputnet.html b/models.multiinputnet.html new file mode 100644 index 000000000..9b6def6ea --- /dev/null +++ b/models.multiinputnet.html @@ -0,0 +1,1336 @@ + + + + + + + + + +tsai - MultiInputNet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    MultiInputNet

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co).

    +

    It can be used to combine different types of deep learning models into a single one that will accept multiple inputs from a MixedDataLoaders.

    +
    +

    source

    +
    +

    MultiInputNet

    +
    +
     MultiInputNet (*models, c_out=None, reshape_fn=None, multi_output=False,
    +                custom_head=None, device=None, **kwargs)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    from tsai.basics import *
    +from tsai.data.all import *
    +from tsai.models.utils import *
    +from tsai.models.InceptionTimePlus import *
    +from tsai.models.TabModel import *
    +
    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +ts_features_df = get_ts_features(X, y)
    +
    +
    Feature Extraction: 100%|███████████████████████████████████████████| 40/40 [00:07<00:00,  5.23it/s]
    +
    +
    +
    +
    # raw ts
    +tfms  = [None, [TSCategorize()]]
    +batch_tfms = TSStandardize()
    +ts_dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +ts_model = build_ts_model(InceptionTimePlus, dls=ts_dls)
    +
    +# ts features
    +cat_names = None
    +cont_names = ts_features_df.columns[:-2]
    +y_names = 'target'
    +tab_dls = get_tabular_dls(ts_features_df, cat_names=cat_names, cont_names=cont_names, y_names=y_names, splits=splits)
    +tab_model = build_tabular_model(TabModel, dls=tab_dls)
    +
    +# mixed
    +mixed_dls = get_mixed_dls(ts_dls, tab_dls)
    +MultiModalNet = MultiInputNet(ts_model, tab_model)
    +learn = Learner(mixed_dls, MultiModalNet, metrics=[accuracy, RocAuc()])
    +learn.fit_one_cycle(1, 1e-3)
    +
    + + + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracyroc_auc_scoretime
    01.7806741.5717180.4777780.85744400:05
    +
    +
    +
    +
    (ts, (cat, cont)),yb = mixed_dls.one_batch()
    +learn.model((ts, (cat, cont))).shape
    +
    +
    torch.Size([64, 6])
    +
    +
    +
    +
    tab_dls.c, ts_dls.c, ts_dls.cat
    +
    +
    (6, 6, True)
    +
    +
    +
    +
    learn.loss_func
    +
    +
    FlattenedLoss of CrossEntropyLoss()
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.multimodal.html b/models.multimodal.html new file mode 100644 index 000000000..0845b5dd7 --- /dev/null +++ b/models.multimodal.html @@ -0,0 +1,2407 @@ + + + + + + + + + +tsai - Multimodal + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Multimodal

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Functionality used for multiple data modalities.

    +
    +

    A common scenario in time-series related tasks is the use of multiple types of inputs:

    +
      +
    • static: data that doesn’t change with time
    • +
    • observed: temporal data only available in the past
    • +
    • known: temporal data available in the past and in the future
    • +
    +

    At the same time, these different modalities may contain:

    +
      +
    • categorical data
    • +
    • continuous or numerical data
    • +
    +

    Based on that, there are situations where we have up to 6 different types of input features:

    +
      +
    • s_cat: static continuous variables
    • +
    • o_cat: observed categorical variables
    • +
    • o_cont: observed continuous variables
    • +
    • k_cat: known categorical variables
    • +
    • k_cont: known continuous variables
    • +
    +
    +

    source

    +
    +

    get_feat_idxs

    +
    +
     get_feat_idxs (c_in, s_cat_idxs=None, s_cont_idxs=None, o_cat_idxs=None,
    +                o_cont_idxs=None)
    +
    +

    Calculate the indices of the features used for training.

    +
    +

    source

    +
    +
    +

    get_o_cont_idxs

    +
    +
     get_o_cont_idxs (c_in, s_cat_idxs=None, s_cont_idxs=None,
    +                  o_cat_idxs=None)
    +
    +

    Calculate the indices of the observed continuous features.

    +
    +
    c_in = 7
    +s_cat_idxs = 3
    +s_cont_idxs = [1, 4, 5]
    +o_cat_idxs = None
    +o_cont_idxs = None
    +
    +s_cat_idxs, s_cont_idxs, o_cat_idxs, o_cont_idxs = get_feat_idxs(c_in, s_cat_idxs=s_cat_idxs, s_cont_idxs=s_cont_idxs, o_cat_idxs=o_cat_idxs, o_cont_idxs=o_cont_idxs)
    +
    +test_eq(s_cat_idxs, [3])
    +test_eq(s_cont_idxs, [1, 4, 5])
    +test_eq(o_cat_idxs, [])
    +test_eq(o_cont_idxs, [0, 2, 6])
    +
    +
    +

    source

    +
    +
    +

    TensorSplitter

    +
    +
     TensorSplitter (s_cat_idxs:list=None, s_cont_idxs:list=None,
    +                 o_cat_idxs:list=None, o_cont_idxs:list=None,
    +                 k_cat_idxs:list=None, k_cont_idxs:list=None,
    +                 horizon:int=None)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    + + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool
    TypeDefaultDetails
    s_cat_idxslistNonelist of indices for static categorical variables
    s_cont_idxslistNonelist of indices for static continuous variables
    o_cat_idxslistNonelist of indices for observed categorical variables
    o_cont_idxslistNonelist of indices for observed continuous variables
    k_cat_idxslistNonelist of indices for known categorical variables
    k_cont_idxslistNonelist of indices for known continuous variables
    horizonintNonenumber of time steps to predict ahead
    +
    +
    # Example usage
    +bs = 4
    +s_cat_idxs = 1
    +s_cont_idxs = [0, 2]
    +o_cat_idxs =[ 3, 4, 5]
    +o_cont_idxs = None
    +k_cat_idxs = None
    +k_cont_idxs = None
    +horizon=None
    +input_tensor = torch.randn(bs, 6, 10)  # 3D input tensor
    +splitter = TensorSplitter(s_cat_idxs=s_cat_idxs, s_cont_idxs=s_cont_idxs,
    +                          o_cat_idxs=o_cat_idxs, o_cont_idxs=o_cont_idxs)
    +slices = splitter(input_tensor)
    +for i, slice_tensor in enumerate(slices):
    +    print(f"Slice {i+1}: {slice_tensor.shape} {slice_tensor.dtype}")
    +
    +
    Slice 1: torch.Size([4, 1]) torch.int64
    +Slice 2: torch.Size([4, 2]) torch.int64
    +Slice 3: torch.Size([4, 3, 10]) torch.float32
    +Slice 4: torch.Size([4, 0, 10]) torch.float32
    +
    +
    +
    +
    # Example usage
    +bs = 4
    +s_cat_idxs = 1
    +s_cont_idxs = [0, 2]
    +o_cat_idxs =[ 3, 4, 5]
    +o_cont_idxs = None
    +k_cat_idxs = [6,7]
    +k_cont_idxs = 8
    +horizon=3
    +input_tensor = torch.randn(4, 9, 10)  # 3D input tensor
    +splitter = TensorSplitter(s_cat_idxs=s_cat_idxs, s_cont_idxs=s_cont_idxs,
    +                          o_cat_idxs=o_cat_idxs, o_cont_idxs=o_cont_idxs,
    +                          k_cat_idxs=k_cat_idxs, k_cont_idxs=k_cont_idxs, horizon=horizon)
    +slices = splitter(input_tensor)
    +for i, slice_tensor in enumerate(slices):
    +    print(f"Slice {i+1}: {slice_tensor.shape} {slice_tensor.dtype}")
    +
    +
    Slice 1: torch.Size([4, 1]) torch.int64
    +Slice 2: torch.Size([4, 2]) torch.int64
    +Slice 3: torch.Size([4, 3, 7]) torch.float32
    +Slice 4: torch.Size([4, 0, 7]) torch.float32
    +Slice 5: torch.Size([4, 2, 10]) torch.float32
    +Slice 6: torch.Size([4, 1, 10]) torch.float32
    +
    +
    +
    +

    source

    +
    +
    +

    Embeddings

    +
    +
     Embeddings (n_embeddings:list, embedding_dims:list=None,
    +             padding_idx:int=0, embed_dropout:float=0.0, **kwargs)
    +
    +

    Embedding layers for each categorical variable in a 2D or 3D tensor

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    n_embeddingslistList of num_embeddings for each categorical variable
    embedding_dimslistNoneList of embedding dimensions for each categorical variable
    padding_idxint0Embedding padding_idx
    embed_dropoutfloat0.0Dropout probability for Embedding layer
    kwargs
    +
    +
    t1 = torch.randint(0, 7, (16, 1))
    +t2 = torch.randint(0, 5, (16, 1))
    +t = torch.cat([t1, t2], 1).float()
    +emb = Embeddings([7, 5], None, embed_dropout=0.1)
    +test_eq(emb(t).shape, (16, 12))
    +
    +
    +
    t1 = torch.randint(0, 7, (16, 1))
    +t2 = torch.randint(0, 5, (16, 1))
    +t = torch.cat([t1, t2], 1).float()
    +emb = Embeddings([7, 5], [4, 3])
    +test_eq(emb(t).shape, (16, 12))
    +
    +
    +
    t1 = torch.randint(0, 7, (16, 1, 10))
    +t2 = torch.randint(0, 5, (16, 1, 10))
    +t = torch.cat([t1, t2], 1).float()
    +emb = Embeddings([7, 5], None)
    +test_eq(emb(t).shape, (16, 12, 10))
    +
    +
    +

    source

    +
    +
    +

    StaticBackbone

    +
    +
     StaticBackbone (c_in, c_out, seq_len, d=None, layers=[200, 100],
    +                 dropouts=[0.1, 0.2], act=ReLU(inplace=True),
    +                 use_bn=False, lin_first=False)
    +
    +

    Static backbone model to embed static features

    +
    +
    # Example usage
    +bs = 4
    +c_in = 6
    +c_out = 8
    +seq_len = 10
    +input_tensor = torch.randn(bs, c_in, seq_len)  # 3D input tensor
    +backbone = StaticBackbone(c_in, c_out, seq_len)
    +output_tensor = backbone(input_tensor)
    +print(f"Input shape: {input_tensor.shape} Output shape: {output_tensor.shape}")
    +backbone
    +
    +
    Input shape: torch.Size([4, 6, 10]) Output shape: torch.Size([4, 100])
    +
    +
    +
    StaticBackbone(
    +  (flatten): Reshape(bs)
    +  (mlp): ModuleList(
    +    (0): LinBnDrop(
    +      (0): Dropout(p=0.1, inplace=False)
    +      (1): Linear(in_features=60, out_features=200, bias=True)
    +      (2): ReLU(inplace=True)
    +    )
    +    (1): LinBnDrop(
    +      (0): Dropout(p=0.2, inplace=False)
    +      (1): Linear(in_features=200, out_features=100, bias=True)
    +      (2): ReLU(inplace=True)
    +    )
    +  )
    +)
    +
    +
    +
    +
    # class MultInputWrapper(nn.Module):
    +#     "Model wrapper for input tensors with static and/ or observed, categorical and/ or numerical features."
    +
    +#     def __init__(self,
    +#         arch,
    +#         c_in:int=None, # number of input variables
    +#         c_out:int=None, # number of output variables
    +#         seq_len:int=None, # input sequence length
    +#         d:tuple=None, # shape of the output tensor
    +#         dls:TSDataLoaders=None, # TSDataLoaders object
    +#         s_cat_idxs:list=None, # list of indices for static categorical variables
    +#         s_cat_embeddings:list=None, # list of num_embeddings for each static categorical variable
    +#         s_cat_embedding_dims:list=None, # list of embedding dimensions for each static categorical variable
    +#         s_cont_idxs:list=None, # list of indices for static continuous variables
    +#         o_cat_idxs:list=None, # list of indices for observed categorical variables
    +#         o_cat_embeddings:list=None, # list of num_embeddings for each observed categorical variable
    +#         o_cat_embedding_dims:list=None, # list of embedding dimensions for each observed categorical variable
    +#         o_cont_idxs:list=None, # list of indices for observed continuous variables. All features not in s_cat_idxs, s_cont_idxs, o_cat_idxs are considered observed continuous variables.
    +#         patch_len:int=None, # Number of time steps in each patch.
    +#         patch_stride:int=None, # Stride of the patch.
    +#         flatten:bool=False, # boolean indicating whether to flatten bacbone's output tensor
    +#         use_bn:bool=False, # boolean indicating whether to use batch normalization in the head
    +#         fc_dropout:float=0., # dropout probability for the fully connected layer in the head
    +#         custom_head=None, # custom head to replace the default head
    +#         **kwargs
    +#     ):
    +#         super().__init__()
    +
    +#         # attributes
    +#         c_in = c_in or dls.vars
    +#         c_out = c_out or dls.c
    +#         seq_len = seq_len or dls.len
    +#         d = d or (dls.d if dls is not None else None)
    +#         self.c_in, self.c_out, self.seq_len, self.d = c_in, c_out, seq_len, d
    +
    +#         # tensor splitter
    +#         if o_cont_idxs is None:
    +#             o_cont_idxs = get_o_cont_idxs(c_in, s_cat_idxs=s_cat_idxs, s_cont_idxs=s_cont_idxs, o_cat_idxs=o_cat_idxs)
    +#         self.splitter = TensorSplitter(s_cat_idxs, s_cont_idxs, o_cat_idxs, o_cont_idxs)
    +#         s_cat_idxs, s_cont_idxs, o_cat_idxs, o_cont_idxs = self.splitter.s_cat_idxs, self.splitter.s_cont_idxs, self.splitter.o_cat_idxs, self.splitter.o_cont_idxs
    +#         assert c_in == sum([len(s_cat_idxs), len(s_cont_idxs), len(o_cat_idxs), len(o_cont_idxs)])
    +
    +#         # embeddings
    +#         self.s_embeddings = Embeddings(s_cat_embeddings, s_cat_embedding_dims)
    +#         self.o_embeddings = Embeddings(o_cat_embeddings, o_cat_embedding_dims)
    +
    +#         # patch encoder
    +#         if patch_len is not None:
    +#             patch_stride = patch_stride or patch_len
    +#             self.patch_encoder = PatchEncoder(patch_len, patch_stride, seq_len=seq_len)
    +#             c_mult = patch_len
    +#             seq_len = (seq_len + self.patch_encoder.pad_size - patch_len) // patch_stride + 1
    +#         else:
    +#             self.patch_encoder = nn.Identity()
    +#             c_mult = 1
    +
    +#         # backbone
    +#         n_s_features = len(s_cont_idxs) + self.s_embeddings.embedding_dims
    +#         n_o_features = (len(o_cont_idxs) + self.o_embeddings.embedding_dims) * c_mult
    +#         s_backbone = StaticBackbone(c_in=n_s_features, c_out=c_out, seq_len=1, **kwargs)
    +#         if isinstance(arch, str):
    +#             arch = get_arch(arch)
    +#         if isinstance(arch, nn.Module):
    +#             o_model = arch
    +#         else:
    +#             o_model = build_ts_model(arch, c_in=n_o_features, c_out=c_out, seq_len=seq_len, d=d, **kwargs)
    +#         assert hasattr(o_model, "backbone"), "the selected arch must have a backbone"
    +#         o_backbone = getattr(o_model, "backbone")
    +
    +#         # head
    +#         o_head_nf = output_size_calculator(o_backbone, n_o_features, seq_len)[0]
    +#         s_head_nf = s_backbone.head_nf
    +#         self.backbone = nn.ModuleList([o_backbone, s_backbone])
    +#         self.head_nf = o_head_nf + s_head_nf
    +#         if custom_head is not None:
    +#             if isinstance(custom_head, nn.Module): self.head = custom_head
    +#             else:self. head = custom_head(self.head_nf, c_out, seq_len, d=d)
    +#         else:
    +#             if "rocket" in o_model.__name__.lower():
    +#                 self.head = rocket_nd_head(self.head_nf, c_out, seq_len=seq_len, d=d, use_bn=use_bn, fc_dropout=fc_dropout)
    +#             else:
    +#                 self.head = lin_nd_head(self.head_nf, c_out, seq_len=seq_len, d=d, flatten=flatten, use_bn=use_bn, fc_dropout=fc_dropout)
    +
    +#     def forward(self, x):
    +#         # split x into static cat, static cont, observed cat, and observed cont
    +#         s_cat, s_cont, o_cat, o_cont = self.splitter(x)
    +
    +#         # create categorical embeddings
    +#         s_cat = self.s_embeddings(s_cat)
    +#         o_cat = self.o_embeddings(o_cat)
    +
    +#         # contatenate static and observed features
    +#         s_x = torch.cat([s_cat, s_cont], 1)
    +#         o_x = torch.cat([o_cat, o_cont], 1)
    +
    +#         # patch encoder
    +#         o_x = self.patch_encoder(o_x)
    +
    +#         # pass static and observed features through their respective backbones
    +#         for i,(b,xi) in enumerate(zip(self.backbone, [o_x, s_x])):
    +#             if i == 0:
    +#                 x = b(xi)
    +#                 if x.ndim == 2:
    +#                     x = x[..., None]
    +#             else:
    +#                 x = torch.cat([x,  b(xi)[..., None].repeat(1, 1, x.shape[-1])], 1)
    +
    +#         # head
    +#         x = self.head(x)
    +#         return x
    +
    +
    +
    # from tsai.models.InceptionTimePlus import InceptionTimePlus
    +
    +
    +
    # c_in = 6
    +# c_out = 3
    +# seq_len = 97
    +# d = None
    +
    +# s_cat_idxs=2
    +# s_cont_idxs=4
    +# o_cat_idxs=[0, 3]
    +# o_cont_idxs=None
    +# s_cat_embeddings = 5
    +# s_cat_embedding_dims = None
    +# o_cat_embeddings = [7, 3]
    +# o_cat_embedding_dims = [3, None]
    +
    +# t0 = torch.randint(0, 7, (16, 1, seq_len)) # cat
    +# t1 = torch.randn(16, 1, seq_len)
    +# t2 = torch.randint(0, 5, (16, 1, seq_len)) # cat
    +# t3 = torch.randint(0, 3, (16, 1, seq_len)) # cat
    +# t4 = torch.randn(16, 1, seq_len)
    +# t5 = torch.randn(16, 1, seq_len)
    +
    +# t = torch.cat([t0, t1, t2, t3, t4, t5], 1).float()
    +
    +# patch_lens = [None, 5, 5, 5, 5]
    +# patch_strides = [None, None, 1, 3, 5]
    +# for patch_len, patch_stride in zip(patch_lens, patch_strides):
    +#     for arch in ["InceptionTimePlus", InceptionTimePlus, "MultiRocketPlus"]:
    +#         print(f"arch: {arch}, patch_len: {patch_len}, patch_stride: {patch_stride}")
    +
    +#         model = MultInputWrapper(
    +#             arch=arch,
    +#             c_in=c_in,
    +#             c_out=c_out,
    +#             seq_len=seq_len,
    +#             d=d,
    +#             s_cat_idxs=s_cat_idxs, s_cat_embeddings=s_cat_embeddings, s_cat_embedding_dims=s_cat_embedding_dims,
    +#             s_cont_idxs=s_cont_idxs,
    +#             o_cat_idxs=o_cat_idxs, o_cat_embeddings=o_cat_embeddings, o_cat_embedding_dims=o_cat_embedding_dims,
    +#             o_cont_idxs=o_cont_idxs,
    +#             patch_len=patch_len,
    +#             patch_stride=patch_stride,
    +#         )
    +
    +#         test_eq(model(t).shape, (16,3))
    +
    +
    +

    source

    +
    +
    +

    FusionMLP

    +
    +
     FusionMLP (comb_dim, layers, act='relu', dropout=0.0, use_bn=True)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +
    bs = 16
    +emb_dim = 128
    +seq_len = 20
    +cat_dim = 24
    +cont_feat = 3
    +
    +comb_dim = emb_dim + cat_dim + cont_feat
    +emb = torch.randn(bs, emb_dim, seq_len)
    +cat = torch.randn(bs, cat_dim)
    +cont = torch.randn(bs, cont_feat)
    +fusion_mlp = FusionMLP(comb_dim, layers=comb_dim, act='relu', dropout=.1)
    +output = fusion_mlp(cat, cont, emb)
    +test_eq(output.shape, (bs, comb_dim))
    +
    +
    +
    bs = 16
    +emb_dim = 50000
    +cat_dim = 24
    +cont_feat = 3
    +
    +comb_dim = emb_dim + cat_dim + cont_feat
    +emb = torch.randn(bs, emb_dim)
    +cat = torch.randn(bs, cat_dim)
    +cont = torch.randn(bs, cont_feat)
    +fusion_mlp = FusionMLP(comb_dim, layers=[128], act='relu', dropout=.1)
    +output = fusion_mlp(cat, cont, emb)
    +test_eq(output.shape, (bs, 128))
    +
    +
    +

    source

    +
    +
    +

    MultInputBackboneWrapper

    +
    +
     MultInputBackboneWrapper (arch, c_in:int=None, seq_len:int=None,
    +                           d:tuple=None,
    +                           dls:tsai.data.core.TSDataLoaders=None,
    +                           s_cat_idxs:list=None,
    +                           s_cat_embeddings:list=None,
    +                           s_cat_embedding_dims:list=None,
    +                           s_cont_idxs:list=None, o_cat_idxs:list=None,
    +                           o_cat_embeddings:list=None,
    +                           o_cat_embedding_dims:list=None,
    +                           o_cont_idxs:list=None, patch_len:int=None,
    +                           patch_stride:int=None,
    +                           fusion_layers:list=[128],
    +                           fusion_act:str='relu',
    +                           fusion_dropout:float=0.0,
    +                           fusion_use_bn:bool=True, **kwargs)
    +
    +

    Model backbone wrapper for input tensors with static and/ or observed, categorical and/ or numerical features.

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    arch
    c_inintNonenumber of input variables
    seq_lenintNoneinput sequence length
    dtupleNoneshape of the output tensor
    dlsTSDataLoadersNoneTSDataLoaders object
    s_cat_idxslistNonelist of indices for static categorical variables
    s_cat_embeddingslistNonelist of num_embeddings for each static categorical variable
    s_cat_embedding_dimslistNonelist of embedding dimensions for each static categorical variable
    s_cont_idxslistNonelist of indices for static continuous variables
    o_cat_idxslistNonelist of indices for observed categorical variables
    o_cat_embeddingslistNonelist of num_embeddings for each observed categorical variable
    o_cat_embedding_dimslistNonelist of embedding dimensions for each observed categorical variable
    o_cont_idxslistNonelist of indices for observed continuous variables. All features not in s_cat_idxs, s_cont_idxs, o_cat_idxs are considered observed continuous variables.
    patch_lenintNoneNumber of time steps in each patch.
    patch_strideintNoneStride of the patch.
    fusion_layerslist[128]list of layer dimensions for the fusion MLP
    fusion_actstrreluactivation function for the fusion MLP
    fusion_dropoutfloat0.0dropout probability for the fusion MLP
    fusion_use_bnboolTrueboolean indicating whether to use batch normalization in the fusion MLP
    kwargs
    +
    +

    source

    +
    +
    +

    MultInputWrapper

    +
    +
     MultInputWrapper (arch, c_in:int=None, c_out:int=1, seq_len:int=None,
    +                   d:tuple=None, dls:tsai.data.core.TSDataLoaders=None,
    +                   s_cat_idxs:list=None, s_cat_embeddings:list=None,
    +                   s_cat_embedding_dims:list=None, s_cont_idxs:list=None,
    +                   o_cat_idxs:list=None, o_cat_embeddings:list=None,
    +                   o_cat_embedding_dims:list=None, o_cont_idxs:list=None,
    +                   patch_len:int=None, patch_stride:int=None,
    +                   fusion_layers:list=128, fusion_act:str='relu',
    +                   fusion_dropout:float=0.0, fusion_use_bn:bool=True,
    +                   custom_head=None, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    arch
    c_inintNonenumber of input variables
    c_outint1number of output variables
    seq_lenintNoneinput sequence length
    dtupleNoneshape of the output tensor
    dlsTSDataLoadersNoneTSDataLoaders object
    s_cat_idxslistNonelist of indices for static categorical variables
    s_cat_embeddingslistNonelist of num_embeddings for each static categorical variable
    s_cat_embedding_dimslistNonelist of embedding dimensions for each static categorical variable
    s_cont_idxslistNonelist of indices for static continuous variables
    o_cat_idxslistNonelist of indices for observed categorical variables
    o_cat_embeddingslistNonelist of num_embeddings for each observed categorical variable
    o_cat_embedding_dimslistNonelist of embedding dimensions for each observed categorical variable
    o_cont_idxslistNonelist of indices for observed continuous variables. All features not in s_cat_idxs, s_cont_idxs, o_cat_idxs are considered observed continuous variables.
    patch_lenintNoneNumber of time steps in each patch.
    patch_strideintNoneStride of the patch.
    fusion_layerslist128list of layer dimensions for the fusion MLP
    fusion_actstrreluactivation function for the fusion MLP
    fusion_dropoutfloat0.0dropout probability for the fusion MLP
    fusion_use_bnboolTrueboolean indicating whether to use batch normalization in the fusion MLP
    custom_headNoneTypeNonecustom head to replace the default head
    kwargs
    +
    +
    from tsai.models.InceptionTimePlus import InceptionTimePlus
    +
    +
    +
    bs = 8
    +c_in = 6
    +c_out = 3
    +seq_len = 97
    +d = None
    +
    +s_cat_idxs=2
    +s_cont_idxs=4
    +o_cat_idxs=[0, 3]
    +o_cont_idxs=None
    +s_cat_embeddings = 5
    +s_cat_embedding_dims = None
    +o_cat_embeddings = [7, 3]
    +o_cat_embedding_dims = [3, None]
    +
    +fusion_layers = 128
    +
    +t0 = torch.randint(0, 7, (bs, 1, seq_len)) # cat
    +t1 = torch.randn(bs, 1, seq_len)
    +t2 = torch.randint(0, 5, (bs, 1, seq_len)) # cat
    +t3 = torch.randint(0, 3, (bs, 1, seq_len)) # cat
    +t4 = torch.randn(bs, 1, seq_len)
    +t5 = torch.randn(bs, 1, seq_len)
    +
    +t = torch.cat([t0, t1, t2, t3, t4, t5], 1).float().to(default_device())
    +
    +patch_lens = [None, 5, 5, 5, 5]
    +patch_strides = [None, None, 1, 3, 5]
    +for patch_len, patch_stride in zip(patch_lens, patch_strides):
    +    for arch in ["InceptionTimePlus", InceptionTimePlus, "TSiTPlus"]:
    +        print(f"arch: {arch}, patch_len: {patch_len}, patch_stride: {patch_stride}")
    +
    +        model = MultInputWrapper(
    +            arch=arch,
    +            c_in=c_in,
    +            c_out=c_out,
    +            seq_len=seq_len,
    +            d=d,
    +            s_cat_idxs=s_cat_idxs, s_cat_embeddings=s_cat_embeddings, s_cat_embedding_dims=s_cat_embedding_dims,
    +            s_cont_idxs=s_cont_idxs,
    +            o_cat_idxs=o_cat_idxs, o_cat_embeddings=o_cat_embeddings, o_cat_embedding_dims=o_cat_embedding_dims,
    +            o_cont_idxs=o_cont_idxs,
    +            patch_len=patch_len,
    +            patch_stride=patch_stride,
    +            fusion_layers=fusion_layers,
    +        ).to(default_device())
    +
    +        test_eq(model(t).shape, (bs, c_out))
    +
    +
    arch: InceptionTimePlus, patch_len: None, patch_stride: None
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: None, patch_stride: None
    +arch: TSiTPlus, patch_len: None, patch_stride: None
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: None
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: None
    +arch: TSiTPlus, patch_len: 5, patch_stride: None
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 1
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 1
    +arch: TSiTPlus, patch_len: 5, patch_stride: 1
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 3
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 3
    +arch: TSiTPlus, patch_len: 5, patch_stride: 3
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 5
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 5
    +arch: TSiTPlus, patch_len: 5, patch_stride: 5
    +
    +
    +
    +
    bs = 8
    +c_in = 6
    +c_out = 3
    +seq_len = 97
    +d = None
    +
    +s_cat_idxs=None
    +s_cont_idxs=4
    +o_cat_idxs=[0, 3]
    +o_cont_idxs=None
    +s_cat_embeddings = None
    +s_cat_embedding_dims = None
    +o_cat_embeddings = [7, 3]
    +o_cat_embedding_dims = [3, None]
    +
    +fusion_layers = 128
    +
    +t0 = torch.randint(0, 7, (bs, 1, seq_len)) # cat
    +t1 = torch.randn(bs, 1, seq_len)
    +t2 = torch.randint(0, 5, (bs, 1, seq_len)) # cat
    +t3 = torch.randint(0, 3, (bs, 1, seq_len)) # cat
    +t4 = torch.randn(bs, 1, seq_len)
    +t5 = torch.randn(bs, 1, seq_len)
    +
    +t = torch.cat([t0, t1, t2, t3, t4, t5], 1).float().to(default_device())
    +
    +patch_lens = [None, 5, 5, 5, 5]
    +patch_strides = [None, None, 1, 3, 5]
    +for patch_len, patch_stride in zip(patch_lens, patch_strides):
    +    for arch in ["InceptionTimePlus", InceptionTimePlus, "TSiTPlus"]:
    +        print(f"arch: {arch}, patch_len: {patch_len}, patch_stride: {patch_stride}")
    +
    +        model = MultInputWrapper(
    +            arch=arch,
    +            c_in=c_in,
    +            c_out=c_out,
    +            seq_len=seq_len,
    +            d=d,
    +            s_cat_idxs=s_cat_idxs, s_cat_embeddings=s_cat_embeddings, s_cat_embedding_dims=s_cat_embedding_dims,
    +            s_cont_idxs=s_cont_idxs,
    +            o_cat_idxs=o_cat_idxs, o_cat_embeddings=o_cat_embeddings, o_cat_embedding_dims=o_cat_embedding_dims,
    +            o_cont_idxs=o_cont_idxs,
    +            patch_len=patch_len,
    +            patch_stride=patch_stride,
    +            fusion_layers=fusion_layers,
    +        ).to(default_device())
    +
    +        test_eq(model(t).shape, (bs, c_out))
    +
    +
    arch: InceptionTimePlus, patch_len: None, patch_stride: None
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: None, patch_stride: None
    +arch: TSiTPlus, patch_len: None, patch_stride: None
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: None
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: None
    +arch: TSiTPlus, patch_len: 5, patch_stride: None
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 1
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 1
    +arch: TSiTPlus, patch_len: 5, patch_stride: 1
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 3
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 3
    +arch: TSiTPlus, patch_len: 5, patch_stride: 3
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 5
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 5
    +arch: TSiTPlus, patch_len: 5, patch_stride: 5
    +
    +
    +
    +
    bs = 8
    +c_in = 6
    +c_out = 3
    +seq_len = 97
    +d = None
    +
    +s_cat_idxs=2
    +s_cont_idxs=4
    +o_cat_idxs=None
    +o_cont_idxs=None
    +s_cat_embeddings = 5
    +s_cat_embedding_dims = None
    +o_cat_embeddings = None
    +o_cat_embedding_dims = None
    +
    +fusion_layers = 128
    +
    +t0 = torch.randint(0, 7, (bs, 1, seq_len)) # cat
    +t1 = torch.randn(bs, 1, seq_len)
    +t2 = torch.randint(0, 5, (bs, 1, seq_len)) # cat
    +t3 = torch.randint(0, 3, (bs, 1, seq_len)) # cat
    +t4 = torch.randn(bs, 1, seq_len)
    +t5 = torch.randn(bs, 1, seq_len)
    +
    +t = torch.cat([t0, t1, t2, t3, t4, t5], 1).float().to(default_device())
    +
    +patch_lens = [None, 5, 5, 5, 5]
    +patch_strides = [None, None, 1, 3, 5]
    +for patch_len, patch_stride in zip(patch_lens, patch_strides):
    +    for arch in ["InceptionTimePlus", InceptionTimePlus, "TSiTPlus"]:
    +        print(f"arch: {arch}, patch_len: {patch_len}, patch_stride: {patch_stride}")
    +
    +        model = MultInputWrapper(
    +            arch=arch,
    +            c_in=c_in,
    +            c_out=c_out,
    +            seq_len=seq_len,
    +            d=d,
    +            s_cat_idxs=s_cat_idxs, s_cat_embeddings=s_cat_embeddings, s_cat_embedding_dims=s_cat_embedding_dims,
    +            s_cont_idxs=s_cont_idxs,
    +            o_cat_idxs=o_cat_idxs, o_cat_embeddings=o_cat_embeddings, o_cat_embedding_dims=o_cat_embedding_dims,
    +            o_cont_idxs=o_cont_idxs,
    +            patch_len=patch_len,
    +            patch_stride=patch_stride,
    +            fusion_layers=fusion_layers,
    +        ).to(default_device())
    +
    +        test_eq(model(t).shape, (bs, c_out))
    +
    +
    arch: InceptionTimePlus, patch_len: None, patch_stride: None
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: None, patch_stride: None
    +arch: TSiTPlus, patch_len: None, patch_stride: None
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: None
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: None
    +arch: TSiTPlus, patch_len: 5, patch_stride: None
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 1
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 1
    +arch: TSiTPlus, patch_len: 5, patch_stride: 1
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 3
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 3
    +arch: TSiTPlus, patch_len: 5, patch_stride: 3
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 5
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 5
    +arch: TSiTPlus, patch_len: 5, patch_stride: 5
    +
    +
    +
    +
    bs = 8
    +c_in = 6
    +c_out = 3
    +seq_len = 97
    +d = None
    +
    +s_cat_idxs=None
    +s_cont_idxs=None
    +o_cat_idxs=None
    +o_cont_idxs=None
    +s_cat_embeddings = None
    +s_cat_embedding_dims = None
    +o_cat_embeddings = None
    +o_cat_embedding_dims = None
    +
    +fusion_layers = 128
    +
    +t0 = torch.randint(0, 7, (bs, 1, seq_len)) # cat
    +t1 = torch.randn(bs, 1, seq_len)
    +t2 = torch.randint(0, 5, (bs, 1, seq_len)) # cat
    +t3 = torch.randint(0, 3, (bs, 1, seq_len)) # cat
    +t4 = torch.randn(bs, 1, seq_len)
    +t5 = torch.randn(bs, 1, seq_len)
    +
    +t = torch.cat([t0, t1, t2, t3, t4, t5], 1).float().to(default_device())
    +
    +patch_lens = [None, 5, 5, 5, 5]
    +patch_strides = [None, None, 1, 3, 5]
    +for patch_len, patch_stride in zip(patch_lens, patch_strides):
    +    for arch in ["InceptionTimePlus", InceptionTimePlus, "TSiTPlus"]:
    +        print(f"arch: {arch}, patch_len: {patch_len}, patch_stride: {patch_stride}")
    +
    +        model = MultInputWrapper(
    +            arch=arch,
    +            c_in=c_in,
    +            c_out=c_out,
    +            seq_len=seq_len,
    +            d=d,
    +            s_cat_idxs=s_cat_idxs, s_cat_embeddings=s_cat_embeddings, s_cat_embedding_dims=s_cat_embedding_dims,
    +            s_cont_idxs=s_cont_idxs,
    +            o_cat_idxs=o_cat_idxs, o_cat_embeddings=o_cat_embeddings, o_cat_embedding_dims=o_cat_embedding_dims,
    +            o_cont_idxs=o_cont_idxs,
    +            patch_len=patch_len,
    +            patch_stride=patch_stride,
    +            fusion_layers=fusion_layers,
    +        ).to(default_device())
    +
    +        test_eq(model(t).shape, (bs, c_out))
    +
    +
    arch: InceptionTimePlus, patch_len: None, patch_stride: None
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: None, patch_stride: None
    +arch: TSiTPlus, patch_len: None, patch_stride: None
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: None
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: None
    +arch: TSiTPlus, patch_len: 5, patch_stride: None
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 1
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 1
    +arch: TSiTPlus, patch_len: 5, patch_stride: 1
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 3
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 3
    +arch: TSiTPlus, patch_len: 5, patch_stride: 3
    +arch: InceptionTimePlus, patch_len: 5, patch_stride: 5
    +arch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 5
    +arch: TSiTPlus, patch_len: 5, patch_stride: 5
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.multirocketplus.html b/models.multirocketplus.html new file mode 100644 index 000000000..8540e222e --- /dev/null +++ b/models.multirocketplus.html @@ -0,0 +1,1508 @@ + + + + + + + + + +tsai - MultiRocketPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    MultiRocketPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    MultiRocket: Multiple pooling operators and transformations for fast and effective time series classification.

    +
    +

    This is a Pytorch implementation of MultiRocket developed by Malcolm McLean and Ignacio Oguiza based on:

    +

    Tan, C. W., Dempster, A., Bergmeir, C., & Webb, G. I. (2022). MultiRocket: multiple pooling operators and transformations for fast and effective time series classification. Data Mining and Knowledge Discovery, 36(5), 1623-1646.

    +

    Original paper: https://link.springer.com/article/10.1007/s10618-022-00844-1

    +

    Original repository: https://github.com/ChangWeiTan/MultiRocket

    +
    +

    source

    +
    +

    Flatten

    +
    +
     Flatten (*args, **kwargs)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +
    from tsai.imports import default_device
    +
    +
    +
    o = torch.rand(2, 3, 5, 4).to(default_device()) - .3
    +print(o)
    +
    +output = _LPVV(o, dim=2)
    +print(output)  # Should print: torch.Size([2, 3, 4])
    +
    +
    tensor([[[[ 0.5644, -0.0509, -0.0390,  0.4091],
    +          [ 0.0517, -0.1471,  0.6458,  0.5593],
    +          [ 0.4516, -0.0821,  0.1271,  0.0592],
    +          [ 0.4151,  0.4376,  0.0763,  0.3780],
    +          [ 0.2653, -0.1817,  0.0156,  0.4993]],
    +
    +         [[-0.0779,  0.0858,  0.1982,  0.3224],
    +          [ 0.1130,  0.0714, -0.1779,  0.5360],
    +          [-0.1848, -0.2270, -0.0925, -0.1217],
    +          [ 0.2820, -0.0205, -0.2777,  0.3755],
    +          [-0.2490,  0.2613,  0.4237,  0.4534]],
    +
    +         [[-0.0162,  0.6368,  0.0016,  0.1467],
    +          [ 0.6035, -0.1365,  0.6930,  0.6943],
    +          [ 0.2790,  0.3818, -0.0731,  0.0167],
    +          [ 0.6442,  0.3443,  0.4829, -0.0944],
    +          [ 0.2932,  0.6952,  0.5541,  0.5946]]],
    +
    +
    +        [[[ 0.6757,  0.5740,  0.3071,  0.4400],
    +          [-0.2344, -0.1056,  0.4773,  0.2432],
    +          [ 0.2595, -0.1528, -0.0866,  0.6201],
    +          [ 0.0657,  0.1220,  0.4849,  0.4254],
    +          [ 0.3399, -0.1609,  0.3465,  0.2389]],
    +
    +         [[-0.0765,  0.0516,  0.0028,  0.4381],
    +          [ 0.5212, -0.2781, -0.0896, -0.0301],
    +          [ 0.6857,  0.3583,  0.5869,  0.3418],
    +          [ 0.3002,  0.5135,  0.6011,  0.6499],
    +          [-0.2807, -0.2888,  0.3965,  0.6585]],
    +
    +         [[-0.1368,  0.6677,  0.1439,  0.1434],
    +          [-0.1820,  0.1041, -0.1211,  0.6103],
    +          [ 0.5808,  0.4588,  0.4572,  0.3713],
    +          [ 0.2389, -0.1392,  0.1371, -0.1570],
    +          [ 0.2840,  0.1214, -0.0059,  0.5064]]]], device='mps:0')
    +tensor([[[ 1.0000, -0.6000,  0.6000,  1.0000],
    +         [-0.6000, -0.2000, -0.6000, -0.2000],
    +         [ 0.6000,  0.2000, -0.2000,  0.2000]],
    +
    +        [[ 0.2000, -0.6000, -0.2000,  1.0000],
    +         [ 0.2000, -0.2000,  0.2000,  0.2000],
    +         [ 0.2000,  0.2000, -0.2000,  0.2000]]], device='mps:0')
    +
    +
    +
    +
    output = _MPV(o, dim=2)
    +print(output)  # Should print: torch.Size([2, 3, 4])
    +
    +
    tensor([[[0.3496, 0.4376, 0.2162, 0.3810],
    +         [0.1975, 0.1395, 0.3109, 0.4218],
    +         [0.4550, 0.5145, 0.4329, 0.3631]],
    +
    +        [[0.3352, 0.3480, 0.4040, 0.3935],
    +         [0.5023, 0.3078, 0.3968, 0.5221],
    +         [0.3679, 0.3380, 0.2460, 0.4079]]], device='mps:0')
    +
    +
    +
    +
    output = _RSPV(o, dim=2)
    +print(output)  # Should print: torch.Size([2, 3, 4])
    +
    +
    tensor([[[ 1.0000, -0.0270,  0.9138,  1.0000],
    +         [-0.1286,  0.2568,  0.0630,  0.8654],
    +         [ 0.9823,  0.8756,  0.9190,  0.8779]],
    +
    +        [[ 0.7024,  0.2482,  0.8983,  1.0000],
    +         [ 0.6168,  0.2392,  0.8931,  0.9715],
    +         [ 0.5517,  0.8133,  0.7065,  0.8244]]], device='mps:0')
    +
    +
    +
    +
    output = _PPV(o, dim=2)
    +print(output)  # Should print: torch.Size([2, 3, 4])
    +
    +
    tensor([[[-0.3007, -1.0097, -0.6697, -0.2381],
    +         [-1.0466, -0.9316, -0.9705, -0.3738],
    +         [-0.2786, -0.2314, -0.3366, -0.4569]],
    +
    +        [[-0.5574, -0.8893, -0.3883, -0.2130],
    +         [-0.5401, -0.8574, -0.4009, -0.1767],
    +         [-0.6861, -0.5149, -0.7555, -0.4102]]], device='mps:0')
    +
    +
    +
    +

    source

    +
    +
    +

    MultiRocketFeaturesPlus

    +
    +
     MultiRocketFeaturesPlus (c_in, seq_len, num_features=10000,
    +                          max_dilations_per_kernel=32, kernel_size=9,
    +                          max_num_channels=9, max_num_kernels=84,
    +                          diff=False)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    MultiRocketBackbonePlus

    +
    +
     MultiRocketBackbonePlus (c_in, seq_len, num_features=50000,
    +                          max_dilations_per_kernel=32, kernel_size=9,
    +                          max_num_channels=None, max_num_kernels=84,
    +                          use_diff=True)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    MultiRocketPlus

    +
    +
     MultiRocketPlus (c_in, c_out, seq_len, d=None, num_features=50000,
    +                  max_dilations_per_kernel=32, kernel_size=9,
    +                  max_num_channels=None, max_num_kernels=84, use_bn=True,
    +                  fc_dropout=0, custom_head=None, zero_init=True,
    +                  use_diff=True)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    from tsai.imports import default_device
    +
    +
    +
    xb = torch.randn(16, 5, 20).to(default_device())
    +yb = torch.randint(0, 3, (16, 20)).to(default_device())
    +
    +model = MultiRocketPlus(5, 3, 20, d=None, use_diff=True).to(default_device())
    +output = model(xb)
    +assert output.shape == (16, 3)
    +output.shape
    +
    +
    torch.Size([16, 3])
    +
    +
    +
    +
    xb = torch.randn(16, 5, 20).to(default_device())
    +yb = torch.randint(0, 3, (16, 20)).to(default_device())
    +
    +model = MultiRocketPlus(5, 3, 20, d=None, use_diff=False).to(default_device())
    +output = model(xb)
    +assert output.shape == (16, 3)
    +output.shape
    +
    +
    torch.Size([16, 3])
    +
    +
    +
    +
    xb = torch.randn(16, 5, 20).to(default_device())
    +yb = torch.randint(0, 3, (16, 5, 20)).to(default_device())
    +
    +model = MultiRocketPlus(5, 3, 20, d=20, use_diff=True).to(default_device())
    +output = model(xb)
    +assert output.shape == (16, 20, 3)
    +output.shape
    +
    +
    torch.Size([16, 20, 3])
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.mwdn.html b/models.mwdn.html new file mode 100644 index 000000000..b937f2378 --- /dev/null +++ b/models.mwdn.html @@ -0,0 +1,1363 @@ + + + + + + + + + +tsai - mWDN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    mWDN

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    multilevel Wavelet Decomposition Network (mWDN)

    +
    +

    This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co

    +
    +

    source

    +
    +

    WaveBlock

    +
    +
     WaveBlock (c_in, c_out, seq_len, wavelet=None)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    mWDNPlus

    +
    +
     mWDNPlus (c_in, c_out, seq_len, d=None, levels=3, wavelet=None,
    +           base_model=None, base_arch=<class
    +           'tsai.models.InceptionTimePlus.InceptionTimePlus'>, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    mWDNBlocks

    +
    +
     mWDNBlocks (c_in, c_out, seq_len, levels=3, wavelet=None)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    mWDN

    +
    +
     mWDN (c_in, c_out, seq_len, levels=3, wavelet=None, base_arch=<class
    +       'tsai.models.InceptionTimePlus.InceptionTimePlus'>, **kwargs)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    from tsai.models.TSTPlus import TSTPlus
    +
    +
    +
    bs = 16
    +c_in = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, c_in, seq_len).to(default_device())
    +test_eq(mWDN(c_in, c_out, seq_len).to(xb.device)(xb).shape, [bs, c_out])
    +model = mWDNPlus(c_in, c_out, seq_len, fc_dropout=.5)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +model = mWDNPlus(c_in, c_out, seq_len, base_arch=TSTPlus, fc_dropout=.5)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +
    +
    +
    model.head, model.head_nf
    +
    +
    (Sequential(
    +   (0): GELU(approximate='none')
    +   (1): fastai.layers.Flatten(full=False)
    +   (2): LinBnDrop(
    +     (0): Dropout(p=0.5, inplace=False)
    +     (1): Linear(in_features=1536, out_features=2, bias=True)
    +   )
    + ),
    + 128)
    +
    +
    +
    +
    bs = 16
    +c_in = 3
    +seq_len = 12
    +d = 10
    +c_out = 2
    +xb = torch.rand(bs, c_in, seq_len).to(default_device())
    +model = mWDNPlus(c_in, c_out, seq_len, d=d)
    +test_eq(model.to(xb.device)(xb).shape, [bs, d, c_out])
    +
    +
    +
    bs = 16
    +c_in = 3
    +seq_len = 12
    +d = (5, 2)
    +c_out = 2
    +xb = torch.rand(bs, c_in, seq_len).to(default_device())
    +model = mWDNPlus(c_in, c_out, seq_len, d=d)
    +test_eq(model.to(xb.device)(xb).shape, [bs, *d, c_out])
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.omniscalecnn.html b/models.omniscalecnn.html new file mode 100644 index 000000000..94ddb716e --- /dev/null +++ b/models.omniscalecnn.html @@ -0,0 +1,1376 @@ + + + + + + + + + +tsai - OmniScaleCNN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    OmniScaleCNN

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co

    +
    +
    +

    source

    +
    +

    generate_layer_parameter_list

    +
    +
     generate_layer_parameter_list (start, end, layers, in_channel=1)
    +
    +
    +

    source

    +
    +
    +

    get_out_channel_number

    +
    +
     get_out_channel_number (paramenter_layer, in_channel, prime_list)
    +
    +
    +

    source

    +
    +
    +

    get_Prime_number_in_a_range

    +
    +
     get_Prime_number_in_a_range (start, end)
    +
    +
    +

    source

    +
    +
    +

    OmniScaleCNN

    +
    +
     OmniScaleCNN (c_in, c_out, seq_len, layers=[1024, 229376],
    +               few_shot=False)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    build_layer_with_layer_parameter

    +
    +
     build_layer_with_layer_parameter (layer_parameters)
    +
    +

    formerly build_layer_with_layer_parameter

    +
    +

    source

    +
    +
    +

    SampaddingConv1D_BN

    +
    +
     SampaddingConv1D_BN (in_channels, out_channels, kernel_size)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 16
    +c_in = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, c_in, seq_len)
    +m = create_model(OmniScaleCNN, c_in, c_out, seq_len)
    +test_eq(OmniScaleCNN(c_in, c_out, seq_len)(xb).shape, [bs, c_out])
    +m
    +
    +
    OmniScaleCNN(
    +  (net): Sequential(
    +    (0): build_layer_with_layer_parameter(
    +      (conv_list): ModuleList(
    +        (0): SampaddingConv1D_BN(
    +          (padding): ConstantPad1d(padding=(0, 0), value=0)
    +          (conv1d): Conv1d(3, 56, kernel_size=(1,), stride=(1,))
    +          (bn): BatchNorm1d(56, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +        (1): SampaddingConv1D_BN(
    +          (padding): ConstantPad1d(padding=(0, 1), value=0)
    +          (conv1d): Conv1d(3, 56, kernel_size=(2,), stride=(1,))
    +          (bn): BatchNorm1d(56, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +        (2): SampaddingConv1D_BN(
    +          (padding): ConstantPad1d(padding=(1, 1), value=0)
    +          (conv1d): Conv1d(3, 56, kernel_size=(3,), stride=(1,))
    +          (bn): BatchNorm1d(56, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +      )
    +    )
    +    (1): build_layer_with_layer_parameter(
    +      (conv_list): ModuleList(
    +        (0): SampaddingConv1D_BN(
    +          (padding): ConstantPad1d(padding=(0, 0), value=0)
    +          (conv1d): Conv1d(168, 227, kernel_size=(1,), stride=(1,))
    +          (bn): BatchNorm1d(227, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +        (1): SampaddingConv1D_BN(
    +          (padding): ConstantPad1d(padding=(0, 1), value=0)
    +          (conv1d): Conv1d(168, 227, kernel_size=(2,), stride=(1,))
    +          (bn): BatchNorm1d(227, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +        (2): SampaddingConv1D_BN(
    +          (padding): ConstantPad1d(padding=(1, 1), value=0)
    +          (conv1d): Conv1d(168, 227, kernel_size=(3,), stride=(1,))
    +          (bn): BatchNorm1d(227, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +      )
    +    )
    +    (2): build_layer_with_layer_parameter(
    +      (conv_list): ModuleList(
    +        (0): SampaddingConv1D_BN(
    +          (padding): ConstantPad1d(padding=(0, 0), value=0)
    +          (conv1d): Conv1d(681, 510, kernel_size=(1,), stride=(1,))
    +          (bn): BatchNorm1d(510, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +        (1): SampaddingConv1D_BN(
    +          (padding): ConstantPad1d(padding=(0, 1), value=0)
    +          (conv1d): Conv1d(681, 510, kernel_size=(2,), stride=(1,))
    +          (bn): BatchNorm1d(510, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        )
    +      )
    +    )
    +  )
    +  (gap): GAP1d(
    +    (gap): AdaptiveAvgPool1d(output_size=1)
    +    (flatten): Flatten(full=False)
    +  )
    +  (hidden): Linear(in_features=1020, out_features=2, bias=True)
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.patchtst.html b/models.patchtst.html new file mode 100644 index 000000000..b9ff2299c --- /dev/null +++ b/models.patchtst.html @@ -0,0 +1,1684 @@ + + + + + + + + + +tsai - PatchTST + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    PatchTST

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial PyTorch implementation of PatchTST created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on:

    +

    In this notebook, we are going to use a new state-of-the-art model called PatchTST (Nie et al, 2022) to create a long-term time series forecast.

    +

    Here are some paper details:

    +
      +
    • Nie, Y., Nguyen, N. H., Sinthong, P., & Kalagnanam, J. (2022). A Time Series is Worth 64 Words: Long-term Forecasting with Transformers. arXiv preprint arXiv:2211.14730.
    • +
    • Official implementation:: https://github.com/yuqinie98/PatchTST
    • +
    +
    @article{Yuqietal-2022-PatchTST,
    +  title={A Time Series is Worth 64 Words: Long-term Forecasting with Transformers},
    +  author={Yuqi Nie and 
    +          Nam H. Nguyen and 
    +          Phanwadee Sinthong and 
    +          Jayant Kalagnanam},
    +  journal={arXiv preprint arXiv:2211.14730},
    +  year={2022}
    +}
    +

    PatchTST has shown some impressive results across some of the most widely used long-term datasets for benchmarking:

    +
    +
    +

    +
    image.png
    +
    +
    +
    +

    source

    +
    +

    SeriesDecomposition

    +
    +
     SeriesDecomposition (kernel_size:int)
    +
    +

    Series decomposition block

    + + + + + + + + + + + + + + + +
    TypeDetails
    kernel_sizeintthe size of the window
    +
    +

    source

    +
    +
    +

    MovingAverage

    +
    +
     MovingAverage (kernel_size:int)
    +
    +

    Moving average block to highlight the trend of time series

    + + + + + + + + + + + + + + + +
    TypeDetails
    kernel_sizeintthe size of the window
    +
    +

    source

    +
    +
    +

    Flatten_Head

    +
    +
     Flatten_Head (individual, n_vars, nf, pred_dim)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    PatchTST

    +
    +
     PatchTST (c_in, c_out, seq_len, pred_dim=None, n_layers=2, n_heads=8,
    +           d_model=512, d_ff=2048, dropout=0.05, attn_dropout=0.0,
    +           patch_len=16, stride=8, padding_patch=True, revin=True,
    +           affine=False, individual=False, subtract_last=False,
    +           decomposition=False, kernel_size=25, activation='gelu',
    +           norm='BatchNorm', pre_norm=False, res_attention=True,
    +           store_attn=False)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    + + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool
    TypeDefaultDetails
    c_innumber of input channels
    c_outused for compatibility
    seq_leninput sequence length
    pred_dimNoneTypeNoneprediction sequence length
    n_layersint2number of encoder layers
    n_headsint8number of heads
    d_modelint512dimension of model
    d_ffint2048dimension of fully connected network (fcn)
    dropoutfloat0.05dropout applied to all linear layers in the encoder
    attn_dropoutfloat0.0dropout applied to the attention scores
    patch_lenint16patch_len
    strideint8stride
    padding_patchboolTrueflag to indicate if padded is added if necessary
    revinboolTrueRevIN
    affineboolFalseRevIN affine
    individualboolFalseindividual head
    subtract_lastboolFalsesubtract_last
    decompositionboolFalseapply decomposition
    kernel_sizeint25decomposition kernel size
    activationstrgeluactivation function of intermediate layer, relu or gelu.
    normstrBatchNormtype of normalization layer used in the encoder
    pre_normboolFalseflag to indicate if normalization is applied as the first step in the sublayers
    res_attentionboolTrueflag to indicate if Residual MultiheadAttention should be used
    store_attnboolFalsecan be used to visualize attention weights
    +
    +
    from fastcore.test import test_eq
    +from tsai.models.utils import count_parameters
    +
    +bs = 32
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 1
    +seq_len = 60
    +pred_dim = 20
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +
    +arch_config=dict(
    +        n_layers=3,  # number of encoder layers
    +        n_heads=16,  # number of heads
    +        d_model=128,  # dimension of model
    +        d_ff=256,  # dimension of fully connected network (fcn)
    +        attn_dropout=0.,
    +        dropout=0.2,  # dropout applied to all linear layers in the encoder
    +        patch_len=16,  # patch_len
    +        stride=8,  # stride
    +    )
    +
    +model = PatchTST(c_in, c_out, seq_len, pred_dim, **arch_config)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_in, pred_dim])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 418470
    +
    +
    +
    +
    +

    Test conversion to Torchscript

    +
    +
    import gc
    +import os
    +import torch
    +import torch.nn as nn
    +from fastcore.test import test_eq, test_close
    +
    +
    +bs = 1
    +new_bs = 8
    +c_in = 3
    +c_out = 1
    +seq_len = 96
    +pred_dim = 20
    +
    +# module
    +model = PatchTST(c_in, c_out, seq_len, pred_dim)
    +model = model.eval()
    +
    +# input data
    +inp = torch.rand(bs, c_in, seq_len)
    +new_inp = torch.rand(new_bs, c_in, seq_len)
    +
    +# original
    +try:
    +    output = model(inp)
    +    new_output = model(new_inp)
    +    print(f'{"original":10}: ok')
    +except:
    +    print(f'{"original":10}: failed')
    +
    +# tracing
    +try:
    +    traced_model = torch.jit.trace(model, inp)
    +    file_path = f"_test_traced_model.pt"
    +    torch.jit.save(traced_model, file_path)
    +    traced_model = torch.jit.load(file_path)
    +    test_eq(output, traced_model(inp))
    +    test_eq(new_output, traced_model(new_inp))
    +    os.remove(file_path)
    +    del traced_model
    +    gc.collect()
    +    print(f'{"tracing":10}: ok')
    +except:
    +    print(f'{"tracing":10}: failed')
    +
    +# scripting
    +try:
    +    scripted_model = torch.jit.script(model)
    +    file_path = f"_test_scripted_model.pt"
    +    torch.jit.save(scripted_model, file_path)
    +    scripted_model = torch.jit.load(file_path)
    +    test_eq(output, scripted_model(inp))
    +    test_eq(new_output, scripted_model(new_inp))
    +    os.remove(file_path)
    +    del scripted_model
    +    gc.collect()
    +    print(f'{"scripting":10}: ok')
    +except:
    +    print(f'{"scripting":10}: failed')
    +
    +
    original  : ok
    +tracing   : ok
    +scripting : failed
    +
    +
    +
    +
    +

    Test conversion to onnx

    +
    +
    try:
    +    import onnx
    +    import onnxruntime as ort
    +    
    +    try:
    +        file_path = "_model_cpu.onnx"
    +        torch.onnx.export(model.cpu(),               # model being run
    +                        inp,                       # model input (or a tuple for multiple inputs)
    +                        file_path,                 # where to save the model (can be a file or file-like object)
    +                        input_names = ['input'],   # the model's input names
    +                        output_names = ['output'], # the model's output names
    +                        dynamic_axes={
    +                            'input'  : {0 : 'batch_size'}, 
    +                            'output' : {0 : 'batch_size'}} # variable length axes
    +                        )
    +
    +
    +        # Load the model and check it's ok
    +        onnx_model = onnx.load(file_path)
    +        onnx.checker.check_model(onnx_model)
    +        del onnx_model
    +        gc.collect()
    +
    +        # New session
    +        ort_sess = ort.InferenceSession(file_path)
    +        output_onnx = ort_sess.run(None, {'input': inp.numpy()})[0]
    +        test_close(output.detach().numpy(), output_onnx)
    +        new_output_onnx = ort_sess.run(None, {'input': new_inp.numpy()})[0]
    +        test_close(new_output.detach().numpy(), new_output_onnx)
    +        os.remove(file_path)
    +        print(f'{"onnx":10}: ok')
    +    except:
    +        print(f'{"onnx":10}: failed')
    +
    +except ImportError:
    +    print('onnx and onnxruntime are not installed. Please install them to run this test')
    +
    +
    onnx and onnxruntime are not installed. Please install them to run this test
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.positional_encoders.html b/models.positional_encoders.html new file mode 100644 index 000000000..8d6ec48ed --- /dev/null +++ b/models.positional_encoders.html @@ -0,0 +1,1379 @@ + + + + + + + + + +tsai - Positional encoders + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Positional encoders

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This includes some variations of positional encoders used with Transformers.

    +
    +
    +

    Imports

    +
    +
    +

    Positional encoders

    +
    +

    source

    +
    +

    PositionalEncoding

    +
    +
     PositionalEncoding (q_len, d_model, normalize=True)
    +
    +
    +
    pe = PositionalEncoding(1000, 512).detach().cpu().numpy()
    +plt.pcolormesh(pe, cmap='viridis')
    +plt.title('PositionalEncoding')
    +plt.colorbar()
    +plt.show()
    +pe.mean(), pe.std(), pe.min(), pe.max(), pe.shape
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    Coord2dPosEncoding

    +
    +
     Coord2dPosEncoding (q_len, d_model, exponential=False, normalize=True,
    +                     eps=0.001, verbose=False)
    +
    +
    +
    cpe = Coord2dPosEncoding(1000, 512, exponential=True, normalize=True).cpu().numpy()
    +plt.pcolormesh(cpe, cmap='viridis')
    +plt.title('Coord2dPosEncoding')
    +plt.colorbar()
    +plt.show()
    +plt.plot(cpe.mean(0))
    +plt.show()
    +plt.plot(cpe.mean(1))
    +plt.show()
    +cpe.mean(), cpe.std(), cpe.min(), cpe.max()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    Coord1dPosEncoding

    +
    +
     Coord1dPosEncoding (q_len, exponential=False, normalize=True)
    +
    +
    +
    cpe = Coord1dPosEncoding(1000, exponential=True, normalize=True).detach().cpu().numpy()
    +plt.pcolormesh(cpe, cmap='viridis')
    +plt.title('Coord1dPosEncoding')
    +plt.colorbar()
    +plt.show()
    +plt.plot(cpe.mean(1))
    +plt.show()
    +cpe.mean(), cpe.std(), cpe.min(), cpe.max(), cpe.shape
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    cpe = Coord1dPosEncoding(1000, exponential=True, normalize=True).detach().cpu().numpy()
    +plt.pcolormesh(cpe, cmap='viridis')
    +plt.title('Coord1dPosEncoding')
    +plt.colorbar()
    +plt.show()
    +plt.plot(cpe.mean(1))
    +plt.show()
    +cpe.mean(), cpe.std(), cpe.min(), cpe.max()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    + + +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.rescnn.html b/models.rescnn.html new file mode 100644 index 000000000..2c00f141f --- /dev/null +++ b/models.rescnn.html @@ -0,0 +1,1342 @@ + + + + + + + + + +tsai - ResCNN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    ResCNN

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is an unofficial PyTorch implementation by Ignacio Oguiza - oguiza@timeseriesAI.co

    +
    +
    +
    from tsai.models.utils import *
    +
    +
    +

    source

    +
    +

    ResCNN

    +
    +
     ResCNN (c_in, c_out, coord=False, separable=False, zero_norm=False)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    xb = torch.rand(16, 3, 10)
    +test_eq(ResCNN(3,2,coord=True, separable=True)(xb).shape, [xb.shape[0], 2])
    +test_eq(count_parameters(ResCNN(3,2)), 257283)
    +
    +
    +
    ResCNN(3,2,coord=True, separable=True)
    +
    +
    ResCNN(
    +  (block1): _ResCNNBlock(
    +    (convblock1): ConvBlock(
    +      (0): AddCoords1d()
    +      (1): SeparableConv1d(
    +        (depthwise_conv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), groups=4, bias=False)
    +        (pointwise_conv): Conv1d(4, 64, kernel_size=(1,), stride=(1,), bias=False)
    +      )
    +      (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (3): ReLU()
    +    )
    +    (convblock2): ConvBlock(
    +      (0): AddCoords1d()
    +      (1): SeparableConv1d(
    +        (depthwise_conv): Conv1d(65, 65, kernel_size=(5,), stride=(1,), padding=(2,), groups=65, bias=False)
    +        (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)
    +      )
    +      (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (3): ReLU()
    +    )
    +    (convblock3): ConvBlock(
    +      (0): AddCoords1d()
    +      (1): SeparableConv1d(
    +        (depthwise_conv): Conv1d(65, 65, kernel_size=(3,), stride=(1,), padding=(1,), groups=65, bias=False)
    +        (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)
    +      )
    +      (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    )
    +    (shortcut): ConvBlock(
    +      (0): AddCoords1d()
    +      (1): Conv1d(4, 64, kernel_size=(1,), stride=(1,), bias=False)
    +      (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    )
    +    (add): Add
    +    (act): ReLU()
    +  )
    +  (block2): ConvBlock(
    +    (0): AddCoords1d()
    +    (1): SeparableConv1d(
    +      (depthwise_conv): Conv1d(65, 65, kernel_size=(3,), stride=(1,), padding=(1,), groups=65, bias=False)
    +      (pointwise_conv): Conv1d(65, 128, kernel_size=(1,), stride=(1,), bias=False)
    +    )
    +    (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (3): LeakyReLU(negative_slope=0.2)
    +  )
    +  (block3): ConvBlock(
    +    (0): AddCoords1d()
    +    (1): SeparableConv1d(
    +      (depthwise_conv): Conv1d(129, 129, kernel_size=(3,), stride=(1,), padding=(1,), groups=129, bias=False)
    +      (pointwise_conv): Conv1d(129, 256, kernel_size=(1,), stride=(1,), bias=False)
    +    )
    +    (2): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (3): PReLU(num_parameters=1)
    +  )
    +  (block4): ConvBlock(
    +    (0): AddCoords1d()
    +    (1): SeparableConv1d(
    +      (depthwise_conv): Conv1d(257, 257, kernel_size=(3,), stride=(1,), padding=(1,), groups=257, bias=False)
    +      (pointwise_conv): Conv1d(257, 128, kernel_size=(1,), stride=(1,), bias=False)
    +    )
    +    (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (3): ELU(alpha=0.3)
    +  )
    +  (gap): AdaptiveAvgPool1d(output_size=1)
    +  (squeeze): Squeeze(dim=-1)
    +  (lin): Linear(in_features=128, out_features=2, bias=True)
    +)
    +
    +
    +
    +
    check_weight(ResCNN(3,2, zero_norm=True), is_bn)
    +
    +
    (array([1., 1., 0., 1., 1., 1., 1.], dtype=float32),
    + array([0., 0., 0., 0., 0., 0., 0.], dtype=float32))
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.resnet.html b/models.resnet.html new file mode 100644 index 000000000..eb691d209 --- /dev/null +++ b/models.resnet.html @@ -0,0 +1,1343 @@ + + + + + + + + + +tsai - ResNet + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    ResNet

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co

    +
    +
    +

    source

    +
    +

    ResNet

    +
    +
     ResNet (c_in, c_out)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    ResBlock

    +
    +
     ResBlock (ni, nf, kss=[7, 5, 3])
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    xb = torch.rand(2, 3, 4)
    +test_eq(ResNet(3,2)(xb).shape, [xb.shape[0], 2])
    +test_eq(count_parameters(ResNet(3, 2)), 479490) # for (3,2)
    +
    +
    +
    ResNet(3,2)
    +
    +
    ResNet(
    +  (resblock1): ResBlock(
    +    (convblock1): ConvBlock(
    +      (0): Conv1d(3, 64, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    +      (1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (convblock2): ConvBlock(
    +      (0): Conv1d(64, 64, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)
    +      (1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (convblock3): ConvBlock(
    +      (0): Conv1d(64, 64, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    +      (1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    )
    +    (shortcut): ConvBlock(
    +      (0): Conv1d(3, 64, kernel_size=(1,), stride=(1,), bias=False)
    +      (1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    )
    +    (add): Add
    +    (act): ReLU()
    +  )
    +  (resblock2): ResBlock(
    +    (convblock1): ConvBlock(
    +      (0): Conv1d(64, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (convblock2): ConvBlock(
    +      (0): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (convblock3): ConvBlock(
    +      (0): Conv1d(128, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    )
    +    (shortcut): ConvBlock(
    +      (0): Conv1d(64, 128, kernel_size=(1,), stride=(1,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    )
    +    (add): Add
    +    (act): ReLU()
    +  )
    +  (resblock3): ResBlock(
    +    (convblock1): ConvBlock(
    +      (0): Conv1d(128, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (convblock2): ConvBlock(
    +      (0): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (convblock3): ConvBlock(
    +      (0): Conv1d(128, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    )
    +    (shortcut): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (add): Add
    +    (act): ReLU()
    +  )
    +  (gap): AdaptiveAvgPool1d(output_size=1)
    +  (squeeze): Squeeze(dim=-1)
    +  (fc): Linear(in_features=128, out_features=2, bias=True)
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.resnetplus.html b/models.resnetplus.html new file mode 100644 index 000000000..967547ec8 --- /dev/null +++ b/models.resnetplus.html @@ -0,0 +1,1433 @@ + + + + + + + + + +tsai - ResNetPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    ResNetPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co

    +
    +
    +

    source

    +
    +

    ResNetPlus

    +
    +
     ResNetPlus (c_in, c_out, seq_len=None, nf=64, sa=False, se=None,
    +             fc_dropout=0.0, concat_pool=False, flatten=False,
    +             custom_head=None, y_range=None, ks=[7, 5, 3], coord=False,
    +             separable=False, bn_1st=True, zero_norm=False, act=<class
    +             'torch.nn.modules.activation.ReLU'>, act_kwargs={})
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    ResBlockPlus

    +
    +
     ResBlockPlus (ni, nf, ks=[7, 5, 3], coord=False, separable=False,
    +               bn_1st=True, zero_norm=False, sa=False, se=None, act=<class
    +               'torch.nn.modules.activation.ReLU'>, act_kwargs={})
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    from tsai.models.layers import Swish
    +
    +
    +
    xb = torch.rand(2, 3, 4)
    +test_eq(ResNetPlus(3,2)(xb).shape, [xb.shape[0], 2])
    +test_eq(ResNetPlus(3,2,coord=True, separable=True, bn_1st=False, zero_norm=True, act=Swish, act_kwargs={}, fc_dropout=0.5)(xb).shape, [xb.shape[0], 2])
    +test_eq(count_parameters(ResNetPlus(3, 2)), 479490) # for (3,2)
    +
    +
    +
    from tsai.models.ResNet import *
    +
    +
    +
    test_eq(count_parameters(ResNet(3, 2)), count_parameters(ResNetPlus(3, 2))) # for (3,2)
    +
    +
    +
    m = ResNetPlus(3, 2, zero_norm=True, coord=True, separable=True)
    +print('n_params:', count_parameters(m))
    +print(m)
    +print(check_weight(m, is_bn)[0])
    +
    +
    n_params: 114820
    +ResNetPlus(
    +  (backbone): Sequential(
    +    (0): ResBlockPlus(
    +      (convblock1): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): SeparableConv1d(
    +          (depthwise_conv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), groups=4, bias=False)
    +          (pointwise_conv): Conv1d(4, 64, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (3): ReLU()
    +      )
    +      (convblock2): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): SeparableConv1d(
    +          (depthwise_conv): Conv1d(65, 65, kernel_size=(5,), stride=(1,), padding=(2,), groups=65, bias=False)
    +          (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (3): ReLU()
    +      )
    +      (convblock3): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): SeparableConv1d(
    +          (depthwise_conv): Conv1d(65, 65, kernel_size=(3,), stride=(1,), padding=(1,), groups=65, bias=False)
    +          (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +      (shortcut): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): Conv1d(4, 64, kernel_size=(1,), stride=(1,), bias=False)
    +        (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +      (add): Add
    +      (act): ReLU()
    +    )
    +    (1): ResBlockPlus(
    +      (convblock1): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): SeparableConv1d(
    +          (depthwise_conv): Conv1d(65, 65, kernel_size=(7,), stride=(1,), padding=(3,), groups=65, bias=False)
    +          (pointwise_conv): Conv1d(65, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (3): ReLU()
    +      )
    +      (convblock2): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): SeparableConv1d(
    +          (depthwise_conv): Conv1d(129, 129, kernel_size=(5,), stride=(1,), padding=(2,), groups=129, bias=False)
    +          (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (3): ReLU()
    +      )
    +      (convblock3): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): SeparableConv1d(
    +          (depthwise_conv): Conv1d(129, 129, kernel_size=(3,), stride=(1,), padding=(1,), groups=129, bias=False)
    +          (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +      (shortcut): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): Conv1d(65, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +      (add): Add
    +      (act): ReLU()
    +    )
    +    (2): ResBlockPlus(
    +      (convblock1): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): SeparableConv1d(
    +          (depthwise_conv): Conv1d(129, 129, kernel_size=(7,), stride=(1,), padding=(3,), groups=129, bias=False)
    +          (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (3): ReLU()
    +      )
    +      (convblock2): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): SeparableConv1d(
    +          (depthwise_conv): Conv1d(129, 129, kernel_size=(5,), stride=(1,), padding=(2,), groups=129, bias=False)
    +          (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +        (3): ReLU()
    +      )
    +      (convblock3): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): SeparableConv1d(
    +          (depthwise_conv): Conv1d(129, 129, kernel_size=(3,), stride=(1,), padding=(1,), groups=129, bias=False)
    +          (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +      (shortcut): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (add): Add
    +      (act): ReLU()
    +    )
    +  )
    +  (head): Sequential(
    +    (0): GAP1d(
    +      (gap): AdaptiveAvgPool1d(output_size=1)
    +      (flatten): Reshape(bs)
    +    )
    +    (1): Linear(in_features=128, out_features=2, bias=True)
    +  )
    +)
    +[1. 1. 0. 1. 1. 1. 0. 1. 1. 1. 0. 1.]
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.rnn.html b/models.rnn.html new file mode 100644 index 000000000..6dd7a14f0 --- /dev/null +++ b/models.rnn.html @@ -0,0 +1,1503 @@ + + + + + + + + + +tsai - RNNs + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    RNNs

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    These are RNN, LSTM and GRU PyTorch implementations created by Ignacio Oguiza - oguiza@timeseriesAI.co

    +
    +
    +

    source

    +
    +

    GRU

    +
    +
     GRU (c_in, c_out, hidden_size=100, n_layers=1, bias=True, rnn_dropout=0,
    +      bidirectional=False, fc_dropout=0.0, init_weights=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    LSTM

    +
    +
     LSTM (c_in, c_out, hidden_size=100, n_layers=1, bias=True, rnn_dropout=0,
    +       bidirectional=False, fc_dropout=0.0, init_weights=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    RNN

    +
    +
     RNN (c_in, c_out, hidden_size=100, n_layers=1, bias=True, rnn_dropout=0,
    +      bidirectional=False, fc_dropout=0.0, init_weights=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 16
    +c_in = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, c_in, seq_len)
    +test_eq(RNN(c_in, c_out, hidden_size=100, n_layers=2, bias=True, rnn_dropout=0.2, bidirectional=True, fc_dropout=0.5)(xb).shape, [bs, c_out])
    +test_eq(RNN(c_in, c_out)(xb).shape, [bs, c_out])
    +test_eq(RNN(c_in, c_out, hidden_size=100, n_layers=2, bias=True, rnn_dropout=0.2, bidirectional=True, fc_dropout=0.5)(xb).shape, [bs, c_out])
    +test_eq(LSTM(c_in, c_out)(xb).shape, [bs, c_out])
    +test_eq(GRU(c_in, c_out)(xb).shape, [bs, c_out])
    +
    +
    +
    from tsai.basics import *
    +
    +
    +
    dsid = 'NATOPS' 
    +bs = 16
    +X, y, splits = get_UCR_data(dsid, return_split=False)
    +tfms  = [None, [TSCategorize()]]
    +dsets = TSDatasets(X, y, tfms=tfms, splits=splits)
    +dls   = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=bs, num_workers=0, shuffle=False)
    +model = LSTM(dls.vars, dls.c)
    +learn = Learner(dls, model,  metrics=accuracy)
    +learn.fit_one_cycle(1, 3e-3)
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    01.7434401.6330680.36111100:01
    +
    +
    +
    +
    m = RNN(c_in, c_out, hidden_size=100,n_layers=2,bidirectional=True,rnn_dropout=.5,fc_dropout=.5)
    +print(m)
    +print(count_parameters(m))
    +m(xb).shape
    +
    +
    RNN(
    +  (rnn): RNN(3, 100, num_layers=2, batch_first=True, dropout=0.5, bidirectional=True)
    +  (dropout): Dropout(p=0.5, inplace=False)
    +  (fc): Linear(in_features=200, out_features=2, bias=True)
    +)
    +81802
    +
    +
    +
    torch.Size([16, 2])
    +
    +
    +
    +
    m = LSTM(c_in, c_out, hidden_size=100,n_layers=2,bidirectional=True,rnn_dropout=.5,fc_dropout=.5)
    +print(m)
    +print(count_parameters(m))
    +m(xb).shape
    +
    +
    LSTM(
    +  (rnn): LSTM(3, 100, num_layers=2, batch_first=True, dropout=0.5, bidirectional=True)
    +  (dropout): Dropout(p=0.5, inplace=False)
    +  (fc): Linear(in_features=200, out_features=2, bias=True)
    +)
    +326002
    +
    +
    +
    torch.Size([16, 2])
    +
    +
    +
    +
    m = GRU(c_in, c_out, hidden_size=100,n_layers=2,bidirectional=True,rnn_dropout=.5,fc_dropout=.5)
    +print(m)
    +print(count_parameters(m))
    +m(xb).shape
    +
    +
    GRU(
    +  (rnn): GRU(3, 100, num_layers=2, batch_first=True, dropout=0.5, bidirectional=True)
    +  (dropout): Dropout(p=0.5, inplace=False)
    +  (fc): Linear(in_features=200, out_features=2, bias=True)
    +)
    +244602
    +
    +
    +
    torch.Size([16, 2])
    +
    +
    +
    +
    +

    Converting a model to TorchScript

    +
    +
    model = LSTM(c_in, c_out, hidden_size=100, n_layers=2, bidirectional=True, rnn_dropout=.5, fc_dropout=.5)
    +model.eval()
    +inp = torch.rand(1, c_in, 50)
    +output = model(inp)
    +print(output)
    +
    +
    tensor([[-0.0287, -0.0105]], grad_fn=<AddmmBackward0>)
    +
    +
    +
    +

    Tracing

    +
    +
    # save to gpu, cpu or both
    +traced_cpu = torch.jit.trace(model.cpu(), inp)
    +print(traced_cpu)
    +torch.jit.save(traced_cpu, "cpu.pt")
    +
    +# load cpu or gpu model
    +traced_cpu = torch.jit.load("cpu.pt")
    +test_eq(traced_cpu(inp), output)
    +
    +!rm "cpu.pt"
    +
    +
    LSTM(
    +  original_name=LSTM
    +  (rnn): LSTM(original_name=LSTM)
    +  (dropout): Dropout(original_name=Dropout)
    +  (fc): Linear(original_name=Linear)
    +)
    +
    +
    +
    +
    +

    Scripting

    +
    +
    # save to gpu, cpu or both
    +scripted_cpu = torch.jit.script(model.cpu())
    +print(scripted_cpu)
    +torch.jit.save(scripted_cpu, "cpu.pt")
    +
    +# load cpu or gpu model
    +scripted_cpu = torch.jit.load("cpu.pt")
    +test_eq(scripted_cpu(inp), output)
    +
    +!rm "cpu.pt"
    +
    +
    RecursiveScriptModule(
    +  original_name=LSTM
    +  (rnn): RecursiveScriptModule(original_name=LSTM)
    +  (dropout): RecursiveScriptModule(original_name=Dropout)
    +  (fc): RecursiveScriptModule(original_name=Linear)
    +)
    +
    +
    +
    +
    +
    +

    Converting a model to ONNX

    +
    import onnx
    +
    +# Export the model
    +torch.onnx.export(model.cpu(),               # model being run
    +                  inp,                       # model input (or a tuple for multiple inputs)
    +                  "cpu.onnx",                # where to save the model (can be a file or file-like object)
    +                  export_params=True,        # store the trained parameter weights inside the model file
    +                  verbose=False,
    +                  opset_version=13,          # the ONNX version to export the model to
    +                  do_constant_folding=True,  # whether to execute constant folding for optimization
    +                  input_names = ['input'],   # the model's input names
    +                  output_names = ['output'], # the model's output names
    +                  dynamic_axes={
    +                      'input'  : {0 : 'batch_size'}, 
    +                      'output' : {0 : 'batch_size'}} # variable length axes
    +                 )
    +
    +# Load the model and check it's ok
    +onnx_model = onnx.load("cpu.onnx")
    +onnx.checker.check_model(onnx_model)
    +
    +# You can ignore the WARNINGS below
    +
    import onnxruntime as ort
    +
    +ort_sess = ort.InferenceSession('cpu.onnx')
    +out = ort_sess.run(None, {'input': inp.numpy()})
    +
    +# input & output names
    +input_name = ort_sess.get_inputs()[0].name
    +output_name = ort_sess.get_outputs()[0].name
    +
    +# input dimensions
    +input_dims = ort_sess.get_inputs()[0].shape
    +print(input_name, output_name, input_dims)
    +
    +test_close(out, output.detach().numpy())
    +!rm "cpu.onnx"
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.rnn_fcn.html b/models.rnn_fcn.html new file mode 100644 index 000000000..1466e4dc6 --- /dev/null +++ b/models.rnn_fcn.html @@ -0,0 +1,1380 @@ + + + + + + + + + +tsai - RNN_FCN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    RNN_FCN

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co

    +
    +
    +

    source

    +
    +

    MGRU_FCN

    +
    +
     MGRU_FCN (*args, se=16, **kwargs)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    MLSTM_FCN

    +
    +
     MLSTM_FCN (*args, se=16, **kwargs)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    MRNN_FCN

    +
    +
     MRNN_FCN (*args, se=16, **kwargs)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    GRU_FCN

    +
    +
     GRU_FCN (c_in, c_out, seq_len=None, hidden_size=100, rnn_layers=1,
    +          bias=True, cell_dropout=0, rnn_dropout=0.8, bidirectional=False,
    +          shuffle=True, fc_dropout=0.0, conv_layers=[128, 256, 128],
    +          kss=[7, 5, 3], se=0)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    LSTM_FCN

    +
    +
     LSTM_FCN (c_in, c_out, seq_len=None, hidden_size=100, rnn_layers=1,
    +           bias=True, cell_dropout=0, rnn_dropout=0.8,
    +           bidirectional=False, shuffle=True, fc_dropout=0.0,
    +           conv_layers=[128, 256, 128], kss=[7, 5, 3], se=0)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    RNN_FCN

    +
    +
     RNN_FCN (c_in, c_out, seq_len=None, hidden_size=100, rnn_layers=1,
    +          bias=True, cell_dropout=0, rnn_dropout=0.8, bidirectional=False,
    +          shuffle=True, fc_dropout=0.0, conv_layers=[128, 256, 128],
    +          kss=[7, 5, 3], se=0)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +test_eq(RNN_FCN(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])
    +test_eq(LSTM_FCN(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])
    +test_eq(MLSTM_FCN(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])
    +test_eq(GRU_FCN(n_vars, c_out, shuffle=False)(xb).shape, [bs, c_out])
    +test_eq(GRU_FCN(n_vars, c_out, seq_len, shuffle=False)(xb).shape, [bs, c_out])
    +
    +
    +
    LSTM_FCN(n_vars, seq_len, c_out, se=8)
    +
    +
    LSTM_FCN(
    +  (rnn): LSTM(2, 100, batch_first=True)
    +  (rnn_dropout): Dropout(p=0.8, inplace=False)
    +  (convblock1): ConvBlock(
    +    (0): Conv1d(3, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    +    (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (se1): SqueezeExciteBlock(
    +    (avg_pool): GAP1d(
    +      (gap): AdaptiveAvgPool1d(output_size=1)
    +      (flatten): Flatten(full=False)
    +    )
    +    (fc): Sequential(
    +      (0): Linear(in_features=128, out_features=16, bias=False)
    +      (1): ReLU()
    +      (2): Linear(in_features=16, out_features=128, bias=False)
    +      (3): Sigmoid()
    +    )
    +  )
    +  (convblock2): ConvBlock(
    +    (0): Conv1d(128, 256, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)
    +    (1): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (se2): SqueezeExciteBlock(
    +    (avg_pool): GAP1d(
    +      (gap): AdaptiveAvgPool1d(output_size=1)
    +      (flatten): Flatten(full=False)
    +    )
    +    (fc): Sequential(
    +      (0): Linear(in_features=256, out_features=32, bias=False)
    +      (1): ReLU()
    +      (2): Linear(in_features=32, out_features=256, bias=False)
    +      (3): Sigmoid()
    +    )
    +  )
    +  (convblock3): ConvBlock(
    +    (0): Conv1d(256, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    +    (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (gap): GAP1d(
    +    (gap): AdaptiveAvgPool1d(output_size=1)
    +    (flatten): Flatten(full=False)
    +  )
    +  (concat): Concat(dim=1)
    +  (fc): Linear(in_features=228, out_features=12, bias=True)
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.rnn_fcnplus.html b/models.rnn_fcnplus.html new file mode 100644 index 000000000..d35ba6a94 --- /dev/null +++ b/models.rnn_fcnplus.html @@ -0,0 +1,1569 @@ + + + + + + + + + +tsai - RNN_FCNPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    RNN_FCNPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is an unofficial PyTorch implementation by Ignacio Oguiza - oguiza@timeseriesAI.co

    +
    +
    +

    source

    +
    +

    MGRU_FCNPlus

    +
    +
     MGRU_FCNPlus (*args, se=16, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    MLSTM_FCNPlus

    +
    +
     MLSTM_FCNPlus (*args, se=16, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    MRNN_FCNPlus

    +
    +
     MRNN_FCNPlus (*args, se=16, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    GRU_FCNPlus

    +
    +
     GRU_FCNPlus (c_in, c_out, seq_len=None, d=None, hidden_size=100,
    +              rnn_layers=1, bias=True, cell_dropout=0, rnn_dropout=0.8,
    +              bidirectional=False, shuffle=True, fc_dropout=0.0,
    +              use_bn=False, conv_layers=[128, 256, 128], kss=[7, 5, 3],
    +              se=0, custom_head=None)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    LSTM_FCNPlus

    +
    +
     LSTM_FCNPlus (c_in, c_out, seq_len=None, d=None, hidden_size=100,
    +               rnn_layers=1, bias=True, cell_dropout=0, rnn_dropout=0.8,
    +               bidirectional=False, shuffle=True, fc_dropout=0.0,
    +               use_bn=False, conv_layers=[128, 256, 128], kss=[7, 5, 3],
    +               se=0, custom_head=None)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    RNN_FCNPlus

    +
    +
     RNN_FCNPlus (c_in, c_out, seq_len=None, d=None, hidden_size=100,
    +              rnn_layers=1, bias=True, cell_dropout=0, rnn_dropout=0.8,
    +              bidirectional=False, shuffle=True, fc_dropout=0.0,
    +              use_bn=False, conv_layers=[128, 256, 128], kss=[7, 5, 3],
    +              se=0, custom_head=None)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    from tsai.models.utils import count_parameters
    +from tsai.models.RNN_FCN import *
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +test_eq(RNN_FCNPlus(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])
    +test_eq(LSTM_FCNPlus(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])
    +test_eq(MLSTM_FCNPlus(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])
    +test_eq(GRU_FCNPlus(n_vars, c_out, shuffle=False)(xb).shape, [bs, c_out])
    +test_eq(GRU_FCNPlus(n_vars, c_out, seq_len, shuffle=False)(xb).shape, [bs, c_out])
    +test_eq(count_parameters(LSTM_FCNPlus(n_vars, c_out, seq_len)), count_parameters(LSTM_FCN(n_vars, c_out, seq_len)))
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +custom_head = nn.Linear(228, c_out)
    +test_eq(RNN_FCNPlus(n_vars, c_out, seq_len, custom_head=custom_head)(xb).shape, [bs, c_out])
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 12
    +d = 10
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +test_eq(RNN_FCNPlus(n_vars, c_out, seq_len, d=d)(xb).shape, [bs, d, c_out])
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 12
    +d = (5, 3)
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +test_eq(RNN_FCNPlus(n_vars, c_out, seq_len, d=d)(xb).shape, [bs, *d, c_out])
    +
    +
    +
    LSTM_FCNPlus(n_vars, seq_len, c_out, se=8)
    +
    +
    LSTM_FCNPlus(
    +  (backbone): _RNN_FCN_Base_Backbone(
    +    (rnn): LSTM(2, 100, batch_first=True)
    +    (rnn_dropout): Dropout(p=0.8, inplace=False)
    +    (convblock1): ConvBlock(
    +      (0): Conv1d(3, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (se1): SqueezeExciteBlock(
    +      (avg_pool): GAP1d(
    +        (gap): AdaptiveAvgPool1d(output_size=1)
    +        (flatten): Reshape(bs)
    +      )
    +      (fc): Sequential(
    +        (0): Linear(in_features=128, out_features=16, bias=False)
    +        (1): ReLU()
    +        (2): Linear(in_features=16, out_features=128, bias=False)
    +        (3): Sigmoid()
    +      )
    +    )
    +    (convblock2): ConvBlock(
    +      (0): Conv1d(128, 256, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)
    +      (1): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (se2): SqueezeExciteBlock(
    +      (avg_pool): GAP1d(
    +        (gap): AdaptiveAvgPool1d(output_size=1)
    +        (flatten): Reshape(bs)
    +      )
    +      (fc): Sequential(
    +        (0): Linear(in_features=256, out_features=32, bias=False)
    +        (1): ReLU()
    +        (2): Linear(in_features=32, out_features=256, bias=False)
    +        (3): Sigmoid()
    +      )
    +    )
    +    (convblock3): ConvBlock(
    +      (0): Conv1d(256, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (gap): GAP1d(
    +      (gap): AdaptiveAvgPool1d(output_size=1)
    +      (flatten): Reshape(bs)
    +    )
    +    (concat): Concat(dim=1)
    +  )
    +  (head): Sequential(
    +    (0): Linear(in_features=228, out_features=12, bias=True)
    +  )
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.rnnattention.html b/models.rnnattention.html new file mode 100644 index 000000000..71c0fc5d6 --- /dev/null +++ b/models.rnnattention.html @@ -0,0 +1,1416 @@ + + + + + + + + + +tsai - RNNAttention + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    RNNAttention

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an custom PyTorch implementation by @yangtzech, based on TST implementation of Ignacio Oguiza.

    +
    +

    Arguments

    +

    Usual values are the ones that appear in the “Attention is all you need” and “A Transformer-based Framework for Multivariate Time Series Representation Learning” papers. And some parameters are necessary for the RNN part.

    +

    The default values are the ones selected as a default configuration in the latter.

    +
      +
    • c_in: the number of features (aka variables, dimensions, channels) in the time series dataset. dls.var
    • +
    • c_out: the number of target classes. dls.c
    • +
    • seq_len: number of time steps in the time series. dls.len
    • +
    • hidden_size: the number of features in the hidden state in the RNN model. Default: 128.
    • +
    • rnn_layers: the number of recurrent layers of the RNN model. Default: 1.
    • +
    • bias: If False, then the layer does not use bias weights b_ih and b_hh. Default: True
    • +
    • rnn_dropout: If non-zero, introduces a Dropout layer on the outputs of each RNN layer except the last layer, with dropout probability equal to :attr:rnn_dropout. Default: 0
    • +
    • bidirectional: If True, becomes a bidirectional RNN. Default: False
    • +
    • n_heads: parallel attention heads. Usual values: 8-16. Default: 16.
    • +
    • d_k: size of the learned linear projection of queries and keys in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.
    • +
    • d_v: size of the learned linear projection of values in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.
    • +
    • d_ff: the dimension of the feedforward network model. Usual values: 256-4096. Default: 256.
    • +
    • encoder_dropout: amount of residual dropout applied in the encoder. Usual values: 0.-0.3. Default: 0.1.
    • +
    • act: the activation function of intermediate layer, relu or gelu. Default: ‘gelu’.
    • +
    • encoder_layers: the number of sub-encoder-layers in the encoder. Usual values: 2-8. Default: 3.
    • +
    • fc_dropout: dropout applied to the final fully connected layer. Usual values: 0.-0.8. Default: 0.
    • +
    • y_range: range of possible y values (used in regression tasks). Default: None
    • +
    • kwargs: nn.Conv1d kwargs. If not {}, a nn.Conv1d with those kwargs will be applied to original time series.
    • +
    +
    +
    +

    Imports

    +
    +
    +

    RNNAttention

    +
    +
    t = torch.rand(16, 50, 128)
    +output, attn = _MultiHeadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)(t, t, t)
    +output.shape, attn.shape
    +
    +
    (torch.Size([16, 50, 128]), torch.Size([16, 3, 50, 50]))
    +
    +
    +
    +
    t = torch.rand(16, 50, 128)
    +output = _TSTEncoderLayer(q_len=50, d_model=128, n_heads=3, d_k=None, d_v=None, d_ff=512, dropout=0.1, activation='gelu')(t)
    +output.shape
    +
    +
    torch.Size([16, 50, 128])
    +
    +
    +
    +

    source

    +
    +

    GRUAttention

    +
    +
     GRUAttention (c_in:int, c_out:int, seq_len:int, hidden_size=128,
    +               rnn_layers=1, bias=True, rnn_dropout=0,
    +               bidirectional=False, encoder_layers:int=3, n_heads:int=16,
    +               d_k:Optional[int]=None, d_v:Optional[int]=None,
    +               d_ff:int=256, encoder_dropout:float=0.1, act:str='gelu',
    +               fc_dropout:float=0.0, y_range:Optional[tuple]=None,
    +               verbose:bool=False, custom_head=None)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    LSTMAttention

    +
    +
     LSTMAttention (c_in:int, c_out:int, seq_len:int, hidden_size=128,
    +                rnn_layers=1, bias=True, rnn_dropout=0,
    +                bidirectional=False, encoder_layers:int=3, n_heads:int=16,
    +                d_k:Optional[int]=None, d_v:Optional[int]=None,
    +                d_ff:int=256, encoder_dropout:float=0.1, act:str='gelu',
    +                fc_dropout:float=0.0, y_range:Optional[tuple]=None,
    +                verbose:bool=False, custom_head=None)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    RNNAttention

    +
    +
     RNNAttention (c_in:int, c_out:int, seq_len:int, hidden_size=128,
    +               rnn_layers=1, bias=True, rnn_dropout=0,
    +               bidirectional=False, encoder_layers:int=3, n_heads:int=16,
    +               d_k:Optional[int]=None, d_v:Optional[int]=None,
    +               d_ff:int=256, encoder_dropout:float=0.1, act:str='gelu',
    +               fc_dropout:float=0.0, y_range:Optional[tuple]=None,
    +               verbose:bool=False, custom_head=None)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 32
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 500
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +
    +# standardize by channel by_var based on the training set
    +xb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)
    +
    +# Settings
    +hidden_size = 128
    +rnn_layers=1
    +bias=True
    +rnn_dropout=0
    +bidirectional=False
    +encoder_layers=3
    +n_heads = 16
    +d_k = d_v = None # if None --> d_model // n_heads
    +d_ff = 256
    +encoder_dropout = 0.1
    +act = "gelu"
    +fc_dropout = 0.1
    +kwargs = {}
    +
    +model = RNNAttention(c_in, c_out, seq_len, hidden_size=hidden_size, rnn_layers=rnn_layers, bias=bias, rnn_dropout=rnn_dropout, bidirectional=bidirectional,
    +            encoder_layers=encoder_layers, n_heads=n_heads,
    +            d_k=d_k, d_v=d_v, d_ff=d_ff, encoder_dropout=encoder_dropout, act=act, 
    +            fc_dropout=fc_dropout, **kwargs)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 541698
    +
    +
    +
    +
    bs = 32
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 60
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +
    +# standardize by channel by_var based on the training set
    +xb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)
    +
    +# Settings
    +hidden_size = 128
    +rnn_layers=1
    +bias=True
    +rnn_dropout=0
    +bidirectional=False
    +encoder_layers=3
    +n_heads = 16
    +d_k = d_v = None # if None --> d_model // n_heads
    +d_ff = 256
    +encoder_dropout = 0.1
    +act = "gelu"
    +fc_dropout = 0.1
    +kwargs = {}
    +# kwargs = dict(kernel_size=5, padding=2)
    +
    +model = RNNAttention(c_in, c_out, seq_len, hidden_size=hidden_size, rnn_layers=rnn_layers, bias=bias, rnn_dropout=rnn_dropout, bidirectional=bidirectional,
    +            encoder_layers=encoder_layers, n_heads=n_heads,
    +            d_k=d_k, d_v=d_v, d_ff=d_ff, encoder_dropout=encoder_dropout, act=act, 
    +            fc_dropout=fc_dropout, **kwargs)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 429058
    +
    +
    + + +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.rnnattentionplus.html b/models.rnnattentionplus.html new file mode 100644 index 000000000..987ee8216 --- /dev/null +++ b/models.rnnattentionplus.html @@ -0,0 +1,1958 @@ + + + + + + + + + +tsai - RNNAttentionPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    RNNAttentionPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an custom PyTorch implementation by @yangtzech, based on TST implementation of Ignacio Oguiza.

    +
    +

    Arguments

    +

    Usual values are the ones that appear in the “Attention is all you need” and “A Transformer-based Framework for Multivariate Time Series Representation Learning” papers. And some parameters are necessary for the RNN part.

    +

    The default values are the ones selected as a default configuration in the latter.

    +
      +
    • c_in: the number of features (aka variables, dimensions, channels) in the time series dataset. dls.var
    • +
    • c_out: the number of target classes. dls.c
    • +
    • seq_len: number of time steps in the time series. dls.len
    • +
    • hidden_size: the number of features in the hidden state in the RNN model. Default: 128.
    • +
    • rnn_layers: the number of recurrent layers of the RNN model. Default: 1.
    • +
    • bias: If False, then the layer does not use bias weights b_ih and b_hh. Default: True
    • +
    • rnn_dropout: If non-zero, introduces a Dropout layer on the outputs of each RNN layer except the last layer, with dropout probability equal to :attr:rnn_dropout. Default: 0
    • +
    • bidirectional: If True, becomes a bidirectional RNN. Default: False
    • +
    • n_heads: parallel attention heads. Usual values: 8-16. Default: 16.
    • +
    • d_k: size of the learned linear projection of queries and keys in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.
    • +
    • d_v: size of the learned linear projection of values in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.
    • +
    • d_ff: the dimension of the feedforward network model. Usual values: 256-4096. Default: 256.
    • +
    • encoder_dropout: amount of residual dropout applied in the encoder. Usual values: 0.-0.3. Default: 0.1.
    • +
    • act: the activation function of intermediate layer, relu or gelu. Default: ‘gelu’.
    • +
    • encoder_layers: the number of sub-encoder-layers in the encoder. Usual values: 2-8. Default: 3.
    • +
    • fc_dropout: dropout applied to the final fully connected layer. Usual values: 0.-0.8. Default: 0.
    • +
    • y_range: range of possible y values (used in regression tasks). Default: None
    • +
    +
    +
    +

    Imports

    +
    +
    +

    RNNAttentionPlus

    +
    +
    t = torch.rand(16, 50, 128)
    +output, attn = _MultiHeadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)(t, t, t)
    +output.shape, attn.shape
    +
    +
    (torch.Size([16, 50, 128]), torch.Size([16, 3, 50, 50]))
    +
    +
    +
    +
    t = torch.rand(16, 50, 128)
    +output = _TSTEncoderLayer(q_len=50, d_model=128, n_heads=3, d_k=None, d_v=None, d_ff=512, dropout=0.1, activation='gelu')(t)
    +output.shape
    +
    +
    torch.Size([16, 50, 128])
    +
    +
    +
    +

    source

    +
    +

    GRUAttentionPlus

    +
    +
     GRUAttentionPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,
    +                   hidden_size:int=128, rnn_layers:int=1, bias:bool=True,
    +                   rnn_dropout:float=0, bidirectional=False,
    +                   encoder_layers:int=3, n_heads:int=16,
    +                   d_k:Optional[int]=None, d_v:Optional[int]=None,
    +                   d_ff:int=256, encoder_dropout:float=0.1,
    +                   act:str='gelu', fc_dropout:float=0.0,
    +                   y_range:Optional[tuple]=None, custom_head=None,
    +                   use_bn:bool=True, flatten:bool=True)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inintthe number of features (aka variables, dimensions, channels) in the time series dataset.
    c_outintthe number of target classes.
    seq_lenintnumber of time steps in the time series.
    dtupleNoneoutput shape (excluding batch dimension).
    hidden_sizeint128the number of features in the hidden state h
    rnn_layersint1the number of recurrent layers of the RNN model.
    biasboolTrueIf False, then the layer does not use bias weights b_ih and b_hh.
    rnn_dropoutfloat0rnn dropout applied to the output of each RNN layer except the last layer.
    bidirectionalboolFalseIf True, becomes a bidirectional RNN. Default: False
    encoder_layersint3the number of sub-encoder-layers in the encoder.
    n_headsint16parallel attention heads.
    d_ktyping.Optional[int]Nonesize of the learned linear projection of queries and keys in the MHA.
    d_vtyping.Optional[int]Nonesize of the learned linear projection of values in the MHA.
    d_ffint256the dimension of the feedforward network model.
    encoder_dropoutfloat0.1amount of residual dropout applied in the encoder.
    actstrgeluthe activation function of intermediate layer, relu or gelu.
    fc_dropoutfloat0.0dropout applied to the final fully connected layer.
    y_rangetyping.Optional[tuple]Nonerange of possible y values (used in regression tasks).
    custom_headNoneTypeNonecustom head that will be applied to the model head (optional).
    use_bnboolTrueindicates if batchnorm will be applied to the model head.
    flattenboolTruethis will flatten the output of the encoder before applying the head if True.
    +
    +

    source

    +
    +
    +

    LSTMAttentionPlus

    +
    +
     LSTMAttentionPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,
    +                    hidden_size:int=128, rnn_layers:int=1, bias:bool=True,
    +                    rnn_dropout:float=0, bidirectional=False,
    +                    encoder_layers:int=3, n_heads:int=16,
    +                    d_k:Optional[int]=None, d_v:Optional[int]=None,
    +                    d_ff:int=256, encoder_dropout:float=0.1,
    +                    act:str='gelu', fc_dropout:float=0.0,
    +                    y_range:Optional[tuple]=None, custom_head=None,
    +                    use_bn:bool=True, flatten:bool=True)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inintthe number of features (aka variables, dimensions, channels) in the time series dataset.
    c_outintthe number of target classes.
    seq_lenintnumber of time steps in the time series.
    dtupleNoneoutput shape (excluding batch dimension).
    hidden_sizeint128the number of features in the hidden state h
    rnn_layersint1the number of recurrent layers of the RNN model.
    biasboolTrueIf False, then the layer does not use bias weights b_ih and b_hh.
    rnn_dropoutfloat0rnn dropout applied to the output of each RNN layer except the last layer.
    bidirectionalboolFalseIf True, becomes a bidirectional RNN. Default: False
    encoder_layersint3the number of sub-encoder-layers in the encoder.
    n_headsint16parallel attention heads.
    d_ktyping.Optional[int]Nonesize of the learned linear projection of queries and keys in the MHA.
    d_vtyping.Optional[int]Nonesize of the learned linear projection of values in the MHA.
    d_ffint256the dimension of the feedforward network model.
    encoder_dropoutfloat0.1amount of residual dropout applied in the encoder.
    actstrgeluthe activation function of intermediate layer, relu or gelu.
    fc_dropoutfloat0.0dropout applied to the final fully connected layer.
    y_rangetyping.Optional[tuple]Nonerange of possible y values (used in regression tasks).
    custom_headNoneTypeNonecustom head that will be applied to the model head (optional).
    use_bnboolTrueindicates if batchnorm will be applied to the model head.
    flattenboolTruethis will flatten the output of the encoder before applying the head if True.
    +
    +

    source

    +
    +
    +

    RNNAttentionPlus

    +
    +
     RNNAttentionPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,
    +                   hidden_size:int=128, rnn_layers:int=1, bias:bool=True,
    +                   rnn_dropout:float=0, bidirectional=False,
    +                   encoder_layers:int=3, n_heads:int=16,
    +                   d_k:Optional[int]=None, d_v:Optional[int]=None,
    +                   d_ff:int=256, encoder_dropout:float=0.1,
    +                   act:str='gelu', fc_dropout:float=0.0,
    +                   y_range:Optional[tuple]=None, custom_head=None,
    +                   use_bn:bool=True, flatten:bool=True)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inintthe number of features (aka variables, dimensions, channels) in the time series dataset.
    c_outintthe number of target classes.
    seq_lenintnumber of time steps in the time series.
    dtupleNoneoutput shape (excluding batch dimension).
    hidden_sizeint128the number of features in the hidden state h
    rnn_layersint1the number of recurrent layers of the RNN model.
    biasboolTrueIf False, then the layer does not use bias weights b_ih and b_hh.
    rnn_dropoutfloat0rnn dropout applied to the output of each RNN layer except the last layer.
    bidirectionalboolFalseIf True, becomes a bidirectional RNN. Default: False
    encoder_layersint3the number of sub-encoder-layers in the encoder.
    n_headsint16parallel attention heads.
    d_ktyping.Optional[int]Nonesize of the learned linear projection of queries and keys in the MHA.
    d_vtyping.Optional[int]Nonesize of the learned linear projection of values in the MHA.
    d_ffint256the dimension of the feedforward network model.
    encoder_dropoutfloat0.1amount of residual dropout applied in the encoder.
    actstrgeluthe activation function of intermediate layer, relu or gelu.
    fc_dropoutfloat0.0dropout applied to the final fully connected layer.
    y_rangetyping.Optional[tuple]Nonerange of possible y values (used in regression tasks).
    custom_headNoneTypeNonecustom head that will be applied to the model head (optional).
    use_bnboolTrueindicates if batchnorm will be applied to the model head.
    flattenboolTruethis will flatten the output of the encoder before applying the head if True.
    +
    +
    bs = 32
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 500
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +
    +# standardize by channel by_var based on the training set
    +xb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)
    +
    +# Settings
    +hidden_size = 128
    +rnn_layers=1
    +bias=True
    +rnn_dropout=0
    +bidirectional=False
    +encoder_layers=3
    +n_heads = 16
    +d_k = d_v = None # if None --> d_model // n_heads
    +d_ff = 256
    +encoder_dropout = 0.1
    +act = "gelu"
    +fc_dropout = 0.1
    +kwargs = {}
    +
    +model = RNNAttentionPlus(c_in, c_out, seq_len, hidden_size=hidden_size, rnn_layers=rnn_layers, bias=bias, rnn_dropout=rnn_dropout, bidirectional=bidirectional,
    +            encoder_layers=encoder_layers, n_heads=n_heads,
    +            d_k=d_k, d_v=d_v, d_ff=d_ff, encoder_dropout=encoder_dropout, act=act, 
    +            fc_dropout=fc_dropout, **kwargs)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 541698
    +
    +
    +
    +
    bs = 32
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 60
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +
    +# standardize by channel by_var based on the training set
    +xb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)
    +
    +# Settings
    +hidden_size = 128
    +rnn_layers=1
    +bias=True
    +rnn_dropout=0
    +bidirectional=False
    +encoder_layers=3
    +n_heads = 16
    +d_k = d_v = None # if None --> d_model // n_heads
    +d_ff = 256
    +encoder_dropout = 0.1
    +act = "gelu"
    +fc_dropout = 0.1
    +kwargs = {}
    +# kwargs = dict(kernel_size=5, padding=2)
    +
    +model = RNNAttentionPlus(c_in, c_out, seq_len, hidden_size=hidden_size, rnn_layers=rnn_layers, bias=bias, rnn_dropout=rnn_dropout, bidirectional=bidirectional,
    +            encoder_layers=encoder_layers, n_heads=n_heads,
    +            d_k=d_k, d_v=d_v, d_ff=d_ff, encoder_dropout=encoder_dropout, act=act, 
    +            fc_dropout=fc_dropout, **kwargs)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 429058
    +
    +
    +
    +
    bs = 32
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 60
    +d = 10
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +model = RNNAttentionPlus(c_in, c_out, seq_len, d=d)
    +test_eq(model.to(xb.device)(xb).shape, [bs, d, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 567572
    +
    +
    +
    +
    bs = 32
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 60
    +d = (3, 10)
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +model = RNNAttentionPlus(c_in, c_out, seq_len, d=d)
    +test_eq(model.to(xb.device)(xb).shape, [bs, *d, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 874812
    +
    +
    + + +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.rnnplus.html b/models.rnnplus.html new file mode 100644 index 000000000..b1c058c2a --- /dev/null +++ b/models.rnnplus.html @@ -0,0 +1,1728 @@ + + + + + + + + + +tsai - RNNPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    RNNPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    These are RNN, LSTM and GRU PyTorch implementations created by Ignacio Oguiza - oguiza@timeseriesAI.co

    +

    The idea of including a feature extractor to the RNN network comes from the solution developed by the UPSTAGE team (https://www.kaggle.com/songwonho, https://www.kaggle.com/limerobot and https://www.kaggle.com/jungikhyo). They finished in 3rd position in Kaggle’s Google Brain - Ventilator Pressure Prediction competition. They used a Conv1d + Stacked LSTM architecture.

    +
    +

    source

    +
    +

    GRUPlus

    +
    +
     GRUPlus (c_in, c_out, seq_len=None, hidden_size=[100], n_layers=1,
    +          bias=True, rnn_dropout=0, bidirectional=False,
    +          n_cat_embeds=None, cat_embed_dims=None, cat_padding_idxs=None,
    +          cat_pos=None, feature_extractor=None, fc_dropout=0.0,
    +          last_step=True, bn=False, custom_head=None, y_range=None,
    +          init_weights=True, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    LSTMPlus

    +
    +
     LSTMPlus (c_in, c_out, seq_len=None, hidden_size=[100], n_layers=1,
    +           bias=True, rnn_dropout=0, bidirectional=False,
    +           n_cat_embeds=None, cat_embed_dims=None, cat_padding_idxs=None,
    +           cat_pos=None, feature_extractor=None, fc_dropout=0.0,
    +           last_step=True, bn=False, custom_head=None, y_range=None,
    +           init_weights=True, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    RNNPlus

    +
    +
     RNNPlus (c_in, c_out, seq_len=None, hidden_size=[100], n_layers=1,
    +          bias=True, rnn_dropout=0, bidirectional=False,
    +          n_cat_embeds=None, cat_embed_dims=None, cat_padding_idxs=None,
    +          cat_pos=None, feature_extractor=None, fc_dropout=0.0,
    +          last_step=True, bn=False, custom_head=None, y_range=None,
    +          init_weights=True, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    bs = 16
    +c_in = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, c_in, seq_len)
    +test_eq(RNNPlus(c_in, c_out)(xb).shape, [bs, c_out])
    +test_eq(RNNPlus(c_in, c_out, hidden_size=100, n_layers=2, bias=True, rnn_dropout=0.2, bidirectional=True, fc_dropout=0.5)(xb).shape, 
    +        [bs, c_out])
    +test_eq(RNNPlus(c_in, c_out, hidden_size=[100, 50, 10], bias=True, rnn_dropout=0.2, bidirectional=True, fc_dropout=0.5)(xb).shape, 
    +        [bs, c_out])
    +test_eq(RNNPlus(c_in, c_out, hidden_size=[100], n_layers=2, bias=True, rnn_dropout=0.2, bidirectional=True, fc_dropout=0.5)(xb).shape, 
    +        [bs, c_out])
    +test_eq(LSTMPlus(c_in, c_out, hidden_size=100, n_layers=2, bias=True, rnn_dropout=0.2, bidirectional=True, fc_dropout=0.5)(xb).shape, 
    +        [bs, c_out])
    +test_eq(GRUPlus(c_in, c_out, hidden_size=100, n_layers=2, bias=True, rnn_dropout=0.2, bidirectional=True, fc_dropout=0.5)(xb).shape, 
    +        [bs, c_out])
    +test_eq(RNNPlus(c_in, c_out, seq_len, last_step=False)(xb).shape, [bs, c_out])
    +test_eq(RNNPlus(c_in, c_out, seq_len, last_step=False)(xb).shape, [bs, c_out])
    +test_eq(RNNPlus(c_in, c_out, seq_len, hidden_size=100, n_layers=2, bias=True, rnn_dropout=0.2, bidirectional=True, fc_dropout=0.5, 
    +                last_step=False)(xb).shape, 
    +        [bs, c_out])
    +test_eq(LSTMPlus(c_in, c_out, seq_len, last_step=False)(xb).shape, [bs, c_out])
    +test_eq(GRUPlus(c_in, c_out, seq_len, last_step=False)(xb).shape, [bs, c_out])
    +
    +
    +
    feature_extractor = MultiConv1d(c_in, kss=[1,3,5,7])
    +custom_head = nn.Sequential(Transpose(1,2), nn.Linear(8,8), nn.SELU(), nn.Linear(8, 1), Squeeze())
    +test_eq(LSTMPlus(c_in, c_out, seq_len, hidden_size=[32,16,8,4], bidirectional=True, 
    +                 feature_extractor=feature_extractor, custom_head=custom_head)(xb).shape, [bs, seq_len])
    +feature_extractor = MultiConv1d(c_in, kss=[1,3,5,7], keep_original=True)
    +custom_head = nn.Sequential(Transpose(1,2), nn.Linear(8,8), nn.SELU(), nn.Linear(8, 1), Squeeze())
    +test_eq(LSTMPlus(c_in, c_out, seq_len, hidden_size=[32,16,8,4], bidirectional=True, 
    +                 feature_extractor=feature_extractor, custom_head=custom_head)(xb).shape, [bs, seq_len])
    +
    +
    [W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.
    +
    +
    +
    +
    bs = 16
    +c_in = 3
    +seq_len = 12
    +c_out = 2
    +x1 = torch.rand(bs,1,seq_len)
    +x2 = torch.randint(0,3,(bs,1,seq_len))
    +x3 = torch.randint(0,5,(bs,1,seq_len))
    +xb = torch.cat([x1,x2,x3],1)
    +
    +custom_head = partial(create_mlp_head, fc_dropout=0.5)
    +test_eq(LSTMPlus(c_in, c_out, seq_len, last_step=False, custom_head=custom_head)(xb).shape, [bs, c_out])
    +custom_head = partial(create_pool_head, concat_pool=True, fc_dropout=0.5)
    +test_eq(LSTMPlus(c_in, c_out, seq_len, last_step=False, custom_head=custom_head)(xb).shape, [bs, c_out])
    +custom_head = partial(create_pool_plus_head, fc_dropout=0.5)
    +test_eq(LSTMPlus(c_in, c_out, seq_len, last_step=False, custom_head=custom_head)(xb).shape, [bs, c_out])
    +custom_head = partial(create_conv_head)
    +test_eq(LSTMPlus(c_in, c_out, seq_len, last_step=False, custom_head=custom_head)(xb).shape, [bs, c_out])
    +test_eq(LSTMPlus(c_in, c_out, seq_len, hidden_size=[100, 50], n_layers=2, bias=True, rnn_dropout=0.2, bidirectional=True)(xb).shape, 
    +        [bs, c_out])
    +
    +n_cat_embeds = [3, 5]
    +cat_pos = [1, 2]
    +custom_head = partial(create_conv_head)
    +m = LSTMPlus(c_in, c_out, seq_len, hidden_size=[100, 50], n_layers=2, bias=True, rnn_dropout=0.2, bidirectional=True, 
    +             n_cat_embeds=n_cat_embeds, cat_pos=cat_pos)
    +test_eq(m(xb).shape, [bs, c_out])
    +
    +
    +
    from tsai.data.all import *
    +from tsai.models.utils import *
    +
    +
    +
    dsid = 'NATOPS' 
    +bs = 16
    +X, y, splits = get_UCR_data(dsid, return_split=False)
    +tfms  = [None, [Categorize()]]
    +dls = get_ts_dls(X, y, tfms=tfms, splits=splits, bs=bs)
    +
    +
    +
    model = build_ts_model(LSTMPlus, dls=dls)
    +print(model[-1])
    +learn = Learner(dls, model,  metrics=accuracy)
    +learn.fit_one_cycle(1, 3e-3)
    +
    +
    Sequential(
    +  (0): LastStep()
    +  (1): Linear(in_features=100, out_features=6, bias=True)
    +)
    +
    +
    + + +
    +
    +
    +
    model = LSTMPlus(dls.vars, dls.c, dls.len, last_step=False)
    +learn = Learner(dls, model,  metrics=accuracy)
    +learn.fit_one_cycle(1, 3e-3)
    +
    + + +
    +
    + +
    + + 0.00% [0/1 00:00<?] +
    + + + + + + + + + + + + + + +
    epochtrain_lossvalid_lossaccuracytime
    +

    + +

    + + 0.00% [0/11 00:00<?] +
    + +
    +
    +
    +
    custom_head = partial(create_pool_head, concat_pool=True)
    +model = LSTMPlus(dls.vars, dls.c, dls.len, last_step=False, custom_head=custom_head)
    +learn = Learner(dls, model,  metrics=accuracy)
    +learn.fit_one_cycle(1, 3e-3)
    +
    +
    +
    custom_head = partial(create_pool_plus_head, concat_pool=True)
    +model = LSTMPlus(dls.vars, dls.c, dls.len, last_step=False, custom_head=custom_head)
    +learn = Learner(dls, model,  metrics=accuracy)
    +learn.fit_one_cycle(1, 3e-3)
    +
    + + +
    +
    +
    +
    m = RNNPlus(c_in, c_out, seq_len, hidden_size=100,n_layers=2,bidirectional=True,rnn_dropout=.5,fc_dropout=.5)
    +print(m)
    +print(count_parameters(m))
    +m(xb).shape
    +
    +
    RNNPlus(
    +  (backbone): _RNN_Backbone(
    +    (to_cat_embed): Identity()
    +    (feature_extractor): Identity()
    +    (rnn): Sequential(
    +      (0): RNN(3, 100, num_layers=2, batch_first=True, dropout=0.5, bidirectional=True)
    +      (1): LSTMOutput()
    +    )
    +    (transpose): Transpose(dims=-1, -2).contiguous()
    +  )
    +  (head): Sequential(
    +    (0): LastStep()
    +    (1): Dropout(p=0.5, inplace=False)
    +    (2): Linear(in_features=200, out_features=2, bias=True)
    +  )
    +)
    +81802
    +
    +
    +
    torch.Size([16, 2])
    +
    +
    +
    +
    m = LSTMPlus(c_in, c_out, seq_len, hidden_size=100,n_layers=2,bidirectional=True,rnn_dropout=.5,fc_dropout=.5)
    +print(m)
    +print(count_parameters(m))
    +m(xb).shape
    +
    +
    LSTMPlus(
    +  (backbone): _RNN_Backbone(
    +    (to_cat_embed): Identity()
    +    (feature_extractor): Identity()
    +    (rnn): Sequential(
    +      (0): LSTM(3, 100, num_layers=2, batch_first=True, dropout=0.5, bidirectional=True)
    +      (1): LSTMOutput()
    +    )
    +    (transpose): Transpose(dims=-1, -2).contiguous()
    +  )
    +  (head): Sequential(
    +    (0): LastStep()
    +    (1): Dropout(p=0.5, inplace=False)
    +    (2): Linear(in_features=200, out_features=2, bias=True)
    +  )
    +)
    +326002
    +
    +
    +
    torch.Size([16, 2])
    +
    +
    +
    +
    m = GRUPlus(c_in, c_out, seq_len, hidden_size=100,n_layers=2,bidirectional=True,rnn_dropout=.5,fc_dropout=.5)
    +print(m)
    +print(count_parameters(m))
    +m(xb).shape
    +
    +
    GRUPlus(
    +  (backbone): _RNN_Backbone(
    +    (to_cat_embed): Identity()
    +    (feature_extractor): Identity()
    +    (rnn): Sequential(
    +      (0): GRU(3, 100, num_layers=2, batch_first=True, dropout=0.5, bidirectional=True)
    +      (1): LSTMOutput()
    +    )
    +    (transpose): Transpose(dims=-1, -2).contiguous()
    +  )
    +  (head): Sequential(
    +    (0): LastStep()
    +    (1): Dropout(p=0.5, inplace=False)
    +    (2): Linear(in_features=200, out_features=2, bias=True)
    +  )
    +)
    +244602
    +
    +
    +
    torch.Size([16, 2])
    +
    +
    +
    +
    +

    Converting a model to TorchScript

    +
    +
    model = GRUPlus(c_in, c_out, hidden_size=100, n_layers=2, bidirectional=True, rnn_dropout=.5, fc_dropout=.5)
    +model.eval()
    +inp = torch.rand(1, c_in, 50)
    +output = model(inp)
    +print(output)
    +
    +
    tensor([[-0.0677, -0.0857]], grad_fn=<AddmmBackward0>)
    +
    +
    +
    +

    Tracing

    +
    +
    # save to gpu, cpu or both
    +traced_cpu = torch.jit.trace(model.cpu(), inp)
    +print(traced_cpu)
    +torch.jit.save(traced_cpu, "cpu.pt")
    +
    +# load cpu or gpu model
    +traced_cpu = torch.jit.load("cpu.pt")
    +test_eq(traced_cpu(inp), output)
    +
    +!rm "cpu.pt"
    +
    +
    GRUPlus(
    +  original_name=GRUPlus
    +  (backbone): _RNN_Backbone(
    +    original_name=_RNN_Backbone
    +    (to_cat_embed): Identity(original_name=Identity)
    +    (feature_extractor): Identity(original_name=Identity)
    +    (rnn): Sequential(
    +      original_name=Sequential
    +      (0): GRU(original_name=GRU)
    +      (1): LSTMOutput(original_name=LSTMOutput)
    +    )
    +    (transpose): Transpose(original_name=Transpose)
    +  )
    +  (head): Sequential(
    +    original_name=Sequential
    +    (0): LastStep(original_name=LastStep)
    +    (1): Dropout(original_name=Dropout)
    +    (2): Linear(original_name=Linear)
    +  )
    +)
    +
    +
    +
    +
    +
    +

    Converting a model to ONNX

    +
    import onnx
    +
    +torch.onnx.export(model.cpu(),               # model being run
    +                  inp,                       # model input (or a tuple for multiple inputs)
    +                  "cpu.onnx",                # where to save the model (can be a file or file-like object)
    +                  export_params=True,        # store the trained parameter weights inside the model file
    +                  verbose=False,
    +                  opset_version=13,          # the ONNX version to export the model to
    +                  do_constant_folding=True,  # whether to execute constant folding for optimization
    +                  input_names = ['input'],   # the model's input names
    +                  output_names = ['output'], # the model's output names
    +                  dynamic_axes={
    +                      'input'  : {0 : 'batch_size'}, 
    +                      'output' : {0 : 'batch_size'}} # variable length axes
    +                 )
    +
    +
    +onnx_model = onnx.load("cpu.onnx")           # Load the model and check it's ok
    +onnx.checker.check_model(onnx_model)
    +
    import onnxruntime as ort
    +
    +ort_sess = ort.InferenceSession('cpu.onnx')
    +out = ort_sess.run(None, {'input': inp.numpy()})
    +
    +input_name = ort_sess.get_inputs()[0].name
    +output_name = ort_sess.get_outputs()[0].name
    +input_dims = ort_sess.get_inputs()[0].shape
    +
    +test_close(out, output.detach().numpy())
    +!rm "cpu.onnx"
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.rocket.html b/models.rocket.html new file mode 100644 index 000000000..fa3abd70f --- /dev/null +++ b/models.rocket.html @@ -0,0 +1,1354 @@ + + + + + + + + + +tsai - ROCKET + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    ROCKET

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    ROCKET (RandOm Convolutional KErnel Transform) functions for univariate and multivariate time series.

    +
    +
    +

    source

    +
    +

    RocketClassifier

    +
    +
     RocketClassifier (num_kernels=10000, normalize_input=True,
    +                   random_state=None, alphas=array([1.e-03, 1.e-02,
    +                   1.e-01, 1.e+00, 1.e+01, 1.e+02, 1.e+03]),
    +                   normalize_features=True, memory=None, verbose=False,
    +                   scoring=None, class_weight=None, **kwargs)
    +
    +

    Time series classification using ROCKET features and a linear classifier

    +
    +

    source

    +
    +
    +

    load_rocket

    +
    +
     load_rocket (fname='Rocket', path='./models')
    +
    +
    +

    source

    +
    +
    +

    RocketRegressor

    +
    +
     RocketRegressor (num_kernels=10000, normalize_input=True,
    +                  random_state=None, alphas=array([1.e-03, 1.e-02, 1.e-01,
    +                  1.e+00, 1.e+01, 1.e+02, 1.e+03]),
    +                  normalize_features=True, memory=None, verbose=False,
    +                  scoring=None, **kwargs)
    +
    +

    Time series regression using ROCKET features and a linear regressor

    +
    +
    # Univariate classification with sklearn-type API
    +dsid = 'OliveOil'
    +fname = 'RocketClassifier'
    +X_train, y_train, X_test, y_test = get_UCR_data(dsid, Xdtype='float64')
    +cls = RocketClassifier()
    +cls.fit(X_train, y_train)
    +cls.save(fname)
    +del cls
    +cls = load_rocket(fname)
    +print(cls.score(X_test, y_test))
    +
    +
    OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.
    +
    +
    +
    0.9
    +
    +
    +
    +
    # Multivariate classification with sklearn-type API
    +dsid = 'NATOPS'
    +fname = 'RocketClassifier'
    +X_train, y_train, X_test, y_test = get_UCR_data(dsid, Xdtype='float64')
    +cls = RocketClassifier()
    +cls.fit(X_train, y_train)
    +cls.save(fname)
    +del cls
    +cls = load_rocket(fname)
    +print(cls.score(X_test, y_test))
    +
    +
    0.8666666666666667
    +
    +
    +
    +
    from sklearn.metrics import mean_squared_error
    +
    +
    +
    # Univariate regression with sklearn-type API
    +dsid = 'Covid3Month'
    +fname = 'RocketRegressor'
    +X_train, y_train, X_test, y_test = get_Monash_regression_data(dsid, Xdtype='float64')
    +if X_train is not None: 
    +    rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)
    +    reg = RocketRegressor(scoring=rmse_scorer)
    +    reg.fit(X_train, y_train)
    +    reg.save(fname)
    +    del reg
    +    reg = load_rocket(fname)
    +    y_pred = reg.predict(X_test)
    +    print(mean_squared_error(y_test, y_pred, squared=False))
    +
    +
    0.03908714523468997
    +
    +
    +
    +
    # Multivariate regression with sklearn-type API
    +dsid = 'AppliancesEnergy'
    +fname = 'RocketRegressor'
    +X_train, y_train, X_test, y_test = get_Monash_regression_data(dsid, Xdtype='float64')
    +if X_train is not None: 
    +    rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)
    +    reg = RocketRegressor(scoring=rmse_scorer)
    +    reg.fit(X_train, y_train)
    +    reg.save(fname)
    +    del reg
    +    reg = load_rocket(fname)
    +    y_pred = reg.predict(X_test)
    +    print(mean_squared_error(y_test, y_pred, squared=False))
    +
    +
    2.287302226812576
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.rocket_pytorch.html b/models.rocket_pytorch.html new file mode 100644 index 000000000..3db0bb419 --- /dev/null +++ b/models.rocket_pytorch.html @@ -0,0 +1,1294 @@ + + + + + + + + + +tsai - ROCKET Pytorch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    ROCKET Pytorch

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    ROCKET (RandOm Convolutional KErnel Transform) functions for univariate and multivariate time series developed in Pytorch.

    +
    +
    +

    source

    +
    +

    ROCKET

    +
    +
     ROCKET (c_in, seq_len, n_kernels=10000, kss=[7, 9, 11], device=None,
    +         verbose=False)
    +
    +

    RandOm Convolutional KErnel Transform

    +

    ROCKET is a GPU Pytorch implementation of the ROCKET functions generate_kernels and apply_kernels that can be used with univariate and multivariate time series.

    +
    +

    source

    +
    +
    +

    create_rocket_features

    +
    +
     create_rocket_features (dl, model, verbose=False)
    +
    +

    Args: model : ROCKET model instance dl : single TSDataLoader (for example dls.train or dls.valid)

    +
    +
    bs = 16
    +c_in = 7  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 15
    +xb = torch.randn(bs, c_in, seq_len).to(default_device())
    +
    +m = ROCKET(c_in, seq_len, n_kernels=1_000, kss=[7, 9, 11]) # 1_000 for testing with a cpu. Default is 10k with a gpu!
    +test_eq(m(xb).shape, [bs, 2_000])
    +
    +
    +
    from tsai.data.all import *
    +from tsai.models.utils import *
    +
    +
    +
    X, y, splits = get_UCR_data('OliveOil', split_data=False)
    +tfms = [None, TSRegression()]
    +batch_tfms = TSStandardize(by_var=True)
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, shuffle_train=False, drop_last=False)
    +model = build_ts_model(ROCKET, dls=dls, n_kernels=1_000) # 1_000 for testing with a cpu. Default is 10k with a gpu!
    +X_train, y_train = create_rocket_features(dls.train, model) 
    +X_valid, y_valid = create_rocket_features(dls.valid, model)
    +X_train.shape, X_valid.shape
    +
    +
    ((30, 2000), (30, 2000))
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.tabfusiontransformer.html b/models.tabfusiontransformer.html new file mode 100644 index 000000000..b53e99097 --- /dev/null +++ b/models.tabfusiontransformer.html @@ -0,0 +1,1378 @@ + + + + + + + + + +tsai - TabFusionTransformer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TabFusionTransformer

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is a a Pytorch implementeation of TabTransformerTransformer created by Ignacio Oguiza (oguiza@timeseriesAI.co)

    +

    This implementation is inspired by:

    +

    Huang, X., Khetan, A., Cvitkovic, M., & Karnin, Z. (2020). TabTransformer: Tabular Data Modeling Using Contextual Embeddings. arXiv preprint https://arxiv.org/pdf/2012.06678

    +

    Official repo: https://github.com/awslabs/autogluon/tree/master/tabular/src/autogluon/tabular/models/tab_transformer

    +
    +

    source

    +
    +

    TabFusionTransformer

    +
    +
     TabFusionTransformer (classes, cont_names, c_out, d_model=32, n_layers=6,
    +                       n_heads=8, d_k=None, d_v=None, d_ff=None,
    +                       res_attention=True, attention_act='gelu',
    +                       res_dropout=0.0, fc_mults=(4, 2), fc_dropout=0.0,
    +                       fc_act=None, fc_skip=False, fc_bn=False,
    +                       bn_final=False, init=True)
    +
    +

    Class that allows you to pass one or multiple inputs

    +
    +

    source

    +
    +
    +

    TabFusionBackbone

    +
    +
     TabFusionBackbone (classes, cont_names, d_model=32, n_layers=6,
    +                    n_heads=8, d_k=None, d_v=None, d_ff=None, init=True,
    +                    res_attention=True, attention_act='gelu',
    +                    res_dropout=0.0)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    Sequential

    +
    +
     Sequential (*args)
    +
    +

    Class that allows you to pass one or multiple inputs

    +
    +

    source

    +
    +
    +

    ifnone

    +
    +
     ifnone (a, b)
    +
    +

    b if a is None else a

    +
    +
    from fastai.tabular.all import *
    +
    +
    +
    path = untar_data(URLs.ADULT_SAMPLE)
    +df = pd.read_csv(path/'adult.csv')
    +dls = TabularDataLoaders.from_csv(path/'adult.csv', path=path, y_names="salary",
    +    cat_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race'],
    +    cont_names = ['age', 'fnlwgt', 'education-num'],
    +    procs = [Categorify, FillMissing, Normalize])
    +x_cat, x_cont, yb = first(dls.train)
    +model = TabFusionTransformer(dls.classes, dls.cont_names, dls.c)
    +test_eq(model(x_cat, x_cont).shape, (dls.train.bs, dls.c))
    +
    +
    +

    source

    +
    +
    +

    TSTabFusionTransformer

    +
    +
     TSTabFusionTransformer (c_in, c_out, seq_len, classes, cont_names,
    +                         d_model=32, n_layers=6, n_heads=8, d_k=None,
    +                         d_v=None, d_ff=None, res_attention=True,
    +                         attention_act='gelu', res_dropout=0.0,
    +                         fc_mults=(1, 0.5), fc_dropout=0.0, fc_act=None,
    +                         fc_skip=False, fc_bn=False, bn_final=False,
    +                         init=True)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +
    classes = {'education': ['#na#', '10th', '11th', '12th', '1st-4th', '5th-6th', '7th-8th', '9th', 'Assoc-acdm', 'Assoc-voc', 'Bachelors', 'Doctorate', 
    +                         'HS-grad', 'Masters', 'Preschool', 'Prof-school', 'Some-college'],
    + 'education-num_na': ['#na#', False, True],
    + 'marital-status': ['#na#', 'Divorced', 'Married-AF-spouse', 'Married-civ-spouse', 'Married-spouse-absent', 'Never-married', 'Separated', 'Widowed'],
    + 'occupation': ['#na#', '?', 'Adm-clerical', 'Armed-Forces', 'Craft-repair', 'Exec-managerial', 'Farming-fishing', 'Handlers-cleaners', 'Machine-op-inspct', 
    +                'Other-service', 'Priv-house-serv', 'Prof-specialty', 'Protective-serv', 'Sales', 'Tech-support', 'Transport-moving'],
    + 'race': ['#na#', 'Amer-Indian-Eskimo', 'Asian-Pac-Islander', 'Black', 'Other', 'White'],
    + 'relationship': ['#na#', 'Husband', 'Not-in-family', 'Other-relative', 'Own-child', 'Unmarried', 'Wife'],
    + 'workclass': ['#na#', '?', 'Federal-gov', 'Local-gov', 'Never-worked', 'Private', 'Self-emp-inc', 'Self-emp-not-inc', 'State-gov', 'Without-pay']}
    +
    +cont_names = ['a', 'b', 'c']
    +c_out = 6
    +x_ts = torch.randn(64, 3, 10)
    +x_cat = torch.randint(0,3,(64,7))
    +x_cont = torch.randn(64,3)
    +model = TSTabFusionTransformer(x_ts.shape[1], c_out, x_ts.shape[-1], classes, cont_names)
    +x = (x_ts, (x_cat, x_cont))
    +test_eq(model(x).shape, (x_ts.shape[0], c_out))
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.tabmodel.html b/models.tabmodel.html new file mode 100644 index 000000000..7a5b194ff --- /dev/null +++ b/models.tabmodel.html @@ -0,0 +1,1409 @@ + + + + + + + + + +tsai - TabModel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TabModel

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on fastai’s TabularModel.

    +

    We built it so that it’s easy to change the head of the model, something that is particularly interesting when building hybrid models.

    +
    +

    source

    +
    +

    TabHead

    +
    +
     TabHead (emb_szs, n_cont, c_out, layers=None, fc_dropout=None,
    +          y_range=None, use_bn=True, bn_final=False, lin_first=False,
    +          act=ReLU(inplace=True), skip=False)
    +
    +

    Basic head for tabular data.

    +
    +

    source

    +
    +
    +

    TabBackbone

    +
    +
     TabBackbone (emb_szs, n_cont, embed_p=0.0, bn_cont=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    TabModel

    +
    +
     TabModel (emb_szs, n_cont, c_out, layers=None, fc_dropout=None,
    +           embed_p=0.0, y_range=None, use_bn=True, bn_final=False,
    +           bn_cont=True, lin_first=False, act=ReLU(inplace=True),
    +           skip=False)
    +
    +

    Basic model for tabular data.

    +
    +
    from fastai.tabular.core import *
    +from tsai.data.tabular import *
    +
    +
    +
    path = untar_data(URLs.ADULT_SAMPLE)
    +df = pd.read_csv(path/'adult.csv')
    +# df['salary'] = np.random.rand(len(df)) # uncomment to simulate a cont dependent variable
    +procs = [Categorify, FillMissing, Normalize]
    +cat_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race']
    +cont_names = ['age', 'fnlwgt', 'education-num']
    +y_names = ['salary']
    +y_block = RegressionBlock() if isinstance(df['salary'].values[0], float) else CategoryBlock()
    +splits = RandomSplitter()(range_of(df))
    +pd.options.mode.chained_assignment=None
    +to = TabularPandas(df, procs=procs, cat_names=cat_names, cont_names=cont_names, y_names=y_names, y_block=y_block, splits=splits, inplace=True, 
    +                   reduce_memory=False)
    +to.show(5)
    +tab_dls = to.dataloaders(bs=16, val_bs=32)
    +b = first(tab_dls.train)
    +test_eq((b[0].shape, b[1].shape, b[2].shape), (torch.Size([16, 7]), torch.Size([16, 3]), torch.Size([16, 1])))
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    workclasseducationmarital-statusoccupationrelationshipraceeducation-num_naagefnlwgteducation-numsalary
    20505PrivateHS-gradMarried-civ-spouseSalesHusbandWhiteFalse47.0197836.09.0<50k
    28679PrivateHS-gradMarried-civ-spouseCraft-repairHusbandWhiteFalse28.065078.09.0>=50k
    11669PrivateHS-gradNever-marriedAdm-clericalNot-in-familyWhiteFalse38.0202683.09.0<50k
    29079Self-emp-not-incBachelorsMarried-civ-spouseProf-specialtyHusbandWhiteFalse41.0168098.013.0<50k
    7061PrivateHS-gradMarried-civ-spouseAdm-clericalHusbandWhiteFalse31.0243442.09.0<50k
    +
    +
    +
    +
    tab_model = build_tabular_model(TabModel, dls=tab_dls)
    +b = first(tab_dls.train)
    +test_eq(tab_model.to(b[0].device)(*b[:-1]).shape, (tab_dls.bs, tab_dls.c))
    +learn = Learner(tab_dls, tab_model, splitter=ts_splitter)
    +p1 = count_parameters(learn.model)
    +learn.freeze()
    +p2 = count_parameters(learn.model)
    +learn.unfreeze()
    +p3 = count_parameters(learn.model)
    +assert p1 == p3
    +assert p1 > p2 > 0
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.tabtransformer.html b/models.tabtransformer.html new file mode 100644 index 000000000..cedaefbdb --- /dev/null +++ b/models.tabtransformer.html @@ -0,0 +1,1341 @@ + + + + + + + + + +tsai - TabTransformer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TabTransformer

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial TabTransformer Pytorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co)

    +

    Huang, X., Khetan, A., Cvitkovic, M., & Karnin, Z. (2020). TabTransformer: Tabular Data Modeling Using Contextual Embeddings. arXiv preprint https://arxiv.org/pdf/2012.06678

    +

    Official repo: https://github.com/awslabs/autogluon/tree/master/tabular/src/autogluon/tabular/models/tab_transformer

    +
    +

    source

    +
    +

    TabTransformer

    +
    +
     TabTransformer (classes, cont_names, c_out, column_embed=True,
    +                 add_shared_embed=False, shared_embed_div=8,
    +                 embed_dropout=0.1, drop_whole_embed=False, d_model=32,
    +                 n_layers=6, n_heads=8, d_k=None, d_v=None, d_ff=None,
    +                 res_attention=True, attention_act='gelu',
    +                 res_dropout=0.1, norm_cont=True, mlp_mults=(4, 2),
    +                 mlp_dropout=0.0, mlp_act=None, mlp_skip=False,
    +                 mlp_bn=False, bn_final=False)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    FullEmbeddingDropout

    +
    +
     FullEmbeddingDropout (dropout:float)
    +
    +

    From https://github.com/jrzaurin/pytorch-widedeep/blob/be96b57f115e4a10fde9bb82c35380a3ac523f52/pytorch_widedeep/models/tab_transformer.py#L153

    +
    +

    source

    +
    +
    +

    SharedEmbedding

    +
    +
     SharedEmbedding (num_embeddings, embedding_dim, shared_embed=True,
    +                  add_shared_embed=False, shared_embed_div=8)
    +
    +

    Base class for all neural network modules.

    +

    Your models should also subclass this class.

    +

    Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::

    +
    import torch.nn as nn
    +import torch.nn.functional as F
    +
    +class Model(nn.Module):
    +    def __init__(self):
    +        super().__init__()
    +        self.conv1 = nn.Conv2d(1, 20, 5)
    +        self.conv2 = nn.Conv2d(20, 20, 5)
    +
    +    def forward(self, x):
    +        x = F.relu(self.conv1(x))
    +        return F.relu(self.conv2(x))
    +

    Submodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.

    +

    .. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.

    +

    :ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool

    +
    +

    source

    +
    +
    +

    ifnone

    +
    +
     ifnone (a, b)
    +
    +

    b if a is None else a

    +
    +
    from fastai.tabular.all import *
    +
    +
    +
    path = untar_data(URLs.ADULT_SAMPLE)
    +df = pd.read_csv(path/'adult.csv')
    +dls = TabularDataLoaders.from_csv(path/'adult.csv', path=path, y_names="salary",
    +    cat_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race'],
    +    cont_names = ['age', 'fnlwgt', 'education-num'],
    +    procs = [Categorify, FillMissing, Normalize])
    +x_cat, x_cont, yb = first(dls.train)
    +model = TabTransformer(dls.classes, dls.cont_names, dls.c)
    +test_eq(model(x_cat, x_cont).shape, (dls.train.bs, dls.c))
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.tcn.html b/models.tcn.html new file mode 100644 index 000000000..1a3e97718 --- /dev/null +++ b/models.tcn.html @@ -0,0 +1,1471 @@ + + + + + + + + + +tsai - TCN + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TCN

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial PyTorch implementation by Ignacio Oguiza (oguiza@timeseriesAI.co) based on:

    +
      +
    • Bai, S., Kolter, J. Z., & Koltun, V. (2018). An empirical evaluation of generic convolutional and recurrent networks for sequence modeling. arXiv preprint arXiv:1803.01271.
    • +
    • Official TCN PyTorch implementation: https://github.com/locuslab/TCN
    • +
    +
    +

    source

    +
    +

    TCN

    +
    +
     TCN (c_in, c_out, layers=[25, 25, 25, 25, 25, 25, 25, 25], ks=7,
    +      conv_dropout=0.0, fc_dropout=0.0)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    TemporalConvNet

    +
    +
     TemporalConvNet (c_in, layers, ks=2, dropout=0.0)
    +
    +
    +

    source

    +
    +
    +

    TemporalBlock

    +
    +
     TemporalBlock (ni, nf, ks, stride, dilation, padding, dropout=0.0)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 16
    +nvars = 3
    +seq_len = 128
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +model = TCN(nvars, c_out, fc_dropout=.5)
    +test_eq(model(xb).shape, (bs, c_out))
    +model = TCN(nvars, c_out, conv_dropout=.2)
    +test_eq(model(xb).shape, (bs, c_out))
    +model = TCN(nvars, c_out)
    +test_eq(model(xb).shape, (bs, c_out))
    +model
    +
    +
    TCN(
    +  (tcn): Sequential(
    +    (0): TemporalBlock(
    +      (conv1): Conv1d(3, 25, kernel_size=(7,), stride=(1,), padding=(6,))
    +      (chomp1): Chomp1d()
    +      (relu1): ReLU()
    +      (dropout1): Dropout(p=0.0, inplace=False)
    +      (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(6,))
    +      (chomp2): Chomp1d()
    +      (relu2): ReLU()
    +      (dropout2): Dropout(p=0.0, inplace=False)
    +      (net): Sequential(
    +        (0): Conv1d(3, 25, kernel_size=(7,), stride=(1,), padding=(6,))
    +        (1): Chomp1d()
    +        (2): ReLU()
    +        (3): Dropout(p=0.0, inplace=False)
    +        (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(6,))
    +        (5): Chomp1d()
    +        (6): ReLU()
    +        (7): Dropout(p=0.0, inplace=False)
    +      )
    +      (downsample): Conv1d(3, 25, kernel_size=(1,), stride=(1,))
    +      (relu): ReLU()
    +    )
    +    (1): TemporalBlock(
    +      (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(12,), dilation=(2,))
    +      (chomp1): Chomp1d()
    +      (relu1): ReLU()
    +      (dropout1): Dropout(p=0.0, inplace=False)
    +      (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(12,), dilation=(2,))
    +      (chomp2): Chomp1d()
    +      (relu2): ReLU()
    +      (dropout2): Dropout(p=0.0, inplace=False)
    +      (net): Sequential(
    +        (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(12,), dilation=(2,))
    +        (1): Chomp1d()
    +        (2): ReLU()
    +        (3): Dropout(p=0.0, inplace=False)
    +        (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(12,), dilation=(2,))
    +        (5): Chomp1d()
    +        (6): ReLU()
    +        (7): Dropout(p=0.0, inplace=False)
    +      )
    +      (relu): ReLU()
    +    )
    +    (2): TemporalBlock(
    +      (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(24,), dilation=(4,))
    +      (chomp1): Chomp1d()
    +      (relu1): ReLU()
    +      (dropout1): Dropout(p=0.0, inplace=False)
    +      (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(24,), dilation=(4,))
    +      (chomp2): Chomp1d()
    +      (relu2): ReLU()
    +      (dropout2): Dropout(p=0.0, inplace=False)
    +      (net): Sequential(
    +        (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(24,), dilation=(4,))
    +        (1): Chomp1d()
    +        (2): ReLU()
    +        (3): Dropout(p=0.0, inplace=False)
    +        (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(24,), dilation=(4,))
    +        (5): Chomp1d()
    +        (6): ReLU()
    +        (7): Dropout(p=0.0, inplace=False)
    +      )
    +      (relu): ReLU()
    +    )
    +    (3): TemporalBlock(
    +      (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(48,), dilation=(8,))
    +      (chomp1): Chomp1d()
    +      (relu1): ReLU()
    +      (dropout1): Dropout(p=0.0, inplace=False)
    +      (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(48,), dilation=(8,))
    +      (chomp2): Chomp1d()
    +      (relu2): ReLU()
    +      (dropout2): Dropout(p=0.0, inplace=False)
    +      (net): Sequential(
    +        (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(48,), dilation=(8,))
    +        (1): Chomp1d()
    +        (2): ReLU()
    +        (3): Dropout(p=0.0, inplace=False)
    +        (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(48,), dilation=(8,))
    +        (5): Chomp1d()
    +        (6): ReLU()
    +        (7): Dropout(p=0.0, inplace=False)
    +      )
    +      (relu): ReLU()
    +    )
    +    (4): TemporalBlock(
    +      (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(96,), dilation=(16,))
    +      (chomp1): Chomp1d()
    +      (relu1): ReLU()
    +      (dropout1): Dropout(p=0.0, inplace=False)
    +      (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(96,), dilation=(16,))
    +      (chomp2): Chomp1d()
    +      (relu2): ReLU()
    +      (dropout2): Dropout(p=0.0, inplace=False)
    +      (net): Sequential(
    +        (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(96,), dilation=(16,))
    +        (1): Chomp1d()
    +        (2): ReLU()
    +        (3): Dropout(p=0.0, inplace=False)
    +        (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(96,), dilation=(16,))
    +        (5): Chomp1d()
    +        (6): ReLU()
    +        (7): Dropout(p=0.0, inplace=False)
    +      )
    +      (relu): ReLU()
    +    )
    +    (5): TemporalBlock(
    +      (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(192,), dilation=(32,))
    +      (chomp1): Chomp1d()
    +      (relu1): ReLU()
    +      (dropout1): Dropout(p=0.0, inplace=False)
    +      (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(192,), dilation=(32,))
    +      (chomp2): Chomp1d()
    +      (relu2): ReLU()
    +      (dropout2): Dropout(p=0.0, inplace=False)
    +      (net): Sequential(
    +        (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(192,), dilation=(32,))
    +        (1): Chomp1d()
    +        (2): ReLU()
    +        (3): Dropout(p=0.0, inplace=False)
    +        (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(192,), dilation=(32,))
    +        (5): Chomp1d()
    +        (6): ReLU()
    +        (7): Dropout(p=0.0, inplace=False)
    +      )
    +      (relu): ReLU()
    +    )
    +    (6): TemporalBlock(
    +      (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(384,), dilation=(64,))
    +      (chomp1): Chomp1d()
    +      (relu1): ReLU()
    +      (dropout1): Dropout(p=0.0, inplace=False)
    +      (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(384,), dilation=(64,))
    +      (chomp2): Chomp1d()
    +      (relu2): ReLU()
    +      (dropout2): Dropout(p=0.0, inplace=False)
    +      (net): Sequential(
    +        (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(384,), dilation=(64,))
    +        (1): Chomp1d()
    +        (2): ReLU()
    +        (3): Dropout(p=0.0, inplace=False)
    +        (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(384,), dilation=(64,))
    +        (5): Chomp1d()
    +        (6): ReLU()
    +        (7): Dropout(p=0.0, inplace=False)
    +      )
    +      (relu): ReLU()
    +    )
    +    (7): TemporalBlock(
    +      (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(768,), dilation=(128,))
    +      (chomp1): Chomp1d()
    +      (relu1): ReLU()
    +      (dropout1): Dropout(p=0.0, inplace=False)
    +      (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(768,), dilation=(128,))
    +      (chomp2): Chomp1d()
    +      (relu2): ReLU()
    +      (dropout2): Dropout(p=0.0, inplace=False)
    +      (net): Sequential(
    +        (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(768,), dilation=(128,))
    +        (1): Chomp1d()
    +        (2): ReLU()
    +        (3): Dropout(p=0.0, inplace=False)
    +        (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(768,), dilation=(128,))
    +        (5): Chomp1d()
    +        (6): ReLU()
    +        (7): Dropout(p=0.0, inplace=False)
    +      )
    +      (relu): ReLU()
    +    )
    +  )
    +  (gap): GAP1d(
    +    (gap): AdaptiveAvgPool1d(output_size=1)
    +    (flatten): Flatten(full=False)
    +  )
    +  (linear): Linear(in_features=25, out_features=2, bias=True)
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.transformermodel.html b/models.transformermodel.html new file mode 100644 index 000000000..ea8bd8b6f --- /dev/null +++ b/models.transformermodel.html @@ -0,0 +1,1323 @@ + + + + + + + + + +tsai - TransformerModel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TransformerModel

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co

    +
    +
    +

    source

    +
    +

    TransformerModel

    +
    +
     TransformerModel (c_in, c_out, d_model=64, n_head=1, d_ffn=128,
    +                   dropout=0.1, activation='relu', n_layers=1)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 16
    +nvars = 3
    +seq_len = 96
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +
    +
    +model = TransformerModel(nvars, c_out, d_model=64, n_head=1, d_ffn=128, dropout=0.1, activation='gelu', n_layers=3)
    +test_eq(model(xb).shape, [bs, c_out])
    +print(count_parameters(model))
    +model
    +
    +
    100930
    +
    +
    +
    TransformerModel(
    +  (permute): Permute(dims=2, 0, 1)
    +  (inlinear): Linear(in_features=3, out_features=64, bias=True)
    +  (relu): ReLU()
    +  (transformer_encoder): TransformerEncoder(
    +    (layers): ModuleList(
    +      (0): TransformerEncoderLayer(
    +        (self_attn): MultiheadAttention(
    +          (out_proj): NonDynamicallyQuantizableLinear(in_features=64, out_features=64, bias=True)
    +        )
    +        (linear1): Linear(in_features=64, out_features=128, bias=True)
    +        (dropout): Dropout(p=0.1, inplace=False)
    +        (linear2): Linear(in_features=128, out_features=64, bias=True)
    +        (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
    +        (norm2): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
    +        (dropout1): Dropout(p=0.1, inplace=False)
    +        (dropout2): Dropout(p=0.1, inplace=False)
    +      )
    +      (1): TransformerEncoderLayer(
    +        (self_attn): MultiheadAttention(
    +          (out_proj): NonDynamicallyQuantizableLinear(in_features=64, out_features=64, bias=True)
    +        )
    +        (linear1): Linear(in_features=64, out_features=128, bias=True)
    +        (dropout): Dropout(p=0.1, inplace=False)
    +        (linear2): Linear(in_features=128, out_features=64, bias=True)
    +        (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
    +        (norm2): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
    +        (dropout1): Dropout(p=0.1, inplace=False)
    +        (dropout2): Dropout(p=0.1, inplace=False)
    +      )
    +      (2): TransformerEncoderLayer(
    +        (self_attn): MultiheadAttention(
    +          (out_proj): NonDynamicallyQuantizableLinear(in_features=64, out_features=64, bias=True)
    +        )
    +        (linear1): Linear(in_features=64, out_features=128, bias=True)
    +        (dropout): Dropout(p=0.1, inplace=False)
    +        (linear2): Linear(in_features=128, out_features=64, bias=True)
    +        (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
    +        (norm2): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
    +        (dropout1): Dropout(p=0.1, inplace=False)
    +        (dropout2): Dropout(p=0.1, inplace=False)
    +      )
    +    )
    +    (norm): LayerNorm((64,), eps=1e-05, elementwise_affine=True)
    +  )
    +  (transpose): Transpose(1, 0)
    +  (max): Max(dim=1, keepdim=False)
    +  (outlinear): Linear(in_features=64, out_features=2, bias=True)
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.transformerrnnplus.html b/models.transformerrnnplus.html new file mode 100644 index 000000000..e4cab1309 --- /dev/null +++ b/models.transformerrnnplus.html @@ -0,0 +1,1784 @@ + + + + + + + + + +tsai - TransformerRNNPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TransformerRNNPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    These is a Pytorch implementation of a Transformer + RNN created by Ignacio Oguiza - oguiza@timeseriesAI.co inspired by the code created by Baurzhan Urazalinov (https://www.kaggle.com/baurzhanurazalinov).

    +

    Baurzhan Urazalinov won a Kaggle competition (Parkinson’s Freezing of Gait Prediction: Event detection from wearable sensor data - 2023) using the following original tensorflow code:

    +
      +
    • https://www.kaggle.com/code/baurzhanurazalinov/parkinson-s-freezing-defog-training-code
    • +
    • https://www.kaggle.com/code/baurzhanurazalinov/parkinson-s-freezing-tdcsfog-training-code
    • +
    • https://www.kaggle.com/code/baurzhanurazalinov/parkinson-s-freezing-submission-code
    • +
    +

    I’d like to congratulate Baurzhan for winning this competition, and for sharing the code he used.

    +
    +
    from tsai.models.utils import count_parameters
    +
    +
    +
    t = torch.rand(4, 864, 54)
    +encoder_layer = torch.nn.TransformerEncoderLayer(54, 6, dim_feedforward=2048, dropout=0.1, 
    +                                                 activation="relu", layer_norm_eps=1e-05, 
    +                                                 batch_first=True, norm_first=False)
    +print(encoder_layer(t).shape)
    +print(count_parameters(encoder_layer))
    +
    +
    torch.Size([4, 864, 54])
    +235382
    +
    +
    +
    +
    bs = 4
    +c_in = 5
    +seq_len = 50
    +
    +encoder = _TransformerRNNEncoder(nn.LSTM, c_in=c_in, seq_len=seq_len, d_model=128, nhead=4, num_encoder_layers=1, dim_feedforward=None, proj_dropout=0.1, dropout=0.1, num_rnn_layers=3, bidirectional=True)
    +t = torch.randn(bs, c_in, seq_len)
    +print(encoder(t).shape)
    +
    +
    torch.Size([4, 1024, 50])
    +
    +
    +
    +

    source

    +
    +

    TransformerGRUPlus

    +
    +
     TransformerGRUPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,
    +                     d_model:int=128, nhead:int=16,
    +                     proj_dropout:float=0.1, num_encoder_layers:int=1,
    +                     dim_feedforward:int=2048, dropout:float=0.1,
    +                     num_rnn_layers:int=1, bidirectional:bool=True,
    +                     custom_head=None, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inintNumber of channels in the input tensor.
    c_outintNumber of output channels.
    seq_lenintNumber of time steps in the input tensor.
    dtupleNoneint or tuple with shape of the output tensor
    d_modelint128Total dimension of the model.
    nheadint16Number of parallel attention heads (d_model will be split across nhead - each head will have dimension d_model // nhead).
    proj_dropoutfloat0.1Dropout probability after the first linear layer. Default: 0.1.
    num_encoder_layersint1Number of transformer encoder layers. Default: 1.
    dim_feedforwardint2048The dimension of the feedforward network model. Default: 2048.
    dropoutfloat0.1Transformer encoder layers dropout. Default: 0.1.
    num_rnn_layersint1Number of RNN layers in the encoder. Default: 1.
    bidirectionalboolTrueIf True, becomes a bidirectional RNN. Default: True.
    custom_headNoneTypeNoneCustom head that will be applied to the model. If None, a head with c_out outputs will be used. Default: None.
    kwargs
    +
    +

    source

    +
    +
    +

    TransformerLSTMPlus

    +
    +
     TransformerLSTMPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,
    +                      d_model:int=128, nhead:int=16,
    +                      proj_dropout:float=0.1, num_encoder_layers:int=1,
    +                      dim_feedforward:int=2048, dropout:float=0.1,
    +                      num_rnn_layers:int=1, bidirectional:bool=True,
    +                      custom_head=None, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inintNumber of channels in the input tensor.
    c_outintNumber of output channels.
    seq_lenintNumber of time steps in the input tensor.
    dtupleNoneint or tuple with shape of the output tensor
    d_modelint128Total dimension of the model.
    nheadint16Number of parallel attention heads (d_model will be split across nhead - each head will have dimension d_model // nhead).
    proj_dropoutfloat0.1Dropout probability after the first linear layer. Default: 0.1.
    num_encoder_layersint1Number of transformer encoder layers. Default: 1.
    dim_feedforwardint2048The dimension of the feedforward network model. Default: 2048.
    dropoutfloat0.1Transformer encoder layers dropout. Default: 0.1.
    num_rnn_layersint1Number of RNN layers in the encoder. Default: 1.
    bidirectionalboolTrueIf True, becomes a bidirectional RNN. Default: True.
    custom_headNoneTypeNoneCustom head that will be applied to the model. If None, a head with c_out outputs will be used. Default: None.
    kwargs
    +
    +

    source

    +
    +
    +

    TransformerRNNPlus

    +
    +
     TransformerRNNPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,
    +                     d_model:int=128, nhead:int=16,
    +                     proj_dropout:float=0.1, num_encoder_layers:int=1,
    +                     dim_feedforward:int=2048, dropout:float=0.1,
    +                     num_rnn_layers:int=1, bidirectional:bool=True,
    +                     custom_head=None, **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_inintNumber of channels in the input tensor.
    c_outintNumber of output channels.
    seq_lenintNumber of time steps in the input tensor.
    dtupleNoneint or tuple with shape of the output tensor
    d_modelint128Total dimension of the model.
    nheadint16Number of parallel attention heads (d_model will be split across nhead - each head will have dimension d_model // nhead).
    proj_dropoutfloat0.1Dropout probability after the first linear layer. Default: 0.1.
    num_encoder_layersint1Number of transformer encoder layers. Default: 1.
    dim_feedforwardint2048The dimension of the feedforward network model. Default: 2048.
    dropoutfloat0.1Transformer encoder layers dropout. Default: 0.1.
    num_rnn_layersint1Number of RNN layers in the encoder. Default: 1.
    bidirectionalboolTrueIf True, becomes a bidirectional RNN. Default: True.
    custom_headNoneTypeNoneCustom head that will be applied to the model. If None, a head with c_out outputs will be used. Default: None.
    kwargs
    +
    +
    bs = 4
    +c_in = 5
    +c_out = 1
    +seq_len = 50
    +d = None
    +
    +model = TransformerRNNPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)
    +t = torch.randn(bs, c_in, seq_len)
    +assert model(t).shape == torch.Size([4]) 
    +print(model(t).shape)
    +
    +model = TransformerLSTMPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)
    +t = torch.randn(bs, c_in, seq_len)
    +assert model(t).shape == torch.Size([4])
    +print(model(t).shape)
    +
    +model = TransformerGRUPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)
    +t = torch.randn(bs, c_in, seq_len)
    +assert model(t).shape == torch.Size([4])
    +print(model(t).shape)
    +
    +
    torch.Size([4])
    +torch.Size([4])
    +torch.Size([4])
    +
    +
    +
    +
    bs = 4
    +c_in = 5
    +c_out = 3
    +seq_len = 50
    +d = None
    +
    +model = TransformerRNNPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)
    +t = torch.randn(bs, c_in, seq_len)
    +assert model(t).shape == (bs, c_out)
    +print(model(t).shape)
    +
    +model = TransformerLSTMPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)
    +t = torch.randn(bs, c_in, seq_len)
    +assert model(t).shape == (bs, c_out)
    +print(model(t).shape)
    +
    +model = TransformerGRUPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)
    +t = torch.randn(bs, c_in, seq_len)
    +assert model(t).shape == (bs, c_out)
    +print(model(t).shape)
    +
    +
    torch.Size([4, 3])
    +torch.Size([4, 3])
    +torch.Size([4, 3])
    +
    +
    +
    +
    bs = 4
    +c_in = 5
    +c_out = 3
    +seq_len = 50
    +d = 50
    +
    +model = TransformerRNNPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)
    +t = torch.randn(bs, c_in, seq_len)
    +assert model(t).shape == (bs, d, c_out)
    +print(model(t).shape)
    +
    +model = TransformerLSTMPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)
    +t = torch.randn(bs, c_in, seq_len)
    +assert model(t).shape == (bs, d, c_out)
    +print(model(t).shape)
    +
    +model = TransformerGRUPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)
    +t = torch.randn(bs, c_in, seq_len)
    +assert model(t).shape == (bs, d, c_out)
    +print(model(t).shape)
    +
    +
    torch.Size([4, 50, 3])
    +torch.Size([4, 50, 3])
    +torch.Size([4, 50, 3])
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.tsitplus.html b/models.tsitplus.html new file mode 100644 index 000000000..3dd9596fa --- /dev/null +++ b/models.tsitplus.html @@ -0,0 +1,1434 @@ + + + + + + + + + +tsai - TSiT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TSiT

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is a PyTorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on ViT (Vision Transformer):

    +

    Dosovitskiy, A., Beyer, L., Kolesnikov, A., Weissenborn, D., Zhai, X., Unterthiner, T., … & Houlsby, N. (2020).

    +

    An image is worth 16x16 words: Transformers for image recognition at scale. arXiv preprint arXiv:2010.11929.

    +
    +

    source

    +
    +

    TSiTPlus

    +
    +
     TSiTPlus (c_in:int, c_out:int, seq_len:int, d_model:int=128, depth:int=6,
    +           n_heads:int=16, act:str='gelu', lsa:bool=False,
    +           attn_dropout:float=0.0, dropout:float=0.0,
    +           drop_path_rate:float=0.0, mlp_ratio:int=1, qkv_bias:bool=True,
    +           pre_norm:bool=False, use_token:bool=False, use_pe:bool=True,
    +           cat_pos:Optional[list]=None, n_cat_embeds:Optional[list]=None,
    +           cat_embed_dims:Optional[list]=None,
    +           cat_padding_idxs:Optional[list]=None, token_size:int=None,
    +           tokenizer:Optional[Callable]=None,
    +           feature_extractor:Optional[Callable]=None, flatten:bool=False,
    +           concat_pool:bool=True, fc_dropout:float=0.0, use_bn:bool=False,
    +           bias_init:Union[float,list,NoneType]=None,
    +           y_range:Optional[tuple]=None,
    +           custom_head:Optional[Callable]=None, verbose:bool=True,
    +           **kwargs)
    +
    +

    Time series transformer model based on ViT (Vision Transformer):

    +

    Dosovitskiy, A., Beyer, L., Kolesnikov, A., Weissenborn, D., Zhai, X., Unterthiner, T., … & Houlsby, N. (2020). An image is worth 16x16 words: Transformers for image recognition at scale. arXiv preprint arXiv:2010.11929.

    +

    This implementation is a modified version of Vision Transformer that is part of the grat timm library (https://github.com/rwightman/pytorch-image-models/blob/72b227dcf57c0c62291673b96bdc06576bb90457/timm/models/vision_transformer.py)

    +

    Args: c_in: the number of features (aka variables, dimensions, channels) in the time series dataset. c_out: the number of target classes. seq_len: number of time steps in the time series. d_model: total dimension of the model (number of features created by the model). depth: number of blocks in the encoder. n_heads: parallel attention heads. Default:16 (range(8-16)). act: the activation function of positionwise feedforward layer. lsa: locality self attention used (see Lee, S. H., Lee, S., & Song, B. C. (2021). Vision Transformer for Small-Size Datasets. arXiv preprint arXiv:2112.13492.) attn_dropout: dropout rate applied to the attention sublayer. dropout: dropout applied to to the embedded sequence steps after position embeddings have been added and to the mlp sublayer in the encoder. drop_path_rate: stochastic depth rate. mlp_ratio: ratio of mlp hidden dim to embedding dim. qkv_bias: determines whether bias is applied to the Linear projections of queries, keys and values in the MultiheadAttention pre_norm: if True normalization will be applied as the first step in the sublayers. Defaults to False. use_token: if True, the output will come from the transformed token. This is meant to be use in classification tasks. use_pe: flag to indicate if positional embedding is used. n_cat_embeds: list with the sizes of the dictionaries of embeddings (int). cat_embed_dims: list with the sizes of each embedding vector (int). cat_padding_idxs: If specified, the entries at cat_padding_idxs do not contribute to the gradient; therefore, the embedding vector at cat_padding_idxs are not updated during training. Use 0 for those categorical embeddings that may have #na# values. Otherwise, leave them as None. You can enter a combination for different embeddings (for example, [0, None, None]). cat_pos: list with the position of the categorical variables in the input. token_size: Size of the embedding function used to reduce the sequence length (similar to ViT’s patch size) tokenizer: nn.Module or callable that will be used to reduce the sequence length feature_extractor: nn.Module or callable that will be used to preprocess the time series before the embedding step. It is useful to extract features or resample the time series. flatten: flag to indicate if the 3d logits will be flattened to 2d in the model’s head if use_token is set to False. If use_token is False and flatten is False, the model will apply a pooling layer. concat_pool: if True the head begins with fastai’s AdaptiveConcatPool2d if concat_pool=True; otherwise, it uses traditional average pooling. fc_dropout: dropout applied to the final fully connected layer. use_bn: flag that indicates if batchnorm will be applied to the head. bias_init: values used to initialized the output layer. y_range: range of possible y values (used in regression tasks).
    +custom_head: custom head that will be applied to the network. It must contain all kwargs (pass a partial function) verbose: flag to control verbosity of the model.

    +

    Input: x: bs (batch size) x nvars (aka features, variables, dimensions, channels) x seq_len (aka time steps)

    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 50
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +model = TSiTPlus(nvars, c_out, seq_len, attn_dropout=.1, dropout=.1, use_token=True)
    +test_eq(model(xb).shape, (bs, c_out))
    +model = TSiTPlus(nvars, c_out, seq_len, attn_dropout=.1, dropout=.1, use_token=False)
    +test_eq(model(xb).shape, (bs, c_out))
    +
    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 50
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +bias_init = np.array([0.8, .2])
    +model = TSiTPlus(nvars, c_out, seq_len, bias_init=bias_init)
    +test_eq(model(xb).shape, (bs, c_out))
    +test_eq(model.head[1].bias.data, tensor(bias_init))
    +
    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 50
    +c_out = 1
    +xb = torch.rand(bs, nvars, seq_len)
    +bias_init = 8.5
    +model = TSiTPlus(nvars, c_out, seq_len, bias_init=bias_init)
    +test_eq(model(xb).shape, (bs, c_out))
    +test_eq(model.head[1].bias.data, tensor([bias_init]))
    +
    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 50
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +bias_init = np.array([0.8, .2])
    +model = TSiTPlus(nvars, c_out, seq_len, bias_init=bias_init, lsa=True)
    +test_eq(model(xb).shape, (bs, c_out))
    +test_eq(model.head[1].bias.data, tensor(bias_init))
    +
    +
    +
    +

    Feature extractor

    +

    It’s a known fact that transformers cannot be directly applied to long sequences. To avoid this, we have included a way to subsample the sequence to generate a more manageable input.

    +
    +
    from tsai.data.validation import get_splits
    +from tsai.data.core import get_ts_dls
    +
    +
    +
    X = np.zeros((10, 3, 5000)) 
    +y = np.random.randint(0,2,X.shape[0])
    +splits = get_splits(y)
    +dls = get_ts_dls(X, y, splits=splits)
    +xb, yb = dls.train.one_batch()
    +xb
    +
    +
    +
    +

    +
    +
    +
    +
    +
    TSTensor(samples:8, vars:3, len:5000, device=cpu, dtype=torch.float32)
    +
    +
    +

    If you try to use TSiTPlus, it’s likely you’ll get an ‘out-of-memory’ error.

    +

    To avoid this you can subsample the sequence reducing the input’s length. This can be done in multiple ways. Here are a few examples:

    +
    +
    # Separable convolution (to avoid mixing channels)
    +feature_extractor = Conv1d(xb.shape[1], xb.shape[1], ks=100, stride=50, padding=0, groups=xb.shape[1]).to(default_device())
    +feature_extractor.to(xb.device)(xb).shape
    +
    +
    torch.Size([8, 3, 99])
    +
    +
    +
    +
    # Convolution (if you want to mix channels or change number of channels)
    +feature_extractor=MultiConv1d(xb.shape[1], 64, kss=[1,3,5,7,9], keep_original=True).to(default_device())
    +test_eq(feature_extractor.to(xb.device)(xb).shape, (xb.shape[0], 64, xb.shape[-1]))
    +
    +
    +
    # MaxPool
    +feature_extractor = nn.Sequential(Pad1d((0, 50), 0), nn.MaxPool1d(kernel_size=100, stride=50)).to(default_device())
    +feature_extractor.to(xb.device)(xb).shape
    +
    +
    torch.Size([8, 3, 100])
    +
    +
    +
    +
    # AvgPool
    +feature_extractor = nn.Sequential(Pad1d((0, 50), 0), nn.AvgPool1d(kernel_size=100, stride=50)).to(default_device())
    +feature_extractor.to(xb.device)(xb).shape
    +
    +
    torch.Size([8, 3, 100])
    +
    +
    +

    Once you decide what type of transform you want to apply, you just need to pass the layer as the feature_extractor attribute:

    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 1000
    +c_out = 2
    +d_model = 128
    +
    +xb = torch.rand(bs, nvars, seq_len)
    +feature_extractor = partial(Conv1d, ks=5, stride=3, padding=0, groups=xb.shape[1])
    +model = TSiTPlus(nvars, c_out, seq_len, d_model=d_model, feature_extractor=feature_extractor)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +
    +
    +
    +

    Categorical variables

    +
    +
    from tsai.utils import alphabet, ALPHABET
    +
    +
    +
    a = alphabet[np.random.randint(0,3,40)]
    +b = ALPHABET[np.random.randint(6,10,40)]
    +c = np.random.rand(40).reshape(4,1,10)
    +map_a = {k:v for v,k in enumerate(np.unique(a))}
    +map_b = {k:v for v,k in enumerate(np.unique(b))}
    +n_cat_embeds = [len(m.keys()) for m in [map_a, map_b]]
    +szs = [emb_sz_rule(n) for n in n_cat_embeds]
    +a = np.asarray(a.map(map_a)).reshape(4,1,10)
    +b = np.asarray(b.map(map_b)).reshape(4,1,10)
    +inp = torch.from_numpy(np.concatenate((c,a,b), 1)).float()
    +feature_extractor = partial(Conv1d, ks=3, padding='same')
    +model = TSiTPlus(3, 2, 10, d_model=64, cat_pos=[1,2], feature_extractor=feature_extractor)
    +test_eq(model(inp).shape, (4,2))
    +
    +
    [W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.
    +
    +
    +
    +
    +

    Sequence Embedding

    +

    Sometimes you have a samples with a very long sequence length. In those cases you may want to reduce it’s length before passing it to the transformer. To do that you may just pass a token_size like in this example:

    +
    +
    t = torch.rand(8, 2, 10080)
    +SeqTokenizer(2, 128, 60)(t).shape
    +
    +
    torch.Size([8, 128, 168])
    +
    +
    +
    +
    t = torch.rand(8, 2, 10080)
    +model = TSiTPlus(2, 5, 10080, d_model=64, token_size=60)
    +model(t).shape
    +
    +
    torch.Size([8, 5])
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.tsperceiver.html b/models.tsperceiver.html new file mode 100644 index 000000000..e03533dff --- /dev/null +++ b/models.tsperceiver.html @@ -0,0 +1,1301 @@ + + + + + + + + + +tsai - TSPerceiver + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TSPerceiver

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This implementation is inspired by:

    +

    Jaegle, A., Gimeno, F., Brock, A., Zisserman, A., Vinyals, O., & Carreira, J. (2021).

    +

    Perceiver: General Perception with Iterative Attention. arXiv preprint arXiv:2103.03206.

    +

    Paper: https://arxiv.org/pdf/2103.03206.pdf

    +

    Official repo: Not available as og April, 2021.

    +
    +

    source

    +
    +

    TSPerceiver

    +
    +
     TSPerceiver (c_in, c_out, seq_len, cat_szs=0, n_cont=0, n_latents=512,
    +              d_latent=128, d_context=None, n_layers=6,
    +              self_per_cross_attn=1, share_weights=True, cross_n_heads=1,
    +              self_n_heads=8, d_head=None, attn_dropout=0.0,
    +              fc_dropout=0.0, concat_pool=False)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    from tsai.basics import *
    +from tsai.data.all import *
    +
    +
    +
    dsid = 'OliveOil'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +ts_features_df = get_ts_features(X, y)
    +ts_features_df.shape
    +
    +
    Feature Extraction: 100%|██████████████████████████████████████████| 30/30 [00:00<00:00, 189.16it/s]
    +
    +
    +
    (60, 11)
    +
    +
    +
    +
    # raw ts
    +tfms  = [None, [Categorize()]]
    +batch_tfms = TSStandardize(by_sample=True)
    +ts_dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)
    +
    +# ts features
    +cat_names = None
    +cont_names = ts_features_df.columns[:-2]
    +y_names = 'target'
    +tab_dls = get_tabular_dls(ts_features_df, cat_names=cat_names, cont_names=cont_names, y_names=y_names, splits=splits)
    +
    +# mixed
    +mixed_dls = get_mixed_dls(ts_dls, tab_dls)
    +xb, yb = mixed_dls.one_batch()
    +
    +
    +
    model = TSPerceiver(ts_dls.vars, ts_dls.c, ts_dls.len, cat_szs=0, 
    +                    # n_cont=0, 
    +                    n_cont=xb[1][1].shape[1], 
    +                    n_latents=128, d_latent=128, n_layers=3, self_per_cross_attn=1, share_weights=True,
    +                    cross_n_heads=16, self_n_heads=16, d_head=None, attn_dropout=0., fc_dropout=0.).to(device)
    +test_eq(model(xb).shape, (yb.shape[0], len(np.unique(y))))
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.tssequencerplus.html b/models.tssequencerplus.html new file mode 100644 index 000000000..8fcb98380 --- /dev/null +++ b/models.tssequencerplus.html @@ -0,0 +1,1544 @@ + + + + + + + + + +tsai - TSSequencerPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TSSequencerPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is a PyTorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on Sequencer: Deep LSTM for Image Classification

    +
    +
    +
    class TSSequencerPlus(nn.Sequential):
    +    r"""Time Series Sequencer model based on:
    +
    +    Tatsunami, Y., & Taki, M. (2022). Sequencer: Deep LSTM for Image Classification. arXiv preprint arXiv:2205.01972.
    +    Official implementation: https://github.com/okojoalg/sequencer
    +
    +    Args:
    +        c_in:               the number of features (aka variables, dimensions, channels) in the time series dataset.
    +        c_out:              the number of target classes.
    +        seq_len:            number of time steps in the time series.
    +        d_model:            total dimension of the model (number of features created by the model).
    +        depth:              number of blocks in the encoder.
    +        act:                the activation function of positionwise feedforward layer.
    +        lstm_dropout:       dropout rate applied to the lstm sublayer.
    +        dropout:            dropout applied to to the embedded sequence steps after position embeddings have been added and 
    +                            to the mlp sublayer in the encoder.
    +        drop_path_rate:     stochastic depth rate.
    +        mlp_ratio:          ratio of mlp hidden dim to embedding dim.
    +        lstm_bias:          determines whether bias is applied to the LSTM layer.
    +        pre_norm:           if True normalization will be applied as the first step in the sublayers. Defaults to False.
    +        use_token:          if True, the output will come from the transformed token. This is meant to be use in classification tasks.
    +        use_pe:             flag to indicate if positional embedding is used.
    +        n_cat_embeds:       list with the sizes of the dictionaries of embeddings (int).
    +        cat_embed_dims:     list with the sizes of each embedding vector (int).
    +        cat_padding_idxs:       If specified, the entries at cat_padding_idxs do not contribute to the gradient; therefore, the embedding vector at cat_padding_idxs
    +                            are not updated during training. Use 0 for those categorical embeddings that may have #na# values. Otherwise, leave them as None.
    +                            You can enter a combination for different embeddings (for example, [0, None, None]).
    +        cat_pos:            list with the position of the categorical variables in the input.
    +        token_size:         Size of the embedding function used to reduce the sequence length (similar to ViT's patch size)
    +        tokenizer:          nn.Module or callable that will be used to reduce the sequence length
    +        feature_extractor:  nn.Module or callable that will be used to preprocess the time series before 
    +                            the embedding step. It is useful to extract features or resample the time series.
    +        flatten:            flag to indicate if the 3d logits will be flattened to 2d in the model's head if use_token is set to False. 
    +                            If use_token is False and flatten is False, the model will apply a pooling layer.
    +        concat_pool:        if True the head begins with fastai's AdaptiveConcatPool2d if concat_pool=True; otherwise, it uses traditional average pooling. 
    +        fc_dropout:         dropout applied to the final fully connected layer.
    +        use_bn:             flag that indicates if batchnorm will be applied to the head.
    +        bias_init:          values used to initialized the output layer.
    +        y_range:            range of possible y values (used in regression tasks).        
    +        custom_head:        custom head that will be applied to the network. It must contain all kwargs (pass a partial function)
    +        verbose:            flag to control verbosity of the model.
    +
    +    Input:
    +        x: bs (batch size) x nvars (aka features, variables, dimensions, channels) x seq_len (aka time steps)
    +    """
    +    
    +    def __init__(self, c_in:int, c_out:int, seq_len:int, d_model:int=128, depth:int=6, act:str='gelu',
    +                 lstm_dropout:float=0., dropout:float=0., drop_path_rate:float=0., mlp_ratio:int=1, lstm_bias:bool=True, 
    +                 pre_norm:bool=False, use_token:bool=False, use_pe:bool=True, 
    +                 cat_pos:Optional[list]=None, n_cat_embeds:Optional[list]=None, cat_embed_dims:Optional[list]=None, cat_padding_idxs:Optional[list]=None,
    +                 token_size:int=None, tokenizer:Optional[Callable]=None, feature_extractor:Optional[Callable]=None, 
    +                 flatten:bool=False, concat_pool:bool=True, fc_dropout:float=0., use_bn:bool=False, 
    +                 bias_init:Optional[Union[float, list]]=None, y_range:Optional[tuple]=None, custom_head:Optional[Callable]=None, verbose:bool=True,
    +                 **kwargs):
    +
    +        if use_token and c_out == 1: 
    +            use_token = False
    +            pv("use_token set to False as c_out == 1", verbose)
    +        backbone = _TSSequencerBackbone(c_in, seq_len, depth=depth, d_model=d_model, act=act,
    +                                      lstm_dropout=lstm_dropout, dropout=dropout, drop_path_rate=drop_path_rate, 
    +                                      pre_norm=pre_norm, mlp_ratio=mlp_ratio, use_pe=use_pe, use_token=use_token, 
    +                                      n_cat_embeds=n_cat_embeds, cat_embed_dims=cat_embed_dims, cat_padding_idxs=cat_padding_idxs, cat_pos=cat_pos, 
    +                                      feature_extractor=feature_extractor, token_size=token_size, tokenizer=tokenizer)
    +
    +        self.head_nf = d_model
    +        self.c_out = c_out
    +        self.seq_len = seq_len
    +
    +        # Head
    +        if custom_head:
    +            if isinstance(custom_head, nn.Module): head = custom_head
    +            else: head = custom_head(self.head_nf, c_out, seq_len, **kwargs)
    +        else:
    +            nf = d_model
    +            layers = []
    +            if use_token: 
    +                layers += [TokenLayer()]
    +            elif flatten:
    +                layers += [Reshape(-1)]
    +                nf = nf * seq_len
    +            else:
    +                if concat_pool: nf *= 2
    +                layers = [GACP1d(1) if concat_pool else GAP1d(1)]
    +            if use_bn: layers += [nn.BatchNorm1d(nf)]
    +            if fc_dropout: layers += [nn.Dropout(fc_dropout)]
    +            
    +            # Last layer
    +            linear = nn.Linear(nf, c_out)
    +            if bias_init is not None: 
    +                if isinstance(bias_init, float): nn.init.constant_(linear.bias, bias_init)
    +                else: linear.bias = nn.Parameter(torch.as_tensor(bias_init, dtype=torch.float32))
    +            layers += [linear]
    +
    +            if y_range: layers += [SigmoidRange(*y_range)]
    +            head = nn.Sequential(*layers)
    +        super().__init__(OrderedDict([('backbone', backbone), ('head', head)]))
    +        
    +        
    +TSSequencer = TSSequencerPlus
    +
    +
    +

    source

    +
    +

    TSSequencerPlus

    +
    +
     TSSequencerPlus (c_in:int, c_out:int, seq_len:int, d_model:int=128,
    +                  depth:int=6, act:str='gelu', lstm_dropout:float=0.0,
    +                  dropout:float=0.0, drop_path_rate:float=0.0,
    +                  mlp_ratio:int=1, lstm_bias:bool=True,
    +                  pre_norm:bool=False, use_token:bool=False,
    +                  use_pe:bool=True, cat_pos:Optional[list]=None,
    +                  n_cat_embeds:Optional[list]=None,
    +                  cat_embed_dims:Optional[list]=None,
    +                  cat_padding_idxs:Optional[list]=None,
    +                  token_size:int=None, tokenizer:Optional[Callable]=None,
    +                  feature_extractor:Optional[Callable]=None,
    +                  flatten:bool=False, concat_pool:bool=True,
    +                  fc_dropout:float=0.0, use_bn:bool=False,
    +                  bias_init:Union[float,list,NoneType]=None,
    +                  y_range:Optional[tuple]=None,
    +                  custom_head:Optional[Callable]=None, verbose:bool=True,
    +                  **kwargs)
    +
    +

    Time Series Sequencer model based on:

    +

    Tatsunami, Y., & Taki, M. (2022). Sequencer: Deep LSTM for Image Classification. arXiv preprint arXiv:2205.01972. Official implementation: https://github.com/okojoalg/sequencer

    +

    Args: c_in: the number of features (aka variables, dimensions, channels) in the time series dataset. c_out: the number of target classes. seq_len: number of time steps in the time series. d_model: total dimension of the model (number of features created by the model). depth: number of blocks in the encoder. act: the activation function of positionwise feedforward layer. lstm_dropout: dropout rate applied to the lstm sublayer. dropout: dropout applied to to the embedded sequence steps after position embeddings have been added and to the mlp sublayer in the encoder. drop_path_rate: stochastic depth rate. mlp_ratio: ratio of mlp hidden dim to embedding dim. lstm_bias: determines whether bias is applied to the LSTM layer. pre_norm: if True normalization will be applied as the first step in the sublayers. Defaults to False. use_token: if True, the output will come from the transformed token. This is meant to be use in classification tasks. use_pe: flag to indicate if positional embedding is used. n_cat_embeds: list with the sizes of the dictionaries of embeddings (int). cat_embed_dims: list with the sizes of each embedding vector (int). cat_padding_idxs: If specified, the entries at cat_padding_idxs do not contribute to the gradient; therefore, the embedding vector at cat_padding_idxs are not updated during training. Use 0 for those categorical embeddings that may have #na# values. Otherwise, leave them as None. You can enter a combination for different embeddings (for example, [0, None, None]). cat_pos: list with the position of the categorical variables in the input. token_size: Size of the embedding function used to reduce the sequence length (similar to ViT’s patch size) tokenizer: nn.Module or callable that will be used to reduce the sequence length feature_extractor: nn.Module or callable that will be used to preprocess the time series before the embedding step. It is useful to extract features or resample the time series. flatten: flag to indicate if the 3d logits will be flattened to 2d in the model’s head if use_token is set to False. If use_token is False and flatten is False, the model will apply a pooling layer. concat_pool: if True the head begins with fastai’s AdaptiveConcatPool2d if concat_pool=True; otherwise, it uses traditional average pooling. fc_dropout: dropout applied to the final fully connected layer. use_bn: flag that indicates if batchnorm will be applied to the head. bias_init: values used to initialized the output layer. y_range: range of possible y values (used in regression tasks).
    +custom_head: custom head that will be applied to the network. It must contain all kwargs (pass a partial function) verbose: flag to control verbosity of the model.

    +

    Input: x: bs (batch size) x nvars (aka features, variables, dimensions, channels) x seq_len (aka time steps)

    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 50
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +model = TSSequencerPlus(nvars, c_out, seq_len)
    +
    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 50
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +model = TSSequencerPlus(nvars, c_out, seq_len, lstm_dropout=.1, dropout=.1, use_token=True)
    +test_eq(model(xb).shape, (bs, c_out))
    +model = TSSequencerPlus(nvars, c_out, seq_len, lstm_dropout=.1, dropout=.1, use_token=False)
    +test_eq(model(xb).shape, (bs, c_out))
    +
    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 50
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +bias_init = np.array([0.8, .2])
    +model = TSSequencerPlus(nvars, c_out, seq_len, bias_init=bias_init)
    +test_eq(model(xb).shape, (bs, c_out))
    +test_eq(model.head[1].bias.data, tensor(bias_init))
    +
    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 50
    +c_out = 1
    +xb = torch.rand(bs, nvars, seq_len)
    +bias_init = 8.5
    +model = TSSequencerPlus(nvars, c_out, seq_len, bias_init=bias_init)
    +test_eq(model(xb).shape, (bs, c_out))
    +test_eq(model.head[1].bias.data, tensor([bias_init]))
    +
    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 50
    +c_out = 2
    +xb = torch.rand(bs, nvars, seq_len)
    +bias_init = np.array([0.8, .2])
    +model = TSSequencerPlus(nvars, c_out, seq_len, bias_init=bias_init)
    +test_eq(model(xb).shape, (bs, c_out))
    +test_eq(model.head[1].bias.data, tensor(bias_init))
    +
    +
    +
    +

    Feature extractor

    +

    It’s a known fact that transformers cannot be directly applied to long sequences. To avoid this, we have included a way to subsample the sequence to generate a more manageable input.

    +
    +
    from tsai.data.validation import get_splits
    +from tsai.data.core import get_ts_dls
    +
    +
    +
    X = np.zeros((10, 3, 5000)) 
    +y = np.random.randint(0,2,X.shape[0])
    +splits = get_splits(y)
    +dls = get_ts_dls(X, y, splits=splits)
    +xb, yb = dls.train.one_batch()
    +xb
    +
    +
    +
    +

    +
    +
    +
    +
    +
    TSTensor(samples:8, vars:3, len:5000, device=cpu, dtype=torch.float32)
    +
    +
    +

    If you try to use SequencerPlus, it’s likely you’ll get an ‘out-of-memory’ error.

    +

    To avoid this you can subsample the sequence reducing the input’s length. This can be done in multiple ways. Here are a few examples:

    +
    +
    # Separable convolution (to avoid mixing channels)
    +feature_extractor = Conv1d(xb.shape[1], xb.shape[1], ks=100, stride=50, padding=0, groups=xb.shape[1]).to(default_device())
    +feature_extractor.to(xb.device)(xb).shape
    +
    +
    torch.Size([8, 3, 99])
    +
    +
    +
    +
    # Convolution (if you want to mix channels or change number of channels)
    +feature_extractor=MultiConv1d(xb.shape[1], 64, kss=[1,3,5,7,9], keep_original=True).to(default_device())
    +test_eq(feature_extractor.to(xb.device)(xb).shape, (xb.shape[0], 64, xb.shape[-1]))
    +
    +
    +
    # MaxPool
    +feature_extractor = nn.Sequential(Pad1d((0, 50), 0), nn.MaxPool1d(kernel_size=100, stride=50)).to(default_device())
    +feature_extractor.to(xb.device)(xb).shape
    +
    +
    torch.Size([8, 3, 100])
    +
    +
    +
    +
    # AvgPool
    +feature_extractor = nn.Sequential(Pad1d((0, 50), 0), nn.AvgPool1d(kernel_size=100, stride=50)).to(default_device())
    +feature_extractor.to(xb.device)(xb).shape
    +
    +
    torch.Size([8, 3, 100])
    +
    +
    +

    Once you decide what type of transform you want to apply, you just need to pass the layer as the feature_extractor attribute:

    +
    +
    bs = 16
    +nvars = 4
    +seq_len = 1000
    +c_out = 2
    +d_model = 128
    +
    +xb = torch.rand(bs, nvars, seq_len)
    +feature_extractor = partial(Conv1d, ks=5, stride=3, padding=0, groups=xb.shape[1])
    +model = TSSequencerPlus(nvars, c_out, seq_len, d_model=d_model, feature_extractor=feature_extractor)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +
    +
    +
    +

    Categorical variables

    +
    +
    from tsai.utils import alphabet, ALPHABET
    +
    +
    +
    a = alphabet[np.random.randint(0,3,40)]
    +b = ALPHABET[np.random.randint(6,10,40)]
    +c = np.random.rand(40).reshape(4,1,10)
    +map_a = {k:v for v,k in enumerate(np.unique(a))}
    +map_b = {k:v for v,k in enumerate(np.unique(b))}
    +n_cat_embeds = [len(m.keys()) for m in [map_a, map_b]]
    +szs = [emb_sz_rule(n) for n in n_cat_embeds]
    +a = np.asarray(a.map(map_a)).reshape(4,1,10)
    +b = np.asarray(b.map(map_b)).reshape(4,1,10)
    +inp = torch.from_numpy(np.concatenate((c,a,b), 1)).float()
    +feature_extractor = partial(Conv1d, ks=3, padding='same')
    +model = TSSequencerPlus(3, 2, 10, d_model=64, cat_pos=[1,2], feature_extractor=feature_extractor)
    +test_eq(model(inp).shape, (4,2))
    +
    +
    [W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.
    +
    +
    +
    +
    +

    Sequence Embedding

    +

    Sometimes you have a samples with a very long sequence length. In those cases you may want to reduce it’s length before passing it to the transformer. To do that you may just pass a token_size like in this example:

    +
    +
    t = torch.rand(8, 2, 10080)
    +SeqTokenizer(2, 128, 60)(t).shape
    +
    +
    torch.Size([8, 128, 168])
    +
    +
    +
    +
    t = torch.rand(8, 2, 10080)
    +model = TSSequencerPlus(2, 5, 10080, d_model=64, token_size=60)
    +model(t).shape
    +
    +
    torch.Size([8, 5])
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.tst.html b/models.tst.html new file mode 100644 index 000000000..cc834456f --- /dev/null +++ b/models.tst.html @@ -0,0 +1,1389 @@ + + + + + + + + + +tsai - TST + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TST

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial PyTorch implementation by Ignacio Oguiza of - oguiza@timeseriesAI.co based on: * George Zerveas et al. A Transformer-based Framework for Multivariate Time Series Representation Learning, in Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery and Data Mining (KDD ’21), August 14–18, 2021. ArXiV version: https://arxiv.org/abs/2010.02803 * Official implementation: https://github.com/gzerveas/mvts_transformer

    +
    @inproceedings{10.1145/3447548.3467401,
    +author = {Zerveas, George and Jayaraman, Srideepika and Patel, Dhaval and Bhamidipaty, Anuradha and Eickhoff, Carsten},
    +title = {A Transformer-Based Framework for Multivariate Time Series Representation Learning},
    +year = {2021},
    +isbn = {9781450383325},
    +publisher = {Association for Computing Machinery},
    +address = {New York, NY, USA},
    +url = {https://doi.org/10.1145/3447548.3467401},
    +doi = {10.1145/3447548.3467401},
    +booktitle = {Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery &amp; Data Mining},
    +pages = {2114–2124},
    +numpages = {11},
    +keywords = {regression, framework, multivariate time series, classification, transformer, deep learning, self-supervised learning, unsupervised learning, imputation},
    +location = {Virtual Event, Singapore},
    +series = {KDD '21}
    +}
    +

    This paper uses ‘Attention is all you need’ as a major reference: * Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … & Polosukhin, I. (2017). Attention is all you need. In Advances in neural information processing systems (pp. 5998-6008).

    +

    This implementation is adapted to work with the rest of the tsai library, and contain some hyperparameters that are not available in the original implementation. They are included to experiment with them.

    +
    +

    TST arguments

    +

    Usual values are the ones that appear in the “Attention is all you need” and “A Transformer-based Framework for Multivariate Time Series Representation Learning” papers.

    +

    The default values are the ones selected as a default configuration in the latter.

    +
      +
    • c_in: the number of features (aka variables, dimensions, channels) in the time series dataset. dls.var
    • +
    • c_out: the number of target classes. dls.c
    • +
    • seq_len: number of time steps in the time series. dls.len
    • +
    • max_seq_len: useful to control the temporal resolution in long time series to avoid memory issues. Default. None.
    • +
    • d_model: total dimension of the model (number of features created by the model). Usual values: 128-1024. Default: 128.
    • +
    • n_heads: parallel attention heads. Usual values: 8-16. Default: 16.
    • +
    • d_k: size of the learned linear projection of queries and keys in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.
    • +
    • d_v: size of the learned linear projection of values in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.
    • +
    • d_ff: the dimension of the feedforward network model. Usual values: 256-4096. Default: 256.
    • +
    • dropout: amount of residual dropout applied in the encoder. Usual values: 0.-0.3. Default: 0.1.
    • +
    • activation: the activation function of intermediate layer, relu or gelu. Default: ‘gelu’.
    • +
    • n_layers: the number of sub-encoder-layers in the encoder. Usual values: 2-8. Default: 3.
    • +
    • fc_dropout: dropout applied to the final fully connected layer. Usual values: 0.-0.8. Default: 0.
    • +
    • y_range: range of possible y values (used in regression tasks). Default: None
    • +
    • kwargs: nn.Conv1d kwargs. If not {}, a nn.Conv1d with those kwargs will be applied to original time series.
    • +
    +
    +
    +

    Imports

    +
    +
    +

    TST

    +
    +
    t = torch.rand(16, 50, 128)
    +output, attn = _MultiHeadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)(t, t, t)
    +output.shape, attn.shape
    +
    +
    (torch.Size([16, 50, 128]), torch.Size([16, 3, 50, 50]))
    +
    +
    +
    +
    t = torch.rand(16, 50, 128)
    +output = _TSTEncoderLayer(q_len=50, d_model=128, n_heads=3, d_k=None, d_v=None, d_ff=512, dropout=0.1, activation='gelu')(t)
    +output.shape
    +
    +
    torch.Size([16, 50, 128])
    +
    +
    +
    +

    source

    +
    +

    TST

    +
    +
     TST (c_in:int, c_out:int, seq_len:int, max_seq_len:Optional[int]=None,
    +      n_layers:int=3, d_model:int=128, n_heads:int=16,
    +      d_k:Optional[int]=None, d_v:Optional[int]=None, d_ff:int=256,
    +      dropout:float=0.1, act:str='gelu', fc_dropout:float=0.0,
    +      y_range:Optional[tuple]=None, verbose:bool=False, **kwargs)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 32
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 5000
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +
    +# standardize by channel by_var based on the training set
    +xb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)
    +
    +# Settings
    +max_seq_len = 256
    +d_model = 128
    +n_heads = 16
    +d_k = d_v = None # if None --> d_model // n_heads
    +d_ff = 256
    +dropout = 0.1
    +activation = "gelu"
    +n_layers = 3
    +fc_dropout = 0.1
    +kwargs = {}
    +
    +model = TST(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,
    +            d_k=d_k, d_v=d_v, d_ff=d_ff, dropout=dropout, activation=activation, n_layers=n_layers,
    +            fc_dropout=fc_dropout, **kwargs)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 517378
    +
    +
    +
    +
    bs = 32
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 60
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +
    +# standardize by channel by_var based on the training set
    +xb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)
    +
    +# Settings
    +max_seq_len = 120
    +d_model = 128
    +n_heads = 16
    +d_k = d_v = None # if None --> d_model // n_heads
    +d_ff = 256
    +dropout = 0.1
    +act = "gelu"
    +n_layers = 3
    +fc_dropout = 0.1
    +kwargs = {}
    +# kwargs = dict(kernel_size=5, padding=2)
    +
    +model = TST(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,
    +            d_k=d_k, d_v=d_v, d_ff=d_ff, dropout=dropout, act=act, n_layers=n_layers,
    +            fc_dropout=fc_dropout, **kwargs)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 420226
    +
    +
    + + +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.tstplus.html b/models.tstplus.html new file mode 100644 index 000000000..c3d66a36d --- /dev/null +++ b/models.tstplus.html @@ -0,0 +1,1725 @@ + + + + + + + + + +tsai - TSTPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    TSTPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial PyTorch implementation by Ignacio Oguiza of - oguiza@timeseriesAI.co based on:

    +
      +
    • George Zerveas et al. A Transformer-based Framework for Multivariate Time Series Representation Learning, in Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery and Data Mining (KDD ’21), August 14–18, 2021. ArXiV version: https://arxiv.org/abs/2010.02803
    • +
    • Official implementation: https://github.com/gzerveas/mvts_transformer
    • +
    +
    @inproceedings{10.1145/3447548.3467401,
    +author = {Zerveas, George and Jayaraman, Srideepika and Patel, Dhaval and Bhamidipaty, Anuradha and Eickhoff, Carsten},
    +title = {A Transformer-Based Framework for Multivariate Time Series Representation Learning},
    +year = {2021},
    +isbn = {9781450383325},
    +publisher = {Association for Computing Machinery},
    +address = {New York, NY, USA},
    +url = {https://doi.org/10.1145/3447548.3467401},
    +doi = {10.1145/3447548.3467401},
    +booktitle = {Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery &amp; Data Mining},
    +pages = {2114–2124},
    +numpages = {11},
    +keywords = {regression, framework, multivariate time series, classification, transformer, deep learning, self-supervised learning, unsupervised learning, imputation},
    +location = {Virtual Event, Singapore},
    +series = {KDD '21}
    +}
    + +

    This implementation is adapted to work with the rest of the tsai library, and contain some hyperparameters that are not available in the original implementation. I included them for experimenting.

    +
    +

    Imports

    +
    +
    +

    TST

    +
    +
    t = torch.rand(16, 50, 128)
    +attn_mask = torch.triu(torch.ones(50, 50)) # shape: q_len x q_len
    +key_padding_mask = torch.zeros(16, 50)
    +key_padding_mask[[1, 3, 6, 15], -10:] = 1
    +key_padding_mask = key_padding_mask.bool()
    +print('attn_mask', attn_mask.shape, 'key_padding_mask', key_padding_mask.shape)
    +encoder = _TSTEncoderLayer(q_len=50, d_model=128, n_heads=8, d_k=None, d_v=None, d_ff=512, attn_dropout=0., dropout=0.1, store_attn=True, activation='gelu')
    +output = encoder(t, key_padding_mask=key_padding_mask, attn_mask=attn_mask)
    +output.shape
    +
    +
    attn_mask torch.Size([50, 50]) key_padding_mask torch.Size([16, 50])
    +
    +
    +
    torch.Size([16, 50, 128])
    +
    +
    +
    +
    cmap='viridis'
    +figsize=(6,5)
    +plt.figure(figsize=figsize)
    +plt.pcolormesh(encoder.attn[0][0].detach().cpu().numpy(), cmap=cmap)
    +plt.title('Self-attention map')
    +plt.colorbar()
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +

    TSTPlus

    +
    +
     TSTPlus (c_in:int, c_out:int, seq_len:int, max_seq_len:Optional[int]=512,
    +          n_layers:int=3, d_model:int=128, n_heads:int=16,
    +          d_k:Optional[int]=None, d_v:Optional[int]=None, d_ff:int=256,
    +          norm:str='BatchNorm', attn_dropout:float=0.0, dropout:float=0.0,
    +          act:str='gelu', key_padding_mask:bool='auto',
    +          padding_var:Optional[int]=None,
    +          attn_mask:Optional[torch.Tensor]=None, res_attention:bool=True,
    +          pre_norm:bool=False, store_attn:bool=False, pe:str='zeros',
    +          learn_pe:bool=True, flatten:bool=True, fc_dropout:float=0.0,
    +          concat_pool:bool=False, bn:bool=False,
    +          custom_head:Optional[Callable]=None,
    +          y_range:Optional[tuple]=None, verbose:bool=False, **kwargs)
    +
    +

    TST (Time Series Transformer) is a Transformer that takes continuous time series as inputs

    +
    +
    from tsai.models.utils import build_ts_model
    +
    +
    +
    bs = 8
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 1_500
    +
    +xb = torch.randn(bs, c_in, seq_len).to(device)
    +
    +# standardize by channel by_var based on the training set
    +xb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)
    +
    +# Settings
    +max_seq_len = 256
    +d_model = 128
    +n_heads = 16
    +d_k = d_v = None  # if None --> d_model // n_heads
    +d_ff = 256
    +norm = "BatchNorm"
    +dropout = 0.1
    +activation = "gelu"
    +n_layers = 3
    +fc_dropout = 0.1
    +pe = None
    +learn_pe = True
    +kwargs = {}
    +
    +model = TSTPlus(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,
    +                d_k=d_k, d_v=d_v, d_ff=d_ff, norm=norm, dropout=dropout, activation=activation, n_layers=n_layers,
    +                fc_dropout=fc_dropout, pe=pe, learn_pe=learn_pe, **kwargs).to(device)
    +test_eq(model(xb).shape, [bs, c_out])
    +test_eq(model[0], model.backbone)
    +test_eq(model[1], model.head)
    +model2 = build_ts_model(TSTPlus, c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,
    +                           d_k=d_k, d_v=d_v, d_ff=d_ff, norm=norm, dropout=dropout, activation=activation, n_layers=n_layers,
    +                           fc_dropout=fc_dropout, pe=pe, learn_pe=learn_pe, **kwargs).to(device)
    +test_eq(model2(xb).shape, [bs, c_out])
    +test_eq(model2[0], model2.backbone)
    +test_eq(model2[1], model2.head)
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 470018
    +
    +
    +
    +
    key_padding_mask = torch.sort(torch.randint(0, 2, (bs, max_seq_len))).values.bool().to(device)
    +key_padding_mask[0]
    +
    +
    tensor([False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False, False,
    +        False, False, False, False, False, False, False, False, False,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True,  True,  True,  True,  True,
    +         True,  True,  True,  True,  True,  True])
    +
    +
    +
    +
    model2.key_padding_mask = True
    +model2.to(device)((xb, key_padding_mask)).shape
    +
    +
    torch.Size([8, 2])
    +
    +
    +
    +
    model.head
    +
    +
    Sequential(
    +  (0): GELU(approximate='none')
    +  (1): fastai.layers.Flatten(full=False)
    +  (2): LinBnDrop(
    +    (0): Dropout(p=0.1, inplace=False)
    +    (1): Linear(in_features=32768, out_features=2, bias=True)
    +  )
    +)
    +
    +
    +
    +
    model = TSTPlus(c_in, c_out, seq_len, pre_norm=True)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +
    +
    +
    bs = 8
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 5000
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +
    +# standardize by channel by_var based on the training set
    +xb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)
    +
    +model = TSTPlus(c_in, c_out, seq_len, res_attention=True)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 605698
    +
    +
    +
    +
    custom_head = partial(create_pool_head, concat_pool=True)
    +model = TSTPlus(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,
    +            d_k=d_k, d_v=d_v, d_ff=d_ff, dropout=dropout, activation=activation, n_layers=n_layers,
    +            fc_dropout=fc_dropout, pe=pe, learn_pe=learn_pe, flatten=False, custom_head=custom_head, **kwargs)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 421122
    +
    +
    +
    +
    custom_head = partial(create_pool_plus_head, concat_pool=True)
    +model = TSTPlus(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,
    +            d_k=d_k, d_v=d_v, d_ff=d_ff, dropout=dropout, activation=activation, n_layers=n_layers,
    +            fc_dropout=fc_dropout, pe=pe, learn_pe=learn_pe, flatten=False, custom_head=custom_head, **kwargs)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +
    +
    model parameters: 554240
    +
    +
    +
    +
    bs = 8
    +c_in = 9  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 60
    +
    +xb = torch.randn(bs, c_in, seq_len)
    +
    +# standardize by channel by_var based on the training set
    +xb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)
    +
    +# Settings
    +max_seq_len = 120
    +d_model = 128
    +n_heads = 16
    +d_k = d_v = None # if None --> d_model // n_heads
    +d_ff = 256
    +dropout = 0.1
    +act = "gelu"
    +n_layers = 3
    +fc_dropout = 0.1
    +pe='zeros'
    +learn_pe=True
    +kwargs = {}
    +# kwargs = dict(kernel_size=5, padding=2)
    +
    +model = TSTPlus(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,
    +            d_k=d_k, d_v=d_v, d_ff=d_ff, dropout=dropout, act=act, n_layers=n_layers,
    +            fc_dropout=fc_dropout, pe=pe, learn_pe=learn_pe, **kwargs)
    +test_eq(model.to(xb.device)(xb).shape, [bs, c_out])
    +print(f'model parameters: {count_parameters(model)}')
    +body, head = model[0], model[1]
    +test_eq(body.to(xb.device)(xb).ndim, 3)
    +test_eq(head.to(xb.device)(body.to(xb.device)(xb)).ndim, 2)
    +head
    +
    +
    model parameters: 421762
    +
    +
    +
    Sequential(
    +  (0): GELU(approximate='none')
    +  (1): fastai.layers.Flatten(full=False)
    +  (2): LinBnDrop(
    +    (0): Dropout(p=0.1, inplace=False)
    +    (1): Linear(in_features=7680, out_features=2, bias=True)
    +  )
    +)
    +
    +
    +
    +
    model.show_pe()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    model = TSTPlus(3, 2, 10)
    +xb = torch.randn(4, 3, 10)
    +yb = torch.randint(0, 2, (4,))
    +test_eq(model.backbone._key_padding_mask(xb)[1], None)
    +random_idxs = random_choice(len(xb), 2, False)
    +xb[random_idxs, :, -5:] = np.nan
    +xb[random_idxs, 0, 1] = np.nan
    +test_eq(model.backbone._key_padding_mask(xb.clone())[1].data, (torch.isnan(xb).float().mean(1)==1).bool())
    +test_eq(model.backbone._key_padding_mask(xb.clone())[1].data.shape, (4,10))
    +print(torch.isnan(xb).sum())
    +pred = model.to(xb.device)(xb.clone())
    +loss = CrossEntropyLossFlat()(pred, yb)
    +loss.backward()
    +model.to(xb.device).backbone._key_padding_mask(xb)[1].data.shape
    +
    +
    tensor(32)
    +
    +
    +
    torch.Size([4, 10])
    +
    +
    +
    +
    bs = 4
    +c_in = 3
    +seq_len = 10
    +c_out = 2
    +xb = torch.randn(bs, c_in, seq_len)
    +xb[:, -1] = torch.randint(0, 2, (bs, seq_len)).sort()[0]
    +model = TSTPlus(c_in, c_out, seq_len).to(xb.device)
    +test_eq(model.backbone._key_padding_mask(xb)[1], None)
    +model = TSTPlus(c_in, c_out, seq_len, padding_var=-1).to(xb.device)
    +test_eq(model.backbone._key_padding_mask(xb)[1], (xb[:, -1]==1))
    +model = TSTPlus(c_in, c_out, seq_len, padding_var=2).to(xb.device)
    +test_eq(model.backbone._key_padding_mask(xb)[1], (xb[:, -1]==1))
    +test_eq(model(xb).shape, (bs, c_out))
    +
    +
    +
    bs = 4
    +c_in = 3
    +seq_len = 10
    +c_out = 2
    +xb = torch.randn(bs, c_in, seq_len)
    +model = TSTPlus(c_in, c_out, seq_len, act='smelu')
    +
    +
    +

    source

    +
    +
    +

    MultiTSTPlus

    +
    +
     MultiTSTPlus (feat_list, c_out, seq_len, max_seq_len:Optional[int]=512,
    +               custom_head=None, n_layers:int=3, d_model:int=128,
    +               n_heads:int=16, d_k:Optional[int]=None,
    +               d_v:Optional[int]=None, d_ff:int=256, norm:str='BatchNorm',
    +               attn_dropout:float=0.0, dropout:float=0.0, act:str='gelu',
    +               key_padding_mask:bool='auto',
    +               padding_var:Optional[int]=None,
    +               attn_mask:Optional[torch.Tensor]=None,
    +               res_attention:bool=True, pre_norm:bool=False,
    +               store_attn:bool=False, pe:str='zeros', learn_pe:bool=True,
    +               flatten:bool=True, fc_dropout:float=0.0,
    +               concat_pool:bool=False, bn:bool=False,
    +               y_range:Optional[tuple]=None, verbose:bool=False)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    bs = 8
    +c_in = 7  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 10
    +xb2 = torch.randn(bs, c_in, seq_len)
    +model1 = MultiTSTPlus([2, 5], c_out, seq_len)
    +model2 = MultiTSTPlus(7, c_out, seq_len)
    +test_eq(model1.to(xb2.device)(xb2).shape, (bs, c_out))
    +test_eq(model1.to(xb2.device)(xb2).shape, model2.to(xb2.device)(xb2).shape)
    +test_eq(count_parameters(model1) > count_parameters(model2), True)
    +
    +
    +
    bs = 8
    +c_in = 7  # aka channels, features, variables, dimensions
    +c_out = 2
    +seq_len = 10
    +xb2 = torch.randn(bs, c_in, seq_len)
    +model1 = MultiTSTPlus([2, 5], c_out, seq_len, )
    +model2 = MultiTSTPlus([[0,2,5], [0,1,3,4,6]], c_out, seq_len)
    +test_eq(model1.to(xb2.device)(xb2).shape, (bs, c_out))
    +test_eq(model1.to(xb2.device)(xb2).shape, model2.to(xb2.device)(xb2).shape)
    +
    +
    +
    model1 = MultiTSTPlus([2, 5], c_out, seq_len, y_range=(0.5, 5.5))
    +body, head = split_model(model1)
    +test_eq(body.to(xb2.device)(xb2).ndim, 3)
    +test_eq(head.to(xb2.device)(body.to(xb2.device)(xb2)).ndim, 2)
    +head
    +
    +
    Sequential(
    +  (0): Sequential(
    +    (0): GELU(approximate='none')
    +    (1): fastai.layers.Flatten(full=False)
    +    (2): LinBnDrop(
    +      (0): Linear(in_features=2560, out_features=2, bias=True)
    +    )
    +  )
    +)
    +
    +
    +
    +
    model = MultiTSTPlus([2, 5], c_out, seq_len, pre_norm=True)
    +
    +
    +
    bs = 8
    +n_vars = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +net = MultiTSTPlus(n_vars, c_out, seq_len)
    +change_model_head(net, create_pool_plus_head, concat_pool=False)
    +print(net.to(xb.device)(xb).shape)
    +net.head
    +
    +
    torch.Size([8, 2])
    +
    +
    +
    Sequential(
    +  (0): AdaptiveAvgPool1d(output_size=1)
    +  (1): Reshape(bs)
    +  (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +  (3): Linear(in_features=128, out_features=512, bias=False)
    +  (4): ReLU(inplace=True)
    +  (5): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +  (6): Linear(in_features=512, out_features=2, bias=False)
    +)
    +
    +
    +
    +
    bs = 8
    +n_vars = 3
    +seq_len = 12
    +c_out = 10
    +xb = torch.rand(bs, n_vars, seq_len)
    +new_head = partial(conv_lin_nd_head, d=(5 ,2))
    +net = MultiTSTPlus(n_vars, c_out, seq_len, custom_head=new_head)
    +print(net.to(xb.device)(xb).shape)
    +net.head
    +
    +
    torch.Size([8, 5, 2, 10])
    +
    +
    +
    Sequential(
    +  (0): create_conv_lin_nd_head(
    +    (0): Conv1d(128, 10, kernel_size=(1,), stride=(1,))
    +    (1): Linear(in_features=12, out_features=10, bias=True)
    +    (2): Transpose(-1, -2)
    +    (3): Reshape(bs, 5, 2, 10)
    +  )
    +)
    +
    +
    + + +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.utils.html b/models.utils.html new file mode 100644 index 000000000..bf55c0c5f --- /dev/null +++ b/models.utils.html @@ -0,0 +1,1567 @@ + + + + + + + + + +tsai - Model utilities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Model utilities

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Utility functions used to build PyTorch timeseries models.

    +
    +
    +

    source

    +
    +

    apply_idxs

    +
    +
     apply_idxs (o, idxs)
    +
    +

    Function to apply indices to zarr, dask and numpy arrays

    +
    +

    source

    +
    +
    +

    SeqTokenizer

    +
    +
     SeqTokenizer (c_in, embed_dim, token_size=60, norm=False)
    +
    +

    Generates non-overlapping tokens from sub-sequences within a sequence by applying a sliding window

    +
    +

    source

    +
    +
    +

    get_embed_size

    +
    +
     get_embed_size (n_cat, rule='log2')
    +
    +
    +
    test_eq(get_embed_size(35), 6)
    +
    +
    +

    source

    +
    +
    +

    has_weight_or_bias

    +
    +
     has_weight_or_bias (l)
    +
    +
    +

    source

    +
    +
    +

    has_weight

    +
    +
     has_weight (l)
    +
    +
    +

    source

    +
    +
    +

    has_bias

    +
    +
     has_bias (l)
    +
    +
    +

    source

    +
    +
    +

    is_conv

    +
    +
     is_conv (l)
    +
    +
    +

    source

    +
    +
    +

    is_affine_layer

    +
    +
     is_affine_layer (l)
    +
    +
    +

    source

    +
    +
    +

    is_conv_linear

    +
    +
     is_conv_linear (l)
    +
    +
    +

    source

    +
    +
    +

    is_bn

    +
    +
     is_bn (l)
    +
    +
    +

    source

    +
    +
    +

    is_linear

    +
    +
     is_linear (l)
    +
    +
    +

    source

    +
    +
    +

    is_layer

    +
    +
     is_layer (*args)
    +
    +
    +

    source

    +
    +
    +

    get_layers

    +
    +
     get_layers (model, cond=<function noop>, full=True)
    +
    +
    +

    source

    +
    +
    +

    check_weight

    +
    +
     check_weight (m, cond=<function noop>, verbose=False)
    +
    +
    +

    source

    +
    +
    +

    check_bias

    +
    +
     check_bias (m, cond=<function noop>, verbose=False)
    +
    +
    +

    source

    +
    +
    +

    get_nf

    +
    +
     get_nf (m)
    +
    +

    Get nf from model’s first linear layer in head

    +
    +

    source

    +
    +
    +

    ts_splitter

    +
    +
     ts_splitter (m)
    +
    +

    Split of a model between body and head

    +
    +

    source

    +
    +
    +

    transfer_weights

    +
    +
     transfer_weights (model, weights_path:pathlib.Path,
    +                   device:torch.device=None, exclude_head:bool=True)
    +
    +

    Utility function that allows to easily transfer weights between models. Taken from the great self-supervised repository created by Kerem Turgutlu. https://github.com/KeremTurgutlu/self_supervised/blob/d87ebd9b4961c7da0efd6073c42782bbc61aaa2e/self_supervised/utils.py

    +
    +

    source

    +
    +
    +

    build_ts_model

    +
    +
     build_ts_model (arch, c_in=None, c_out=None, seq_len=None, d=None,
    +                 dls=None, device=None, verbose=False, s_cat_idxs=None,
    +                 s_cat_embeddings=None, s_cat_embedding_dims=None,
    +                 s_cont_idxs=None, o_cat_idxs=None, o_cat_embeddings=None,
    +                 o_cat_embedding_dims=None, o_cont_idxs=None,
    +                 patch_len=None, patch_stride=None, fusion_layers=128,
    +                 fusion_act='relu', fusion_dropout=0.0,
    +                 fusion_use_bn=True, pretrained=False, weights_path=None,
    +                 exclude_head=True, cut=-1, init=None, arch_config={},
    +                 **kwargs)
    +
    +
    +

    source

    +
    +
    +

    count_parameters

    +
    +
     count_parameters (model, trainable=True)
    +
    +
    +

    source

    +
    +
    +

    build_tsimage_model

    +
    +
     build_tsimage_model (arch, c_in=None, c_out=None, dls=None,
    +                      pretrained=False, device=None, verbose=False,
    +                      init=None, arch_config={}, **kwargs)
    +
    +
    +

    source

    +
    +
    +

    build_tabular_model

    +
    +
     build_tabular_model (arch, dls, layers=None, emb_szs=None, n_out=None,
    +                      y_range=None, device=None, arch_config={}, **kwargs)
    +
    +
    +
    from tsai.data.external import get_UCR_data
    +from tsai.data.core import TSCategorize, get_ts_dls
    +from tsai.data.preprocessing import TSStandardize
    +from tsai.models.InceptionTime import *
    +
    +
    +
    X, y, splits = get_UCR_data('NATOPS', split_data=False)
    +tfms = [None, TSCategorize()]
    +batch_tfms = TSStandardize()
    +dls = get_ts_dls(X, y, splits, tfms=tfms, batch_tfms=batch_tfms)
    +model = build_ts_model(InceptionTime, dls=dls)
    +test_eq(count_parameters(model), 460038)
    +
    +
    +

    source

    +
    +
    +

    get_clones

    +
    +
     get_clones (module, N)
    +
    +
    +
    m = nn.Conv1d(3,4,3)
    +get_clones(m, 3)
    +
    +
    ModuleList(
    +  (0-2): 3 x Conv1d(3, 4, kernel_size=(3,), stride=(1,))
    +)
    +
    +
    +
    +

    source

    +
    +
    +

    split_model

    +
    +
     split_model (m)
    +
    +
    +

    source

    +
    +
    +

    output_size_calculator

    +
    +
     output_size_calculator (mod, c_in, seq_len=None)
    +
    +
    +
    c_in = 3
    +seq_len = 30
    +m = nn.Conv1d(3, 12, kernel_size=3, stride=2)
    +new_c_in, new_seq_len = output_size_calculator(m, c_in, seq_len)
    +test_eq((new_c_in, new_seq_len), (12, 14))
    +
    +
    [W NNPACK.cpp:64] Could not initialize NNPACK! Reason: Unsupported hardware.
    +
    +
    +
    +

    source

    +
    +
    +

    change_model_head

    +
    +
     change_model_head (model, custom_head, **kwargs)
    +
    +

    Replaces a model’s head by a custom head as long as the model has a head, head_nf, c_out and seq_len attributes

    +
    +

    source

    +
    +
    +

    true_forecaster

    +
    +
     true_forecaster (o, split, horizon=1)
    +
    +
    +

    source

    +
    +
    +

    naive_forecaster

    +
    +
     naive_forecaster (o, split, horizon=1)
    +
    +
    +
    a = np.random.rand(20).cumsum()
    +split = np.arange(10, 20)
    +a, naive_forecaster(a, split, 1), true_forecaster(a, split, 1)
    +
    +
    (array([ 0.74775537,  1.41245663,  2.12445924,  2.8943163 ,  3.56384351,
    +         4.23789602,  4.83134182,  5.18560431,  5.30551186,  6.29076506,
    +         6.58873471,  7.03661275,  7.0884361 ,  7.57927022,  8.21911791,
    +         8.59726773,  9.37382718, 10.17298849, 10.40118308, 10.82265631]),
    + array([ 6.29076506,  6.58873471,  7.03661275,  7.0884361 ,  7.57927022,
    +         8.21911791,  8.59726773,  9.37382718, 10.17298849, 10.40118308]),
    + array([ 6.58873471,  7.03661275,  7.0884361 ,  7.57927022,  8.21911791,
    +         8.59726773,  9.37382718, 10.17298849, 10.40118308, 10.82265631]))
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.xceptiontime.html b/models.xceptiontime.html new file mode 100644 index 000000000..c4269394f --- /dev/null +++ b/models.xceptiontime.html @@ -0,0 +1,1426 @@ + + + + + + + + + +tsai - XceptionTime + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    XceptionTime

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial PyTorch implementation by Ignacio Oguiza - oguiza@timeseriesAI.co modified on:

    +

    Fawaz, H. I., Lucas, B., Forestier, G., Pelletier, C., Schmidt, D. F., Weber, J. & Petitjean, F. (2019). InceptionTime: Finding AlexNet for Time Series Classification. arXiv preprint arXiv:1909.04939.

    +

    Official InceptionTime tensorflow implementation: https://github.com/hfawaz/InceptionTime

    +
    +

    source

    +
    +

    XceptionTime

    +
    +
     XceptionTime (c_in, c_out, nf=16, nb_filters=None, adaptive_size=50,
    +               residual=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    XceptionBlock

    +
    +
     XceptionBlock (ni, nf, residual=True, ks=40, bottleneck=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    XceptionModule

    +
    +
     XceptionModule (ni, nf, ks=40, bottleneck=True)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 16
    +vars = 3
    +seq_len = 12
    +c_out = 6
    +xb = torch.rand(bs, vars, seq_len)
    +test_eq(XceptionTime(vars,c_out)(xb).shape, [bs, c_out])
    +test_eq(XceptionTime(vars,c_out, bottleneck=False)(xb).shape, [bs, c_out])
    +test_eq(XceptionTime(vars,c_out, residual=False)(xb).shape, [bs, c_out])
    +test_eq(count_parameters(XceptionTime(3, 2)), 399540)
    +
    +
    +
    m = XceptionTime(2,3)
    +test_eq(check_weight(m, is_bn)[0].sum(), 5) # 2 shortcut + 3 bn
    +test_eq(len(check_bias(m, is_conv)[0]), 0)
    +test_eq(len(check_bias(m)[0]), 5) # 2 shortcut + 3 bn
    +
    +
    +
    XceptionTime(3, 2)
    +
    +
    XceptionTime(
    +  (block): XceptionBlock(
    +    (xception): ModuleList(
    +      (0): XceptionModule(
    +        (bottleneck): Conv1d(3, 16, kernel_size=(1,), stride=(1,), bias=False)
    +        (convs): ModuleList(
    +          (0): SeparableConv1d(
    +            (depthwise_conv): Conv1d(16, 16, kernel_size=(39,), stride=(1,), padding=(19,), groups=16, bias=False)
    +            (pointwise_conv): Conv1d(16, 16, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (1): SeparableConv1d(
    +            (depthwise_conv): Conv1d(16, 16, kernel_size=(19,), stride=(1,), padding=(9,), groups=16, bias=False)
    +            (pointwise_conv): Conv1d(16, 16, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (2): SeparableConv1d(
    +            (depthwise_conv): Conv1d(16, 16, kernel_size=(9,), stride=(1,), padding=(4,), groups=16, bias=False)
    +            (pointwise_conv): Conv1d(16, 16, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +        )
    +        (maxconvpool): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): Conv1d(3, 16, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (concat): Concat(dim=1)
    +      )
    +      (1): XceptionModule(
    +        (bottleneck): Conv1d(64, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        (convs): ModuleList(
    +          (0): SeparableConv1d(
    +            (depthwise_conv): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), groups=32, bias=False)
    +            (pointwise_conv): Conv1d(32, 32, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (1): SeparableConv1d(
    +            (depthwise_conv): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), groups=32, bias=False)
    +            (pointwise_conv): Conv1d(32, 32, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (2): SeparableConv1d(
    +            (depthwise_conv): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), groups=32, bias=False)
    +            (pointwise_conv): Conv1d(32, 32, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +        )
    +        (maxconvpool): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): Conv1d(64, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (concat): Concat(dim=1)
    +      )
    +      (2): XceptionModule(
    +        (bottleneck): Conv1d(128, 64, kernel_size=(1,), stride=(1,), bias=False)
    +        (convs): ModuleList(
    +          (0): SeparableConv1d(
    +            (depthwise_conv): Conv1d(64, 64, kernel_size=(39,), stride=(1,), padding=(19,), groups=64, bias=False)
    +            (pointwise_conv): Conv1d(64, 64, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (1): SeparableConv1d(
    +            (depthwise_conv): Conv1d(64, 64, kernel_size=(19,), stride=(1,), padding=(9,), groups=64, bias=False)
    +            (pointwise_conv): Conv1d(64, 64, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (2): SeparableConv1d(
    +            (depthwise_conv): Conv1d(64, 64, kernel_size=(9,), stride=(1,), padding=(4,), groups=64, bias=False)
    +            (pointwise_conv): Conv1d(64, 64, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +        )
    +        (maxconvpool): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): Conv1d(128, 64, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (concat): Concat(dim=1)
    +      )
    +      (3): XceptionModule(
    +        (bottleneck): Conv1d(256, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        (convs): ModuleList(
    +          (0): SeparableConv1d(
    +            (depthwise_conv): Conv1d(128, 128, kernel_size=(39,), stride=(1,), padding=(19,), groups=128, bias=False)
    +            (pointwise_conv): Conv1d(128, 128, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (1): SeparableConv1d(
    +            (depthwise_conv): Conv1d(128, 128, kernel_size=(19,), stride=(1,), padding=(9,), groups=128, bias=False)
    +            (pointwise_conv): Conv1d(128, 128, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +          (2): SeparableConv1d(
    +            (depthwise_conv): Conv1d(128, 128, kernel_size=(9,), stride=(1,), padding=(4,), groups=128, bias=False)
    +            (pointwise_conv): Conv1d(128, 128, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +        )
    +        (maxconvpool): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): Conv1d(256, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (concat): Concat(dim=1)
    +      )
    +    )
    +    (shortcut): ModuleList(
    +      (0): ConvBlock(
    +        (0): Conv1d(3, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +      (1): ConvBlock(
    +        (0): Conv1d(128, 512, kernel_size=(1,), stride=(1,), bias=False)
    +        (1): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +    )
    +    (add): Add
    +    (act): ReLU()
    +  )
    +  (head): Sequential(
    +    (0): AdaptiveAvgPool1d(output_size=50)
    +    (1): ConvBlock(
    +      (0): Conv1d(512, 256, kernel_size=(1,), stride=(1,), bias=False)
    +      (1): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (2): ConvBlock(
    +      (0): Conv1d(256, 128, kernel_size=(1,), stride=(1,), bias=False)
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (3): ConvBlock(
    +      (0): Conv1d(128, 2, kernel_size=(1,), stride=(1,), bias=False)
    +      (1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (4): GAP1d(
    +      (gap): AdaptiveAvgPool1d(output_size=1)
    +      (flatten): Flatten(full=False)
    +    )
    +  )
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.xceptiontimeplus.html b/models.xceptiontimeplus.html new file mode 100644 index 000000000..ce5e3920d --- /dev/null +++ b/models.xceptiontimeplus.html @@ -0,0 +1,1550 @@ + + + + + + + + + +tsai - XceptionTimePlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    XceptionTimePlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial PyTorch implementation by Ignacio Oguiza - oguiza@timeseriesAI.co modified on:

    +

    Fawaz, H. I., Lucas, B., Forestier, G., Pelletier, C., Schmidt, D. F., Weber, J. & Petitjean, F. (2019). InceptionTime: Finding AlexNet for Time Series Classification. arXiv preprint arXiv:1909.04939.

    +

    Official InceptionTime tensorflow implementation: https://github.com/hfawaz/InceptionTime

    +
    +

    source

    +
    +

    XceptionTimePlus

    +
    +
     XceptionTimePlus (c_in, c_out, seq_len=None, nf=16, nb_filters=None,
    +                   coord=False, norm='Batch', concat_pool=False,
    +                   adaptive_size=50, custom_head=None, residual=True,
    +                   zero_norm=False, act=<class
    +                   'torch.nn.modules.activation.ReLU'>, act_kwargs={})
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    XceptionBlockPlus

    +
    +
     XceptionBlockPlus (ni, nf, residual=True, coord=False, norm='Batch',
    +                    zero_norm=False, act=<class
    +                    'torch.nn.modules.activation.ReLU'>, act_kwargs={},
    +                    ks=40, kss=None, bottleneck=True, separable=True,
    +                    bn_1st=True, norm_act=False)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +

    source

    +
    +
    +

    XceptionModulePlus

    +
    +
     XceptionModulePlus (ni, nf, ks=40, kss=None, bottleneck=True,
    +                     coord=False, separable=True, norm='Batch',
    +                     zero_norm=False, bn_1st=True, act=<class
    +                     'torch.nn.modules.activation.ReLU'>, act_kwargs={},
    +                     norm_act=False)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    bs = 16
    +vars = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, vars, seq_len)
    +
    +
    +
    test_eq(XceptionTimePlus(vars,c_out)(xb).shape, [bs, c_out])
    +test_eq(XceptionTimePlus(vars,c_out, nf=32)(xb).shape, [bs, c_out])
    +test_eq(XceptionTimePlus(vars,c_out, bottleneck=False)(xb).shape, [bs, c_out])
    +test_eq(XceptionTimePlus(vars,c_out, residual=False)(xb).shape, [bs, c_out])
    +test_eq(XceptionTimePlus(vars,c_out, coord=True)(xb).shape, [bs, c_out])
    +test_eq(XceptionTimePlus(vars,c_out, concat_pool=True)(xb).shape, [bs, c_out])
    +test_eq(count_parameters(XceptionTimePlus(3, 2)), 399540)
    +
    +
    +
    m = XceptionTimePlus(2,3)
    +test_eq(check_weight(m, is_bn)[0].sum(), 5)
    +test_eq(len(check_bias(m, is_conv)[0]), 0)
    +m = XceptionTimePlus(2,3, zero_norm=True)
    +test_eq(check_weight(m, is_bn)[0].sum(), 5)
    +m = XceptionTimePlus(2,3, zero_norm=True, norm_act=True)
    +test_eq(check_weight(m, is_bn)[0].sum(), 7)
    +
    +
    +
    m = XceptionTimePlus(2,3, coord=True)
    +test_eq(len(get_layers(m, cond=is_layer(AddCoords1d))), 25)
    +test_eq(len(get_layers(m, cond=is_layer(nn.Conv1d))), 37)
    +m = XceptionTimePlus(2,3, bottleneck=False, coord=True)
    +test_eq(len(get_layers(m, cond=is_layer(AddCoords1d))), 21)
    +test_eq(len(get_layers(m, cond=is_layer(nn.Conv1d))), 33)
    +
    +
    +
    m = XceptionTimePlus(vars, c_out, seq_len=seq_len, custom_head=mlp_head)
    +test_eq(m(xb).shape, [bs, c_out])
    +
    +
    +
    XceptionTimePlus(vars, c_out, coord=True)
    +
    +
    XceptionTimePlus(
    +  (backbone): XceptionBlockPlus(
    +    (xception): ModuleList(
    +      (0): XceptionModulePlus(
    +        (bottleneck): ConvBlock(
    +          (0): AddCoords1d()
    +          (1): Conv1d(4, 16, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (convs): ModuleList(
    +          (0): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(17, 17, kernel_size=(39,), stride=(1,), padding=(19,), groups=17, bias=False)
    +              (pointwise_conv): Conv1d(17, 16, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (1): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(17, 17, kernel_size=(19,), stride=(1,), padding=(9,), groups=17, bias=False)
    +              (pointwise_conv): Conv1d(17, 16, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (2): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(17, 17, kernel_size=(9,), stride=(1,), padding=(4,), groups=17, bias=False)
    +              (pointwise_conv): Conv1d(17, 16, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +        )
    +        (mp_conv): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): Conv1d(4, 16, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +        )
    +        (concat): Concat(dim=1)
    +      )
    +      (1): XceptionModulePlus(
    +        (bottleneck): ConvBlock(
    +          (0): AddCoords1d()
    +          (1): Conv1d(65, 32, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (convs): ModuleList(
    +          (0): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)
    +              (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (1): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)
    +              (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (2): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)
    +              (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +        )
    +        (mp_conv): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): Conv1d(65, 32, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +        )
    +        (concat): Concat(dim=1)
    +      )
    +      (2): XceptionModulePlus(
    +        (bottleneck): ConvBlock(
    +          (0): AddCoords1d()
    +          (1): Conv1d(129, 64, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (convs): ModuleList(
    +          (0): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(65, 65, kernel_size=(39,), stride=(1,), padding=(19,), groups=65, bias=False)
    +              (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (1): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(65, 65, kernel_size=(19,), stride=(1,), padding=(9,), groups=65, bias=False)
    +              (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (2): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(65, 65, kernel_size=(9,), stride=(1,), padding=(4,), groups=65, bias=False)
    +              (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +        )
    +        (mp_conv): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): Conv1d(129, 64, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +        )
    +        (concat): Concat(dim=1)
    +      )
    +      (3): XceptionModulePlus(
    +        (bottleneck): ConvBlock(
    +          (0): AddCoords1d()
    +          (1): Conv1d(257, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        )
    +        (convs): ModuleList(
    +          (0): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(129, 129, kernel_size=(39,), stride=(1,), padding=(19,), groups=129, bias=False)
    +              (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (1): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(129, 129, kernel_size=(19,), stride=(1,), padding=(9,), groups=129, bias=False)
    +              (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +          (2): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): SeparableConv1d(
    +              (depthwise_conv): Conv1d(129, 129, kernel_size=(9,), stride=(1,), padding=(4,), groups=129, bias=False)
    +              (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)
    +            )
    +          )
    +        )
    +        (mp_conv): Sequential(
    +          (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)
    +          (1): ConvBlock(
    +            (0): AddCoords1d()
    +            (1): Conv1d(257, 128, kernel_size=(1,), stride=(1,), bias=False)
    +          )
    +        )
    +        (concat): Concat(dim=1)
    +      )
    +    )
    +    (shortcut): ModuleList(
    +      (0): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): Conv1d(4, 128, kernel_size=(1,), stride=(1,), bias=False)
    +        (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +      (1): ConvBlock(
    +        (0): AddCoords1d()
    +        (1): Conv1d(129, 512, kernel_size=(1,), stride=(1,), bias=False)
    +        (2): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      )
    +    )
    +    (act): ModuleList(
    +      (0): ReLU()
    +      (1): ReLU()
    +    )
    +    (add): Add
    +  )
    +  (head): Sequential(
    +    (0): AdaptiveAvgPool1d(output_size=50)
    +    (1): ConvBlock(
    +      (0): AddCoords1d()
    +      (1): Conv1d(513, 256, kernel_size=(1,), stride=(1,), bias=False)
    +      (2): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (3): ReLU()
    +    )
    +    (2): ConvBlock(
    +      (0): AddCoords1d()
    +      (1): Conv1d(257, 128, kernel_size=(1,), stride=(1,), bias=False)
    +      (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (3): ReLU()
    +    )
    +    (3): ConvBlock(
    +      (0): AddCoords1d()
    +      (1): Conv1d(129, 2, kernel_size=(1,), stride=(1,), bias=False)
    +      (2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (3): ReLU()
    +    )
    +    (4): GAP1d(
    +      (gap): AdaptiveAvgPool1d(output_size=1)
    +      (flatten): Reshape(bs)
    +    )
    +  )
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.xcm.html b/models.xcm.html new file mode 100644 index 000000000..3a448a061 --- /dev/null +++ b/models.xcm.html @@ -0,0 +1,1408 @@ + + + + + + + + + +tsai - XCM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    XCM

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    An Explainable Convolutional Neural Network for Multivariate Time Series Classification

    +
    +

    This is an unofficial PyTorch implementation of XCM created by Ignacio Oguiza (oguiza@timeseriesAI.co)

    +
    +

    source

    +
    +

    XCM

    +
    +
     XCM (c_in:int, c_out:int, seq_len:Optional[int]=None, nf:int=128,
    +      window_perc:float=1.0, flatten:bool=False, custom_head:<built-
    +      infunctioncallable>=None, concat_pool:bool=False,
    +      fc_dropout:float=0.0, bn:bool=False, y_range:tuple=None, **kwargs)
    +
    +

    Same as nn.Module, but no need for subclasses to call super().__init__

    +
    +
    from tsai.data.basics import *
    +from tsai.learner import *
    +
    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +tfms = [None, TSCategorize()]
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms)
    +model =  XCM(dls.vars, dls.c, dls.len)
    +learn = ts_learner(dls, model, metrics=accuracy)
    +xb, yb = dls.one_batch()
    +
    +bs, c_in, seq_len = xb.shape
    +c_out = len(np.unique(yb.cpu().numpy()))
    +
    +model = XCM(c_in, c_out, seq_len, fc_dropout=.5)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +model = XCM(c_in, c_out, seq_len, concat_pool=True)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +model = XCM(c_in, c_out, seq_len)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +model
    +
    +
    XCM(
    +  (conv2dblock): Sequential(
    +    (0): Unsqueeze(dim=1)
    +    (1): Conv2dSame(
    +      (conv2d_same): Conv2d(1, 128, kernel_size=(1, 51), stride=(1, 1))
    +    )
    +    (2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (3): ReLU()
    +  )
    +  (conv2d1x1block): Sequential(
    +    (0): Conv2d(128, 1, kernel_size=(1, 1), stride=(1, 1))
    +    (1): ReLU()
    +    (2): Squeeze(dim=1)
    +  )
    +  (conv1dblock): Sequential(
    +    (0): Conv1d(24, 128, kernel_size=(51,), stride=(1,), padding=(25,))
    +    (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (conv1d1x1block): Sequential(
    +    (0): Conv1d(128, 1, kernel_size=(1,), stride=(1,))
    +    (1): ReLU()
    +  )
    +  (concat): Concat(dim=1)
    +  (conv1d): Sequential(
    +    (0): Conv1d(25, 128, kernel_size=(51,), stride=(1,), padding=(25,))
    +    (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +    (2): ReLU()
    +  )
    +  (head): Sequential(
    +    (0): GAP1d(
    +      (gap): AdaptiveAvgPool1d(output_size=1)
    +      (flatten): Reshape(bs)
    +    )
    +    (1): LinBnDrop(
    +      (0): Linear(in_features=128, out_features=6, bias=True)
    +    )
    +  )
    +)
    +
    +
    +
    +
    model.show_gradcam(xb, yb)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    model.show_gradcam(xb[0], yb[0])
    +
    +
    [W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 12
    +c_out = 10
    +xb = torch.rand(bs, n_vars, seq_len)
    +new_head = partial(conv_lin_nd_head, d=(5, 2))
    +net = XCM(n_vars, c_out, seq_len, custom_head=new_head)
    +print(net.to(xb.device)(xb).shape)
    +net.head
    +
    +
    torch.Size([16, 5, 2, 10])
    +
    +
    +
    create_conv_lin_nd_head(
    +  (0): Conv1d(128, 10, kernel_size=(1,), stride=(1,))
    +  (1): Linear(in_features=12, out_features=10, bias=True)
    +  (2): Transpose(-1, -2)
    +  (3): Reshape(bs, 5, 2, 10)
    +)
    +
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +net = XCM(n_vars, c_out, seq_len)
    +change_model_head(net, create_pool_plus_head, concat_pool=False)
    +print(net.to(xb.device)(xb).shape)
    +net.head
    +
    +
    torch.Size([16, 2])
    +
    +
    +
    Sequential(
    +  (0): AdaptiveAvgPool1d(output_size=1)
    +  (1): Reshape(bs)
    +  (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +  (3): Linear(in_features=128, out_features=512, bias=False)
    +  (4): ReLU(inplace=True)
    +  (5): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +  (6): Linear(in_features=512, out_features=2, bias=False)
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.xcmplus.html b/models.xcmplus.html new file mode 100644 index 000000000..f502df531 --- /dev/null +++ b/models.xcmplus.html @@ -0,0 +1,1433 @@ + + + + + + + + + +tsai - XCMPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    XCMPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    This is an unofficial PyTorch implementation of XCM created by Ignacio Oguiza (oguiza@timeseriesAI.co).

    +
    +

    source

    +
    +

    XCMPlus

    +
    +
     XCMPlus (c_in:int, c_out:int, seq_len:Optional[int]=None, nf:int=128,
    +          window_perc:float=1.0, flatten:bool=False, custom_head:<built-
    +          infunctioncallable>=None, concat_pool:bool=False,
    +          fc_dropout:float=0.0, bn:bool=False, y_range:tuple=None,
    +          **kwargs)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +
    from tsai.data.basics import *
    +from tsai.learner import *
    +
    +
    +
    dsid = 'NATOPS'
    +X, y, splits = get_UCR_data(dsid, split_data=False)
    +tfms = [None, TSCategorize()]
    +dls = get_ts_dls(X, y, splits=splits, tfms=tfms)
    +model =  XCMPlus(dls.vars, dls.c, dls.len)
    +learn = ts_learner(dls, model, metrics=accuracy)
    +xb, yb = dls.one_batch()
    +
    +bs, c_in, seq_len = xb.shape
    +c_out = len(np.unique(yb.cpu().numpy()))
    +
    +model = XCMPlus(c_in, c_out, seq_len, fc_dropout=.5)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +model = XCMPlus(c_in, c_out, seq_len, concat_pool=True)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +model = XCMPlus(c_in, c_out, seq_len)
    +test_eq(model.to(xb.device)(xb).shape, (bs, c_out))
    +model
    +
    +
    XCMPlus(
    +  (backbone): _XCMPlus_Backbone(
    +    (conv2dblock): Sequential(
    +      (0): Unsqueeze(dim=1)
    +      (1): Conv2dSame(
    +        (conv2d_same): Conv2d(1, 128, kernel_size=(1, 51), stride=(1, 1))
    +      )
    +      (2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (3): ReLU()
    +    )
    +    (conv2d1x1block): Sequential(
    +      (0): Conv2d(128, 1, kernel_size=(1, 1), stride=(1, 1))
    +      (1): ReLU()
    +      (2): Squeeze(dim=1)
    +    )
    +    (conv1dblock): Sequential(
    +      (0): Conv1d(24, 128, kernel_size=(51,), stride=(1,), padding=(25,))
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +    (conv1d1x1block): Sequential(
    +      (0): Conv1d(128, 1, kernel_size=(1,), stride=(1,))
    +      (1): ReLU()
    +    )
    +    (concat): Concat(dim=1)
    +    (conv1d): Sequential(
    +      (0): Conv1d(25, 128, kernel_size=(51,), stride=(1,), padding=(25,))
    +      (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +      (2): ReLU()
    +    )
    +  )
    +  (head): Sequential(
    +    (0): GAP1d(
    +      (gap): AdaptiveAvgPool1d(output_size=1)
    +      (flatten): Reshape(bs)
    +    )
    +    (1): LinBnDrop(
    +      (0): Linear(in_features=128, out_features=6, bias=True)
    +    )
    +  )
    +)
    +
    +
    +
    +
    model.show_gradcam(xb, yb)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    model.show_gradcam(xb[0], yb[0])
    +
    +
    [W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 12
    +c_out = 1
    +xb = torch.rand(bs, n_vars, seq_len)
    +new_head = partial(conv_lin_nd_head, d=(5, 2))
    +net = XCMPlus(n_vars, c_out, seq_len, custom_head=new_head)
    +print(net.to(xb.device)(xb).shape)
    +net.head
    +
    +
    torch.Size([16, 5, 2])
    +
    +
    +
    create_conv_lin_nd_head(
    +  (0): Conv1d(128, 1, kernel_size=(1,), stride=(1,))
    +  (1): Linear(in_features=12, out_features=10, bias=True)
    +  (2): Transpose(-1, -2)
    +  (3): Reshape(bs, 5, 2)
    +)
    +
    +
    +
    +
    bs = 16
    +n_vars = 3
    +seq_len = 12
    +c_out = 2
    +xb = torch.rand(bs, n_vars, seq_len)
    +net = XCMPlus(n_vars, c_out, seq_len)
    +change_model_head(net, create_pool_plus_head, concat_pool=False)
    +print(net.to(xb.device)(xb).shape)
    +net.head
    +
    +
    torch.Size([16, 2])
    +
    +
    +
    Sequential(
    +  (0): AdaptiveAvgPool1d(output_size=1)
    +  (1): Reshape(bs)
    +  (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +  (3): Linear(in_features=128, out_features=512, bias=False)
    +  (4): ReLU(inplace=True)
    +  (5): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    +  (6): Linear(in_features=512, out_features=2, bias=False)
    +)
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.xresnet1d.html b/models.xresnet1d.html new file mode 100644 index 000000000..e3895ee5c --- /dev/null +++ b/models.xresnet1d.html @@ -0,0 +1,3523 @@ + + + + + + + + + +tsai - XResNet1d + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    XResNet1d

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is a modified version of fastai’s XResNet model in github

    +
    +
    +

    source

    +
    +

    xresnet1d50_deeper

    +
    +
     xresnet1d50_deeper (c_in, c_out, act=<class
    +                     'torch.nn.modules.activation.ReLU'>, stride=1,
    +                     groups=1, reduction=None, nh1=None, nh2=None,
    +                     dw=False, g2=1, sa=False, sym=False,
    +                     norm_type=<NormType.Batch: 1>, act_cls=<class
    +                     'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,
    +                     pool=<function AvgPool>, pool_first=True,
    +                     padding=None, bias=None, bn_1st=True,
    +                     transpose=False, init='auto', xtra=None,
    +                     bias_std=0.01, dilation:Union[int,Tuple[int,int]]=1,
    +                     padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d34_deeper

    +
    +
     xresnet1d34_deeper (c_in, c_out, act=<class
    +                     'torch.nn.modules.activation.ReLU'>, stride=1,
    +                     groups=1, reduction=None, nh1=None, nh2=None,
    +                     dw=False, g2=1, sa=False, sym=False,
    +                     norm_type=<NormType.Batch: 1>, act_cls=<class
    +                     'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,
    +                     pool=<function AvgPool>, pool_first=True,
    +                     padding=None, bias=None, bn_1st=True,
    +                     transpose=False, init='auto', xtra=None,
    +                     bias_std=0.01, dilation:Union[int,Tuple[int,int]]=1,
    +                     padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d18_deeper

    +
    +
     xresnet1d18_deeper (c_in, c_out, act=<class
    +                     'torch.nn.modules.activation.ReLU'>, stride=1,
    +                     groups=1, reduction=None, nh1=None, nh2=None,
    +                     dw=False, g2=1, sa=False, sym=False,
    +                     norm_type=<NormType.Batch: 1>, act_cls=<class
    +                     'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,
    +                     pool=<function AvgPool>, pool_first=True,
    +                     padding=None, bias=None, bn_1st=True,
    +                     transpose=False, init='auto', xtra=None,
    +                     bias_std=0.01, dilation:Union[int,Tuple[int,int]]=1,
    +                     padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d50_deep

    +
    +
     xresnet1d50_deep (c_in, c_out, act=<class
    +                   'torch.nn.modules.activation.ReLU'>, stride=1,
    +                   groups=1, reduction=None, nh1=None, nh2=None, dw=False,
    +                   g2=1, sa=False, sym=False, norm_type=<NormType.Batch:
    +                   1>, act_cls=<class 'torch.nn.modules.activation.ReLU'>,
    +                   ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,
    +                   padding=None, bias=None, bn_1st=True, transpose=False,
    +                   init='auto', xtra=None, bias_std=0.01,
    +                   dilation:Union[int,Tuple[int,int]]=1,
    +                   padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d34_deep

    +
    +
     xresnet1d34_deep (c_in, c_out, act=<class
    +                   'torch.nn.modules.activation.ReLU'>, stride=1,
    +                   groups=1, reduction=None, nh1=None, nh2=None, dw=False,
    +                   g2=1, sa=False, sym=False, norm_type=<NormType.Batch:
    +                   1>, act_cls=<class 'torch.nn.modules.activation.ReLU'>,
    +                   ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,
    +                   padding=None, bias=None, bn_1st=True, transpose=False,
    +                   init='auto', xtra=None, bias_std=0.01,
    +                   dilation:Union[int,Tuple[int,int]]=1,
    +                   padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d18_deep

    +
    +
     xresnet1d18_deep (c_in, c_out, act=<class
    +                   'torch.nn.modules.activation.ReLU'>, stride=1,
    +                   groups=1, reduction=None, nh1=None, nh2=None, dw=False,
    +                   g2=1, sa=False, sym=False, norm_type=<NormType.Batch:
    +                   1>, act_cls=<class 'torch.nn.modules.activation.ReLU'>,
    +                   ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,
    +                   padding=None, bias=None, bn_1st=True, transpose=False,
    +                   init='auto', xtra=None, bias_std=0.01,
    +                   dilation:Union[int,Tuple[int,int]]=1,
    +                   padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d152

    +
    +
     xresnet1d152 (c_in, c_out, act=<class
    +               'torch.nn.modules.activation.ReLU'>, stride=1, groups=1,
    +               reduction=None, nh1=None, nh2=None, dw=False, g2=1,
    +               sa=False, sym=False, norm_type=<NormType.Batch: 1>,
    +               act_cls=<class 'torch.nn.modules.activation.ReLU'>, ndim=2,
    +               ks=3, pool=<function AvgPool>, pool_first=True,
    +               padding=None, bias=None, bn_1st=True, transpose=False,
    +               init='auto', xtra=None, bias_std=0.01,
    +               dilation:Union[int,Tuple[int,int]]=1,
    +               padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d101

    +
    +
     xresnet1d101 (c_in, c_out, act=<class
    +               'torch.nn.modules.activation.ReLU'>, stride=1, groups=1,
    +               reduction=None, nh1=None, nh2=None, dw=False, g2=1,
    +               sa=False, sym=False, norm_type=<NormType.Batch: 1>,
    +               act_cls=<class 'torch.nn.modules.activation.ReLU'>, ndim=2,
    +               ks=3, pool=<function AvgPool>, pool_first=True,
    +               padding=None, bias=None, bn_1st=True, transpose=False,
    +               init='auto', xtra=None, bias_std=0.01,
    +               dilation:Union[int,Tuple[int,int]]=1,
    +               padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d50

    +
    +
     xresnet1d50 (c_in, c_out, act=<class 'torch.nn.modules.activation.ReLU'>,
    +              stride=1, groups=1, reduction=None, nh1=None, nh2=None,
    +              dw=False, g2=1, sa=False, sym=False,
    +              norm_type=<NormType.Batch: 1>, act_cls=<class
    +              'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,
    +              pool=<function AvgPool>, pool_first=True, padding=None,
    +              bias=None, bn_1st=True, transpose=False, init='auto',
    +              xtra=None, bias_std=0.01,
    +              dilation:Union[int,Tuple[int,int]]=1,
    +              padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d34

    +
    +
     xresnet1d34 (c_in, c_out, act=<class 'torch.nn.modules.activation.ReLU'>,
    +              stride=1, groups=1, reduction=None, nh1=None, nh2=None,
    +              dw=False, g2=1, sa=False, sym=False,
    +              norm_type=<NormType.Batch: 1>, act_cls=<class
    +              'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,
    +              pool=<function AvgPool>, pool_first=True, padding=None,
    +              bias=None, bn_1st=True, transpose=False, init='auto',
    +              xtra=None, bias_std=0.01,
    +              dilation:Union[int,Tuple[int,int]]=1,
    +              padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d18

    +
    +
     xresnet1d18 (c_in, c_out, act=<class 'torch.nn.modules.activation.ReLU'>,
    +              stride=1, groups=1, reduction=None, nh1=None, nh2=None,
    +              dw=False, g2=1, sa=False, sym=False,
    +              norm_type=<NormType.Batch: 1>, act_cls=<class
    +              'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,
    +              pool=<function AvgPool>, pool_first=True, padding=None,
    +              bias=None, bn_1st=True, transpose=False, init='auto',
    +              xtra=None, bias_std=0.01,
    +              dilation:Union[int,Tuple[int,int]]=1,
    +              padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +
    bs, c_in, seq_len = 2, 4, 32
    +c_out = 2
    +x = torch.rand(bs, c_in, seq_len)
    +archs = [
    +    xresnet1d18, xresnet1d34, xresnet1d50, 
    +    xresnet1d18_deep, xresnet1d34_deep, xresnet1d50_deep, xresnet1d18_deeper,
    +    xresnet1d34_deeper, xresnet1d50_deeper
    +#     # Long test
    +#     xresnet1d101, xresnet1d152,
    +]
    +for i, arch in enumerate(archs):
    +    print(i, arch.__name__)
    +    test_eq(arch(c_in, c_out, sa=True, act=Mish)(x).shape, (bs, c_out))
    +
    +
    0 xresnet1d18
    +1 xresnet1d34
    +2 xresnet1d50
    +3 xresnet1d18_deep
    +4 xresnet1d34_deep
    +5 xresnet1d50_deep
    +6 xresnet1d18_deeper
    +7 xresnet1d34_deeper
    +8 xresnet1d50_deeper
    +
    +
    +
    +
    m = xresnet1d34(4, 2, act=Mish)
    +test_eq(len(get_layers(m, is_bn)), 38)
    +test_eq(check_weight(m, is_bn)[0].sum(), 22)
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/models.xresnet1dplus.html b/models.xresnet1dplus.html new file mode 100644 index 000000000..95e698291 --- /dev/null +++ b/models.xresnet1dplus.html @@ -0,0 +1,3698 @@ + + + + + + + + + +tsai - XResNet1dPlus + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    XResNet1dPlus

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This is a modified version of fastai’s XResNet model in github

    +
    +
    +

    source

    +
    +

    XResNet1dPlus

    +
    +
     XResNet1dPlus (block=<class 'tsai.models.layers.ResBlock1dPlus'>,
    +                expansion=4, layers=[3, 4, 6, 3], fc_dropout=0.0, c_in=3,
    +                c_out=None, n_out=1000, seq_len=None, stem_szs=(32, 32,
    +                64), widen=1.0, sa=False, act_cls=<class
    +                'torch.nn.modules.activation.ReLU'>, ks=3, stride=2,
    +                coord=False, custom_head=None, block_szs_base=(64, 128,
    +                256, 512), groups=1, reduction=None, nh1=None, nh2=None,
    +                dw=False, g2=1, sym=False, norm='Batch', zero_norm=True,
    +                pool=<function AvgPool>, pool_first=True)
    +
    +

    A sequential container.

    +

    Modules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.

    +

    The value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).

    +

    What’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.

    +

    Example::

    +
    # Using Sequential to create a small model. When `model` is run,
    +# input will first be passed to `Conv2d(1,20,5)`. The output of
    +# `Conv2d(1,20,5)` will be used as the input to the first
    +# `ReLU`; the output of the first `ReLU` will become the input
    +# for `Conv2d(20,64,5)`. Finally, the output of
    +# `Conv2d(20,64,5)` will be used as input to the second `ReLU`
    +model = nn.Sequential(
    +          nn.Conv2d(1,20,5),
    +          nn.ReLU(),
    +          nn.Conv2d(20,64,5),
    +          nn.ReLU()
    +        )
    +
    +# Using Sequential with OrderedDict. This is functionally the
    +# same as the above code
    +model = nn.Sequential(OrderedDict([
    +          ('conv1', nn.Conv2d(1,20,5)),
    +          ('relu1', nn.ReLU()),
    +          ('conv2', nn.Conv2d(20,64,5)),
    +          ('relu2', nn.ReLU())
    +        ]))
    +
    +

    source

    +
    +
    +

    xresnet1d50_deeperplus

    +
    +
     xresnet1d50_deeperplus (c_in, c_out, seq_len=None, act=<class
    +                         'torch.nn.modules.activation.ReLU'>, stride=1,
    +                         groups=1, reduction=None, nh1=None, nh2=None,
    +                         dw=False, g2=1, sa=False, sym=False,
    +                         norm_type=<NormType.Batch: 1>, act_cls=<class
    +                         'torch.nn.modules.activation.ReLU'>, ndim=2,
    +                         ks=3, pool=<function AvgPool>, pool_first=True,
    +                         padding=None, bias=None, bn_1st=True,
    +                         transpose=False, init='auto', xtra=None,
    +                         bias_std=0.01,
    +                         dilation:Union[int,Tuple[int,int]]=1,
    +                         padding_mode:str='zeros', device=None,
    +                         dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d34_deeperplus

    +
    +
     xresnet1d34_deeperplus (c_in, c_out, seq_len=None, act=<class
    +                         'torch.nn.modules.activation.ReLU'>, stride=1,
    +                         groups=1, reduction=None, nh1=None, nh2=None,
    +                         dw=False, g2=1, sa=False, sym=False,
    +                         norm_type=<NormType.Batch: 1>, act_cls=<class
    +                         'torch.nn.modules.activation.ReLU'>, ndim=2,
    +                         ks=3, pool=<function AvgPool>, pool_first=True,
    +                         padding=None, bias=None, bn_1st=True,
    +                         transpose=False, init='auto', xtra=None,
    +                         bias_std=0.01,
    +                         dilation:Union[int,Tuple[int,int]]=1,
    +                         padding_mode:str='zeros', device=None,
    +                         dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d18_deeperplus

    +
    +
     xresnet1d18_deeperplus (c_in, c_out, seq_len=None, act=<class
    +                         'torch.nn.modules.activation.ReLU'>, stride=1,
    +                         groups=1, reduction=None, nh1=None, nh2=None,
    +                         dw=False, g2=1, sa=False, sym=False,
    +                         norm_type=<NormType.Batch: 1>, act_cls=<class
    +                         'torch.nn.modules.activation.ReLU'>, ndim=2,
    +                         ks=3, pool=<function AvgPool>, pool_first=True,
    +                         padding=None, bias=None, bn_1st=True,
    +                         transpose=False, init='auto', xtra=None,
    +                         bias_std=0.01,
    +                         dilation:Union[int,Tuple[int,int]]=1,
    +                         padding_mode:str='zeros', device=None,
    +                         dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d50_deepplus

    +
    +
     xresnet1d50_deepplus (c_in, c_out, seq_len=None, act=<class
    +                       'torch.nn.modules.activation.ReLU'>, stride=1,
    +                       groups=1, reduction=None, nh1=None, nh2=None,
    +                       dw=False, g2=1, sa=False, sym=False,
    +                       norm_type=<NormType.Batch: 1>, act_cls=<class
    +                       'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,
    +                       pool=<function AvgPool>, pool_first=True,
    +                       padding=None, bias=None, bn_1st=True,
    +                       transpose=False, init='auto', xtra=None,
    +                       bias_std=0.01,
    +                       dilation:Union[int,Tuple[int,int]]=1,
    +                       padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d34_deepplus

    +
    +
     xresnet1d34_deepplus (c_in, c_out, seq_len=None, act=<class
    +                       'torch.nn.modules.activation.ReLU'>, stride=1,
    +                       groups=1, reduction=None, nh1=None, nh2=None,
    +                       dw=False, g2=1, sa=False, sym=False,
    +                       norm_type=<NormType.Batch: 1>, act_cls=<class
    +                       'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,
    +                       pool=<function AvgPool>, pool_first=True,
    +                       padding=None, bias=None, bn_1st=True,
    +                       transpose=False, init='auto', xtra=None,
    +                       bias_std=0.01,
    +                       dilation:Union[int,Tuple[int,int]]=1,
    +                       padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d18_deepplus

    +
    +
     xresnet1d18_deepplus (c_in, c_out, seq_len=None, act=<class
    +                       'torch.nn.modules.activation.ReLU'>, stride=1,
    +                       groups=1, reduction=None, nh1=None, nh2=None,
    +                       dw=False, g2=1, sa=False, sym=False,
    +                       norm_type=<NormType.Batch: 1>, act_cls=<class
    +                       'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,
    +                       pool=<function AvgPool>, pool_first=True,
    +                       padding=None, bias=None, bn_1st=True,
    +                       transpose=False, init='auto', xtra=None,
    +                       bias_std=0.01,
    +                       dilation:Union[int,Tuple[int,int]]=1,
    +                       padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d152plus

    +
    +
     xresnet1d152plus (c_in, c_out, seq_len=None, act=<class
    +                   'torch.nn.modules.activation.ReLU'>, stride=1,
    +                   groups=1, reduction=None, nh1=None, nh2=None, dw=False,
    +                   g2=1, sa=False, sym=False, norm_type=<NormType.Batch:
    +                   1>, act_cls=<class 'torch.nn.modules.activation.ReLU'>,
    +                   ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,
    +                   padding=None, bias=None, bn_1st=True, transpose=False,
    +                   init='auto', xtra=None, bias_std=0.01,
    +                   dilation:Union[int,Tuple[int,int]]=1,
    +                   padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d101plus

    +
    +
     xresnet1d101plus (c_in, c_out, seq_len=None, act=<class
    +                   'torch.nn.modules.activation.ReLU'>, stride=1,
    +                   groups=1, reduction=None, nh1=None, nh2=None, dw=False,
    +                   g2=1, sa=False, sym=False, norm_type=<NormType.Batch:
    +                   1>, act_cls=<class 'torch.nn.modules.activation.ReLU'>,
    +                   ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,
    +                   padding=None, bias=None, bn_1st=True, transpose=False,
    +                   init='auto', xtra=None, bias_std=0.01,
    +                   dilation:Union[int,Tuple[int,int]]=1,
    +                   padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d50plus

    +
    +
     xresnet1d50plus (c_in, c_out, seq_len=None, act=<class
    +                  'torch.nn.modules.activation.ReLU'>, stride=1, groups=1,
    +                  reduction=None, nh1=None, nh2=None, dw=False, g2=1,
    +                  sa=False, sym=False, norm_type=<NormType.Batch: 1>,
    +                  act_cls=<class 'torch.nn.modules.activation.ReLU'>,
    +                  ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,
    +                  padding=None, bias=None, bn_1st=True, transpose=False,
    +                  init='auto', xtra=None, bias_std=0.01,
    +                  dilation:Union[int,Tuple[int,int]]=1,
    +                  padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d34plus

    +
    +
     xresnet1d34plus (c_in, c_out, seq_len=None, act=<class
    +                  'torch.nn.modules.activation.ReLU'>, stride=1, groups=1,
    +                  reduction=None, nh1=None, nh2=None, dw=False, g2=1,
    +                  sa=False, sym=False, norm_type=<NormType.Batch: 1>,
    +                  act_cls=<class 'torch.nn.modules.activation.ReLU'>,
    +                  ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,
    +                  padding=None, bias=None, bn_1st=True, transpose=False,
    +                  init='auto', xtra=None, bias_std=0.01,
    +                  dilation:Union[int,Tuple[int,int]]=1,
    +                  padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +

    source

    +
    +
    +

    xresnet1d18plus

    +
    +
     xresnet1d18plus (c_in, c_out, seq_len=None, act=<class
    +                  'torch.nn.modules.activation.ReLU'>, stride=1, groups=1,
    +                  reduction=None, nh1=None, nh2=None, dw=False, g2=1,
    +                  sa=False, sym=False, norm_type=<NormType.Batch: 1>,
    +                  act_cls=<class 'torch.nn.modules.activation.ReLU'>,
    +                  ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,
    +                  padding=None, bias=None, bn_1st=True, transpose=False,
    +                  init='auto', xtra=None, bias_std=0.01,
    +                  dilation:Union[int,Tuple[int,int]]=1,
    +                  padding_mode:str='zeros', device=None, dtype=None)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    c_in
    c_out
    seq_lenNoneTypeNone
    acttypeReLU
    strideint1
    groupsint1
    reductionNoneTypeNone
    nh1NoneTypeNone
    nh2NoneTypeNone
    dwboolFalse
    g2int1
    saboolFalse
    symboolFalse
    norm_typeNormTypeNormType.Batch
    act_clstypeReLU
    ndimint2
    ksint3
    poolfunctionAvgPool
    pool_firstboolTrue
    paddingNoneTypeNone
    biasNoneTypeNone
    bn_1stboolTrue
    transposeboolFalse
    initstrauto
    xtraNoneTypeNone
    bias_stdfloat0.01
    dilationtyping.Union[int, typing.Tuple[int, int]]1
    padding_modestrzerosTODO: refine this type
    deviceNoneTypeNone
    dtypeNoneTypeNone
    +
    +
    net = xresnet1d18plus(3, 2, coord=True)
    +x = torch.rand(32, 3, 50)
    +net(x)
    +
    +
    block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [2, 2, 2, 2]
    +
    +
    +
    TensorBase([[ 0.1829,  0.3597],
    +            [ 0.0274, -0.1443],
    +            [ 0.0240, -0.2374],
    +            [-0.1323, -0.6574],
    +            [ 0.1481, -0.1438],
    +            [ 0.2410, -0.1225],
    +            [-0.1186, -0.1978],
    +            [-0.0640, -0.4547],
    +            [-0.0229, -0.3214],
    +            [ 0.2336, -0.4466],
    +            [-0.1843, -0.0934],
    +            [-0.0416,  0.1997],
    +            [-0.0109, -0.0253],
    +            [ 0.3014, -0.2193],
    +            [ 0.0966,  0.0602],
    +            [ 0.2364,  0.2209],
    +            [-0.1437, -0.1476],
    +            [ 0.0070, -0.2900],
    +            [ 0.2807,  0.4797],
    +            [-0.2386, -0.1563],
    +            [ 0.1620, -0.2285],
    +            [ 0.0479, -0.2348],
    +            [ 0.1573, -0.4420],
    +            [-0.5469,  0.1512],
    +            [ 0.0243, -0.1806],
    +            [ 0.3396,  0.1434],
    +            [ 0.0666, -0.1644],
    +            [ 0.3286, -0.5637],
    +            [ 0.0993, -0.6281],
    +            [-0.1068, -0.0763],
    +            [-0.2713,  0.1946],
    +            [-0.1416, -0.4043]], grad_fn=<AliasBackward0>)
    +
    +
    +
    +
    bs, c_in, seq_len = 2, 4, 32
    +c_out = 2
    +x = torch.rand(bs, c_in, seq_len)
    +archs = [
    +    xresnet1d18plus, xresnet1d34plus, xresnet1d50plus, 
    +    xresnet1d18_deepplus, xresnet1d34_deepplus, xresnet1d50_deepplus, xresnet1d18_deeperplus,
    +    xresnet1d34_deeperplus, xresnet1d50_deeperplus
    +#     # Long test
    +#     xresnet1d101, xresnet1d152,
    +]
    +for i, arch in enumerate(archs):
    +    print(i, arch.__name__)
    +    test_eq(arch(c_in, c_out, sa=True, act=Mish, coord=True)(x).shape, (bs, c_out))
    +
    +
    0 xresnet1d18plus
    +block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [2, 2, 2, 2]
    +1 xresnet1d34plus
    +block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [3, 4, 6, 3]
    +2 xresnet1d50plus
    +block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 4 layers [3, 4, 6, 3]
    +3 xresnet1d18_deepplus
    +block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [2, 2, 2, 2, 1, 1]
    +4 xresnet1d34_deepplus
    +block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [3, 4, 6, 3, 1, 1]
    +5 xresnet1d50_deepplus
    +block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 4 layers [3, 4, 6, 3, 1, 1]
    +6 xresnet1d18_deeperplus
    +block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [2, 2, 1, 1, 1, 1, 1, 1]
    +7 xresnet1d34_deeperplus
    +block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [3, 4, 6, 3, 1, 1, 1, 1]
    +8 xresnet1d50_deeperplus
    +block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 4 layers [3, 4, 6, 3, 1, 1, 1, 1]
    +
    +
    +
    +
    m = xresnet1d34plus(4, 2, act=Mish)
    +test_eq(len(get_layers(m, is_bn)), 38)
    +test_eq(check_weight(m, is_bn)[0].sum(), 22)
    +
    +
    block <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [3, 4, 6, 3]
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/optimizer.html b/optimizer.html new file mode 100644 index 000000000..53290dca8 --- /dev/null +++ b/optimizer.html @@ -0,0 +1,1265 @@ + + + + + + + + + +tsai - Optimizers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Optimizers

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    This contains a set of optimizers.

    +
    +
    +

    source

    +
    +

    wrap_optimizer

    +
    +
     wrap_optimizer (opt, **kwargs)
    +
    +

    You can natively use any of the optimizers included in the fastai library. You just need to pass it to the learner as the opt_func.

    +

    In addition, you will be able to use any of the optimizers from:

    +
      +
    • Pytorch
    • +
    • torch_optimizer (https://github.com/jettify/pytorch-optimizer). In this case, you will need to install torch-optimizer first)
    • +
    +

    Examples of use:

    +
    adamw = wrap_optimizer(torch.optim.AdamW)
    +
    import torch_optimizer as optim
    +adabelief = wrap_optimizer(optim.AdaBelief)
    +

    If you want to use any these last 2, you can use the wrap_optimizer function. Here are a few examples:

    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/optuna.html b/optuna.html new file mode 100644 index 000000000..f27452a89 --- /dev/null +++ b/optuna.html @@ -0,0 +1,1368 @@ + + + + + + + + + +tsai - Optuna + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Optuna

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    A hyperparameter optimization framework

    +
    +

    Optuna is an automatic hyperparameter optimization software framework, particularly designed for machine learning. It features an imperative, define-by-run style user API. Thanks to our define-by-run API, the code written with Optuna enjoys high modularity, and the user of Optuna can dynamically construct the search spaces for the hyperparameters.

    +
    +
    def run_optuna_study(objective, resume=None, study_type=None, multivariate=True, search_space=None, evaluate=None, seed=None, sampler=None, pruner=None, 
    +                     study_name=None, direction='maximize', n_trials=None, timeout=None, gc_after_trial=False, show_progress_bar=True, 
    +                     save_study=True, path='optuna', show_plots=True):
    +    r"""Creates and runs an optuna study.
    +
    +    Args: 
    +        objective:          A callable that implements objective function.
    +        resume:             Path to a previously saved study.
    +        study_type:         Type of study selected (bayesian, gridsearch, randomsearch). Based on this a sampler will be build if sampler is None. 
    +                            If a sampler is passed, this has no effect.
    +        multivariate:       If this is True, the multivariate TPE is used when suggesting parameters. The multivariate TPE is reported to outperform 
    +                            the independent TPE.
    +        search_space:       Search space required when running a gridsearch (if you don't pass a sampler).
    +        evaluate:           Allows you to pass a specific set of hyperparameters that will be evaluated.
    +        seed:               Fixed seed used by samplers.
    +        sampler:            A sampler object that implements background algorithm for value suggestion. If None is specified, TPESampler is used during 
    +                            single-objective optimization and NSGAIISampler during multi-objective optimization. See also samplers.
    +        pruner:             A pruner object that decides early stopping of unpromising trials. If None is specified, MedianPruner is used as the default. 
    +                            See also pruners.
    +        study_name:         Study’s name. If this argument is set to None, a unique name is generated automatically.
    +        direction:          A sequence of directions during multi-objective optimization.
    +        n_trials:           The number of trials. If this argument is set to None, there is no limitation on the number of trials. If timeout is also set to 
    +                            None, the study continues to create trials until it receives a termination signal such as Ctrl+C or SIGTERM.
    +        timeout:            Stop study after the given number of second(s). If this argument is set to None, the study is executed without time limitation. 
    +                            If n_trials is also set to None, the study continues to create trials until it receives a termination signal such as 
    +                            Ctrl+C or SIGTERM.
    +        gc_after_trial:     Flag to execute garbage collection at the end of each trial. By default, garbage collection is enabled, just in case. 
    +                            You can turn it off with this argument if memory is safely managed in your objective function.
    +        show_progress_bar:  Flag to show progress bars or not. To disable progress bar, set this False.
    +        save_study:         Save your study when finished/ interrupted.
    +        path:               Folder where the study will be saved.
    +        show_plots:         Flag to control whether plots are shown at the end of the study.
    +    """
    +    
    +    try: import optuna
    +    except ImportError: raise ImportError('You need to install optuna to use run_optuna_study')
    +
    +    # Sampler
    +    if sampler is None:
    +        if study_type is None or "bayes" in study_type.lower(): 
    +            sampler = optuna.samplers.TPESampler(seed=seed, multivariate=multivariate)
    +        elif "grid" in study_type.lower():
    +            assert search_space, f"you need to pass a search_space dict to run a gridsearch"
    +            sampler = optuna.samplers.GridSampler(search_space)
    +        elif "random" in study_type.lower(): 
    +            sampler = optuna.samplers.RandomSampler(seed=seed)
    +    assert sampler, "you need to either select a study type (bayesian, gridsampler, randomsampler) or pass a sampler"
    +
    +    # Study
    +    if resume: 
    +        try:
    +            study = joblib.load(resume)
    +        except: 
    +            print(f"joblib.load({resume}) couldn't recover any saved study. Check the path.")
    +            return
    +        print("Best trial until now:")
    +        print(" Value: ", study.best_trial.value)
    +        print(" Params: ")
    +        for key, value in study.best_trial.params.items():
    +            print(f"    {key}: {value}")
    +    else: 
    +        study = optuna.create_study(sampler=sampler, pruner=pruner, study_name=study_name, direction=direction)
    +    if evaluate: study.enqueue_trial(evaluate)
    +    try:
    +        study.optimize(objective, n_trials=n_trials, timeout=timeout, gc_after_trial=gc_after_trial, show_progress_bar=show_progress_bar)
    +    except KeyboardInterrupt:
    +        pass
    +
    +    # Save
    +    if save_study:
    +        full_path = Path(path)/f'{study.study_name}.pkl'
    +        full_path.parent.mkdir(parents=True, exist_ok=True)
    +        joblib.dump(study, full_path)
    +        print(f'\nOptuna study saved to {full_path}')
    +        print(f"To reload the study run: study = joblib.load('{full_path}')")
    +
    +    # Plots
    +    if show_plots and len(study.trials) > 1:
    +        try: display(optuna.visualization.plot_optimization_history(study))
    +        except: pass
    +        try: display(optuna.visualization.plot_param_importances(study))
    +        except: pass
    +        try: display(optuna.visualization.plot_slice(study))
    +        except: pass
    +        try: display(optuna.visualization.plot_parallel_coordinate(study))
    +        except: pass
    +
    +    # Study stats
    +    try:
    +        pruned_trials = [t for t in study.trials if t.state == optuna.trial.TrialState.PRUNED]
    +        complete_trials = [t for t in study.trials if t.state == optuna.trial.TrialState.COMPLETE]
    +        print(f"\nStudy statistics    : ")
    +        print(f"  Study name        : {study.study_name}")
    +        print(f"  # finished trials : {len(study.trials)}")
    +        print(f"  # pruned trials   : {len(pruned_trials)}")
    +        print(f"  # complete trials : {len(complete_trials)}")
    +        
    +        print(f"\nBest trial          :")
    +        trial = study.best_trial
    +        print(f"  value             : {trial.value}")
    +        print(f"  best_params = {trial.params}\n")
    +    except:
    +        print('\nNo finished trials yet.')
    +    return study
    +
    +
    +

    source

    +
    +

    run_optuna_study

    +
    +
     run_optuna_study (objective, resume=None, study_type=None,
    +                   multivariate=True, search_space=None, evaluate=None,
    +                   seed=None, sampler=None, pruner=None, study_name=None,
    +                   direction='maximize', n_trials=None, timeout=None,
    +                   gc_after_trial=False, show_progress_bar=True,
    +                   save_study=True, path='optuna', show_plots=True)
    +
    +

    Creates and runs an optuna study.

    +

    Args: objective: A callable that implements objective function. resume: Path to a previously saved study. study_type: Type of study selected (bayesian, gridsearch, randomsearch). Based on this a sampler will be build if sampler is None. If a sampler is passed, this has no effect. multivariate: If this is True, the multivariate TPE is used when suggesting parameters. The multivariate TPE is reported to outperform the independent TPE. search_space: Search space required when running a gridsearch (if you don’t pass a sampler). evaluate: Allows you to pass a specific set of hyperparameters that will be evaluated. seed: Fixed seed used by samplers. sampler: A sampler object that implements background algorithm for value suggestion. If None is specified, TPESampler is used during single-objective optimization and NSGAIISampler during multi-objective optimization. See also samplers. pruner: A pruner object that decides early stopping of unpromising trials. If None is specified, MedianPruner is used as the default. See also pruners. study_name: Study’s name. If this argument is set to None, a unique name is generated automatically. direction: A sequence of directions during multi-objective optimization. n_trials: The number of trials. If this argument is set to None, there is no limitation on the number of trials. If timeout is also set to None, the study continues to create trials until it receives a termination signal such as Ctrl+C or SIGTERM. timeout: Stop study after the given number of second(s). If this argument is set to None, the study is executed without time limitation. If n_trials is also set to None, the study continues to create trials until it receives a termination signal such as Ctrl+C or SIGTERM. gc_after_trial: Flag to execute garbage collection at the end of each trial. By default, garbage collection is enabled, just in case. You can turn it off with this argument if memory is safely managed in your objective function. show_progress_bar: Flag to show progress bars or not. To disable progress bar, set this False. save_study: Save your study when finished/ interrupted. path: Folder where the study will be saved. show_plots: Flag to control whether plots are shown at the end of the study.

    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 000000000..c98c88a24 --- /dev/null +++ b/robots.txt @@ -0,0 +1 @@ +Sitemap: https://timeseriesAI.github.io/tsai/sitemap.xml diff --git a/search.json b/search.json new file mode 100644 index 000000000..da5aed71f --- /dev/null +++ b/search.json @@ -0,0 +1,1504 @@ +[ + { + "objectID": "models.tstplus.html", + "href": "models.tstplus.html", + "title": "TSTPlus", + "section": "", + "text": "This is an unofficial PyTorch implementation by Ignacio Oguiza of - oguiza@timeseriesAI.co based on:\nThis implementation is adapted to work with the rest of the tsai library, and contain some hyperparameters that are not available in the original implementation. I included them for experimenting.", + "crumbs": [ + "Models", + "Transformers", + "TSTPlus" + ] + }, + { + "objectID": "models.tstplus.html#imports", + "href": "models.tstplus.html#imports", + "title": "TSTPlus", + "section": "Imports", + "text": "Imports", + "crumbs": [ + "Models", + "Transformers", + "TSTPlus" + ] + }, + { + "objectID": "models.tstplus.html#tst", + "href": "models.tstplus.html#tst", + "title": "TSTPlus", + "section": "TST", + "text": "TST\n\nt = torch.rand(16, 50, 128)\nattn_mask = torch.triu(torch.ones(50, 50)) # shape: q_len x q_len\nkey_padding_mask = torch.zeros(16, 50)\nkey_padding_mask[[1, 3, 6, 15], -10:] = 1\nkey_padding_mask = key_padding_mask.bool()\nprint('attn_mask', attn_mask.shape, 'key_padding_mask', key_padding_mask.shape)\nencoder = _TSTEncoderLayer(q_len=50, d_model=128, n_heads=8, d_k=None, d_v=None, d_ff=512, attn_dropout=0., dropout=0.1, store_attn=True, activation='gelu')\noutput = encoder(t, key_padding_mask=key_padding_mask, attn_mask=attn_mask)\noutput.shape\n\nattn_mask torch.Size([50, 50]) key_padding_mask torch.Size([16, 50])\n\n\ntorch.Size([16, 50, 128])\n\n\n\ncmap='viridis'\nfigsize=(6,5)\nplt.figure(figsize=figsize)\nplt.pcolormesh(encoder.attn[0][0].detach().cpu().numpy(), cmap=cmap)\nplt.title('Self-attention map')\nplt.colorbar()\nplt.show()\n\n\n\n\n\n\n\n\n\nsource\n\nTSTPlus\n\n TSTPlus (c_in:int, c_out:int, seq_len:int, max_seq_len:Optional[int]=512,\n n_layers:int=3, d_model:int=128, n_heads:int=16,\n d_k:Optional[int]=None, d_v:Optional[int]=None, d_ff:int=256,\n norm:str='BatchNorm', attn_dropout:float=0.0, dropout:float=0.0,\n act:str='gelu', key_padding_mask:bool='auto',\n padding_var:Optional[int]=None,\n attn_mask:Optional[torch.Tensor]=None, res_attention:bool=True,\n pre_norm:bool=False, store_attn:bool=False, pe:str='zeros',\n learn_pe:bool=True, flatten:bool=True, fc_dropout:float=0.0,\n concat_pool:bool=False, bn:bool=False,\n custom_head:Optional[Callable]=None,\n y_range:Optional[tuple]=None, verbose:bool=False, **kwargs)\n\nTST (Time Series Transformer) is a Transformer that takes continuous time series as inputs\n\nfrom tsai.models.utils import build_ts_model\n\n\nbs = 8\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 1_500\n\nxb = torch.randn(bs, c_in, seq_len).to(device)\n\n# standardize by channel by_var based on the training set\nxb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)\n\n# Settings\nmax_seq_len = 256\nd_model = 128\nn_heads = 16\nd_k = d_v = None # if None --> d_model // n_heads\nd_ff = 256\nnorm = \"BatchNorm\"\ndropout = 0.1\nactivation = \"gelu\"\nn_layers = 3\nfc_dropout = 0.1\npe = None\nlearn_pe = True\nkwargs = {}\n\nmodel = TSTPlus(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, norm=norm, dropout=dropout, activation=activation, n_layers=n_layers,\n fc_dropout=fc_dropout, pe=pe, learn_pe=learn_pe, **kwargs).to(device)\ntest_eq(model(xb).shape, [bs, c_out])\ntest_eq(model[0], model.backbone)\ntest_eq(model[1], model.head)\nmodel2 = build_ts_model(TSTPlus, c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, norm=norm, dropout=dropout, activation=activation, n_layers=n_layers,\n fc_dropout=fc_dropout, pe=pe, learn_pe=learn_pe, **kwargs).to(device)\ntest_eq(model2(xb).shape, [bs, c_out])\ntest_eq(model2[0], model2.backbone)\ntest_eq(model2[1], model2.head)\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 470018\n\n\n\nkey_padding_mask = torch.sort(torch.randint(0, 2, (bs, max_seq_len))).values.bool().to(device)\nkey_padding_mask[0]\n\ntensor([False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, False,\n False, False, False, False, False, False, False, False, False, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True, True, True, True, True,\n True, True, True, True, True, True])\n\n\n\nmodel2.key_padding_mask = True\nmodel2.to(device)((xb, key_padding_mask)).shape\n\ntorch.Size([8, 2])\n\n\n\nmodel.head\n\nSequential(\n (0): GELU(approximate='none')\n (1): fastai.layers.Flatten(full=False)\n (2): LinBnDrop(\n (0): Dropout(p=0.1, inplace=False)\n (1): Linear(in_features=32768, out_features=2, bias=True)\n )\n)\n\n\n\nmodel = TSTPlus(c_in, c_out, seq_len, pre_norm=True)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\n\n\nbs = 8\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 5000\n\nxb = torch.randn(bs, c_in, seq_len)\n\n# standardize by channel by_var based on the training set\nxb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)\n\nmodel = TSTPlus(c_in, c_out, seq_len, res_attention=True)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 605698\n\n\n\ncustom_head = partial(create_pool_head, concat_pool=True)\nmodel = TSTPlus(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, dropout=dropout, activation=activation, n_layers=n_layers,\n fc_dropout=fc_dropout, pe=pe, learn_pe=learn_pe, flatten=False, custom_head=custom_head, **kwargs)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 421122\n\n\n\ncustom_head = partial(create_pool_plus_head, concat_pool=True)\nmodel = TSTPlus(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, dropout=dropout, activation=activation, n_layers=n_layers,\n fc_dropout=fc_dropout, pe=pe, learn_pe=learn_pe, flatten=False, custom_head=custom_head, **kwargs)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 554240\n\n\n\nbs = 8\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 60\n\nxb = torch.randn(bs, c_in, seq_len)\n\n# standardize by channel by_var based on the training set\nxb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)\n\n# Settings\nmax_seq_len = 120\nd_model = 128\nn_heads = 16\nd_k = d_v = None # if None --> d_model // n_heads\nd_ff = 256\ndropout = 0.1\nact = \"gelu\"\nn_layers = 3\nfc_dropout = 0.1\npe='zeros'\nlearn_pe=True\nkwargs = {}\n# kwargs = dict(kernel_size=5, padding=2)\n\nmodel = TSTPlus(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, dropout=dropout, act=act, n_layers=n_layers,\n fc_dropout=fc_dropout, pe=pe, learn_pe=learn_pe, **kwargs)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nprint(f'model parameters: {count_parameters(model)}')\nbody, head = model[0], model[1]\ntest_eq(body.to(xb.device)(xb).ndim, 3)\ntest_eq(head.to(xb.device)(body.to(xb.device)(xb)).ndim, 2)\nhead\n\nmodel parameters: 421762\n\n\nSequential(\n (0): GELU(approximate='none')\n (1): fastai.layers.Flatten(full=False)\n (2): LinBnDrop(\n (0): Dropout(p=0.1, inplace=False)\n (1): Linear(in_features=7680, out_features=2, bias=True)\n )\n)\n\n\n\nmodel.show_pe()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nmodel = TSTPlus(3, 2, 10)\nxb = torch.randn(4, 3, 10)\nyb = torch.randint(0, 2, (4,))\ntest_eq(model.backbone._key_padding_mask(xb)[1], None)\nrandom_idxs = random_choice(len(xb), 2, False)\nxb[random_idxs, :, -5:] = np.nan\nxb[random_idxs, 0, 1] = np.nan\ntest_eq(model.backbone._key_padding_mask(xb.clone())[1].data, (torch.isnan(xb).float().mean(1)==1).bool())\ntest_eq(model.backbone._key_padding_mask(xb.clone())[1].data.shape, (4,10))\nprint(torch.isnan(xb).sum())\npred = model.to(xb.device)(xb.clone())\nloss = CrossEntropyLossFlat()(pred, yb)\nloss.backward()\nmodel.to(xb.device).backbone._key_padding_mask(xb)[1].data.shape\n\ntensor(32)\n\n\ntorch.Size([4, 10])\n\n\n\nbs = 4\nc_in = 3\nseq_len = 10\nc_out = 2\nxb = torch.randn(bs, c_in, seq_len)\nxb[:, -1] = torch.randint(0, 2, (bs, seq_len)).sort()[0]\nmodel = TSTPlus(c_in, c_out, seq_len).to(xb.device)\ntest_eq(model.backbone._key_padding_mask(xb)[1], None)\nmodel = TSTPlus(c_in, c_out, seq_len, padding_var=-1).to(xb.device)\ntest_eq(model.backbone._key_padding_mask(xb)[1], (xb[:, -1]==1))\nmodel = TSTPlus(c_in, c_out, seq_len, padding_var=2).to(xb.device)\ntest_eq(model.backbone._key_padding_mask(xb)[1], (xb[:, -1]==1))\ntest_eq(model(xb).shape, (bs, c_out))\n\n\nbs = 4\nc_in = 3\nseq_len = 10\nc_out = 2\nxb = torch.randn(bs, c_in, seq_len)\nmodel = TSTPlus(c_in, c_out, seq_len, act='smelu')\n\n\nsource\n\n\nMultiTSTPlus\n\n MultiTSTPlus (feat_list, c_out, seq_len, max_seq_len:Optional[int]=512,\n custom_head=None, n_layers:int=3, d_model:int=128,\n n_heads:int=16, d_k:Optional[int]=None,\n d_v:Optional[int]=None, d_ff:int=256, norm:str='BatchNorm',\n attn_dropout:float=0.0, dropout:float=0.0, act:str='gelu',\n key_padding_mask:bool='auto',\n padding_var:Optional[int]=None,\n attn_mask:Optional[torch.Tensor]=None,\n res_attention:bool=True, pre_norm:bool=False,\n store_attn:bool=False, pe:str='zeros', learn_pe:bool=True,\n flatten:bool=True, fc_dropout:float=0.0,\n concat_pool:bool=False, bn:bool=False,\n y_range:Optional[tuple]=None, verbose:bool=False)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nbs = 8\nc_in = 7 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 10\nxb2 = torch.randn(bs, c_in, seq_len)\nmodel1 = MultiTSTPlus([2, 5], c_out, seq_len)\nmodel2 = MultiTSTPlus(7, c_out, seq_len)\ntest_eq(model1.to(xb2.device)(xb2).shape, (bs, c_out))\ntest_eq(model1.to(xb2.device)(xb2).shape, model2.to(xb2.device)(xb2).shape)\ntest_eq(count_parameters(model1) > count_parameters(model2), True)\n\n\nbs = 8\nc_in = 7 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 10\nxb2 = torch.randn(bs, c_in, seq_len)\nmodel1 = MultiTSTPlus([2, 5], c_out, seq_len, )\nmodel2 = MultiTSTPlus([[0,2,5], [0,1,3,4,6]], c_out, seq_len)\ntest_eq(model1.to(xb2.device)(xb2).shape, (bs, c_out))\ntest_eq(model1.to(xb2.device)(xb2).shape, model2.to(xb2.device)(xb2).shape)\n\n\nmodel1 = MultiTSTPlus([2, 5], c_out, seq_len, y_range=(0.5, 5.5))\nbody, head = split_model(model1)\ntest_eq(body.to(xb2.device)(xb2).ndim, 3)\ntest_eq(head.to(xb2.device)(body.to(xb2.device)(xb2)).ndim, 2)\nhead\n\nSequential(\n (0): Sequential(\n (0): GELU(approximate='none')\n (1): fastai.layers.Flatten(full=False)\n (2): LinBnDrop(\n (0): Linear(in_features=2560, out_features=2, bias=True)\n )\n )\n)\n\n\n\nmodel = MultiTSTPlus([2, 5], c_out, seq_len, pre_norm=True)\n\n\nbs = 8\nn_vars = 3\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\nnet = MultiTSTPlus(n_vars, c_out, seq_len)\nchange_model_head(net, create_pool_plus_head, concat_pool=False)\nprint(net.to(xb.device)(xb).shape)\nnet.head\n\ntorch.Size([8, 2])\n\n\nSequential(\n (0): AdaptiveAvgPool1d(output_size=1)\n (1): Reshape(bs)\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): Linear(in_features=128, out_features=512, bias=False)\n (4): ReLU(inplace=True)\n (5): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (6): Linear(in_features=512, out_features=2, bias=False)\n)\n\n\n\nbs = 8\nn_vars = 3\nseq_len = 12\nc_out = 10\nxb = torch.rand(bs, n_vars, seq_len)\nnew_head = partial(conv_lin_nd_head, d=(5 ,2))\nnet = MultiTSTPlus(n_vars, c_out, seq_len, custom_head=new_head)\nprint(net.to(xb.device)(xb).shape)\nnet.head\n\ntorch.Size([8, 5, 2, 10])\n\n\nSequential(\n (0): create_conv_lin_nd_head(\n (0): Conv1d(128, 10, kernel_size=(1,), stride=(1,))\n (1): Linear(in_features=12, out_features=10, bias=True)\n (2): Transpose(-1, -2)\n (3): Reshape(bs, 5, 2, 10)\n )\n)", + "crumbs": [ + "Models", + "Transformers", + "TSTPlus" + ] + }, + { + "objectID": "tutorials.html", + "href": "tutorials.html", + "title": "Tutorial notebooks", + "section": "", + "text": "A number of tutorials have been created to help you get started to use tsai with time series data. Please, feel free to open the notebooks (you can open them in Colab if you want) and tweak them to do your own experiments.", + "crumbs": [ + "Tutorial notebooks" + ] + }, + { + "objectID": "tutorials.html#time-series-classification-using-raw-data", + "href": "tutorials.html#time-series-classification-using-raw-data", + "title": "Tutorial notebooks", + "section": "Time series classification (using raw data)", + "text": "Time series classification (using raw data)\nI’d recommend you to start with:\n\nIntroduction to Time Series Classification. This notebook contains a detailed walk through the steps to perform time series classification.\n\n\nData preparation:\nIf you need help preparing your data you may find the following tutorials useful:\n\nTime Series data preparation: this will show how you can do classify both univariate or multivariate time series.\nHow to work with (very) large numpy arrays in tsai?\nHow to use numpy arrays in tsai?\n\nThese last 2 provide more details in case you need them. They explain how datasets and dataloaders are created.\n\n\nTypes of architectures:\nOnce you feel comfortable, you can start exploring different types of architectures:\n\nYou can use the Time Series data preparation notebook and replace the InceptionTime architecture by any other of your choice:\n\nMLPs\nRNNs (LSTM, GRU)\nCNNs (FCN, ResNet, XResNet)\nWavelet-based architectures\nTransformers (like TST - 2020)\nThey all (except ROCKET) work in the same way, for univariate or multivariate time series.\n\nHow to use Transformers with Time Series? may also help you understand how to successfully apply this new type of architecture to time series.\nYou can also use Time Series Classification Benchmark to perform bechmarks with different architectures and/ or configurations.\n\nROCKET (2019) is a new technique used to generate 10-20k features from time series. These features are used in a different classifier. This is the only implementation I’m aware of that uses GPU and allows both univariate and multivariate time series. To explain this method that works very well in many cases you can use the following notebook:\n\nROCKET: a new state-of-the-art time series classifier\n\nThere are many types of classifiers as you can see, and it’s very difficult to know in advance which one will perform well in our task. However, the ones that have consistently deliver the best results in recent benchmark studies are Inceptiontime (Fawaz, 2019) and ROCKET (Dempster, 2019). Transformers, like TST (Zerveas, 2020), also show a lot of promise, but the application to time series data is so new that they have not been benchmarked against other architectures. But I’d say these are 3 architectures you should know well.", + "crumbs": [ + "Tutorial notebooks" + ] + }, + { + "objectID": "tutorials.html#time-series-classification-using-time-series-images", + "href": "tutorials.html#time-series-classification-using-time-series-images", + "title": "Tutorial notebooks", + "section": "Time series classification (using time series images)", + "text": "Time series classification (using time series images)\nIn these tutorials, I’ve also included a section on how to transform time series into images. This will allow you to then use DL vision models like ResNet50 for example. This approach works very well in some cases, even if you have limited data. You can learn about this technique in this notebook:\n\nImaging time series", + "crumbs": [ + "Tutorial notebooks" + ] + }, + { + "objectID": "tutorials.html#time-series-regression", + "href": "tutorials.html#time-series-regression", + "title": "Tutorial notebooks", + "section": "Time series regression", + "text": "Time series regression\nI’ve also included an example of how you can perform time series regression with your time series using tsai. In this case, the label will be continuous, instead of a category. But as you will see, the use is almost identical to time series classification. You can learn more about this here:\n\nTime series regression", + "crumbs": [ + "Tutorial notebooks" + ] + }, + { + "objectID": "tutorials.html#visualization", + "href": "tutorials.html#visualization", + "title": "Tutorial notebooks", + "section": "Visualization", + "text": "Visualization\nI’ve also created PredictionDynamics callback that allows you to visualize the model’s predictions while it’s training. It can provide you some additional insights that may be useful to improve your model. Here’s the notebook:\n\nPredictionDynamics\n\nI hope you will find these tutorial useful. I’m planning to add more tutorials to demonstrate new techniques, models, etc when they become available. So stay tuned!", + "crumbs": [ + "Tutorial notebooks" + ] + }, + { + "objectID": "models.gatedtabtransformer.html", + "href": "models.gatedtabtransformer.html", + "title": "GatedTabTransformer", + "section": "", + "text": "This implementation is based on:\n\nCholakov, R., & Kolev, T. (2022). The GatedTabTransformer. An enhanced deep learning architecture for tabular modeling. arXiv preprint arXiv:2201.00199. arXiv preprint https://arxiv.org/abs/2201.00199\nHuang, X., Khetan, A., Cvitkovic, M., & Karnin, Z. (2020). TabTransformer: Tabular Data Modeling Using Contextual Embeddings. arXiv preprint https://arxiv.org/pdf/2012.06678\n\nOfficial repo: https://github.com/radi-cho/GatedTabTransformer\n\nsource\n\nGatedTabTransformer\n\n GatedTabTransformer (classes, cont_names, c_out, column_embed=True,\n add_shared_embed=False, shared_embed_div=8,\n embed_dropout=0.1, drop_whole_embed=False,\n d_model=32, n_layers=6, n_heads=8, d_k=None,\n d_v=None, d_ff=None, res_attention=True,\n attention_act='gelu', res_dropout=0.1,\n norm_cont=True, mlp_d_model=32, mlp_d_ffn=64,\n mlp_layers=4)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nfrom fastcore.test import test_eq\nfrom fastcore.basics import first\nfrom fastai.data.external import untar_data, URLs\nfrom fastai.tabular.data import TabularDataLoaders\nfrom fastai.tabular.core import Categorify, FillMissing\nfrom fastai.data.transforms import Normalize\nimport pandas as pd\n\n\npath = untar_data(URLs.ADULT_SAMPLE)\ndf = pd.read_csv(path/'adult.csv')\ndls = TabularDataLoaders.from_csv(path/'adult.csv', path=path, y_names=\"salary\",\n cat_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race'],\n cont_names = ['age', 'fnlwgt', 'education-num'],\n procs = [Categorify, FillMissing, Normalize])\nx_cat, x_cont, yb = first(dls.train)\nmodel = GatedTabTransformer(dls.classes, dls.cont_names, dls.c)\ntest_eq(model(x_cat, x_cont).shape, (dls.train.bs, dls.c))", + "crumbs": [ + "Models", + "Tabular models", + "GatedTabTransformer" + ] + }, + { + "objectID": "models.xcmplus.html", + "href": "models.xcmplus.html", + "title": "XCMPlus", + "section": "", + "text": "This is an unofficial PyTorch implementation of XCM created by Ignacio Oguiza (oguiza@timeseriesAI.co).\n\nsource\n\nXCMPlus\n\n XCMPlus (c_in:int, c_out:int, seq_len:Optional[int]=None, nf:int=128,\n window_perc:float=1.0, flatten:bool=False, custom_head:<built-\n infunctioncallable>=None, concat_pool:bool=False,\n fc_dropout:float=0.0, bn:bool=False, y_range:tuple=None,\n **kwargs)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nfrom tsai.data.basics import *\nfrom tsai.learner import *\n\n\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, split_data=False)\ntfms = [None, TSCategorize()]\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms)\nmodel = XCMPlus(dls.vars, dls.c, dls.len)\nlearn = ts_learner(dls, model, metrics=accuracy)\nxb, yb = dls.one_batch()\n\nbs, c_in, seq_len = xb.shape\nc_out = len(np.unique(yb.cpu().numpy()))\n\nmodel = XCMPlus(c_in, c_out, seq_len, fc_dropout=.5)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\nmodel = XCMPlus(c_in, c_out, seq_len, concat_pool=True)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\nmodel = XCMPlus(c_in, c_out, seq_len)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\nmodel\n\nXCMPlus(\n (backbone): _XCMPlus_Backbone(\n (conv2dblock): Sequential(\n (0): Unsqueeze(dim=1)\n (1): Conv2dSame(\n (conv2d_same): Conv2d(1, 128, kernel_size=(1, 51), stride=(1, 1))\n )\n (2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (conv2d1x1block): Sequential(\n (0): Conv2d(128, 1, kernel_size=(1, 1), stride=(1, 1))\n (1): ReLU()\n (2): Squeeze(dim=1)\n )\n (conv1dblock): Sequential(\n (0): Conv1d(24, 128, kernel_size=(51,), stride=(1,), padding=(25,))\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (conv1d1x1block): Sequential(\n (0): Conv1d(128, 1, kernel_size=(1,), stride=(1,))\n (1): ReLU()\n )\n (concat): Concat(dim=1)\n (conv1d): Sequential(\n (0): Conv1d(25, 128, kernel_size=(51,), stride=(1,), padding=(25,))\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n )\n (head): Sequential(\n (0): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Reshape(bs)\n )\n (1): LinBnDrop(\n (0): Linear(in_features=128, out_features=6, bias=True)\n )\n )\n)\n\n\n\nmodel.show_gradcam(xb, yb)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nmodel.show_gradcam(xb[0], yb[0])\n\n[W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nbs = 16\nn_vars = 3\nseq_len = 12\nc_out = 1\nxb = torch.rand(bs, n_vars, seq_len)\nnew_head = partial(conv_lin_nd_head, d=(5, 2))\nnet = XCMPlus(n_vars, c_out, seq_len, custom_head=new_head)\nprint(net.to(xb.device)(xb).shape)\nnet.head\n\ntorch.Size([16, 5, 2])\n\n\ncreate_conv_lin_nd_head(\n (0): Conv1d(128, 1, kernel_size=(1,), stride=(1,))\n (1): Linear(in_features=12, out_features=10, bias=True)\n (2): Transpose(-1, -2)\n (3): Reshape(bs, 5, 2)\n)\n\n\n\nbs = 16\nn_vars = 3\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\nnet = XCMPlus(n_vars, c_out, seq_len)\nchange_model_head(net, create_pool_plus_head, concat_pool=False)\nprint(net.to(xb.device)(xb).shape)\nnet.head\n\ntorch.Size([16, 2])\n\n\nSequential(\n (0): AdaptiveAvgPool1d(output_size=1)\n (1): Reshape(bs)\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): Linear(in_features=128, out_features=512, bias=False)\n (4): ReLU(inplace=True)\n (5): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (6): Linear(in_features=512, out_features=2, bias=False)\n)", + "crumbs": [ + "Models", + "CNNs", + "XCMPlus" + ] + }, + { + "objectID": "models.minirocket_pytorch.html", + "href": "models.minirocket_pytorch.html", + "title": "MINIROCKET Pytorch", + "section": "", + "text": "A Very Fast (Almost) Deterministic Transform for Time Series Classification.\n\nThis is a Pytorch implementation of MiniRocket developed by Malcolm McLean and Ignacio Oguiza based on:\nDempster, A., Schmidt, D. F., & Webb, G. I. (2020). MINIROCKET: A Very Fast (Almost) Deterministic Transform for Time Series Classification. arXiv preprint arXiv:2012.08791.\nOriginal paper: https://arxiv.org/abs/2012.08791\nOriginal code: https://github.com/angus924/minirocket\n\nsource\n\nMiniRocketFeatures\n\n MiniRocketFeatures (c_in, seq_len, num_features=10000,\n max_dilations_per_kernel=32, random_state=None)\n\nThis is a Pytorch implementation of MiniRocket developed by Malcolm McLean and Ignacio Oguiza\nMiniRocket paper citation: @article{dempster_etal_2020, author = {Dempster, Angus and Schmidt, Daniel F and Webb, Geoffrey I}, title = {{MINIROCKET}: A Very Fast (Almost) Deterministic Transform for Time Series Classification}, year = {2020}, journal = {arXiv:2012.08791} } Original paper: https://arxiv.org/abs/2012.08791 Original code: https://github.com/angus924/minirocket\n\nsource\n\n\nget_minirocket_features\n\n get_minirocket_features (o, model, chunksize=1024, use_cuda=None,\n to_np=True)\n\nFunction used to split a large dataset into chunks, avoiding OOM error.\n\nsource\n\n\nMiniRocketHead\n\n MiniRocketHead (c_in, c_out, seq_len=1, bn=True, fc_dropout=0.0)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nMiniRocket\n\n MiniRocket (c_in, c_out, seq_len, num_features=10000,\n max_dilations_per_kernel=32, random_state=None, bn=True,\n fc_dropout=0)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nfrom tsai.imports import default_device\nfrom fastai.metrics import accuracy\nfrom fastai.callback.tracker import ReduceLROnPlateau\nfrom tsai.data.all import *\nfrom tsai.learner import *\n\n\n# Offline feature calculation\ndsid = 'ECGFiveDays'\nX, y, splits = get_UCR_data(dsid, split_data=False)\nmrf = MiniRocketFeatures(c_in=X.shape[1], seq_len=X.shape[2]).to(default_device())\nX_train = X[splits[0]] # X_train may either be a np.ndarray or a torch.Tensor\nmrf.fit(X_train)\nX_tfm = get_minirocket_features(X, mrf)\ntfms = [None, TSClassification()]\nbatch_tfms = TSStandardize(by_var=True)\ndls = get_ts_dls(X_tfm, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=256)\nlearn = ts_learner(dls, MiniRocketHead, metrics=accuracy)\nlearn.fit(1, 1e-4, cbs=ReduceLROnPlateau(factor=0.5, min_lr=1e-8, patience=10))\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\ntime\n\n\n\n\n0\n0.693147\n0.530879\n0.752613\n00:00\n\n\n\n\n\n\n# Online feature calculation\ndsid = 'ECGFiveDays'\nX, y, splits = get_UCR_data(dsid, split_data=False)\ntfms = [None, TSClassification()]\nbatch_tfms = TSStandardize()\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=256)\nlearn = ts_learner(dls, MiniRocket, metrics=accuracy)\nlearn.fit_one_cycle(1, 1e-2)\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\ntime\n\n\n\n\n0\n0.693147\n0.713297\n0.502904\n00:06", + "crumbs": [ + "Models", + "ROCKETs", + "MINIROCKET Pytorch" + ] + }, + { + "objectID": "models.rnn.html", + "href": "models.rnn.html", + "title": "RNNs", + "section": "", + "text": "These are RNN, LSTM and GRU PyTorch implementations created by Ignacio Oguiza - oguiza@timeseriesAI.co\nsource", + "crumbs": [ + "Models", + "RNNs", + "RNNs" + ] + }, + { + "objectID": "models.rnn.html#converting-a-model-to-torchscript", + "href": "models.rnn.html#converting-a-model-to-torchscript", + "title": "RNNs", + "section": "Converting a model to TorchScript", + "text": "Converting a model to TorchScript\n\nmodel = LSTM(c_in, c_out, hidden_size=100, n_layers=2, bidirectional=True, rnn_dropout=.5, fc_dropout=.5)\nmodel.eval()\ninp = torch.rand(1, c_in, 50)\noutput = model(inp)\nprint(output)\n\ntensor([[-0.0287, -0.0105]], grad_fn=<AddmmBackward0>)\n\n\n\nTracing\n\n# save to gpu, cpu or both\ntraced_cpu = torch.jit.trace(model.cpu(), inp)\nprint(traced_cpu)\ntorch.jit.save(traced_cpu, \"cpu.pt\")\n\n# load cpu or gpu model\ntraced_cpu = torch.jit.load(\"cpu.pt\")\ntest_eq(traced_cpu(inp), output)\n\n!rm \"cpu.pt\"\n\nLSTM(\n original_name=LSTM\n (rnn): LSTM(original_name=LSTM)\n (dropout): Dropout(original_name=Dropout)\n (fc): Linear(original_name=Linear)\n)\n\n\n\n\nScripting\n\n# save to gpu, cpu or both\nscripted_cpu = torch.jit.script(model.cpu())\nprint(scripted_cpu)\ntorch.jit.save(scripted_cpu, \"cpu.pt\")\n\n# load cpu or gpu model\nscripted_cpu = torch.jit.load(\"cpu.pt\")\ntest_eq(scripted_cpu(inp), output)\n\n!rm \"cpu.pt\"\n\nRecursiveScriptModule(\n original_name=LSTM\n (rnn): RecursiveScriptModule(original_name=LSTM)\n (dropout): RecursiveScriptModule(original_name=Dropout)\n (fc): RecursiveScriptModule(original_name=Linear)\n)", + "crumbs": [ + "Models", + "RNNs", + "RNNs" + ] + }, + { + "objectID": "models.rnn.html#converting-a-model-to-onnx", + "href": "models.rnn.html#converting-a-model-to-onnx", + "title": "RNNs", + "section": "Converting a model to ONNX", + "text": "Converting a model to ONNX\nimport onnx\n\n# Export the model\ntorch.onnx.export(model.cpu(), # model being run\n inp, # model input (or a tuple for multiple inputs)\n \"cpu.onnx\", # where to save the model (can be a file or file-like object)\n export_params=True, # store the trained parameter weights inside the model file\n verbose=False,\n opset_version=13, # the ONNX version to export the model to\n do_constant_folding=True, # whether to execute constant folding for optimization\n input_names = ['input'], # the model's input names\n output_names = ['output'], # the model's output names\n dynamic_axes={\n 'input' : {0 : 'batch_size'}, \n 'output' : {0 : 'batch_size'}} # variable length axes\n )\n\n# Load the model and check it's ok\nonnx_model = onnx.load(\"cpu.onnx\")\nonnx.checker.check_model(onnx_model)\n\n# You can ignore the WARNINGS below\nimport onnxruntime as ort\n\nort_sess = ort.InferenceSession('cpu.onnx')\nout = ort_sess.run(None, {'input': inp.numpy()})\n\n# input & output names\ninput_name = ort_sess.get_inputs()[0].name\noutput_name = ort_sess.get_outputs()[0].name\n\n# input dimensions\ninput_dims = ort_sess.get_inputs()[0].shape\nprint(input_name, output_name, input_dims)\n\ntest_close(out, output.detach().numpy())\n!rm \"cpu.onnx\"", + "crumbs": [ + "Models", + "RNNs", + "RNNs" + ] + }, + { + "objectID": "models.xcm.html", + "href": "models.xcm.html", + "title": "XCM", + "section": "", + "text": "An Explainable Convolutional Neural Network for Multivariate Time Series Classification\n\nThis is an unofficial PyTorch implementation of XCM created by Ignacio Oguiza (oguiza@timeseriesAI.co)\n\nsource\n\nXCM\n\n XCM (c_in:int, c_out:int, seq_len:Optional[int]=None, nf:int=128,\n window_perc:float=1.0, flatten:bool=False, custom_head:<built-\n infunctioncallable>=None, concat_pool:bool=False,\n fc_dropout:float=0.0, bn:bool=False, y_range:tuple=None, **kwargs)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nfrom tsai.data.basics import *\nfrom tsai.learner import *\n\n\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, split_data=False)\ntfms = [None, TSCategorize()]\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms)\nmodel = XCM(dls.vars, dls.c, dls.len)\nlearn = ts_learner(dls, model, metrics=accuracy)\nxb, yb = dls.one_batch()\n\nbs, c_in, seq_len = xb.shape\nc_out = len(np.unique(yb.cpu().numpy()))\n\nmodel = XCM(c_in, c_out, seq_len, fc_dropout=.5)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\nmodel = XCM(c_in, c_out, seq_len, concat_pool=True)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\nmodel = XCM(c_in, c_out, seq_len)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\nmodel\n\nXCM(\n (conv2dblock): Sequential(\n (0): Unsqueeze(dim=1)\n (1): Conv2dSame(\n (conv2d_same): Conv2d(1, 128, kernel_size=(1, 51), stride=(1, 1))\n )\n (2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (conv2d1x1block): Sequential(\n (0): Conv2d(128, 1, kernel_size=(1, 1), stride=(1, 1))\n (1): ReLU()\n (2): Squeeze(dim=1)\n )\n (conv1dblock): Sequential(\n (0): Conv1d(24, 128, kernel_size=(51,), stride=(1,), padding=(25,))\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (conv1d1x1block): Sequential(\n (0): Conv1d(128, 1, kernel_size=(1,), stride=(1,))\n (1): ReLU()\n )\n (concat): Concat(dim=1)\n (conv1d): Sequential(\n (0): Conv1d(25, 128, kernel_size=(51,), stride=(1,), padding=(25,))\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (head): Sequential(\n (0): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Reshape(bs)\n )\n (1): LinBnDrop(\n (0): Linear(in_features=128, out_features=6, bias=True)\n )\n )\n)\n\n\n\nmodel.show_gradcam(xb, yb)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nmodel.show_gradcam(xb[0], yb[0])\n\n[W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nbs = 16\nn_vars = 3\nseq_len = 12\nc_out = 10\nxb = torch.rand(bs, n_vars, seq_len)\nnew_head = partial(conv_lin_nd_head, d=(5, 2))\nnet = XCM(n_vars, c_out, seq_len, custom_head=new_head)\nprint(net.to(xb.device)(xb).shape)\nnet.head\n\ntorch.Size([16, 5, 2, 10])\n\n\ncreate_conv_lin_nd_head(\n (0): Conv1d(128, 10, kernel_size=(1,), stride=(1,))\n (1): Linear(in_features=12, out_features=10, bias=True)\n (2): Transpose(-1, -2)\n (3): Reshape(bs, 5, 2, 10)\n)\n\n\n\nbs = 16\nn_vars = 3\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\nnet = XCM(n_vars, c_out, seq_len)\nchange_model_head(net, create_pool_plus_head, concat_pool=False)\nprint(net.to(xb.device)(xb).shape)\nnet.head\n\ntorch.Size([16, 2])\n\n\nSequential(\n (0): AdaptiveAvgPool1d(output_size=1)\n (1): Reshape(bs)\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): Linear(in_features=128, out_features=512, bias=False)\n (4): ReLU(inplace=True)\n (5): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (6): Linear(in_features=512, out_features=2, bias=False)\n)", + "crumbs": [ + "Models", + "CNNs", + "XCM" + ] + }, + { + "objectID": "models.tsitplus.html", + "href": "models.tsitplus.html", + "title": "TSiT", + "section": "", + "text": "This is a PyTorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on ViT (Vision Transformer):\nDosovitskiy, A., Beyer, L., Kolesnikov, A., Weissenborn, D., Zhai, X., Unterthiner, T., … & Houlsby, N. (2020).\nAn image is worth 16x16 words: Transformers for image recognition at scale. arXiv preprint arXiv:2010.11929.\nsource", + "crumbs": [ + "Models", + "Transformers", + "TSiT" + ] + }, + { + "objectID": "models.tsitplus.html#feature-extractor", + "href": "models.tsitplus.html#feature-extractor", + "title": "TSiT", + "section": "Feature extractor", + "text": "Feature extractor\nIt’s a known fact that transformers cannot be directly applied to long sequences. To avoid this, we have included a way to subsample the sequence to generate a more manageable input.\n\nfrom tsai.data.validation import get_splits\nfrom tsai.data.core import get_ts_dls\n\n\nX = np.zeros((10, 3, 5000)) \ny = np.random.randint(0,2,X.shape[0])\nsplits = get_splits(y)\ndls = get_ts_dls(X, y, splits=splits)\nxb, yb = dls.train.one_batch()\nxb\n\n\n\n\n\n\n\n\nTSTensor(samples:8, vars:3, len:5000, device=cpu, dtype=torch.float32)\n\n\nIf you try to use TSiTPlus, it’s likely you’ll get an ‘out-of-memory’ error.\nTo avoid this you can subsample the sequence reducing the input’s length. This can be done in multiple ways. Here are a few examples:\n\n# Separable convolution (to avoid mixing channels)\nfeature_extractor = Conv1d(xb.shape[1], xb.shape[1], ks=100, stride=50, padding=0, groups=xb.shape[1]).to(default_device())\nfeature_extractor.to(xb.device)(xb).shape\n\ntorch.Size([8, 3, 99])\n\n\n\n# Convolution (if you want to mix channels or change number of channels)\nfeature_extractor=MultiConv1d(xb.shape[1], 64, kss=[1,3,5,7,9], keep_original=True).to(default_device())\ntest_eq(feature_extractor.to(xb.device)(xb).shape, (xb.shape[0], 64, xb.shape[-1]))\n\n\n# MaxPool\nfeature_extractor = nn.Sequential(Pad1d((0, 50), 0), nn.MaxPool1d(kernel_size=100, stride=50)).to(default_device())\nfeature_extractor.to(xb.device)(xb).shape\n\ntorch.Size([8, 3, 100])\n\n\n\n# AvgPool\nfeature_extractor = nn.Sequential(Pad1d((0, 50), 0), nn.AvgPool1d(kernel_size=100, stride=50)).to(default_device())\nfeature_extractor.to(xb.device)(xb).shape\n\ntorch.Size([8, 3, 100])\n\n\nOnce you decide what type of transform you want to apply, you just need to pass the layer as the feature_extractor attribute:\n\nbs = 16\nnvars = 4\nseq_len = 1000\nc_out = 2\nd_model = 128\n\nxb = torch.rand(bs, nvars, seq_len)\nfeature_extractor = partial(Conv1d, ks=5, stride=3, padding=0, groups=xb.shape[1])\nmodel = TSiTPlus(nvars, c_out, seq_len, d_model=d_model, feature_extractor=feature_extractor)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))", + "crumbs": [ + "Models", + "Transformers", + "TSiT" + ] + }, + { + "objectID": "models.tsitplus.html#categorical-variables", + "href": "models.tsitplus.html#categorical-variables", + "title": "TSiT", + "section": "Categorical variables", + "text": "Categorical variables\n\nfrom tsai.utils import alphabet, ALPHABET\n\n\na = alphabet[np.random.randint(0,3,40)]\nb = ALPHABET[np.random.randint(6,10,40)]\nc = np.random.rand(40).reshape(4,1,10)\nmap_a = {k:v for v,k in enumerate(np.unique(a))}\nmap_b = {k:v for v,k in enumerate(np.unique(b))}\nn_cat_embeds = [len(m.keys()) for m in [map_a, map_b]]\nszs = [emb_sz_rule(n) for n in n_cat_embeds]\na = np.asarray(a.map(map_a)).reshape(4,1,10)\nb = np.asarray(b.map(map_b)).reshape(4,1,10)\ninp = torch.from_numpy(np.concatenate((c,a,b), 1)).float()\nfeature_extractor = partial(Conv1d, ks=3, padding='same')\nmodel = TSiTPlus(3, 2, 10, d_model=64, cat_pos=[1,2], feature_extractor=feature_extractor)\ntest_eq(model(inp).shape, (4,2))\n\n[W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.", + "crumbs": [ + "Models", + "Transformers", + "TSiT" + ] + }, + { + "objectID": "models.tsitplus.html#sequence-embedding", + "href": "models.tsitplus.html#sequence-embedding", + "title": "TSiT", + "section": "Sequence Embedding", + "text": "Sequence Embedding\nSometimes you have a samples with a very long sequence length. In those cases you may want to reduce it’s length before passing it to the transformer. To do that you may just pass a token_size like in this example:\n\nt = torch.rand(8, 2, 10080)\nSeqTokenizer(2, 128, 60)(t).shape\n\ntorch.Size([8, 128, 168])\n\n\n\nt = torch.rand(8, 2, 10080)\nmodel = TSiTPlus(2, 5, 10080, d_model=64, token_size=60)\nmodel(t).shape\n\ntorch.Size([8, 5])", + "crumbs": [ + "Models", + "Transformers", + "TSiT" + ] + }, + { + "objectID": "data.metadatasets.html", + "href": "data.metadatasets.html", + "title": "Metadataset", + "section": "", + "text": "A dataset of datasets\n\nThis functionality will allow you to create a dataset from data stores in multiple, smaller datasets.\nI’d like to thank both Thomas Capelle (https://github.com/tcapelle) and Xander Dunn (https://github.com/xanderdunn) for their contributions to make this code possible.\nThis functionality allows you to use multiple numpy arrays instead of a single one, which may be very useful in many practical settings. It’s been tested it with 10k+ datasets and it works well.\n\nsource\n\nTSMetaDatasets\n\n TSMetaDatasets (metadataset, splits)\n\nBase class for lists with subsets\n\nsource\n\n\nTSMetaDataset\n\n TSMetaDataset (dataset_list, **kwargs)\n\nInitialize self. See help(type(self)) for accurate signature.\nLet’s create 3 datasets. In this case they will have different sizes.\n\nvocab = alphabet[:10]\ndsets = []\nfor i in range(3):\n size = np.random.randint(50, 150)\n X = torch.rand(size, 5, 50)\n y = vocab[torch.randint(0, 10, (size,))]\n tfms = [None, TSClassification(vocab=vocab)]\n dset = TSDatasets(X, y, tfms=tfms)\n dsets.append(dset)\n\n\n\nmetadataset = TSMetaDataset(dsets)\nsplits = TimeSplitter(show_plot=False)(metadataset)\nmetadatasets = TSMetaDatasets(metadataset, splits=splits)\ndls = TSDataLoaders.from_dsets(metadatasets.train, metadatasets.valid)\nxb, yb = dls.train.one_batch()\nxb, yb\n\n(TSTensor(samples:64, vars:5, len:50, device=cpu, dtype=torch.float32),\n TensorCategory([1, 0, 3, 9, 7, 2, 8, 6, 1, 1, 1, 8, 1, 1, 9, 2, 6, 6, 1, 5, 5,\n 6, 9, 2, 7, 1, 6, 4, 9, 2, 5, 0, 4, 9, 1, 4, 4, 6, 0, 8, 8, 5,\n 8, 6, 9, 0, 8, 8, 6, 4, 8, 9, 7, 3, 4, 7, 7, 8, 6, 2, 3, 0, 7,\n 4]))\n\n\nYou can train metadatasets as you would train any other time series model in tsai:\nlearn = ts_learner(dls, arch=\"TSTPlus\")\nlearn.fit_one_cycle(1)\nlearn.export(\"test.pkl\")\nFor inference, you should create the new metadatasets using the same method you used when you trained it. The you use fastai’s learn.get_preds method to generate predictions:\nvocab = alphabet[:10]\ndsets = []\nfor i in range(3):\n size = np.random.randint(50, 150)\n X = torch.rand(size, 5, 50)\n y = vocab[torch.randint(0, 10, (size,))]\n tfms = [None, TSClassification(vocab=vocab)]\n dset = TSDatasets(X, y, tfms=tfms)\n dsets.append(dset)\nmetadataset = TSMetaDataset(dsets)\ndl = TSDataLoader(metadataset)\n\n\nlearn = load_learner(\"test.pkl\")\nlearn.get_preds(dl=dl)\nThere also en easy way to map any particular sample in a batch to the original dataset and id:\n\ndls = TSDataLoaders.from_dsets(metadatasets.train, metadatasets.valid)\nxb, yb = first(dls.train)\nmappings = dls.train.dataset.mapping_idxs\nfor i, (xbi, ybi) in enumerate(zip(xb, yb)):\n ds, idx = mappings[i]\n test_close(dsets[ds][idx][0].data.cpu(), xbi.cpu())\n test_close(dsets[ds][idx][1].data.cpu(), ybi.cpu())\n\nFor example the 3rd sample in this batch would be:\n\ndls.train.dataset.mapping_idxs[2]\n\narray([ 0, 112], dtype=int32)", + "crumbs": [ + "Data", + "Metadataset" + ] + }, + { + "objectID": "models.multiinputnet.html", + "href": "models.multiinputnet.html", + "title": "MultiInputNet", + "section": "", + "text": "This is an implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co).\nIt can be used to combine different types of deep learning models into a single one that will accept multiple inputs from a MixedDataLoaders.\n\nsource\n\nMultiInputNet\n\n MultiInputNet (*models, c_out=None, reshape_fn=None, multi_output=False,\n custom_head=None, device=None, **kwargs)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nfrom tsai.basics import *\nfrom tsai.data.all import *\nfrom tsai.models.utils import *\nfrom tsai.models.InceptionTimePlus import *\nfrom tsai.models.TabModel import *\n\n\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, split_data=False)\nts_features_df = get_ts_features(X, y)\n\nFeature Extraction: 100%|███████████████████████████████████████████| 40/40 [00:07<00:00, 5.23it/s]\n\n\n\n# raw ts\ntfms = [None, [TSCategorize()]]\nbatch_tfms = TSStandardize()\nts_dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\nts_model = build_ts_model(InceptionTimePlus, dls=ts_dls)\n\n# ts features\ncat_names = None\ncont_names = ts_features_df.columns[:-2]\ny_names = 'target'\ntab_dls = get_tabular_dls(ts_features_df, cat_names=cat_names, cont_names=cont_names, y_names=y_names, splits=splits)\ntab_model = build_tabular_model(TabModel, dls=tab_dls)\n\n# mixed\nmixed_dls = get_mixed_dls(ts_dls, tab_dls)\nMultiModalNet = MultiInputNet(ts_model, tab_model)\nlearn = Learner(mixed_dls, MultiModalNet, metrics=[accuracy, RocAuc()])\nlearn.fit_one_cycle(1, 1e-3)\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\nroc_auc_score\ntime\n\n\n\n\n0\n1.780674\n1.571718\n0.477778\n0.857444\n00:05\n\n\n\n\n\n\n(ts, (cat, cont)),yb = mixed_dls.one_batch()\nlearn.model((ts, (cat, cont))).shape\n\ntorch.Size([64, 6])\n\n\n\ntab_dls.c, ts_dls.c, ts_dls.cat\n\n(6, 6, True)\n\n\n\nlearn.loss_func\n\nFlattenedLoss of CrossEntropyLoss()", + "crumbs": [ + "Models", + "Miscellaneous", + "MultiInputNet" + ] + }, + { + "objectID": "utils.html", + "href": "utils.html", + "title": "Utilities", + "section": "", + "text": "General helper functions used throughout the library\n\n\nsource\n\nrandom_rand\n\n random_rand (*d, dtype=None, out=None, seed=None)\n\nSame as np.random.rand but with a faster random generator, dtype and seed\n\nsource\n\n\nrandom_randint\n\n random_randint (low, high=None, size=None, dtype=<class 'int'>,\n endpoint=False, seed=None)\n\nSame as np.random.randint but with a faster random generator and seed\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nlow\n\n\nint, lower endpoint of interval (inclusive)\n\n\nhigh\nNoneType\nNone\nint, upper endpoint of interval (exclusive), or None for a single-argument form of low.\n\n\nsize\nNoneType\nNone\nint or tuple of ints, optional. Output shape.\n\n\ndtype\ntype\nint\ndata type of the output.\n\n\nendpoint\nbool\nFalse\nbool, optional. If True, high is an inclusive endpoint. If False, the range is open on the right.\n\n\nseed\nNoneType\nNone\nint or None, optional. Seed for the random number generator.\n\n\n\n\nsource\n\n\nrandom_choice\n\n random_choice (a, size=None, replace=True, p=None, axis=0, shuffle=True,\n dtype=None, seed=None)\n\nSame as np.random.choice but with a faster random generator, dtype and seed\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\na\n\n\n1-D array-like or int. The values from which to draw the samples.\n\n\nsize\nNoneType\nNone\nint or tuple of ints, optional. The shape of the output.\n\n\nreplace\nbool\nTrue\nbool, optional. Whether or not to allow the same value to be drawn multiple times.\n\n\np\nNoneType\nNone\n1-D array-like, optional. The probabilities associated with each entry in a.\n\n\naxis\nint\n0\nint, optional. The axis along which the samples are drawn.\n\n\nshuffle\nbool\nTrue\nbool, optional. Whether or not to shuffle the samples before returning them.\n\n\ndtype\nNoneType\nNone\ndata type of the output.\n\n\nseed\nNoneType\nNone\nint or None, optional. Seed for the random number generator.\n\n\n\n\na = random_choice(10, size=(2,3,4), replace=True, p=None, seed=1)\nb = random_choice(10, size=(2,3,4), replace=True, p=None, seed=1)\ntest_eq(a, b)\nc = random_choice(10, size=(2,3,4), replace=True, p=None, seed=2)\ntest_ne(a, c)\n\nassert random_choice(10, size=3, replace=True, p=None).shape == (3,)\nassert random_choice(10, size=(2,3,4), replace=True, p=None).shape == (2,3,4)\n\nprint(random_choice(10, size=3, replace=True, p=None))\nprint(random_choice(10, size=3, replace=False, p=None))\na = [2, 5, 4, 9, 13, 25, 56, 83, 99, 100]\nprint(random_choice(a, size=3, replace=False, p=None))\n\n[5 7 5]\n[0 1 6]\n[ 4 83 100]\n\n\n\na = random_randint(10, 20, 100, seed=1)\nb = random_randint(10, 20, 100, seed=1)\ntest_eq(a, b)\nc = random_randint(10, 20, 100, seed=2)\ntest_ne(a, c)\nassert (a >= 10).all() and (a < 20).all()\n\n\na = random_rand(2, 3, 4, seed=123)\nb = random_rand(2, 3, 4, seed=123)\ntest_eq(a, b)\nc = random_rand(2, 3, 4, seed=124)\ntest_ne(a, c)\nassert (a >= 0).all() and (a < 1).all()\n\na = random_rand(2, 3, 4)\na_copy = a.copy()\nrandom_rand(2, 3, 4, out=a)\ntest_ne(a, a_copy)\n\n\nsource\n\n\nis_slice\n\n is_slice (o)\n\n\nsource\n\n\nis_memmap\n\n is_memmap (o)\n\n\nsource\n\n\nis_dask\n\n is_dask (o)\n\n\nsource\n\n\nis_zarr\n\n is_zarr (o)\n\n\nsource\n\n\nis_tensor\n\n is_tensor (o)\n\n\nsource\n\n\nis_nparray\n\n is_nparray (o)\n\n\n# ensure these folders exist for testing purposes\nfns = ['data', 'export', 'models']\nfor fn in fns:\n path = Path('.')/fn\n if not os.path.exists(path): os.makedirs(path)\n\n\nsource\n\n\ntodtype\n\n todtype (dtype)\n\n\nsource\n\n\nto3dPlusArray\n\n to3dPlusArray (o)\n\n\nsource\n\n\nto3dPlusTensor\n\n to3dPlusTensor (o)\n\n\nsource\n\n\nto2dPlusArray\n\n to2dPlusArray (o)\n\n\nsource\n\n\nto2dPlusTensor\n\n to2dPlusTensor (o)\n\n\nsource\n\n\nto3dPlus\n\n to3dPlus (o)\n\n\nsource\n\n\nto2dPlus\n\n to2dPlus (o)\n\n\nsource\n\n\nto1d\n\n to1d (o)\n\n\nsource\n\n\nto2d\n\n to2d (o)\n\n\nsource\n\n\nto3d\n\n to3d (o)\n\n\nsource\n\n\nto1darray\n\n to1darray (o)\n\n\nsource\n\n\nto2darray\n\n to2darray (o)\n\n\nsource\n\n\nto3darray\n\n to3darray (o)\n\n\nsource\n\n\nto1dtensor\n\n to1dtensor (o)\n\n\nsource\n\n\nto2dtensor\n\n to2dtensor (o)\n\n\nsource\n\n\nto3dtensor\n\n to3dtensor (o)\n\n\nsource\n\n\ntoL\n\n toL (o)\n\n\nsource\n\n\ntoarray\n\n toarray (o)\n\n\nsource\n\n\ntotensor\n\n totensor (o)\n\n\na = np.random.rand(100).astype(np.float32)\nb = torch.from_numpy(a).float()\ntest_eq(totensor(a), b)\ntest_eq(a, toarray(b))\ntest_eq(to3dtensor(a).ndim, 3)\ntest_eq(to2dtensor(a).ndim, 2)\ntest_eq(to1dtensor(a).ndim, 1)\ntest_eq(to3darray(b).ndim, 3)\ntest_eq(to2darray(b).ndim, 2)\ntest_eq(to1darray(b).ndim, 1)\n\n\ndata = np.random.rand(10, 20)\ndf = pd.DataFrame(data)\ndf['target'] = np.random.randint(0, 3, len(df))\nX = df[df.columns[:-1]]\ny = df['target']\ntest_eq(to3darray(X).shape, (10, 1, 20))\ntest_eq(toarray(y).shape, (10,))\n\n\nsource\n\n\nget_file_size\n\n get_file_size (file_path:str, return_str:bool=True, decimals:int=2)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nfile_path\nstr\n\npath to file\n\n\nreturn_str\nbool\nTrue\nTrue returns size in human-readable format (KB, MB, GB, …). False in bytes.\n\n\ndecimals\nint\n2\nNumber of decimals in the output\n\n\n\n\nsource\n\n\nget_dir_size\n\n get_dir_size (dir_path:str, return_str:bool=True, decimals:int=2,\n verbose:bool=False)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndir_path\nstr\n\npath to directory\n\n\nreturn_str\nbool\nTrue\nTrue returns size in human-readable format (KB, MB, GB, …). False in bytes.\n\n\ndecimals\nint\n2\nNumber of decimals in the output\n\n\nverbose\nbool\nFalse\nControls verbosity\n\n\n\n\nsource\n\n\nget_size\n\n get_size (o, return_str=False, decimals=2)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\no\n\n\nAny python object\n\n\nreturn_str\nbool\nFalse\nTrue returns size in human-readable format (KB, MB, GB, …). False in bytes.\n\n\ndecimals\nint\n2\nNumber of decimals in the output\n\n\n\n\nsource\n\n\nbytes2str\n\n bytes2str (size_bytes:int, decimals=2)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nsize_bytes\nint\n\nNumber of bytes\n\n\ndecimals\nint\n2\nNumber of decimals in the output\n\n\nReturns\nstr\n\n\n\n\n\n\na = np.random.rand(10, 5, 3)\ntest_eq(get_size(a, True, 1), '1.2 KB')\n\n\nsource\n\n\nis_np_view\n\n is_np_view (o)\n\n\n\n\n\nDetails\n\n\n\n\no\na numpy array\n\n\n\n\na = np.array([1., 2., 3.])\ntest_eq(is_np_view(a), False)\ntest_eq(is_np_view(a[1:]), True)\n\n\nsource\n\n\nis_dir\n\n is_dir (path)\n\n\nsource\n\n\nis_file\n\n is_file (path)\n\n\ntest_eq(is_file(\"002_utils.ipynb\"), True)\ntest_eq(is_file(\"utils.ipynb\"), False)\n\n\nsource\n\n\ndelete_all_in_dir\n\n delete_all_in_dir (tgt_dir, exception=None)\n\n\nsource\n\n\nreverse_dict\n\n reverse_dict (dictionary)\n\n\nsource\n\n\nis_tuple\n\n is_tuple (o)\n\n\nsource\n\n\nitemify\n\n itemify (*o, tup_id=None)\n\n\na = [1, 2, 3]\nb = [4, 5, 6]\nprint(itemify(a, b))\ntest_eq(len(itemify(a, b)), len(a))\na = [1, 2, 3]\nb = None\nprint(itemify(a, b))\ntest_eq(len(itemify(a, b)), len(a))\na = [1, 2, 3]\nb = [4, 5, 6]\nc = None\nprint(itemify(a, b, c))\ntest_eq(len(itemify(a, b, c)), len(a))\n\n[(1, 4), (2, 5), (3, 6)]\n[(1,), (2,), (3,)]\n[(1, 4), (2, 5), (3, 6)]\n\n\n\nsource\n\n\nifelse\n\n ifelse (a, b, c)\n\nb if a is True else c\n\nsource\n\n\nexists\n\n exists (o)\n\n\nsource\n\n\nisnone\n\n isnone (o)\n\n\na = np.array(3)\ntest_eq(isnone(a), False)\ntest_eq(exists(a), True)\nb = None\ntest_eq(isnone(b), True)\ntest_eq(exists(b), False)\n\n\nsource\n\n\ntest_eq_nan\n\n test_eq_nan (a, b)\n\ntest that a==b excluding nan values (valid for torch.Tensor and np.ndarray)\n\nsource\n\n\ntest_error\n\n test_error (error, f, *args, **kwargs)\n\n\nsource\n\n\ntest_not_ok\n\n test_not_ok (f, *args, **kwargs)\n\n\nsource\n\n\ntest_ok\n\n test_ok (f, *args, **kwargs)\n\n\nsource\n\n\ntest_type\n\n test_type (a, b)\n\n\nsource\n\n\ntest_not_close\n\n test_not_close (a, b, eps=1e-05)\n\ntest that a is within eps of b\n\nsource\n\n\nis_not_close\n\n is_not_close (a, b, eps=1e-05)\n\nIs a within eps of b\n\nsource\n\n\nassert_fn\n\n assert_fn (*args, **kwargs)\n\n\nsource\n\n\ntest_le\n\n test_le (a, b)\n\ntest that a>b\n\nsource\n\n\ntest_lt\n\n test_lt (a, b)\n\ntest that a>b\n\nsource\n\n\ntest_ge\n\n test_ge (a, b)\n\ntest that a>=b\n\nsource\n\n\ntest_gt\n\n test_gt (a, b)\n\ntest that a>b\n\ntest_ok(test_gt, 5, 4)\ntest_not_ok(test_gt, 4, 4)\ntest_ok(test_ge, 4, 4)\ntest_not_ok(test_ge, 3, 4)\n\ntest_ok(test_lt, 3, 4)\ntest_not_ok(test_lt, 4, 4)\ntest_ok(test_le, 4, 4)\ntest_not_ok(test_le, 5, 4)\n\n\nt = torch.rand(100)\ntest_eq(t, t)\ntest_eq_nan(t, t)\n\n\nsource\n\n\nstack_pad\n\n stack_pad (o, padding_value=nan)\n\nConverts a an iterable into a numpy array using padding if necessary\n\nsource\n\n\nstack\n\n stack (o, axis=0, retain=True)\n\n\no = [[0,1,2], [4,5,6,7]]\ntest_eq(stack_pad(o).shape, (1, 2, 4))\ntest_eq(type(stack_pad(o)), np.ndarray)\ntest_eq(np.isnan(stack_pad(o)).sum(), 1)\n\n\no = 3\nprint(stack_pad(o))\ntest_eq(stack_pad(o), np.array([[3.]]))\no = [4,5]\nprint(stack_pad(o))\ntest_eq(stack_pad(o), np.array([[4., 5.]]))\no = [[0,1,2], [4,5,6,7]]\nprint(stack_pad(o))\no = np.array([0, [1,2]], dtype=object)\nprint(stack_pad(o))\no = np.array([[[0], [10, 20], [100, 200, 300]], [[0, 1, 2, 3], [10, 20], [100]]], dtype=object)\nprint(stack_pad(o))\no = np.array([0, [10, 20]], dtype=object)\nprint(stack_pad(o))\n\n[[3.]]\n[[4. 5.]]\n[[[ 0. 1. 2. nan]\n [ 4. 5. 6. 7.]]]\n[[ 0. nan]\n [ 1. 2.]]\n[[[ 0. nan nan nan]\n [ 10. 20. nan nan]\n [100. 200. 300. nan]]\n\n [[ 0. 1. 2. 3.]\n [ 10. 20. nan nan]\n [100. nan nan nan]]]\n[[ 0. nan]\n [10. 20.]]\n\n\n\na = np.random.rand(2, 3, 4)\nt = torch.from_numpy(a)\ntest_eq_type(stack(itemify(a, tup_id=0)), a)\ntest_eq_type(stack(itemify(t, tup_id=0)), t)\n\n\nsource\n\n\npad_sequences\n\n pad_sequences (o, maxlen:int=None,\n dtype:(<class'str'>,<class'type'>)=<class\n 'numpy.float64'>, padding:str='pre', truncating:str='pre',\n padding_value:float=nan)\n\nTransforms an iterable with sequences into a 3d numpy array using padding or truncating sequences if necessary\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\no\n\n\nIterable object\n\n\nmaxlen\nint\nNone\nOptional max length of the output. If None, max length of the longest individual sequence.\n\n\ndtype\n(<class ‘str’>, <class ‘type’>)\nfloat64\nType of the output sequences. To pad sequences with variable length strings, you can use object.\n\n\npadding\nstr\npre\n‘pre’ or ‘post’ pad either before or after each sequence.\n\n\ntruncating\nstr\npre\n‘pre’ or ‘post’ remove values from sequences larger than maxlen, either at the beginning or at the end of the sequences.\n\n\npadding_value\nfloat\nnan\nValue used for padding.\n\n\n\nThis function transforms a list (of length n_samples) of sequences into a 3d numpy array of shape:\n [n_samples x n_vars x seq_len]\nseq_len is either the maxlen argument if provided, or the length of the longest sequence in the list.\nSequences that are shorter than seq_len are padded with value until they are seq_len long.\nSequences longer than seq_len are truncated so that they fit the desired length.\nThe position where padding or truncation happens is determined by the arguments padding and truncating, respectively. Pre-padding or removing values from the beginning of the sequence is the default.\nInput sequences to pad_sequences may be have 1, 2 or 3 dimensions:\n\n# 1 dim\na1 = np.arange(6)\na2 = np.arange(3) * 10\na3 = np.arange(2) * 100\no = [a1, a2, a3]\npadded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)\ntest_eq(padded_o.shape, (3, 1, 4))\npadded_o\n\narray([[[ 2., 3., 4., 5.]],\n\n [[ 0., 10., 20., nan]],\n\n [[ 0., 100., nan, nan]]])\n\n\n\n# 2 dim\na1 = np.arange(12).reshape(2, 6)\na2 = np.arange(6).reshape(2, 3) * 10\na3 = np.arange(4).reshape(2, 2) * 100\no = [a1, a2, a3]\npadded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)\ntest_eq(padded_o.shape, (3, 2, 4))\npadded_o\n\narray([[[ 2., 3., 4., 5.],\n [ 8., 9., 10., 11.]],\n\n [[ 0., 10., 20., nan],\n [ 30., 40., 50., nan]],\n\n [[ 0., 100., nan, nan],\n [200., 300., nan, nan]]])\n\n\n\n# 3 dim\na1 = np.arange(10).reshape(1, 2, 5)\na2 = np.arange(6).reshape(1, 2, 3) * 10\na3 = np.arange(4).reshape(1, 2, 2) * 100\no = [a1, a2, a3]\npadded_o = pad_sequences(o, maxlen=None, dtype=np.float64, padding='pre', truncating='pre', padding_value=np.nan)\ntest_eq(padded_o.shape, (3, 2, 5))\npadded_o\n\narray([[[ 0., 1., 2., 3., 4.],\n [ 5., 6., 7., 8., 9.]],\n\n [[ nan, nan, 0., 10., 20.],\n [ nan, nan, 30., 40., 50.]],\n\n [[ nan, nan, nan, 0., 100.],\n [ nan, nan, nan, 200., 300.]]])\n\n\n\n# 3 dim\na1 = np.arange(10).reshape(1, 2, 5)\na2 = np.arange(6).reshape(1, 2, 3) * 10\na3 = np.arange(4).reshape(1, 2, 2) * 100\no = [a1, a2, a3]\npadded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='pre', truncating='pre', padding_value=np.nan)\ntest_eq(padded_o.shape, (3, 2, 4))\npadded_o\n\narray([[[ 1., 2., 3., 4.],\n [ 6., 7., 8., 9.]],\n\n [[ nan, 0., 10., 20.],\n [ nan, 30., 40., 50.]],\n\n [[ nan, nan, 0., 100.],\n [ nan, nan, 200., 300.]]])\n\n\n\n# 3 dim\na1 = np.arange(10).reshape(1, 2, 5)\na2 = np.arange(6).reshape(1, 2, 3) * 10\na3 = np.arange(4).reshape(1, 2, 2) * 100\no = [a1, a2, a3]\npadded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)\ntest_eq(padded_o.shape, (3, 2, 4))\npadded_o\n\narray([[[ 1., 2., 3., 4.],\n [ 6., 7., 8., 9.]],\n\n [[ 0., 10., 20., nan],\n [ 30., 40., 50., nan]],\n\n [[ 0., 100., nan, nan],\n [200., 300., nan, nan]]])\n\n\n\n# 3 dim\na1 = np.arange(10).reshape(1, 2, 5)\na2 = np.arange(6).reshape(1, 2, 3) * 10\na3 = np.arange(4).reshape(1, 2, 2) * 100\no = [a1, a2, a3]\npadded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='post', padding_value=np.nan)\ntest_eq(padded_o.shape, (3, 2, 4))\npadded_o\n\narray([[[ 0., 1., 2., 3.],\n [ 5., 6., 7., 8.]],\n\n [[ 0., 10., 20., nan],\n [ 30., 40., 50., nan]],\n\n [[ 0., 100., nan, nan],\n [200., 300., nan, nan]]])\n\n\n\n# iterable is a list of lists\na1 = np.arange(12).reshape(1, 2, 6).tolist()\na2 = (np.arange(6).reshape(1, 2, 3) * 10).tolist()\na3 = (np.arange(4).reshape(1, 2, 2) * 100).tolist()\no = [a1, a2, a3]\npadded_o = pad_sequences(o, maxlen=None, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)\ntest_eq(padded_o.shape, (3, 2, 6))\npadded_o\n\narray([[[ 0., 1., 2., 3., 4., 5.],\n [ 6., 7., 8., 9., 10., 11.]],\n\n [[ 0., 10., 20., nan, nan, nan],\n [ 30., 40., 50., nan, nan, nan]],\n\n [[ 0., 100., nan, nan, nan, nan],\n [200., 300., nan, nan, nan, nan]]])\n\n\n\nsource\n\n\nmatch_seq_len\n\n match_seq_len (*arrays)\n\n\na = np.random.rand(10, 5, 8)\nb = np.random.rand(3, 5, 10)\nc, d = match_seq_len(a, b)\ntest_eq(c.shape[-1], d.shape[-1])\n\n\nsource\n\n\nrandom_shuffle\n\n random_shuffle (o, random_state=None)\n\n\na = np.arange(10)\ntest_eq_type(random_shuffle(a, 1), np.array([2, 9, 6, 4, 0, 3, 1, 7, 8, 5]))\nt = torch.arange(10)\ntest_eq_type(random_shuffle(t, 1), tensor([2, 9, 6, 4, 0, 3, 1, 7, 8, 5]))\nl = list(a)\ntest_eq(random_shuffle(l, 1), [2, 9, 6, 4, 0, 3, 1, 7, 8, 5])\nl2 = L(l)\ntest_eq_type(random_shuffle(l2, 1), L([2, 9, 6, 4, 0, 3, 1, 7, 8, 5]))\n\n\nsource\n\n\ncat2int\n\n cat2int (o)\n\n\na = np.array(['b', 'a', 'a', 'b', 'a', 'b', 'a'])\ntest_eq_type(cat2int(a), TensorCategory([1, 0, 0, 1, 0, 1, 0]))\n\n\nTensorBase([1,2,3])\n\nTensorBase([1, 2, 3])\n\n\n\nsource\n\n\ncycle_dl_estimate\n\n cycle_dl_estimate (dl, iters=10)\n\n\nsource\n\n\ncycle_dl_to_device\n\n cycle_dl_to_device (dl, show_progress_bar=True)\n\n\nsource\n\n\ncycle_dl\n\n cycle_dl (dl, show_progress_bar=True)\n\n\nsource\n\n\ncache_data\n\n cache_data (o, slice_len=10000, verbose=False)\n\n\nsource\n\n\nget_func_defaults\n\n get_func_defaults (f)\n\n\nsource\n\n\nget_idx_from_df_col_vals\n\n get_idx_from_df_col_vals (df, col, val_list)\n\n\nsource\n\n\nget_sublist_idxs\n\n get_sublist_idxs (aList, bList)\n\nGet idxs that when applied to aList will return bList. aList must contain all values in bList\n\nx = np.array([3, 5, 7, 1, 9, 8, 6, 2])\ny = np.array([6, 1, 5, 7])\nidx = get_sublist_idxs(x, y)\ntest_eq(x[idx], y)\nx = np.array([3, 5, 7, 1, 9, 8, 6, 6, 2])\ny = np.array([6, 1, 5, 7, 5])\nidx = get_sublist_idxs(x, y)\ntest_eq(x[idx], y)\n\n\nsource\n\n\nflatten_list\n\n flatten_list (l)\n\n\nsource\n\n\ndisplay_pd_df\n\n display_pd_df (df, max_rows:Union[bool,int]=False,\n max_columns:Union[bool,int]=False)\n\n\nold_max_rows, old_max_columns = pd.get_option('display.max_rows'), pd.get_option('display.max_columns')\ndf = pd.DataFrame(np.random.rand(70, 25))\ndisplay_pd_df(df, max_rows=2, max_columns=3)\ntest_eq(old_max_rows, pd.get_option('display.max_rows'))\ntest_eq(old_max_columns, pd.get_option('display.max_columns'))\n\n\n\n\n\n\n\n\n0\n...\n24\n\n\n\n\n0\n0.436034\n...\n0.231616\n\n\n...\n...\n...\n...\n\n\n69\n0.633051\n...\n0.051762\n\n\n\n\n70 rows × 25 columns\n\n\n\n\nsource\n\n\ntscore\n\n tscore (o)\n\n\nsource\n\n\nkstest\n\n kstest (data1, data2, alternative='two-sided', mode='auto', by_axis=None)\n\nPerforms the two-sample Kolmogorov-Smirnov test for goodness of fit.\nParameters data1, data2: Two arrays of sample observations assumed to be drawn from a continuous distributions. Sample sizes can be different. alternative: {‘two-sided’, ‘less’, ‘greater’}, optional. Defines the null and alternative hypotheses. Default is ‘two-sided’. mode: {‘auto’, ‘exact’, ‘asymp’}, optional. Defines the method used for calculating the p-value. by_axis (optional, int): for arrays with more than 1 dimension, the test will be run for each variable in that axis if by_axis is not None.\n\nsource\n\n\nttest\n\n ttest (data1, data2, equal_var=False)\n\nCalculates t-statistic and p-value based on 2 sample distributions\n\na = np.random.normal(0.5, 1, 100)\nb = np.random.normal(0.15, .5, 50)\nplt.hist(a, 50)\nplt.hist(b, 50)\nplt.show()\nttest(a,b)\n\n\n\n\n\n\n\n\n\na = np.random.normal(0.5, 1, (100,3))\nb = np.random.normal(0.5, 1, (50,))\nkstest(a,b)\n\n(0.22333333333333333, 0.02452803315700394)\n\n\n\na = np.random.normal(0.5, 1, (100,3))\nb = np.random.normal(0.15, .5, (50,))\nkstest(a,b)\n\n(0.31, 0.0004061333917852463)\n\n\n\ndata1 = np.random.normal(0,1,(100, 5, 3))\ndata2 = np.random.normal(0,2,(100, 5, 3))\nkstest(data1, data2, by_axis=1)\n\n([0.22,\n 0.16333333333333333,\n 0.16333333333333333,\n 0.18666666666666668,\n 0.21666666666666667],\n [8.994053173844458e-07,\n 0.0006538374533623971,\n 0.0006538374533623971,\n 5.522790313356146e-05,\n 1.4007759411179028e-06])\n\n\n\na = np.random.normal(0.5, 1, 100)\nt = torch.normal(0.5, 1, (100, ))\ntscore(a), tscore(t)\n\n(4.33309224863388, tensor(5.7798))\n\n\n\nsource\n\n\nscc\n\n scc (a, b)\n\n\nsource\n\n\npcc\n\n pcc (a, b)\n\n\nsource\n\n\nremove_fn\n\n remove_fn (fn, verbose=False)\n\nRemoves a file (fn) if exists\n\nsource\n\n\nnpsave\n\n npsave (array_fn, array, verbose=True)\n\n\nfn = 'data/remove_fn_test.npy'\na = np.zeros(1)\nnpsave(fn, a)\ndel a\nnp.load(fn, mmap_mode='r+')\nremove_fn(fn, True)\nremove_fn(fn, True)\n\ndata/remove_fn_test.npy does not exist\nsaving data/remove_fn_test.npy...\n...data/remove_fn_test.npy saved\ndata/remove_fn_test.npy file removed\ndata/remove_fn_test.npy does not exist\n\n\n\nsource\n\n\npermute_2D\n\n permute_2D (array, axis=None)\n\nPermute rows or columns in an array. This can be used, for example, in feature permutation\n\ns = np.arange(100 * 50).reshape(100, 50)\ntest_eq(permute_2D(s, axis=0).mean(0), s.mean(0))\ntest_ne(permute_2D(s, axis=0), s)\ntest_eq(permute_2D(s, axis=1).mean(1), s.mean(1))\ntest_ne(permute_2D(s, axis=1), s)\ntest_ne(permute_2D(s), s)\n\n\nsource\n\n\nrandom_half_normal_tensor\n\n random_half_normal_tensor (shape=1, device=None)\n\nReturns a tensor of a predefined shape between 0 and 1 with a half-normal distribution\n\nsource\n\n\nrandom_normal_tensor\n\n random_normal_tensor (shape=1, device=None)\n\nReturns a tensor of a predefined shape between -1 and 1 with a normal distribution\n\nsource\n\n\nrandom_half_normal\n\n random_half_normal ()\n\nReturns a number between 0 and 1 with a half-normal distribution\n\nsource\n\n\nrandom_normal\n\n random_normal ()\n\nReturns a number between -1 and 1 with a normal distribution\n\nsource\n\n\nfig2buf\n\n fig2buf (fig)\n\n\nsource\n\n\nget_plot_fig\n\n get_plot_fig (size=None, dpi=100)\n\n\nsource\n\n\ndefault_dpi\n\n default_dpi ()\n\n\ndefault_dpi()\n\n100\n\n\n\nsource\n\n\nplot_scatter\n\n plot_scatter (x, y, deg=1)\n\n\na = np.random.rand(100)\nb = np.random.rand(100)**2\nplot_scatter(a, b)\n\n\n\n\n\n\n\n\n\nsource\n\n\nget_idxs\n\n get_idxs (o, aList)\n\n\na = random_shuffle(np.arange(100, 200))\nb = np.random.choice(a, 10, False)\nidxs = get_idxs(a, b)\ntest_eq(a[idxs], b)\n\n\nsource\n\n\napply_cmap\n\n apply_cmap (o, cmap)\n\n\na = np.random.rand(16, 1, 40, 50)\ns = L(a.shape)\ns[1] = 3\ntest_eq(L(apply_cmap(a, 'viridis').shape), s)\n\ns[0] = 1\na = np.random.rand(1, 40, 50)\ntest_eq(L(apply_cmap(a, 'viridis').shape), s)\n\n\nsource\n\n\ntorch_tile\n\n torch_tile (a, n_tile, dim=0)\n\n\ntest_eq(torch_tile(torch.arange(2), 3), tensor([0, 1, 0, 1, 0, 1]))\n\n\nsource\n\n\nto_tsfresh_df\n\n to_tsfresh_df (ts)\n\nPrepares a time series (Tensor/ np.ndarray) to be used as a tsfresh dataset to allow feature extraction\n\nts = torch.rand(16, 3, 20)\na = to_tsfresh_df(ts)\nts = ts.numpy()\nb = to_tsfresh_df(ts)\n\n\nsource\n\n\nscorr\n\n scorr (a, b)\n\n\nsource\n\n\npcorr\n\n pcorr (a, b)\n\n\nsource\n\n\ntorch_diff\n\n torch_diff (t, lag=1, pad=True, append=0)\n\n\nt = torch.arange(24).reshape(2,3,4)\ntest_eq(torch_diff(t, 1)[..., 1:].float().mean(), 1.)\ntest_eq(torch_diff(t, 2)[..., 2:].float().mean(), 2.)\n\n\nsource\n\n\ntorch_clamp\n\n torch_clamp (o, min=None, max=None)\n\nClamp torch.Tensor using 1 or multiple dimensions\n\nsource\n\n\nget_percentile\n\n get_percentile (o, percentile, axis=None)\n\n\nsource\n\n\nclip_outliers\n\n clip_outliers (o, axis=None)\n\n\nsource\n\n\nget_outliers_IQR\n\n get_outliers_IQR (o, axis=None, quantile_range=(25.0, 75.0))\n\n\nt = torch.randn(2,3,100)\ntest_eq(type(get_outliers_IQR(t, -1)[0]), torch.Tensor)\na = t.numpy()\ntest_eq(type(get_outliers_IQR(a, -1)[0]), np.ndarray)\ntest_close(get_percentile(t, 25).numpy(), get_percentile(a, 25))\n\n\nsource\n\n\nget_robustscale_params\n\n get_robustscale_params (o, sel_vars=None, not_sel_vars=None, by_var=True,\n percentiles=(25, 75), eps=1e-06)\n\nCalculates median and inter-quartile range required to robust scaler inputs\n\na = np.random.rand(16, 3, 100)\na[a>.8] = np.nan\nmedian, IQR = get_robustscale_params(a, by_var=True, percentiles=(25, 75))\na_scaled = (a - median) / IQR\ntest_eq(a.shape, a_scaled.shape)\ntest_eq(np.isnan(median).sum(),0)\ntest_eq(np.isnan(IQR).sum(),0)\ntest_eq(np.isnan(a), np.isnan(a_scaled))\n\n\nsource\n\n\ntorch_slice_by_dim\n\n torch_slice_by_dim (t, index, dim=-1, **kwargs)\n\n\nt = torch.rand(5, 3)\nindex = torch.randint(0, 3, (5, 1))\n# index = [[0, 2], [0, 1], [1, 2], [0, 2], [0, 1]]\ntorch_slice_by_dim(t, index)\n\ntensor([[0.5341],\n [0.4543],\n [0.0942],\n [0.9645],\n [0.0405]])\n\n\n\nsource\n\n\ntorch_nanstd\n\n torch_nanstd (o, dim=None, keepdim=False)\n\nThere’s currently no torch.nanstd function\n\nsource\n\n\ntorch_nanmean\n\n torch_nanmean (o, dim=None, keepdim=False)\n\nThere’s currently no torch.nanmean function\n\nt = torch.rand(1000)\nt[:100] = float('nan')\nassert torch_nanmean(t).item() > 0\n\n\nsource\n\n\nconcat\n\n concat (*ls, dim=0)\n\nConcatenate tensors, arrays, lists, or tuples by a dimension\n\nsource\n\n\nreduce_memory_usage\n\n reduce_memory_usage (df)\n\n\nsource\n\n\ncls_name\n\n cls_name (o)\n\n\ntest_eq(cls_name(timer), 'Timer')\n\n\nsource\n\n\nrotate_axis2\n\n rotate_axis2 (o, steps=1)\n\n\nsource\n\n\nrotate_axis1\n\n rotate_axis1 (o, steps=1)\n\n\nsource\n\n\nrotate_axis0\n\n rotate_axis0 (o, steps=1)\n\n\nsource\n\n\nrandom_roll3d\n\n random_roll3d (o, axis=(), replace=False)\n\nRandomly rolls a 3D object along the indicated axes This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently\n\nsource\n\n\nrandom_roll2d\n\n random_roll2d (o, axis=(), replace=False)\n\nRolls a 2D object on the indicated axis This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently\n\nsource\n\n\nroll3d\n\n roll3d (o, roll1:Union[NoneType,list,int]=None,\n roll2:Union[NoneType,list,int]=None,\n roll3:Union[NoneType,list,int]=None)\n\nRolls a 3D object on the indicated axis This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently\n\nsource\n\n\nroll2d\n\n roll2d (o, roll1:Union[NoneType,list,int]=None,\n roll2:Union[NoneType,list,int]=None)\n\nRolls a 2D object on the indicated axis This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently\n\na = np.tile(np.arange(10), 3).reshape(3, 10) * np.array([1, 10, 100]).reshape(-1, 1)\na\n\narray([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n [ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90],\n [ 0, 100, 200, 300, 400, 500, 600, 700, 800, 900]])\n\n\n\nroll2d(a, roll1=[2, 1, 0])\n\narray([[ 0, 100, 200, 300, 400, 500, 600, 700, 800, 900],\n [ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90],\n [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])\n\n\n\nroll2d(a, roll2=3)\n\narray([[ 7, 8, 9, 0, 1, 2, 3, 4, 5, 6],\n [ 70, 80, 90, 0, 10, 20, 30, 40, 50, 60],\n [700, 800, 900, 0, 100, 200, 300, 400, 500, 600]])\n\n\n\no = torch.arange(24).reshape(2,3,4)\ntest_eq(rotate_axis0(o)[1], o[0])\ntest_eq(rotate_axis1(o)[:,1], o[:,0])\ntest_eq(rotate_axis2(o)[...,1], o[...,0])\n\n\nsource\n\n\nchunks_calculator\n\n chunks_calculator (shape, dtype='float32', n_bytes=1073741824)\n\nFunction to calculate chunks for a given size of n_bytes (default = 1024**3 == 1GB). It guarantees > 50% of the chunk will be filled\n\nshape = (1_000, 10, 1000)\ndtype = 'float32'\ntest_eq(chunks_calculator(shape, dtype), False)\n\nshape = (54684, 10, 1000)\ndtype = 'float32'\ntest_eq(chunks_calculator(shape, dtype), (27342, -1, -1))\n\n\nsource\n\n\nis_memory_shared\n\n is_memory_shared (a, b)\n\nCheck if 2 array-like objects share memory\n\na = np.random.rand(2,3,4)\nt1 = torch.from_numpy(a)\ntest_eq(is_memory_shared(a, t1), True)\na = np.random.rand(2,3,4)\nt2 = torch.as_tensor(a)\ntest_eq(is_memory_shared(a, t2), True)\na = np.random.rand(2,3,4)\nt3 = torch.tensor(a)\ntest_eq(is_memory_shared(a, t3), False)\n\n\nsource\n\n\nassign_in_chunks\n\n assign_in_chunks (a, b, chunksize='auto', inplace=True, verbose=True)\n\nAssigns values in b to an array-like object a using chunks to avoid memory overload. The resulting a retains it’s dtype and share it’s memory. a: array-like object b: may be an integer, float, str, ‘rand’ (for random data), or another array like object. chunksize: is the size of chunks. If ‘auto’ chunks will have around 1GB each.\n\na = np.random.rand(10,3,4).astype('float32')\na_dtype = a.dtype\na_id = id(a)\nb = np.random.rand(10,3,4).astype('float64')\nassign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)\ntest_close(a, b)\ntest_eq(a.dtype, a_dtype)\ntest_eq(id(a), a_id)\n\na = np.random.rand(10,3,4).astype('float32')\na_dtype = a.dtype\na_id = id(a)\nb = 1\nassign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)\ntest_eq(a, np.ones_like(a).astype(a.dtype))\ntest_eq(a.dtype, a_dtype)\ntest_eq(id(a), a_id)\n\na = np.random.rand(10,3,4).astype('float32')\na_dtype = a.dtype\na_id = id(a)\nb = 0.5\nassign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)\ntest_eq(a.dtype, a_dtype)\ntest_eq(id(a), a_id)\n\na = np.random.rand(10,3,4).astype('float32')\na_dtype = a.dtype\na_id = id(a)\nb = 'rand'\nassign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)\ntest_eq(a.dtype, a_dtype)\ntest_eq(id(a), a_id)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\na = np.random.rand(10,3,4).astype('float32')\nb = np.random.rand(10,3,4).astype('float64')\nc = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)\ntest_close(c, b)\ntest_eq(a.dtype, c.dtype)\ntest_eq(is_memory_shared(a, c), True)\n\na = np.random.rand(10,3,4).astype('float32')\nb = 1\nc = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)\ntest_eq(a, np.ones_like(a).astype(a.dtype))\ntest_eq(a.dtype, c.dtype)\ntest_eq(is_memory_shared(a, c), True)\n\na = np.random.rand(10,3,4).astype('float32')\nb = 0.5\nc = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)\ntest_eq(a.dtype, c.dtype)\ntest_eq(is_memory_shared(a, c), True)\n\na = np.random.rand(10,3,4).astype('float32')\nb = 'rand'\nc = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)\ntest_eq(a.dtype, c.dtype)\ntest_eq(is_memory_shared(a, c), True)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nsource\n\n\ncreate_array\n\n create_array (shape, fname=None, path='./data', on_disk=True,\n dtype='float32', mode='r+', fill_value='rand',\n chunksize='auto', verbose=True, **kwargs)\n\nmode: ‘r’: Open existing file for reading only. ‘r+’: Open existing file for reading and writing. ‘w+’: Create or overwrite existing file for reading and writing. ‘c’: Copy-on-write: assignments affect data in memory, but changes are not saved to disk. The file on disk is read-only. fill_value: ‘rand’ (for random numbers), int or float chunksize = ‘auto’ to calculate chunks of 1GB, or any integer (for a given number of samples)\n\nfname = 'X_on_disk'\nshape = (100, 10, 10)\nX = create_array(shape, fname, on_disk=True, mode='r+')\ntest_ne(abs(X).sum(), 0)\nos.remove(X.filename)\ndel X\n\nauto chunksize: 100\n\n\n\n\n\n\n\n\n\n\nfname = 'X_on_disk'\nshape = (100, 10, 10)\nX = create_empty_array(shape, fname, on_disk=True, mode='r+')\ntest_eq(abs(X).sum(), 0)\n\nchunksize = 10\npbar = progress_bar(range(math.ceil(len(X) / chunksize)), leave=False)\nstart = 0\nfor i in pbar:\n end = min(start + chunksize, len(X))\n partial_data = np.random.rand(end - start, X.shape[1] , X.shape[2])\n X[start:end] = partial_data\n start = end\n del partial_data\n gc.collect()\nfilename = X.filename\ndel X\nX = np.load(filename, mmap_mode='r+')\ntest_eq((X == 0).sum(), 0)\ntest_eq(X.shape, shape)\nos.remove(X.filename)\ndel X\n\n\n\n\n\n\n\n\n\nsource\n\n\nnp_load_compressed\n\n np_load_compressed (fname=None, path='./data', **kwargs)\n\n\nsource\n\n\nnp_save_compressed\n\n np_save_compressed (arr, fname=None, path='./data', verbose=False,\n **kwargs)\n\n\nX1 = np.random.rand(10)\nnp_save_compressed(X1, 'X_comp', path='./data')\nX2 = np_load_compressed('X_comp')\ntest_eq(X1, X2)\n\n\nsource\n\n\nnp2memmap\n\n np2memmap (arr, fname=None, path='./data', dtype='float32', mode='c',\n **kwargs)\n\nFunction that turns an ndarray into a memmap ndarray mode: ‘r’: Open existing file for reading only. ‘r+’: Open existing file for reading and writing. ‘w+’: Create or overwrite existing file for reading and writing. ‘c’: Copy-on-write: assignments affect data in memory, but changes are not saved to disk. The file on disk is read-only.\n\nX1 = np.random.rand(10)\nX2 = np2memmap(X1, 'X1_test')\ntest_eq(X1, X2)\ntest_ne(type(X1), type(X2))\n\n\nsource\n\n\ntorch_mean_groupby\n\n torch_mean_groupby (o, idxs)\n\nComputes torch mean along axis 0 grouped by the idxs. Need to ensure that idxs have the same order as o\n\no = torch.arange(6*2*3).reshape(6, 2, 3).float()\nidxs = np.array([[0,1,2,3], [2,3]], dtype=object)\noutput = torch_mean_groupby(o, idxs)\ntest_eq(o[:2], output[:2])\ntest_eq(o[2:4].mean(0), output[2])\ntest_eq(o[4:6].mean(0), output[3])\n\n\nsource\n\n\ntorch_flip\n\n torch_flip (t, dims=-1)\n\n\nt = torch.randn(2, 3, 4)\ntest_eq(torch.flip(t, (2,)), torch_flip(t, dims=-1))\n\n\nsource\n\n\ntorch_masked_to_num\n\n torch_masked_to_num (o, mask, num=0, inplace=False)\n\n\nsource\n\n\ntorch_nan_to_num\n\n torch_nan_to_num (o, num=0, inplace=False)\n\n\nx = torch.rand(2, 4, 6)\nx[:, :3][x[:, :3] < .5] = np.nan\nnan_values = torch.isnan(x).sum()\ny = torch_nan_to_num(x[:, :3], inplace=False)\ntest_eq(torch.isnan(y).sum(), 0)\ntest_eq(torch.isnan(x).sum(), nan_values)\ntorch_nan_to_num(x[:, :3], inplace=True)\ntest_eq(torch.isnan(x).sum(), 0)\n\n\nx = torch.rand(2, 4, 6)\nmask = x[:, :3] > .5\nx[:, :3] = torch_masked_to_num(x[:, :3], mask, num=0, inplace=False)\ntest_eq(x[:, :3][mask].sum(), 0)\n\n\nx = torch.rand(2, 4, 6)\nmask = x[:, :3] > .5\ntorch_masked_to_num(x[:, :3], mask, num=0, inplace=True)\ntest_eq(x[:, :3][mask].sum(), 0)\n\n\nsource\n\n\nmpl_trend\n\n mpl_trend (x, y, deg=1)\n\n\nx = np.sort(np.random.randint(0, 100, 100)/10)\ny = np.random.rand(100) + np.linspace(0, 10, 100)\ntrend = mpl_trend(x, y)\nplt.scatter(x, y)\nplt.plot(x, trend, 'r')\nplt.show()\n\n\n\n\n\n\n\n\n\nsource\n\n\narray2digits\n\n array2digits (o, n_digits=None, normalize=True)\n\n\nsource\n\n\nint2digits\n\n int2digits (o, n_digits=None, normalize=True)\n\n\no = -9645\ntest_eq(int2digits(o, 6), np.array([ 0, 0, -.9, -.6, -.4, -.5]))\n\na = np.random.randint(-1000, 1000, 10)\ntest_eq(array2digits(a,5).shape, (10,5))\n\n\nsource\n\n\nsincos_encoding\n\n sincos_encoding (seq_len, device=None, to_np=False)\n\n\nsin, cos = sincos_encoding(100)\nplt.plot(sin.cpu().numpy())\nplt.plot(cos.cpu().numpy())\nplt.show()\n\n\n\n\n\n\n\n\n\nsource\n\n\nlinear_encoding\n\n linear_encoding (seq_len, device=None, to_np=False, lin_range=(-1, 1))\n\n\nlin = linear_encoding(100)\nplt.plot(lin.cpu().numpy())\nplt.show()\n\n\n\n\n\n\n\n\n\nsource\n\n\nencode_positions\n\n encode_positions (pos_arr, min_val=None, max_val=None, linear=False,\n lin_range=(-1, 1))\n\nEncodes an array with positions using a linear or sincos methods\n\nn_samples = 10\nlength = 500\n_a = []\nfor i in range(n_samples):\n a = np.arange(-4000, 4000, 10)\n mask = np.random.rand(len(a)) > .5\n a = a[mask]\n a = np.concatenate([a, np.array([np.nan] * (length - len(a)))])\n _a.append(a.reshape(-1,1))\na = np.concatenate(_a, -1).transpose(1,0)\nsin, cos = encode_positions(a, linear=False)\ntest_eq(a.shape, (n_samples, length))\ntest_eq(sin.shape, (n_samples, length))\ntest_eq(cos.shape, (n_samples, length))\nplt.plot(sin.T)\nplt.plot(cos.T)\nplt.xlim(0, 500)\nplt.show()\n\n\n\n\n\n\n\n\n\nn_samples = 10\nlength = 500\n_a = []\nfor i in range(n_samples):\n a = np.arange(-4000, 4000, 10)\n mask = np.random.rand(len(a)) > .5\n a = a[mask]\n a = np.concatenate([a, np.array([np.nan] * (length - len(a)))])\n _a.append(a.reshape(-1,1))\na = np.concatenate(_a, -1).transpose(1,0)\nlin = encode_positions(a, linear=True)\ntest_eq(a.shape, (n_samples, length))\ntest_eq(lin.shape, (n_samples, length))\nplt.plot(lin.T)\nplt.xlim(0, 500)\nplt.show()\n\n\n\n\n\n\n\n\n\nsource\n\n\nsort_generator\n\n sort_generator (generator, bs)\n\n\ngenerator = (i for i in np.random.permutation(np.arange(1000000)).tolist())\nl = list(sort_generator(generator, 512))\ntest_eq(l[:512], sorted(l[:512]))\n\n\nsource\n\n\nget_subset_dict\n\n get_subset_dict (d, keys)\n\n\nkeys = string.ascii_lowercase\nvalues = np.arange(len(keys))\nd = {k:v for k,v in zip(keys,values)}\ntest_eq(get_subset_dict(d, ['a', 'k', 'j', 'e']), {'a': 0, 'k': 10, 'j': 9, 'e': 4})\n\n\nsource\n\n\nremove_dir\n\n remove_dir (directory, verbose=True)\n\n\nsource\n\n\ncreate_dir\n\n create_dir (directory, verbose=True)\n\n\npath = \"wandb3/wandb2/wandb\"\ncreate_dir(path)\nassert Path(path).exists()\n\npaths = [\"wandb3/wandb2/wandb\", \"wandb3/wandb2\", \"wandb\"]\nremove_dir(paths)\nfor p in paths:\n assert not Path(p).exists()\n\npath = \"wandb3\"\nassert Path(path).exists()\nremove_dir(path)\nassert not Path(path).exists()\n\nwandb3/wandb2/wandb directory created.\nwandb3/wandb2/wandb directory removed.\nwandb3/wandb2 directory removed.\nwandb directory doesn't exist.\nwandb3 directory removed.\n\n\n\ncreate_dir('./test')\n\ntest directory created.\n\n\n\na = 5\ndef fn(b): return a + b\n\nWriting ./test/mod_dev.py\n\n\n\nfname = \"./test/mod_dev.py\"\nwhile True:\n if fname[0] in \"/ .\": fname = fname.split(fname[0], 1)[1]\n else: break\nif '/' in fname and fname.rsplit('/', 1)[0] not in sys.path: sys.path.append(fname.rsplit('/', 1)[0])\nmod = import_file_as_module(fname)\ntest_eq(mod.fn(3), 8)\nsys.path = sys.path[:-1]\nremove_dir('./test/')\n\ntest directory removed.\n\n\n\nsource\n\n\nnamed_partial\n\n named_partial (name, func, *args, **kwargs)\n\nCreate a partial function with a name\n\ndef add_1(x, add=1): return x+add\ntest_eq(add_1(1), 2)\nadd_2 = partial(add_1, add=2)\ntest_eq(add_2(2), 4)\ntest_ne(str(add_2), \"add_2\")\nadd_2 = named_partial('add_2', add_1, add=2)\ntest_eq(add_2(2), 4)\ntest_eq(str(add_2), \"add_2\")\n\nclass _A():\n def __init__(self, add=1): self.add = add\n def __call__(self, x): return x + self.add\n\ntest_eq(_A()(1), 2)\n_A2 = partial(_A, add=2)\ntest_eq(_A2()(1), 3)\ntest_ne(str(_A2), '_A2')\n_A2 = named_partial('_A2', _A, add=2)\ntest_eq(_A2()(1), 3)\ntest_eq(str(_A2), '_A2')\n\n\nsource\n\n\ndict2attrdict\n\n dict2attrdict (d:dict)\n\nConverts a (nested) dict to an AttrDict.\n\n\n\n\nType\nDetails\n\n\n\n\nd\ndict\na dict\n\n\n\n\nsource\n\n\nattrdict2dict\n\n attrdict2dict (d:dict)\n\nConverts a (nested) AttrDict dict to a dict.\n\n\n\n\nType\nDetails\n\n\n\n\nd\ndict\na dict\n\n\n\n\n# Test attrdict2dict\nd = AttrDict({'a': 1, 'b': AttrDict({'c': 2, 'd': 3})})\ntest_eq(attrdict2dict(d), {'a': 1, 'b': {'c': 2, 'd': 3}})\n# Test dict2attrdict\nd = {'a': 1, 'b': {'c': 2, 'd': 3}}\ntest_eq(dict2attrdict(d), AttrDict({'a': 1, 'b': AttrDict({'c': 2, 'd': 3})}))\n\n\nsource\n\n\nget_config\n\n get_config (file_path)\n\nGets a config from a yaml file.\n\nsource\n\n\nyaml2dict\n\n yaml2dict (file_path, attrdict=True)\n\nConverts a yaml file to a dict (optionally AttrDict).\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nfile_path\n\n\na path to a yaml file\n\n\nattrdict\nbool\nTrue\nif True, convert output to AttrDict\n\n\n\n\nsource\n\n\ndict2yaml\n\n dict2yaml (d, file_path, sort_keys=False)\n\nConverts a dict to a yaml file.\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nd\n\n\na dict\n\n\nfile_path\n\n\na path to a yaml file\n\n\nsort_keys\nbool\nFalse\nif True, sort the keys\n\n\n\n\nprogram: wandb_scripts/train_script.py # (required) Path to training script.\nmethod: bayes # (required) Specify the search strategy: grid, random or bayes\nparameters: # (required) Specify parameters bounds to search.\n bs:\n values: [32, 64, 128]\n depth:\n values: [3, 6, 9, 12]\n fc_dropout:\n distribution: uniform\n min: 0.\n max: 0.5\n lr_max:\n values: [0.001, 0.003, 0.01, 0.03, 0.1]\n n_epoch:\n values: [10, 15, 20]\n nb_filters:\n values: [32, 64, 128]\nname: LSST_sweep_01\nmetric:\n name: accuracy # This must match one of the metrics in the training script\n goal: maximize\nearly_terminate:\n type: hyperband\n min_iter: 3\nproject: LSST_wandb_hpo\n\nWriting sweep_config.yaml\n\n\n\nfname = \"sweep_config.yaml\"\nsweep_config = yaml2dict(fname)\nprint(sweep_config)\ntest_eq(sweep_config.method, 'bayes')\ntest_eq(sweep_config['metric'], {'name': 'accuracy', 'goal': 'maximize'})\nos.remove(fname)\n\n{'program': 'wandb_scripts/train_script.py', 'method': 'bayes', 'parameters': {'bs': {'values': [32, 64, 128]}, 'depth': {'values': [3, 6, 9, 12]}, 'fc_dropout': {'distribution': 'uniform', 'min': 0.0, 'max': 0.5}, 'lr_max': {'values': [0.001, 0.003, 0.01, 0.03, 0.1]}, 'n_epoch': {'values': [10, 15, 20]}, 'nb_filters': {'values': [32, 64, 128]}}, 'name': 'LSST_sweep_01', 'metric': {'name': 'accuracy', 'goal': 'maximize'}, 'early_terminate': {'type': 'hyperband', 'min_iter': 3}, 'project': 'LSST_wandb_hpo'}\n\n\n\nsource\n\n\nget_cat_cols\n\n get_cat_cols (df)\n\n\nsource\n\n\nget_cont_cols\n\n get_cont_cols (df)\n\n\nsource\n\n\nstr2index\n\n str2index (o)\n\n\nsource\n\n\nstr2list\n\n str2list (o)\n\n\nsource\n\n\nmap_array\n\n map_array (arr, dim=1)\n\n\nsource\n\n\nget_mapping\n\n get_mapping (arr, dim=1, return_counts=False)\n\n\na = np.asarray(alphabet[np.random.randint(0,15,30)]).reshape(10,3)\nb = np.asarray(ALPHABET[np.random.randint(6,10,30)]).reshape(10,3)\nx = concat(a,b,dim=1)\nmaps, counts = get_mapping(x, dim=1, return_counts=True)\nx, maps, counts\n\n(array([['d', 'k', 'l', 'I', 'I', 'G'],\n ['g', 'i', 'l', 'I', 'J', 'I'],\n ['e', 'l', 'n', 'G', 'H', 'I'],\n ['e', 'l', 'a', 'I', 'H', 'G'],\n ['k', 'l', 'b', 'I', 'I', 'J'],\n ['c', 'f', 'k', 'I', 'H', 'I'],\n ['e', 'j', 'f', 'I', 'H', 'J'],\n ['n', 'd', 'g', 'G', 'J', 'J'],\n ['d', 'f', 'a', 'I', 'H', 'H'],\n ['i', 'c', 'm', 'J', 'G', 'G']], dtype='<U1'),\n [(#7) ['c','d','e','g','i','k','n'],\n (#7) ['c','d','f','i','j','k','l'],\n (#8) ['a','b','f','g','k','l','m','n'],\n (#3) ['G','I','J'],\n (#4) ['G','H','I','J'],\n (#4) ['G','H','I','J']],\n [7, 7, 8, 3, 4, 4])\n\n\n\nx = np.asarray(alphabet[np.random.randint(0,15,30)]).reshape(10,3)\nx, map_array(x), map_array(x, 1)\n\n(array([['i', 'm', 'd'],\n ['h', 'm', 'g'],\n ['i', 'g', 'd'],\n ['k', 'm', 'n'],\n ['n', 'j', 'l'],\n ['n', 'l', 'i'],\n ['f', 'c', 'k'],\n ['i', 'm', 'a'],\n ['l', 'i', 'f'],\n ['k', 'o', 'g']], dtype='<U1'),\n array([[2, 5, 1],\n [1, 5, 3],\n [2, 1, 1],\n [3, 5, 7],\n [5, 3, 6],\n [5, 4, 4],\n [0, 0, 5],\n [2, 5, 0],\n [4, 2, 2],\n [3, 6, 3]]),\n array([[2, 5, 1],\n [1, 5, 3],\n [2, 1, 1],\n [3, 5, 7],\n [5, 3, 6],\n [5, 4, 4],\n [0, 0, 5],\n [2, 5, 0],\n [4, 2, 2],\n [3, 6, 3]]))\n\n\n\nsource\n\n\nlog_tfm\n\n log_tfm (o, inplace=False)\n\nLog transforms an array-like object with positive and/or negative values\n\narr = np.asarray([-1000, -100, -10, -1, 0, 1, 10, 100, 1000]).astype(float)\nplt.plot(arr, log_tfm(arr, False))\nplt.show()\n\n\n\n\n\n\n\n\n\nt = tensor([-1000, -100, -10, -1, 0, 1, 10, 100, 1000]).float()\nplt.plot(t, log_tfm(t, False))\nplt.show()\n\n\n\n\n\n\n\n\n\nsource\n\n\nto_sincos_time\n\n to_sincos_time (arr, max_value)\n\n\narr = np.sort(np.random.rand(100) * 5)\narr_sin, arr_cos = to_sincos_time(arr, 5)\nplt.scatter(arr, arr_sin)\nplt.scatter(arr, arr_cos)\nplt.show()\n\n\n\n\n\n\n\n\n\nsource\n\n\nplot_feature_dist\n\n plot_feature_dist (X, percentiles=[0, 0.1, 0.5, 1, 5, 10, 25, 50, 75, 90,\n 95, 99, 99.5, 99.9, 100])\n\n\narr = np.random.rand(10, 3, 100)\nplot_feature_dist(arr, percentiles=[0,0.1,0.5,1,5,10,25,50,75,90,95,99,99.5,99.9,100])\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nsource\n\n\nrolling_moving_average\n\n rolling_moving_average (o, window=2)\n\n\na = np.arange(60).reshape(2,3,10).astype(float)\nt = torch.arange(60).reshape(2,3,10).float()\ntest_close(rolling_moving_average(a, window=3), rolling_moving_average(t, window=3).numpy())\nprint(t)\nprint(rolling_moving_average(t, window=3))\n\ntensor([[[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],\n [10., 11., 12., 13., 14., 15., 16., 17., 18., 19.],\n [20., 21., 22., 23., 24., 25., 26., 27., 28., 29.]],\n\n [[30., 31., 32., 33., 34., 35., 36., 37., 38., 39.],\n [40., 41., 42., 43., 44., 45., 46., 47., 48., 49.],\n [50., 51., 52., 53., 54., 55., 56., 57., 58., 59.]]])\ntensor([[[ 0.0000, 0.5000, 1.0000, 2.0000, 3.0000, 4.0000, 5.0000,\n 6.0000, 7.0000, 8.0000],\n [10.0000, 10.5000, 11.0000, 12.0000, 13.0000, 14.0000, 15.0000,\n 16.0000, 17.0000, 18.0000],\n [20.0000, 20.5000, 21.0000, 22.0000, 23.0000, 24.0000, 25.0000,\n 26.0000, 27.0000, 28.0000]],\n\n [[30.0000, 30.5000, 31.0000, 32.0000, 33.0000, 34.0000, 35.0000,\n 36.0000, 37.0000, 38.0000],\n [40.0000, 40.5000, 41.0000, 42.0000, 43.0000, 44.0000, 45.0000,\n 46.0000, 47.0000, 48.0000],\n [50.0000, 50.5000, 51.0000, 52.0000, 53.0000, 54.0000, 55.0000,\n 56.0000, 57.0000, 58.0000]]])\n\n\n\nsource\n\n\nfbfill_sequence\n\n fbfill_sequence (o)\n\nForward and backward fills an array-like object alongside sequence dimension\n\nsource\n\n\nbfill_sequence\n\n bfill_sequence (o)\n\nBackward fills an array-like object alongside sequence dimension\n\nsource\n\n\nffill_sequence\n\n ffill_sequence (o)\n\nForward fills an array-like object alongside sequence dimension\n\na = np.arange(80).reshape(2, 4, 10).astype(float)\nmask = np.random.rand(*a.shape)\na[mask > .8] = np.nan\nt = torch.from_numpy(a)\nt\n\ntensor([[[ 0., 1., 2., 3., 4., 5., 6., 7., 8., nan],\n [10., 11., nan, nan, 14., 15., nan, 17., nan, 19.],\n [20., 21., 22., 23., nan, 25., 26., 27., 28., 29.],\n [30., 31., 32., 33., nan, 35., 36., 37., 38., 39.]],\n\n [[40., 41., 42., 43., 44., 45., 46., 47., nan, 49.],\n [nan, 51., nan, 53., 54., 55., nan, 57., 58., 59.],\n [60., 61., 62., 63., 64., nan, nan, 67., 68., 69.],\n [70., nan, 72., 73., 74., 75., 76., nan, 78., 79.]]],\n dtype=torch.float64)\n\n\n\n# forward fill\nfilled_a = ffill_sequence(a)\nprint(filled_a)\nm = np.isnan(filled_a)\ntest_eq(filled_a[~m], ffill_sequence(t).numpy()[~m])\n\n[[[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 8.]\n [10. 11. 11. 11. 14. 15. 15. 17. 17. 19.]\n [20. 21. 22. 23. 23. 25. 26. 27. 28. 29.]\n [30. 31. 32. 33. 33. 35. 36. 37. 38. 39.]]\n\n [[40. 41. 42. 43. 44. 45. 46. 47. 47. 49.]\n [nan 51. 51. 53. 54. 55. 55. 57. 58. 59.]\n [60. 61. 62. 63. 64. 64. 64. 67. 68. 69.]\n [70. 70. 72. 73. 74. 75. 76. 76. 78. 79.]]]\n\n\n\n# backward fill\nfilled_a = bfill_sequence(a)\nprint(filled_a)\nm = np.isnan(filled_a)\ntest_eq(filled_a[~m], bfill_sequence(t).numpy()[~m])\n\n[[[ 0. 1. 2. 3. 4. 5. 6. 7. 8. nan]\n [10. 11. 14. 14. 14. 15. 17. 17. 19. 19.]\n [20. 21. 22. 23. 25. 25. 26. 27. 28. 29.]\n [30. 31. 32. 33. 35. 35. 36. 37. 38. 39.]]\n\n [[40. 41. 42. 43. 44. 45. 46. 47. 49. 49.]\n [51. 51. 53. 53. 54. 55. 57. 57. 58. 59.]\n [60. 61. 62. 63. 64. 67. 67. 67. 68. 69.]\n [70. 72. 72. 73. 74. 75. 76. 78. 78. 79.]]]\n\n\n\n# forward & backward fill\nfilled_a = fbfill_sequence(a)\nprint(filled_a)\nm = np.isnan(filled_a)\ntest_eq(filled_a[~m], fbfill_sequence(t).numpy()[~m])\n\n[[[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 8.]\n [10. 11. 11. 11. 14. 15. 15. 17. 17. 19.]\n [20. 21. 22. 23. 23. 25. 26. 27. 28. 29.]\n [30. 31. 32. 33. 33. 35. 36. 37. 38. 39.]]\n\n [[40. 41. 42. 43. 44. 45. 46. 47. 47. 49.]\n [51. 51. 51. 53. 54. 55. 55. 57. 58. 59.]\n [60. 61. 62. 63. 64. 64. 64. 67. 68. 69.]\n [70. 70. 72. 73. 74. 75. 76. 76. 78. 79.]]]\n\n\n\nsource\n\n\ndummify\n\n dummify (o:Union[numpy.ndarray,torch.Tensor], by_var:bool=True,\n inplace:bool=False, skip:Optional[list]=None, random_state=None)\n\nShuffles an array-like object along all dimensions or dimension 1 (variables) if by_var is True.\n\narr = np.random.rand(2,3,10)\narr_original = arr.copy()\ndummy_arr = dummify(arr)\ntest_ne(arr_original, dummy_arr)\ntest_eq(arr_original, arr)\ndummify(arr, inplace=True)\ntest_ne(arr_original, arr)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nt = torch.rand(2,3,10)\nt_original = t.clone()\ndummy_t = dummify(t)\ntest_ne(t_original, dummy_t)\ntest_eq(t_original, t)\ndummify(t, inplace=True)\ntest_ne(t_original, t)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nsource\n\n\nshuffle_along_axis\n\n shuffle_along_axis (o, axis=-1, random_state=None)\n\n\nX = np.arange(60).reshape(2,3,10) + 10\nX_shuffled = shuffle_along_axis(X,(0, -1), random_state=23)\ntest_eq(X_shuffled, np.array([[[13, 15, 41, 14, 40, 49, 18, 42, 47, 46],\n [28, 56, 53, 50, 52, 25, 24, 57, 51, 59],\n [34, 30, 38, 35, 69, 66, 63, 67, 61, 62]],\n\n [[19, 10, 11, 16, 43, 12, 17, 48, 45, 44],\n [23, 20, 26, 22, 21, 27, 58, 29, 54, 55],\n [36, 31, 39, 60, 33, 68, 37, 32, 65, 64]]]))\n\n\nsource\n\n\nanalyze_array\n\n analyze_array (o, bins=100, density=False, feature_names=None,\n clip_outliers_plot=False, quantile_range=(25.0, 75.0),\n percentiles=[1, 25, 50, 75, 99], text_len=12, figsize=(10,\n 6))\n\n\nsource\n\n\nanalyze_feature\n\n analyze_feature (feature, bins=100, density=False, feature_name=None,\n clip_outliers_plot=False, quantile_range=(25.0, 75.0),\n percentiles=[1, 25, 50, 75, 99], text_len=12,\n figsize=(10, 6))\n\n\nx = np.random.normal(size=(1000))\nanalyze_array(x)\n\n array shape: (1000,)\n dtype: float64\n nan values: 0.0%\n max: 3.581094060980321\n 1: -2.1615590829115185\n 25: -0.5910961139851849\n 50: -0.002247946765973052\n 75: 0.6259274030927355\n 99: 2.3412961380708084\n min: -2.9413736207935037\n outlier min: -2.416631389602066\n outlier max: 2.4514626787096163\n outliers: 1.3%\n mean: 0.0252125277963861\n std: 0.946955486669799\n normal dist: True\n\n\n\n\n\n\n\n\n\n\nx1 = np.random.normal(size=(1000,2))\nx2 = np.random.normal(3, 5, size=(1000,2))\nx = x1 + x2\nanalyze_array(x)\n\n array shape: (1000, 2)\n\n 0 feature: 0\n\n dtype: float64\n nan values: 0.0%\n max: 20.323075761234193\n 1: -8.260661592413742\n 25: -0.6268118569038604\n 50: 2.7491159998190335\n 75: 6.1659732833324234\n 99: 15.387037197243288\n min: -13.122296090020368\n outlier min: -10.815989567258287\n outlier max: 16.35515099368685\n outliers: 0.9%\n mean: 2.9347218553275445\n std: 5.134940196769919\n normal dist: True\n\n 1 feature: 1\n\n dtype: float64\n nan values: 0.0%\n max: 19.86661808715871\n 1: -8.727124941895372\n 25: -0.45908489661153007\n 50: 2.875134866985423\n 75: 6.288434737224429\n 99: 14.424046274543118\n min: -10.963913297285615\n outlier min: -10.58036434736547\n outlier max: 16.409714187978366\n outliers: 0.6%\n mean: 2.9552584127690014\n std: 4.99683092772426\n normal dist: True\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nsource\n\n\nget_relpath\n\n get_relpath (path)\n\n\nsource\n\n\nto_root_path\n\n to_root_path (path)\n\nConverts a path to an absolute path from the root directory of the repository.\n\nsource\n\n\nget_root\n\n get_root ()\n\nReturns the root directory of the git repository.\n\nsource\n\n\nsplit_in_chunks\n\n split_in_chunks (o, chunksize, start=0, shuffle=False, drop_last=False)\n\n\na = np.arange(5, 15)\ntest_eq(split_in_chunks(a, 3, drop_last=False), [array([5, 6, 7]), array([ 8, 9, 10]), array([11, 12, 13]), array([14])])\ntest_eq(split_in_chunks(a, 3, drop_last=True), [array([5, 6, 7]), array([ 8, 9, 10]), array([11, 12, 13])])\ntest_eq(split_in_chunks(a, 3, start=2, drop_last=True), [array([7, 8, 9]), array([10, 11, 12])])\n\n\nsource\n\n\nload_object\n\n load_object (file_path)\n\n\nsource\n\n\nsave_object\n\n save_object (o, file_path, verbose=True)\n\n\nsplit = np.arange(100)\nsave_object(split, file_path='data/test')\nsplit2 = load_object('data/test.pkl')\ntest_eq(split, split2)\n\ndata directory already exists.\nndarray saved as data/test.pkl\n\n\n\nsplits = L([[[0,1,2,3,4], [5,6,7,8,9]],[[10,11,12,13,14], [15,16,17,18,19]]])\nsave_object(splits, file_path=Path('data/test'))\nsplits2 = load_object('data/test')\ntest_eq(splits, splits2)\n\ndata directory already exists.\nL saved as data/test.pkl\n\n\n\nsource\n\n\nget_idxs_to_keep\n\n get_idxs_to_keep (o, cond, crit='all', invert=False, axis=(1, 2),\n keepdims=False)\n\n\na = np.random.rand(100, 2, 10)\na[a > .95] = np.nan\nidxs_to_keep = get_idxs_to_keep(a, np.isfinite)\nif idxs_to_keep.size>0:\n test_eq(np.isnan(a[idxs_to_keep]).sum(), 0)\n\n\nsource\n\n\nzerofy\n\n zerofy (a, stride, keep=False)\n\nCreate copies of an array setting individual/ group values to zero\n\nstride = 3\na = np.arange(2*5).reshape(2,5) + 1\n\nzerofy(a, stride, keep=False)\n\narray([[[ 0., 0., 3., 4., 5.],\n [ 6., 7., 8., 9., 10.]],\n\n [[ 1., 2., 0., 0., 0.],\n [ 6., 7., 8., 9., 10.]],\n\n [[ 1., 2., 3., 4., 5.],\n [ 0., 0., 8., 9., 10.]],\n\n [[ 1., 2., 3., 4., 5.],\n [ 6., 7., 0., 0., 0.]]])\n\n\n\nsource\n\n\nfeat2list\n\n feat2list (o)\n\n\na = 'a'\ntest_eq(feat2list(a), ['a'])\na = ['a', 'b']\ntest_eq(feat2list(a), ['a', 'b'])\na = None\ntest_eq(feat2list(a), [])\n\n\nsource\n\n\nsmallest_dtype\n\n smallest_dtype (num, use_unsigned=False)\n\nFind the smallest dtype that can safely hold num\n\ntest_eq(smallest_dtype(3654), 'int16')\ntest_eq(smallest_dtype(2048.), 'float16')\ntest_eq(smallest_dtype(365454), 'int32')\ntest_eq(smallest_dtype(365454.), 'float32')\ntest_eq(smallest_dtype(3654545134897), 'int64')\n\n\nsource\n\n\nplot_forecast\n\n plot_forecast (X_true, y_true, y_pred, sel_vars=None, idx=None,\n figsize=(8, 4), n_samples=1)\n\n\nsource\n\n\nstr2callable\n\n str2callable (object_path:str=None)\n\nTransform a string into a callable object without importing it in the script.\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nobject_path\nstr\nNone\nThe string representing the object path.\n\n\n\n\n# test showing you don't need to import the object in the script. The library needs to be installed though.\ntry:\n pyts\nexcept Exception as e:\n print(0, e)\ntry:\n pyts.image\nexcept Exception as e:\n print(1, e)\ntry:\n gasf = eval(\"pyts.image.GramianAngularField(method='summation')\")\n print(f\"2 success: {gasf}\")\nexcept Exception as e:\n print(2, e)\ntry:\n gasf = str2callable(\"pyts.image.GramianAngularField(method='summation')\")\n print(f\"3 success: {gasf}\")\nexcept Exception as e:\n print(3, e)\n\n0 name 'pyts' is not defined\n1 name 'pyts' is not defined\n2 name 'pyts' is not defined\n3 success: GramianAngularField()", + "crumbs": [ + "Utilities" + ] + }, + { + "objectID": "models.inceptiontimeplus.html", + "href": "models.inceptiontimeplus.html", + "title": "InceptionTimePlus", + "section": "", + "text": "This is an unofficial PyTorch implementation of InceptionTime (Fawaz, 2019) created by Ignacio Oguiza.\n\nReferences: * Fawaz, H. I., Lucas, B., Forestier, G., Pelletier, C., Schmidt, D. F., Weber, J., … & Petitjean, F. (2020). Inceptiontime: Finding alexnet for time series classification. Data Mining and Knowledge Discovery, 34(6), 1936-1962. * Official InceptionTime tensorflow implementation: https://github.com/hfawaz/InceptionTime\n\nsource\n\nInceptionBlockPlus\n\n InceptionBlockPlus (ni, nf, residual=True, depth=6, coord=False,\n norm='Batch', zero_norm=False, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={},\n sa=False, se=None, stoch_depth=1.0, ks=40,\n bottleneck=True, padding='same', separable=False,\n dilation=1, stride=1, conv_dropout=0.0, bn_1st=True)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nInceptionModulePlus\n\n InceptionModulePlus (ni, nf, ks=40, bottleneck=True, padding='same',\n coord=False, separable=False, dilation=1, stride=1,\n conv_dropout=0.0, sa=False, se=None, norm='Batch',\n zero_norm=False, bn_1st=True, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={})\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nInceptionTimePlus\n\n InceptionTimePlus (c_in, c_out, seq_len=None, nf=32, nb_filters=None,\n flatten=False, concat_pool=False, fc_dropout=0.0,\n bn=False, y_range=None, custom_head=None, ks=40,\n bottleneck=True, padding='same', coord=False,\n separable=False, dilation=1, stride=1,\n conv_dropout=0.0, sa=False, se=None, norm='Batch',\n zero_norm=False, bn_1st=True, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={})\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nXCoordTime\n\n XCoordTime (c_in, c_out, seq_len=None, nf=32, nb_filters=None,\n flatten=False, concat_pool=False, fc_dropout=0.0, bn=False,\n y_range=None, custom_head=None, ks=40, bottleneck=True,\n padding='same', coord=False, separable=False, dilation=1,\n stride=1, conv_dropout=0.0, sa=False, se=None, norm='Batch',\n zero_norm=False, bn_1st=True, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={})\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nInCoordTime\n\n InCoordTime (c_in, c_out, seq_len=None, nf=32, nb_filters=None,\n flatten=False, concat_pool=False, fc_dropout=0.0, bn=False,\n y_range=None, custom_head=None, ks=40, bottleneck=True,\n padding='same', coord=False, separable=False, dilation=1,\n stride=1, conv_dropout=0.0, sa=False, se=None, norm='Batch',\n zero_norm=False, bn_1st=True, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={})\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nfrom tsai.data.core import TSCategorize\nfrom tsai.models.utils import count_parameters\n\n\nbs = 16\nn_vars = 3\nseq_len = 51\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\n\ntest_eq(InceptionTimePlus(n_vars,c_out)(xb).shape, [bs, c_out])\ntest_eq(InceptionTimePlus(n_vars,c_out,concat_pool=True)(xb).shape, [bs, c_out])\ntest_eq(InceptionTimePlus(n_vars,c_out, bottleneck=False)(xb).shape, [bs, c_out])\ntest_eq(InceptionTimePlus(n_vars,c_out, residual=False)(xb).shape, [bs, c_out])\ntest_eq(InceptionTimePlus(n_vars,c_out, conv_dropout=.5)(xb).shape, [bs, c_out])\ntest_eq(InceptionTimePlus(n_vars,c_out, stoch_depth=.5)(xb).shape, [bs, c_out])\ntest_eq(InceptionTimePlus(n_vars, c_out, seq_len=seq_len, zero_norm=True, flatten=True)(xb).shape, [bs, c_out])\ntest_eq(InceptionTimePlus(n_vars,c_out, coord=True, separable=True, \n norm='Instance', zero_norm=True, bn_1st=False, fc_dropout=.5, sa=True, se=True, act=nn.PReLU, act_kwargs={})(xb).shape, [bs, c_out])\ntest_eq(InceptionTimePlus(n_vars,c_out, coord=True, separable=True,\n norm='Instance', zero_norm=True, bn_1st=False, act=nn.PReLU, act_kwargs={})(xb).shape, [bs, c_out])\ntest_eq(count_parameters(InceptionTimePlus(3, 2)), 455490)\ntest_eq(count_parameters(InceptionTimePlus(6, 2, **{'coord': True, 'separable': True, 'zero_norm': True})), 77204)\ntest_eq(count_parameters(InceptionTimePlus(3, 2, ks=40)), count_parameters(InceptionTimePlus(3, 2, ks=[9, 19, 39])))\n\n\nbs = 16\nn_vars = 3\nseq_len = 51\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\n\nmodel = InceptionTimePlus(n_vars, c_out)\nmodel(xb).shape\ntest_eq(model[0](xb), model.backbone(xb))\ntest_eq(model[1](model[0](xb)), model.head(model[0](xb)))\ntest_eq(model[1].state_dict().keys(), model.head.state_dict().keys())\ntest_eq(len(ts_splitter(model)), 2)\n\n\ntest_eq(check_bias(InceptionTimePlus(2,3, zero_norm=True), is_conv)[0].sum(), 0)\ntest_eq(check_weight(InceptionTimePlus(2,3, zero_norm=True), is_bn)[0].sum(), 6)\ntest_eq(check_weight(InceptionTimePlus(2,3), is_bn)[0], np.array([1., 1., 1., 1., 1., 1., 1., 1.]))\n\n\nfor i in range(10): InceptionTimePlus(n_vars,c_out,stoch_depth=0.8,depth=9,zero_norm=True)(xb)\n\n\nnet = InceptionTimePlus(2,3,**{'coord': True, 'separable': True, 'zero_norm': True})\ntest_eq(check_weight(net, is_bn)[0], np.array([1., 1., 0., 1., 1., 0., 1., 1.]))\nnet\n\nInceptionTimePlus(\n (backbone): Sequential(\n (0): InceptionBlockPlus(\n (inception): ModuleList(\n (0): InceptionModulePlus(\n (bottleneck): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(3, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (convs): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n )\n (mp_conv): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(3, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (concat): Concat(dim=1)\n (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (act): ReLU()\n )\n (1): InceptionModulePlus(\n (bottleneck): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (convs): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n )\n (mp_conv): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (concat): Concat(dim=1)\n (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (act): ReLU()\n )\n (2): InceptionModulePlus(\n (bottleneck): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (convs): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n )\n (mp_conv): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (concat): Concat(dim=1)\n (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (3): InceptionModulePlus(\n (bottleneck): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (convs): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n )\n (mp_conv): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (concat): Concat(dim=1)\n (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (act): ReLU()\n )\n (4): InceptionModulePlus(\n (bottleneck): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (convs): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n )\n (mp_conv): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (concat): Concat(dim=1)\n (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (act): ReLU()\n )\n (5): InceptionModulePlus(\n (bottleneck): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (convs): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n )\n (mp_conv): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (concat): Concat(dim=1)\n (norm): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n )\n (shortcut): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(3, 128, kernel_size=(1,), stride=(1,), bias=False)\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (act): ModuleList(\n (0): ReLU()\n (1): ReLU()\n )\n (add): Add\n )\n )\n (head): Sequential(\n (0): Sequential(\n (0): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Reshape(bs)\n )\n (1): LinBnDrop(\n (0): Linear(in_features=128, out_features=3, bias=True)\n )\n )\n )\n)\n\n\n\nsource\n\n\nMultiInceptionTimePlus\n\n MultiInceptionTimePlus (feat_list, c_out, seq_len=None, nf=32,\n nb_filters=None, depth=6, stoch_depth=1.0,\n flatten=False, concat_pool=False, fc_dropout=0.0,\n bn=False, y_range=None, custom_head=None)\n\nClass that allows you to create a model with multiple branches of InceptionTimePlus.\n\nbs = 16\nn_vars = 3\nseq_len = 51\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\n\ntest_eq(count_parameters(MultiInceptionTimePlus([1,1,1], c_out)) > count_parameters(MultiInceptionTimePlus(3, c_out)), True)\ntest_eq(MultiInceptionTimePlus([1,1,1], c_out).to(xb.device)(xb).shape, MultiInceptionTimePlus(3, c_out).to(xb.device)(xb).shape)\n\n[W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.\n\n\n\nbs = 16\nn_vars = 3\nseq_len = 12\nc_out = 10\nxb = torch.rand(bs, n_vars, seq_len)\nnew_head = partial(conv_lin_nd_head, d=(5,2))\nnet = MultiInceptionTimePlus(n_vars, c_out, seq_len, custom_head=new_head)\nprint(net.to(xb.device)(xb).shape)\nnet.head\n\ntorch.Size([16, 5, 2, 10])\n\n\nSequential(\n (0): create_conv_lin_nd_head(\n (0): Conv1d(128, 10, kernel_size=(1,), stride=(1,))\n (1): Linear(in_features=12, out_features=10, bias=True)\n (2): Transpose(-1, -2)\n (3): Reshape(bs, 5, 2, 10)\n )\n)\n\n\n\nbs = 16\nn_vars = 6\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\nnet = MultiInceptionTimePlus([1,2,3], c_out, seq_len)\nprint(net.to(xb.device)(xb).shape)\nnet.head\n\ntorch.Size([16, 2])\n\n\nSequential(\n (0): Sequential(\n (0): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Reshape(bs)\n )\n (1): LinBnDrop(\n (0): Linear(in_features=384, out_features=2, bias=True)\n )\n )\n)\n\n\n\nbs = 8\nc_in = 7 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 10\nxb2 = torch.randn(bs, c_in, seq_len)\nmodel1 = MultiInceptionTimePlus([2, 5], c_out, seq_len)\nmodel2 = MultiInceptionTimePlus([[0,2,5], [0,1,3,4,6]], c_out, seq_len)\ntest_eq(model1.to(xb2.device)(xb2).shape, (bs, c_out))\ntest_eq(model1.to(xb2.device)(xb2).shape, model2.to(xb2.device)(xb2).shape)\n\n\nfrom tsai.data.external import *\nfrom tsai.data.core import *\nfrom tsai.data.preprocessing import *\n\n\nX, y, splits = get_UCR_data('NATOPS', split_data=False)\ntfms = [None, [TSCategorize()]]\nbatch_tfms = TSStandardize()\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\nmodel = InceptionTimePlus(dls.vars, dls.c, dls.len)\nxb,yb=first(dls.train)\ntest_eq(model.to(xb.device)(xb).shape, (dls.bs, dls.c))\ntest_eq(count_parameters(model), 460038)\n\n\nX, y, splits = get_UCR_data('NATOPS', split_data=False)\ntfms = [None, [TSCategorize()]]\nbatch_tfms = TSStandardize()\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\nmodel = MultiInceptionTimePlus([4, 15, 5], dls.c, dls.len)\nxb,yb=first(dls.train)\ntest_eq(model.to(xb.device)(xb).shape, (dls.bs, dls.c))\ntest_eq(count_parameters(model), 1370886)", + "crumbs": [ + "Models", + "CNNs", + "InceptionTimePlus" + ] + }, + { + "objectID": "data.mixed_augmentation.html", + "href": "data.mixed_augmentation.html", + "title": "Label-mixing transforms", + "section": "", + "text": "Callbacks that perform data augmentation by mixing samples in different ways.\n\n\nsource\n\nMixHandler1d\n\n MixHandler1d (alpha=0.5)\n\nA handler class for implementing mixed sample data augmentation\n\nsource\n\n\nMixUp1d\n\n MixUp1d (alpha=0.4)\n\nImplementation of https://arxiv.org/abs/1710.09412\n\nfrom fastai.learner import *\nfrom tsai.models.InceptionTime import *\nfrom tsai.data.external import get_UCR_data\nfrom tsai.data.core import get_ts_dls, TSCategorize\nfrom tsai.data.preprocessing import TSStandardize\nfrom tsai.learner import ts_learner\n\n\nX, y, splits = get_UCR_data('NATOPS', return_split=False)\ntfms = [None, TSCategorize()]\nbatch_tfms = TSStandardize()\ndls = get_ts_dls(X, y, tfms=tfms, splits=splits, batch_tfms=batch_tfms)\nlearn = ts_learner(dls, InceptionTime, cbs=MixUp1d(0.4))\nlearn.fit_one_cycle(1)\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\ntime\n\n\n\n\n0\n1.908455\n1.811908\n00:03\n\n\n\n\n\n\nsource\n\n\nCutMix1d\n\n CutMix1d (alpha=1.0)\n\nImplementation of https://arxiv.org/abs/1905.04899\n\nsource\n\n\nIntraClassCutMix1d\n\n IntraClassCutMix1d (alpha=1.0)\n\nImplementation of CutMix applied to examples of the same class\n\nX, y, splits = get_UCR_data('NATOPS', split_data=False)\ntfms = [None, TSCategorize()]\nbatch_tfms = TSStandardize()\ndls = get_ts_dls(X, y, tfms=tfms, splits=splits, batch_tfms=batch_tfms)\nlearn = ts_learner(dls, InceptionTime, cbs=IntraClassCutMix1d())\nlearn.fit_one_cycle(1)\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\ntime\n\n\n\n\n0\n1.813483\n1.792010\n00:03\n\n\n\n\n\n\nX, y, splits = get_UCR_data('NATOPS', split_data=False)\ntfms = [None, TSCategorize()]\nbatch_tfms = TSStandardize()\ndls = get_ts_dls(X, y, tfms=tfms, splits=splits, batch_tfms=batch_tfms)\nlearn = ts_learner(dls, cbs=CutMix1d(1.))\nlearn.fit_one_cycle(1)\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\ntime\n\n\n\n\n0\n1.824509\n1.774964\n00:04", + "crumbs": [ + "Data", + "Label-mixing transforms" + ] + }, + { + "objectID": "data.tabular.html", + "href": "data.tabular.html", + "title": "Time Series Tabular Data", + "section": "", + "text": "Main Tabular functions used throughout the library. This is helpful when you have additional time series data like metadata, time series features, etc.\n\n\nsource\n\nget_tabular_ds\n\n get_tabular_ds (df, procs=[<class 'fastai.tabular.core.Categorify'>,\n <class 'fastai.tabular.core.FillMissing'>, <class\n 'fastai.data.transforms.Normalize'>], cat_names=None,\n cont_names=None, y_names=None, groupby=None,\n y_block=None, splits=None, do_setup=True, inplace=False,\n reduce_memory=True, device=None)\n\n\nsource\n\n\nget_tabular_dls\n\n get_tabular_dls (df, procs=[<class 'fastai.tabular.core.Categorify'>,\n <class 'fastai.tabular.core.FillMissing'>, <class\n 'fastai.data.transforms.Normalize'>], cat_names=None,\n cont_names=None, y_names=None, bs=64, y_block=None,\n splits=None, do_setup=True, inplace=False,\n reduce_memory=True, device=None,\n path:Union[str,pathlib.Path]='.')\n\n\nsource\n\n\npreprocess_df\n\n preprocess_df (df, procs=[<class 'fastai.tabular.core.Categorify'>,\n <class 'fastai.tabular.core.FillMissing'>, <class\n 'fastai.data.transforms.Normalize'>], cat_names=None,\n cont_names=None, y_names=None, sample_col=None,\n reduce_memory=True)\n\n\npath = untar_data(URLs.ADULT_SAMPLE)\ndf = pd.read_csv(path/'adult.csv')\n# df['salary'] = np.random.rand(len(df)) # uncomment to simulate a cont dependent variable\n\ncat_names = ['workclass', 'education', 'education-num', 'marital-status', 'occupation', 'relationship', 'race', 'sex',\n 'capital-gain', 'capital-loss', 'native-country']\ncont_names = ['age', 'fnlwgt', 'hours-per-week']\ntarget = ['salary']\nsplits = RandomSplitter()(range_of(df))\n\ndls = get_tabular_dls(df, cat_names=cat_names, cont_names=cont_names, y_names='salary', splits=splits, bs=512, device=device)\ndls.show_batch()\n\n\n\n\n\nworkclass\neducation\neducation-num\nmarital-status\noccupation\nrelationship\nrace\nsex\ncapital-gain\ncapital-loss\nnative-country\nage\nfnlwgt\nhours-per-week\nsalary\n\n\n\n\n0\nPrivate\nSome-college\n10.0\nDivorced\nExec-managerial\nNot-in-family\nWhite\nMale\n0\n0\nUnited-States\n48.000000\n190072.000005\n50.000000\n>=50k\n\n\n1\nSelf-emp-not-inc\nSome-college\n10.0\nMarried-civ-spouse\nSales\nHusband\nWhite\nMale\n0\n0\nUnited-States\n72.000001\n284120.002964\n40.000000\n<50k\n\n\n2\nPrivate\nSome-college\n10.0\nMarried-civ-spouse\nProtective-serv\nHusband\nBlack\nMale\n0\n0\nUnited-States\n72.000001\n53684.002497\n40.000000\n<50k\n\n\n3\nSelf-emp-inc\nSome-college\n10.0\nMarried-civ-spouse\nFarming-fishing\nHusband\nWhite\nMale\n0\n0\nUnited-States\n47.000000\n337049.998875\n40.000000\n<50k\n\n\n4\nPrivate\nHS-grad\n9.0\nDivorced\nCraft-repair\nNot-in-family\nWhite\nMale\n0\n0\nUnited-States\n46.000000\n207677.000707\n30.000000\n<50k\n\n\n5\nPrivate\n5th-6th\n3.0\nDivorced\nPriv-house-serv\nUnmarried\nWhite\nFemale\n0\n0\nMexico\n45.000000\n265082.999142\n35.000000\n<50k\n\n\n6\nPrivate\nAssoc-acdm\n12.0\nNever-married\nOther-service\nNot-in-family\nWhite\nFemale\n0\n0\nUnited-States\n28.000000\n150296.001328\n79.999999\n<50k\n\n\n7\nPrivate\nHS-grad\n9.0\nMarried-civ-spouse\nExec-managerial\nHusband\nWhite\nMale\n0\n0\nUnited-States\n50.000000\n94080.999353\n40.000000\n>=50k\n\n\n8\nPrivate\nAssoc-voc\n11.0\nMarried-civ-spouse\nExec-managerial\nHusband\nWhite\nMale\n0\n0\nGermany\n58.000000\n235624.000302\n40.000000\n>=50k\n\n\n9\nPrivate\nHS-grad\n9.0\nNever-married\nOther-service\nUnmarried\nBlack\nFemale\n0\n0\nJapan\n29.000000\n419721.008996\n40.000000\n<50k\n\n\n\n\n\n\nmetrics = mae if dls.c == 1 else accuracy\nlearn = tabular_learner(dls, layers=[200, 100], y_range=None, metrics=metrics)\nlearn.fit(1, 1e-2)\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\ntime\n\n\n\n\n0\n0.349525\n0.288922\n0.866093\n00:05\n\n\n\n\n\n\nlearn.dls.one_batch()\n\n(tensor([[ 5, 12, 9, ..., 1, 1, 21],\n [ 1, 10, 13, ..., 1, 1, 3],\n [ 5, 4, 2, ..., 1, 1, 6],\n ...,\n [ 5, 6, 4, ..., 1, 1, 40],\n [ 3, 10, 13, ..., 1, 1, 40],\n [ 5, 12, 9, ..., 116, 1, 40]]),\n tensor([[-0.2593, 0.1234, 1.1829],\n [-0.9913, -1.4041, -0.0347],\n [-0.1129, 0.4583, -0.0347],\n ...,\n [-1.5769, -0.1989, 0.3712],\n [ 0.4727, -1.4400, 0.3712],\n [ 1.5708, -0.2222, -0.0347]]),\n tensor([[1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [1],\n [1],\n [1],\n [0],\n [0],\n [1],\n [1],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [1],\n [1],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [1],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [1],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [1],\n [0],\n [1],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [1],\n [0],\n [1],\n [0],\n [0],\n [1],\n [0],\n [1],\n [1],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [1],\n [1],\n [1],\n [1],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [1],\n [1],\n [0],\n [0],\n [0],\n [1],\n [1],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [1],\n [0],\n [1],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [1],\n [1],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [1],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [1],\n [0],\n [1],\n [0],\n [1],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [1],\n [1],\n [1],\n [0],\n [0],\n [0],\n [1],\n [1],\n [1],\n [0],\n [1],\n [1],\n [0],\n [1],\n [1],\n [1],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [1],\n [0],\n [1],\n [1],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [1],\n [0],\n [1],\n [1],\n [1],\n [0],\n [1],\n [0],\n [1],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [1],\n [1],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [1],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [1],\n [1],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [1],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [0],\n [0],\n [1],\n [0],\n [0],\n [1],\n [1]], dtype=torch.int8))\n\n\n\nlearn.model\n\nTabularModel(\n (embeds): ModuleList(\n (0): Embedding(10, 6)\n (1): Embedding(17, 8)\n (2): Embedding(17, 8)\n (3): Embedding(8, 5)\n (4): Embedding(16, 8)\n (5): Embedding(7, 5)\n (6): Embedding(6, 4)\n (7): Embedding(3, 3)\n (8): Embedding(117, 23)\n (9): Embedding(90, 20)\n (10): Embedding(43, 13)\n )\n (emb_drop): Dropout(p=0.0, inplace=False)\n (bn_cont): BatchNorm1d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (layers): Sequential(\n (0): LinBnDrop(\n (0): Linear(in_features=106, out_features=200, bias=False)\n (1): ReLU(inplace=True)\n (2): BatchNorm1d(200, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (1): LinBnDrop(\n (0): Linear(in_features=200, out_features=100, bias=False)\n (1): ReLU(inplace=True)\n (2): BatchNorm1d(100, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (2): LinBnDrop(\n (0): Linear(in_features=100, out_features=2, bias=True)\n )\n )\n)\n\n\n\npath = untar_data(URLs.ADULT_SAMPLE)\ndf = pd.read_csv(path/'adult.csv')\ncat_names = ['workclass', 'education', 'education-num', 'marital-status', 'occupation', 'relationship', 'race', 'sex',\n 'capital-gain', 'capital-loss', 'native-country']\ncont_names = ['age', 'fnlwgt', 'hours-per-week']\ntarget = ['salary']\ndf, procs = preprocess_df(df, procs=[Categorify, FillMissing, Normalize], cat_names=cat_names, cont_names=cont_names, y_names=target, \n sample_col=None, reduce_memory=True)\ndf.head()\n\n\n\n\n\n\n\n\nworkclass\neducation\neducation-num\nmarital-status\noccupation\nrelationship\nrace\nsex\ncapital-gain\ncapital-loss\nnative-country\nage\nfnlwgt\nhours-per-week\nsalary\n\n\n\n\n0\n5\n8\n12\n3\n0\n6\n5\n1\n1\n48\n40\n0.763796\n-0.838084\n-0.035429\n1\n\n\n1\n5\n13\n14\n1\n5\n2\n5\n2\n101\n1\n40\n0.397233\n0.444987\n0.369519\n1\n\n\n2\n5\n12\n0\n1\n0\n5\n3\n1\n1\n1\n40\n-0.042642\n-0.886734\n-0.683348\n0\n\n\n3\n6\n15\n15\n3\n11\n1\n2\n2\n1\n1\n40\n-0.042642\n-0.728873\n-0.035429\n1\n\n\n4\n7\n6\n0\n3\n9\n6\n3\n1\n1\n1\n40\n0.250608\n-1.018314\n0.774468\n0\n\n\n\n\n\n\n\n\nprocs.classes, procs.means, procs.stds\n\n({'workclass': ['#na#', ' ?', ' Federal-gov', ' Local-gov', ' Never-worked', ' Private', ' Self-emp-inc', ' Self-emp-not-inc', ' State-gov', ' Without-pay'],\n 'education': ['#na#', ' 10th', ' 11th', ' 12th', ' 1st-4th', ' 5th-6th', ' 7th-8th', ' 9th', ' Assoc-acdm', ' Assoc-voc', ' Bachelors', ' Doctorate', ' HS-grad', ' Masters', ' Preschool', ' Prof-school', ' Some-college'],\n 'education-num': ['#na#', 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0],\n 'marital-status': ['#na#', ' Divorced', ' Married-AF-spouse', ' Married-civ-spouse', ' Married-spouse-absent', ' Never-married', ' Separated', ' Widowed'],\n 'occupation': ['#na#', ' ?', ' Adm-clerical', ' Armed-Forces', ' Craft-repair', ' Exec-managerial', ' Farming-fishing', ' Handlers-cleaners', ' Machine-op-inspct', ' Other-service', ' Priv-house-serv', ' Prof-specialty', ' Protective-serv', ' Sales', ' Tech-support', ' Transport-moving'],\n 'relationship': ['#na#', ' Husband', ' Not-in-family', ' Other-relative', ' Own-child', ' Unmarried', ' Wife'],\n 'race': ['#na#', ' Amer-Indian-Eskimo', ' Asian-Pac-Islander', ' Black', ' Other', ' White'],\n 'sex': ['#na#', ' Female', ' Male'],\n 'capital-gain': ['#na#', 0, 114, 401, 594, 914, 991, 1055, 1086, 1111, 1151, 1173, 1409, 1424, 1455, 1471, 1506, 1639, 1797, 1831, 1848, 2009, 2036, 2050, 2062, 2105, 2174, 2176, 2202, 2228, 2290, 2329, 2346, 2354, 2387, 2407, 2414, 2463, 2538, 2580, 2597, 2635, 2653, 2829, 2885, 2907, 2936, 2961, 2964, 2977, 2993, 3103, 3137, 3273, 3325, 3411, 3418, 3432, 3456, 3464, 3471, 3674, 3781, 3818, 3887, 3908, 3942, 4064, 4101, 4386, 4416, 4508, 4650, 4687, 4787, 4865, 4931, 4934, 5013, 5060, 5178, 5455, 5556, 5721, 6097, 6360, 6418, 6497, 6514, 6723, 6767, 6849, 7298, 7430, 7443, 7688, 7896, 7978, 8614, 9386, 9562, 10520, 10566, 10605, 11678, 13550, 14084, 14344, 15020, 15024, 15831, 18481, 20051, 22040, 25124, 25236, 27828, 34095, 41310, 99999],\n 'capital-loss': ['#na#', 0, 155, 213, 323, 419, 625, 653, 810, 880, 974, 1092, 1138, 1258, 1340, 1380, 1408, 1411, 1485, 1504, 1539, 1564, 1573, 1579, 1590, 1594, 1602, 1617, 1628, 1648, 1651, 1668, 1669, 1672, 1719, 1721, 1726, 1735, 1740, 1741, 1755, 1762, 1816, 1825, 1844, 1848, 1876, 1887, 1902, 1944, 1974, 1977, 1980, 2001, 2002, 2042, 2051, 2057, 2080, 2129, 2149, 2163, 2174, 2179, 2201, 2205, 2206, 2231, 2238, 2246, 2258, 2267, 2282, 2339, 2352, 2377, 2392, 2415, 2444, 2457, 2467, 2472, 2489, 2547, 2559, 2603, 2754, 2824, 3004, 3683, 3770, 3900, 4356],\n 'native-country': ['#na#', ' ?', ' Cambodia', ' Canada', ' China', ' Columbia', ' Cuba', ' Dominican-Republic', ' Ecuador', ' El-Salvador', ' England', ' France', ' Germany', ' Greece', ' Guatemala', ' Haiti', ' Holand-Netherlands', ' Honduras', ' Hong', ' Hungary', ' India', ' Iran', ' Ireland', ' Italy', ' Jamaica', ' Japan', ' Laos', ' Mexico', ' Nicaragua', ' Outlying-US(Guam-USVI-etc)', ' Peru', ' Philippines', ' Poland', ' Portugal', ' Puerto-Rico', ' Scotland', ' South', ' Taiwan', ' Thailand', ' Trinadad&Tobago', ' United-States', ' Vietnam', ' Yugoslavia']},\n {'age': 38.58164675532078,\n 'fnlwgt': 189778.36651208502,\n 'hours-per-week': 40.437455852092995},\n {'age': 13.640223192304274,\n 'fnlwgt': 105548.3568809908,\n 'hours-per-week': 12.347239175707989})", + "crumbs": [ + "Data", + "Time Series Tabular Data" + ] + }, + { + "objectID": "callback.predictiondynamics.html", + "href": "callback.predictiondynamics.html", + "title": "PredictionDynamics", + "section": "", + "text": "Callback used to visualize model predictions during training.\n\nThis is an implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on a blog post by Andrej Karpathy I read some time ago that I really liked. One of the things he mentioned was this:\n\n“visualize prediction dynamics. I like to visualize model predictions on a fixed test batch during the course of training. The “dynamics” of how these predictions move will give you incredibly good intuition for how the training progresses. Many times it is possible to feel the network “struggle” to fit your data if it wiggles too much in some way, revealing instabilities. Very low or very high learning rates are also easily noticeable in the amount of jitter.” A. Karpathy\n\n\nsource\n\nPredictionDynamics\n\n PredictionDynamics (show_perc=1.0, figsize=(10, 6), alpha=0.3, size=30,\n color='lime', cmap='gist_rainbow', normalize=False,\n sensitivity=None, specificity=None)\n\nBasic class handling tweaks of the training loop by changing a Learner in various events\n\nfrom tsai.basics import *\nfrom tsai.models.InceptionTime import *\n\n\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, split_data=False)\ncheck_data(X, y, splits, False)\n\nX - shape: [360 samples x 24 features x 51 timesteps] type: memmap dtype:float32 isnan: 0\ny - shape: (360,) type: memmap dtype:<U3 n_classes: 6 (60 samples per class) ['1.0', '2.0', '3.0', '4.0', '5.0', '6.0'] isnan: False\nsplits - n_splits: 2 shape: [180, 180] overlap: False\n\n\n\ntfms = [None, [Categorize()]]\nbatch_tfms = [TSStandardize(by_var=True)]\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\nlearn = ts_learner(dls, InceptionTime, metrics=accuracy, cbs=PredictionDynamics()) \nlearn.fit_one_cycle(2, 3e-3)\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\ntime\n\n\n\n\n0\n1.885462\n1.773872\n0.238889\n00:05\n\n\n1\n1.425667\n1.640418\n0.377778\n00:05\n\n\n\n\n\n\n\n\n\n\n\n\ntrain_loss\nvalid_loss\naccuracy\n\n\n\n\n1\n1.425667\n1.640418\n0.377778", + "crumbs": [ + "Training", + "Callbacks", + "PredictionDynamics" + ] + }, + { + "objectID": "models.rocket_pytorch.html", + "href": "models.rocket_pytorch.html", + "title": "ROCKET Pytorch", + "section": "", + "text": "ROCKET (RandOm Convolutional KErnel Transform) functions for univariate and multivariate time series developed in Pytorch.\n\n\nsource\n\nROCKET\n\n ROCKET (c_in, seq_len, n_kernels=10000, kss=[7, 9, 11], device=None,\n verbose=False)\n\nRandOm Convolutional KErnel Transform\nROCKET is a GPU Pytorch implementation of the ROCKET functions generate_kernels and apply_kernels that can be used with univariate and multivariate time series.\n\nsource\n\n\ncreate_rocket_features\n\n create_rocket_features (dl, model, verbose=False)\n\nArgs: model : ROCKET model instance dl : single TSDataLoader (for example dls.train or dls.valid)\n\nbs = 16\nc_in = 7 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 15\nxb = torch.randn(bs, c_in, seq_len).to(default_device())\n\nm = ROCKET(c_in, seq_len, n_kernels=1_000, kss=[7, 9, 11]) # 1_000 for testing with a cpu. Default is 10k with a gpu!\ntest_eq(m(xb).shape, [bs, 2_000])\n\n\nfrom tsai.data.all import *\nfrom tsai.models.utils import *\n\n\nX, y, splits = get_UCR_data('OliveOil', split_data=False)\ntfms = [None, TSRegression()]\nbatch_tfms = TSStandardize(by_var=True)\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, shuffle_train=False, drop_last=False)\nmodel = build_ts_model(ROCKET, dls=dls, n_kernels=1_000) # 1_000 for testing with a cpu. Default is 10k with a gpu!\nX_train, y_train = create_rocket_features(dls.train, model) \nX_valid, y_valid = create_rocket_features(dls.valid, model)\nX_train.shape, X_valid.shape\n\n((30, 2000), (30, 2000))", + "crumbs": [ + "Models", + "ROCKETs", + "ROCKET Pytorch" + ] + }, + { + "objectID": "models.hydraplus.html", + "href": "models.hydraplus.html", + "title": "HydraPlus", + "section": "", + "text": "Hydra: competing convolutional kernels for fast and accurate time series classification.\n\nThis is a Pytorch implementation of Hydra adapted by Ignacio Oguiza and based on:\nDempster, A., Schmidt, D. F., & Webb, G. I. (2023). Hydra: Competing convolutional kernels for fast and accurate time series classification. Data Mining and Knowledge Discovery, 1-27.\nOriginal paper: https://link.springer.com/article/10.1007/s10618-023-00939-3\nOriginal repository: https://github.com/angus924/hydra\n\nsource\n\nHydraBackbonePlus\n\n HydraBackbonePlus (c_in, c_out, seq_len, k=8, g=64, max_c_in=8,\n clip=True, device=device(type='cpu'), zero_init=True)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nHydraPlus\n\n HydraPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None, k:int=8,\n g:int=64, max_c_in:int=8, clip:bool=True, use_bn:bool=True,\n fc_dropout:float=0.0, custom_head:Any=None,\n zero_init:bool=True, use_diff:bool=True,\n device:str=device(type='cpu'))\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\nnum of channels in input\n\n\nc_out\nint\n\nnum of channels in output\n\n\nseq_len\nint\n\nsequence length\n\n\nd\ntuple\nNone\nshape of the output (when ndim > 1)\n\n\nk\nint\n8\nnumber of kernels per group\n\n\ng\nint\n64\nnumber of groups\n\n\nmax_c_in\nint\n8\nmax number of channels per group\n\n\nclip\nbool\nTrue\nclip values >= 0\n\n\nuse_bn\nbool\nTrue\nuse batch norm\n\n\nfc_dropout\nfloat\n0.0\ndropout probability\n\n\ncustom_head\ntyping.Any\nNone\noptional custom head as a torch.nn.Module or Callable\n\n\nzero_init\nbool\nTrue\nset head weights and biases to zero\n\n\nuse_diff\nbool\nTrue\nuse diff(X) as input\n\n\ndevice\nstr\ncpu\ndevice to use\n\n\n\n\nxb = torch.randn(16, 5, 20).to(default_device())\nyb = torch.randint(0, 3, (16, 20)).to(default_device())\n\nmodel = HydraPlus(5, 3, 20, d=None).to(default_device())\noutput = model(xb)\nassert output.shape == (16, 3)\noutput.shape\n\ntorch.Size([16, 3])\n\n\n\nxb = torch.randn(16, 5, 20).to(default_device())\nyb = torch.randint(0, 3, (16, 20)).to(default_device())\n\nmodel = HydraPlus(5, 3, 20, d=None, use_diff=False).to(default_device())\noutput = model(xb)\nassert output.shape == (16, 3)\noutput.shape\n\ntorch.Size([16, 3])\n\n\n\nxb = torch.randn(16, 5, 20).to(default_device())\nyb = torch.randint(0, 3, (16, 5, 20)).to(default_device())\n\nmodel = HydraPlus(5, 3, 20, d=20, use_diff=True).to(default_device())\noutput = model(xb)\nassert output.shape == (16, 20, 3)\noutput.shape\n\ntorch.Size([16, 20, 3])", + "crumbs": [ + "Models", + "ROCKETs", + "HydraPlus" + ] + }, + { + "objectID": "wandb.html", + "href": "wandb.html", + "title": "Weights & Biases Sweeps", + "section": "", + "text": "Weights & Biases Sweeps are used to automate hyperparameter optimization and explore the space of possible models.\n\n\nsource\n\nwandb_agent\n\n wandb_agent (script_path, sweep, entity=None, project=None, count=None,\n run=True)\n\nRun wandb agent with sweep and `script_path\n\nsource\n\n\nupdate_run_config\n\n update_run_config (config, new_config, verbose=False)\n\nUpdate config with new_config\n\nsource\n\n\nget_sweep_config\n\n get_sweep_config (config)\n\nGet sweep config from config", + "crumbs": [ + "HPO & experiment tracking", + "Weights & Biases Sweeps" + ] + }, + { + "objectID": "models.positional_encoders.html", + "href": "models.positional_encoders.html", + "title": "Positional encoders", + "section": "", + "text": "This includes some variations of positional encoders used with Transformers.", + "crumbs": [ + "Models", + "Transformers", + "Positional encoders" + ] + }, + { + "objectID": "models.positional_encoders.html#imports", + "href": "models.positional_encoders.html#imports", + "title": "Positional encoders", + "section": "Imports", + "text": "Imports", + "crumbs": [ + "Models", + "Transformers", + "Positional encoders" + ] + }, + { + "objectID": "models.positional_encoders.html#positional-encoders", + "href": "models.positional_encoders.html#positional-encoders", + "title": "Positional encoders", + "section": "Positional encoders", + "text": "Positional encoders\n\nsource\n\nPositionalEncoding\n\n PositionalEncoding (q_len, d_model, normalize=True)\n\n\npe = PositionalEncoding(1000, 512).detach().cpu().numpy()\nplt.pcolormesh(pe, cmap='viridis')\nplt.title('PositionalEncoding')\nplt.colorbar()\nplt.show()\npe.mean(), pe.std(), pe.min(), pe.max(), pe.shape\n\n\n\n\n\n\n\n\n\nsource\n\n\nCoord2dPosEncoding\n\n Coord2dPosEncoding (q_len, d_model, exponential=False, normalize=True,\n eps=0.001, verbose=False)\n\n\ncpe = Coord2dPosEncoding(1000, 512, exponential=True, normalize=True).cpu().numpy()\nplt.pcolormesh(cpe, cmap='viridis')\nplt.title('Coord2dPosEncoding')\nplt.colorbar()\nplt.show()\nplt.plot(cpe.mean(0))\nplt.show()\nplt.plot(cpe.mean(1))\nplt.show()\ncpe.mean(), cpe.std(), cpe.min(), cpe.max()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nsource\n\n\nCoord1dPosEncoding\n\n Coord1dPosEncoding (q_len, exponential=False, normalize=True)\n\n\ncpe = Coord1dPosEncoding(1000, exponential=True, normalize=True).detach().cpu().numpy()\nplt.pcolormesh(cpe, cmap='viridis')\nplt.title('Coord1dPosEncoding')\nplt.colorbar()\nplt.show()\nplt.plot(cpe.mean(1))\nplt.show()\ncpe.mean(), cpe.std(), cpe.min(), cpe.max(), cpe.shape\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ncpe = Coord1dPosEncoding(1000, exponential=True, normalize=True).detach().cpu().numpy()\nplt.pcolormesh(cpe, cmap='viridis')\nplt.title('Coord1dPosEncoding')\nplt.colorbar()\nplt.show()\nplt.plot(cpe.mean(1))\nplt.show()\ncpe.mean(), cpe.std(), cpe.min(), cpe.max()", + "crumbs": [ + "Models", + "Transformers", + "Positional encoders" + ] + }, + { + "objectID": "models.minirocket.html", + "href": "models.minirocket.html", + "title": "MINIROCKET", + "section": "", + "text": "A Very Fast (Almost) Deterministic Transform for Time Series Classification.\n\n\nsource\n\nMiniRocketClassifier\n\n MiniRocketClassifier (num_features=10000, max_dilations_per_kernel=32,\n random_state=None, alphas=array([1.e-03, 1.e-02,\n 1.e-01, 1.e+00, 1.e+01, 1.e+02, 1.e+03]),\n normalize_features=True, memory=None,\n verbose=False, scoring=None, class_weight=None,\n **kwargs)\n\nTime series classification using MINIROCKET features and a linear classifier\n\nsource\n\n\nload_minirocket\n\n load_minirocket (fname, path='./models')\n\n\nsource\n\n\nMiniRocketRegressor\n\n MiniRocketRegressor (num_features=10000, max_dilations_per_kernel=32,\n random_state=None, alphas=array([1.e-03, 1.e-02,\n 1.e-01, 1.e+00, 1.e+01, 1.e+02, 1.e+03]),\n normalize_features=True, memory=None, verbose=False,\n scoring=None, **kwargs)\n\nTime series regression using MINIROCKET features and a linear regressor\n\nsource\n\n\nload_minirocket\n\n load_minirocket (fname, path='./models')\n\n\nsource\n\n\nMiniRocketVotingClassifier\n\n MiniRocketVotingClassifier (n_estimators=5, weights=None, n_jobs=-1,\n num_features=10000,\n max_dilations_per_kernel=32,\n random_state=None, alphas=array([1.e-03,\n 1.e-02, 1.e-01, 1.e+00, 1.e+01, 1.e+02,\n 1.e+03]), normalize_features=True,\n memory=None, verbose=False, scoring=None,\n class_weight=None, **kwargs)\n\nTime series classification ensemble using MINIROCKET features, a linear classifier and majority voting\n\nsource\n\n\nget_minirocket_preds\n\n get_minirocket_preds (X, fname, path='./models', model=None)\n\n\nsource\n\n\nMiniRocketVotingRegressor\n\n MiniRocketVotingRegressor (n_estimators=5, weights=None, n_jobs=-1,\n num_features=10000,\n max_dilations_per_kernel=32,\n random_state=None, alphas=array([1.e-03,\n 1.e-02, 1.e-01, 1.e+00, 1.e+01, 1.e+02,\n 1.e+03]), normalize_features=True,\n memory=None, verbose=False, scoring=None,\n **kwargs)\n\nTime series regression ensemble using MINIROCKET features, a linear regressor and a voting regressor\n\n# Univariate classification with sklearn-type API\ndsid = 'OliveOil'\nfname = 'MiniRocketClassifier'\nX_train, y_train, X_test, y_test = get_UCR_data(dsid)\ncls = MiniRocketClassifier()\ncls.fit(X_train, y_train)\ncls.save(fname)\npred = cls.score(X_test, y_test)\ndel cls\ncls = load_minirocket(fname)\ntest_eq(cls.score(X_test, y_test), pred)\n\nOMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\n\n\n\n# Multivariate classification with sklearn-type API\ndsid = 'NATOPS'\nX_train, y_train, X_test, y_test = get_UCR_data(dsid)\ncls = MiniRocketClassifier()\ncls.fit(X_train, y_train)\ncls.score(X_test, y_test)\n\n0.9277777777777778\n\n\n\n# Multivariate classification with sklearn-type API\ndsid = 'NATOPS'\nX_train, y_train, X_test, y_test = get_UCR_data(dsid)\ncls = MiniRocketVotingClassifier(5)\ncls.fit(X_train, y_train)\ncls.score(X_test, y_test)\n\nOMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\nOMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\nOMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\nOMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\nOMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\n\n\n0.9166666666666666\n\n\n\nfrom sklearn.metrics import mean_squared_error\n\n\n# Univariate regression with sklearn-type API\ndsid = 'Covid3Month'\nfname = 'MiniRocketRegressor'\nX_train, y_train, X_test, y_test = get_Monash_regression_data(dsid)\nif X_train is not None:\n rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)\n reg = MiniRocketRegressor(scoring=rmse_scorer)\n reg.fit(X_train, y_train)\n reg.save(fname)\n del reg\n reg = load_minirocket(fname)\n y_pred = reg.predict(X_test)\n print(mean_squared_error(y_test, y_pred, squared=False))\n\n0.04099244037606886\n\n\n\n# Multivariate regression with sklearn-type API\ndsid = 'AppliancesEnergy'\nX_train, y_train, X_test, y_test = get_Monash_regression_data(dsid)\nif X_train is not None:\n rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)\n reg = MiniRocketRegressor(scoring=rmse_scorer)\n reg.fit(X_train, y_train)\n reg.save(fname)\n del reg\n reg = load_minirocket(fname)\n y_pred = reg.predict(X_test)\n print(mean_squared_error(y_test, y_pred, squared=False))\n\n2.2938026879322577\n\n\n\n# Multivariate regression ensemble with sklearn-type API\nif X_train is not None:\n reg = MiniRocketVotingRegressor(5, scoring=rmse_scorer)\n reg.fit(X_train, y_train)\n y_pred = reg.predict(X_test)\n print(mean_squared_error(y_test, y_pred, squared=False))\n\nOMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\nOMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\n\n\n2.286295546348893", + "crumbs": [ + "Models", + "ROCKETs", + "MINIROCKET" + ] + }, + { + "objectID": "models.utils.html", + "href": "models.utils.html", + "title": "Model utilities", + "section": "", + "text": "Utility functions used to build PyTorch timeseries models.\n\n\nsource\n\napply_idxs\n\n apply_idxs (o, idxs)\n\nFunction to apply indices to zarr, dask and numpy arrays\n\nsource\n\n\nSeqTokenizer\n\n SeqTokenizer (c_in, embed_dim, token_size=60, norm=False)\n\nGenerates non-overlapping tokens from sub-sequences within a sequence by applying a sliding window\n\nsource\n\n\nget_embed_size\n\n get_embed_size (n_cat, rule='log2')\n\n\ntest_eq(get_embed_size(35), 6)\n\n\nsource\n\n\nhas_weight_or_bias\n\n has_weight_or_bias (l)\n\n\nsource\n\n\nhas_weight\n\n has_weight (l)\n\n\nsource\n\n\nhas_bias\n\n has_bias (l)\n\n\nsource\n\n\nis_conv\n\n is_conv (l)\n\n\nsource\n\n\nis_affine_layer\n\n is_affine_layer (l)\n\n\nsource\n\n\nis_conv_linear\n\n is_conv_linear (l)\n\n\nsource\n\n\nis_bn\n\n is_bn (l)\n\n\nsource\n\n\nis_linear\n\n is_linear (l)\n\n\nsource\n\n\nis_layer\n\n is_layer (*args)\n\n\nsource\n\n\nget_layers\n\n get_layers (model, cond=<function noop>, full=True)\n\n\nsource\n\n\ncheck_weight\n\n check_weight (m, cond=<function noop>, verbose=False)\n\n\nsource\n\n\ncheck_bias\n\n check_bias (m, cond=<function noop>, verbose=False)\n\n\nsource\n\n\nget_nf\n\n get_nf (m)\n\nGet nf from model’s first linear layer in head\n\nsource\n\n\nts_splitter\n\n ts_splitter (m)\n\nSplit of a model between body and head\n\nsource\n\n\ntransfer_weights\n\n transfer_weights (model, weights_path:pathlib.Path,\n device:torch.device=None, exclude_head:bool=True)\n\nUtility function that allows to easily transfer weights between models. Taken from the great self-supervised repository created by Kerem Turgutlu. https://github.com/KeremTurgutlu/self_supervised/blob/d87ebd9b4961c7da0efd6073c42782bbc61aaa2e/self_supervised/utils.py\n\nsource\n\n\nbuild_ts_model\n\n build_ts_model (arch, c_in=None, c_out=None, seq_len=None, d=None,\n dls=None, device=None, verbose=False, s_cat_idxs=None,\n s_cat_embeddings=None, s_cat_embedding_dims=None,\n s_cont_idxs=None, o_cat_idxs=None, o_cat_embeddings=None,\n o_cat_embedding_dims=None, o_cont_idxs=None,\n patch_len=None, patch_stride=None, fusion_layers=128,\n fusion_act='relu', fusion_dropout=0.0,\n fusion_use_bn=True, pretrained=False, weights_path=None,\n exclude_head=True, cut=-1, init=None, arch_config={},\n **kwargs)\n\n\nsource\n\n\ncount_parameters\n\n count_parameters (model, trainable=True)\n\n\nsource\n\n\nbuild_tsimage_model\n\n build_tsimage_model (arch, c_in=None, c_out=None, dls=None,\n pretrained=False, device=None, verbose=False,\n init=None, arch_config={}, **kwargs)\n\n\nsource\n\n\nbuild_tabular_model\n\n build_tabular_model (arch, dls, layers=None, emb_szs=None, n_out=None,\n y_range=None, device=None, arch_config={}, **kwargs)\n\n\nfrom tsai.data.external import get_UCR_data\nfrom tsai.data.core import TSCategorize, get_ts_dls\nfrom tsai.data.preprocessing import TSStandardize\nfrom tsai.models.InceptionTime import *\n\n\nX, y, splits = get_UCR_data('NATOPS', split_data=False)\ntfms = [None, TSCategorize()]\nbatch_tfms = TSStandardize()\ndls = get_ts_dls(X, y, splits, tfms=tfms, batch_tfms=batch_tfms)\nmodel = build_ts_model(InceptionTime, dls=dls)\ntest_eq(count_parameters(model), 460038)\n\n\nsource\n\n\nget_clones\n\n get_clones (module, N)\n\n\nm = nn.Conv1d(3,4,3)\nget_clones(m, 3)\n\nModuleList(\n (0-2): 3 x Conv1d(3, 4, kernel_size=(3,), stride=(1,))\n)\n\n\n\nsource\n\n\nsplit_model\n\n split_model (m)\n\n\nsource\n\n\noutput_size_calculator\n\n output_size_calculator (mod, c_in, seq_len=None)\n\n\nc_in = 3\nseq_len = 30\nm = nn.Conv1d(3, 12, kernel_size=3, stride=2)\nnew_c_in, new_seq_len = output_size_calculator(m, c_in, seq_len)\ntest_eq((new_c_in, new_seq_len), (12, 14))\n\n[W NNPACK.cpp:64] Could not initialize NNPACK! Reason: Unsupported hardware.\n\n\n\nsource\n\n\nchange_model_head\n\n change_model_head (model, custom_head, **kwargs)\n\nReplaces a model’s head by a custom head as long as the model has a head, head_nf, c_out and seq_len attributes\n\nsource\n\n\ntrue_forecaster\n\n true_forecaster (o, split, horizon=1)\n\n\nsource\n\n\nnaive_forecaster\n\n naive_forecaster (o, split, horizon=1)\n\n\na = np.random.rand(20).cumsum()\nsplit = np.arange(10, 20)\na, naive_forecaster(a, split, 1), true_forecaster(a, split, 1)\n\n(array([ 0.74775537, 1.41245663, 2.12445924, 2.8943163 , 3.56384351,\n 4.23789602, 4.83134182, 5.18560431, 5.30551186, 6.29076506,\n 6.58873471, 7.03661275, 7.0884361 , 7.57927022, 8.21911791,\n 8.59726773, 9.37382718, 10.17298849, 10.40118308, 10.82265631]),\n array([ 6.29076506, 6.58873471, 7.03661275, 7.0884361 , 7.57927022,\n 8.21911791, 8.59726773, 9.37382718, 10.17298849, 10.40118308]),\n array([ 6.58873471, 7.03661275, 7.0884361 , 7.57927022, 8.21911791,\n 8.59726773, 9.37382718, 10.17298849, 10.40118308, 10.82265631]))", + "crumbs": [ + "Models", + "Model utilities" + ] + }, + { + "objectID": "optuna.html", + "href": "optuna.html", + "title": "Optuna", + "section": "", + "text": "A hyperparameter optimization framework\n\nOptuna is an automatic hyperparameter optimization software framework, particularly designed for machine learning. It features an imperative, define-by-run style user API. Thanks to our define-by-run API, the code written with Optuna enjoys high modularity, and the user of Optuna can dynamically construct the search spaces for the hyperparameters.\n\ndef run_optuna_study(objective, resume=None, study_type=None, multivariate=True, search_space=None, evaluate=None, seed=None, sampler=None, pruner=None, \n study_name=None, direction='maximize', n_trials=None, timeout=None, gc_after_trial=False, show_progress_bar=True, \n save_study=True, path='optuna', show_plots=True):\n r\"\"\"Creates and runs an optuna study.\n\n Args: \n objective: A callable that implements objective function.\n resume: Path to a previously saved study.\n study_type: Type of study selected (bayesian, gridsearch, randomsearch). Based on this a sampler will be build if sampler is None. \n If a sampler is passed, this has no effect.\n multivariate: If this is True, the multivariate TPE is used when suggesting parameters. The multivariate TPE is reported to outperform \n the independent TPE.\n search_space: Search space required when running a gridsearch (if you don't pass a sampler).\n evaluate: Allows you to pass a specific set of hyperparameters that will be evaluated.\n seed: Fixed seed used by samplers.\n sampler: A sampler object that implements background algorithm for value suggestion. If None is specified, TPESampler is used during \n single-objective optimization and NSGAIISampler during multi-objective optimization. See also samplers.\n pruner: A pruner object that decides early stopping of unpromising trials. If None is specified, MedianPruner is used as the default. \n See also pruners.\n study_name: Study’s name. If this argument is set to None, a unique name is generated automatically.\n direction: A sequence of directions during multi-objective optimization.\n n_trials: The number of trials. If this argument is set to None, there is no limitation on the number of trials. If timeout is also set to \n None, the study continues to create trials until it receives a termination signal such as Ctrl+C or SIGTERM.\n timeout: Stop study after the given number of second(s). If this argument is set to None, the study is executed without time limitation. \n If n_trials is also set to None, the study continues to create trials until it receives a termination signal such as \n Ctrl+C or SIGTERM.\n gc_after_trial: Flag to execute garbage collection at the end of each trial. By default, garbage collection is enabled, just in case. \n You can turn it off with this argument if memory is safely managed in your objective function.\n show_progress_bar: Flag to show progress bars or not. To disable progress bar, set this False.\n save_study: Save your study when finished/ interrupted.\n path: Folder where the study will be saved.\n show_plots: Flag to control whether plots are shown at the end of the study.\n \"\"\"\n \n try: import optuna\n except ImportError: raise ImportError('You need to install optuna to use run_optuna_study')\n\n # Sampler\n if sampler is None:\n if study_type is None or \"bayes\" in study_type.lower(): \n sampler = optuna.samplers.TPESampler(seed=seed, multivariate=multivariate)\n elif \"grid\" in study_type.lower():\n assert search_space, f\"you need to pass a search_space dict to run a gridsearch\"\n sampler = optuna.samplers.GridSampler(search_space)\n elif \"random\" in study_type.lower(): \n sampler = optuna.samplers.RandomSampler(seed=seed)\n assert sampler, \"you need to either select a study type (bayesian, gridsampler, randomsampler) or pass a sampler\"\n\n # Study\n if resume: \n try:\n study = joblib.load(resume)\n except: \n print(f\"joblib.load({resume}) couldn't recover any saved study. Check the path.\")\n return\n print(\"Best trial until now:\")\n print(\" Value: \", study.best_trial.value)\n print(\" Params: \")\n for key, value in study.best_trial.params.items():\n print(f\" {key}: {value}\")\n else: \n study = optuna.create_study(sampler=sampler, pruner=pruner, study_name=study_name, direction=direction)\n if evaluate: study.enqueue_trial(evaluate)\n try:\n study.optimize(objective, n_trials=n_trials, timeout=timeout, gc_after_trial=gc_after_trial, show_progress_bar=show_progress_bar)\n except KeyboardInterrupt:\n pass\n\n # Save\n if save_study:\n full_path = Path(path)/f'{study.study_name}.pkl'\n full_path.parent.mkdir(parents=True, exist_ok=True)\n joblib.dump(study, full_path)\n print(f'\\nOptuna study saved to {full_path}')\n print(f\"To reload the study run: study = joblib.load('{full_path}')\")\n\n # Plots\n if show_plots and len(study.trials) > 1:\n try: display(optuna.visualization.plot_optimization_history(study))\n except: pass\n try: display(optuna.visualization.plot_param_importances(study))\n except: pass\n try: display(optuna.visualization.plot_slice(study))\n except: pass\n try: display(optuna.visualization.plot_parallel_coordinate(study))\n except: pass\n\n # Study stats\n try:\n pruned_trials = [t for t in study.trials if t.state == optuna.trial.TrialState.PRUNED]\n complete_trials = [t for t in study.trials if t.state == optuna.trial.TrialState.COMPLETE]\n print(f\"\\nStudy statistics : \")\n print(f\" Study name : {study.study_name}\")\n print(f\" # finished trials : {len(study.trials)}\")\n print(f\" # pruned trials : {len(pruned_trials)}\")\n print(f\" # complete trials : {len(complete_trials)}\")\n \n print(f\"\\nBest trial :\")\n trial = study.best_trial\n print(f\" value : {trial.value}\")\n print(f\" best_params = {trial.params}\\n\")\n except:\n print('\\nNo finished trials yet.')\n return study\n\n\nsource\n\nrun_optuna_study\n\n run_optuna_study (objective, resume=None, study_type=None,\n multivariate=True, search_space=None, evaluate=None,\n seed=None, sampler=None, pruner=None, study_name=None,\n direction='maximize', n_trials=None, timeout=None,\n gc_after_trial=False, show_progress_bar=True,\n save_study=True, path='optuna', show_plots=True)\n\nCreates and runs an optuna study.\nArgs: objective: A callable that implements objective function. resume: Path to a previously saved study. study_type: Type of study selected (bayesian, gridsearch, randomsearch). Based on this a sampler will be build if sampler is None. If a sampler is passed, this has no effect. multivariate: If this is True, the multivariate TPE is used when suggesting parameters. The multivariate TPE is reported to outperform the independent TPE. search_space: Search space required when running a gridsearch (if you don’t pass a sampler). evaluate: Allows you to pass a specific set of hyperparameters that will be evaluated. seed: Fixed seed used by samplers. sampler: A sampler object that implements background algorithm for value suggestion. If None is specified, TPESampler is used during single-objective optimization and NSGAIISampler during multi-objective optimization. See also samplers. pruner: A pruner object that decides early stopping of unpromising trials. If None is specified, MedianPruner is used as the default. See also pruners. study_name: Study’s name. If this argument is set to None, a unique name is generated automatically. direction: A sequence of directions during multi-objective optimization. n_trials: The number of trials. If this argument is set to None, there is no limitation on the number of trials. If timeout is also set to None, the study continues to create trials until it receives a termination signal such as Ctrl+C or SIGTERM. timeout: Stop study after the given number of second(s). If this argument is set to None, the study is executed without time limitation. If n_trials is also set to None, the study continues to create trials until it receives a termination signal such as Ctrl+C or SIGTERM. gc_after_trial: Flag to execute garbage collection at the end of each trial. By default, garbage collection is enabled, just in case. You can turn it off with this argument if memory is safely managed in your objective function. show_progress_bar: Flag to show progress bars or not. To disable progress bar, set this False. save_study: Save your study when finished/ interrupted. path: Folder where the study will be saved. show_plots: Flag to control whether plots are shown at the end of the study.", + "crumbs": [ + "HPO & experiment tracking", + "Optuna" + ] + }, + { + "objectID": "models.multirocketplus.html", + "href": "models.multirocketplus.html", + "title": "MultiRocketPlus", + "section": "", + "text": "MultiRocket: Multiple pooling operators and transformations for fast and effective time series classification.\n\nThis is a Pytorch implementation of MultiRocket developed by Malcolm McLean and Ignacio Oguiza based on:\nTan, C. W., Dempster, A., Bergmeir, C., & Webb, G. I. (2022). MultiRocket: multiple pooling operators and transformations for fast and effective time series classification. Data Mining and Knowledge Discovery, 36(5), 1623-1646.\nOriginal paper: https://link.springer.com/article/10.1007/s10618-022-00844-1\nOriginal repository: https://github.com/ChangWeiTan/MultiRocket\n\nsource\n\nFlatten\n\n Flatten (*args, **kwargs)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nfrom tsai.imports import default_device\n\n\no = torch.rand(2, 3, 5, 4).to(default_device()) - .3\nprint(o)\n\noutput = _LPVV(o, dim=2)\nprint(output) # Should print: torch.Size([2, 3, 4])\n\ntensor([[[[ 0.5644, -0.0509, -0.0390, 0.4091],\n [ 0.0517, -0.1471, 0.6458, 0.5593],\n [ 0.4516, -0.0821, 0.1271, 0.0592],\n [ 0.4151, 0.4376, 0.0763, 0.3780],\n [ 0.2653, -0.1817, 0.0156, 0.4993]],\n\n [[-0.0779, 0.0858, 0.1982, 0.3224],\n [ 0.1130, 0.0714, -0.1779, 0.5360],\n [-0.1848, -0.2270, -0.0925, -0.1217],\n [ 0.2820, -0.0205, -0.2777, 0.3755],\n [-0.2490, 0.2613, 0.4237, 0.4534]],\n\n [[-0.0162, 0.6368, 0.0016, 0.1467],\n [ 0.6035, -0.1365, 0.6930, 0.6943],\n [ 0.2790, 0.3818, -0.0731, 0.0167],\n [ 0.6442, 0.3443, 0.4829, -0.0944],\n [ 0.2932, 0.6952, 0.5541, 0.5946]]],\n\n\n [[[ 0.6757, 0.5740, 0.3071, 0.4400],\n [-0.2344, -0.1056, 0.4773, 0.2432],\n [ 0.2595, -0.1528, -0.0866, 0.6201],\n [ 0.0657, 0.1220, 0.4849, 0.4254],\n [ 0.3399, -0.1609, 0.3465, 0.2389]],\n\n [[-0.0765, 0.0516, 0.0028, 0.4381],\n [ 0.5212, -0.2781, -0.0896, -0.0301],\n [ 0.6857, 0.3583, 0.5869, 0.3418],\n [ 0.3002, 0.5135, 0.6011, 0.6499],\n [-0.2807, -0.2888, 0.3965, 0.6585]],\n\n [[-0.1368, 0.6677, 0.1439, 0.1434],\n [-0.1820, 0.1041, -0.1211, 0.6103],\n [ 0.5808, 0.4588, 0.4572, 0.3713],\n [ 0.2389, -0.1392, 0.1371, -0.1570],\n [ 0.2840, 0.1214, -0.0059, 0.5064]]]], device='mps:0')\ntensor([[[ 1.0000, -0.6000, 0.6000, 1.0000],\n [-0.6000, -0.2000, -0.6000, -0.2000],\n [ 0.6000, 0.2000, -0.2000, 0.2000]],\n\n [[ 0.2000, -0.6000, -0.2000, 1.0000],\n [ 0.2000, -0.2000, 0.2000, 0.2000],\n [ 0.2000, 0.2000, -0.2000, 0.2000]]], device='mps:0')\n\n\n\noutput = _MPV(o, dim=2)\nprint(output) # Should print: torch.Size([2, 3, 4])\n\ntensor([[[0.3496, 0.4376, 0.2162, 0.3810],\n [0.1975, 0.1395, 0.3109, 0.4218],\n [0.4550, 0.5145, 0.4329, 0.3631]],\n\n [[0.3352, 0.3480, 0.4040, 0.3935],\n [0.5023, 0.3078, 0.3968, 0.5221],\n [0.3679, 0.3380, 0.2460, 0.4079]]], device='mps:0')\n\n\n\noutput = _RSPV(o, dim=2)\nprint(output) # Should print: torch.Size([2, 3, 4])\n\ntensor([[[ 1.0000, -0.0270, 0.9138, 1.0000],\n [-0.1286, 0.2568, 0.0630, 0.8654],\n [ 0.9823, 0.8756, 0.9190, 0.8779]],\n\n [[ 0.7024, 0.2482, 0.8983, 1.0000],\n [ 0.6168, 0.2392, 0.8931, 0.9715],\n [ 0.5517, 0.8133, 0.7065, 0.8244]]], device='mps:0')\n\n\n\noutput = _PPV(o, dim=2)\nprint(output) # Should print: torch.Size([2, 3, 4])\n\ntensor([[[-0.3007, -1.0097, -0.6697, -0.2381],\n [-1.0466, -0.9316, -0.9705, -0.3738],\n [-0.2786, -0.2314, -0.3366, -0.4569]],\n\n [[-0.5574, -0.8893, -0.3883, -0.2130],\n [-0.5401, -0.8574, -0.4009, -0.1767],\n [-0.6861, -0.5149, -0.7555, -0.4102]]], device='mps:0')\n\n\n\nsource\n\n\nMultiRocketFeaturesPlus\n\n MultiRocketFeaturesPlus (c_in, seq_len, num_features=10000,\n max_dilations_per_kernel=32, kernel_size=9,\n max_num_channels=9, max_num_kernels=84,\n diff=False)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nMultiRocketBackbonePlus\n\n MultiRocketBackbonePlus (c_in, seq_len, num_features=50000,\n max_dilations_per_kernel=32, kernel_size=9,\n max_num_channels=None, max_num_kernels=84,\n use_diff=True)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nMultiRocketPlus\n\n MultiRocketPlus (c_in, c_out, seq_len, d=None, num_features=50000,\n max_dilations_per_kernel=32, kernel_size=9,\n max_num_channels=None, max_num_kernels=84, use_bn=True,\n fc_dropout=0, custom_head=None, zero_init=True,\n use_diff=True)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nfrom tsai.imports import default_device\n\n\nxb = torch.randn(16, 5, 20).to(default_device())\nyb = torch.randint(0, 3, (16, 20)).to(default_device())\n\nmodel = MultiRocketPlus(5, 3, 20, d=None, use_diff=True).to(default_device())\noutput = model(xb)\nassert output.shape == (16, 3)\noutput.shape\n\ntorch.Size([16, 3])\n\n\n\nxb = torch.randn(16, 5, 20).to(default_device())\nyb = torch.randint(0, 3, (16, 20)).to(default_device())\n\nmodel = MultiRocketPlus(5, 3, 20, d=None, use_diff=False).to(default_device())\noutput = model(xb)\nassert output.shape == (16, 3)\noutput.shape\n\ntorch.Size([16, 3])\n\n\n\nxb = torch.randn(16, 5, 20).to(default_device())\nyb = torch.randint(0, 3, (16, 5, 20)).to(default_device())\n\nmodel = MultiRocketPlus(5, 3, 20, d=20, use_diff=True).to(default_device())\noutput = model(xb)\nassert output.shape == (16, 20, 3)\noutput.shape\n\ntorch.Size([16, 20, 3])", + "crumbs": [ + "Models", + "ROCKETs", + "MultiRocketPlus" + ] + }, + { + "objectID": "models.tabmodel.html", + "href": "models.tabmodel.html", + "title": "TabModel", + "section": "", + "text": "This is an implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on fastai’s TabularModel.\nWe built it so that it’s easy to change the head of the model, something that is particularly interesting when building hybrid models.\n\nsource\n\nTabHead\n\n TabHead (emb_szs, n_cont, c_out, layers=None, fc_dropout=None,\n y_range=None, use_bn=True, bn_final=False, lin_first=False,\n act=ReLU(inplace=True), skip=False)\n\nBasic head for tabular data.\n\nsource\n\n\nTabBackbone\n\n TabBackbone (emb_szs, n_cont, embed_p=0.0, bn_cont=True)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nTabModel\n\n TabModel (emb_szs, n_cont, c_out, layers=None, fc_dropout=None,\n embed_p=0.0, y_range=None, use_bn=True, bn_final=False,\n bn_cont=True, lin_first=False, act=ReLU(inplace=True),\n skip=False)\n\nBasic model for tabular data.\n\nfrom fastai.tabular.core import *\nfrom tsai.data.tabular import *\n\n\npath = untar_data(URLs.ADULT_SAMPLE)\ndf = pd.read_csv(path/'adult.csv')\n# df['salary'] = np.random.rand(len(df)) # uncomment to simulate a cont dependent variable\nprocs = [Categorify, FillMissing, Normalize]\ncat_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race']\ncont_names = ['age', 'fnlwgt', 'education-num']\ny_names = ['salary']\ny_block = RegressionBlock() if isinstance(df['salary'].values[0], float) else CategoryBlock()\nsplits = RandomSplitter()(range_of(df))\npd.options.mode.chained_assignment=None\nto = TabularPandas(df, procs=procs, cat_names=cat_names, cont_names=cont_names, y_names=y_names, y_block=y_block, splits=splits, inplace=True, \n reduce_memory=False)\nto.show(5)\ntab_dls = to.dataloaders(bs=16, val_bs=32)\nb = first(tab_dls.train)\ntest_eq((b[0].shape, b[1].shape, b[2].shape), (torch.Size([16, 7]), torch.Size([16, 3]), torch.Size([16, 1])))\n\n\n\n\n\nworkclass\neducation\nmarital-status\noccupation\nrelationship\nrace\neducation-num_na\nage\nfnlwgt\neducation-num\nsalary\n\n\n\n\n20505\nPrivate\nHS-grad\nMarried-civ-spouse\nSales\nHusband\nWhite\nFalse\n47.0\n197836.0\n9.0\n<50k\n\n\n28679\nPrivate\nHS-grad\nMarried-civ-spouse\nCraft-repair\nHusband\nWhite\nFalse\n28.0\n65078.0\n9.0\n>=50k\n\n\n11669\nPrivate\nHS-grad\nNever-married\nAdm-clerical\nNot-in-family\nWhite\nFalse\n38.0\n202683.0\n9.0\n<50k\n\n\n29079\nSelf-emp-not-inc\nBachelors\nMarried-civ-spouse\nProf-specialty\nHusband\nWhite\nFalse\n41.0\n168098.0\n13.0\n<50k\n\n\n7061\nPrivate\nHS-grad\nMarried-civ-spouse\nAdm-clerical\nHusband\nWhite\nFalse\n31.0\n243442.0\n9.0\n<50k\n\n\n\n\n\n\ntab_model = build_tabular_model(TabModel, dls=tab_dls)\nb = first(tab_dls.train)\ntest_eq(tab_model.to(b[0].device)(*b[:-1]).shape, (tab_dls.bs, tab_dls.c))\nlearn = Learner(tab_dls, tab_model, splitter=ts_splitter)\np1 = count_parameters(learn.model)\nlearn.freeze()\np2 = count_parameters(learn.model)\nlearn.unfreeze()\np3 = count_parameters(learn.model)\nassert p1 == p3\nassert p1 > p2 > 0", + "crumbs": [ + "Models", + "Tabular models", + "TabModel" + ] + }, + { + "objectID": "models.hydramultirocketplus.html", + "href": "models.hydramultirocketplus.html", + "title": "HydraMultiRocketPlus", + "section": "", + "text": "Hydra: competing convolutional kernels for fast and accurate time series classification.\n\nThis is a Pytorch implementation of Hydra-MultiRocket adapted by Ignacio Oguiza and based on:\nDempster, A., Schmidt, D. F., & Webb, G. I. (2023). Hydra: Competing convolutional kernels for fast and accurate time series classification. Data Mining and Knowledge Discovery, 1-27.\nOriginal paper: https://link.springer.com/article/10.1007/s10618-023-00939-3\nOriginal repository: https://github.com/angus924/hydra\n\nsource\n\nHydraMultiRocketBackbonePlus\n\n HydraMultiRocketBackbonePlus (c_in, c_out, seq_len, d=None, k=8, g=64,\n max_c_in=8, clip=True, num_features=50000,\n max_dilations_per_kernel=32, kernel_size=9,\n max_num_channels=None, max_num_kernels=84,\n use_bn=True, fc_dropout=0,\n custom_head=None, zero_init=True,\n use_diff=True, device=device(type='cpu'))\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nHydraMultiRocketPlus\n\n HydraMultiRocketPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,\n k:int=8, g:int=64, max_c_in:int=8, clip:bool=True,\n num_features:int=50000,\n max_dilations_per_kernel:int=32, kernel_size:int=9,\n max_num_channels:int=None, max_num_kernels:int=84,\n use_bn:bool=True, fc_dropout:float=0.0,\n custom_head:Any=None, zero_init:bool=True,\n use_diff:bool=True, device:str=device(type='cpu'))\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\nnum of channels in input\n\n\nc_out\nint\n\nnum of channels in output\n\n\nseq_len\nint\n\nsequence length\n\n\nd\ntuple\nNone\nshape of the output (when ndim > 1)\n\n\nk\nint\n8\nnumber of kernels per group in HydraBackbone\n\n\ng\nint\n64\nnumber of groups in HydraBackbone\n\n\nmax_c_in\nint\n8\nmax number of channels per group in HydraBackbone\n\n\nclip\nbool\nTrue\nclip values >= 0 in HydraBackbone\n\n\nnum_features\nint\n50000\nnumber of MultiRocket features\n\n\nmax_dilations_per_kernel\nint\n32\nmax dilations per kernel in MultiRocket\n\n\nkernel_size\nint\n9\nkernel size in MultiRocket\n\n\nmax_num_channels\nint\nNone\nmax number of channels in MultiRocket\n\n\nmax_num_kernels\nint\n84\nmax number of kernels in MultiRocket\n\n\nuse_bn\nbool\nTrue\nuse batch norm\n\n\nfc_dropout\nfloat\n0.0\ndropout probability\n\n\ncustom_head\ntyping.Any\nNone\noptional custom head as a torch.nn.Module or Callable\n\n\nzero_init\nbool\nTrue\nset head weights and biases to zero\n\n\nuse_diff\nbool\nTrue\nuse diff(X) as input\n\n\ndevice\nstr\ncpu\ndevice to use\n\n\n\n\nxb = torch.randn(16, 5, 20).to(default_device())\nyb = torch.randint(0, 3, (16, 20)).to(default_device())\n\nmodel = HydraMultiRocketPlus(5, 3, 20, d=None).to(default_device())\noutput = model(xb)\nassert output.shape == (16, 3)\noutput.shape\n\ntorch.Size([16, 3])\n\n\n\nxb = torch.randn(16, 5, 20).to(default_device())\nyb = torch.randint(0, 3, (16, 20)).to(default_device())\n\nmodel = HydraMultiRocketPlus(5, 3, 20, d=None, use_diff=False).to(default_device())\noutput = model(xb)\nassert output.shape == (16, 3)\noutput.shape\n\ntorch.Size([16, 3])\n\n\n\nxb = torch.randn(16, 5, 20).to(default_device())\nyb = torch.randint(0, 3, (16, 5, 20)).to(default_device())\n\nmodel = HydraMultiRocketPlus(5, 3, 20, d=20, use_diff=True).to(default_device())\noutput = model(xb)\nassert output.shape == (16, 20, 3)\noutput.shape\n\ntorch.Size([16, 20, 3])", + "crumbs": [ + "Models", + "ROCKETs", + "HydraMultiRocketPlus" + ] + }, + { + "objectID": "models.tsperceiver.html", + "href": "models.tsperceiver.html", + "title": "TSPerceiver", + "section": "", + "text": "This implementation is inspired by:\nJaegle, A., Gimeno, F., Brock, A., Zisserman, A., Vinyals, O., & Carreira, J. (2021).\nPerceiver: General Perception with Iterative Attention. arXiv preprint arXiv:2103.03206.\nPaper: https://arxiv.org/pdf/2103.03206.pdf\nOfficial repo: Not available as og April, 2021.\n\nsource\n\nTSPerceiver\n\n TSPerceiver (c_in, c_out, seq_len, cat_szs=0, n_cont=0, n_latents=512,\n d_latent=128, d_context=None, n_layers=6,\n self_per_cross_attn=1, share_weights=True, cross_n_heads=1,\n self_n_heads=8, d_head=None, attn_dropout=0.0,\n fc_dropout=0.0, concat_pool=False)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nfrom tsai.basics import *\nfrom tsai.data.all import *\n\n\ndsid = 'OliveOil'\nX, y, splits = get_UCR_data(dsid, split_data=False)\nts_features_df = get_ts_features(X, y)\nts_features_df.shape\n\nFeature Extraction: 100%|██████████████████████████████████████████| 30/30 [00:00<00:00, 189.16it/s]\n\n\n(60, 11)\n\n\n\n# raw ts\ntfms = [None, [Categorize()]]\nbatch_tfms = TSStandardize(by_sample=True)\nts_dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\n\n# ts features\ncat_names = None\ncont_names = ts_features_df.columns[:-2]\ny_names = 'target'\ntab_dls = get_tabular_dls(ts_features_df, cat_names=cat_names, cont_names=cont_names, y_names=y_names, splits=splits)\n\n# mixed\nmixed_dls = get_mixed_dls(ts_dls, tab_dls)\nxb, yb = mixed_dls.one_batch()\n\n\nmodel = TSPerceiver(ts_dls.vars, ts_dls.c, ts_dls.len, cat_szs=0, \n # n_cont=0, \n n_cont=xb[1][1].shape[1], \n n_latents=128, d_latent=128, n_layers=3, self_per_cross_attn=1, share_weights=True,\n cross_n_heads=16, self_n_heads=16, d_head=None, attn_dropout=0., fc_dropout=0.).to(device)\ntest_eq(model(xb).shape, (yb.shape[0], len(np.unique(y))))", + "crumbs": [ + "Models", + "Transformers", + "TSPerceiver" + ] + }, + { + "objectID": "data.mixed.html", + "href": "data.mixed.html", + "title": "Mixed data", + "section": "", + "text": "DataLoader than can take data from multiple dataloaders with different types of data\n\n\nsource\n\nMixedDataLoaders\n\n MixedDataLoaders (*loaders, path:str|Path='.', device=None)\n\nBasic wrapper around several DataLoaders.\n\nsource\n\n\nMixedDataLoader\n\n MixedDataLoader (*loaders, path='.', shuffle=False, device=None, bs=None)\n\nAccepts any number of DataLoader and a device\n\nsource\n\n\nget_mixed_dls\n\n get_mixed_dls (*dls, device=None, shuffle_train=None, shuffle_valid=None,\n **kwargs)\n\n\nfrom tsai.data.tabular import *\n\n\npath = untar_data(URLs.ADULT_SAMPLE)\ndf = pd.read_csv(path/'adult.csv')\n# df['salary'] = np.random.rand(len(df)) # uncomment to simulate a cont dependent variable\ntarget = 'salary'\nsplits = RandomSplitter()(range_of(df))\n\ncat_names = ['workclass', 'education', 'marital-status']\ncont_names = ['age', 'fnlwgt']\ndls1 = get_tabular_dls(df, cat_names=cat_names, cont_names=cont_names, y_names=target, splits=splits, bs=512)\ndls1.show_batch()\n\ncat_names = None #['occupation', 'relationship', 'race']\ncont_names = ['education-num']\ndls2 = get_tabular_dls(df, cat_names=cat_names, cont_names=cont_names, y_names=target, splits=splits, bs=128)\ndls2.show_batch()\n\n\n\n\n\nworkclass\neducation\nmarital-status\nage\nfnlwgt\nsalary\n\n\n\n\n0\nPrivate\nBachelors\nMarried-civ-spouse\n59.999999\n131680.999115\n>=50k\n\n\n1\nPrivate\n12th\nNever-married\n18.000000\n311795.000052\n<50k\n\n\n2\nPrivate\nHS-grad\nMarried-civ-spouse\n45.000000\n350440.002257\n>=50k\n\n\n3\nLocal-gov\nMasters\nNever-married\n44.000000\n101593.001253\n<50k\n\n\n4\n?\nSome-college\nNever-married\n20.999999\n41355.995576\n<50k\n\n\n5\nPrivate\nBachelors\nNever-married\n30.000000\n207668.000292\n<50k\n\n\n6\nFederal-gov\nBachelors\nNever-married\n28.000000\n281859.998606\n<50k\n\n\n7\n?\nSome-college\nNever-married\n20.999999\n180338.999810\n<50k\n\n\n8\nPrivate\nSome-college\nNever-married\n20.000000\n174713.999509\n<50k\n\n\n9\nSelf-emp-not-inc\nBachelors\nMarried-civ-spouse\n50.000000\n334273.005863\n<50k\n\n\n\n\n\n\n\n\n\neducation-num_na\neducation-num\nsalary\n\n\n\n\n0\nFalse\n9.0\n<50k\n\n\n1\nFalse\n9.0\n<50k\n\n\n2\nFalse\n13.0\n>=50k\n\n\n3\nFalse\n9.0\n<50k\n\n\n4\nFalse\n9.0\n<50k\n\n\n5\nFalse\n13.0\n>=50k\n\n\n6\nFalse\n10.0\n<50k\n\n\n7\nFalse\n10.0\n<50k\n\n\n8\nFalse\n13.0\n<50k\n\n\n9\nFalse\n10.0\n<50k\n\n\n\n\n\n\ndls = get_mixed_dls(dls1, dls2, bs=8)\nfirst(dls.train)\nfirst(dls.valid)\ntorch.save(dls,'export/mixed_dls.pth')\ndel dls\ndls = torch.load('export/mixed_dls.pth')\ndls.train.show_batch()\n\n\n\n\n\nworkclass\neducation\nmarital-status\nage\nfnlwgt\nsalary\n\n\n\n\n0\nState-gov\nHS-grad\nNever-married\n43.000000\n23156.998049\n<50k\n\n\n1\nPrivate\n11th\nMarried-civ-spouse\n32.000000\n140092.001434\n<50k\n\n\n2\nSelf-emp-not-inc\nHS-grad\nNever-married\n43.000000\n48086.995399\n<50k\n\n\n3\nSelf-emp-not-inc\nAssoc-acdm\nNever-married\n34.000000\n177638.999728\n<50k\n\n\n4\nLocal-gov\nMasters\nMarried-civ-spouse\n65.000001\n146453.999176\n<50k\n\n\n5\nPrivate\nHS-grad\nMarried-civ-spouse\n33.000000\n227281.999333\n<50k\n\n\n6\nPrivate\nHS-grad\nNever-married\n33.000000\n194900.999911\n<50k\n\n\n7\nPrivate\nHS-grad\nDivorced\n23.000000\n259301.002460\n<50k\n\n\n\n\n\n\n\n\n\neducation-num_na\neducation-num\nsalary\n\n\n\n\n0\nFalse\n9.0\n<50k\n\n\n1\nFalse\n7.0\n<50k\n\n\n2\nFalse\n9.0\n<50k\n\n\n3\nFalse\n12.0\n<50k\n\n\n4\nFalse\n14.0\n<50k\n\n\n5\nTrue\n10.0\n<50k\n\n\n6\nFalse\n9.0\n<50k\n\n\n7\nFalse\n9.0\n<50k\n\n\n\n\n\n\nxb, yb = first(dls.train)\nxb\n\n((tensor([[ 8, 12, 5],\n [ 5, 2, 3],\n [ 7, 12, 5],\n [ 7, 8, 5],\n [ 3, 13, 3],\n [ 5, 12, 3],\n [ 5, 12, 5],\n [ 5, 12, 1]]),\n tensor([[ 0.3222, -1.5782],\n [-0.4850, -0.4696],\n [ 0.3222, -1.3418],\n [-0.3383, -0.1136],\n [ 1.9368, -0.4093],\n [-0.4117, 0.3570],\n [-0.4117, 0.0500],\n [-1.1455, 0.6606]])),\n (tensor([[1],\n [1],\n [1],\n [1],\n [1],\n [2],\n [1],\n [1]]),\n tensor([[-0.4258],\n [-1.2097],\n [-0.4258],\n [ 0.7502],\n [ 1.5342],\n [-0.0338],\n [-0.4258],\n [-0.4258]])))\n\n\n\nxs, ys = first(dls.train)\nxs[0][0].shape, xs[0][1].shape, xs[1][0].shape, xs[1][1].shape\n\n(torch.Size([8, 3]),\n torch.Size([8, 2]),\n torch.Size([8, 1]),\n torch.Size([8, 1]))\n\n\n\nfrom tsai.data.validation import TimeSplitter\nfrom tsai.data.core import TSRegression, get_ts_dls\n\n\nX = np.repeat(np.repeat(np.arange(8)[:, None, None], 2, 1), 5, 2).astype(float)\nX = np.concatenate([X, X])\ny = np.concatenate([np.arange(len(X)//2)]*2)\nalphabet = np.array(list(string.ascii_lowercase))\n# y = alphabet[y]\nsplits = TimeSplitter(.5, show_plot=False)(range_of(X))\ntfms = [None, TSRegression()]\ndls1 = get_ts_dls(X, y, splits=splits, tfms=tfms)\ndls1.one_batch()\n\n(TSTensor(samples:8, vars:2, len:5, device=cpu, dtype=torch.float32),\n tensor([7., 0., 2., 1., 5., 4., 3., 6.]))\n\n\n\ndata = np.concatenate([np.repeat(np.arange(8)[:, None], 3, 1)*np.array([1, 10, 100])]*2)\ndf = pd.DataFrame(data, columns=['cat1', 'cat2', 'cont'])\ndf['cont'] = df['cont'].astype(float)\ndf['target'] = y\ncat_names = ['cat1', 'cat2']\ncont_names = ['cont']\ntarget = 'target'\ndls2 = get_tabular_dls(df, procs=[Categorify, FillMissing, #Normalize\n ], cat_names=cat_names, cont_names=cont_names, y_names=target, splits=splits, bs=8)\ndls2.one_batch()\n\n(tensor([[2, 2],\n [5, 5],\n [1, 1],\n [7, 7],\n [3, 3],\n [6, 6],\n [8, 8],\n [4, 4]]),\n tensor([[100.],\n [400.],\n [ 0.],\n [600.],\n [200.],\n [500.],\n [700.],\n [300.]]),\n tensor([[1],\n [4],\n [0],\n [6],\n [2],\n [5],\n [7],\n [3]], dtype=torch.int8))\n\n\n\nz = zip(_loaders[dls1.train.fake_l.num_workers == 0](dls1.train.fake_l))\nfor b in z: \n print(b)\n break\n\n((TSTensor(samples:8, vars:2, len:5, device=cpu, dtype=torch.float32), tensor([7., 0., 2., 1., 5., 4., 3., 6.])),)\n\n\n\nbs = 8\ndls = get_mixed_dls(dls1, dls2, bs=bs)\ndl = dls.train\nxb, yb = dl.one_batch()\ntest_eq(len(xb), 2)\ntest_eq(len(xb[0]), bs)\ntest_eq(len(xb[1]), 2)\ntest_eq(len(xb[1][0]), bs)\ntest_eq(len(xb[1][1]), bs)\ntest_eq(xb[0].data[:, 0, 0].long(), xb[1][0][:, 0] - 1) # categorical data and ts are in synch\ntest_eq(xb[0].data[:, 0, 0], (xb[1][1]/100).flatten()) # continuous data and ts are in synch\ntest_eq(tensor(dl.input_idxs), yb.long().cpu())\ndl = dls.valid\nxb, yb = dl.one_batch()\ntest_eq(tensor(y[dl.input_idxs]), yb.long().cpu())", + "crumbs": [ + "Data", + "Mixed data" + ] + }, + { + "objectID": "data.external.html", + "href": "data.external.html", + "title": "External data", + "section": "", + "text": "Helper functions used to download and extract common time series datasets.\n\n\nsource\n\ndecompress_from_url\n\n decompress_from_url (url, target_dir=None, verbose=False)\n\n\nsource\n\n\ndownload_data\n\n download_data (url, fname=None, c_key='archive', force_download=False,\n timeout=4, verbose=False)\n\nDownload url to fname.\n\nsource\n\n\nget_UCR_univariate_list\n\n get_UCR_univariate_list ()\n\n\nsource\n\n\nget_UCR_multivariate_list\n\n get_UCR_multivariate_list ()\n\n\nsource\n\n\nget_UCR_data\n\n get_UCR_data (dsid, path='.', parent_dir='data/UCR', on_disk=True,\n mode='c', Xdtype='float32', ydtype=None, return_split=True,\n split_data=True, force_download=False, verbose=False)\n\n\nfrom fastai.data.transforms import get_files\n\n\nPATH = Path('.')\ndsids = ['ECGFiveDays', 'AtrialFibrillation'] # univariate and multivariate\nfor dsid in dsids:\n print(dsid)\n tgt_dir = PATH/f'data/UCR/{dsid}'\n if os.path.isdir(tgt_dir): shutil.rmtree(tgt_dir)\n test_eq(len(get_files(tgt_dir)), 0) # no file left\n X_train, y_train, X_valid, y_valid = get_UCR_data(dsid)\n test_eq(len(get_files(tgt_dir, '.npy')), 6)\n test_eq(len(get_files(tgt_dir, '.npy')), len(get_files(tgt_dir))) # test no left file/ dir\n del X_train, y_train, X_valid, y_valid\n X_train, y_train, X_valid, y_valid = get_UCR_data(dsid)\n test_eq(X_train.ndim, 3)\n test_eq(y_train.ndim, 1)\n test_eq(X_valid.ndim, 3)\n test_eq(y_valid.ndim, 1)\n test_eq(len(get_files(tgt_dir, '.npy')), 6)\n test_eq(len(get_files(tgt_dir, '.npy')), len(get_files(tgt_dir))) # test no left file/ dir\n test_eq(X_train.ndim, 3)\n test_eq(y_train.ndim, 1)\n test_eq(X_valid.ndim, 3)\n test_eq(y_valid.ndim, 1)\n test_eq(X_train.dtype, np.float32)\n test_eq(X_train.__class__.__name__, 'memmap')\n del X_train, y_train, X_valid, y_valid\n X_train, y_train, X_valid, y_valid = get_UCR_data(dsid, on_disk=False)\n test_eq(X_train.__class__.__name__, 'ndarray')\n del X_train, y_train, X_valid, y_valid\n\nECGFiveDays\nAtrialFibrillation\n\n\n\nX_train, y_train, X_valid, y_valid = get_UCR_data('natops')\n\n\ndsid = 'natops' \nX_train, y_train, X_valid, y_valid = get_UCR_data(dsid, verbose=True)\nX, y, splits = get_UCR_data(dsid, split_data=False)\ntest_eq(X[splits[0]], X_train)\ntest_eq(y[splits[1]], y_valid)\ntest_eq(X[splits[0]], X_train)\ntest_eq(y[splits[1]], y_valid)\ntest_type(X, X_train)\ntest_type(y, y_train)\n\nDataset: NATOPS\nX_train: (180, 24, 51)\ny_train: (180,)\nX_valid: (180, 24, 51)\ny_valid: (180,) \n\n\n\n\nsource\n\n\ncheck_data\n\n check_data (X, y=None, splits=None, show_plot=True)\n\n\ndsid = 'ECGFiveDays'\nX, y, splits = get_UCR_data(dsid, split_data=False, on_disk=False, force_download=False)\ncheck_data(X, y, splits)\ncheck_data(X[:, 0], y, splits)\ny = y.astype(np.float32)\ncheck_data(X, y, splits)\ny[:10] = np.nan\ncheck_data(X[:, 0], y, splits)\nX, y, splits = get_UCR_data(dsid, split_data=False, on_disk=False, force_download=False)\nsplits = get_splits(y, 3)\ncheck_data(X, y, splits)\ncheck_data(X[:, 0], y, splits)\ny[:5]= np.nan\ncheck_data(X[:, 0], y, splits)\nX, y, splits = get_UCR_data(dsid, split_data=False, on_disk=False, force_download=False)\n\nX - shape: [884 samples x 1 features x 136 timesteps] type: ndarray dtype:float32 isnan: 0\ny - shape: (884,) type: ndarray dtype:<U1 n_classes: 2 (442 samples per class) ['1', '2'] isnan: False\nsplits - n_splits: 2 shape: [23, 861] overlap: False\nX - shape: (884, 136) type: ndarray dtype:float32 isnan: 0\ny - shape: (884,) type: ndarray dtype:<U1 n_classes: 2 (442 samples per class) ['1', '2'] isnan: False\nsplits - n_splits: 2 shape: [23, 861] overlap: False\nX - shape: [884 samples x 1 features x 136 timesteps] type: ndarray dtype:float32 isnan: 0\ny - shape: (884,) type: ndarray dtype:float32 isnan: 0\nsplits - n_splits: 2 shape: [23, 861] overlap: False\nX - shape: (884, 136) type: ndarray dtype:float32 isnan: 0\ny - shape: (884,) type: ndarray dtype:float32 isnan: 10\nsplits - n_splits: 2 shape: [23, 861] overlap: False\nX - shape: [884 samples x 1 features x 136 timesteps] type: ndarray dtype:float32 isnan: 0\ny - shape: (884,) type: ndarray dtype:<U1 n_classes: 2 (442 samples per class) ['1', '2'] isnan: False\nsplits - n_splits: 3 shape: [[589, 295], [589, 295], [590, 294]] overlap: [False, False, False]\nX - shape: (884, 136) type: ndarray dtype:float32 isnan: 0\ny - shape: (884,) type: ndarray dtype:<U1 n_classes: 2 (442 samples per class) ['1', '2'] isnan: False\nsplits - n_splits: 3 shape: [[589, 295], [589, 295], [590, 294]] overlap: [False, False, False]\nX - shape: (884, 136) type: ndarray dtype:float32 isnan: 0\ny - shape: (884,) type: ndarray dtype:<U1 n_classes: 3 (294 samples per class) ['1', '2', 'n'] isnan: False\nsplits - n_splits: 3 shape: [[589, 295], [589, 295], [590, 294]] overlap: [False, False, False]\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/var/folders/42/4hhwknbd5kzcbq48tmy_gbp00000gn/T/ipykernel_70492/278801922.py:23: UserWarning: y contains nan values\n warnings.warn('y contains nan values')\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nsource\n\n\nget_Monash_regression_list\n\n get_Monash_regression_list ()\n\n\nsource\n\n\nget_Monash_regression_data\n\n get_Monash_regression_data (dsid, path='./data/Monash', on_disk=True,\n mode='c', Xdtype='float32', ydtype=None,\n split_data=True, force_download=False,\n verbose=False, timeout=4)\n\n\ndsid = \"Covid3Month\"\nX_train, y_train, X_valid, y_valid = get_Monash_regression_data(dsid, on_disk=False, split_data=True, force_download=False)\nX, y, splits = get_Monash_regression_data(dsid, on_disk=True, split_data=False, force_download=False, verbose=True)\nif X_train is not None: \n test_eq(X_train.shape, (140, 1, 84))\nif X is not None: \n test_eq(X.shape, (201, 1, 84))\n\nDataset: Covid3Month\nX : (201, 1, 84)\ny : (201,)\nsplits : (#140) [0,1,2,3,4,5,6,7,8,9...] (#61) [140,141,142,143,144,145,146,147,148,149...] \n\n\n\n\nsource\n\n\nget_forecasting_list\n\n get_forecasting_list ()\n\n\nsource\n\n\nget_forecasting_time_series\n\n get_forecasting_time_series (dsid, path='./data/forecasting/',\n force_download=False, verbose=True,\n **kwargs)\n\n\nts = get_forecasting_time_series(\"sunspots\", force_download=False)\ntest_eq(len(ts), 2820)\nts\n\nDataset: Sunspots\ndownloading data...\n...done. Path = data/forecasting/Sunspots.csv\n\n\n\n\n\n\n\n\n\nSunspots\n\n\nMonth\n\n\n\n\n\n1749-01-31\n58.0\n\n\n1749-02-28\n62.6\n\n\n1749-03-31\n70.0\n\n\n1749-04-30\n55.7\n\n\n1749-05-31\n85.0\n\n\n...\n...\n\n\n1983-08-31\n71.8\n\n\n1983-09-30\n50.3\n\n\n1983-10-31\n55.8\n\n\n1983-11-30\n33.3\n\n\n1983-12-31\n33.4\n\n\n\n\n2820 rows × 1 columns\n\n\n\n\nts = get_forecasting_time_series(\"weather\", force_download=False)\nif ts is not None: \n test_eq(len(ts), 70091)\n display(ts)\n\nDataset: Weather\ndownloading data...\n...done. Path = data/forecasting/Weather.csv.zip\n\n\n\n\n\n\n\n\n\np (mbar)\nT (degC)\nTpot (K)\nTdew (degC)\nrh (%)\nVPmax (mbar)\nVPact (mbar)\nVPdef (mbar)\nsh (g/kg)\nH2OC (mmol/mol)\nrho (g/m**3)\nWx\nWy\nmax Wx\nmax Wy\nDay sin\nDay cos\nYear sin\nYear cos\n\n\n\n\n0\n996.50\n-8.05\n265.38\n-8.78\n94.40\n3.33\n3.14\n0.19\n1.96\n3.15\n1307.86\n-0.204862\n-0.046168\n-0.614587\n-0.138503\n-1.776611e-12\n1.000000\n0.009332\n0.999956\n\n\n1\n996.62\n-8.88\n264.54\n-9.77\n93.20\n3.12\n2.90\n0.21\n1.81\n2.91\n1312.25\n-0.245971\n-0.044701\n-0.619848\n-0.112645\n2.588190e-01\n0.965926\n0.010049\n0.999950\n\n\n2\n996.84\n-8.81\n264.59\n-9.66\n93.50\n3.13\n2.93\n0.20\n1.83\n2.94\n1312.18\n-0.175527\n0.039879\n-0.614344\n0.139576\n5.000000e-01\n0.866025\n0.010766\n0.999942\n\n\n3\n996.99\n-9.05\n264.34\n-10.02\n92.60\n3.07\n2.85\n0.23\n1.78\n2.85\n1313.61\n-0.050000\n-0.086603\n-0.190000\n-0.329090\n7.071068e-01\n0.707107\n0.011483\n0.999934\n\n\n4\n997.46\n-9.63\n263.72\n-10.65\n92.20\n2.94\n2.71\n0.23\n1.69\n2.71\n1317.19\n-0.368202\n0.156292\n-0.810044\n0.343843\n8.660254e-01\n0.500000\n0.012199\n0.999926\n\n\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n\n\n70086\n1002.18\n-0.98\n272.01\n-5.36\n72.00\n5.69\n4.09\n1.59\n2.54\n4.08\n1280.70\n-0.855154\n-0.160038\n-1.336792\n-0.250174\n-9.990482e-01\n0.043619\n0.006183\n0.999981\n\n\n70087\n1001.40\n-1.40\n271.66\n-6.84\n66.29\n5.51\n3.65\n1.86\n2.27\n3.65\n1281.87\n-0.716196\n-0.726267\n-1.348134\n-1.367090\n-9.537170e-01\n0.300706\n0.006900\n0.999976\n\n\n70088\n1001.19\n-2.75\n270.32\n-6.90\n72.90\n4.99\n3.64\n1.35\n2.26\n3.63\n1288.02\n-0.661501\n0.257908\n-1.453438\n0.566672\n-8.433914e-01\n0.537300\n0.007617\n0.999971\n\n\n70089\n1000.65\n-2.89\n270.22\n-7.15\n72.30\n4.93\n3.57\n1.37\n2.22\n3.57\n1288.03\n-0.280621\n-0.209169\n-0.545207\n-0.406385\n-6.755902e-01\n0.737277\n0.008334\n0.999965\n\n\n70090\n1000.11\n-3.93\n269.23\n-8.09\n72.60\n4.56\n3.31\n1.25\n2.06\n3.31\n1292.41\n-0.516998\n-0.215205\n-0.923210\n-0.384295\n-4.617486e-01\n0.887011\n0.009050\n0.999959\n\n\n\n\n70091 rows × 19 columns\n\n\n\n\nsource\n\n\nconvert_tsf_to_dataframe\n\n convert_tsf_to_dataframe (full_file_path_and_name,\n replace_missing_vals_with='NaN',\n value_column_name='series_value')\n\n\nsource\n\n\nget_Monash_forecasting_data\n\n get_Monash_forecasting_data (dsid, path='./data/forecasting/',\n force_download=False,\n remove_from_disk=False, add_timestamp=True,\n verbose=True)\n\n\nsource\n\n\nget_fcst_horizon\n\n get_fcst_horizon (frequency, dsid)\n\n\nsource\n\n\npreprocess_Monash_df\n\n preprocess_Monash_df (df, frequency)\n\n\ndsid = 'covid_deaths_dataset'\ndf = get_Monash_forecasting_data(dsid, force_download=False)\nif df is not None: \n test_eq(df.shape, (56392, 3))\n\nDataset: covid_deaths_dataset\ndownloading data...\n...data downloaded\ndecompressing data...\n...data decompressed\nconverting data to dataframe...\n...done\n\nfreq : daily\nforecast_horizon : 30\ncontain_missing_values : False\ncontain_equal_length : True\n\nexploding dataframe...\n...done\n\n\ndata.shape: (56392, 3)\n\n\n\nsource\n\n\ndownload_all_long_term_forecasting_data\n\n download_all_long_term_forecasting_data\n (target_dir='./data/long_forecas\n ting/', force_download=False,\n remove_zip=False,\n c_key='archive', timeout=4,\n verbose=True)\n\n\nsource\n\n\nunzip_file\n\n unzip_file (file, target_dir)\n\n\nsource\n\n\nget_long_term_forecasting_data\n\n get_long_term_forecasting_data (dsid,\n target_dir='./data/long_forecasting/',\n task='M', fcst_horizon=None,\n fcst_history=None, preprocess=True,\n force_download=False, remove_zip=False,\n return_df=True, show_plot=True,\n dtype=<class 'numpy.float32'>,\n verbose=True, **kwargs)\n\nDownloads (and preprocess) a pandas dataframe with the requested long-term forecasting dataset\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndsid\n\n\nID of the dataset to be used for long-term forecasting.\n\n\ntarget_dir\nstr\n./data/long_forecasting/\nDirectory where the long-term forecasting data will be saved.\n\n\ntask\nstr\nM\n‘M’ for multivariate, ‘S’ for univariate and ‘MS’ for multivariate input with univariate output\n\n\nfcst_horizon\nNoneType\nNone\n# historical steps used as input. If None, the default is applied.\n\n\nfcst_history\nNoneType\nNone\n# steps forecasted into the future. If None, the minimum default is applied.\n\n\npreprocess\nbool\nTrue\nFlag that indicates whether if the data is preprocessed before saving.\n\n\nforce_download\nbool\nFalse\nFlag that indicates if the data should be downloaded again even if directory exists.\n\n\nremove_zip\nbool\nFalse\nFlag that indicates if the zip file should be removed after extracting the data.\n\n\nreturn_df\nbool\nTrue\nFlag that indicates whether a dataframe (True) or X and and y arrays (False) are returned.\n\n\nshow_plot\nbool\nTrue\nplot the splits\n\n\ndtype\ntype\nfloat32\n\n\n\nverbose\nbool\nTrue\nFlag tto indicate the verbosity.\n\n\nkwargs\n\n\n\n\n\n\n\ndsid = \"ILI\"\ntry:\n df = get_long_term_forecasting_data(dsid, target_dir='./data/forecasting/', force_download=False)\n print(f\"{dsid:15}: {str(df.shape):15}\")\n del df; gc.collect()\n remove_dir('./data/forecasting/', False)\nexcept Exception as e:\n print(f\"{dsid:15}: {str(e):15}\")\n\n\n\n\n\n\n \n \n 100.01% [54001664/53995526 00:09<00:00]\n \n \n\n\n/Users/nacho/opt/anaconda3/envs/py39t20/lib/python3.9/site-packages/fastai/tabular/core.py:23: UserWarning: The argument 'infer_datetime_format' is deprecated and will be removed in a future version. A strict version of it is now the default, see https://pandas.pydata.org/pdeps/0004-consistent-to-datetime-parsing.html. You can safely remove this argument.\n df[date_field] = pd.to_datetime(df[date_field], infer_datetime_format=True)\n\n\nILI : (966, 8) \n\n\n\ndsid = \"ILI\"\ntry:\n X, y, splits, stats = get_long_term_forecasting_data(dsid, target_dir='./data/forecasting/', force_download=False, return_df=False, show_plot=False)\n print(f\"{dsid:15} - X.shape: {str(X.shape):20} y.shape: {str(y.shape):20} splits: {str([len(s) for s in splits]):25} \\\nstats: {str([s.shape for s in stats]):30}\")\n del X, y, splits, stats\n gc.collect()\n remove_dir('./data/forecasting/', False)\nexcept Exception as e:\n print(f\"{dsid:15}: {str(e):15}\")\n\n\n\n\n\n\n \n \n 100.01% [54001664/53995526 00:09<00:00]\n \n \n\n\n/Users/nacho/opt/anaconda3/envs/py39t20/lib/python3.9/site-packages/fastai/tabular/core.py:23: UserWarning: The argument 'infer_datetime_format' is deprecated and will be removed in a future version. A strict version of it is now the default, see https://pandas.pydata.org/pdeps/0004-consistent-to-datetime-parsing.html. You can safely remove this argument.\n df[date_field] = pd.to_datetime(df[date_field], infer_datetime_format=True)\n\n\nILI - X.shape: (839, 7, 104) y.shape: (839, 7, 24) splits: [549, 74, 170] stats: [(1, 7, 1), (1, 7, 1)]", + "crumbs": [ + "Data", + "External data" + ] + }, + { + "objectID": "metrics.html", + "href": "metrics.html", + "title": "Metrics", + "section": "", + "text": "Metrics not included in fastai.\n\n\nsource\n\nMatthewsCorrCoefBinary\n\n MatthewsCorrCoefBinary (sample_weight=None)\n\nMatthews correlation coefficient for single-label classification problems\n\nsource\n\n\nget_task_metrics\n\n get_task_metrics (dls, binary_metrics=None, multi_class_metrics=None,\n regression_metrics=None, verbose=True)\n\nAll metrics applicable to multi classification have been created by Doug Williams (https://github.com/williamsdoug). Thanks a lot Doug!!\n\nsource\n\n\nF1_multi\n\n F1_multi (*args, **kwargs)\n\n\nsource\n\n\nFbeta_multi\n\n Fbeta_multi (inp, targ, beta=1.0, thresh=0.5, sigmoid=True)\n\nComputes Fbeta when inp and targ are the same size.\n\nsource\n\n\nbalanced_accuracy_multi\n\n balanced_accuracy_multi (inp, targ, thresh=0.5, sigmoid=True)\n\nComputes balanced accuracy when inp and targ are the same size.\n\nsource\n\n\nspecificity_multi\n\n specificity_multi (inp, targ, thresh=0.5, sigmoid=True)\n\nComputes specificity (true negative rate) when inp and targ are the same size.\n\nsource\n\n\nrecall_multi\n\n recall_multi (inp, targ, thresh=0.5, sigmoid=True)\n\nComputes recall when inp and targ are the same size.\n\nsource\n\n\nprecision_multi\n\n precision_multi (inp, targ, thresh=0.5, sigmoid=True)\n\nComputes precision when inp and targ are the same size.\n\nsource\n\n\nmetrics_multi_common\n\n metrics_multi_common (inp, targ, thresh=0.5, sigmoid=True,\n by_sample=False)\n\nComputes TP, TN, FP, FN when inp and targ are the same size.\n\nsource\n\n\naccuracy_multi\n\n accuracy_multi (inp, targ, thresh=0.5, sigmoid=True, by_sample=False)\n\nComputes accuracy when inp and targ are the same size.\n\nsource\n\n\nmae\n\n mae (inp, targ)\n\nMean absolute error between inp and targ.\n\nsource\n\n\nmape\n\n mape (inp, targ)\n\nMean absolute percentage error between inp and targ.\n\nn_classes = 4\ninp = torch.normal(0, 1, (16, 20, n_classes))\ntarg = torch.randint(0, n_classes, (16, 20)).to(torch.int8)\n_mAP(inp, targ)\n\n0.27493315845795063", + "crumbs": [ + "Training", + "Metrics" + ] + }, + { + "objectID": "models.xresnet1dplus.html", + "href": "models.xresnet1dplus.html", + "title": "XResNet1dPlus", + "section": "", + "text": "This is a modified version of fastai’s XResNet model in github\n\n\nsource\n\nXResNet1dPlus\n\n XResNet1dPlus (block=<class 'tsai.models.layers.ResBlock1dPlus'>,\n expansion=4, layers=[3, 4, 6, 3], fc_dropout=0.0, c_in=3,\n c_out=None, n_out=1000, seq_len=None, stem_szs=(32, 32,\n 64), widen=1.0, sa=False, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ks=3, stride=2,\n coord=False, custom_head=None, block_szs_base=(64, 128,\n 256, 512), groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sym=False, norm='Batch', zero_norm=True,\n pool=<function AvgPool>, pool_first=True)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nxresnet1d50_deeperplus\n\n xresnet1d50_deeperplus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2,\n ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True,\n transpose=False, init='auto', xtra=None,\n bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None,\n dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d34_deeperplus\n\n xresnet1d34_deeperplus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2,\n ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True,\n transpose=False, init='auto', xtra=None,\n bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None,\n dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d18_deeperplus\n\n xresnet1d18_deeperplus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2,\n ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True,\n transpose=False, init='auto', xtra=None,\n bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None,\n dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d50_deepplus\n\n xresnet1d50_deepplus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,\n pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True,\n transpose=False, init='auto', xtra=None,\n bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d34_deepplus\n\n xresnet1d34_deepplus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,\n pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True,\n transpose=False, init='auto', xtra=None,\n bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d18_deepplus\n\n xresnet1d18_deepplus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,\n pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True,\n transpose=False, init='auto', xtra=None,\n bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d152plus\n\n xresnet1d152plus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None, dw=False,\n g2=1, sa=False, sym=False, norm_type=<NormType.Batch:\n 1>, act_cls=<class 'torch.nn.modules.activation.ReLU'>,\n ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True, transpose=False,\n init='auto', xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d101plus\n\n xresnet1d101plus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None, dw=False,\n g2=1, sa=False, sym=False, norm_type=<NormType.Batch:\n 1>, act_cls=<class 'torch.nn.modules.activation.ReLU'>,\n ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True, transpose=False,\n init='auto', xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d50plus\n\n xresnet1d50plus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1, groups=1,\n reduction=None, nh1=None, nh2=None, dw=False, g2=1,\n sa=False, sym=False, norm_type=<NormType.Batch: 1>,\n act_cls=<class 'torch.nn.modules.activation.ReLU'>,\n ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True, transpose=False,\n init='auto', xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d34plus\n\n xresnet1d34plus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1, groups=1,\n reduction=None, nh1=None, nh2=None, dw=False, g2=1,\n sa=False, sym=False, norm_type=<NormType.Batch: 1>,\n act_cls=<class 'torch.nn.modules.activation.ReLU'>,\n ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True, transpose=False,\n init='auto', xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d18plus\n\n xresnet1d18plus (c_in, c_out, seq_len=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1, groups=1,\n reduction=None, nh1=None, nh2=None, dw=False, g2=1,\n sa=False, sym=False, norm_type=<NormType.Batch: 1>,\n act_cls=<class 'torch.nn.modules.activation.ReLU'>,\n ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True, transpose=False,\n init='auto', xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nseq_len\nNoneType\nNone\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nnet = xresnet1d18plus(3, 2, coord=True)\nx = torch.rand(32, 3, 50)\nnet(x)\n\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [2, 2, 2, 2]\n\n\nTensorBase([[ 0.1829, 0.3597],\n [ 0.0274, -0.1443],\n [ 0.0240, -0.2374],\n [-0.1323, -0.6574],\n [ 0.1481, -0.1438],\n [ 0.2410, -0.1225],\n [-0.1186, -0.1978],\n [-0.0640, -0.4547],\n [-0.0229, -0.3214],\n [ 0.2336, -0.4466],\n [-0.1843, -0.0934],\n [-0.0416, 0.1997],\n [-0.0109, -0.0253],\n [ 0.3014, -0.2193],\n [ 0.0966, 0.0602],\n [ 0.2364, 0.2209],\n [-0.1437, -0.1476],\n [ 0.0070, -0.2900],\n [ 0.2807, 0.4797],\n [-0.2386, -0.1563],\n [ 0.1620, -0.2285],\n [ 0.0479, -0.2348],\n [ 0.1573, -0.4420],\n [-0.5469, 0.1512],\n [ 0.0243, -0.1806],\n [ 0.3396, 0.1434],\n [ 0.0666, -0.1644],\n [ 0.3286, -0.5637],\n [ 0.0993, -0.6281],\n [-0.1068, -0.0763],\n [-0.2713, 0.1946],\n [-0.1416, -0.4043]], grad_fn=<AliasBackward0>)\n\n\n\nbs, c_in, seq_len = 2, 4, 32\nc_out = 2\nx = torch.rand(bs, c_in, seq_len)\narchs = [\n xresnet1d18plus, xresnet1d34plus, xresnet1d50plus, \n xresnet1d18_deepplus, xresnet1d34_deepplus, xresnet1d50_deepplus, xresnet1d18_deeperplus,\n xresnet1d34_deeperplus, xresnet1d50_deeperplus\n# # Long test\n# xresnet1d101, xresnet1d152,\n]\nfor i, arch in enumerate(archs):\n print(i, arch.__name__)\n test_eq(arch(c_in, c_out, sa=True, act=Mish, coord=True)(x).shape, (bs, c_out))\n\n0 xresnet1d18plus\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [2, 2, 2, 2]\n1 xresnet1d34plus\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [3, 4, 6, 3]\n2 xresnet1d50plus\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 4 layers [3, 4, 6, 3]\n3 xresnet1d18_deepplus\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [2, 2, 2, 2, 1, 1]\n4 xresnet1d34_deepplus\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [3, 4, 6, 3, 1, 1]\n5 xresnet1d50_deepplus\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 4 layers [3, 4, 6, 3, 1, 1]\n6 xresnet1d18_deeperplus\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [2, 2, 1, 1, 1, 1, 1, 1]\n7 xresnet1d34_deeperplus\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [3, 4, 6, 3, 1, 1, 1, 1]\n8 xresnet1d50_deeperplus\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 4 layers [3, 4, 6, 3, 1, 1, 1, 1]\n\n\n\nm = xresnet1d34plus(4, 2, act=Mish)\ntest_eq(len(get_layers(m, is_bn)), 38)\ntest_eq(check_weight(m, is_bn)[0].sum(), 22)\n\nblock <class 'tsai.models.layers.ResBlock1dPlus'> expansion 1 layers [3, 4, 6, 3]", + "crumbs": [ + "Models", + "CNNs", + "XResNet1dPlus" + ] + }, + { + "objectID": "models.rnn_fcn.html", + "href": "models.rnn_fcn.html", + "title": "RNN_FCN", + "section": "", + "text": "This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co\n\n\nsource\n\nMGRU_FCN\n\n MGRU_FCN (*args, se=16, **kwargs)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nMLSTM_FCN\n\n MLSTM_FCN (*args, se=16, **kwargs)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nMRNN_FCN\n\n MRNN_FCN (*args, se=16, **kwargs)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nGRU_FCN\n\n GRU_FCN (c_in, c_out, seq_len=None, hidden_size=100, rnn_layers=1,\n bias=True, cell_dropout=0, rnn_dropout=0.8, bidirectional=False,\n shuffle=True, fc_dropout=0.0, conv_layers=[128, 256, 128],\n kss=[7, 5, 3], se=0)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nLSTM_FCN\n\n LSTM_FCN (c_in, c_out, seq_len=None, hidden_size=100, rnn_layers=1,\n bias=True, cell_dropout=0, rnn_dropout=0.8,\n bidirectional=False, shuffle=True, fc_dropout=0.0,\n conv_layers=[128, 256, 128], kss=[7, 5, 3], se=0)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nRNN_FCN\n\n RNN_FCN (c_in, c_out, seq_len=None, hidden_size=100, rnn_layers=1,\n bias=True, cell_dropout=0, rnn_dropout=0.8, bidirectional=False,\n shuffle=True, fc_dropout=0.0, conv_layers=[128, 256, 128],\n kss=[7, 5, 3], se=0)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 16\nn_vars = 3\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\ntest_eq(RNN_FCN(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])\ntest_eq(LSTM_FCN(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])\ntest_eq(MLSTM_FCN(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])\ntest_eq(GRU_FCN(n_vars, c_out, shuffle=False)(xb).shape, [bs, c_out])\ntest_eq(GRU_FCN(n_vars, c_out, seq_len, shuffle=False)(xb).shape, [bs, c_out])\n\n\nLSTM_FCN(n_vars, seq_len, c_out, se=8)\n\nLSTM_FCN(\n (rnn): LSTM(2, 100, batch_first=True)\n (rnn_dropout): Dropout(p=0.8, inplace=False)\n (convblock1): ConvBlock(\n (0): Conv1d(3, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (se1): SqueezeExciteBlock(\n (avg_pool): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Flatten(full=False)\n )\n (fc): Sequential(\n (0): Linear(in_features=128, out_features=16, bias=False)\n (1): ReLU()\n (2): Linear(in_features=16, out_features=128, bias=False)\n (3): Sigmoid()\n )\n )\n (convblock2): ConvBlock(\n (0): Conv1d(128, 256, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)\n (1): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (se2): SqueezeExciteBlock(\n (avg_pool): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Flatten(full=False)\n )\n (fc): Sequential(\n (0): Linear(in_features=256, out_features=32, bias=False)\n (1): ReLU()\n (2): Linear(in_features=32, out_features=256, bias=False)\n (3): Sigmoid()\n )\n )\n (convblock3): ConvBlock(\n (0): Conv1d(256, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (gap): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Flatten(full=False)\n )\n (concat): Concat(dim=1)\n (fc): Linear(in_features=228, out_features=12, bias=True)\n)", + "crumbs": [ + "Models", + "Hybrid models", + "RNN_FCN" + ] + }, + { + "objectID": "models.mlp.html", + "href": "models.mlp.html", + "title": "MLP", + "section": "", + "text": "This is an unofficial PyTorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on:\nFawaz, H. I., Forestier, G., Weber, J., Idoumghar, L., & Muller, P. A. (2019). Deep learning for time series classification: a review. Data Mining and Knowledge Discovery, 33(4), 917-963.\nOfficial MLP TensorFlow implementation: https://github.com/hfawaz/dl-4-tsc/blob/master/classifiers/mlp.py\n\nsource\n\nMLP\n\n MLP (c_in, c_out, seq_len, layers=[500, 500, 500], ps=[0.1, 0.2, 0.2],\n act=ReLU(inplace=True), use_bn=False, bn_final=False,\n lin_first=False, fc_dropout=0.0, y_range=None)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 16\nnvars = 3\nseq_len = 128\nc_out = 2\nxb = torch.rand(bs, nvars, seq_len)\nmodel = MLP(nvars, c_out, seq_len)\ntest_eq(model(xb).shape, (bs, c_out))\nmodel\n\nMLP(\n (flatten): Reshape(bs)\n (mlp): ModuleList(\n (0): LinBnDrop(\n (0): Dropout(p=0.1, inplace=False)\n (1): Linear(in_features=384, out_features=500, bias=True)\n (2): ReLU(inplace=True)\n )\n (1): LinBnDrop(\n (0): Dropout(p=0.2, inplace=False)\n (1): Linear(in_features=500, out_features=500, bias=True)\n (2): ReLU(inplace=True)\n )\n (2): LinBnDrop(\n (0): Dropout(p=0.2, inplace=False)\n (1): Linear(in_features=500, out_features=500, bias=True)\n (2): ReLU(inplace=True)\n )\n )\n (head): Sequential(\n (0): LinBnDrop(\n (0): Linear(in_features=500, out_features=2, bias=True)\n )\n )\n)", + "crumbs": [ + "Models", + "MLPs", + "MLP" + ] + }, + { + "objectID": "models.tst.html", + "href": "models.tst.html", + "title": "TST", + "section": "", + "text": "This is an unofficial PyTorch implementation by Ignacio Oguiza of - oguiza@timeseriesAI.co based on: * George Zerveas et al. A Transformer-based Framework for Multivariate Time Series Representation Learning, in Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery and Data Mining (KDD ’21), August 14–18, 2021. ArXiV version: https://arxiv.org/abs/2010.02803 * Official implementation: https://github.com/gzerveas/mvts_transformer\nThis paper uses ‘Attention is all you need’ as a major reference: * Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., … & Polosukhin, I. (2017). Attention is all you need. In Advances in neural information processing systems (pp. 5998-6008).\nThis implementation is adapted to work with the rest of the tsai library, and contain some hyperparameters that are not available in the original implementation. They are included to experiment with them.", + "crumbs": [ + "Models", + "Transformers", + "TST" + ] + }, + { + "objectID": "models.tst.html#tst-arguments", + "href": "models.tst.html#tst-arguments", + "title": "TST", + "section": "TST arguments", + "text": "TST arguments\nUsual values are the ones that appear in the “Attention is all you need” and “A Transformer-based Framework for Multivariate Time Series Representation Learning” papers.\nThe default values are the ones selected as a default configuration in the latter.\n\nc_in: the number of features (aka variables, dimensions, channels) in the time series dataset. dls.var\nc_out: the number of target classes. dls.c\nseq_len: number of time steps in the time series. dls.len\nmax_seq_len: useful to control the temporal resolution in long time series to avoid memory issues. Default. None.\nd_model: total dimension of the model (number of features created by the model). Usual values: 128-1024. Default: 128.\nn_heads: parallel attention heads. Usual values: 8-16. Default: 16.\nd_k: size of the learned linear projection of queries and keys in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.\nd_v: size of the learned linear projection of values in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.\nd_ff: the dimension of the feedforward network model. Usual values: 256-4096. Default: 256.\ndropout: amount of residual dropout applied in the encoder. Usual values: 0.-0.3. Default: 0.1.\nactivation: the activation function of intermediate layer, relu or gelu. Default: ‘gelu’.\nn_layers: the number of sub-encoder-layers in the encoder. Usual values: 2-8. Default: 3.\nfc_dropout: dropout applied to the final fully connected layer. Usual values: 0.-0.8. Default: 0.\ny_range: range of possible y values (used in regression tasks). Default: None\nkwargs: nn.Conv1d kwargs. If not {}, a nn.Conv1d with those kwargs will be applied to original time series.", + "crumbs": [ + "Models", + "Transformers", + "TST" + ] + }, + { + "objectID": "models.tst.html#imports", + "href": "models.tst.html#imports", + "title": "TST", + "section": "Imports", + "text": "Imports", + "crumbs": [ + "Models", + "Transformers", + "TST" + ] + }, + { + "objectID": "models.tst.html#tst", + "href": "models.tst.html#tst", + "title": "TST", + "section": "TST", + "text": "TST\n\nt = torch.rand(16, 50, 128)\noutput, attn = _MultiHeadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)(t, t, t)\noutput.shape, attn.shape\n\n(torch.Size([16, 50, 128]), torch.Size([16, 3, 50, 50]))\n\n\n\nt = torch.rand(16, 50, 128)\noutput = _TSTEncoderLayer(q_len=50, d_model=128, n_heads=3, d_k=None, d_v=None, d_ff=512, dropout=0.1, activation='gelu')(t)\noutput.shape\n\ntorch.Size([16, 50, 128])\n\n\n\nsource\n\nTST\n\n TST (c_in:int, c_out:int, seq_len:int, max_seq_len:Optional[int]=None,\n n_layers:int=3, d_model:int=128, n_heads:int=16,\n d_k:Optional[int]=None, d_v:Optional[int]=None, d_ff:int=256,\n dropout:float=0.1, act:str='gelu', fc_dropout:float=0.0,\n y_range:Optional[tuple]=None, verbose:bool=False, **kwargs)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 32\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 5000\n\nxb = torch.randn(bs, c_in, seq_len)\n\n# standardize by channel by_var based on the training set\nxb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)\n\n# Settings\nmax_seq_len = 256\nd_model = 128\nn_heads = 16\nd_k = d_v = None # if None --> d_model // n_heads\nd_ff = 256\ndropout = 0.1\nactivation = \"gelu\"\nn_layers = 3\nfc_dropout = 0.1\nkwargs = {}\n\nmodel = TST(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, dropout=dropout, activation=activation, n_layers=n_layers,\n fc_dropout=fc_dropout, **kwargs)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 517378\n\n\n\nbs = 32\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 60\n\nxb = torch.randn(bs, c_in, seq_len)\n\n# standardize by channel by_var based on the training set\nxb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)\n\n# Settings\nmax_seq_len = 120\nd_model = 128\nn_heads = 16\nd_k = d_v = None # if None --> d_model // n_heads\nd_ff = 256\ndropout = 0.1\nact = \"gelu\"\nn_layers = 3\nfc_dropout = 0.1\nkwargs = {}\n# kwargs = dict(kernel_size=5, padding=2)\n\nmodel = TST(c_in, c_out, seq_len, max_seq_len=max_seq_len, d_model=d_model, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, dropout=dropout, act=act, n_layers=n_layers,\n fc_dropout=fc_dropout, **kwargs)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 420226", + "crumbs": [ + "Models", + "Transformers", + "TST" + ] + }, + { + "objectID": "data.validation.html", + "href": "data.validation.html", + "title": "Spliting data", + "section": "", + "text": "Functions required to perform cross-validation and transform unique time series sequence into multiple samples ready to be used by a time series model.\n\n\nsource\n\nRandomSplitter\n\n RandomSplitter (valid_pct=0.2, seed=None)\n\nCreate function that splits items between train/val with valid_pct randomly.\n\nsource\n\n\nbalance_idx\n\n balance_idx (o, shuffle=False, strategy='oversample', random_state=None,\n verbose=False)\n\n\nsource\n\n\nleakage_finder\n\n leakage_finder (*splits, verbose=True)\n\nYou can pass splits as a tuple, or train, valid, …\n\nsource\n\n\ncheck_splits_overlap\n\n check_splits_overlap (splits)\n\n\nsource\n\n\ncheck_overlap\n\n check_overlap (a, b, c=None)\n\nChecks if there’s overlap between array-like objects\n\na = np.arange(10)\nb = np.arange(10, 20)\ntest_eq(check_overlap(a, b), False)\na = np.arange(10)\nb = np.arange(9, 20)\ntest_eq(check_overlap(a, b), [9])\na = np.arange(10)\nb = np.arange(10, 20)\nc = np.arange(20, 30)\ntest_eq(check_overlap(a, b, c), False)\na = np.arange(10)\nb = np.arange(10, 20)\nc = np.arange(10, 30)\ntest_eq(check_overlap(a, b, c), ([], [], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]))\n\n\ny = np.concatenate([[i] * np.random.randint(10, 100) for i in range(5)])\ntrain_split = np.random.choice(len(y), int(len(y) * .8), False)\nc, v = np.unique(y[train_split], return_counts=True)\nprint(f\"{'imbalanced:':25} {c} {v}\")\n\noversampled_train_split = train_split[balance_idx(y[train_split], strategy=\"oversample\")]\nosc, osv = np.unique(y[oversampled_train_split], return_counts=True)\nprint(f\"{'balanced (oversample):':25} {osc} {osv}\")\ntest_eq(osv, [max(v)] * len(v))\n\nundersampled_train_split = train_split[balance_idx(y[train_split], strategy=\"undersample\")]\nusc, usv = np.unique(y[undersampled_train_split], return_counts=True)\nprint(f\"{'balanced (undersample):':25} {usc} {usv}\")\ntest_eq(usv, [min(v)] * len(v))\n\nimbalanced: [0 1 2 3 4] [24 43 64 41 8]\nbalanced (oversample): [0 1 2 3 4] [64 64 64 64 64]\nbalanced (undersample): [0 1 2 3 4] [8 8 8 8 8]\n\n\n\nl = L(list(concat(np.zeros(5), np.ones(10)).astype(int)))\nbalanced_idx = balance_idx(l)\ntest_eq(np.mean(l[balanced_idx]), 0.5)\ntest_eq(isinstance(balanced_idx, L), True)\n\nl = list(concat(np.zeros(5), np.ones(10)).astype(int))\nbalanced_idx = balance_idx(l)\ntest_eq(np.mean(L(l)[balanced_idx]), 0.5)\ntest_eq(isinstance(balanced_idx, L), True)\n\na = concat(np.zeros(5), np.ones(10)).astype(int)\nbalanced_idx = balance_idx(a)\ntest_eq(np.mean(a[balanced_idx]), 0.5)\ntest_eq(isinstance(balanced_idx, L), True)\n\nt = concat(torch.zeros(5), torch.ones(10))\nbalanced_idx = balance_idx(t, shuffle=True)\ntest_eq(t[balanced_idx].mean(), 0.5)\ntest_eq(isinstance(balanced_idx, L), True)\n\n\na, b = np.arange(100_000), np.arange(100_000, 200_000)\n\n\nsoft_labels = True\nfilter_pseudolabels = .5\nbalanced_pseudolabels = True\n\npseudolabels = torch.rand(1000, 3)\npseudolabels = torch.softmax(pseudolabels, -1) if soft_labels else torch.argmax(pseudolabels, -1)\nhpl = torch.argmax(pseudolabels, -1) if soft_labels else pseudolabels\n\nif filter_pseudolabels and pseudolabels.ndim > 1: \n error = 1 - pseudolabels.max(-1).values\n filt_pl_idx = np.arange(len(error))[error < filter_pseudolabels]\n filt_pl = pseudolabels[error < filter_pseudolabels]\n assert len(filt_pl) > 0, 'no filtered pseudolabels'\n filt_hpl = torch.argmax(filt_pl, -1)\nelse: \n filt_pl_idx = np.arange(len(pseudolabels))\n filt_pl = filt_hpl = pseudolabels\n\n\npl_split = filt_pl_idx[balance_idx(filt_hpl)] if balanced_pseudolabels else filt_pl_idx\ntest_eq(hpl[pl_split].float().mean(), np.mean(np.unique(hpl)))\n\n\nsource\n\n\nTrainValidTestSplitter\n\n TrainValidTestSplitter (n_splits:int=1, valid_size:Union[float,int]=0.2,\n test_size:Union[float,int]=0.0,\n train_only:bool=False, stratify:bool=True,\n balance:bool=False, strategy:str='oversample',\n shuffle:bool=True,\n random_state:Optional[int]=None,\n verbose:bool=False, **kwargs)\n\nSplit items into random train, valid (and test optional) subsets.\n\nsource\n\n\nplot_splits\n\n plot_splits (splits)\n\n\nsource\n\n\nget_splits\n\n get_splits (o, n_splits:int=1, valid_size:float=0.2, test_size:float=0.0,\n train_only:bool=False,\n train_size:Union[NoneType,float,int]=None,\n balance:bool=False, strategy:str='oversample',\n shuffle:bool=True, stratify:bool=True,\n check_splits:bool=True, random_state:Optional[int]=None,\n show_plot:bool=True, verbose:bool=False)\n\nArguments: o : object to which splits will be applied, usually target. n_splits : number of folds. Must be an int >= 1. valid_size : size of validation set. Only used if n_splits = 1. If n_splits > 1 valid_size = (1. - test_size) / n_splits. test_size : size of test set. Default = 0. train_only : if True valid set == train set. This may be useful for debugging purposes. train_size : size of the train set used. Default = None (the remainder after assigning both valid and test). Useful for to get learning curves with different train sizes or get a small batch to debug a neural net. balance : whether to balance data so that train always contain the same number of items per class. strategy : strategy to balance data (“undersample” or “oversample”). Default = “oversample”. shuffle : whether to shuffle data before splitting into batches. Note that the samples within each split will be shuffle. stratify : whether to create folds preserving the percentage of samples for each class. check_splits : whether to perform leakage and completion checks. random_state : when shuffle is True, random_state affects the ordering of the indices. Pass an int for reproducible output. show_plot : plot the split distribution\n\nn_splits = 5\nvalid_size = 0.2\ntest_size = 0.2\ntrain_only = False # set to True for debugging (valid = train)\ntrain_size = 5000\nstratify = True\nbalance = False\nshuffle = True\npredefined_splits = None\nshow_plot = True \n\n\ncheck_splits = True\nrandom_state = 23\n\ny = np.random.randint(0, 3, 10000) + 100\n\nsplits = get_splits(y, n_splits=n_splits, valid_size=valid_size, test_size=test_size, shuffle=shuffle, balance=balance, stratify=stratify,\n train_only=train_only, train_size=train_size, check_splits=check_splits, random_state=random_state, show_plot=show_plot, verbose=True)\nsplits\n\n\n\n\n\n\n\n\n(((#5000) [3490,2428,4475,8317,2802,6834,2954,7671,3383,9554...],\n (#1600) [1680,6677,5879,4428,5511,8312,372,5127,7012,3021...],\n (#2000) [1263,6498,1602,1838,1073,5304,1210,1037,8789,6175...]),\n ((#5000) [3442,4237,470,3901,3808,3793,6286,8546,6254,9530...],\n (#1600) [9160,5451,3628,143,2054,7225,7124,8057,1405,5089...],\n (#2000) [1263,6498,1602,1838,1073,5304,1210,1037,8789,6175...]),\n ((#5000) [9850,7451,7338,9742,3258,1527,4450,5678,2932,1693...],\n (#1600) [6186,5970,376,7848,3786,1663,7193,3647,3277,553...],\n (#2000) [1263,6498,1602,1838,1073,5304,1210,1037,8789,6175...]),\n ((#5000) [1853,7308,7375,3851,1852,3820,2601,3868,8718,7190...],\n (#1600) [4182,6419,6265,4837,168,9627,2500,9951,1610,7547...],\n (#2000) [1263,6498,1602,1838,1073,5304,1210,1037,8789,6175...]),\n ((#5000) [7878,6392,453,4817,4676,5738,6482,4033,8114,7337...],\n (#1600) [7682,6416,2877,9164,1583,342,2916,4806,8776,2046...],\n (#2000) [1263,6498,1602,1838,1073,5304,1210,1037,8789,6175...]))\n\n\n\ntrain_size=256\ny = np.random.randint(0, 3, 1000) + 100\nsplits = get_splits(y, train_size=train_size, train_only=True)\ntest_eq(splits[0], splits[1])\ntest_eq(len(splits[0]), train_size)\nsplits\n\nvalid == train\n\n\n\n\n\n\n\n\n\n((#256) [550,813,388,595,948,198,354,749,175,812...],\n (#256) [550,813,388,595,948,198,354,749,175,812...])\n\n\n\nsource\n\n\nget_walk_forward_splits\n\n get_walk_forward_splits (o, n_splits=1, train_size=None, valid_size=0.2,\n test_size=0.0, anchored=False, gap=0.0,\n test_after_valid=True, random_state=None,\n show_plot=True)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\no\n\n\n3D object with shape [samples x features x steps] containing the time series we need to split\n\n\nn_splits\nint\n1\n# of splits\n\n\ntrain_size\nNoneType\nNone\noptional: training set size as an int or a float. None when using and anchored strategy.\n\n\nvalid_size\nfloat\n0.2\nvalidation set size as an int or a float\n\n\ntest_size\nfloat\n0.0\ntest set size as an int or a float\n\n\nanchored\nbool\nFalse\nstarting point for train set remains the same for all splits\n\n\ngap\nfloat\n0.0\n# of samples to exclude from the end of each train set before the validation set. Entered as an int or a float\n\n\ntest_after_valid\nbool\nTrue\nflag to indicate if validation and test will be samples randomly or sequentially\n\n\nrandom_state\nNoneType\nNone\ninteger that can be used to generate reproducible results\n\n\nshow_plot\nbool\nTrue\nplots the splits created\n\n\n\n\no = np.random.rand(10_000, 3, 50) # shape: [samples x features x steps]\n\nsplits = get_walk_forward_splits(\n o, \n n_splits=4, \n train_size=.6,\n valid_size=0.1, \n test_size=0.1, \n anchored = True,\n gap = 100,\n test_after_valid = True,\n random_state = None,\n show_plot=True,\n)\n\nsplits = get_walk_forward_splits(\n o, \n n_splits=3, \n train_size=0.3,\n valid_size=0.1, \n test_size=0.1, \n anchored = False,\n gap = 0.,\n test_after_valid = False,\n random_state = None,\n show_plot=True,\n)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nsource\n\n\nTSSplitter\n\n TSSplitter (valid_size=0.2, test_size=0.0, fcst_horizon=0,\n show_plot=True)\n\nCreate function that splits items between train/val with valid_size without shuffling data.\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nvalid_size\nfloat\n0.2\nint or float indicating the validation set size\n\n\ntest_size\nfloat\n0.0\nint or float indicating the test set size\n\n\nfcst_horizon\nint\n0\nint that indicates the number of time steps removed at the end of train (and validation)\n\n\nshow_plot\nbool\nTrue\nflag that indicates if a plot showing the splits will be created\n\n\n\n\ny = np.arange(1000) + 100\ntest_eq(TimeSplitter(valid_size=0.2)(y)[1], L(np.arange(800, 1000).tolist()))\ntest_eq(TimeSplitter(valid_size=0.2)(y)[0], TimeSplitter(valid_size=200)(y)[0])\nTimeSplitter(valid_size=0.2, show_plot=True)(y)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n((#800) [0,1,2,3,4,5,6,7,8,9...],\n (#200) [800,801,802,803,804,805,806,807,808,809...])\n\n\n\nn_splits = 5\nvalid_size = 0.2 \ntest_size = 0\ntrain_only = False # set to True for debugging (valid = train)\ntrain_size = None\nstratify = True\nbalance = True\nshuffle = True\npredefined_splits = None\nshow_plot = True \n\n\ncheck_splits = True\nrandom_state = 23\n\nsplits = get_splits(y, n_splits=n_splits, valid_size=valid_size, test_size=test_size, shuffle=shuffle, balance=balance, stratify=stratify,\n train_only=train_only, train_size=train_size, check_splits=check_splits, random_state=random_state, show_plot=show_plot, verbose=True)\nsplit = splits[0] if n_splits == 1 else splits[0][0]\ny[split].mean(), split\n\nstratify set to False as n_splits=5 cannot be greater than the min number of members in each class (1).\n\n\n\n\n\n\n\n\n\n\nlist([splits[0], splits[1], splits[2], splits[3], splits[4]])\n\n[((#800) [314,194,782,789,502,917,137,415,904,181...],\n (#200) [362,151,934,378,95,597,500,117,980,844...]),\n ((#800) [312,198,777,788,515,910,145,413,898,186...],\n (#200) [352,133,955,396,64,596,442,79,991,882...]),\n ((#800) [311,197,783,791,507,922,145,416,908,184...],\n (#200) [338,125,912,361,54,594,486,88,994,859...]),\n ((#800) [296,181,782,789,493,917,130,401,905,165...],\n (#200) [405,199,953,444,113,610,515,137,997,881...]),\n ((#800) [320,190,782,788,506,906,141,412,893,178...],\n (#200) [336,149,942,358,49,582,472,70,990,907...])]\n\n\n\nn_splits = 5\nvalid_size = 0.\ntest_size = 0.\nshuffle = True\nstratify = True\ntrain_only = True\ntrain_size = None\ncheck_splits = True\nrandom_state = 1\nshow_plot = True \n\nsplits = get_splits(y, n_splits=n_splits, valid_size=valid_size, test_size=test_size, shuffle=shuffle, stratify=stratify,\n train_only=train_only, train_size=train_size, check_splits=check_splits, random_state=random_state, show_plot=show_plot, verbose=True)\nfor split in splits: \n test_eq(len(split[0]), len(y))\n test_eq(np.sort(split[0]), np.arange(len(y)))\n\nstratify set to False as n_splits=5 cannot be greater than the min number of members in each class (1).\nvalid == train\n\n\n\n\n\n\n\n\n\n\nn_splits = 5\ny = np.random.randint(0, 2, 1000)\n\nsplits = get_splits(y, n_splits=n_splits, shuffle=False, check_splits=True)\ntest_eq(np.concatenate((L(zip(*splits))[1])), np.arange(len(y)))\n\nsplits = get_splits(y, n_splits=n_splits, shuffle=True, check_splits=True)\ntest_eq(np.sort(np.concatenate((L(zip(*splits))[1]))), np.arange(len(y)))\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nn_splits = 2\ny = np.random.randint(0, 2, 1000)\n\nsplits = get_splits(y, n_splits=n_splits, test_size=0.2, shuffle=False)\nfor i in range(n_splits): leakage_finder(*splits[i])\ntest_eq(len(splits), n_splits)\ntest_eq(len(splits[0]), 3)\ns = []\n[s.extend(split) for split in splits[0]]\ntest_eq(np.sort(s), np.arange(len(y)))\ns = []\n[s.extend(split) for split in splits[1]]\ntest_eq(np.sort(s), np.arange(len(y)))\n\n\n\n\n\n\n\n\n\ny = np.random.randint(0, 2, 1000)\nsplits1 = get_splits(y, valid_size=.25, test_size=0, random_state=23, stratify=True, shuffle=True)\nsplits2 = get_splits(y, valid_size=.25, test_size=0, random_state=23, stratify=True, shuffle=True)\nsplits3 = get_splits(y, valid_size=.25, test_size=0, random_state=None, stratify=True, shuffle=True)\nsplits4 = get_splits(y, valid_size=.25, test_size=0, random_state=None, stratify=True, shuffle=True)\ntest_eq(splits1[0], splits2[0])\ntest_ne(splits3[0], splits4[0])\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ny = np.random.randint(0, 2, 100)\nsplits = get_splits(y, valid_size=.25, test_size=0, random_state=23, stratify=True, shuffle=True)\ntest_eq(len(splits), 2)\n\n\n\n\n\n\n\n\n\ny = np.random.randint(0, 2, 100)\nsplits = get_splits(y, valid_size=.25, test_size=0, random_state=23, stratify=True)\ntest_eq(len(splits), 2)\n\n\n\n\n\n\n\n\n\ny = np.random.randint(0, 2, 100)\nsplits = get_splits(y, valid_size=.25, test_size=20, random_state=23, stratify=True)\ntest_eq(len(splits), 3)\nleakage_finder(*splits)\n\n\n\n\n\n\n\n\n\nsplits = TrainValidTestSplitter(valid_size=.25, test_size=20, random_state=23, stratify=True)(np.random.randint(0, 2, 100))\ntest_eq(len(splits[1]), 25)\ntest_eq(len(splits[2]), 20)\n\n\no = np.random.randint(0, 2, 1000)\nfor p in [1, .75, .5, .25, .125]:\n splits = get_splits(o, train_size=p)\n test_eq(len(splits[0]), len(o) * .8 * p)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ny = L([0] * 50 + [1] * 25 + [2] * 15 + [3] * 10)\nsplits = get_splits(y, valid_size=.2, test_size=.2)\ntest_eq(np.mean(y[splits[0]])==np.mean(y[splits[1]])==np.mean(y[splits[2]]), True)\nsplits\n\n\n\n\n\n\n\n\n((#60) [58,95,53,44,28,69,9,12,22,88...],\n (#20) [89,71,60,4,19,37,75,13,46,30...],\n (#20) [76,68,74,29,16,97,14,21,90,82...])\n\n\n\ny = L([0] * 50 + [1] * 25 + [2] * 15 + [3] * 10)\nsplits = get_splits(y, n_splits=1, valid_size=.2, test_size=.2, shuffle=False)\n# test_eq(splits[0] + splits[1] + splits[2], np.arange(100))\nsplits\n\n\n\n\n\n\n\n\n((#60) [0,1,2,3,4,5,6,7,8,9...],\n (#20) [60,61,62,63,64,65,66,67,68,69...],\n (#20) [80,81,82,83,84,85,86,87,88,89...])\n\n\n\nsplits = get_splits(np.random.randint(0,5,100), valid_size=0.213, test_size=17)\ntest_eq(len(splits[1]), 21)\ntest_eq(len(splits[2]), 17)\n\n\n\n\n\n\n\n\n\nsplits = get_splits(np.random.randint(0,5,100), valid_size=0.213, test_size=17, train_size=.2)\nsplits\n\n\n\n\n\n\n\n\n((#12) [37,38,62,60,16,22,95,44,94,98...],\n (#21) [88,93,5,31,57,23,90,18,15,40...],\n (#17) [4,86,47,33,59,52,99,48,70,3...])\n\n\n\nsource\n\n\ncombine_split_data\n\n combine_split_data (xs, ys=None)\n\nxs is a list with X_train, X_valid, …. ys is None or a list with y_train, y_valid, ….\n\nsource\n\n\nget_predefined_splits\n\n get_predefined_splits (*xs)\n\nxs is a list with X_train, X_valid, …\n\nsource\n\n\nget_splits_len\n\n get_splits_len (splits)\n\n\nX_train, y_train, X_valid, y_valid = np.random.rand(3,3,4), np.random.randint(0,2,3), np.random.rand(2,3,4), np.random.randint(0,2,2)\nX, y, splits = combine_split_data([X_train, X_valid], [y_train, y_valid])\ntest_eq(X_train, X[splits[0]])\ntest_eq(X_valid, X[splits[1]])\ntest_type(X_train, X)\ntest_type(y_train, y)\n\n\nX_train, y_train, X_valid, y_valid = np.random.rand(3,4), np.random.randint(0,2,3), np.random.rand(2,4), np.random.randint(0,2,2)\nX, y, splits = combine_split_data([X_train, X_valid], [y_train, y_valid])\ntest_eq(X_train[:, None], X[splits[0]])\ntest_eq(X_valid[:, None], X[splits[1]])\ntest_type(X_train, X)\ntest_type(y_train, y)\n\n\n\nForecasting\n\nsource\n\nget_df_usable_idxs\n\n get_df_usable_idxs (df, fcst_history, fcst_horizon, stride=1,\n unique_id_cols=None, return_np_indices=False)\n\nCalculates the indices that can be used from a df when using a sliding window\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndf\n\n\ndataframe containing a sorted time series\n\n\nfcst_history\n\n\n# historical steps used as input (size of the sliding window for the input)\n\n\nfcst_horizon\n\n\n# steps forecasted into the future (size of the sliding window for the target)\n\n\nstride\nint\n1\nint or tuple of 2 int containing the strides of the sliding windows (input and target)\n\n\nunique_id_cols\nNoneType\nNone\nstr indicating the column/s with the unique identifier/s for each entity\n\n\nreturn_np_indices\nbool\nFalse\nbool indicating what type of indices are returned. Default to False (dataframe indices)\n\n\n\n\nsource\n\n\nget_usable_idxs\n\n get_usable_idxs (df, fcst_history, fcst_horizon, stride=1)\n\n\nsource\n\n\ncalculate_fcst_stats\n\n calculate_fcst_stats (df, fcst_history, fcst_horizon, splits,\n x_vars=None, y_vars=None, subset_size=None)\n\nCalculates the training stats required in a forecasting task\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndf\n\n\ndataframe containing a sorted time series for a single entity or subject\n\n\nfcst_history\n\n\n# historical steps used as input.\n\n\nfcst_horizon\n\n\n# steps forecasted into the future.\n\n\nsplits\n\n\nsplits that will be used to train the model. splits[0] is the train split:\n\n\nx_vars\nNoneType\nNone\nfeatures used as input\n\n\ny_vars\nNoneType\nNone\nfeatures used as output\n\n\nsubset_size\nNoneType\nNone\nint or float to determne the number of train samples used to calculate the mean and std\n\n\n\n\nsource\n\n\nget_forecasting_splits\n\n get_forecasting_splits (df, fcst_history, fcst_horizon, stride=1,\n valid_size=0.0, test_size=0.2,\n valid_cutoff_datetime=None,\n test_cutoff_datetime=None, datetime_col=None,\n use_index=False, unique_id_cols=None,\n show_plot=True)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndf\n\n\ndataframe containing a sorted time series\n\n\nfcst_history\n\n\n# historical steps used as input (size of the sliding window for the input)\n\n\nfcst_horizon\n\n\n# steps forecasted into the future (size of the sliding window for the target)\n\n\nstride\nint\n1\nint or tuple of 2 int containing the strides of the sliding windows (input and target)\n\n\nvalid_size\nfloat\n0.0\nint or float indicating the size of the training set (based on datetimes)\n\n\ntest_size\nfloat\n0.2\nint or float indicating the size of the test set (based on datetimes)\n\n\nvalid_cutoff_datetime\nNoneType\nNone\nfirst prediction datetime of validation dataset\n\n\ntest_cutoff_datetime\nNoneType\nNone\nfirst prediction datetime of test dataset\n\n\ndatetime_col\nNoneType\nNone\nstr indicating the column with the datetime values\n\n\nuse_index\nbool\nFalse\nflag to indicate if the datetime is in the index\n\n\nunique_id_cols\nNoneType\nNone\nstr indicating the column/s with the unique identifier/s for each entity\n\n\nshow_plot\nbool\nTrue\nflag to indicate if splits should be plotted\n\n\n\n\ndf1_len = 100\ndf2_len = 80\n\ndatetime_col = 'datetime' \ndf1 = pd.DataFrame(np.arange(df1_len), columns=['value'])\ndf1['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df1_len, freq='1D')\ndf1['type'] = 1\n\ndf = df1\ndisplay(df)\n\n# settings\nfcst_history = 10\nfcst_horizon = 1\nstride = 1\nunique_id_cols = 'type'\ndatetime_col = 'datetime' \nuse_index = False\nvalid_size = 0.1 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\ntest_size = 0.2 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\nvalid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset\ntest_cutoff_datetime = '1749-12-24' # first prediction datetime of test dataset\nvalid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\ntest_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\n\n\nsplits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, \n unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,\n valid_size=valid_size, test_size=test_size, \n valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)\n\nprint(f\"splits size : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})\")\n\n# settings\nfcst_history = 10\nfcst_horizon = 5\nstride = 5\nunique_id_cols = 'type'\ndatetime_col = 'datetime' \nuse_index = False\nvalid_size = 0.1 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\ntest_size = 0.2 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\nvalid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset\ntest_cutoff_datetime = '1749-12-24' # first prediction datetime of test dataset\nvalid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\ntest_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\n\n\nsplits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, \n unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,\n valid_size=valid_size, test_size=test_size, \n valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)\n\nprint(f\"splits size : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})\")\n\n\n\n\n\n\n\n\nvalue\ndatetime\ntype\n\n\n\n\n0\n0\n1749-03-31\n1\n\n\n1\n1\n1749-04-01\n1\n\n\n2\n2\n1749-04-02\n1\n\n\n3\n3\n1749-04-03\n1\n\n\n4\n4\n1749-04-04\n1\n\n\n...\n...\n...\n...\n\n\n95\n95\n1749-07-04\n1\n\n\n96\n96\n1749-07-05\n1\n\n\n97\n97\n1749-07-06\n1\n\n\n98\n98\n1749-07-07\n1\n\n\n99\n99\n1749-07-08\n1\n\n\n\n\n100 rows × 3 columns\n\n\n\n\n\n\n\n\n\n\nsplits size : [63, 9, 18] (90: [0.7, 0.1, 0.2])\nsplits size : [12, 2, 4] (18: [0.67, 0.11, 0.22])\n\n\n\n\n\n\n\n\n\n\ndf1_len = 100\ndf2_len = 80\n\ndatetime_col = 'datetime' \ndf1 = pd.DataFrame(np.arange(df1_len), columns=['value'])\ndf1['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df1_len, freq='1D')\ndf1['type'] = 1\ndf1_index = df1.set_index(\"datetime\")\n\ndf = df1_index\ndisplay(df)\n\n# settings\nfcst_history = 10\nfcst_horizon = 1\nstride = 1\nunique_id_cols = 'type'\ndatetime_col = 'datetime' \nuse_index = True\nvalid_size = 0.1 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\ntest_size = 0.2 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\nvalid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset\ntest_cutoff_datetime = '1749-12-24' # first prediction datetime of test dataset\nvalid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\ntest_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\n\n\nsplits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, \n unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,\n valid_size=valid_size, test_size=test_size, \n valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)\n\nprint(f\"splits size : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})\")\n\n# settings\nfcst_history = 10\nfcst_horizon = 5\nstride = 5\nunique_id_cols = 'type'\ndatetime_col = 'datetime' \nuse_index = True\nvalid_size = 0.1 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\ntest_size = 0.2 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\nvalid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset\ntest_cutoff_datetime = '1749-12-24' # first prediction datetime of test dataset\nvalid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\ntest_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\n\n\nsplits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, \n unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,\n valid_size=valid_size, test_size=test_size, \n valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)\n\nprint(f\"splits size : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})\")\n\n\n\n\n\n\n\n\nvalue\ntype\n\n\ndatetime\n\n\n\n\n\n\n1749-03-31\n0\n1\n\n\n1749-04-01\n1\n1\n\n\n1749-04-02\n2\n1\n\n\n1749-04-03\n3\n1\n\n\n1749-04-04\n4\n1\n\n\n...\n...\n...\n\n\n1749-07-04\n95\n1\n\n\n1749-07-05\n96\n1\n\n\n1749-07-06\n97\n1\n\n\n1749-07-07\n98\n1\n\n\n1749-07-08\n99\n1\n\n\n\n\n100 rows × 2 columns\n\n\n\n\n\n\n\n\n\n\nsplits size : [63, 9, 18] (90: [0.7, 0.1, 0.2])\nsplits size : [12, 2, 4] (18: [0.67, 0.11, 0.22])\n\n\n\n\n\n\n\n\n\n\ndf1_len = 100\ndf2_len = 80\n\ndatetime_col = 'datetime' \ndf1 = pd.DataFrame(np.arange(df1_len), columns=['value'])\ndf1['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df1_len, freq='1D')\ndf1['type'] = 1\ndf1_index = df1.set_index(\"datetime\")\ndf2 = pd.DataFrame(np.arange(df2_len) * 10, columns=['value'])\ndf2['datetime'] = pd.date_range(pd.to_datetime('1749-04-15'), periods=df2_len, freq='1D')\ndf2['type'] = 2\ndf_comb = pd.concat([df1, df2]).reset_index(drop=True).reset_index(drop=True)\n\n\ndf = df_comb\ndisplay(df)\n\n# settings\nfcst_history = 10\nfcst_horizon = 3\nstride = 1\nunique_id_cols = 'type'\ndatetime_col = 'datetime' \nuse_index = False\nvalid_size = 0.1 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\ntest_size = 0.2 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\nvalid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset\ntest_cutoff_datetime = '1749-12-24' # first prediction datetime of test dataset\nvalid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\ntest_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\n\n\nsplits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, \n unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,\n valid_size=valid_size, test_size=test_size, \n valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)\n\nprint(f\"splits size : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})\")\n\n\n\n\n\n\n\n\nvalue\ndatetime\ntype\n\n\n\n\n0\n0\n1749-03-31\n1\n\n\n1\n1\n1749-04-01\n1\n\n\n2\n2\n1749-04-02\n1\n\n\n3\n3\n1749-04-03\n1\n\n\n4\n4\n1749-04-04\n1\n\n\n...\n...\n...\n...\n\n\n175\n750\n1749-06-29\n2\n\n\n176\n760\n1749-06-30\n2\n\n\n177\n770\n1749-07-01\n2\n\n\n178\n780\n1749-07-02\n2\n\n\n179\n790\n1749-07-03\n2\n\n\n\n\n180 rows × 3 columns\n\n\n\n\n\n\n\n\n\n\nsplits size : [101, 16, 31] (148: [0.68, 0.11, 0.21])\n\n\n\ndf1_len = 100\ndf2_len = 80\n\ndatetime_col = 'datetime' \ndf1 = pd.DataFrame(np.arange(df1_len), columns=['value'])\ndf1['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df1_len, freq='1D')\ndf1['type'] = 1\ndf1_index = df1.set_index(\"datetime\")\ndf2 = pd.DataFrame(np.arange(df2_len) * 10, columns=['value'])\ndf2['datetime'] = pd.date_range(pd.to_datetime('1749-04-15'), periods=df2_len, freq='1D')\ndf2['type'] = 2\ndf_comb = pd.concat([df1, df2]).reset_index(drop=True).reset_index(drop=True)\ndf_comb_index = df_comb.set_index(\"datetime\")\ndf_comb_index.index.name = None\n\n\ndf = df_comb_index\ndisplay(df)\n\n# settings\nfcst_history = 15\nfcst_horizon = 5\nstride = 1\nunique_id_cols = 'type'\ndatetime_col = 'datetime' \nuse_index = True\nvalid_size = 0.1 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\ntest_size = 0.2 # a percent (float) or a number of samples (int) - .1 means 10% of the dates\nvalid_cutoff_datetime = '1749-08-21' # first prediction datetime of validation dataset\ntest_cutoff_datetime = '1749-12-24' # first prediction datetime of test dataset\nvalid_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\ntest_cutoff_datetime = None # datetime compatible with the datetime_col containing the starting date for the validation dataset\n\n\nsplits = get_forecasting_splits(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, stride=stride, \n unique_id_cols=unique_id_cols, datetime_col=datetime_col, use_index=use_index,\n valid_size=valid_size, test_size=test_size, \n valid_cutoff_datetime=valid_cutoff_datetime, test_cutoff_datetime=test_cutoff_datetime)\n\nprint(f\"splits size : {[len(s) for s in splits]} ({sum([len(s) for s in splits])}: {[round(len(s)/sum([len(s) for s in splits]), 2) for s in splits]})\")\n\n\n\n\n\n\n\n\nvalue\ntype\n\n\n\n\n1749-03-31\n0\n1\n\n\n1749-04-01\n1\n1\n\n\n1749-04-02\n2\n1\n\n\n1749-04-03\n3\n1\n\n\n1749-04-04\n4\n1\n\n\n...\n...\n...\n\n\n1749-06-29\n750\n2\n\n\n1749-06-30\n760\n2\n\n\n1749-07-01\n770\n2\n\n\n1749-07-02\n780\n2\n\n\n1749-07-03\n790\n2\n\n\n\n\n180 rows × 2 columns\n\n\n\n\n\n\n\n\n\n\nsplits size : [83, 14, 29] (126: [0.66, 0.11, 0.23])\n\n\n\nsource\n\n\nget_long_term_forecasting_splits\n\n get_long_term_forecasting_splits (df, fcst_history, fcst_horizon,\n dsid=None, show_plot=True)\n\nReturns the train, valid and test splits for long-range time series datasets\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndf\n\n\ndataframe containing a sorted time series for a single entity or subject\n\n\nfcst_history\n\n\n# historical steps used as input.\n\n\nfcst_horizon\n\n\n# steps forecasted into the future.\n\n\ndsid\nNoneType\nNone\ndataset name\n\n\nshow_plot\nbool\nTrue\nplot the splits", + "crumbs": [ + "Data", + "Spliting data" + ] + }, + { + "objectID": "data.features.html", + "href": "data.features.html", + "title": "Featurizing Time Series", + "section": "", + "text": "Functions used to transform time series into a dataframe that can be used to create tabular dataloaders.\n\nIn this case we are using tsfresh that is one of the most widely known libraries used to create features from time series. You can get more details about this library here: https://tsfresh.readthedocs.io/en/latest/\n\nsource\n\nget_ts_features\n\n get_ts_features (X:Union[numpy.ndarray,torch.Tensor],\n y:Union[NoneType,numpy.ndarray,torch.Tensor]=None,\n features:Union[str,dict]='min',\n n_jobs:Optional[int]=None, **kwargs)\n\nArgs: X: np.array or torch.Tesnor of shape [samples, dimensions, timesteps]. y: Not required for unlabeled data. Otherwise, you need to pass it. features: ‘min’, ‘efficient’, ‘all’, or a dictionary. Be aware that ‘efficient’ and ‘all’ may required substantial memory and time.\n\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, return_split=False)\nX.shape\n\n(360, 24, 51)\n\n\nThere are 3 levels of fatures you can extract: ‘min’, ‘efficient’ and ‘all’. I’d encourage you to start with min as feature creation may take a long time.\nIn addition to this, you can pass a dictionary to build the desired features (see tsfresh documentation in the link above).\n\nts_features_df = get_ts_features(X, y)\nts_features_df.shape\n\nFeature Extraction: 100%|██████████| 40/40 [00:09<00:00, 4.00it/s]\n\n\n(360, 241)\n\n\nThe ‘min’ set creates a dataframe with 8 features per channel + 1 per target (total 193) for each time series sample (360).\n\ncont_names = ts_features_df.columns[:-1]\ny_names = 'target'\ndls = get_tabular_dls(ts_features_df, splits=splits, cont_names=cont_names, y_names=y_names)\ndls.show_batch()\n\n\n\n\n\n0__sum_values\n0__median\n0__mean\n0__length\n0__standard_deviation\n0__variance\n0__root_mean_square\n0__maximum\n0__absolute_maximum\n0__minimum\n1__sum_values\n1__median\n1__mean\n1__length\n1__standard_deviation\n1__variance\n1__root_mean_square\n1__maximum\n1__absolute_maximum\n1__minimum\n2__sum_values\n2__median\n2__mean\n2__length\n2__standard_deviation\n2__variance\n2__root_mean_square\n2__maximum\n2__absolute_maximum\n2__minimum\n3__sum_values\n3__median\n3__mean\n3__length\n3__standard_deviation\n3__variance\n3__root_mean_square\n3__maximum\n3__absolute_maximum\n3__minimum\n4__sum_values\n4__median\n4__mean\n4__length\n4__standard_deviation\n4__variance\n4__root_mean_square\n4__maximum\n4__absolute_maximum\n4__minimum\n5__sum_values\n5__median\n5__mean\n5__length\n5__standard_deviation\n5__variance\n5__root_mean_square\n5__maximum\n5__absolute_maximum\n5__minimum\n6__sum_values\n6__median\n6__mean\n6__length\n6__standard_deviation\n6__variance\n6__root_mean_square\n6__maximum\n6__absolute_maximum\n6__minimum\n7__sum_values\n7__median\n7__mean\n7__length\n7__standard_deviation\n7__variance\n7__root_mean_square\n7__maximum\n7__absolute_maximum\n7__minimum\n8__sum_values\n8__median\n8__mean\n8__length\n8__standard_deviation\n8__variance\n8__root_mean_square\n8__maximum\n8__absolute_maximum\n8__minimum\n9__sum_values\n9__median\n9__mean\n9__length\n9__standard_deviation\n9__variance\n9__root_mean_square\n9__maximum\n9__absolute_maximum\n9__minimum\n10__sum_values\n10__median\n10__mean\n10__length\n10__standard_deviation\n10__variance\n10__root_mean_square\n10__maximum\n10__absolute_maximum\n10__minimum\n11__sum_values\n11__median\n11__mean\n11__length\n11__standard_deviation\n11__variance\n11__root_mean_square\n11__maximum\n11__absolute_maximum\n11__minimum\n12__sum_values\n12__median\n12__mean\n12__length\n12__standard_deviation\n12__variance\n12__root_mean_square\n12__maximum\n12__absolute_maximum\n12__minimum\n13__sum_values\n13__median\n13__mean\n13__length\n13__standard_deviation\n13__variance\n13__root_mean_square\n13__maximum\n13__absolute_maximum\n13__minimum\n14__sum_values\n14__median\n14__mean\n14__length\n14__standard_deviation\n14__variance\n14__root_mean_square\n14__maximum\n14__absolute_maximum\n14__minimum\n15__sum_values\n15__median\n15__mean\n15__length\n15__standard_deviation\n15__variance\n15__root_mean_square\n15__maximum\n15__absolute_maximum\n15__minimum\n16__sum_values\n16__median\n16__mean\n16__length\n16__standard_deviation\n16__variance\n16__root_mean_square\n16__maximum\n16__absolute_maximum\n16__minimum\n17__sum_values\n17__median\n17__mean\n17__length\n17__standard_deviation\n17__variance\n17__root_mean_square\n17__maximum\n17__absolute_maximum\n17__minimum\n18__sum_values\n18__median\n18__mean\n18__length\n18__standard_deviation\n18__variance\n18__root_mean_square\n18__maximum\n18__absolute_maximum\n18__minimum\n19__sum_values\n19__median\n19__mean\n19__length\n19__standard_deviation\n19__variance\n19__root_mean_square\n19__maximum\n19__absolute_maximum\n19__minimum\n20__sum_values\n20__median\n20__mean\n20__length\n20__standard_deviation\n20__variance\n20__root_mean_square\n20__maximum\n20__absolute_maximum\n20__minimum\n21__sum_values\n21__median\n21__mean\n21__length\n21__standard_deviation\n21__variance\n21__root_mean_square\n21__maximum\n21__absolute_maximum\n21__minimum\n22__sum_values\n22__median\n22__mean\n22__length\n22__standard_deviation\n22__variance\n22__root_mean_square\n22__maximum\n22__absolute_maximum\n22__minimum\n23__sum_values\n23__median\n23__mean\n23__length\n23__standard_deviation\n23__variance\n23__root_mean_square\n23__maximum\n23__absolute_maximum\n23__minimum\ntarget\n\n\n\n\n0\n-29.398621\n-0.578626\n-0.576444\n51.0\n0.019595\n0.000384\n0.576777\n-0.536114\n0.606751\n-0.606751\n-88.761322\n-1.745473\n-1.740418\n51.0\n0.033961\n0.001153\n1.740749\n-1.659181\n1.779713\n-1.779713\n-35.539612\n-0.696636\n-0.696855\n51.0\n0.005860\n0.000034\n0.696880\n-0.685844\n0.710908\n-0.710908\n63.889797\n0.837208\n1.252741\n51.0\n0.676822\n0.458088\n1.423885\n2.169677\n2.169677\n0.536361\n-54.103661\n-1.758527\n-1.060856\n51.0\n0.952467\n0.907193\n1.425696\n0.619366\n1.832052\n-1.832052\n-25.470938\n-0.562629\n-0.499430\n51.0\n0.176602\n0.031188\n0.529735\n-0.166668\n0.659942\n-0.659942\n-33.909939\n-0.666688\n-0.664901\n51.0\n0.013168\n0.000173\n0.665031\n-0.643999\n0.682598\n-0.682598\n-39.194389\n-0.766594\n-0.768517\n51.0\n0.007046\n0.000050\n0.768550\n-0.750228\n0.782717\n-0.782717\n-9.894929\n-0.191213\n-0.194018\n51.0\n0.008862\n0.000079\n0.194220\n-0.182825\n0.210663\n-0.210663\n41.573109\n0.658693\n0.815159\n51.0\n0.227995\n0.051982\n0.846443\n1.144142\n1.144142\n0.601647\n-26.870213\n-0.801317\n-0.526867\n51.0\n0.410643\n0.168628\n0.667994\n0.183081\n0.862615\n-0.862615\n-4.248524\n-0.096245\n-0.083304\n51.0\n0.033176\n0.001101\n0.089668\n-0.021126\n0.121141\n-0.121141\n-33.603584\n-0.660318\n-0.658894\n51.0\n0.016815\n0.000283\n0.659108\n-0.626267\n0.684841\n-0.684841\n-70.926521\n-1.409798\n-1.390716\n51.0\n0.031278\n0.000978\n1.391068\n-1.337275\n1.423652\n-1.423652\n-26.984289\n-0.529285\n-0.529104\n51.0\n0.005923\n0.000035\n0.529137\n-0.517306\n0.548614\n-0.548614\n56.133301\n0.789974\n1.100653\n51.0\n0.483293\n0.233572\n1.202085\n1.757948\n1.757948\n0.587645\n-45.478088\n-1.421026\n-0.891727\n51.0\n0.739772\n0.547262\n1.158637\n0.386504\n1.509923\n-1.509923\n-17.145500\n-0.387209\n-0.336186\n51.0\n0.127724\n0.016313\n0.359631\n-0.108017\n0.469502\n-0.469502\n-25.565697\n-0.502589\n-0.501288\n51.0\n0.016613\n0.000276\n0.501563\n-0.465890\n0.535957\n-0.535957\n-77.823814\n-1.519193\n-1.525957\n51.0\n0.028265\n0.000799\n1.526219\n-1.468685\n1.564035\n-1.564035\n-36.996349\n-0.727857\n-0.725419\n51.0\n0.007882\n0.000062\n0.725461\n-0.705429\n0.735931\n-0.735931\n58.453831\n0.779782\n1.146154\n51.0\n0.682839\n0.466269\n1.334143\n2.093526\n2.093526\n0.433132\n-52.249134\n-1.582441\n-1.024493\n51.0\n0.815997\n0.665852\n1.309747\n0.419112\n1.718448\n-1.718448\n-22.941730\n-0.449813\n-0.449838\n51.0\n0.179541\n0.032235\n0.484344\n-0.149044\n0.718254\n-0.718254\n2.0\n\n\n1\n-22.630985\n-0.572027\n-0.443745\n51.0\n0.548965\n0.301363\n0.705884\n0.844384\n1.284441\n-1.284441\n-43.583847\n-1.497262\n-0.854585\n51.0\n1.019406\n1.039188\n1.330227\n1.096710\n1.692231\n-1.692231\n-31.147585\n-0.398927\n-0.610737\n51.0\n0.360847\n0.130210\n0.709373\n-0.256470\n1.562690\n-1.562690\n35.902119\n0.479088\n0.703963\n51.0\n0.365270\n0.133422\n0.793087\n1.559241\n1.559241\n0.320613\n-26.475592\n-1.411000\n-0.519129\n51.0\n1.250764\n1.564410\n1.354218\n1.246734\n1.762012\n-1.762012\n-34.175106\n-0.647045\n-0.670100\n51.0\n0.273988\n0.075069\n0.723950\n-0.189910\n1.339854\n-1.339854\n-25.383873\n-0.599582\n-0.497723\n51.0\n0.304314\n0.092607\n0.583383\n0.198417\n0.860741\n-0.860741\n-23.190578\n-0.632231\n-0.454717\n51.0\n0.267774\n0.071703\n0.527703\n0.086810\n0.735903\n-0.735903\n-9.272245\n0.044390\n-0.181809\n51.0\n0.310334\n0.096307\n0.359668\n0.103880\n0.687320\n-0.687320\n33.800453\n0.639043\n0.662754\n51.0\n0.155807\n0.024276\n0.680822\n0.971393\n0.971393\n0.338048\n-20.350363\n-0.685427\n-0.399027\n51.0\n0.401511\n0.161211\n0.566068\n0.388883\n0.798647\n-0.798647\n-22.385489\n-0.310659\n-0.438931\n51.0\n0.202867\n0.041155\n0.483545\n-0.223507\n0.780465\n-0.780465\n-23.431786\n-0.607775\n-0.459447\n51.0\n0.502495\n0.252501\n0.680876\n0.557547\n1.097538\n-1.097538\n-35.239632\n-1.173477\n-0.690973\n51.0\n0.790543\n0.624958\n1.049953\n0.850109\n1.334061\n-1.334061\n-23.722792\n-0.263811\n-0.465153\n51.0\n0.304623\n0.092795\n0.556024\n-0.096469\n1.355410\n-1.355410\n36.532707\n0.576822\n0.716328\n51.0\n0.285204\n0.081341\n0.771016\n1.347809\n1.347809\n0.321302\n-23.286812\n-1.098079\n-0.456604\n51.0\n0.934937\n0.874106\n1.040478\n0.973006\n1.405902\n-1.405902\n-31.214712\n-0.552194\n-0.612053\n51.0\n0.146669\n0.021512\n0.629381\n-0.445301\n1.042179\n-1.042179\n-23.984716\n-0.675121\n-0.470289\n51.0\n0.554180\n0.307116\n0.726834\n0.807535\n1.182987\n-1.182987\n-39.006611\n-1.346193\n-0.764835\n51.0\n0.884366\n0.782103\n1.169220\n1.003716\n1.507433\n-1.507433\n-28.776979\n-0.436710\n-0.564255\n51.0\n0.328655\n0.108014\n0.652991\n-0.268483\n1.373182\n-1.373182\n33.181316\n0.482228\n0.650614\n51.0\n0.366002\n0.133957\n0.746496\n1.554717\n1.554717\n0.254808\n-25.558233\n-1.347874\n-0.501142\n51.0\n1.110295\n1.232755\n1.218153\n1.149943\n1.741076\n-1.741076\n-33.443592\n-0.659850\n-0.655757\n51.0\n0.246830\n0.060925\n0.700673\n-0.250632\n1.340311\n-1.340311\n6.0\n\n\n2\n-35.085182\n-0.687561\n-0.687945\n51.0\n0.030869\n0.000953\n0.688637\n-0.624283\n0.739868\n-0.739868\n-106.435272\n-2.126637\n-2.086966\n51.0\n0.089233\n0.007963\n2.088873\n-1.959578\n2.215342\n-2.215342\n-43.562584\n-0.854689\n-0.854168\n51.0\n0.032274\n0.001042\n0.854778\n-0.801072\n0.912399\n-0.912399\n73.886467\n1.213113\n1.448754\n51.0\n0.694268\n0.482008\n1.606517\n2.342902\n2.342902\n0.642018\n-67.402786\n-2.043274\n-1.321623\n51.0\n1.021520\n1.043502\n1.670386\n0.217647\n2.288412\n-2.288412\n-40.294270\n-0.799205\n-0.790084\n51.0\n0.048503\n0.002353\n0.791571\n-0.688059\n0.888159\n-0.888159\n-34.629044\n-0.681434\n-0.679001\n51.0\n0.017385\n0.000302\n0.679223\n-0.649223\n0.703762\n-0.703762\n-40.258858\n-0.804071\n-0.789389\n51.0\n0.033163\n0.001100\n0.790086\n-0.741303\n0.842110\n-0.842110\n-12.998519\n-0.267240\n-0.254873\n51.0\n0.017719\n0.000314\n0.255488\n-0.224532\n0.273925\n-0.273925\n47.912884\n0.805694\n0.939468\n51.0\n0.229189\n0.052528\n0.967020\n1.233679\n1.233679\n0.697387\n-28.587210\n-0.880814\n-0.560534\n51.0\n0.403328\n0.162674\n0.690559\n0.038331\n0.921428\n-0.921428\n-10.081242\n-0.202227\n-0.197671\n51.0\n0.030237\n0.000914\n0.199971\n-0.156339\n0.284775\n-0.284775\n-33.949532\n-0.670309\n-0.665677\n51.0\n0.022919\n0.000525\n0.666072\n-0.629390\n0.697200\n-0.697200\n-85.588051\n-1.724138\n-1.678197\n51.0\n0.080795\n0.006528\n1.680141\n-1.563966\n1.791635\n-1.791635\n-36.548447\n-0.725060\n-0.716636\n51.0\n0.030728\n0.000944\n0.717295\n-0.671330\n0.760870\n-0.760870\n65.181526\n1.113361\n1.278069\n51.0\n0.494449\n0.244479\n1.370380\n1.934985\n1.934985\n0.748902\n-54.790508\n-1.635758\n-1.074324\n51.0\n0.817957\n0.669053\n1.350268\n0.139169\n1.839433\n-1.839433\n-28.428947\n-0.573270\n-0.557430\n51.0\n0.053855\n0.002900\n0.560026\n-0.439413\n0.630352\n-0.630352\n-26.714603\n-0.519391\n-0.523816\n51.0\n0.032224\n0.001038\n0.524806\n-0.489540\n0.659033\n-0.659033\n-93.493767\n-1.865099\n-1.833211\n51.0\n0.092432\n0.008544\n1.835540\n-1.700841\n2.010093\n-2.010093\n-43.577209\n-0.860299\n-0.854455\n51.0\n0.049561\n0.002456\n0.855891\n-0.796042\n1.014816\n-1.014816\n65.893486\n1.051441\n1.292029\n51.0\n0.685999\n0.470595\n1.462851\n2.178514\n2.178514\n0.574974\n-64.151787\n-1.856631\n-1.257878\n51.0\n0.804017\n0.646444\n1.492884\n-0.037161\n2.008020\n-2.008020\n-39.252415\n-0.786807\n-0.769655\n51.0\n0.054600\n0.002981\n0.771589\n-0.582144\n0.898071\n-0.898071\n3.0\n\n\n3\n9.418392\n0.124306\n0.184674\n51.0\n0.683525\n0.467206\n0.708033\n1.098620\n1.098620\n-0.619085\n-65.183624\n-1.598239\n-1.278110\n51.0\n0.931468\n0.867632\n1.581518\n0.194134\n2.234432\n-2.234432\n-41.886803\n-0.976904\n-0.821310\n51.0\n0.252251\n0.063631\n0.859174\n-0.396303\n1.147354\n-1.147354\n45.166958\n0.801148\n0.885627\n51.0\n0.278827\n0.077744\n0.928482\n1.635586\n1.635586\n0.577137\n-35.295097\n-1.093421\n-0.692061\n51.0\n1.567398\n2.456736\n1.713384\n1.325327\n2.416220\n-2.416220\n-19.785007\n-0.294643\n-0.387941\n51.0\n0.282500\n0.079806\n0.479901\n-0.008022\n0.944945\n-0.944945\n-28.304108\n-0.693464\n-0.554982\n51.0\n0.202652\n0.041068\n0.590824\n-0.242434\n0.741845\n-0.741845\n-36.350716\n-0.670180\n-0.712759\n51.0\n0.144370\n0.020843\n0.727233\n-0.523174\n0.890112\n-0.890112\n-28.392370\n-0.522761\n-0.556713\n51.0\n0.107739\n0.011608\n0.567042\n-0.435334\n0.710886\n-0.710886\n38.783321\n0.658475\n0.760457\n51.0\n0.165045\n0.027240\n0.778161\n1.025254\n1.025254\n0.573761\n-29.159790\n-0.807073\n-0.571761\n51.0\n0.451058\n0.203453\n0.728260\n0.058212\n1.089511\n-1.089511\n-0.357431\n0.210966\n-0.007008\n51.0\n0.359132\n0.128976\n0.359200\n0.358109\n0.519043\n-0.519043\n-6.840534\n-0.255334\n-0.134128\n51.0\n0.504682\n0.254704\n0.522201\n0.582558\n0.693457\n-0.693457\n-55.873280\n-1.168818\n-1.095554\n51.0\n0.563111\n0.317094\n1.231801\n-0.219940\n1.721503\n-1.721503\n-37.602516\n-0.815972\n-0.737304\n51.0\n0.176043\n0.030991\n0.758029\n-0.360776\n0.927193\n-0.927193\n43.445599\n0.848623\n0.851875\n51.0\n0.218035\n0.047539\n0.879335\n1.345085\n1.345085\n0.596721\n-33.225483\n-1.050173\n-0.651480\n51.0\n1.146453\n1.314353\n1.318628\n0.890806\n1.963266\n-1.963266\n-12.263644\n-0.319137\n-0.240464\n51.0\n0.276771\n0.076602\n0.366640\n0.244209\n0.701782\n-0.701782\n-1.089832\n-0.055650\n-0.021369\n51.0\n0.549241\n0.301665\n0.549656\n0.656405\n0.802634\n-0.802634\n-58.871620\n-1.318070\n-1.154346\n51.0\n0.793757\n0.630050\n1.400915\n0.036103\n2.034981\n-2.034981\n-38.605354\n-0.873019\n-0.756968\n51.0\n0.309986\n0.096091\n0.817980\n-0.183816\n1.145963\n-1.145963\n44.849518\n0.865092\n0.879402\n51.0\n0.278859\n0.077762\n0.922557\n1.511787\n1.511787\n0.490558\n-35.374996\n-1.168080\n-0.693627\n51.0\n1.392385\n1.938735\n1.555588\n1.122289\n2.264597\n-2.264597\n-23.718605\n-0.533045\n-0.465071\n51.0\n0.283010\n0.080095\n0.544413\n0.070285\n0.913923\n-0.913923\n6.0\n\n\n4\n0.670717\n-0.551674\n0.013151\n51.0\n0.796336\n0.634151\n0.796444\n1.303428\n1.303428\n-0.740258\n-82.721443\n-2.117861\n-1.621989\n51.0\n0.745800\n0.556218\n1.785236\n-0.325693\n2.317141\n-2.317141\n-42.753490\n-0.679642\n-0.838304\n51.0\n0.347571\n0.120805\n0.907501\n-0.450540\n1.606419\n-1.606419\n43.941456\n0.675603\n0.861597\n51.0\n0.571390\n0.326487\n1.033845\n2.105319\n2.105319\n0.364709\n-54.047619\n-2.158519\n-1.059757\n51.0\n1.451326\n2.106348\n1.797063\n1.128832\n2.503777\n-2.503777\n-8.701278\n-0.097304\n-0.170613\n51.0\n0.254706\n0.064875\n0.306568\n0.143676\n0.995945\n-0.995945\n-25.513714\n-0.696055\n-0.500269\n51.0\n0.274384\n0.075287\n0.570575\n0.089958\n0.745964\n-0.745964\n-37.482643\n-0.790602\n-0.734954\n51.0\n0.116809\n0.013644\n0.744178\n-0.541465\n0.878685\n-0.878685\n-33.195599\n-0.672431\n-0.650894\n51.0\n0.199584\n0.039834\n0.680806\n-0.429070\n0.989809\n-0.989809\n34.543270\n0.566918\n0.677319\n51.0\n0.293252\n0.085997\n0.738077\n1.267009\n1.267009\n0.387009\n-30.752882\n-0.775993\n-0.602998\n51.0\n0.315380\n0.099464\n0.680493\n0.063736\n1.075059\n-1.075059\n5.405560\n0.286917\n0.105991\n51.0\n0.283277\n0.080246\n0.302456\n0.384380\n0.392310\n-0.392310\n-10.194630\n-0.575963\n-0.199895\n51.0\n0.608274\n0.369997\n0.640277\n0.946359\n0.946359\n-0.750195\n-67.181175\n-1.644588\n-1.317278\n51.0\n0.480866\n0.231232\n1.402303\n-0.524218\n1.829902\n-1.829902\n-42.235485\n-0.693468\n-0.828147\n51.0\n0.266756\n0.071159\n0.870049\n-0.607596\n1.443514\n-1.443514\n42.286137\n0.849937\n0.829140\n51.0\n0.445894\n0.198822\n0.941432\n1.798162\n1.798162\n0.406039\n-45.729931\n-1.668248\n-0.896665\n51.0\n1.043643\n1.089190\n1.375936\n0.752602\n2.014132\n-2.014132\n-2.545863\n0.035224\n-0.049919\n51.0\n0.176097\n0.031010\n0.183036\n0.169495\n0.488377\n-0.488377\n-7.721382\n-0.629895\n-0.151400\n51.0\n0.731868\n0.535631\n0.747364\n1.081553\n1.081553\n-0.841546\n-73.237610\n-1.826482\n-1.436032\n51.0\n0.668636\n0.447074\n1.584065\n-0.235637\n2.140610\n-2.140610\n-44.032135\n-0.673831\n-0.863375\n51.0\n0.386634\n0.149486\n0.945993\n-0.419474\n1.715174\n-1.715174\n41.510166\n0.733873\n0.813925\n51.0\n0.506757\n0.256803\n0.958789\n1.993738\n1.993738\n0.362309\n-50.167858\n-1.763661\n-0.983684\n51.0\n1.247509\n1.556279\n1.588683\n0.955917\n2.361580\n-2.361580\n-8.757638\n-0.146574\n-0.171718\n51.0\n0.236743\n0.056047\n0.292463\n0.202188\n0.984318\n-0.984318\n6.0\n\n\n5\n-50.560036\n-0.925159\n-0.991373\n51.0\n0.970520\n0.941910\n1.387347\n0.800761\n2.398621\n-2.398621\n-30.233727\n-0.178814\n-0.592818\n51.0\n1.103251\n1.217162\n1.252436\n0.972976\n2.095890\n-2.095890\n-42.399975\n-0.641855\n-0.831372\n51.0\n0.369349\n0.136419\n0.909724\n-0.293571\n1.665465\n-1.665465\n39.197685\n0.735326\n0.768582\n51.0\n0.972865\n0.946467\n1.239833\n2.223790\n2.223790\n-0.900167\n-25.861439\n0.006240\n-0.507087\n51.0\n1.103717\n1.218190\n1.214631\n1.036380\n2.057254\n-2.057254\n-54.733055\n-0.955823\n-1.073197\n51.0\n0.341752\n0.116795\n1.126298\n-0.407128\n1.797132\n-1.797132\n-43.710899\n-0.780402\n-0.857076\n51.0\n0.244302\n0.059683\n0.891215\n-0.568018\n1.237588\n-1.237588\n-16.875654\n-0.136531\n-0.330895\n51.0\n0.380901\n0.145086\n0.504557\n0.301934\n0.825958\n-0.825958\n-12.057025\n-0.090500\n-0.236412\n51.0\n0.246839\n0.060929\n0.341790\n0.002809\n0.739954\n-0.739954\n43.413063\n0.779447\n0.851237\n51.0\n0.224609\n0.050449\n0.880371\n1.244718\n1.244718\n0.445537\n-16.459957\n-0.233873\n-0.322744\n51.0\n0.378000\n0.142884\n0.497039\n0.267569\n0.802695\n-0.802695\n-29.580076\n-0.443360\n-0.580002\n51.0\n0.283071\n0.080129\n0.645392\n-0.340970\n1.223840\n-1.223840\n-46.450630\n-0.899175\n-0.910797\n51.0\n0.711464\n0.506181\n1.155739\n0.568156\n1.918004\n-1.918004\n-25.124174\n-0.161948\n-0.492631\n51.0\n0.804141\n0.646643\n0.943042\n0.727019\n1.617498\n-1.617498\n-31.201376\n-0.434257\n-0.611792\n51.0\n0.313101\n0.098032\n0.687256\n-0.172693\n1.229459\n-1.229459\n41.937992\n0.793140\n0.822314\n51.0\n0.641221\n0.411164\n1.042767\n1.812513\n1.812513\n-0.339336\n-21.495180\n-0.052168\n-0.421474\n51.0\n0.799914\n0.639862\n0.904158\n0.620937\n1.550453\n-1.550453\n-42.943439\n-0.776023\n-0.842028\n51.0\n0.225123\n0.050680\n0.871603\n-0.285606\n1.344810\n-1.344810\n-52.034657\n-0.921795\n-1.020287\n51.0\n0.898630\n0.807537\n1.359604\n0.655126\n2.344413\n-2.344413\n-27.837105\n-0.061648\n-0.545826\n51.0\n0.969040\n0.939039\n1.112189\n0.931854\n1.992733\n-1.992733\n-36.875374\n-0.585629\n-0.723047\n51.0\n0.349626\n0.122238\n0.803141\n-0.215493\n1.429438\n-1.429438\n40.247742\n0.798090\n0.789171\n51.0\n0.786085\n0.617930\n1.113877\n1.984581\n1.984581\n-0.677269\n-23.811928\n-0.119661\n-0.466901\n51.0\n0.912458\n0.832579\n1.024976\n0.800261\n1.841989\n-1.841989\n-52.909077\n-1.040256\n-1.037433\n51.0\n0.335496\n0.112557\n1.090332\n-0.334281\n1.676773\n-1.676773\n4.0\n\n\n6\n-39.833595\n-0.581072\n-0.781051\n51.0\n0.909044\n0.826360\n1.198499\n0.568540\n2.283604\n-2.283604\n-38.821877\n-0.786507\n-0.761213\n51.0\n0.961909\n0.925269\n1.226668\n0.511668\n1.878216\n-1.878216\n-38.064991\n-0.843750\n-0.746372\n51.0\n0.289446\n0.083779\n0.800532\n-0.137036\n1.416119\n-1.416119\n41.832554\n0.615405\n0.820246\n51.0\n0.852135\n0.726135\n1.182767\n2.278694\n2.278694\n-0.571341\n-46.324547\n-0.797607\n-0.908324\n51.0\n0.966797\n0.934696\n1.326556\n0.542440\n2.116034\n-2.116034\n-20.751741\n-0.570023\n-0.406897\n51.0\n0.581464\n0.338100\n0.709694\n0.768066\n1.202626\n-1.202626\n-37.311344\n-0.603243\n-0.731595\n51.0\n0.236690\n0.056022\n0.768930\n-0.428848\n1.151210\n-1.151210\n-24.191328\n-0.593942\n-0.474340\n51.0\n0.321964\n0.103661\n0.573288\n0.118205\n0.778171\n-0.778171\n-10.869180\n-0.166239\n-0.213121\n51.0\n0.118523\n0.014048\n0.243861\n-0.055137\n0.518928\n-0.518928\n37.055542\n0.630720\n0.726579\n51.0\n0.187477\n0.035147\n0.750377\n1.041933\n1.041933\n0.511867\n-27.166332\n-0.715093\n-0.532673\n51.0\n0.297583\n0.088556\n0.610161\n0.032286\n0.820952\n-0.820952\n-5.845339\n-0.214925\n-0.114614\n51.0\n0.219578\n0.048215\n0.247691\n0.302756\n0.333025\n-0.333025\n-38.241142\n-0.594127\n-0.749826\n51.0\n0.627857\n0.394204\n0.977979\n0.256995\n1.747855\n-1.747855\n-32.509758\n-0.579769\n-0.637446\n51.0\n0.690723\n0.477098\n0.939913\n0.338581\n1.427238\n-1.427238\n-26.793001\n-0.502856\n-0.525353\n51.0\n0.140510\n0.019743\n0.543819\n-0.301202\n0.999421\n-0.999421\n38.700047\n0.607511\n0.758824\n51.0\n0.584079\n0.341148\n0.957582\n1.645291\n1.645291\n-0.209163\n-37.871262\n-0.758263\n-0.742574\n51.0\n0.648642\n0.420737\n0.985978\n0.297268\n1.478050\n-1.478050\n-15.965348\n-0.512104\n-0.313046\n51.0\n0.436921\n0.190900\n0.537492\n0.543558\n1.049285\n-1.049285\n-39.408485\n-0.581423\n-0.772715\n51.0\n0.801424\n0.642281\n1.113270\n0.497681\n2.193919\n-2.193919\n-36.982643\n-0.627740\n-0.725150\n51.0\n0.856815\n0.734132\n1.122486\n0.517904\n1.754343\n-1.754343\n-31.530857\n-0.578748\n-0.618252\n51.0\n0.279074\n0.077882\n0.678320\n-0.208244\n1.305216\n-1.305216\n37.909523\n0.533470\n0.743324\n51.0\n0.796210\n0.633951\n1.089257\n2.103847\n2.103847\n-0.552248\n-39.577774\n-0.742289\n-0.776035\n51.0\n0.849310\n0.721327\n1.150460\n0.575411\n1.851035\n-1.851035\n-22.426970\n-0.587765\n-0.439745\n51.0\n0.553202\n0.306033\n0.706688\n0.689770\n1.236947\n-1.236947\n5.0\n\n\n7\n-36.896690\n-0.912707\n-0.723464\n51.0\n1.064085\n1.132277\n1.286732\n0.912205\n2.307096\n-2.307096\n-19.239029\n-0.282667\n-0.377236\n51.0\n1.052407\n1.107561\n1.117975\n0.881856\n2.153838\n-2.153838\n-62.821152\n-1.281961\n-1.231787\n51.0\n0.530944\n0.281901\n1.341343\n0.098188\n2.117577\n-2.117577\n55.359245\n1.107040\n1.085475\n51.0\n0.981749\n0.963832\n1.463588\n2.348134\n2.348134\n-0.507044\n-23.611309\n0.024880\n-0.462967\n51.0\n1.022359\n1.045218\n1.122299\n0.884884\n2.283836\n-2.283836\n-34.417664\n-0.666021\n-0.674856\n51.0\n0.336352\n0.113133\n0.754031\n-0.017647\n1.378753\n-1.378753\n-38.069172\n-0.877256\n-0.746454\n51.0\n0.354419\n0.125613\n0.826321\n-0.077006\n1.163693\n-1.163693\n-10.263086\n-0.051315\n-0.201237\n51.0\n0.370457\n0.137238\n0.421586\n0.256480\n0.847701\n-0.847701\n-30.174412\n-0.570585\n-0.591655\n51.0\n0.173184\n0.029993\n0.616481\n-0.356980\n1.046295\n-1.046295\n46.865932\n0.877540\n0.918940\n51.0\n0.188330\n0.035468\n0.938040\n1.202289\n1.202289\n0.597824\n-24.255749\n-0.452062\n-0.475603\n51.0\n0.309431\n0.095748\n0.567403\n0.061571\n0.980127\n-0.980127\n-10.561463\n-0.084279\n-0.207088\n51.0\n0.266664\n0.071109\n0.337631\n0.100390\n0.787678\n-0.787678\n-35.248955\n-0.933832\n-0.691156\n51.0\n0.792044\n0.627334\n1.051204\n0.613102\n1.636708\n-1.636708\n-16.299442\n-0.262266\n-0.319597\n51.0\n0.805276\n0.648469\n0.866378\n0.682406\n1.797832\n-1.797832\n-50.258915\n-0.981771\n-0.985469\n51.0\n0.327322\n0.107139\n1.038407\n-0.382916\n1.556926\n-1.556926\n50.633633\n1.068598\n0.992816\n51.0\n0.669171\n0.447789\n1.197278\n1.868672\n1.868672\n-0.068966\n-22.703091\n-0.056605\n-0.445159\n51.0\n0.739652\n0.547084\n0.863279\n0.671985\n1.762866\n-1.762866\n-24.762434\n-0.469707\n-0.485538\n51.0\n0.268093\n0.071874\n0.554636\n-0.000126\n0.909962\n-0.909962\n-38.911346\n-0.915691\n-0.762968\n51.0\n0.941245\n0.885943\n1.211636\n0.747633\n2.031039\n-2.031039\n-19.286667\n-0.411864\n-0.378170\n51.0\n0.938402\n0.880599\n1.011737\n0.850090\n1.990998\n-1.990998\n-54.983307\n-1.106866\n-1.078104\n51.0\n0.498255\n0.248258\n1.187673\n-0.044980\n1.856607\n-1.856607\n55.272842\n1.142773\n1.083781\n51.0\n0.912429\n0.832527\n1.416725\n2.338898\n2.338898\n-0.387132\n-24.889832\n-0.118238\n-0.488036\n51.0\n0.872788\n0.761758\n0.999969\n0.686074\n2.103849\n-2.103849\n-32.013580\n-0.695968\n-0.627717\n51.0\n0.353181\n0.124737\n0.720254\n0.051580\n1.284638\n-1.284638\n4.0\n\n\n8\n-26.011322\n-0.536596\n-0.510026\n51.0\n0.055607\n0.003092\n0.513048\n-0.419569\n0.570454\n-0.570454\n-92.222801\n-1.791812\n-1.808290\n51.0\n0.098298\n0.009663\n1.810960\n-1.699334\n1.995639\n-1.995639\n-37.869225\n-0.712115\n-0.742534\n51.0\n0.048071\n0.002311\n0.744088\n-0.677641\n0.836827\n-0.836827\n64.245613\n1.286482\n1.259718\n51.0\n0.586856\n0.344400\n1.389708\n2.007180\n2.007180\n0.607638\n-38.855114\n-1.503779\n-0.761865\n51.0\n1.135116\n1.288489\n1.367087\n1.195478\n1.817826\n-1.817826\n-28.189720\n-0.513122\n-0.552740\n51.0\n0.103227\n0.010656\n0.562296\n-0.369479\n0.759343\n-0.759343\n-27.265202\n-0.548034\n-0.534612\n51.0\n0.022753\n0.000518\n0.535096\n-0.490623\n0.572237\n-0.572237\n-39.857010\n-0.771910\n-0.781510\n51.0\n0.061902\n0.003832\n0.783958\n-0.717654\n0.923757\n-0.923757\n-6.367034\n-0.115645\n-0.124844\n51.0\n0.060107\n0.003613\n0.138560\n-0.062456\n0.225210\n-0.225210\n42.372810\n0.886792\n0.830839\n51.0\n0.201009\n0.040405\n0.854809\n1.109116\n1.109116\n0.605396\n-13.769955\n-0.545444\n-0.269999\n51.0\n0.548812\n0.301195\n0.611632\n0.657959\n0.810047\n-0.810047\n-11.842787\n-0.255244\n-0.232212\n51.0\n0.044901\n0.002016\n0.236513\n-0.145291\n0.307812\n-0.307812\n-28.094807\n-0.559510\n-0.550879\n51.0\n0.043867\n0.001924\n0.552622\n-0.491768\n0.597890\n-0.597890\n-73.582306\n-1.460591\n-1.442790\n51.0\n0.122198\n0.014932\n1.447956\n-1.304898\n1.658409\n-1.658409\n-22.921581\n-0.463139\n-0.449443\n51.0\n0.052460\n0.002752\n0.452494\n-0.385089\n0.526610\n-0.526610\n56.109291\n1.201811\n1.100182\n51.0\n0.445087\n0.198103\n1.186804\n1.676672\n1.676672\n0.602798\n-29.902466\n-1.201119\n-0.586323\n51.0\n0.950869\n0.904151\n1.117106\n1.049786\n1.495527\n-1.495527\n-23.161522\n-0.453892\n-0.454147\n51.0\n0.071312\n0.005085\n0.459712\n-0.308134\n0.624632\n-0.624632\n-30.269337\n-0.606525\n-0.593516\n51.0\n0.053951\n0.002911\n0.595963\n-0.501898\n0.661645\n-0.661645\n-85.624870\n-1.647284\n-1.678919\n51.0\n0.107465\n0.011549\n1.682355\n-1.548876\n1.879864\n-1.879864\n-26.338734\n-0.505198\n-0.516446\n51.0\n0.055644\n0.003096\n0.519435\n-0.443595\n0.624974\n-0.624974\n63.065834\n1.133581\n1.236585\n51.0\n0.536658\n0.288002\n1.348015\n1.935572\n1.935572\n0.574532\n-40.009689\n-1.531141\n-0.784504\n51.0\n1.003145\n1.006301\n1.273478\n0.979440\n1.697684\n-1.697684\n-26.970509\n-0.520441\n-0.528834\n51.0\n0.084388\n0.007121\n0.535524\n-0.347588\n0.714076\n-0.714076\n3.0\n\n\n9\n-24.176491\n-0.488977\n-0.474049\n51.0\n0.043168\n0.001863\n0.476010\n-0.366197\n0.527277\n-0.527277\n-87.327805\n-1.710973\n-1.712310\n51.0\n0.031561\n0.000996\n1.712601\n-1.631805\n1.772976\n-1.772976\n-21.451313\n-0.408822\n-0.420614\n51.0\n0.032761\n0.001073\n0.421888\n-0.376194\n0.493162\n-0.493162\n58.397629\n0.748125\n1.145051\n51.0\n0.692690\n0.479820\n1.338269\n2.103378\n2.103378\n0.480623\n-48.922287\n-1.675132\n-0.959261\n51.0\n0.974441\n0.949535\n1.367375\n0.852968\n1.817363\n-1.817363\n-29.856304\n-0.640901\n-0.585418\n51.0\n0.124195\n0.015424\n0.598447\n-0.312080\n0.750260\n-0.750260\n-27.958775\n-0.565279\n-0.548211\n51.0\n0.035193\n0.001239\n0.549340\n-0.492060\n0.583746\n-0.583746\n-37.864830\n-0.732618\n-0.742448\n51.0\n0.041091\n0.001688\n0.743584\n-0.692059\n0.802448\n-0.802448\n-0.649227\n-0.005362\n-0.012730\n51.0\n0.039293\n0.001544\n0.041304\n0.035067\n0.069732\n-0.069732\n43.424145\n0.733217\n0.851454\n51.0\n0.218725\n0.047841\n0.879099\n1.171012\n1.171012\n0.632703\n-21.846182\n-0.721695\n-0.428356\n51.0\n0.389760\n0.151912\n0.579139\n0.287935\n0.756129\n-0.756129\n-13.696244\n-0.290477\n-0.268554\n51.0\n0.049435\n0.002444\n0.273066\n-0.169651\n0.314362\n-0.314362\n-28.335342\n-0.570419\n-0.555595\n51.0\n0.031328\n0.000981\n0.556478\n-0.508227\n0.598616\n-0.598616\n-67.415817\n-1.322900\n-1.321879\n51.0\n0.020617\n0.000425\n1.322040\n-1.252832\n1.356348\n-1.356348\n-14.509363\n-0.280158\n-0.284497\n51.0\n0.027159\n0.000738\n0.285791\n-0.237379\n0.326241\n-0.326241\n54.223145\n0.808409\n1.063199\n51.0\n0.487772\n0.237921\n1.169749\n1.747880\n1.747880\n0.582484\n-38.194836\n-1.286616\n-0.748918\n51.0\n0.720042\n0.518461\n1.038913\n0.589410\n1.341641\n-1.341641\n-24.306427\n-0.513999\n-0.476597\n51.0\n0.113742\n0.012937\n0.489981\n-0.236320\n0.606179\n-0.606179\n-20.204275\n-0.414832\n-0.396162\n51.0\n0.036496\n0.001332\n0.397840\n-0.328904\n0.434622\n-0.434622\n-71.983742\n-1.408678\n-1.411446\n51.0\n0.031827\n0.001013\n1.411805\n-1.346405\n1.477625\n-1.477625\n-23.991568\n-0.466880\n-0.470423\n51.0\n0.027061\n0.000732\n0.471201\n-0.430881\n0.532167\n-0.532167\n53.270744\n0.767735\n1.044524\n51.0\n0.671843\n0.451373\n1.241936\n2.002148\n2.002148\n0.376754\n-38.753330\n-1.399783\n-0.759869\n51.0\n0.882002\n0.777927\n1.164186\n0.885538\n1.513484\n-1.513484\n-31.401262\n-0.670306\n-0.615711\n51.0\n0.152118\n0.023140\n0.634224\n-0.286498\n0.862852\n-0.862852\n2.0\n\n\n\n\n\n\nx_cat, x_cont, yb = first(dls.train)\nx_cont[:10]\n\ntensor([[-0.8581, -0.1346, -0.8581, ..., 0.3235, 0.5841, -0.6917],\n [-0.0406, 0.0344, -0.0406, ..., -0.0171, -1.7253, 1.2745],\n [ 1.7966, -0.0497, 1.7966, ..., -0.6516, 0.9802, -1.0290],\n ...,\n [ 0.2804, 0.4747, 0.2804, ..., -0.4816, -0.3325, 0.0887],\n [-0.1472, -0.1884, -0.1472, ..., -0.1036, -1.2258, 0.8491],\n [-0.9960, -0.6116, -0.9960, ..., 0.4602, 3.3105, -3.0129]])", + "crumbs": [ + "Data", + "Featurizing Time Series" + ] + }, + { + "objectID": "models.resnet.html", + "href": "models.resnet.html", + "title": "ResNet", + "section": "", + "text": "This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co\n\n\nsource\n\nResNet\n\n ResNet (c_in, c_out)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nResBlock\n\n ResBlock (ni, nf, kss=[7, 5, 3])\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nxb = torch.rand(2, 3, 4)\ntest_eq(ResNet(3,2)(xb).shape, [xb.shape[0], 2])\ntest_eq(count_parameters(ResNet(3, 2)), 479490) # for (3,2)\n\n\nResNet(3,2)\n\nResNet(\n (resblock1): ResBlock(\n (convblock1): ConvBlock(\n (0): Conv1d(3, 64, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)\n (1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (convblock2): ConvBlock(\n (0): Conv1d(64, 64, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)\n (1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (convblock3): ConvBlock(\n (0): Conv1d(64, 64, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)\n (1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (shortcut): ConvBlock(\n (0): Conv1d(3, 64, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (add): Add\n (act): ReLU()\n )\n (resblock2): ResBlock(\n (convblock1): ConvBlock(\n (0): Conv1d(64, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (convblock2): ConvBlock(\n (0): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (convblock3): ConvBlock(\n (0): Conv1d(128, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (shortcut): ConvBlock(\n (0): Conv1d(64, 128, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (add): Add\n (act): ReLU()\n )\n (resblock3): ResBlock(\n (convblock1): ConvBlock(\n (0): Conv1d(128, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (convblock2): ConvBlock(\n (0): Conv1d(128, 128, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (convblock3): ConvBlock(\n (0): Conv1d(128, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (shortcut): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (add): Add\n (act): ReLU()\n )\n (gap): AdaptiveAvgPool1d(output_size=1)\n (squeeze): Squeeze(dim=-1)\n (fc): Linear(in_features=128, out_features=2, bias=True)\n)", + "crumbs": [ + "Models", + "CNNs", + "ResNet" + ] + }, + { + "objectID": "models.mwdn.html", + "href": "models.mwdn.html", + "title": "mWDN", + "section": "", + "text": "multilevel Wavelet Decomposition Network (mWDN)\n\nThis is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co\n\nsource\n\nWaveBlock\n\n WaveBlock (c_in, c_out, seq_len, wavelet=None)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nmWDNPlus\n\n mWDNPlus (c_in, c_out, seq_len, d=None, levels=3, wavelet=None,\n base_model=None, base_arch=<class\n 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, **kwargs)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nmWDNBlocks\n\n mWDNBlocks (c_in, c_out, seq_len, levels=3, wavelet=None)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nmWDN\n\n mWDN (c_in, c_out, seq_len, levels=3, wavelet=None, base_arch=<class\n 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, **kwargs)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nfrom tsai.models.TSTPlus import TSTPlus\n\n\nbs = 16\nc_in = 3\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, c_in, seq_len).to(default_device())\ntest_eq(mWDN(c_in, c_out, seq_len).to(xb.device)(xb).shape, [bs, c_out])\nmodel = mWDNPlus(c_in, c_out, seq_len, fc_dropout=.5)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nmodel = mWDNPlus(c_in, c_out, seq_len, base_arch=TSTPlus, fc_dropout=.5)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\n\n\nmodel.head, model.head_nf\n\n(Sequential(\n (0): GELU(approximate='none')\n (1): fastai.layers.Flatten(full=False)\n (2): LinBnDrop(\n (0): Dropout(p=0.5, inplace=False)\n (1): Linear(in_features=1536, out_features=2, bias=True)\n )\n ),\n 128)\n\n\n\nbs = 16\nc_in = 3\nseq_len = 12\nd = 10\nc_out = 2\nxb = torch.rand(bs, c_in, seq_len).to(default_device())\nmodel = mWDNPlus(c_in, c_out, seq_len, d=d)\ntest_eq(model.to(xb.device)(xb).shape, [bs, d, c_out])\n\n\nbs = 16\nc_in = 3\nseq_len = 12\nd = (5, 2)\nc_out = 2\nxb = torch.rand(bs, c_in, seq_len).to(default_device())\nmodel = mWDNPlus(c_in, c_out, seq_len, d=d)\ntest_eq(model.to(xb.device)(xb).shape, [bs, *d, c_out])", + "crumbs": [ + "Models", + "Wavelet-based NNs", + "mWDN" + ] + }, + { + "objectID": "models.fcn.html", + "href": "models.fcn.html", + "title": "FCN", + "section": "", + "text": "This is an unofficial PyTorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on:\n\nWang, Z., Yan, W., & Oates, T. (2017, May). Time series classification from scratch with deep neural networks: A strong baseline. In 2017 international joint conference on neural networks (IJCNN) (pp. 1578-1585). IEEE.\nFawaz, H. I., Forestier, G., Weber, J., Idoumghar, L., & Muller, P. A. (2019). Deep learning for time series classification: a review. Data Mining and Knowledge Discovery, 33(4), 917-963.\n\nOfficial FCN TensorFlow implementation: https://github.com/hfawaz/dl-4-tsc/blob/master/classifiers/fcn.py.\nNote: kernel filter size 8 has been replaced by 7 (since we believe it’s a bug).\n\nsource\n\nFCN\n\n FCN (c_in, c_out, layers=[128, 256, 128], kss=[7, 5, 3])\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 16\nnvars = 3\nseq_len = 128\nc_out = 2\nxb = torch.rand(bs, nvars, seq_len)\nmodel = FCN(nvars, c_out)\ntest_eq(model(xb).shape, (bs, c_out))\nmodel\n\nFCN(\n (convblock1): ConvBlock(\n (0): Conv1d(3, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (convblock2): ConvBlock(\n (0): Conv1d(128, 256, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)\n (1): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (convblock3): ConvBlock(\n (0): Conv1d(256, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (gap): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Flatten(full=False)\n )\n (fc): Linear(in_features=128, out_features=2, bias=True)\n)", + "crumbs": [ + "Models", + "CNNs", + "FCN" + ] + }, + { + "objectID": "models.gmlp.html", + "href": "models.gmlp.html", + "title": "gMLP", + "section": "", + "text": "This is an unofficial PyTorch implementation based on:\n\nLiu, H., Dai, Z., So, D. R., & Le, Q. V. (2021). Pay Attention to MLPs. arXiv preprint arXiv:2105.08050.\nCholakov, R., & Kolev, T. (2022). The GatedTabTransformer. An enhanced deep learning architecture for tabular modeling. arXiv preprint arXiv:2201.00199.\n\n\nsource\n\ngMLP\n\n gMLP (c_in, c_out, seq_len, patch_size=1, d_model=256, d_ffn=512,\n depth=6)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nbs = 16\nc_in = 3\nc_out = 2\nseq_len = 64\npatch_size = 4\nxb = torch.rand(bs, c_in, seq_len)\nmodel = gMLP(c_in, c_out, seq_len, patch_size=patch_size)\ntest_eq(model(xb).shape, (bs, c_out))", + "crumbs": [ + "Models", + "MLPs", + "gMLP" + ] + }, + { + "objectID": "models.transformerrnnplus.html", + "href": "models.transformerrnnplus.html", + "title": "TransformerRNNPlus", + "section": "", + "text": "These is a Pytorch implementation of a Transformer + RNN created by Ignacio Oguiza - oguiza@timeseriesAI.co inspired by the code created by Baurzhan Urazalinov (https://www.kaggle.com/baurzhanurazalinov).\nBaurzhan Urazalinov won a Kaggle competition (Parkinson’s Freezing of Gait Prediction: Event detection from wearable sensor data - 2023) using the following original tensorflow code:\n\nhttps://www.kaggle.com/code/baurzhanurazalinov/parkinson-s-freezing-defog-training-code\nhttps://www.kaggle.com/code/baurzhanurazalinov/parkinson-s-freezing-tdcsfog-training-code\nhttps://www.kaggle.com/code/baurzhanurazalinov/parkinson-s-freezing-submission-code\n\nI’d like to congratulate Baurzhan for winning this competition, and for sharing the code he used.\n\nfrom tsai.models.utils import count_parameters\n\n\nt = torch.rand(4, 864, 54)\nencoder_layer = torch.nn.TransformerEncoderLayer(54, 6, dim_feedforward=2048, dropout=0.1, \n activation=\"relu\", layer_norm_eps=1e-05, \n batch_first=True, norm_first=False)\nprint(encoder_layer(t).shape)\nprint(count_parameters(encoder_layer))\n\ntorch.Size([4, 864, 54])\n235382\n\n\n\nbs = 4\nc_in = 5\nseq_len = 50\n\nencoder = _TransformerRNNEncoder(nn.LSTM, c_in=c_in, seq_len=seq_len, d_model=128, nhead=4, num_encoder_layers=1, dim_feedforward=None, proj_dropout=0.1, dropout=0.1, num_rnn_layers=3, bidirectional=True)\nt = torch.randn(bs, c_in, seq_len)\nprint(encoder(t).shape)\n\ntorch.Size([4, 1024, 50])\n\n\n\nsource\n\nTransformerGRUPlus\n\n TransformerGRUPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,\n d_model:int=128, nhead:int=16,\n proj_dropout:float=0.1, num_encoder_layers:int=1,\n dim_feedforward:int=2048, dropout:float=0.1,\n num_rnn_layers:int=1, bidirectional:bool=True,\n custom_head=None, **kwargs)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\nNumber of channels in the input tensor.\n\n\nc_out\nint\n\nNumber of output channels.\n\n\nseq_len\nint\n\nNumber of time steps in the input tensor.\n\n\nd\ntuple\nNone\nint or tuple with shape of the output tensor\n\n\nd_model\nint\n128\nTotal dimension of the model.\n\n\nnhead\nint\n16\nNumber of parallel attention heads (d_model will be split across nhead - each head will have dimension d_model // nhead).\n\n\nproj_dropout\nfloat\n0.1\nDropout probability after the first linear layer. Default: 0.1.\n\n\nnum_encoder_layers\nint\n1\nNumber of transformer encoder layers. Default: 1.\n\n\ndim_feedforward\nint\n2048\nThe dimension of the feedforward network model. Default: 2048.\n\n\ndropout\nfloat\n0.1\nTransformer encoder layers dropout. Default: 0.1.\n\n\nnum_rnn_layers\nint\n1\nNumber of RNN layers in the encoder. Default: 1.\n\n\nbidirectional\nbool\nTrue\nIf True, becomes a bidirectional RNN. Default: True.\n\n\ncustom_head\nNoneType\nNone\nCustom head that will be applied to the model. If None, a head with c_out outputs will be used. Default: None.\n\n\nkwargs\n\n\n\n\n\n\n\nsource\n\n\nTransformerLSTMPlus\n\n TransformerLSTMPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,\n d_model:int=128, nhead:int=16,\n proj_dropout:float=0.1, num_encoder_layers:int=1,\n dim_feedforward:int=2048, dropout:float=0.1,\n num_rnn_layers:int=1, bidirectional:bool=True,\n custom_head=None, **kwargs)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\nNumber of channels in the input tensor.\n\n\nc_out\nint\n\nNumber of output channels.\n\n\nseq_len\nint\n\nNumber of time steps in the input tensor.\n\n\nd\ntuple\nNone\nint or tuple with shape of the output tensor\n\n\nd_model\nint\n128\nTotal dimension of the model.\n\n\nnhead\nint\n16\nNumber of parallel attention heads (d_model will be split across nhead - each head will have dimension d_model // nhead).\n\n\nproj_dropout\nfloat\n0.1\nDropout probability after the first linear layer. Default: 0.1.\n\n\nnum_encoder_layers\nint\n1\nNumber of transformer encoder layers. Default: 1.\n\n\ndim_feedforward\nint\n2048\nThe dimension of the feedforward network model. Default: 2048.\n\n\ndropout\nfloat\n0.1\nTransformer encoder layers dropout. Default: 0.1.\n\n\nnum_rnn_layers\nint\n1\nNumber of RNN layers in the encoder. Default: 1.\n\n\nbidirectional\nbool\nTrue\nIf True, becomes a bidirectional RNN. Default: True.\n\n\ncustom_head\nNoneType\nNone\nCustom head that will be applied to the model. If None, a head with c_out outputs will be used. Default: None.\n\n\nkwargs\n\n\n\n\n\n\n\nsource\n\n\nTransformerRNNPlus\n\n TransformerRNNPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,\n d_model:int=128, nhead:int=16,\n proj_dropout:float=0.1, num_encoder_layers:int=1,\n dim_feedforward:int=2048, dropout:float=0.1,\n num_rnn_layers:int=1, bidirectional:bool=True,\n custom_head=None, **kwargs)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\nNumber of channels in the input tensor.\n\n\nc_out\nint\n\nNumber of output channels.\n\n\nseq_len\nint\n\nNumber of time steps in the input tensor.\n\n\nd\ntuple\nNone\nint or tuple with shape of the output tensor\n\n\nd_model\nint\n128\nTotal dimension of the model.\n\n\nnhead\nint\n16\nNumber of parallel attention heads (d_model will be split across nhead - each head will have dimension d_model // nhead).\n\n\nproj_dropout\nfloat\n0.1\nDropout probability after the first linear layer. Default: 0.1.\n\n\nnum_encoder_layers\nint\n1\nNumber of transformer encoder layers. Default: 1.\n\n\ndim_feedforward\nint\n2048\nThe dimension of the feedforward network model. Default: 2048.\n\n\ndropout\nfloat\n0.1\nTransformer encoder layers dropout. Default: 0.1.\n\n\nnum_rnn_layers\nint\n1\nNumber of RNN layers in the encoder. Default: 1.\n\n\nbidirectional\nbool\nTrue\nIf True, becomes a bidirectional RNN. Default: True.\n\n\ncustom_head\nNoneType\nNone\nCustom head that will be applied to the model. If None, a head with c_out outputs will be used. Default: None.\n\n\nkwargs\n\n\n\n\n\n\n\nbs = 4\nc_in = 5\nc_out = 1\nseq_len = 50\nd = None\n\nmodel = TransformerRNNPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)\nt = torch.randn(bs, c_in, seq_len)\nassert model(t).shape == torch.Size([4]) \nprint(model(t).shape)\n\nmodel = TransformerLSTMPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)\nt = torch.randn(bs, c_in, seq_len)\nassert model(t).shape == torch.Size([4])\nprint(model(t).shape)\n\nmodel = TransformerGRUPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)\nt = torch.randn(bs, c_in, seq_len)\nassert model(t).shape == torch.Size([4])\nprint(model(t).shape)\n\ntorch.Size([4])\ntorch.Size([4])\ntorch.Size([4])\n\n\n\nbs = 4\nc_in = 5\nc_out = 3\nseq_len = 50\nd = None\n\nmodel = TransformerRNNPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)\nt = torch.randn(bs, c_in, seq_len)\nassert model(t).shape == (bs, c_out)\nprint(model(t).shape)\n\nmodel = TransformerLSTMPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)\nt = torch.randn(bs, c_in, seq_len)\nassert model(t).shape == (bs, c_out)\nprint(model(t).shape)\n\nmodel = TransformerGRUPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)\nt = torch.randn(bs, c_in, seq_len)\nassert model(t).shape == (bs, c_out)\nprint(model(t).shape)\n\ntorch.Size([4, 3])\ntorch.Size([4, 3])\ntorch.Size([4, 3])\n\n\n\nbs = 4\nc_in = 5\nc_out = 3\nseq_len = 50\nd = 50\n\nmodel = TransformerRNNPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)\nt = torch.randn(bs, c_in, seq_len)\nassert model(t).shape == (bs, d, c_out)\nprint(model(t).shape)\n\nmodel = TransformerLSTMPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)\nt = torch.randn(bs, c_in, seq_len)\nassert model(t).shape == (bs, d, c_out)\nprint(model(t).shape)\n\nmodel = TransformerGRUPlus(c_in=c_in, c_out=c_out, seq_len=seq_len, d=d, proj_dropout=0.1, d_model=128, nhead=4, num_encoder_layers=2, dropout=0.1, num_rnn_layers=1, bidirectional=True)\nt = torch.randn(bs, c_in, seq_len)\nassert model(t).shape == (bs, d, c_out)\nprint(model(t).shape)\n\ntorch.Size([4, 50, 3])\ntorch.Size([4, 50, 3])\ntorch.Size([4, 50, 3])", + "crumbs": [ + "Models", + "Hybrid models", + "TransformerRNNPlus" + ] + }, + { + "objectID": "models.rnn_fcnplus.html", + "href": "models.rnn_fcnplus.html", + "title": "RNN_FCNPlus", + "section": "", + "text": "This is an unofficial PyTorch implementation by Ignacio Oguiza - oguiza@timeseriesAI.co\n\n\nsource\n\nMGRU_FCNPlus\n\n MGRU_FCNPlus (*args, se=16, **kwargs)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nMLSTM_FCNPlus\n\n MLSTM_FCNPlus (*args, se=16, **kwargs)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nMRNN_FCNPlus\n\n MRNN_FCNPlus (*args, se=16, **kwargs)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nGRU_FCNPlus\n\n GRU_FCNPlus (c_in, c_out, seq_len=None, d=None, hidden_size=100,\n rnn_layers=1, bias=True, cell_dropout=0, rnn_dropout=0.8,\n bidirectional=False, shuffle=True, fc_dropout=0.0,\n use_bn=False, conv_layers=[128, 256, 128], kss=[7, 5, 3],\n se=0, custom_head=None)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nLSTM_FCNPlus\n\n LSTM_FCNPlus (c_in, c_out, seq_len=None, d=None, hidden_size=100,\n rnn_layers=1, bias=True, cell_dropout=0, rnn_dropout=0.8,\n bidirectional=False, shuffle=True, fc_dropout=0.0,\n use_bn=False, conv_layers=[128, 256, 128], kss=[7, 5, 3],\n se=0, custom_head=None)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nRNN_FCNPlus\n\n RNN_FCNPlus (c_in, c_out, seq_len=None, d=None, hidden_size=100,\n rnn_layers=1, bias=True, cell_dropout=0, rnn_dropout=0.8,\n bidirectional=False, shuffle=True, fc_dropout=0.0,\n use_bn=False, conv_layers=[128, 256, 128], kss=[7, 5, 3],\n se=0, custom_head=None)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nfrom tsai.models.utils import count_parameters\nfrom tsai.models.RNN_FCN import *\n\n\nbs = 16\nn_vars = 3\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\ntest_eq(RNN_FCNPlus(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])\ntest_eq(LSTM_FCNPlus(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])\ntest_eq(MLSTM_FCNPlus(n_vars, c_out, seq_len)(xb).shape, [bs, c_out])\ntest_eq(GRU_FCNPlus(n_vars, c_out, shuffle=False)(xb).shape, [bs, c_out])\ntest_eq(GRU_FCNPlus(n_vars, c_out, seq_len, shuffle=False)(xb).shape, [bs, c_out])\ntest_eq(count_parameters(LSTM_FCNPlus(n_vars, c_out, seq_len)), count_parameters(LSTM_FCN(n_vars, c_out, seq_len)))\n\n\nbs = 16\nn_vars = 3\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\ncustom_head = nn.Linear(228, c_out)\ntest_eq(RNN_FCNPlus(n_vars, c_out, seq_len, custom_head=custom_head)(xb).shape, [bs, c_out])\n\n\nbs = 16\nn_vars = 3\nseq_len = 12\nd = 10\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\ntest_eq(RNN_FCNPlus(n_vars, c_out, seq_len, d=d)(xb).shape, [bs, d, c_out])\n\n\nbs = 16\nn_vars = 3\nseq_len = 12\nd = (5, 3)\nc_out = 2\nxb = torch.rand(bs, n_vars, seq_len)\ntest_eq(RNN_FCNPlus(n_vars, c_out, seq_len, d=d)(xb).shape, [bs, *d, c_out])\n\n\nLSTM_FCNPlus(n_vars, seq_len, c_out, se=8)\n\nLSTM_FCNPlus(\n (backbone): _RNN_FCN_Base_Backbone(\n (rnn): LSTM(2, 100, batch_first=True)\n (rnn_dropout): Dropout(p=0.8, inplace=False)\n (convblock1): ConvBlock(\n (0): Conv1d(3, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (se1): SqueezeExciteBlock(\n (avg_pool): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Reshape(bs)\n )\n (fc): Sequential(\n (0): Linear(in_features=128, out_features=16, bias=False)\n (1): ReLU()\n (2): Linear(in_features=16, out_features=128, bias=False)\n (3): Sigmoid()\n )\n )\n (convblock2): ConvBlock(\n (0): Conv1d(128, 256, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)\n (1): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (se2): SqueezeExciteBlock(\n (avg_pool): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Reshape(bs)\n )\n (fc): Sequential(\n (0): Linear(in_features=256, out_features=32, bias=False)\n (1): ReLU()\n (2): Linear(in_features=32, out_features=256, bias=False)\n (3): Sigmoid()\n )\n )\n (convblock3): ConvBlock(\n (0): Conv1d(256, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (gap): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Reshape(bs)\n )\n (concat): Concat(dim=1)\n )\n (head): Sequential(\n (0): Linear(in_features=228, out_features=12, bias=True)\n )\n)", + "crumbs": [ + "Models", + "Hybrid models", + "RNN_FCNPlus" + ] + }, + { + "objectID": "models.explainability.html", + "href": "models.explainability.html", + "title": "Explainability", + "section": "", + "text": "Functionality to help with both global and local explainability.\n\n\nsource\n\nget_attribution_map\n\n get_attribution_map (model, modules, x, y=None, detach=True, cpu=False,\n apply_relu=True)\n\n\nsource\n\n\nget_acts_and_grads\n\n get_acts_and_grads (model, modules, x, y=None, detach=True, cpu=False)\n\nReturns activations and gradients for given modules in a model and a single input or a batch. Gradients require y value(s). If they are not provided, it will use the predictions.", + "crumbs": [ + "Explainability" + ] + }, + { + "objectID": "callback.noisy_student.html", + "href": "callback.noisy_student.html", + "title": "Noisy student", + "section": "", + "text": "Callback to apply noisy student self-training (a semi-supervised learning approach) based on:\nXie, Q., Luong, M. T., Hovy, E., & Le, Q. V. (2020). Self-training with noisy student improves imagenet classification. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 10687-10698).\n\nsource\n\nNoisyStudent\n\n NoisyStudent (dl2:fastai.data.load.DataLoader, bs:Optional[int]=None,\n l2pl_ratio:int=1, batch_tfms:Optional[list]=None,\n do_setup:bool=True, pseudolabel_sample_weight:float=1.0,\n verbose=False)\n\nA callback to implement the Noisy Student approach. In the original paper this was used in combination with noise: - stochastic depth: .8 - RandAugment: N=2, M=27 - dropout: .5\nSteps: 1. Build the dl you will use as a teacher 2. Create dl2 with the pseudolabels (either soft or hard preds) 3. Pass any required batch_tfms to the callback\n\nfrom tsai.data.all import *\nfrom tsai.models.all import *\nfrom tsai.tslearner import *\n\n\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, return_split=False)\nX = X.astype(np.float32)\n\n\npseudolabeled_data = X\nsoft_preds = True\n\npseudolabels = ToNumpyCategory()(y) if soft_preds else OneHot()(y)\ndsets2 = TSDatasets(pseudolabeled_data, pseudolabels)\ndl2 = TSDataLoader(dsets2, num_workers=0)\nnoisy_student_cb = NoisyStudent(dl2, bs=256, l2pl_ratio=2, verbose=True)\ntfms = [None, TSClassification]\nlearn = TSClassifier(X, y, splits=splits, tfms=tfms, batch_tfms=[TSStandardize(), TSRandomSize(.5)], cbs=noisy_student_cb)\nlearn.fit_one_cycle(1)\n\nlabels / pseudolabels per training batch : 171 / 85\nrelative labeled/ pseudolabel sample weight in dataset: 4.0\n\nX: torch.Size([171, 24, 51]) X2: torch.Size([85, 24, 51]) X_comb: torch.Size([256, 24, 41])\ny: torch.Size([171]) y2: torch.Size([85]) y_comb: torch.Size([256])\n\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\ntime\n\n\n\n\n0\n1.782144\n1.758471\n0.250000\n00:00\n\n\n\n\n\n\npseudolabeled_data = X\nsoft_preds = False\n\npseudolabels = ToNumpyCategory()(y) if soft_preds else OneHot()(y)\npseudolabels = pseudolabels.astype(np.float32)\ndsets2 = TSDatasets(pseudolabeled_data, pseudolabels)\ndl2 = TSDataLoader(dsets2, num_workers=0)\nnoisy_student_cb = NoisyStudent(dl2, bs=256, l2pl_ratio=2, verbose=True)\ntfms = [None, TSClassification]\nlearn = TSClassifier(X, y, splits=splits, tfms=tfms, batch_tfms=[TSStandardize(), TSRandomSize(.5)], cbs=noisy_student_cb)\nlearn.fit_one_cycle(1)\n\nlabels / pseudolabels per training batch : 171 / 85\nrelative labeled/ pseudolabel sample weight in dataset: 4.0\n\nX: torch.Size([171, 24, 51]) X2: torch.Size([85, 24, 51]) X_comb: torch.Size([256, 24, 51])\ny: torch.Size([171, 6]) y2: torch.Size([85, 6]) y_comb: torch.Size([256, 6])\n\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\ntime\n\n\n\n\n0\n1.898401\n1.841182\n0.155556\n00:00", + "crumbs": [ + "Training", + "Callbacks", + "Noisy student" + ] + }, + { + "objectID": "data.preparation.html", + "href": "data.preparation.html", + "title": "Data preparation", + "section": "", + "text": "Functions required to prepare X (and y) from a pandas dataframe.\n\n\nsource\n\napply_sliding_window\n\n apply_sliding_window (data, window_len:Union[int,list],\n horizon:Union[int,list]=0,\n x_vars:Union[int,list]=None,\n y_vars:Union[int,list]=None)\n\nApplies a sliding window on an array-like input to generate a 3d X (and optionally y)\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndata\n\n\nand array-like object with the input data\n\n\nwindow_len\nint | list\n\nsliding window length. When using a list, use negative numbers and 0.\n\n\nhorizon\nint | list\n0\nhorizon\n\n\nx_vars\nint | list\nNone\nindices of the independent variables\n\n\ny_vars\nint | list\nNone\nindices of the dependent variables (target). [] means no y will be created. None means all variables.\n\n\n\n\nsource\n\n\nprepare_sel_vars_and_steps\n\n prepare_sel_vars_and_steps (sel_vars=None, sel_steps=None, idxs=False)\n\n\nsource\n\n\nprepare_idxs\n\n prepare_idxs (o, shape=None)\n\n\ndata = np.arange(20).reshape(-1,1).repeat(3, 1) * np.array([1, 10, 100])\ndf = pd.DataFrame(data, columns=['feat_1', 'feat_2', 'feat_3'])\ndf.head()\n\n\n\n\n\n\n\n\nfeat_1\nfeat_2\nfeat_3\n\n\n\n\n0\n0\n0\n0\n\n\n1\n1\n10\n100\n\n\n2\n2\n20\n200\n\n\n3\n3\n30\n300\n\n\n4\n4\n40\n400\n\n\n\n\n\n\n\n\nwindow_len = 8\nhorizon = 1\nx_vars = None\ny_vars = None\nX, y = apply_sliding_window(data, window_len, horizon=horizon, x_vars=x_vars, y_vars=y_vars)\nprint(np.shares_memory(X, data))\nprint(np.shares_memory(y, data))\nprint(X.shape, y.shape)\ntest_eq(X.shape, (len(df) - (window_len - 1 + horizon), df.shape[1], window_len))\ntest_eq(y.shape, (len(df) - (window_len - 1 + horizon), df.shape[1]))\nX[0], y[0]\n\nTrue\nTrue\n(12, 3, 8) (12, 3)\n\n\n(array([[ 0, 1, 2, 3, 4, 5, 6, 7],\n [ 0, 10, 20, 30, 40, 50, 60, 70],\n [ 0, 100, 200, 300, 400, 500, 600, 700]]),\n array([ 8, 80, 800]))\n\n\n\nwindow_len = 8\nhorizon = 1\nx_vars = None\ny_vars = 0\nX, y = apply_sliding_window(df, window_len, horizon=horizon, x_vars=x_vars, y_vars=y_vars)\nprint(np.shares_memory(X, df))\nprint(np.shares_memory(y, df))\nprint(X.shape, y.shape)\ntest_eq(X.shape, (len(df) - (window_len - 1 + horizon), df.shape[1], window_len))\ntest_eq(y.shape, (len(df) - (window_len - 1 + horizon),))\nX[0], y[0]\n\nTrue\nTrue\n(12, 3, 8) (12,)\n\n\n(array([[ 0, 1, 2, 3, 4, 5, 6, 7],\n [ 0, 10, 20, 30, 40, 50, 60, 70],\n [ 0, 100, 200, 300, 400, 500, 600, 700]]),\n 8)\n\n\n\nwindow_len = 8\nhorizon = [1, 2]\nx_vars = 0\ny_vars = [1, 2]\nX, y = apply_sliding_window(df, window_len, horizon=horizon, x_vars=x_vars, y_vars=y_vars)\nprint(np.shares_memory(X, df))\nprint(np.shares_memory(y, df))\nprint(X.shape, y.shape)\ntest_eq(X.shape, (len(df) - (window_len - 1 + max(horizon)), 1, window_len))\ntest_eq(y.shape, (len(df) - (window_len - 1 + max(horizon)), len(y_vars), len(horizon)))\nX[0], y[0]\n\nTrue\nFalse\n(11, 1, 8) (11, 2, 2)\n\n\n(array([[0, 1, 2, 3, 4, 5, 6, 7]]),\n array([[ 80, 90],\n [800, 900]]))\n\n\n\nwindow_len = [-4, -2, -1, 0]\nhorizon = [1, 2, 4]\nx_vars = 0\ny_vars = [1, 2]\nX, y = apply_sliding_window(df, window_len, horizon=horizon, x_vars=x_vars, y_vars=y_vars)\nprint(np.shares_memory(X, df))\nprint(np.shares_memory(y, df))\nprint(X.shape, y.shape)\ntest_eq(X.shape, (12, 1, 4))\ntest_eq(y.shape, (12, 2, 3))\nX[0], y[0]\n\nFalse\nFalse\n(12, 1, 4) (12, 2, 3)\n\n\n(array([[0, 2, 3, 4]]),\n array([[ 50, 60, 80],\n [500, 600, 800]]))\n\n\n\nsource\n\n\ndf2Xy\n\n df2Xy (df, sample_col=None, feat_col=None, data_cols=None,\n target_col=None, steps_in_rows=False, to3d=True, splits=None,\n sort_by=None, ascending=True, y_func=None, return_names=False)\n\nThis function allows you to transform a pandas dataframe into X and y numpy arrays that can be used to create a TSDataset. sample_col: column that uniquely identifies each sample. feat_col: used for multivariate datasets. It indicates which is the column that indicates the feature by row. data_col: indicates ths column/s where the data is located. If None, it means all columns (except the sample_col, feat_col, and target_col) target_col: indicates the column/s where the target is. steps_in_rows: flag to indicate if each step is in a different row or in a different column (default). to3d: turns X to 3d (including univariate time series) sort_by: this is used to pass any colum/s that are needed to sort the steps in the sequence. If you pass a sample_col and/ or feat_col these will be automatically used before the sort_by column/s, and you don’t need to add them to the sort_by column/s list. y_func: function used to calculate y for each sample (and target_col) return_names: flag to return the names of the columns from where X was generated\n\nsource\n\n\nsplit_Xy\n\n split_Xy (X, y=None, splits=None)\n\n\ndf = pd.DataFrame()\ndf['sample_id'] = np.array([1,1,1,2,2,2,3,3,3])\ndf['var1'] = df['sample_id'] * 10 + df.index.values\ndf['var2'] = df['sample_id'] * 100 + df.index.values\ndf\n\n\n\n\n\n\n\n\nsample_id\nvar1\nvar2\n\n\n\n\n0\n1\n10\n100\n\n\n1\n1\n11\n101\n\n\n2\n1\n12\n102\n\n\n3\n2\n23\n203\n\n\n4\n2\n24\n204\n\n\n5\n2\n25\n205\n\n\n6\n3\n36\n306\n\n\n7\n3\n37\n307\n\n\n8\n3\n38\n308\n\n\n\n\n\n\n\n\nX_df, y_df = df2Xy(df, sample_col='sample_id', steps_in_rows=True)\ntest_eq(X_df[0], np.array([[10, 11, 12], [100, 101, 102]]))\n\n\nn_samples = 1_000\nn_rows = 10_000\n\nsample_ids = np.arange(n_samples).repeat(n_rows//n_samples).reshape(-1,1)\nfeat_ids = np.tile(np.arange(n_rows // n_samples), n_samples).reshape(-1,1)\ncont = np.random.randn(n_rows, 6)\nind_cat = np.random.randint(0, 3, (n_rows, 1))\ntarget = np.array([0,1,2])[ind_cat]\nind_cat2 = np.random.randint(0, 3, (n_rows, 1))\ntarget2 = np.array([100,200,300])[ind_cat2]\ndata = np.concatenate([sample_ids, feat_ids, cont, target, target], -1)\ncolumns = ['sample_id', 'feat_id'] + (np.arange(6) + 1).astype(str).tolist() + ['target'] + ['target2']\ndf = pd.DataFrame(data, columns=columns)\nidx = random_choice(np.arange(len(df)), len(df), False)\nnew_dtypes = {'sample_id':np.int32, 'feat_id':np.int32, '1':np.float32, '2':np.float32, '3':np.float32, '4':np.float32, '5':np.float32, '6':np.float32}\ndf = df.astype(dtype=new_dtypes)\ndf = df.loc[idx].reset_index(drop=True)\ndf\n\n\n\n\n\n\n\n\nsample_id\nfeat_id\n1\n2\n3\n4\n5\n6\ntarget\ntarget2\n\n\n\n\n0\n625\n2\n-1.390549\n0.770179\n-0.848480\n0.853631\n-0.309984\n0.874338\n2.0\n2.0\n\n\n1\n526\n4\n1.152397\n2.064397\n-0.392603\n-0.275797\n-0.047526\n-2.248814\n2.0\n2.0\n\n\n2\n397\n6\n-1.052930\n0.631396\n-0.758800\n-0.606483\n-2.776054\n-0.457755\n1.0\n1.0\n\n\n3\n528\n8\n-0.178637\n-1.253319\n-1.154014\n0.913876\n1.051010\n-0.635762\n1.0\n1.0\n\n\n4\n249\n2\n0.612595\n0.888297\n0.065024\n1.621935\n-0.180479\n0.309977\n1.0\n1.0\n\n\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n...\n\n\n9995\n272\n1\n-0.432325\n1.645262\n1.502872\n-1.144859\n0.919653\n0.414304\n0.0\n0.0\n\n\n9996\n920\n5\n-0.724702\n-1.471832\n1.209086\n1.206532\n0.555676\n0.352726\n2.0\n2.0\n\n\n9997\n662\n6\n1.122043\n-0.379357\n-0.344517\n-1.545091\n0.187894\n1.062510\n2.0\n2.0\n\n\n9998\n71\n7\n-0.053582\n-0.854992\n-1.118632\n-1.967820\n-0.344804\n0.128105\n0.0\n0.0\n\n\n9999\n407\n4\n-1.565716\n-0.947183\n-0.401944\n-1.309024\n-0.237755\n-0.743251\n2.0\n2.0\n\n\n\n\n10000 rows × 10 columns\n\n\n\n\nfrom scipy.stats import mode\n\n\ndef y_func(o): return mode(o, axis=1, keepdims=True).mode\nX, y = df2xy(df, sample_col='sample_id', feat_col='feat_id', target_col=['target', 'target2'], sort_by=['sample_id', 'feat_id'], y_func=y_func)\ntest_eq(X.shape, (1000, 10, 6))\ntest_eq(y.shape, (1000, 2))\nrand_idx = np.random.randint(0, np.max(df.sample_id))\nsorted_df = df.sort_values(by=['sample_id', 'feat_id'], kind='stable').reset_index(drop=True)\ntest_eq(X[rand_idx], sorted_df[sorted_df.sample_id == rand_idx][['1', '2', '3', '4', '5', '6']].values)\ntest_eq(np.squeeze(mode(sorted_df[sorted_df.sample_id == rand_idx][['target', 'target2']].values).mode), y[rand_idx])\n\n\n# Univariate\nfrom io import StringIO\n\n\nTESTDATA = StringIO(\"\"\"sample_id;value_0;value_1;target\n rob;2;3;0\n alice;6;7;1\n eve;11;12;2\n \"\"\")\n\ndf = pd.read_csv(TESTDATA, sep=\";\")\ndisplay(df)\nX, y = df2Xy(df, sample_col='sample_id', target_col='target', data_cols=['value_0', 'value_1'], sort_by='sample_id')\ntest_eq(X.shape, (3, 1, 2))\ntest_eq(y.shape, (3,))\nX, y\n\n\n\n\n\n\n\n\nsample_id\nvalue_0\nvalue_1\ntarget\n\n\n\n\n0\nrob\n2\n3\n0\n\n\n1\nalice\n6\n7\n1\n\n\n2\neve\n11\n12\n2\n\n\n\n\n\n\n\n(array([[[ 6, 7]],\n \n [[11, 12]],\n \n [[ 2, 3]]]),\n array([1, 2, 0]))\n\n\n\n# Univariate\nTESTDATA = StringIO(\"\"\"sample_id;timestep;values;target\n rob;1;2;0\n alice;1;6;1\n eve;1;11;2\n \n rob;2;3;0\n alice;2;7;1\n eve;2;12;2\n \"\"\")\n\ndf = pd.read_csv(TESTDATA, sep=\";\")\ndisplay(df)\ndef y_func(o): return mode(o, axis=1).mode\nX, y = df2xy(df, sample_col='sample_id', target_col='target', data_cols=['values'], sort_by='timestep', to3d=True, y_func=y_func)\ntest_eq(X.shape, (3, 1, 2))\ntest_eq(y.shape, (3, ))\nprint(X, y)\n\n\n\n\n\n\n\n\nsample_id\ntimestep\nvalues\ntarget\n\n\n\n\n0\nrob\n1\n2\n0\n\n\n1\nalice\n1\n6\n1\n\n\n2\neve\n1\n11\n2\n\n\n3\nrob\n2\n3\n0\n\n\n4\nalice\n2\n7\n1\n\n\n5\neve\n2\n12\n2\n\n\n\n\n\n\n\n[[[ 6 7]]\n\n [[11 12]]\n\n [[ 2 3]]] [1 2 0]\n\n\n\n# Multivariate\nTESTDATA = StringIO(\"\"\"sample_id;trait;value_0;value_1;target\n rob;green;2;3;0\n rob;yellow;3;4;0\n rob;blue;4;5;0\n rob;red;5;6;0\n alice;green;6;7;1\n alice;yellow;7;8;1\n alice;blue;8;9;1\n alice;red;9;10;1\n eve;yellow;11;12;2\n eve;green;10;11;2\n eve;blue;12;12;2\n eve;red;13;14;2\n \"\"\")\n\ndf = pd.read_csv(TESTDATA, sep=\";\")\nidx = random_choice(len(df), len(df), False)\ndf = df.iloc[idx]\ndisplay(df)\ndef y_func(o): return mode(o, axis=1).mode\nX, y = df2xy(df, sample_col='sample_id', feat_col='trait', target_col='target', data_cols=['value_0', 'value_1'], y_func=y_func)\nprint(X, y)\ntest_eq(X.shape, (3, 4, 2))\ntest_eq(y.shape, (3,))\n\n\n\n\n\n\n\n\nsample_id\ntrait\nvalue_0\nvalue_1\ntarget\n\n\n\n\n9\neve\ngreen\n10\n11\n2\n\n\n10\neve\nblue\n12\n12\n2\n\n\n3\nrob\nred\n5\n6\n0\n\n\n0\nrob\ngreen\n2\n3\n0\n\n\n6\nalice\nblue\n8\n9\n1\n\n\n2\nrob\nblue\n4\n5\n0\n\n\n1\nrob\nyellow\n3\n4\n0\n\n\n4\nalice\ngreen\n6\n7\n1\n\n\n7\nalice\nred\n9\n10\n1\n\n\n8\neve\nyellow\n11\n12\n2\n\n\n11\neve\nred\n13\n14\n2\n\n\n5\nalice\nyellow\n7\n8\n1\n\n\n\n\n\n\n\n[[[ 8 9]\n [ 6 7]\n [ 9 10]\n [ 7 8]]\n\n [[12 12]\n [10 11]\n [13 14]\n [11 12]]\n\n [[ 4 5]\n [ 2 3]\n [ 5 6]\n [ 3 4]]] [1 2 0]\n\n\n\n# Multivariate, multi-label\nTESTDATA = StringIO(\"\"\"sample_id;trait;value_0;value_1;target1;target2\n rob;green;2;3;0;0\n rob;yellow;3;4;0;0\n rob;blue;4;5;0;0\n rob;red;5;6;0;0\n alice;green;6;7;1;0\n alice;yellow;7;8;1;0\n alice;blue;8;9;1;0\n alice;red;9;10;1;0\n eve;yellow;11;12;2;1\n eve;green;10;11;2;1\n eve;blue;12;12;2;1\n eve;red;13;14;2;1\n \"\"\")\n\ndf = pd.read_csv(TESTDATA, sep=\";\")\ndisplay(df)\ndef y_func(o): return mode(o, axis=1, keepdims=True).mode\nX, y = df2xy(df, sample_col='sample_id', feat_col='trait', target_col=['target1', 'target2'], data_cols=['value_0', 'value_1'], y_func=y_func)\ntest_eq(X.shape, (3, 4, 2))\ntest_eq(y.shape, (3, 2))\nprint(X, y)\n\n\n\n\n\n\n\n\nsample_id\ntrait\nvalue_0\nvalue_1\ntarget1\ntarget2\n\n\n\n\n0\nrob\ngreen\n2\n3\n0\n0\n\n\n1\nrob\nyellow\n3\n4\n0\n0\n\n\n2\nrob\nblue\n4\n5\n0\n0\n\n\n3\nrob\nred\n5\n6\n0\n0\n\n\n4\nalice\ngreen\n6\n7\n1\n0\n\n\n5\nalice\nyellow\n7\n8\n1\n0\n\n\n6\nalice\nblue\n8\n9\n1\n0\n\n\n7\nalice\nred\n9\n10\n1\n0\n\n\n8\neve\nyellow\n11\n12\n2\n1\n\n\n9\neve\ngreen\n10\n11\n2\n1\n\n\n10\neve\nblue\n12\n12\n2\n1\n\n\n11\neve\nred\n13\n14\n2\n1\n\n\n\n\n\n\n\n[[[ 8 9]\n [ 6 7]\n [ 9 10]\n [ 7 8]]\n\n [[12 12]\n [10 11]\n [13 14]\n [11 12]]\n\n [[ 4 5]\n [ 2 3]\n [ 5 6]\n [ 3 4]]] [[1 0]\n [2 1]\n [0 0]]\n\n\n\n# Multivariate, unlabeled\nTESTDATA = StringIO(\"\"\"sample_id;trait;value_0;value_1;target\n rob;green;2;3;0\n rob;yellow;3;4;0\n rob;blue;4;5;0\n rob;red;5;6;0\n alice;green;6;7;1\n alice;yellow;7;8;1\n alice;blue;8;9;1\n alice;red;9;10;1\n eve;yellow;11;12;2\n eve;green;10;11;2\n eve;blue;12;12;2\n eve;red;13;14;2\n \"\"\")\n\ndf = pd.read_csv(TESTDATA, sep=\";\")\nidx = random_choice(len(df), len(df), False)\ndf = df.iloc[idx]\ndisplay(df)\ndef y_func(o): return mode(o, axis=1, keepdims=True).mode\nX, y = df2xy(df, sample_col='sample_id', feat_col='trait', data_cols=['value_0', 'value_1'], y_func=y_func)\nprint(X, y)\ntest_eq(X.shape, (3, 4, 2))\ntest_eq(y, None)\n\n\n\n\n\n\n\n\nsample_id\ntrait\nvalue_0\nvalue_1\ntarget\n\n\n\n\n11\neve\nred\n13\n14\n2\n\n\n3\nrob\nred\n5\n6\n0\n\n\n9\neve\ngreen\n10\n11\n2\n\n\n10\neve\nblue\n12\n12\n2\n\n\n6\nalice\nblue\n8\n9\n1\n\n\n1\nrob\nyellow\n3\n4\n0\n\n\n4\nalice\ngreen\n6\n7\n1\n\n\n2\nrob\nblue\n4\n5\n0\n\n\n0\nrob\ngreen\n2\n3\n0\n\n\n8\neve\nyellow\n11\n12\n2\n\n\n7\nalice\nred\n9\n10\n1\n\n\n5\nalice\nyellow\n7\n8\n1\n\n\n\n\n\n\n\n[[[ 8 9]\n [ 6 7]\n [ 9 10]\n [ 7 8]]\n\n [[12 12]\n [10 11]\n [13 14]\n [11 12]]\n\n [[ 4 5]\n [ 2 3]\n [ 5 6]\n [ 3 4]]] None\n\n\n\nTESTDATA = StringIO(\"\"\"sample_id;trait;timestep;values;target\n rob;green;1;2;0\n rob;yellow;1;3;0\n rob;blue;1;4;0\n rob;red;1;5;0\n alice;green;1;6;1\n alice;yellow;1;7;1\n alice;blue;1;8;1\n alice;red;1;9;1\n eve;yellow;1;11;2\n eve;green;1;10;2\n eve;blue;1;12;2\n eve;red;1;13;2\n \n rob;green;2;3;0\n rob;yellow;2;4;0\n rob;blue;2;5;0\n rob;red;2;6;0\n alice;green;2;7;1\n alice;yellow;2;8;1\n alice;blue;2;9;1\n alice;red;2;10;1\n eve;yellow;2;12;2\n eve;green;2;11;2\n eve;blue;2;13;2\n eve;red;2;14;2\n \"\"\")\n\ndf = pd.read_csv(TESTDATA, sep=\";\")\ndisplay(df)\ndef y_func(o): return mode(o, axis=1).mode\nX, y = df2xy(df, sample_col='sample_id', feat_col='trait', sort_by='timestep', target_col='target', data_cols=['values'], y_func=y_func)\nprint(X, y)\ntest_eq(X.shape, (3, 4, 2))\ntest_eq(y.shape, (3, ))\n\n\n\n\n\n\n\n\nsample_id\ntrait\ntimestep\nvalues\ntarget\n\n\n\n\n0\nrob\ngreen\n1\n2\n0\n\n\n1\nrob\nyellow\n1\n3\n0\n\n\n2\nrob\nblue\n1\n4\n0\n\n\n3\nrob\nred\n1\n5\n0\n\n\n4\nalice\ngreen\n1\n6\n1\n\n\n5\nalice\nyellow\n1\n7\n1\n\n\n6\nalice\nblue\n1\n8\n1\n\n\n7\nalice\nred\n1\n9\n1\n\n\n8\neve\nyellow\n1\n11\n2\n\n\n9\neve\ngreen\n1\n10\n2\n\n\n10\neve\nblue\n1\n12\n2\n\n\n11\neve\nred\n1\n13\n2\n\n\n12\nrob\ngreen\n2\n3\n0\n\n\n13\nrob\nyellow\n2\n4\n0\n\n\n14\nrob\nblue\n2\n5\n0\n\n\n15\nrob\nred\n2\n6\n0\n\n\n16\nalice\ngreen\n2\n7\n1\n\n\n17\nalice\nyellow\n2\n8\n1\n\n\n18\nalice\nblue\n2\n9\n1\n\n\n19\nalice\nred\n2\n10\n1\n\n\n20\neve\nyellow\n2\n12\n2\n\n\n21\neve\ngreen\n2\n11\n2\n\n\n22\neve\nblue\n2\n13\n2\n\n\n23\neve\nred\n2\n14\n2\n\n\n\n\n\n\n\n[[[ 8 9]\n [ 6 7]\n [ 9 10]\n [ 7 8]]\n\n [[12 13]\n [10 11]\n [13 14]\n [11 12]]\n\n [[ 4 5]\n [ 2 3]\n [ 5 6]\n [ 3 4]]] [1 2 0]\n\n\n\nsource\n\n\ndf2np3d\n\n df2np3d (df, groupby, data_cols=None)\n\nTransforms a df (with the same number of rows per group in groupby) to a 3d ndarray\n\nuser = np.array([1,2]).repeat(4).reshape(-1,1)\nval = np.random.rand(8, 3)\ndata = np.concatenate([user, val], axis=-1)\ndf = pd.DataFrame(data, columns=['user', 'x1', 'x2', 'x3'])\ntest_eq(df2np3d(df, ['user'], ['x1', 'x2', 'x3']).shape, (2, 3, 4))\n\n\nsource\n\n\nadd_missing_value_cols\n\n add_missing_value_cols (df, cols=None, dtype=<class 'float'>,\n fill_value=None)\n\n\ndata = np.random.randn(10, 2)\nmask = data > .8\ndata[mask] = np.nan\ndf = pd.DataFrame(data, columns=['A', 'B'])\ndf = add_missing_value_cols(df, cols=None, dtype=float)\ntest_eq(df['A'].isnull().sum(), df['missing_A'].sum())\ntest_eq(df['B'].isnull().sum(), df['missing_B'].sum())\ndf\n\n\n\n\n\n\n\n\nA\nB\nmissing_A\nmissing_B\n\n\n\n\n0\n0.476712\n-0.880797\n0.0\n0.0\n\n\n1\nNaN\n-1.517210\n1.0\n0.0\n\n\n2\n-1.348997\n-0.878441\n0.0\n0.0\n\n\n3\nNaN\n0.290756\n1.0\n0.0\n\n\n4\n0.569218\n-1.415777\n0.0\n0.0\n\n\n5\n0.591641\n-2.133860\n0.0\n0.0\n\n\n6\nNaN\nNaN\n1.0\n1.0\n\n\n7\nNaN\n-0.119397\n1.0\n0.0\n\n\n8\n-0.727988\n0.057254\n0.0\n0.0\n\n\n9\n-0.631352\n-0.219028\n0.0\n0.0\n\n\n\n\n\n\n\n\nsource\n\n\nadd_missing_timestamps\n\n add_missing_timestamps (df, datetime_col=None, use_index=False,\n unique_id_cols=None, groupby=None,\n fill_value=nan, range_by_group=True,\n start_date=None, end_date=None, freq=None)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndf\n\n\npandas DataFrame\n\n\ndatetime_col\nNoneType\nNone\ncolumn that contains the datetime data (without duplicates within groups)\n\n\nuse_index\nbool\nFalse\nindicates if the index contains the datetime data\n\n\nunique_id_cols\nNoneType\nNone\ncolumn used to identify unique_ids\n\n\ngroupby\nNoneType\nNone\nsame as unique_id_cols. Will be deprecated. Kept for compatiblity.\n\n\nfill_value\nfloat\nnan\nvalues that will be insert where missing dates exist. Default:np.nan\n\n\nrange_by_group\nbool\nTrue\nif True, dates will be filled between min and max dates for each group. Otherwise, between the min and max dates in the df.\n\n\nstart_date\nNoneType\nNone\nstart date to fill in missing dates (same for all unique_ids)\n\n\nend_date\nNoneType\nNone\nend date to fill in missing dates (same for all unique_ids)\n\n\nfreq\nNoneType\nNone\nfrequency used to fill in the missing datetime\n\n\n\n\n# Filling dates between min and max dates\ndates = pd.date_range('2021-05-01', '2021-05-07').values\ndata = np.zeros((len(dates), 3))\ndata[:, 0] = dates\ndata[:, 1] = np.random.rand(len(dates))\ndata[:, 2] = np.random.rand(len(dates))\ncols = ['date', 'feature1', 'feature2']\ndate_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float, 'feature2': float})\ndate_df_with_missing_dates = date_df.drop([1,3]).reset_index(drop=True)\ndate_df_with_missing_dates\n\n\n\n\n\n\n\n\ndate\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01\n0.537248\n0.670897\n\n\n1\n2021-05-03\n0.299912\n0.421039\n\n\n2\n2021-05-05\n0.648372\n0.204641\n\n\n3\n2021-05-06\n0.017475\n0.022183\n\n\n4\n2021-05-07\n0.965919\n0.470055\n\n\n\n\n\n\n\n\n# No groups\nexpected_output_df = date_df.copy()\nexpected_output_df.loc[[1,3], ['feature1', 'feature2']] = np.nan\ndisplay(expected_output_df)\noutput_df = add_missing_timestamps(date_df_with_missing_dates.copy(), \n 'date', \n unique_id_cols=None, \n fill_value=np.nan, \n range_by_group=False)\ntest_eq(output_df, expected_output_df)\n\n\n\n\n\n\n\n\ndate\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01\n0.537248\n0.670897\n\n\n1\n2021-05-02\nNaN\nNaN\n\n\n2\n2021-05-03\n0.299912\n0.421039\n\n\n3\n2021-05-04\nNaN\nNaN\n\n\n4\n2021-05-05\n0.648372\n0.204641\n\n\n5\n2021-05-06\n0.017475\n0.022183\n\n\n6\n2021-05-07\n0.965919\n0.470055\n\n\n\n\n\n\n\n\n# Filling dates between min and max dates for each value in groupby column\ndates = pd.date_range('2021-05-01', '2021-05-07').values\ndates = np.concatenate((dates, dates))\ndata = np.zeros((len(dates), 4))\ndata[:, 0] = dates\ndata[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))\ndata[:, 2] = np.random.rand(len(dates))\ndata[:, 3] = np.random.rand(len(dates))\ncols = ['date', 'id', 'feature1', 'feature2']\ndate_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})\ndate_df_with_missing_dates = date_df.drop([0,1,3,8,11,13]).reset_index(drop=True)\ndate_df_with_missing_dates\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-03\n0\n0.059398\n0.255853\n\n\n1\n2021-05-05\n0\n0.235536\n0.455261\n\n\n2\n2021-05-06\n0\n0.724423\n0.280910\n\n\n3\n2021-05-07\n0\n0.303682\n0.853959\n\n\n4\n2021-05-01\n1\n0.022424\n0.408510\n\n\n5\n2021-05-03\n1\n0.508190\n0.603880\n\n\n6\n2021-05-04\n1\n0.330924\n0.108156\n\n\n7\n2021-05-06\n1\n0.601481\n0.020182\n\n\n\n\n\n\n\n\n# groupby='id', range_by_group=True\nexpected_output_df = date_df.drop([0,1,13]).reset_index(drop=True) \nexpected_output_df.loc[[1,6,9], ['feature1', 'feature2']] = np.nan\ndisplay(expected_output_df)\noutput_df = add_missing_timestamps(date_df_with_missing_dates.copy(), \n 'date', \n unique_id_cols='id', \n fill_value=np.nan, \n range_by_group=True)\ntest_eq(expected_output_df, output_df)\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-03\n0\n0.059398\n0.255853\n\n\n1\n2021-05-04\n0\nNaN\nNaN\n\n\n2\n2021-05-05\n0\n0.235536\n0.455261\n\n\n3\n2021-05-06\n0\n0.724423\n0.280910\n\n\n4\n2021-05-07\n0\n0.303682\n0.853959\n\n\n5\n2021-05-01\n1\n0.022424\n0.408510\n\n\n6\n2021-05-02\n1\nNaN\nNaN\n\n\n7\n2021-05-03\n1\n0.508190\n0.603880\n\n\n8\n2021-05-04\n1\n0.330924\n0.108156\n\n\n9\n2021-05-05\n1\nNaN\nNaN\n\n\n10\n2021-05-06\n1\n0.601481\n0.020182\n\n\n\n\n\n\n\n\n# groupby='id', range_by_group=False\nexpected_output_df = date_df.copy() \nexpected_output_df.loc[[0,1,3,8,11,13], ['feature1', 'feature2']] = np.nan\ndisplay(expected_output_df)\noutput_df = add_missing_timestamps(date_df_with_missing_dates.copy(), \n 'date', \n unique_id_cols='id', \n fill_value=np.nan, \n range_by_group=False)\ntest_eq(expected_output_df, output_df)\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01\n0\nNaN\nNaN\n\n\n1\n2021-05-02\n0\nNaN\nNaN\n\n\n2\n2021-05-03\n0\n0.059398\n0.255853\n\n\n3\n2021-05-04\n0\nNaN\nNaN\n\n\n4\n2021-05-05\n0\n0.235536\n0.455261\n\n\n5\n2021-05-06\n0\n0.724423\n0.280910\n\n\n6\n2021-05-07\n0\n0.303682\n0.853959\n\n\n7\n2021-05-01\n1\n0.022424\n0.408510\n\n\n8\n2021-05-02\n1\nNaN\nNaN\n\n\n9\n2021-05-03\n1\n0.508190\n0.603880\n\n\n10\n2021-05-04\n1\n0.330924\n0.108156\n\n\n11\n2021-05-05\n1\nNaN\nNaN\n\n\n12\n2021-05-06\n1\n0.601481\n0.020182\n\n\n13\n2021-05-07\n1\nNaN\nNaN\n\n\n\n\n\n\n\n\n# Filling dates between min and max timestamps\ndates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values\ndata = np.zeros((len(dates), 3))\ndata[:, 0] = dates\ndata[:, 1] = np.random.rand(len(dates))\ndata[:, 2] = np.random.rand(len(dates))\ncols = ['date', 'feature1', 'feature2']\ndate_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float, 'feature2': float})\ndate_df_with_missing_dates = date_df.drop([1,3]).reset_index(drop=True)\ndate_df_with_missing_dates\n\n\n\n\n\n\n\n\ndate\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01 00:00:00\n0.774846\n0.624488\n\n\n1\n2021-05-01 08:00:00\n0.683837\n0.441230\n\n\n2\n2021-05-01 16:00:00\n0.142269\n0.279095\n\n\n3\n2021-05-01 20:00:00\n0.953686\n0.205123\n\n\n\n\n\n\n\n\n# No groups\nexpected_output_df = date_df.copy()\nexpected_output_df.loc[[1,3], ['feature1', 'feature2']] = np.nan\ndisplay(expected_output_df)\noutput_df = add_missing_timestamps(date_df_with_missing_dates.copy(), 'date', groupby=None, fill_value=np.nan, range_by_group=False, freq='4H')\ntest_eq(output_df, expected_output_df)\n\n\n\n\n\n\n\n\ndate\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01 00:00:00\n0.774846\n0.624488\n\n\n1\n2021-05-01 04:00:00\nNaN\nNaN\n\n\n2\n2021-05-01 08:00:00\n0.683837\n0.441230\n\n\n3\n2021-05-01 12:00:00\nNaN\nNaN\n\n\n4\n2021-05-01 16:00:00\n0.142269\n0.279095\n\n\n5\n2021-05-01 20:00:00\n0.953686\n0.205123\n\n\n\n\n\n\n\n\n# Filling missing values between min and max timestamps for each value in groupby column\n\ndates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values\ndates = np.concatenate((dates, dates))\ndata = np.zeros((len(dates), 4))\ndata[:, 0] = dates\ndata[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))\ndata[:, 2] = np.random.rand(len(dates))\ndata[:, 3] = np.random.rand(len(dates))\ncols = ['date', 'id', 'feature1', 'feature2']\ndate_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})\ndate_df_with_missing_dates = date_df.drop([0,1,3,8,9,11]).reset_index(drop=True)\ndate_df_with_missing_dates\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01 08:00:00\n0\n0.438784\n0.084472\n\n\n1\n2021-05-01 16:00:00\n0\n0.059613\n0.445215\n\n\n2\n2021-05-01 20:00:00\n0\n0.511807\n0.001034\n\n\n3\n2021-05-01 00:00:00\n1\n0.970115\n0.280121\n\n\n4\n2021-05-01 04:00:00\n1\n0.775051\n0.436359\n\n\n5\n2021-05-01 16:00:00\n1\n0.469987\n0.457442\n\n\n\n\n\n\n\n\n# groupby='id', range_by_group=True\nexpected_output_df = date_df.drop([0,1,11]).reset_index(drop=True) \nexpected_output_df.loc[[1,6,7], ['feature1', 'feature2']] = np.nan\ndisplay(expected_output_df)\noutput_df = add_missing_timestamps(date_df_with_missing_dates.copy(),\n 'date', \n groupby='id', \n fill_value=np.nan, \n range_by_group=True, \n freq='4H')\ntest_eq(expected_output_df, output_df)\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01 08:00:00\n0\n0.438784\n0.084472\n\n\n1\n2021-05-01 12:00:00\n0\nNaN\nNaN\n\n\n2\n2021-05-01 16:00:00\n0\n0.059613\n0.445215\n\n\n3\n2021-05-01 20:00:00\n0\n0.511807\n0.001034\n\n\n4\n2021-05-01 00:00:00\n1\n0.970115\n0.280121\n\n\n5\n2021-05-01 04:00:00\n1\n0.775051\n0.436359\n\n\n6\n2021-05-01 08:00:00\n1\nNaN\nNaN\n\n\n7\n2021-05-01 12:00:00\n1\nNaN\nNaN\n\n\n8\n2021-05-01 16:00:00\n1\n0.469987\n0.457442\n\n\n\n\n\n\n\n\n# groupby='id', range_by_group=False\nexpected_output_df = date_df.copy() \nexpected_output_df.loc[[0,1,3,8,9,11], ['feature1', 'feature2']] = np.nan\ndisplay(expected_output_df)\noutput_df = add_missing_timestamps(date_df_with_missing_dates.copy(), \n 'date', \n groupby='id', \n fill_value=np.nan, \n range_by_group=False, \n freq='4H')\ntest_eq(expected_output_df, output_df)\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01 00:00:00\n0\nNaN\nNaN\n\n\n1\n2021-05-01 04:00:00\n0\nNaN\nNaN\n\n\n2\n2021-05-01 08:00:00\n0\n0.438784\n0.084472\n\n\n3\n2021-05-01 12:00:00\n0\nNaN\nNaN\n\n\n4\n2021-05-01 16:00:00\n0\n0.059613\n0.445215\n\n\n5\n2021-05-01 20:00:00\n0\n0.511807\n0.001034\n\n\n6\n2021-05-01 00:00:00\n1\n0.970115\n0.280121\n\n\n7\n2021-05-01 04:00:00\n1\n0.775051\n0.436359\n\n\n8\n2021-05-01 08:00:00\n1\nNaN\nNaN\n\n\n9\n2021-05-01 12:00:00\n1\nNaN\nNaN\n\n\n10\n2021-05-01 16:00:00\n1\n0.469987\n0.457442\n\n\n11\n2021-05-01 20:00:00\n1\nNaN\nNaN\n\n\n\n\n\n\n\n\n# No groups, with duplicate dates ==> FAILS\ndates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values\ndata = np.zeros((len(dates), 3))\ndata[:, 0] = dates\ndata[:, 1] = np.random.rand(len(dates))\ndata[:, 2] = np.random.rand(len(dates))\ncols = ['date', 'feature1', 'feature2']\ndate_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float, 'feature2': float})\ndate_df_with_missing_dates = date_df.drop([1,3]).reset_index(drop=True)\ndate_df_with_missing_dates.loc[3, 'date'] = date_df_with_missing_dates.loc[2, 'date']\ndisplay(date_df_with_missing_dates)\ntest_fail(add_missing_timestamps, args=[date_df_with_missing_dates, 'date'], kwargs=dict(groupby=None, fill_value=np.nan, range_by_group=False, freq='4H'), )\n\n\n\n\n\n\n\n\ndate\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01 00:00:00\n0.755092\n0.002068\n\n\n1\n2021-05-01 08:00:00\n0.570693\n0.087019\n\n\n2\n2021-05-01 16:00:00\n0.228869\n0.856618\n\n\n3\n2021-05-01 16:00:00\n0.349506\n0.428253\n\n\n\n\n\n\n\n\n# groupby='id', range_by_group=True, with duplicate dates ==> FAILS\n\ndates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values\ndates = np.concatenate((dates, dates))\ndata = np.zeros((len(dates), 4))\ndata[:, 0] = dates\ndata[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))\ndata[:, 2] = np.random.rand(len(dates))\ndata[:, 3] = np.random.rand(len(dates))\ncols = ['date', 'id', 'feature1', 'feature2']\ndate_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})\ndate_df_with_missing_dates = date_df.drop([0,1,8,9,11]).reset_index(drop=True)\ndate_df_with_missing_dates.loc[3, 'date'] = date_df_with_missing_dates.loc[2, 'date']\ndisplay(date_df_with_missing_dates)\ntest_fail(add_missing_timestamps, args=[date_df_with_missing_dates, 'date'], kwargs=dict(groupby='id', fill_value=np.nan, range_by_group=True, freq='4H'), \n contains='cannot handle a non-unique multi-index!')\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01 08:00:00\n0\n0.040345\n0.312874\n\n\n1\n2021-05-01 12:00:00\n0\n0.713424\n0.597211\n\n\n2\n2021-05-01 16:00:00\n0\n0.468382\n0.652314\n\n\n3\n2021-05-01 16:00:00\n0\n0.396691\n0.605664\n\n\n4\n2021-05-01 00:00:00\n1\n0.804646\n0.964115\n\n\n5\n2021-05-01 04:00:00\n1\n0.089925\n0.072410\n\n\n6\n2021-05-01 16:00:00\n1\n0.830786\n0.560658\n\n\n\n\n\n\n\n\n# groupby='id', range_by_group=FALSE, with duplicate dates ==> FAILS\n\ndates = pd.date_range('2021-05-01 000:00', '2021-05-01 20:00', freq='4H').values\ndates = np.concatenate((dates, dates))\ndata = np.zeros((len(dates), 4))\ndata[:, 0] = dates\ndata[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))\ndata[:, 2] = np.random.rand(len(dates))\ndata[:, 3] = np.random.rand(len(dates))\ncols = ['date', 'id', 'feature1', 'feature2']\ndate_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float, 'feature2': float})\ndate_df_with_missing_dates = date_df.drop([0,1,8,9,11]).reset_index(drop=True)\ndate_df_with_missing_dates.loc[3, 'date'] = date_df_with_missing_dates.loc[2, 'date']\ndisplay(date_df_with_missing_dates)\ntest_fail(add_missing_timestamps, args=[date_df_with_missing_dates, 'date'], kwargs=dict(groupby='id', fill_value=np.nan, range_by_group=False, freq='4H'), \n contains='cannot handle a non-unique multi-index!')\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\nfeature2\n\n\n\n\n0\n2021-05-01 08:00:00\n0\n0.448508\n0.953596\n\n\n1\n2021-05-01 12:00:00\n0\n0.868802\n0.526845\n\n\n2\n2021-05-01 16:00:00\n0\n0.223070\n0.304842\n\n\n3\n2021-05-01 16:00:00\n0\n0.645661\n0.270956\n\n\n4\n2021-05-01 00:00:00\n1\n0.017250\n0.787757\n\n\n5\n2021-05-01 04:00:00\n1\n0.783341\n0.608269\n\n\n6\n2021-05-01 16:00:00\n1\n0.426247\n0.926149\n\n\n\n\n\n\n\n\nsource\n\n\ntime_encoding\n\n time_encoding (series, freq, max_val=None)\n\nTransforms a pandas series of dtype datetime64 (of any freq) or DatetimeIndex into 2 float arrays\nAvailable options: microsecond, millisecond, second, minute, hour, day = day_of_month = dayofmonth, day_of_week = weekday = dayofweek, day_of_year = dayofyear, week = week_of_year = weekofyear, month and year\n\nfor freq in ['microsecond', 'second', 'minute', 'hour', 'day', 'dayofweek', 'dayofyear', 'month']:\n tdf = pd.DataFrame(pd.date_range('2021-03-01', dt.datetime.today()), columns=['date'])\n a,b = time_encoding(tdf.date, freq=freq)\n plt.plot(a)\n plt.plot(b)\n plt.title(freq)\n plt.show()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfor freq in ['microsecond', 'second', 'minute', 'hour', 'day', 'dayofweek', 'dayofyear', 'month']:\n dateindex = pd.date_range('2021-03-01', dt.datetime.today())\n a,b = time_encoding(dateindex, freq=freq)\n plt.plot(a)\n plt.plot(b)\n plt.title(freq)\n plt.show()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndow_sin, dow_cos = time_encoding(date_df['date'], 'dayofweek')\nplt.plot(dow_sin)\nplt.plot(dow_cos)\nplt.title('DayOfWeek')\nplt.show()\ndate_df['dow_sin'] = dow_sin\ndate_df['dow_cos'] = dow_cos\ndate_df\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\nfeature2\ndow_sin\ndow_cos\n\n\n\n\n0\n2021-05-01 00:00:00\n0\n0.773597\n0.465634\n-0.974928\n-0.222521\n\n\n1\n2021-05-01 04:00:00\n0\n0.265526\n0.963753\n-0.974928\n-0.222521\n\n\n2\n2021-05-01 08:00:00\n0\n0.448508\n0.953596\n-0.974928\n-0.222521\n\n\n3\n2021-05-01 12:00:00\n0\n0.868802\n0.526845\n-0.974928\n-0.222521\n\n\n4\n2021-05-01 16:00:00\n0\n0.223070\n0.304842\n-0.974928\n-0.222521\n\n\n5\n2021-05-01 20:00:00\n0\n0.645661\n0.270956\n-0.974928\n-0.222521\n\n\n6\n2021-05-01 00:00:00\n1\n0.017250\n0.787757\n-0.974928\n-0.222521\n\n\n7\n2021-05-01 04:00:00\n1\n0.783341\n0.608269\n-0.974928\n-0.222521\n\n\n8\n2021-05-01 08:00:00\n1\n0.629875\n0.170726\n-0.974928\n-0.222521\n\n\n9\n2021-05-01 12:00:00\n1\n0.302927\n0.682136\n-0.974928\n-0.222521\n\n\n10\n2021-05-01 16:00:00\n1\n0.426247\n0.926149\n-0.974928\n-0.222521\n\n\n11\n2021-05-01 20:00:00\n1\n0.830624\n0.543715\n-0.974928\n-0.222521\n\n\n\n\n\n\n\n\nsource\n\n\nget_gaps\n\n get_gaps (o:torch.Tensor, forward:bool=True, backward:bool=True,\n nearest:bool=True, normalize:bool=True)\n\nNumber of sequence steps from previous, to next and/or to nearest real value along the last dimension of 3D arrays or tensors\n\nsource\n\n\nnearest_gaps\n\n nearest_gaps (o, normalize=True)\n\nNumber of sequence steps to nearest real value along the last dimension of 3D arrays or tensors\n\nsource\n\n\nbackward_gaps\n\n backward_gaps (o, normalize=True)\n\nNumber of sequence steps to next real value along the last dimension of 3D arrays or tensors\n\nsource\n\n\nforward_gaps\n\n forward_gaps (o, normalize=True)\n\nNumber of sequence steps since previous real value along the last dimension of 3D arrays or tensors\n\nt = torch.rand(1, 2, 8)\narr = t.numpy()\nt[t <.6] = np.nan\ntest_ge(nearest_gaps(t).min().item(), 0)\ntest_ge(nearest_gaps(arr).min(), 0)\ntest_le(nearest_gaps(t).min().item(), 1)\ntest_le(nearest_gaps(arr).min(), 1)\ntest_eq(torch.isnan(forward_gaps(t)).sum(), 0)\ntest_eq(np.isnan(forward_gaps(arr)).sum(), 0)\nag = get_gaps(t)\ntest_eq(ag.shape, (1,6,8))\ntest_eq(torch.isnan(ag).sum(), 0)\n\n\nsource\n\n\nadd_delta_timestamp_cols\n\n add_delta_timestamp_cols (df, cols=None, groupby=None, forward=True,\n backward=True, nearest=True, normalize=True)\n\n\n# Add delta timestamp features for the no groups setting\ndates = pd.date_range('2021-05-01', '2021-05-07').values\ndata = np.zeros((len(dates), 2))\ndata[:, 0] = dates\ndata[:, 1] = np.random.rand(len(dates))\n\ncols = ['date', 'feature1']\ndate_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'feature1': float})\ndate_df.loc[[1,3,4],'feature1'] = np.nan\ndate_df\n\n\n\n\n\n\n\n\ndate\nfeature1\n\n\n\n\n0\n2021-05-01\n0.132532\n\n\n1\n2021-05-02\nNaN\n\n\n2\n2021-05-03\n0.403176\n\n\n3\n2021-05-04\nNaN\n\n\n4\n2021-05-05\nNaN\n\n\n5\n2021-05-06\n0.179554\n\n\n6\n2021-05-07\n0.446536\n\n\n\n\n\n\n\n\n# No groups\nexpected_output_df = date_df.copy()\nexpected_output_df['feature1_dt_fwd'] = np.array([1,1,2,1,2,3,1])\nexpected_output_df['feature1_dt_bwd'] = np.array([2,1,3,2,1,1,1])\nexpected_output_df['feature1_dt_nearest'] = np.array([1,1,2,1,1,1,1])\n\ndisplay(expected_output_df)\noutput_df = add_delta_timestamp_cols(date_df, cols='feature1', normalize=False)\ntest_eq(expected_output_df, output_df)\n\n\n\n\n\n\n\n\ndate\nfeature1\nfeature1_dt_fwd\nfeature1_dt_bwd\nfeature1_dt_nearest\n\n\n\n\n0\n2021-05-01\n0.132532\n1\n2\n1\n\n\n1\n2021-05-02\nNaN\n1\n1\n1\n\n\n2\n2021-05-03\n0.403176\n2\n3\n2\n\n\n3\n2021-05-04\nNaN\n1\n2\n1\n\n\n4\n2021-05-05\nNaN\n2\n1\n1\n\n\n5\n2021-05-06\n0.179554\n3\n1\n1\n\n\n6\n2021-05-07\n0.446536\n1\n1\n1\n\n\n\n\n\n\n\n\n# Add delta timestamp features within a group\ndates = pd.date_range('2021-05-01', '2021-05-07').values\ndates = np.concatenate((dates, dates))\ndata = np.zeros((len(dates), 3))\ndata[:, 0] = dates\ndata[:, 1] = np.array([0]*(len(dates)//2)+[1]*(len(dates)//2))\ndata[:, 2] = np.random.rand(len(dates))\n\ncols = ['date', 'id', 'feature1']\ndate_df = pd.DataFrame(data, columns=cols).astype({'date': 'datetime64[ns]', 'id': int, 'feature1': float})\ndate_df.loc[[1,3,4,8,9,11],'feature1'] = np.nan\ndate_df\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\n\n\n\n\n0\n2021-05-01\n0\n0.405327\n\n\n1\n2021-05-02\n0\nNaN\n\n\n2\n2021-05-03\n0\n0.055934\n\n\n3\n2021-05-04\n0\nNaN\n\n\n4\n2021-05-05\n0\nNaN\n\n\n5\n2021-05-06\n0\n0.698408\n\n\n6\n2021-05-07\n0\n0.064831\n\n\n7\n2021-05-01\n1\n0.407541\n\n\n8\n2021-05-02\n1\nNaN\n\n\n9\n2021-05-03\n1\nNaN\n\n\n10\n2021-05-04\n1\n0.113590\n\n\n11\n2021-05-05\n1\nNaN\n\n\n12\n2021-05-06\n1\n0.548088\n\n\n13\n2021-05-07\n1\n0.348813\n\n\n\n\n\n\n\n\n# groupby='id'\nexpected_output_df = date_df.copy()\nexpected_output_df['feature1_dt_fwd'] = np.array([1,1,2,1,2,3,1,1,1,2,3,1,2,1])\nexpected_output_df['feature1_dt_bwd'] = np.array([2,1,3,2,1,1,1,3,2,1,2,1,1,1])\nexpected_output_df['feature1_dt_nearest'] = np.array([1,1,2,1,1,1,1,1,1,1,2,1,1,1])\n\ndisplay(expected_output_df)\noutput_df = add_delta_timestamp_cols(date_df, cols='feature1', groupby='id', normalize=False)\ntest_eq(expected_output_df, output_df)\n\n\n\n\n\n\n\n\ndate\nid\nfeature1\nfeature1_dt_fwd\nfeature1_dt_bwd\nfeature1_dt_nearest\n\n\n\n\n0\n2021-05-01\n0\n0.405327\n1\n2\n1\n\n\n1\n2021-05-02\n0\nNaN\n1\n1\n1\n\n\n2\n2021-05-03\n0\n0.055934\n2\n3\n2\n\n\n3\n2021-05-04\n0\nNaN\n1\n2\n1\n\n\n4\n2021-05-05\n0\nNaN\n2\n1\n1\n\n\n5\n2021-05-06\n0\n0.698408\n3\n1\n1\n\n\n6\n2021-05-07\n0\n0.064831\n1\n1\n1\n\n\n7\n2021-05-01\n1\n0.407541\n1\n3\n1\n\n\n8\n2021-05-02\n1\nNaN\n1\n2\n1\n\n\n9\n2021-05-03\n1\nNaN\n2\n1\n1\n\n\n10\n2021-05-04\n1\n0.113590\n3\n2\n2\n\n\n11\n2021-05-05\n1\nNaN\n1\n1\n1\n\n\n12\n2021-05-06\n1\n0.548088\n2\n1\n1\n\n\n13\n2021-05-07\n1\n0.348813\n1\n1\n1\n\n\n\n\n\n\n\nSlidingWindow and SlidingWindowPanel are 2 useful functions that will allow you to create an array with segments of a pandas dataframe based on multiple criteria.\n\nsource\n\n\nSlidingWindow\n\n SlidingWindow (window_len:int, stride:Optional[int]=1, start:int=0,\n pad_remainder:bool=False, padding:str='post',\n padding_value:float=nan, add_padding_feature:bool=True,\n get_x:Union[NoneType,int,list]=None,\n get_y:Union[NoneType,int,list]=None,\n y_func:Optional[<built-infunctioncallable>]=None,\n output_processor:Optional[<built-\n infunctioncallable>]=None, copy:bool=False,\n horizon:Union[int,list]=1, seq_first:bool=True,\n sort_by:Optional[list]=None, ascending:bool=True,\n check_leakage:bool=True)\n\nApplies a sliding window to a 1d or 2d input (np.ndarray, torch.Tensor or pd.DataFrame)\nInput:\n You can use np.ndarray, pd.DataFrame or torch.Tensor as input\n\n shape: (seq_len, ) or (seq_len, n_vars) if seq_first=True else (n_vars, seq_len)\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nwindow_len\nint\n\nlength of lookback window\n\n\nstride\nUnion[None, int]\n1\nn datapoints the window is moved ahead along the sequence. Default: 1. If None, stride=window_len (no overlap)\n\n\nstart\nint\n0\ndetermines the step where the first window is applied: 0 (default) or a given step (int). Previous steps will be discarded.\n\n\npad_remainder\nbool\nFalse\nallows to pad remainder subsequences when the sliding window is applied and get_y == [] (unlabeled data).\n\n\npadding\nstr\npost\n‘pre’ or ‘post’ (optional, defaults to ‘pre’): pad either before or after each sequence. If pad_remainder == False, it indicates the starting point to create the sequence (‘pre’ from the end, and ‘post’ from the beginning)\n\n\npadding_value\nfloat\nnan\nvalue (float) that will be used for padding. Default: np.nan\n\n\nadd_padding_feature\nbool\nTrue\nadd an additional feature indicating whether each timestep is padded (1) or not (0).\n\n\nget_x\nUnion[None, int, list]\nNone\nindices of columns that contain the independent variable (xs). If None, all data will be used as x.\n\n\nget_y\nUnion[None, int, list]\nNone\nindices of columns that contain the target (ys). If None, all data will be used as y. [] means no y data is created (unlabeled data).\n\n\ny_func\nOptional[callable]\nNone\noptional function to calculate the ys based on the get_y col/s and each y sub-window. y_func must be a function applied to axis=1!\n\n\noutput_processor\nOptional[callable]\nNone\noptional function to process the final output (X (and y if available)). This is useful when some values need to be removed.The function should take X and y (even if it’s None) as arguments.\n\n\ncopy\nbool\nFalse\ncopy the original object to avoid changes in it.\n\n\nhorizon\nUnion[int, list]\n1\nnumber of future datapoints to predict (y). If get_y is [] horizon will be set to 0.\n\n\nseq_first\nbool\nTrue\nTrue if input shape (seq_len, n_vars), False if input shape (n_vars, seq_len)\n\n\nsort_by\nOptional[list]\nNone\ncolumn/s used for sorting the array in ascending order\n\n\nascending\nbool\nTrue\nused in sorting\n\n\ncheck_leakage\nbool\nTrue\nchecks if there’s leakage in the output between X and y\n\n\n\n\nwl = 5\nstride = 5\n\nt = np.repeat(np.arange(13).reshape(-1,1), 3, axis=-1)\nprint('input shape:', t.shape)\nX, y = SlidingWindow(wl, stride=stride, pad_remainder=True, get_y=[])(t)\nX\n\ninput shape: (13, 3)\n\n\narray([[[ 0., 1., 2., 3., 4.],\n [ 0., 1., 2., 3., 4.],\n [ 0., 1., 2., 3., 4.],\n [ 0., 0., 0., 0., 0.]],\n\n [[ 5., 6., 7., 8., 9.],\n [ 5., 6., 7., 8., 9.],\n [ 5., 6., 7., 8., 9.],\n [ 0., 0., 0., 0., 0.]],\n\n [[10., 11., 12., nan, nan],\n [10., 11., 12., nan, nan],\n [10., 11., 12., nan, nan],\n [ 0., 0., 0., 1., 1.]]])\n\n\n\nwl = 5\nt = np.arange(10)\nprint('input shape:', t.shape)\nX, y = SlidingWindow(wl)(t)\ntest_eq(X.shape[1:], (1, wl))\nitemify(X,)\n\ninput shape: (10,)\n\n\n(#5) [(array([[0, 1, 2, 3, 4]]),),(array([[1, 2, 3, 4, 5]]),),(array([[2, 3, 4, 5, 6]]),),(array([[3, 4, 5, 6, 7]]),),(array([[4, 5, 6, 7, 8]]),)]\n\n\n\nwl = 5\nh = 1\n\nt = np.arange(10)\nprint('input shape:', t.shape)\nX, y = SlidingWindow(wl, stride=1, horizon=h)(t)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (1, wl))\ntest_eq(items[0][1].shape, ())\n\ninput shape: (10,)\n[(array([[0, 1, 2, 3, 4]]), 5), (array([[1, 2, 3, 4, 5]]), 6), (array([[2, 3, 4, 5, 6]]), 7), (array([[3, 4, 5, 6, 7]]), 8), (array([[4, 5, 6, 7, 8]]), 9)]\n\n\n\nwl = 5\nh = 2 # 2 or more\n\nt = np.arange(10)\nprint('input shape:', t.shape)\nX, y = SlidingWindow(wl, horizon=h)(t)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (1, wl))\ntest_eq(items[0][1].shape, (2, ))\n\ninput shape: (10,)\n[(array([[0, 1, 2, 3, 4]]), array([5, 6])), (array([[1, 2, 3, 4, 5]]), array([6, 7])), (array([[2, 3, 4, 5, 6]]), array([7, 8])), (array([[3, 4, 5, 6, 7]]), array([8, 9]))]\n\n\n\nwl = 5\nh = 2 # 2 or more\n\nt = np.arange(10).reshape(1, -1)\nprint('input shape:', t.shape)\nX, y = SlidingWindow(wl, stride=1, horizon=h, get_y=None, seq_first=False)(t)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (1, wl))\ntest_eq(items[0][1].shape, (2, ))\n\ninput shape: (1, 10)\n[(array([[0, 1, 2, 3, 4]]), array([5, 6])), (array([[1, 2, 3, 4, 5]]), array([6, 7])), (array([[2, 3, 4, 5, 6]]), array([7, 8])), (array([[3, 4, 5, 6, 7]]), array([8, 9]))]\n\n\n\nwl = 5\nh = 2 # 2 or more\n\nt = np.arange(10).reshape(1, -1)\nprint('input shape:', t.shape)\nX, y = SlidingWindow(wl, stride=1, horizon=h, seq_first=False)(t)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (1, wl))\n\ninput shape: (1, 10)\n[(array([[0, 1, 2, 3, 4]]), array([5, 6])), (array([[1, 2, 3, 4, 5]]), array([6, 7])), (array([[2, 3, 4, 5, 6]]), array([7, 8])), (array([[3, 4, 5, 6, 7]]), array([8, 9]))]\n\n\n\nwl = 5\n\nt = np.arange(10).reshape(1, -1)\nprint('input shape:', t.shape)\nX, y = SlidingWindow(wl, stride=3, horizon=1, get_y=None, seq_first=False)(t)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (1, wl))\ntest_eq(items[0][1].shape, ())\n\ninput shape: (1, 10)\n[(array([[0, 1, 2, 3, 4]]), 5), (array([[3, 4, 5, 6, 7]]), 8)]\n\n\n\nwl = 5\nstart = 3\n\nt = np.arange(20)\nprint('input shape:', t.shape)\nX, y = SlidingWindow(wl, stride=None, horizon=1, start=start)(t)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (1, wl))\ntest_eq(items[0][1].shape, ())\n\ninput shape: (20,)\n[(array([[3, 4, 5, 6, 7]]), 8), (array([[ 8, 9, 10, 11, 12]]), 13), (array([[13, 14, 15, 16, 17]]), 18)]\n\n\n\nwl = 5\n\nt = np.arange(20)\nprint('input shape:', t.shape)\ndf = pd.DataFrame(t, columns=['var'])\ndisplay(df)\nX, y = SlidingWindow(wl, stride=None, horizon=1, get_y=None)(df)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (1, wl))\ntest_eq(items[0][1].shape, ())\n\ninput shape: (20,)\n[(array([[0, 1, 2, 3, 4]]), 5), (array([[5, 6, 7, 8, 9]]), 10), (array([[10, 11, 12, 13, 14]]), 15)]\n\n\n\n\n\n\n\n\n\nvar\n\n\n\n\n0\n0\n\n\n1\n1\n\n\n2\n2\n\n\n3\n3\n\n\n4\n4\n\n\n5\n5\n\n\n6\n6\n\n\n7\n7\n\n\n8\n8\n\n\n9\n9\n\n\n10\n10\n\n\n11\n11\n\n\n12\n12\n\n\n13\n13\n\n\n14\n14\n\n\n15\n15\n\n\n16\n16\n\n\n17\n17\n\n\n18\n18\n\n\n19\n19\n\n\n\n\n\n\n\n\nwl = 5\n\nt = np.arange(20)\nprint('input shape:', t.shape)\ndf = pd.DataFrame(t, columns=['var'])\ndisplay(df)\nX, y = SlidingWindow(wl, stride=1, horizon=1, get_y=None)(df)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (1, wl))\ntest_eq(items[0][1].shape, ())\n\ninput shape: (20,)\n[(array([[0, 1, 2, 3, 4]]), 5), (array([[1, 2, 3, 4, 5]]), 6), (array([[2, 3, 4, 5, 6]]), 7), (array([[3, 4, 5, 6, 7]]), 8), (array([[4, 5, 6, 7, 8]]), 9), (array([[5, 6, 7, 8, 9]]), 10), (array([[ 6, 7, 8, 9, 10]]), 11), (array([[ 7, 8, 9, 10, 11]]), 12), (array([[ 8, 9, 10, 11, 12]]), 13), (array([[ 9, 10, 11, 12, 13]]), 14), (array([[10, 11, 12, 13, 14]]), 15), (array([[11, 12, 13, 14, 15]]), 16), (array([[12, 13, 14, 15, 16]]), 17), (array([[13, 14, 15, 16, 17]]), 18), (array([[14, 15, 16, 17, 18]]), 19)]\n\n\n\n\n\n\n\n\n\nvar\n\n\n\n\n0\n0\n\n\n1\n1\n\n\n2\n2\n\n\n3\n3\n\n\n4\n4\n\n\n5\n5\n\n\n6\n6\n\n\n7\n7\n\n\n8\n8\n\n\n9\n9\n\n\n10\n10\n\n\n11\n11\n\n\n12\n12\n\n\n13\n13\n\n\n14\n14\n\n\n15\n15\n\n\n16\n16\n\n\n17\n17\n\n\n18\n18\n\n\n19\n19\n\n\n\n\n\n\n\n\nwl = 5\n\nt = np.arange(20)\nprint('input shape:', t.shape)\ndf = pd.DataFrame(t, columns=['var']).T\ndisplay(df)\nX, y = SlidingWindow(wl, stride=None, horizon=1, get_y=None, seq_first=False)(df)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (1, wl))\ntest_eq(items[0][1].shape, ())\n\ninput shape: (20,)\n[(array([[0, 1, 2, 3, 4]]), 5), (array([[5, 6, 7, 8, 9]]), 10), (array([[10, 11, 12, 13, 14]]), 15)]\n\n\n\n\n\n\n\n\n\n0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n\n\n\n\nvar\n0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n\n\n\n\n\n\n\n\nwl = 5\nn_vars = 3\n\nt = (torch.stack(n_vars * [torch.arange(10)]).T * tensor([1, 10, 100]))\nprint('input shape:', t.shape)\ndf = pd.DataFrame(t, columns=[f'var_{i}' for i in range(n_vars)])\ndisplay(df)\nX, y = SlidingWindow(wl, horizon=1)(df)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (n_vars, wl))\n\ninput shape: torch.Size([10, 3])\n[(array([[ 0, 1, 2, 3, 4],\n [ 0, 10, 20, 30, 40],\n [ 0, 100, 200, 300, 400]]), array([ 5, 50, 500])), (array([[ 1, 2, 3, 4, 5],\n [ 10, 20, 30, 40, 50],\n [100, 200, 300, 400, 500]]), array([ 6, 60, 600])), (array([[ 2, 3, 4, 5, 6],\n [ 20, 30, 40, 50, 60],\n [200, 300, 400, 500, 600]]), array([ 7, 70, 700])), (array([[ 3, 4, 5, 6, 7],\n [ 30, 40, 50, 60, 70],\n [300, 400, 500, 600, 700]]), array([ 8, 80, 800])), (array([[ 4, 5, 6, 7, 8],\n [ 40, 50, 60, 70, 80],\n [400, 500, 600, 700, 800]]), array([ 9, 90, 900]))]\n\n\n\n\n\n\n\n\n\nvar_0\nvar_1\nvar_2\n\n\n\n\n0\n0\n0\n0\n\n\n1\n1\n10\n100\n\n\n2\n2\n20\n200\n\n\n3\n3\n30\n300\n\n\n4\n4\n40\n400\n\n\n5\n5\n50\n500\n\n\n6\n6\n60\n600\n\n\n7\n7\n70\n700\n\n\n8\n8\n80\n800\n\n\n9\n9\n90\n900\n\n\n\n\n\n\n\n\nwl = 5\nn_vars = 3\n\nt = (torch.stack(n_vars * [torch.arange(10)]).T * tensor([1, 10, 100]))\nprint('input shape:', t.shape)\ndf = pd.DataFrame(t, columns=[f'var_{i}' for i in range(n_vars)])\ndisplay(df)\nX, y = SlidingWindow(wl, horizon=1, get_y=\"var_0\")(df)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (n_vars, wl))\n\ninput shape: torch.Size([10, 3])\n[(array([[ 0, 1, 2, 3, 4],\n [ 0, 10, 20, 30, 40],\n [ 0, 100, 200, 300, 400]]), 5), (array([[ 1, 2, 3, 4, 5],\n [ 10, 20, 30, 40, 50],\n [100, 200, 300, 400, 500]]), 6), (array([[ 2, 3, 4, 5, 6],\n [ 20, 30, 40, 50, 60],\n [200, 300, 400, 500, 600]]), 7), (array([[ 3, 4, 5, 6, 7],\n [ 30, 40, 50, 60, 70],\n [300, 400, 500, 600, 700]]), 8), (array([[ 4, 5, 6, 7, 8],\n [ 40, 50, 60, 70, 80],\n [400, 500, 600, 700, 800]]), 9)]\n\n\n\n\n\n\n\n\n\nvar_0\nvar_1\nvar_2\n\n\n\n\n0\n0\n0\n0\n\n\n1\n1\n10\n100\n\n\n2\n2\n20\n200\n\n\n3\n3\n30\n300\n\n\n4\n4\n40\n400\n\n\n5\n5\n50\n500\n\n\n6\n6\n60\n600\n\n\n7\n7\n70\n700\n\n\n8\n8\n80\n800\n\n\n9\n9\n90\n900\n\n\n\n\n\n\n\n\nwl = 5\nn_vars = 3\n\nt = (torch.stack(n_vars * [torch.arange(10)]).T * tensor([1, 10, 100]))\nprint('input shape:', t.shape)\ncolumns=[f'var_{i}' for i in range(n_vars-1)]+['target']\ndf = pd.DataFrame(t, columns=columns)\ndisplay(df)\nX, y = SlidingWindow(wl, horizon=1, get_x=columns[:-1], get_y='target')(df)\nitems = itemify(X, y)\nprint(items)\ntest_eq(items[0][0].shape, (n_vars-1, wl))\ntest_eq(items[0][1].shape, ())\n\ninput shape: torch.Size([10, 3])\n[(array([[ 0, 1, 2, 3, 4],\n [ 0, 10, 20, 30, 40]]), 500), (array([[ 1, 2, 3, 4, 5],\n [10, 20, 30, 40, 50]]), 600), (array([[ 2, 3, 4, 5, 6],\n [20, 30, 40, 50, 60]]), 700), (array([[ 3, 4, 5, 6, 7],\n [30, 40, 50, 60, 70]]), 800), (array([[ 4, 5, 6, 7, 8],\n [40, 50, 60, 70, 80]]), 900)]\n\n\n\n\n\n\n\n\n\nvar_0\nvar_1\ntarget\n\n\n\n\n0\n0\n0\n0\n\n\n1\n1\n10\n100\n\n\n2\n2\n20\n200\n\n\n3\n3\n30\n300\n\n\n4\n4\n40\n400\n\n\n5\n5\n50\n500\n\n\n6\n6\n60\n600\n\n\n7\n7\n70\n700\n\n\n8\n8\n80\n800\n\n\n9\n9\n90\n900\n\n\n\n\n\n\n\n\nn_vars = 3\n\nt = (np.random.rand(1000, n_vars) - .5).cumsum(0)\nprint(t.shape)\nplt.plot(t)\nplt.show()\nX, y = SlidingWindow(5, stride=None, horizon=0, get_x=[0,1], get_y=2)(t)\ntest_eq(X[0].shape, (n_vars-1, wl))\ntest_eq(y[0].shape, ())\nprint(X.shape, y.shape)\n\n(1000, 3)\n(200, 2, 5) (200,)\n\n\n\n\n\n\n\n\n\n\nwl = 5\nn_vars = 3\n\nt = (np.random.rand(100, n_vars) - .5).cumsum(0)\nprint(t.shape)\ncolumns=[f'var_{i}' for i in range(n_vars-1)]+['target']\ndf = pd.DataFrame(t, columns=columns)\ndisplay(df)\nX, y = SlidingWindow(5, horizon=0, get_x=columns[:-1], get_y='target')(df)\ntest_eq(X[0].shape, (n_vars-1, wl))\ntest_eq(y[0].shape, ())\nprint(X.shape, y.shape)\n\n(100, 3)\n(96, 2, 5) (96,)\n\n\n\n\n\n\n\n\n\nvar_0\nvar_1\ntarget\n\n\n\n\n0\n0.154072\n0.197194\n-0.083179\n\n\n1\n0.402744\n-0.248788\n-0.560573\n\n\n2\n0.448209\n0.224215\n-0.681264\n\n\n3\n0.631502\n0.406760\n-1.162043\n\n\n4\n1.099973\n0.179926\n-0.712690\n\n\n...\n...\n...\n...\n\n\n95\n-0.405079\n3.662311\n-2.779159\n\n\n96\n-0.445625\n3.488809\n-2.663381\n\n\n97\n-0.187349\n3.304898\n-2.695971\n\n\n98\n-0.100652\n3.505663\n-2.590652\n\n\n99\n0.371272\n3.279901\n-2.764369\n\n\n\n\n100 rows × 3 columns\n\n\n\n\nseq_len = 100\nn_vars = 5\nt = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)\nprint(t.shape)\ncolumns=[f'var_{i}' for i in range(n_vars-1)]+['target']\ndf = pd.DataFrame(t, columns=columns)\ndisplay(df)\nX, y = SlidingWindow(5, stride=1, horizon=0, get_x=columns[:-1], get_y='target', seq_first=True)(df)\ntest_eq(X[0].shape, (n_vars-1, wl))\ntest_eq(y[0].shape, ())\nprint(X.shape, y.shape)\n\n(100, 5)\n(96, 4, 5) (96,)\n\n\n\n\n\n\n\n\n\nvar_0\nvar_1\nvar_2\nvar_3\ntarget\n\n\n\n\n0\n0.443639\n-0.288128\n-0.049732\n0.288915\n0.325872\n\n\n1\n-0.047608\n-0.009738\n0.056768\n0.541395\n0.017496\n\n\n2\n-0.243972\n0.102227\n0.361387\n0.628397\n0.049012\n\n\n3\n-0.721266\n0.045104\n0.724062\n0.940693\n0.510875\n\n\n4\n-0.641269\n0.141927\n0.793837\n1.158903\n0.417040\n\n\n...\n...\n...\n...\n...\n...\n\n\n95\n3.488117\n2.345512\n0.745483\n0.258568\n2.468550\n\n\n96\n3.187006\n1.945844\n0.833228\n0.511198\n2.115330\n\n\n97\n3.019862\n1.739802\n0.488732\n0.881324\n2.387837\n\n\n98\n3.314247\n1.992000\n0.119230\n0.797794\n2.327720\n\n\n99\n3.394578\n2.012458\n0.003244\n0.387125\n2.345970\n\n\n\n\n100 rows × 5 columns\n\n\n\n\nseq_len = 100\nn_vars = 5\n\nt = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)\nprint(t.shape)\ncolumns=[f'var_{i}' for i in range(n_vars-1)] + ['target']\ndf = pd.DataFrame(t, columns=columns).T\ndisplay(df)\nX, y = SlidingWindow(5, stride=1, horizon=0, get_x=columns[:-1], get_y='target', seq_first=False)(df)\ntest_eq(X[0].shape, (n_vars-1, wl))\ntest_eq(y[0].shape, ())\nprint(X.shape, y.shape)\n\n(100, 5)\n(96, 4, 5) (96,)\n\n\n\n\n\n\n\n\n\n0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n...\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n\n\n\n\nvar_0\n-0.407162\n-0.742169\n-1.193053\n-1.058644\n-0.721243\n-1.056788\n-1.316226\n-1.247859\n-1.391482\n-1.258618\n...\n-2.847911\n-3.118643\n-3.444248\n-3.036050\n-2.664068\n-2.473782\n-2.508080\n-2.878210\n-2.841170\n-2.688932\n\n\nvar_1\n0.111643\n-0.286318\n-0.221917\n-0.026094\n-0.332200\n-0.376518\n-0.144763\n0.225361\n0.487134\n0.435856\n...\n1.569158\n1.294548\n1.564455\n1.501243\n1.490928\n1.450602\n1.440730\n1.755607\n1.380986\n1.236284\n\n\nvar_2\n-0.126951\n-0.484267\n-0.480375\n-0.706987\n-0.571379\n-0.561959\n-0.717696\n-0.586035\n-0.298053\n-0.047405\n...\n-1.748096\n-1.508691\n-1.158258\n-1.116485\n-1.153738\n-1.575450\n-1.875091\n-1.613255\n-1.274859\n-1.592096\n\n\nvar_3\n-0.462238\n-0.748774\n-0.625473\n-0.360442\n-0.789178\n-0.530832\n-0.785290\n-0.413452\n0.083685\n-0.110964\n...\n-4.873450\n-4.382297\n-4.531454\n-4.087051\n-4.087801\n-4.391084\n-4.262526\n-4.650170\n-4.465874\n-4.535273\n\n\ntarget\n0.241454\n0.084139\n-0.012974\n0.096328\n0.501035\n0.697043\n0.229185\n0.497430\n0.552922\n0.218345\n...\n-4.582426\n-4.194067\n-3.785398\n-3.808516\n-3.629740\n-3.398645\n-3.828007\n-3.600028\n-3.614195\n-3.592783\n\n\n\n\n5 rows × 100 columns\n\n\n\n\nseq_len = 100\nn_vars = 5\nt = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)\nprint(t.shape)\ncolumns=[f'var_{i}' for i in range(n_vars-1)] + ['target']\ndf = pd.DataFrame(t, columns=columns).T\ndisplay(df)\nX, y = SlidingWindow(5, stride=None, horizon=0, get_x=columns[:-1], get_y='target', seq_first=False)(df)\ntest_eq(X[0].shape, (n_vars-1, wl))\ntest_eq(y[0].shape, ())\nprint(X.shape, y.shape)\n\n(100, 5)\n(20, 4, 5) (20,)\n\n\n\n\n\n\n\n\n\n0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n...\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n\n\n\n\nvar_0\n0.210943\n-0.264863\n-0.307942\n0.176782\n-0.188244\n0.118824\n0.593353\n0.611408\n0.176396\n0.566034\n...\n-4.738294\n-5.138743\n-5.203979\n-4.835758\n-4.534974\n-4.310112\n-4.366365\n-4.328250\n-4.527717\n-4.432726\n\n\nvar_1\n-0.086375\n-0.457413\n0.025571\n0.428256\n0.611573\n0.319714\n-0.085129\n0.161735\n0.052730\n-0.356617\n...\n7.203539\n7.300534\n7.267954\n6.838923\n7.054134\n6.612532\n7.108269\n6.966000\n7.407915\n7.332567\n\n\nvar_2\n0.166139\n-0.231839\n-0.468804\n-0.565628\n-0.500941\n-0.706951\n-0.881385\n-1.138549\n-0.978276\n-0.952727\n...\n0.391942\n0.802356\n0.395688\n0.033288\n0.147283\n0.589911\n0.360847\n0.322019\n0.478120\n0.278228\n\n\nvar_3\n-0.234297\n-0.467480\n-0.925036\n-0.572783\n-0.345585\n0.149537\n-0.078098\n-0.577732\n-0.771975\n-0.322283\n...\n-1.487032\n-1.971348\n-2.300616\n-2.767312\n-2.657974\n-2.880908\n-2.567235\n-2.758240\n-2.605518\n-2.166444\n\n\ntarget\n-0.416187\n-0.164800\n-0.283554\n-0.534897\n-0.896808\n-0.456572\n-0.889556\n-1.178456\n-0.877891\n-1.176442\n...\n-6.094650\n-6.510793\n-6.408799\n-6.685696\n-6.672726\n-6.210781\n-6.377436\n-5.974001\n-5.755187\n-5.608240\n\n\n\n\n5 rows × 100 columns\n\n\n\n\nfrom tsai.data.validation import TrainValidTestSplitter\n\n\nseq_len = 100\nn_vars = 5\nt = (np.random.rand(seq_len, n_vars) - .5).cumsum(0)\nprint(t.shape)\ncolumns=[f'var_{i}' for i in range(n_vars-1)]+['target']\ndf = pd.DataFrame(t, columns=columns)\ndisplay(df)\nX, y = SlidingWindow(5, stride=1, horizon=0, get_x=columns[:-1], get_y='target', seq_first=True)(df)\nsplits = TrainValidTestSplitter(valid_size=.2, shuffle=False)(y)\nX.shape, y.shape, splits\n\n(100, 5)\n\n\n\n\n\n\n\n\n\nvar_0\nvar_1\nvar_2\nvar_3\ntarget\n\n\n\n\n0\n0.123248\n-0.081596\n0.099444\n0.447980\n-0.397975\n\n\n1\n0.469671\n-0.334499\n0.307867\n0.141345\n-0.131085\n\n\n2\n0.522902\n-0.696817\n0.386597\n0.156818\n0.128043\n\n\n3\n0.487025\n-0.966153\n-0.050574\n-0.248479\n-0.088962\n\n\n4\n0.396284\n-1.319821\n-0.113121\n-0.379227\n0.313690\n\n\n...\n...\n...\n...\n...\n...\n\n\n95\n6.138836\n-1.602917\n1.713049\n1.421797\n-1.873899\n\n\n96\n5.892472\n-1.896914\n1.401137\n1.065859\n-2.239942\n\n\n97\n5.421917\n-1.728568\n1.481270\n0.998533\n-2.157474\n\n\n98\n5.763120\n-1.404330\n1.931361\n1.295956\n-1.934397\n\n\n99\n5.827842\n-1.762438\n1.831712\n1.014259\n-1.831573\n\n\n\n\n100 rows × 5 columns\n\n\n\n((96, 4, 5),\n (96,),\n ((#77) [0,1,2,3,4,5,6,7,8,9...], (#19) [77,78,79,80,81,82,83,84,85,86...]))\n\n\n\ndata = np.concatenate([np.linspace(0, 1, 11).reshape(-1,1).repeat(2, 1), np.arange(11).reshape(-1,1)], -1)\ndf_test = pd.DataFrame(data, columns=['col1', 'col2', 'target'])\ndf_test['target'] = df_test['target'].astype(int)\ndf_test\n\n\n\n\n\n\n\n\ncol1\ncol2\ntarget\n\n\n\n\n0\n0.0\n0.0\n0\n\n\n1\n0.1\n0.1\n1\n\n\n2\n0.2\n0.2\n2\n\n\n3\n0.3\n0.3\n3\n\n\n4\n0.4\n0.4\n4\n\n\n5\n0.5\n0.5\n5\n\n\n6\n0.6\n0.6\n6\n\n\n7\n0.7\n0.7\n7\n\n\n8\n0.8\n0.8\n8\n\n\n9\n0.9\n0.9\n9\n\n\n10\n1.0\n1.0\n10\n\n\n\n\n\n\n\n\ndef _y_func(o): return o[:, 0]\n\n\nfor wl in np.arange(1, 20):\n x, y = SlidingWindow(wl, None, pad_remainder=True, get_x=['col1', 'col2'], get_y=['target'], horizon=-wl, y_func=_y_func)(df_test)\n test_eq(x.shape[0], math.ceil((len(df_test))/wl))\n test_eq(x.shape[0], y.shape[0])\n test_eq(x.shape[2], wl)\n test_close(x[:, 0, 0]*10, y)\n\n\nfor wl in np.arange(1, 20):\n x, y = SlidingWindow(wl, None, pad_remainder=True, get_x=['col1', 'col2'], get_y=['target'], horizon=-wl, y_func=None)(df_test)\n test_eq(x.shape[0], math.ceil((len(df_test))/ wl))\n test_eq(x.shape[0], y.shape[0])\n test_eq(x.shape[2], wl)\n\n\nfor wl in np.arange(1, len(df_test)+1):\n x, y = SlidingWindow(wl, None, pad_remainder=False, get_x=['col1', 'col2'], get_y=['target'], horizon=-wl, y_func=None)(df_test)\n test_eq(x.shape[0], len(df_test) // wl)\n test_eq(x.shape[0], y.shape[0])\n test_eq(x.shape[2], wl)\n\n\nfor wl in np.arange(1, 20):\n x, _ = SlidingWindow(wl, None, pad_remainder=True, get_x=['col1', 'col2'], get_y=[], horizon=0)(df_test)\n test_eq(x.shape[0], math.ceil((len(df_test))/wl))\n test_eq(x.shape[2], wl)\n\n\nfor wl in np.arange(2, len(df_test)):\n x, _ = SlidingWindow(wl, wl, pad_remainder=False, get_x=['col1', 'col2'], get_y=[], horizon=0)(df_test)\n test_eq(x.shape[0], len(df_test) // wl)\n test_eq(x.shape[2], wl)\n\n\ndf = pd.DataFrame()\ndf['sample_id'] = np.concatenate([np.ones(n)*(i + 1) for i,n in enumerate([13])])\ndf['var1'] = df['sample_id'] + df.index.values - 1\ndf['var2'] = df['var1'] * 10\ndf['target'] = (df['var1']).astype(int)\ndf['sample_id'] = df['sample_id'].astype(int)\ndf\n\n\n\n\n\n\n\n\nsample_id\nvar1\nvar2\ntarget\n\n\n\n\n0\n1\n0.0\n0.0\n0\n\n\n1\n1\n1.0\n10.0\n1\n\n\n2\n1\n2.0\n20.0\n2\n\n\n3\n1\n3.0\n30.0\n3\n\n\n4\n1\n4.0\n40.0\n4\n\n\n5\n1\n5.0\n50.0\n5\n\n\n6\n1\n6.0\n60.0\n6\n\n\n7\n1\n7.0\n70.0\n7\n\n\n8\n1\n8.0\n80.0\n8\n\n\n9\n1\n9.0\n90.0\n9\n\n\n10\n1\n10.0\n100.0\n10\n\n\n11\n1\n11.0\n110.0\n11\n\n\n12\n1\n12.0\n120.0\n12\n\n\n\n\n\n\n\n\nX, y = SlidingWindow(window_len=3, stride=2, start=3, pad_remainder=False, padding=\"pre\", padding_value=np.nan, add_padding_feature=False,\n get_x=[\"var1\", \"var2\"], get_y=[\"target\"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,\n ascending=True, check_leakage=True)(df)\ntest_eq(X.shape, (2, 2, 3))\ntest_eq(y.shape, (2, 4))\nX, y\n\n(array([[[ 4., 5., 6.],\n [40., 50., 60.]],\n \n [[ 6., 7., 8.],\n [60., 70., 80.]]]),\n array([[ 7, 8, 9, 10],\n [ 9, 10, 11, 12]]))\n\n\n\nX, y = SlidingWindow(window_len=3, stride=2, start=3, pad_remainder=True, padding=\"pre\", padding_value=np.nan, add_padding_feature=False,\n get_x=[\"var1\", \"var2\"], get_y=[\"target\"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,\n ascending=True, check_leakage=True)(df)\ntest_eq(X.shape, (3, 2, 3))\ntest_eq(y.shape, (3, 4))\nX, y\n\n(array([[[nan, 3., 4.],\n [nan, 30., 40.]],\n \n [[ 4., 5., 6.],\n [40., 50., 60.]],\n \n [[ 6., 7., 8.],\n [60., 70., 80.]]]),\n array([[ 5, 6, 7, 8],\n [ 7, 8, 9, 10],\n [ 9, 10, 11, 12]]))\n\n\n\nX, y = SlidingWindow(window_len=3, stride=2, start=3, pad_remainder=False, padding=\"post\", padding_value=np.nan, add_padding_feature=False,\n get_x=[\"var1\", \"var2\"], get_y=[\"target\"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,\n ascending=True, check_leakage=True)(df)\ntest_eq(X.shape, (2, 2, 3))\ntest_eq(y.shape, (2, 4))\nX, y\n\n(array([[[ 3., 4., 5.],\n [30., 40., 50.]],\n \n [[ 5., 6., 7.],\n [50., 60., 70.]]]),\n array([[ 6, 7, 8, 9],\n [ 8, 9, 10, 11]]))\n\n\n\nX, y = SlidingWindow(window_len=3, stride=2, start=3, pad_remainder=True, padding=\"post\", padding_value=np.nan, add_padding_feature=False,\n get_x=[\"var1\", \"var2\"], get_y=[\"target\"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,\n ascending=True, check_leakage=True)(df)\ntest_eq(X.shape, (3, 2, 3))\ntest_eq(y.shape, (3, 4))\nX, y\n\n(array([[[ 3., 4., 5.],\n [30., 40., 50.]],\n \n [[ 5., 6., 7.],\n [50., 60., 70.]],\n \n [[ 7., 8., 9.],\n [70., 80., 90.]]]),\n array([[ 6., 7., 8., 9.],\n [ 8., 9., 10., 11.],\n [10., 11., 12., nan]]))\n\n\n\nX, y = SlidingWindow(window_len=10, stride=2, start=3, pad_remainder=True, padding=\"pre\", padding_value=np.nan, add_padding_feature=False,\n get_x=[\"var1\", \"var2\"], get_y=[\"target\"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,\n ascending=True, check_leakage=True)(df)\ntest_eq(X.shape, (1, 2, 10))\ntest_eq(y.shape, (1, 4))\nX, y\n\n(array([[[nan, nan, nan, nan, 3., 4., 5., 6., 7., 8.],\n [nan, nan, nan, nan, 30., 40., 50., 60., 70., 80.]]]),\n array([[ 9, 10, 11, 12]]))\n\n\n\nX, y = SlidingWindow(window_len=10, stride=2, start=3, pad_remainder=True, padding=\"post\", padding_value=np.nan, add_padding_feature=False,\n get_x=[\"var1\", \"var2\"], get_y=[\"target\"], y_func=None, output_processor=None, copy=False, horizon=4, seq_first=True, sort_by=None,\n ascending=True, check_leakage=True)(df)\ntest_eq(X.shape, (1, 2, 10))\ntest_eq(y.shape, (1, 4))\nX, y\n\n(array([[[ 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.],\n [ 30., 40., 50., 60., 70., 80., 90., 100., 110., 120.]]]),\n array([[nan, nan, nan, nan]]))\n\n\n\nsource\n\n\nSlidingWindowPanel\n\n SlidingWindowPanel (window_len:int, unique_id_cols:list,\n stride:Optional[int]=1, start:int=0,\n pad_remainder:bool=False, padding:str='post',\n padding_value:float=nan,\n add_padding_feature:bool=True,\n get_x:Union[NoneType,int,list]=None,\n get_y:Union[NoneType,int,list]=None,\n y_func:Optional[<built-infunctioncallable>]=None,\n output_processor:Optional[<built-\n infunctioncallable>]=None, copy:bool=False,\n horizon:Union[int,list]=1, seq_first:bool=True,\n sort_by:Optional[list]=None, ascending:bool=True,\n check_leakage:bool=True, return_key:bool=False,\n verbose:bool=True)\n\nApplies a sliding window to a pd.DataFrame.\nArgs: window_len = length of lookback window unique_id_cols = pd.DataFrame columns that will be used to identify a time series for each entity. stride = n datapoints the window is moved ahead along the sequence. Default: 1. If None, stride=window_len (no overlap) start = determines the step where the first window is applied: 0 (default), a given step (int), or random within the 1st stride (None). pad_remainder = allows to pad remainder subsequences when the sliding window is applied and get_y == [] (unlabeled data). padding = ‘pre’ or ‘post’ (optional, defaults to ‘pre’): pad either before or after each sequence. If pad_remainder == False, it indicates the starting point to create the sequence (‘pre’ from the end, and ‘post’ from the beginning) padding_value = value (float) that will be used for padding. Default: np.nan add_padding_feature = add an additional feature indicating whether each timestep is padded (1) or not (0). horizon = number of future datapoints to predict (y). If get_y is [] horizon will be set to 0. * 0 for last step in each sub-window. * n > 0 for a range of n future steps (1 to n). * n < 0 for a range of n past steps (-n + 1 to 0). * list : for those exact timesteps. get_x = indices of columns that contain the independent variable (xs). If None, all data will be used as x. get_y = indices of columns that contain the target (ys). If None, all data will be used as y. [] means no y data is created (unlabeled data). y_func = function to calculate the ys based on the get_y col/s and each y sub-window. y_func must be a function applied to axis=1! output_processor = optional function to filter output (X (and y if available)). This is useful when some values need to be removed. The function should take X and y (even if it’s None) as arguments. copy = copy the original object to avoid changes in it. seq_first = True if input shape (seq_len, n_vars), False if input shape (n_vars, seq_len) sort_by = column/s used for sorting the array in ascending order ascending = used in sorting check_leakage = checks if there’s leakage in the output between X and y return_key = when True, the key corresponsing to unique_id_cols for each sample is returned verbose = controls verbosity. True or 1 displays progress bar. 2 or more show records that cannot be created due to its length.\nInput: You can use np.ndarray, pd.DataFrame or torch.Tensor as input shape: (seq_len, ) or (seq_len, n_vars) if seq_first=True else (n_vars, seq_len)\n\nsamples = 100_000\nwl = 5\nn_vars = 10\n\nt = (torch.stack(n_vars * [torch.arange(samples)]).T * tensor([10**i for i in range(n_vars)]))\ndf = pd.DataFrame(t, columns=[f'var_{i}' for i in range(n_vars)])\ndf['time'] = np.arange(len(t))\ndf['device'] = 0\ndf['target'] = np.random.randint(0, 2, len(df))\ndf2 = df.copy()\ndf3 = df.copy()\ncols = ['var_0', 'var_1', 'var_2', 'device', 'target']\ndf2[cols] = df2[cols] + 1\ndf3[cols] = df3[cols] + 2\ndf2 = df2.loc[:3]\ndf['region'] = 'A'\ndf2['region'] = 'A'\ndf3['region'] = 'B'\ndf = pd.concat([df, df2, df3], ignore_index=True)\ndf['index'] = np.arange(len(df))\ndf = df.sample(frac=1).reset_index(drop=True)\ndisplay(df.head())\ndf.shape\n\n\n\n\n\n\n\n\nvar_0\nvar_1\nvar_2\nvar_3\nvar_4\nvar_5\nvar_6\nvar_7\nvar_8\nvar_9\ntime\ndevice\ntarget\nregion\nindex\n\n\n\n\n0\n86008\n860080\n8600800\n86008000\n860080000\n8600800000\n86008000000\n860080000000\n8600800000000\n86008000000000\n86008\n0\n0\nA\n86008\n\n\n1\n90003\n900012\n9000102\n90001000\n900010000\n9000100000\n90001000000\n900010000000\n9000100000000\n90001000000000\n90001\n2\n2\nB\n190005\n\n\n2\n43819\n438172\n4381702\n43817000\n438170000\n4381700000\n43817000000\n438170000000\n4381700000000\n43817000000000\n43817\n2\n3\nB\n143821\n\n\n3\n80751\n807492\n8074902\n80749000\n807490000\n8074900000\n80749000000\n807490000000\n8074900000000\n80749000000000\n80749\n2\n3\nB\n180753\n\n\n4\n84917\n849152\n8491502\n84915000\n849150000\n8491500000\n84915000000\n849150000000\n8491500000000\n84915000000000\n84915\n2\n3\nB\n184919\n\n\n\n\n\n\n\n(200004, 15)\n\n\n\nX, y = SlidingWindowPanel(window_len=5, unique_id_cols=['device'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], \n horizon=0, seq_first=True, sort_by=['time'], ascending=True, return_key=False)(df)\nX.shape, y.shape\n\nprocessing data...\n...data processed\nconcatenating X...\n...X concatenated\nconcatenating y...\n...y concatenated\n\n\n\n\n\n\n\n\n\n((199992, 10, 5), (199992,))\n\n\n\nX, y, key = SlidingWindowPanel(window_len=5, unique_id_cols=['device'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], \n horizon=0, seq_first=True, sort_by=['time'], ascending=True, return_key=True)(df)\nX.shape, y.shape, key.shape\n\nprocessing data...\n...data processed\nconcatenating X...\n...X concatenated\nconcatenating y...\n...y concatenated\n\n\n\n\n\n\n\n\n\n((199992, 10, 5), (199992,), (199992,))\n\n\n\nX, y = SlidingWindowPanel(window_len=5, unique_id_cols=['device', 'region'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], \n horizon=0, seq_first=True, sort_by=['time'], ascending=True)(df)\nX.shape, y.shape\n\nprocessing data...\n...data processed\nconcatenating X...\n...X concatenated\nconcatenating y...\n...y concatenated\n\n\n\n\n\n\n\n\n\n((199992, 10, 5), (199992,))\n\n\n\n# y_func must be a function applied to axis=1!\ndef y_max(o): return np.max(o, axis=1)\n\n\nX, y = SlidingWindowPanel(window_len=5, unique_id_cols=['device', 'region'], stride=1, start=0, get_x=df.columns[:n_vars], get_y=['target'], \n y_func=y_max, horizon=5, seq_first=True, sort_by=['time'], ascending=True)(df)\nX.shape, y.shape\n\nprocessing data...\n...data processed\nconcatenating X...\n...X concatenated\nconcatenating y...\n...y concatenated\n\n\n\n\n\n\n\n \n \n 0.00% [0/3 00:00<?]\n \n \n\n\n((199982, 10, 5), (199982,))\n\n\n\nsource\n\n\nidentify_padding\n\n identify_padding (float_mask, value=-1)\n\nIdentifies padded subsequences in a mask of type float\nThis function identifies as padded subsequences those where all values == nan from the end of the sequence (last dimension) across all channels, and sets those values to the selected value (default = -1)\nArgs: mask: boolean or float mask value: scalar that will be used to identify padded subsequences\n\nwl = 5\nstride = 5\n\nt = np.repeat(np.arange(13).reshape(-1,1), 3, axis=-1)\nprint('input shape:', t.shape)\nX, _ = SlidingWindow(wl, stride=stride, pad_remainder=True, get_y=[])(t)\nX = tensor(X)\nX[0, 1, -2:] = np.nan\nX[1,..., :3] = np.nan\nprint(X)\nidentify_padding(torch.isnan(X).float())\n\ninput shape: (13, 3)\ntensor([[[ 0., 1., 2., 3., 4.],\n [ 0., 1., 2., nan, nan],\n [ 0., 1., 2., 3., 4.],\n [ 0., 0., 0., 0., 0.]],\n\n [[nan, nan, nan, 8., 9.],\n [nan, nan, nan, 8., 9.],\n [nan, nan, nan, 8., 9.],\n [nan, nan, nan, 0., 0.]],\n\n [[10., 11., 12., nan, nan],\n [10., 11., 12., nan, nan],\n [10., 11., 12., nan, nan],\n [ 0., 0., 0., 1., 1.]]])\n\n\ntensor([[[0., 0., 0., 0., 0.],\n [0., 0., 0., 1., 1.],\n [0., 0., 0., 0., 0.],\n [0., 0., 0., 0., 0.]],\n\n [[1., 1., 1., 0., 0.],\n [1., 1., 1., 0., 0.],\n [1., 1., 1., 0., 0.],\n [1., 1., 1., 0., 0.]],\n\n [[0., 0., 0., 1., 1.],\n [0., 0., 0., 1., 1.],\n [0., 0., 0., 1., 1.],\n [0., 0., 0., 0., 0.]]])\n\n\n\n\nForecasting data preparation\n\nsource\n\nbasic_data_preparation_fn\n\n basic_data_preparation_fn (df, drop_duplicates=True, datetime_col=None,\n use_index=False, keep='last',\n add_missing_datetimes=True, freq='1D',\n method=None, sort_by=None)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndf\n\n\ndataframe to preprocess\n\n\ndrop_duplicates\nbool\nTrue\nflag to indicate if rows with duplicate datetime info should be removed\n\n\ndatetime_col\nNoneType\nNone\nstr indicating the name of the column/s that contains the datetime info\n\n\nuse_index\nbool\nFalse\nflag to indicate if the datetime info is in the index\n\n\nkeep\nstr\nlast\nstr to indicate what data should be kept in case of duplicate rows\n\n\nadd_missing_datetimes\nbool\nTrue\nflaf to indicate if missing datetimes should be added\n\n\nfreq\nstr\n1D\nstr to indicate the frequency used in the datetime info. Used in case missing timestamps exists\n\n\nmethod\nNoneType\nNone\nstr indicating the method used to fill data for missing timestamps: None, ‘bfill’, ‘ffill’\n\n\nsort_by\nNoneType\nNone\nstr or list of str to indicate if how to sort data. If use_index=True the index will be used to sort the dataframe.\n\n\n\n\ndf_len = 100\ndatetime_col = 'datetime' \ndf = pd.DataFrame(np.arange(df_len), columns=['value'])\ndf['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df_len, freq='1D')\ndf['type'] = 1\n# drop 10 rows at random\ndf = df.drop(df.sample(10).index)\n# add 2 duplicated rows\ndf = pd.concat([df, df.sample(2)])\ndisplay(df)\n\nnew_df = basic_data_preparation_fn(df, drop_duplicates=True, datetime_col=datetime_col, use_index=False, keep='last', \n add_missing_datetimes=True, freq='1D', method='ffill', sort_by=datetime_col)\ndisplay(new_df)\n\n\n\n\n\n\n\n\nvalue\ndatetime\ntype\n\n\n\n\n0\n0\n1749-03-31\n1\n\n\n1\n1\n1749-04-01\n1\n\n\n3\n3\n1749-04-03\n1\n\n\n4\n4\n1749-04-04\n1\n\n\n5\n5\n1749-04-05\n1\n\n\n...\n...\n...\n...\n\n\n96\n96\n1749-07-05\n1\n\n\n97\n97\n1749-07-06\n1\n\n\n99\n99\n1749-07-08\n1\n\n\n0\n0\n1749-03-31\n1\n\n\n19\n19\n1749-04-19\n1\n\n\n\n\n92 rows × 3 columns\n\n\n\n\n\n\n\n\n\n\nvalue\ndatetime\ntype\n\n\n\n\n0\n0\n1749-03-31\n1\n\n\n1\n1\n1749-04-01\n1\n\n\n2\n1\n1749-04-02\n1\n\n\n3\n3\n1749-04-03\n1\n\n\n4\n4\n1749-04-04\n1\n\n\n...\n...\n...\n...\n\n\n95\n95\n1749-07-04\n1\n\n\n96\n96\n1749-07-05\n1\n\n\n97\n97\n1749-07-06\n1\n\n\n98\n97\n1749-07-07\n1\n\n\n99\n99\n1749-07-08\n1\n\n\n\n\n100 rows × 3 columns\n\n\n\n\nsource\n\n\ncheck_safe_conversion\n\n check_safe_conversion (o, dtype='float32', cols=None)\n\nChecks if the conversion to float is safe\n\nassert check_safe_conversion(-2**11, 'float16') == True\nassert check_safe_conversion(-2**11 - 1, 'float16') == False\nassert check_safe_conversion(2**24, 'float32') == True\nassert check_safe_conversion(2**24+1, 'float32') == False\nassert check_safe_conversion(2**53, 'float64') == True\nassert check_safe_conversion(2**53+1, 'float64') == False\n\ndf = pd.DataFrame({'a': [1, 2, 3], 'b': [2**24, 2**24+1, 2**24+2]})\nassert not check_safe_conversion(df, 'float32')\nassert check_safe_conversion(df, 'int32')\nassert check_safe_conversion(df, 'float32', cols='a')\nassert not check_safe_conversion(df, 'float32', cols='b')\n\n-2147483648 1 3 2147483647\n-2147483648 16777216 16777218 2147483647\n\n\n/var/folders/42/4hhwknbd5kzcbq48tmy_gbp00000gn/T/ipykernel_30986/657350933.py:39: UserWarning: Unsafe conversion to float32: {'a': True, 'b': False}\n warnings.warn(f\"Unsafe conversion to {dtype}: {dict(zip(cols, checks))}\")\n/var/folders/42/4hhwknbd5kzcbq48tmy_gbp00000gn/T/ipykernel_30986/657350933.py:39: UserWarning: Unsafe conversion to float32: {'b': False}\n warnings.warn(f\"Unsafe conversion to {dtype}: {dict(zip(cols, checks))}\")\n\n\n\nsource\n\n\nprepare_forecasting_data\n\nfrom tsai.data.validation import get_forecasting_splits\n\n\nfcst_history = 10 \nfcst_horizon = 5\nstride = 1\nvalid_size=0.2\ntest_size=0.2\n\ndf = pd.DataFrame()\ndf['target'] = np.arange(50)\n\nX, y = prepare_forecasting_data(df, fcst_history, fcst_horizon)\nsplits = get_forecasting_splits(df, fcst_history, fcst_horizon, valid_size=valid_size, test_size=test_size, stride=stride, show_plot=False)\nassert y[splits[0]][-1][0][-1] == y[splits[1]][0][0][0] - stride\nassert y[splits[1]][-1][0][-1] == y[splits[2]][0][0][0] - stride\nfor s,t in zip(splits, ['\\ntrain_split:', '\\nvalid_split:', '\\ntest_split :']):\n print(t)\n for xi, yi in zip(X[s], y[s]):\n print(xi, yi)\n\n\ntrain_split:\n[[0 1 2 3 4 5 6 7 8 9]] [[10 11 12 13 14]]\n[[ 1 2 3 4 5 6 7 8 9 10]] [[11 12 13 14 15]]\n[[ 2 3 4 5 6 7 8 9 10 11]] [[12 13 14 15 16]]\n[[ 3 4 5 6 7 8 9 10 11 12]] [[13 14 15 16 17]]\n[[ 4 5 6 7 8 9 10 11 12 13]] [[14 15 16 17 18]]\n[[ 5 6 7 8 9 10 11 12 13 14]] [[15 16 17 18 19]]\n[[ 6 7 8 9 10 11 12 13 14 15]] [[16 17 18 19 20]]\n[[ 7 8 9 10 11 12 13 14 15 16]] [[17 18 19 20 21]]\n[[ 8 9 10 11 12 13 14 15 16 17]] [[18 19 20 21 22]]\n[[ 9 10 11 12 13 14 15 16 17 18]] [[19 20 21 22 23]]\n[[10 11 12 13 14 15 16 17 18 19]] [[20 21 22 23 24]]\n[[11 12 13 14 15 16 17 18 19 20]] [[21 22 23 24 25]]\n[[12 13 14 15 16 17 18 19 20 21]] [[22 23 24 25 26]]\n[[13 14 15 16 17 18 19 20 21 22]] [[23 24 25 26 27]]\n[[14 15 16 17 18 19 20 21 22 23]] [[24 25 26 27 28]]\n[[15 16 17 18 19 20 21 22 23 24]] [[25 26 27 28 29]]\n\nvalid_split:\n[[20 21 22 23 24 25 26 27 28 29]] [[30 31 32 33 34]]\n[[21 22 23 24 25 26 27 28 29 30]] [[31 32 33 34 35]]\n[[22 23 24 25 26 27 28 29 30 31]] [[32 33 34 35 36]]\n[[23 24 25 26 27 28 29 30 31 32]] [[33 34 35 36 37]]\n[[24 25 26 27 28 29 30 31 32 33]] [[34 35 36 37 38]]\n[[25 26 27 28 29 30 31 32 33 34]] [[35 36 37 38 39]]\n\ntest_split :\n[[30 31 32 33 34 35 36 37 38 39]] [[40 41 42 43 44]]\n[[31 32 33 34 35 36 37 38 39 40]] [[41 42 43 44 45]]\n[[32 33 34 35 36 37 38 39 40 41]] [[42 43 44 45 46]]\n[[33 34 35 36 37 38 39 40 41 42]] [[43 44 45 46 47]]\n[[34 35 36 37 38 39 40 41 42 43]] [[44 45 46 47 48]]\n[[35 36 37 38 39 40 41 42 43 44]] [[45 46 47 48 49]]\n\n\n\nfcst_history = 10 \nfcst_horizon = 5\nstride = 1\nvalid_size=0.2\ntest_size=0.2\n\ndf = pd.DataFrame()\ndf['target'] = np.arange(50)\n\nX, y = prepare_forecasting_data(df, fcst_history, fcst_horizon, x_vars=None, y_vars=[])\nsplits = get_forecasting_splits(df, fcst_history, fcst_horizon, valid_size=valid_size, test_size=test_size, stride=stride, show_plot=False)\nassert y is None\n\n\ndf_len = 100\nn_values = 3\ndatetime_col = 'datetime' \ndf = pd.DataFrame()\nfor i in range(n_values):\n df[f\"value_{i}\"] = (np.arange(df_len) * 10**i).astype(np.float32)\ndisplay(df)\n\nfcst_history = 10\nfcst_horizon = 5\nx_vars = df.columns\ny_vars = None\ndtype = None\n\nX, y = prepare_forecasting_data(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, x_vars=x_vars, y_vars=y_vars, dtype=dtype)\ntest_eq(X.shape, (86, 3, 10))\ntest_eq(y.shape, (86, 3, 5))\ntest_eq(y[:3, :, 0], X[:3, :, -1] + np.array([1, 10, 100]).reshape(1, 1, -1))\nprint(X[:3].astype(int))\nprint(y[:3].astype(int))\n\n\n\n\n\n\n\n\nvalue_0\nvalue_1\nvalue_2\n\n\n\n\n0\n0.0\n0.0\n0.0\n\n\n1\n1.0\n10.0\n100.0\n\n\n2\n2.0\n20.0\n200.0\n\n\n3\n3.0\n30.0\n300.0\n\n\n4\n4.0\n40.0\n400.0\n\n\n...\n...\n...\n...\n\n\n95\n95.0\n950.0\n9500.0\n\n\n96\n96.0\n960.0\n9600.0\n\n\n97\n97.0\n970.0\n9700.0\n\n\n98\n98.0\n980.0\n9800.0\n\n\n99\n99.0\n990.0\n9900.0\n\n\n\n\n100 rows × 3 columns\n\n\n\n[[[ 0 1 2 3 4 5 6 7 8 9]\n [ 0 10 20 30 40 50 60 70 80 90]\n [ 0 100 200 300 400 500 600 700 800 900]]\n\n [[ 1 2 3 4 5 6 7 8 9 10]\n [ 10 20 30 40 50 60 70 80 90 100]\n [ 100 200 300 400 500 600 700 800 900 1000]]\n\n [[ 2 3 4 5 6 7 8 9 10 11]\n [ 20 30 40 50 60 70 80 90 100 110]\n [ 200 300 400 500 600 700 800 900 1000 1100]]]\n[[[ 10 11 12 13 14]\n [ 100 110 120 130 140]\n [1000 1100 1200 1300 1400]]\n\n [[ 11 12 13 14 15]\n [ 110 120 130 140 150]\n [1100 1200 1300 1400 1500]]\n\n [[ 12 13 14 15 16]\n [ 120 130 140 150 160]\n [1200 1300 1400 1500 1600]]]\n\n\n\ndf_len = 100\nn_values = 3\ndatetime_col = 'datetime' \ndf = pd.DataFrame()\nfor i in range(n_values):\n df[f\"value_{i}\"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)\n\ndf['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df_len, freq='1D')\ndf['type'] = np.random.randint(0, 4, df_len)\ndf['target'] = np.arange(df_len)\ndisplay(df)\n\nfcst_history = 10\nfcst_horizon = 5\nx_vars = ['value_0', 'value_1', 'value_2', 'target']\ny_vars = 'target'\ndtype = np.float32\n\nX, y = prepare_forecasting_data(df, fcst_history=fcst_history, fcst_horizon=fcst_horizon, x_vars=x_vars, y_vars=y_vars, dtype=dtype)\ntest_eq(X.shape, (86, 4, 10))\ntest_eq(y.shape, (86, 1, 5))\nprint(X[:3].astype(int))\nprint(y[:3])\n\n\n\n\n\n\n\n\nvalue_0\nvalue_1\nvalue_2\ndatetime\ntype\ntarget\n\n\n\n\n0\n0.0\n0.0\n0.0\n1749-03-31\n3\n0\n\n\n1\n10.0\n100.0\n1000.0\n1749-04-01\n1\n1\n\n\n2\n20.0\n200.0\n2000.0\n1749-04-02\n1\n2\n\n\n3\n30.0\n300.0\n3000.0\n1749-04-03\n1\n3\n\n\n4\n40.0\n400.0\n4000.0\n1749-04-04\n2\n4\n\n\n...\n...\n...\n...\n...\n...\n...\n\n\n95\n950.0\n9500.0\n95000.0\n1749-07-04\n0\n95\n\n\n96\n960.0\n9600.0\n96000.0\n1749-07-05\n0\n96\n\n\n97\n970.0\n9700.0\n97000.0\n1749-07-06\n3\n97\n\n\n98\n980.0\n9800.0\n98000.0\n1749-07-07\n2\n98\n\n\n99\n990.0\n9900.0\n99000.0\n1749-07-08\n1\n99\n\n\n\n\n100 rows × 6 columns\n\n\n\n[[[ 0 10 20 30 40 50 60 70 80 90]\n [ 0 100 200 300 400 500 600 700 800 900]\n [ 0 1000 2000 3000 4000 5000 6000 7000 8000 9000]\n [ 0 1 2 3 4 5 6 7 8 9]]\n\n [[ 10 20 30 40 50 60 70 80 90 100]\n [ 100 200 300 400 500 600 700 800 900 1000]\n [ 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000]\n [ 1 2 3 4 5 6 7 8 9 10]]\n\n [[ 20 30 40 50 60 70 80 90 100 110]\n [ 200 300 400 500 600 700 800 900 1000 1100]\n [ 2000 3000 4000 5000 6000 7000 8000 9000 10000 11000]\n [ 2 3 4 5 6 7 8 9 10 11]]]\n[[[10. 11. 12. 13. 14.]]\n\n [[11. 12. 13. 14. 15.]]\n\n [[12. 13. 14. 15. 16.]]]\n\n\n\nsource\n\n\nget_today\n\n get_today (datetime_format='%Y-%m-%d')\n\n\ntest_eq(get_today(), dt.datetime.today().strftime(\"%Y-%m-%d\"))\n\n\nsource\n\n\nsplit_fcst_datetime\n\n split_fcst_datetime (fcst_datetime)\n\nDefine fcst start and end dates\n\n\n\n\nDetails\n\n\n\n\nfcst_datetime\nstr or list of str with datetime\n\n\n\n\ntest_eq(split_fcst_datetime(None), (None, None))\ntest_eq(split_fcst_datetime('2020-01-01'), ('2020-01-01', '2020-01-01'))\ntest_eq(split_fcst_datetime(['2019-01-01', '2020-01-01']), ['2019-01-01', '2020-01-01'])\n\n\nsource\n\n\nset_df_datetime\n\n set_df_datetime (df, datetime_col=None, use_index=False)\n\nMake sure datetime column or index is of the right date type.\n\n# Test\ndf_len = 100\nn_values = 3\ndatetime_col = 'datetime'\ndf = pd.DataFrame()\nfor i in range(n_values):\n df[f\"value_{i}\"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)\ndf['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df_len, freq='1D')\nset_df_datetime(df, datetime_col=datetime_col)\ntest_eq(df['datetime'].dtypes, np.dtype('datetime64[ns]'))\ndf_index = df.set_index('datetime')\nset_df_datetime(df_index, use_index=True)\ntest_eq(df_index.index.dtype, np.dtype('datetime64[ns]'))\n\n\nsource\n\n\nget_df_datetime_bounds\n\n get_df_datetime_bounds (df, datetime_col=None, use_index=False)\n\nReturns the start date and and dates used by the forecast\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndf\n\n\ndataframe containing forecasting data\n\n\ndatetime_col\nNoneType\nNone\nstr data column containing the datetime\n\n\nuse_index\nbool\nFalse\nbool flag to indicate if index should be used to get column\n\n\n\n\n# Test\ndf_len = 100\nn_values = 3\ndatetime_col = 'datetime'\ndf = pd.DataFrame()\nfor i in range(n_values):\n df[f\"value_{i}\"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)\ndf['datetime'] = pd.date_range(pd.to_datetime('1749-03-31'), periods=df_len, freq='1D')\ntest_eq(get_df_datetime_bounds(df, datetime_col=datetime_col), (df['datetime'].min(), df['datetime'].max()))\ndf_index = df.set_index('datetime')\ntest_eq(get_df_datetime_bounds(df_index, use_index=True), (df_index.index.min(), df_index.index.max()))\n\n\nsource\n\n\nget_fcst_bounds\n\n get_fcst_bounds (df, fcst_datetime, fcst_history=None, fcst_horizon=None,\n freq='D', datetime_format='%Y-%m-%d', datetime_col=None,\n use_index=False)\n\nReturns the start and end datetimes used by the forecast\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndf\n\n\ndataframe containing forecasting data\n\n\nfcst_datetime\n\n\ndatetime for which a fcst is created. Optionally tuple of datatimes if the fcst is created for a range of dates.\n\n\nfcst_history\nNoneType\nNone\n# steps used as input\n\n\nfcst_horizon\nNoneType\nNone\n# predicted steps\n\n\nfreq\nstr\nD\ndatetime units. May contain a letters only or a combination of ints + letters: eg. “7D”\n\n\ndatetime_format\nstr\n%Y-%m-%d\nformat used to convert “today”\n\n\ndatetime_col\nNoneType\nNone\nstr data column containing the datetime\n\n\nuse_index\nbool\nFalse\nbool flag to indicate if index should be used to get column\n\n\n\n\nfrom datetime import timedelta\n\n\n# Test\ndf_len = 100\nn_values = 3\ndatetime_col = 'datetime'\ndf = pd.DataFrame()\nfor i in range(n_values):\n df[f\"value_{i}\"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)\nfreq = \"7D\"\ntoday = pd.Timestamp(get_today()).floor(freq)\ndf['datetime'] = pd.date_range(None, today, periods=df_len, freq=freq)\ndisplay(df)\nmax_dt = pd.Timestamp(df['datetime'].max()).floor(freq)\nfcst_history = 30\nfcst_horizon = 10\nfcst_datetime = max_dt - timedelta(weeks=fcst_horizon)\nprint('fcst_datetime :', fcst_datetime)\nstart_datetime, end_datetime = get_fcst_bounds(df, fcst_datetime, datetime_col=datetime_col, fcst_history=fcst_history, fcst_horizon=fcst_horizon, freq=freq)\nprint('start_datetime:', start_datetime)\nprint('end_datetime :', end_datetime)\ndates = pd.date_range(start_datetime, end_datetime, freq=freq)\nprint(dates)\ntest_eq(len(dates), fcst_history + fcst_horizon)\ntest_eq(end_datetime, max_dt)\n\n\n\n\n\n\n\n\nvalue_0\nvalue_1\nvalue_2\ndatetime\n\n\n\n\n0\n0.0\n0.0\n0.0\n2021-11-25\n\n\n1\n10.0\n100.0\n1000.0\n2021-12-02\n\n\n2\n20.0\n200.0\n2000.0\n2021-12-09\n\n\n3\n30.0\n300.0\n3000.0\n2021-12-16\n\n\n4\n40.0\n400.0\n4000.0\n2021-12-23\n\n\n...\n...\n...\n...\n...\n\n\n95\n950.0\n9500.0\n95000.0\n2023-09-21\n\n\n96\n960.0\n9600.0\n96000.0\n2023-09-28\n\n\n97\n970.0\n9700.0\n97000.0\n2023-10-05\n\n\n98\n980.0\n9800.0\n98000.0\n2023-10-12\n\n\n99\n990.0\n9900.0\n99000.0\n2023-10-19\n\n\n\n\n100 rows × 4 columns\n\n\n\nfcst_datetime : 2023-08-10 00:00:00\nstart_datetime: 2023-01-19 00:00:00\nend_datetime : 2023-10-19 00:00:00\nDatetimeIndex(['2023-01-19', '2023-01-26', '2023-02-02', '2023-02-09',\n '2023-02-16', '2023-02-23', '2023-03-02', '2023-03-09',\n '2023-03-16', '2023-03-23', '2023-03-30', '2023-04-06',\n '2023-04-13', '2023-04-20', '2023-04-27', '2023-05-04',\n '2023-05-11', '2023-05-18', '2023-05-25', '2023-06-01',\n '2023-06-08', '2023-06-15', '2023-06-22', '2023-06-29',\n '2023-07-06', '2023-07-13', '2023-07-20', '2023-07-27',\n '2023-08-03', '2023-08-10', '2023-08-17', '2023-08-24',\n '2023-08-31', '2023-09-07', '2023-09-14', '2023-09-21',\n '2023-09-28', '2023-10-05', '2023-10-12', '2023-10-19'],\n dtype='datetime64[ns]', freq='7D')\n\n\n\nsource\n\n\nfilter_df_by_datetime\n\n filter_df_by_datetime (df, start_datetime=None, end_datetime=None,\n datetime_col=None, use_index=False)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndf\n\n\ndataframe containing forecasting data\n\n\nstart_datetime\nNoneType\nNone\nlower datetime bound\n\n\nend_datetime\nNoneType\nNone\nupper datetime bound\n\n\ndatetime_col\nNoneType\nNone\nstr data column containing the datetime\n\n\nuse_index\nbool\nFalse\nbool flag to indicate if index should be used to get column\n\n\n\n\n# Test\ndf_len = 100\nn_values = 3\ndatetime_col = 'datetime'\ndf = pd.DataFrame()\nfor i in range(n_values):\n df[f\"value_{i}\"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)\nfreq = \"7D\"\ndf['datetime'] = pd.date_range(None, pd.Timestamp(get_today()).floor(freq), periods=df_len, freq=freq)\ndisplay(df)\nmax_dt = pd.Timestamp(df['datetime'].max()).floor(freq)\nfcst_history = 30\nfcst_horizon = 10\nfcst_datetime = pd.date_range(end=fcst_datetime, periods=fcst_horizon + 1, freq=freq).floor(freq)[-1]\nstart_datetime, end_datetime = get_fcst_bounds(df, fcst_datetime, datetime_col=datetime_col, fcst_history=fcst_history, fcst_horizon=fcst_horizon, freq=freq)\ntest_eq(len(filter_df_by_datetime(df, start_datetime=start_datetime, end_datetime=end_datetime, datetime_col=datetime_col)), fcst_history + fcst_horizon)\n\n\n\n\n\n\n\n\nvalue_0\nvalue_1\nvalue_2\ndatetime\n\n\n\n\n0\n0.0\n0.0\n0.0\n2021-11-25\n\n\n1\n10.0\n100.0\n1000.0\n2021-12-02\n\n\n2\n20.0\n200.0\n2000.0\n2021-12-09\n\n\n3\n30.0\n300.0\n3000.0\n2021-12-16\n\n\n4\n40.0\n400.0\n4000.0\n2021-12-23\n\n\n...\n...\n...\n...\n...\n\n\n95\n950.0\n9500.0\n95000.0\n2023-09-21\n\n\n96\n960.0\n9600.0\n96000.0\n2023-09-28\n\n\n97\n970.0\n9700.0\n97000.0\n2023-10-05\n\n\n98\n980.0\n9800.0\n98000.0\n2023-10-12\n\n\n99\n990.0\n9900.0\n99000.0\n2023-10-19\n\n\n\n\n100 rows × 4 columns\n\n\n\n\nsource\n\n\nget_fcst_data_from_df\n\n get_fcst_data_from_df (df, fcst_datetime, fcst_history=None,\n fcst_horizon=None, freq='D',\n datetime_format='%Y-%m-%d', datetime_col=None,\n use_index=False)\n\nGet forecasting data from a dataframe\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndf\n\n\ndataframe containing forecasting data\n\n\nfcst_datetime\n\n\ndatetime for which a fcst is created. Optionally tuple of datatimes if the fcst is created for a range of dates.\n\n\nfcst_history\nNoneType\nNone\n# steps used as input\n\n\nfcst_horizon\nNoneType\nNone\n# predicted steps\n\n\nfreq\nstr\nD\ndatetime units. May contain a letters only or a combination of ints + letters: eg. “7D”\n\n\ndatetime_format\nstr\n%Y-%m-%d\nformat used to convert “today”\n\n\ndatetime_col\nNoneType\nNone\nstr data column containing the datetime\n\n\nuse_index\nbool\nFalse\nbool flag to indicate if index should be used to get column\n\n\n\n\n# Test\ndf_len = 100\nn_values = 3\ndatetime_col = 'datetime'\ndf = pd.DataFrame()\nfor i in range(n_values):\n df[f\"value_{i}\"] = (np.arange(df_len) * 10**(i + 1)).astype(np.float32)\nfreq = \"7D\"\ndf['datetime'] = pd.date_range(None, pd.Timestamp(get_today()).floor(freq), periods=df_len, freq=freq)\ndisplay(df)\nmax_dt = pd.Timestamp(df['datetime'].max()).floor(freq)\nfcst_history = 30\nfcst_horizon = 10\nfcst_datetime = pd.date_range(end=fcst_datetime, periods=fcst_horizon + 1, freq=freq).floor(freq)[-1]\ntest_eq(len(get_fcst_data_from_df(df, fcst_datetime, fcst_history=fcst_history, fcst_horizon=fcst_horizon, freq=freq, datetime_col=datetime_col)), \n fcst_history + fcst_horizon)\n\n\n\n\n\n\n\n\nvalue_0\nvalue_1\nvalue_2\ndatetime\n\n\n\n\n0\n0.0\n0.0\n0.0\n2021-11-25\n\n\n1\n10.0\n100.0\n1000.0\n2021-12-02\n\n\n2\n20.0\n200.0\n2000.0\n2021-12-09\n\n\n3\n30.0\n300.0\n3000.0\n2021-12-16\n\n\n4\n40.0\n400.0\n4000.0\n2021-12-23\n\n\n...\n...\n...\n...\n...\n\n\n95\n950.0\n9500.0\n95000.0\n2023-09-21\n\n\n96\n960.0\n9600.0\n96000.0\n2023-09-28\n\n\n97\n970.0\n9700.0\n97000.0\n2023-10-05\n\n\n98\n980.0\n9800.0\n98000.0\n2023-10-12\n\n\n99\n990.0\n9900.0\n99000.0\n2023-10-19\n\n\n\n\n100 rows × 4 columns", + "crumbs": [ + "Data", + "Data preparation" + ] + }, + { + "objectID": "models.tabtransformer.html", + "href": "models.tabtransformer.html", + "title": "TabTransformer", + "section": "", + "text": "This is an unofficial TabTransformer Pytorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co)\nHuang, X., Khetan, A., Cvitkovic, M., & Karnin, Z. (2020). TabTransformer: Tabular Data Modeling Using Contextual Embeddings. arXiv preprint https://arxiv.org/pdf/2012.06678\nOfficial repo: https://github.com/awslabs/autogluon/tree/master/tabular/src/autogluon/tabular/models/tab_transformer\n\nsource\n\nTabTransformer\n\n TabTransformer (classes, cont_names, c_out, column_embed=True,\n add_shared_embed=False, shared_embed_div=8,\n embed_dropout=0.1, drop_whole_embed=False, d_model=32,\n n_layers=6, n_heads=8, d_k=None, d_v=None, d_ff=None,\n res_attention=True, attention_act='gelu',\n res_dropout=0.1, norm_cont=True, mlp_mults=(4, 2),\n mlp_dropout=0.0, mlp_act=None, mlp_skip=False,\n mlp_bn=False, bn_final=False)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nFullEmbeddingDropout\n\n FullEmbeddingDropout (dropout:float)\n\nFrom https://github.com/jrzaurin/pytorch-widedeep/blob/be96b57f115e4a10fde9bb82c35380a3ac523f52/pytorch_widedeep/models/tab_transformer.py#L153\n\nsource\n\n\nSharedEmbedding\n\n SharedEmbedding (num_embeddings, embedding_dim, shared_embed=True,\n add_shared_embed=False, shared_embed_div=8)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nifnone\n\n ifnone (a, b)\n\nb if a is None else a\n\nfrom fastai.tabular.all import *\n\n\npath = untar_data(URLs.ADULT_SAMPLE)\ndf = pd.read_csv(path/'adult.csv')\ndls = TabularDataLoaders.from_csv(path/'adult.csv', path=path, y_names=\"salary\",\n cat_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race'],\n cont_names = ['age', 'fnlwgt', 'education-num'],\n procs = [Categorify, FillMissing, Normalize])\nx_cat, x_cont, yb = first(dls.train)\nmodel = TabTransformer(dls.classes, dls.cont_names, dls.c)\ntest_eq(model(x_cat, x_cont).shape, (dls.train.bs, dls.c))", + "crumbs": [ + "Models", + "Tabular models", + "TabTransformer" + ] + }, + { + "objectID": "models.multimodal.html", + "href": "models.multimodal.html", + "title": "Multimodal", + "section": "", + "text": "Functionality used for multiple data modalities.\n\nA common scenario in time-series related tasks is the use of multiple types of inputs:\n\nstatic: data that doesn’t change with time\nobserved: temporal data only available in the past\nknown: temporal data available in the past and in the future\n\nAt the same time, these different modalities may contain:\n\ncategorical data\ncontinuous or numerical data\n\nBased on that, there are situations where we have up to 6 different types of input features:\n\ns_cat: static continuous variables\no_cat: observed categorical variables\no_cont: observed continuous variables\nk_cat: known categorical variables\nk_cont: known continuous variables\n\n\nsource\n\nget_feat_idxs\n\n get_feat_idxs (c_in, s_cat_idxs=None, s_cont_idxs=None, o_cat_idxs=None,\n o_cont_idxs=None)\n\nCalculate the indices of the features used for training.\n\nsource\n\n\nget_o_cont_idxs\n\n get_o_cont_idxs (c_in, s_cat_idxs=None, s_cont_idxs=None,\n o_cat_idxs=None)\n\nCalculate the indices of the observed continuous features.\n\nc_in = 7\ns_cat_idxs = 3\ns_cont_idxs = [1, 4, 5]\no_cat_idxs = None\no_cont_idxs = None\n\ns_cat_idxs, s_cont_idxs, o_cat_idxs, o_cont_idxs = get_feat_idxs(c_in, s_cat_idxs=s_cat_idxs, s_cont_idxs=s_cont_idxs, o_cat_idxs=o_cat_idxs, o_cont_idxs=o_cont_idxs)\n\ntest_eq(s_cat_idxs, [3])\ntest_eq(s_cont_idxs, [1, 4, 5])\ntest_eq(o_cat_idxs, [])\ntest_eq(o_cont_idxs, [0, 2, 6])\n\n\nsource\n\n\nTensorSplitter\n\n TensorSplitter (s_cat_idxs:list=None, s_cont_idxs:list=None,\n o_cat_idxs:list=None, o_cont_idxs:list=None,\n k_cat_idxs:list=None, k_cont_idxs:list=None,\n horizon:int=None)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n\nivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ns_cat_idxs\nlist\nNone\nlist of indices for static categorical variables\n\n\ns_cont_idxs\nlist\nNone\nlist of indices for static continuous variables\n\n\no_cat_idxs\nlist\nNone\nlist of indices for observed categorical variables\n\n\no_cont_idxs\nlist\nNone\nlist of indices for observed continuous variables\n\n\nk_cat_idxs\nlist\nNone\nlist of indices for known categorical variables\n\n\nk_cont_idxs\nlist\nNone\nlist of indices for known continuous variables\n\n\nhorizon\nint\nNone\nnumber of time steps to predict ahead\n\n\n\n\n# Example usage\nbs = 4\ns_cat_idxs = 1\ns_cont_idxs = [0, 2]\no_cat_idxs =[ 3, 4, 5]\no_cont_idxs = None\nk_cat_idxs = None\nk_cont_idxs = None\nhorizon=None\ninput_tensor = torch.randn(bs, 6, 10) # 3D input tensor\nsplitter = TensorSplitter(s_cat_idxs=s_cat_idxs, s_cont_idxs=s_cont_idxs,\n o_cat_idxs=o_cat_idxs, o_cont_idxs=o_cont_idxs)\nslices = splitter(input_tensor)\nfor i, slice_tensor in enumerate(slices):\n print(f\"Slice {i+1}: {slice_tensor.shape} {slice_tensor.dtype}\")\n\nSlice 1: torch.Size([4, 1]) torch.int64\nSlice 2: torch.Size([4, 2]) torch.int64\nSlice 3: torch.Size([4, 3, 10]) torch.float32\nSlice 4: torch.Size([4, 0, 10]) torch.float32\n\n\n\n# Example usage\nbs = 4\ns_cat_idxs = 1\ns_cont_idxs = [0, 2]\no_cat_idxs =[ 3, 4, 5]\no_cont_idxs = None\nk_cat_idxs = [6,7]\nk_cont_idxs = 8\nhorizon=3\ninput_tensor = torch.randn(4, 9, 10) # 3D input tensor\nsplitter = TensorSplitter(s_cat_idxs=s_cat_idxs, s_cont_idxs=s_cont_idxs,\n o_cat_idxs=o_cat_idxs, o_cont_idxs=o_cont_idxs,\n k_cat_idxs=k_cat_idxs, k_cont_idxs=k_cont_idxs, horizon=horizon)\nslices = splitter(input_tensor)\nfor i, slice_tensor in enumerate(slices):\n print(f\"Slice {i+1}: {slice_tensor.shape} {slice_tensor.dtype}\")\n\nSlice 1: torch.Size([4, 1]) torch.int64\nSlice 2: torch.Size([4, 2]) torch.int64\nSlice 3: torch.Size([4, 3, 7]) torch.float32\nSlice 4: torch.Size([4, 0, 7]) torch.float32\nSlice 5: torch.Size([4, 2, 10]) torch.float32\nSlice 6: torch.Size([4, 1, 10]) torch.float32\n\n\n\nsource\n\n\nEmbeddings\n\n Embeddings (n_embeddings:list, embedding_dims:list=None,\n padding_idx:int=0, embed_dropout:float=0.0, **kwargs)\n\nEmbedding layers for each categorical variable in a 2D or 3D tensor\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nn_embeddings\nlist\n\nList of num_embeddings for each categorical variable\n\n\nembedding_dims\nlist\nNone\nList of embedding dimensions for each categorical variable\n\n\npadding_idx\nint\n0\nEmbedding padding_idx\n\n\nembed_dropout\nfloat\n0.0\nDropout probability for Embedding layer\n\n\nkwargs\n\n\n\n\n\n\n\nt1 = torch.randint(0, 7, (16, 1))\nt2 = torch.randint(0, 5, (16, 1))\nt = torch.cat([t1, t2], 1).float()\nemb = Embeddings([7, 5], None, embed_dropout=0.1)\ntest_eq(emb(t).shape, (16, 12))\n\n\nt1 = torch.randint(0, 7, (16, 1))\nt2 = torch.randint(0, 5, (16, 1))\nt = torch.cat([t1, t2], 1).float()\nemb = Embeddings([7, 5], [4, 3])\ntest_eq(emb(t).shape, (16, 12))\n\n\nt1 = torch.randint(0, 7, (16, 1, 10))\nt2 = torch.randint(0, 5, (16, 1, 10))\nt = torch.cat([t1, t2], 1).float()\nemb = Embeddings([7, 5], None)\ntest_eq(emb(t).shape, (16, 12, 10))\n\n\nsource\n\n\nStaticBackbone\n\n StaticBackbone (c_in, c_out, seq_len, d=None, layers=[200, 100],\n dropouts=[0.1, 0.2], act=ReLU(inplace=True),\n use_bn=False, lin_first=False)\n\nStatic backbone model to embed static features\n\n# Example usage\nbs = 4\nc_in = 6\nc_out = 8\nseq_len = 10\ninput_tensor = torch.randn(bs, c_in, seq_len) # 3D input tensor\nbackbone = StaticBackbone(c_in, c_out, seq_len)\noutput_tensor = backbone(input_tensor)\nprint(f\"Input shape: {input_tensor.shape} Output shape: {output_tensor.shape}\")\nbackbone\n\nInput shape: torch.Size([4, 6, 10]) Output shape: torch.Size([4, 100])\n\n\nStaticBackbone(\n (flatten): Reshape(bs)\n (mlp): ModuleList(\n (0): LinBnDrop(\n (0): Dropout(p=0.1, inplace=False)\n (1): Linear(in_features=60, out_features=200, bias=True)\n (2): ReLU(inplace=True)\n )\n (1): LinBnDrop(\n (0): Dropout(p=0.2, inplace=False)\n (1): Linear(in_features=200, out_features=100, bias=True)\n (2): ReLU(inplace=True)\n )\n )\n)\n\n\n\n# class MultInputWrapper(nn.Module):\n# \"Model wrapper for input tensors with static and/ or observed, categorical and/ or numerical features.\"\n\n# def __init__(self,\n# arch,\n# c_in:int=None, # number of input variables\n# c_out:int=None, # number of output variables\n# seq_len:int=None, # input sequence length\n# d:tuple=None, # shape of the output tensor\n# dls:TSDataLoaders=None, # TSDataLoaders object\n# s_cat_idxs:list=None, # list of indices for static categorical variables\n# s_cat_embeddings:list=None, # list of num_embeddings for each static categorical variable\n# s_cat_embedding_dims:list=None, # list of embedding dimensions for each static categorical variable\n# s_cont_idxs:list=None, # list of indices for static continuous variables\n# o_cat_idxs:list=None, # list of indices for observed categorical variables\n# o_cat_embeddings:list=None, # list of num_embeddings for each observed categorical variable\n# o_cat_embedding_dims:list=None, # list of embedding dimensions for each observed categorical variable\n# o_cont_idxs:list=None, # list of indices for observed continuous variables. All features not in s_cat_idxs, s_cont_idxs, o_cat_idxs are considered observed continuous variables.\n# patch_len:int=None, # Number of time steps in each patch.\n# patch_stride:int=None, # Stride of the patch.\n# flatten:bool=False, # boolean indicating whether to flatten bacbone's output tensor\n# use_bn:bool=False, # boolean indicating whether to use batch normalization in the head\n# fc_dropout:float=0., # dropout probability for the fully connected layer in the head\n# custom_head=None, # custom head to replace the default head\n# **kwargs\n# ):\n# super().__init__()\n\n# # attributes\n# c_in = c_in or dls.vars\n# c_out = c_out or dls.c\n# seq_len = seq_len or dls.len\n# d = d or (dls.d if dls is not None else None)\n# self.c_in, self.c_out, self.seq_len, self.d = c_in, c_out, seq_len, d\n\n# # tensor splitter\n# if o_cont_idxs is None:\n# o_cont_idxs = get_o_cont_idxs(c_in, s_cat_idxs=s_cat_idxs, s_cont_idxs=s_cont_idxs, o_cat_idxs=o_cat_idxs)\n# self.splitter = TensorSplitter(s_cat_idxs, s_cont_idxs, o_cat_idxs, o_cont_idxs)\n# s_cat_idxs, s_cont_idxs, o_cat_idxs, o_cont_idxs = self.splitter.s_cat_idxs, self.splitter.s_cont_idxs, self.splitter.o_cat_idxs, self.splitter.o_cont_idxs\n# assert c_in == sum([len(s_cat_idxs), len(s_cont_idxs), len(o_cat_idxs), len(o_cont_idxs)])\n\n# # embeddings\n# self.s_embeddings = Embeddings(s_cat_embeddings, s_cat_embedding_dims)\n# self.o_embeddings = Embeddings(o_cat_embeddings, o_cat_embedding_dims)\n\n# # patch encoder\n# if patch_len is not None:\n# patch_stride = patch_stride or patch_len\n# self.patch_encoder = PatchEncoder(patch_len, patch_stride, seq_len=seq_len)\n# c_mult = patch_len\n# seq_len = (seq_len + self.patch_encoder.pad_size - patch_len) // patch_stride + 1\n# else:\n# self.patch_encoder = nn.Identity()\n# c_mult = 1\n\n# # backbone\n# n_s_features = len(s_cont_idxs) + self.s_embeddings.embedding_dims\n# n_o_features = (len(o_cont_idxs) + self.o_embeddings.embedding_dims) * c_mult\n# s_backbone = StaticBackbone(c_in=n_s_features, c_out=c_out, seq_len=1, **kwargs)\n# if isinstance(arch, str):\n# arch = get_arch(arch)\n# if isinstance(arch, nn.Module):\n# o_model = arch\n# else:\n# o_model = build_ts_model(arch, c_in=n_o_features, c_out=c_out, seq_len=seq_len, d=d, **kwargs)\n# assert hasattr(o_model, \"backbone\"), \"the selected arch must have a backbone\"\n# o_backbone = getattr(o_model, \"backbone\")\n\n# # head\n# o_head_nf = output_size_calculator(o_backbone, n_o_features, seq_len)[0]\n# s_head_nf = s_backbone.head_nf\n# self.backbone = nn.ModuleList([o_backbone, s_backbone])\n# self.head_nf = o_head_nf + s_head_nf\n# if custom_head is not None:\n# if isinstance(custom_head, nn.Module): self.head = custom_head\n# else:self. head = custom_head(self.head_nf, c_out, seq_len, d=d)\n# else:\n# if \"rocket\" in o_model.__name__.lower():\n# self.head = rocket_nd_head(self.head_nf, c_out, seq_len=seq_len, d=d, use_bn=use_bn, fc_dropout=fc_dropout)\n# else:\n# self.head = lin_nd_head(self.head_nf, c_out, seq_len=seq_len, d=d, flatten=flatten, use_bn=use_bn, fc_dropout=fc_dropout)\n\n# def forward(self, x):\n# # split x into static cat, static cont, observed cat, and observed cont\n# s_cat, s_cont, o_cat, o_cont = self.splitter(x)\n\n# # create categorical embeddings\n# s_cat = self.s_embeddings(s_cat)\n# o_cat = self.o_embeddings(o_cat)\n\n# # contatenate static and observed features\n# s_x = torch.cat([s_cat, s_cont], 1)\n# o_x = torch.cat([o_cat, o_cont], 1)\n\n# # patch encoder\n# o_x = self.patch_encoder(o_x)\n\n# # pass static and observed features through their respective backbones\n# for i,(b,xi) in enumerate(zip(self.backbone, [o_x, s_x])):\n# if i == 0:\n# x = b(xi)\n# if x.ndim == 2:\n# x = x[..., None]\n# else:\n# x = torch.cat([x, b(xi)[..., None].repeat(1, 1, x.shape[-1])], 1)\n\n# # head\n# x = self.head(x)\n# return x\n\n\n# from tsai.models.InceptionTimePlus import InceptionTimePlus\n\n\n# c_in = 6\n# c_out = 3\n# seq_len = 97\n# d = None\n\n# s_cat_idxs=2\n# s_cont_idxs=4\n# o_cat_idxs=[0, 3]\n# o_cont_idxs=None\n# s_cat_embeddings = 5\n# s_cat_embedding_dims = None\n# o_cat_embeddings = [7, 3]\n# o_cat_embedding_dims = [3, None]\n\n# t0 = torch.randint(0, 7, (16, 1, seq_len)) # cat\n# t1 = torch.randn(16, 1, seq_len)\n# t2 = torch.randint(0, 5, (16, 1, seq_len)) # cat\n# t3 = torch.randint(0, 3, (16, 1, seq_len)) # cat\n# t4 = torch.randn(16, 1, seq_len)\n# t5 = torch.randn(16, 1, seq_len)\n\n# t = torch.cat([t0, t1, t2, t3, t4, t5], 1).float()\n\n# patch_lens = [None, 5, 5, 5, 5]\n# patch_strides = [None, None, 1, 3, 5]\n# for patch_len, patch_stride in zip(patch_lens, patch_strides):\n# for arch in [\"InceptionTimePlus\", InceptionTimePlus, \"MultiRocketPlus\"]:\n# print(f\"arch: {arch}, patch_len: {patch_len}, patch_stride: {patch_stride}\")\n\n# model = MultInputWrapper(\n# arch=arch,\n# c_in=c_in,\n# c_out=c_out,\n# seq_len=seq_len,\n# d=d,\n# s_cat_idxs=s_cat_idxs, s_cat_embeddings=s_cat_embeddings, s_cat_embedding_dims=s_cat_embedding_dims,\n# s_cont_idxs=s_cont_idxs,\n# o_cat_idxs=o_cat_idxs, o_cat_embeddings=o_cat_embeddings, o_cat_embedding_dims=o_cat_embedding_dims,\n# o_cont_idxs=o_cont_idxs,\n# patch_len=patch_len,\n# patch_stride=patch_stride,\n# )\n\n# test_eq(model(t).shape, (16,3))\n\n\nsource\n\n\nFusionMLP\n\n FusionMLP (comb_dim, layers, act='relu', dropout=0.0, use_bn=True)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nbs = 16\nemb_dim = 128\nseq_len = 20\ncat_dim = 24\ncont_feat = 3\n\ncomb_dim = emb_dim + cat_dim + cont_feat\nemb = torch.randn(bs, emb_dim, seq_len)\ncat = torch.randn(bs, cat_dim)\ncont = torch.randn(bs, cont_feat)\nfusion_mlp = FusionMLP(comb_dim, layers=comb_dim, act='relu', dropout=.1)\noutput = fusion_mlp(cat, cont, emb)\ntest_eq(output.shape, (bs, comb_dim))\n\n\nbs = 16\nemb_dim = 50000\ncat_dim = 24\ncont_feat = 3\n\ncomb_dim = emb_dim + cat_dim + cont_feat\nemb = torch.randn(bs, emb_dim)\ncat = torch.randn(bs, cat_dim)\ncont = torch.randn(bs, cont_feat)\nfusion_mlp = FusionMLP(comb_dim, layers=[128], act='relu', dropout=.1)\noutput = fusion_mlp(cat, cont, emb)\ntest_eq(output.shape, (bs, 128))\n\n\nsource\n\n\nMultInputBackboneWrapper\n\n MultInputBackboneWrapper (arch, c_in:int=None, seq_len:int=None,\n d:tuple=None,\n dls:tsai.data.core.TSDataLoaders=None,\n s_cat_idxs:list=None,\n s_cat_embeddings:list=None,\n s_cat_embedding_dims:list=None,\n s_cont_idxs:list=None, o_cat_idxs:list=None,\n o_cat_embeddings:list=None,\n o_cat_embedding_dims:list=None,\n o_cont_idxs:list=None, patch_len:int=None,\n patch_stride:int=None,\n fusion_layers:list=[128],\n fusion_act:str='relu',\n fusion_dropout:float=0.0,\n fusion_use_bn:bool=True, **kwargs)\n\nModel backbone wrapper for input tensors with static and/ or observed, categorical and/ or numerical features.\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\narch\n\n\n\n\n\nc_in\nint\nNone\nnumber of input variables\n\n\nseq_len\nint\nNone\ninput sequence length\n\n\nd\ntuple\nNone\nshape of the output tensor\n\n\ndls\nTSDataLoaders\nNone\nTSDataLoaders object\n\n\ns_cat_idxs\nlist\nNone\nlist of indices for static categorical variables\n\n\ns_cat_embeddings\nlist\nNone\nlist of num_embeddings for each static categorical variable\n\n\ns_cat_embedding_dims\nlist\nNone\nlist of embedding dimensions for each static categorical variable\n\n\ns_cont_idxs\nlist\nNone\nlist of indices for static continuous variables\n\n\no_cat_idxs\nlist\nNone\nlist of indices for observed categorical variables\n\n\no_cat_embeddings\nlist\nNone\nlist of num_embeddings for each observed categorical variable\n\n\no_cat_embedding_dims\nlist\nNone\nlist of embedding dimensions for each observed categorical variable\n\n\no_cont_idxs\nlist\nNone\nlist of indices for observed continuous variables. All features not in s_cat_idxs, s_cont_idxs, o_cat_idxs are considered observed continuous variables.\n\n\npatch_len\nint\nNone\nNumber of time steps in each patch.\n\n\npatch_stride\nint\nNone\nStride of the patch.\n\n\nfusion_layers\nlist\n[128]\nlist of layer dimensions for the fusion MLP\n\n\nfusion_act\nstr\nrelu\nactivation function for the fusion MLP\n\n\nfusion_dropout\nfloat\n0.0\ndropout probability for the fusion MLP\n\n\nfusion_use_bn\nbool\nTrue\nboolean indicating whether to use batch normalization in the fusion MLP\n\n\nkwargs\n\n\n\n\n\n\n\nsource\n\n\nMultInputWrapper\n\n MultInputWrapper (arch, c_in:int=None, c_out:int=1, seq_len:int=None,\n d:tuple=None, dls:tsai.data.core.TSDataLoaders=None,\n s_cat_idxs:list=None, s_cat_embeddings:list=None,\n s_cat_embedding_dims:list=None, s_cont_idxs:list=None,\n o_cat_idxs:list=None, o_cat_embeddings:list=None,\n o_cat_embedding_dims:list=None, o_cont_idxs:list=None,\n patch_len:int=None, patch_stride:int=None,\n fusion_layers:list=128, fusion_act:str='relu',\n fusion_dropout:float=0.0, fusion_use_bn:bool=True,\n custom_head=None, **kwargs)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\narch\n\n\n\n\n\nc_in\nint\nNone\nnumber of input variables\n\n\nc_out\nint\n1\nnumber of output variables\n\n\nseq_len\nint\nNone\ninput sequence length\n\n\nd\ntuple\nNone\nshape of the output tensor\n\n\ndls\nTSDataLoaders\nNone\nTSDataLoaders object\n\n\ns_cat_idxs\nlist\nNone\nlist of indices for static categorical variables\n\n\ns_cat_embeddings\nlist\nNone\nlist of num_embeddings for each static categorical variable\n\n\ns_cat_embedding_dims\nlist\nNone\nlist of embedding dimensions for each static categorical variable\n\n\ns_cont_idxs\nlist\nNone\nlist of indices for static continuous variables\n\n\no_cat_idxs\nlist\nNone\nlist of indices for observed categorical variables\n\n\no_cat_embeddings\nlist\nNone\nlist of num_embeddings for each observed categorical variable\n\n\no_cat_embedding_dims\nlist\nNone\nlist of embedding dimensions for each observed categorical variable\n\n\no_cont_idxs\nlist\nNone\nlist of indices for observed continuous variables. All features not in s_cat_idxs, s_cont_idxs, o_cat_idxs are considered observed continuous variables.\n\n\npatch_len\nint\nNone\nNumber of time steps in each patch.\n\n\npatch_stride\nint\nNone\nStride of the patch.\n\n\nfusion_layers\nlist\n128\nlist of layer dimensions for the fusion MLP\n\n\nfusion_act\nstr\nrelu\nactivation function for the fusion MLP\n\n\nfusion_dropout\nfloat\n0.0\ndropout probability for the fusion MLP\n\n\nfusion_use_bn\nbool\nTrue\nboolean indicating whether to use batch normalization in the fusion MLP\n\n\ncustom_head\nNoneType\nNone\ncustom head to replace the default head\n\n\nkwargs\n\n\n\n\n\n\n\nfrom tsai.models.InceptionTimePlus import InceptionTimePlus\n\n\nbs = 8\nc_in = 6\nc_out = 3\nseq_len = 97\nd = None\n\ns_cat_idxs=2\ns_cont_idxs=4\no_cat_idxs=[0, 3]\no_cont_idxs=None\ns_cat_embeddings = 5\ns_cat_embedding_dims = None\no_cat_embeddings = [7, 3]\no_cat_embedding_dims = [3, None]\n\nfusion_layers = 128\n\nt0 = torch.randint(0, 7, (bs, 1, seq_len)) # cat\nt1 = torch.randn(bs, 1, seq_len)\nt2 = torch.randint(0, 5, (bs, 1, seq_len)) # cat\nt3 = torch.randint(0, 3, (bs, 1, seq_len)) # cat\nt4 = torch.randn(bs, 1, seq_len)\nt5 = torch.randn(bs, 1, seq_len)\n\nt = torch.cat([t0, t1, t2, t3, t4, t5], 1).float().to(default_device())\n\npatch_lens = [None, 5, 5, 5, 5]\npatch_strides = [None, None, 1, 3, 5]\nfor patch_len, patch_stride in zip(patch_lens, patch_strides):\n for arch in [\"InceptionTimePlus\", InceptionTimePlus, \"TSiTPlus\"]:\n print(f\"arch: {arch}, patch_len: {patch_len}, patch_stride: {patch_stride}\")\n\n model = MultInputWrapper(\n arch=arch,\n c_in=c_in,\n c_out=c_out,\n seq_len=seq_len,\n d=d,\n s_cat_idxs=s_cat_idxs, s_cat_embeddings=s_cat_embeddings, s_cat_embedding_dims=s_cat_embedding_dims,\n s_cont_idxs=s_cont_idxs,\n o_cat_idxs=o_cat_idxs, o_cat_embeddings=o_cat_embeddings, o_cat_embedding_dims=o_cat_embedding_dims,\n o_cont_idxs=o_cont_idxs,\n patch_len=patch_len,\n patch_stride=patch_stride,\n fusion_layers=fusion_layers,\n ).to(default_device())\n\n test_eq(model(t).shape, (bs, c_out))\n\narch: InceptionTimePlus, patch_len: None, patch_stride: None\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: None, patch_stride: None\narch: TSiTPlus, patch_len: None, patch_stride: None\narch: InceptionTimePlus, patch_len: 5, patch_stride: None\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: None\narch: TSiTPlus, patch_len: 5, patch_stride: None\narch: InceptionTimePlus, patch_len: 5, patch_stride: 1\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 1\narch: TSiTPlus, patch_len: 5, patch_stride: 1\narch: InceptionTimePlus, patch_len: 5, patch_stride: 3\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 3\narch: TSiTPlus, patch_len: 5, patch_stride: 3\narch: InceptionTimePlus, patch_len: 5, patch_stride: 5\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 5\narch: TSiTPlus, patch_len: 5, patch_stride: 5\n\n\n\nbs = 8\nc_in = 6\nc_out = 3\nseq_len = 97\nd = None\n\ns_cat_idxs=None\ns_cont_idxs=4\no_cat_idxs=[0, 3]\no_cont_idxs=None\ns_cat_embeddings = None\ns_cat_embedding_dims = None\no_cat_embeddings = [7, 3]\no_cat_embedding_dims = [3, None]\n\nfusion_layers = 128\n\nt0 = torch.randint(0, 7, (bs, 1, seq_len)) # cat\nt1 = torch.randn(bs, 1, seq_len)\nt2 = torch.randint(0, 5, (bs, 1, seq_len)) # cat\nt3 = torch.randint(0, 3, (bs, 1, seq_len)) # cat\nt4 = torch.randn(bs, 1, seq_len)\nt5 = torch.randn(bs, 1, seq_len)\n\nt = torch.cat([t0, t1, t2, t3, t4, t5], 1).float().to(default_device())\n\npatch_lens = [None, 5, 5, 5, 5]\npatch_strides = [None, None, 1, 3, 5]\nfor patch_len, patch_stride in zip(patch_lens, patch_strides):\n for arch in [\"InceptionTimePlus\", InceptionTimePlus, \"TSiTPlus\"]:\n print(f\"arch: {arch}, patch_len: {patch_len}, patch_stride: {patch_stride}\")\n\n model = MultInputWrapper(\n arch=arch,\n c_in=c_in,\n c_out=c_out,\n seq_len=seq_len,\n d=d,\n s_cat_idxs=s_cat_idxs, s_cat_embeddings=s_cat_embeddings, s_cat_embedding_dims=s_cat_embedding_dims,\n s_cont_idxs=s_cont_idxs,\n o_cat_idxs=o_cat_idxs, o_cat_embeddings=o_cat_embeddings, o_cat_embedding_dims=o_cat_embedding_dims,\n o_cont_idxs=o_cont_idxs,\n patch_len=patch_len,\n patch_stride=patch_stride,\n fusion_layers=fusion_layers,\n ).to(default_device())\n\n test_eq(model(t).shape, (bs, c_out))\n\narch: InceptionTimePlus, patch_len: None, patch_stride: None\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: None, patch_stride: None\narch: TSiTPlus, patch_len: None, patch_stride: None\narch: InceptionTimePlus, patch_len: 5, patch_stride: None\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: None\narch: TSiTPlus, patch_len: 5, patch_stride: None\narch: InceptionTimePlus, patch_len: 5, patch_stride: 1\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 1\narch: TSiTPlus, patch_len: 5, patch_stride: 1\narch: InceptionTimePlus, patch_len: 5, patch_stride: 3\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 3\narch: TSiTPlus, patch_len: 5, patch_stride: 3\narch: InceptionTimePlus, patch_len: 5, patch_stride: 5\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 5\narch: TSiTPlus, patch_len: 5, patch_stride: 5\n\n\n\nbs = 8\nc_in = 6\nc_out = 3\nseq_len = 97\nd = None\n\ns_cat_idxs=2\ns_cont_idxs=4\no_cat_idxs=None\no_cont_idxs=None\ns_cat_embeddings = 5\ns_cat_embedding_dims = None\no_cat_embeddings = None\no_cat_embedding_dims = None\n\nfusion_layers = 128\n\nt0 = torch.randint(0, 7, (bs, 1, seq_len)) # cat\nt1 = torch.randn(bs, 1, seq_len)\nt2 = torch.randint(0, 5, (bs, 1, seq_len)) # cat\nt3 = torch.randint(0, 3, (bs, 1, seq_len)) # cat\nt4 = torch.randn(bs, 1, seq_len)\nt5 = torch.randn(bs, 1, seq_len)\n\nt = torch.cat([t0, t1, t2, t3, t4, t5], 1).float().to(default_device())\n\npatch_lens = [None, 5, 5, 5, 5]\npatch_strides = [None, None, 1, 3, 5]\nfor patch_len, patch_stride in zip(patch_lens, patch_strides):\n for arch in [\"InceptionTimePlus\", InceptionTimePlus, \"TSiTPlus\"]:\n print(f\"arch: {arch}, patch_len: {patch_len}, patch_stride: {patch_stride}\")\n\n model = MultInputWrapper(\n arch=arch,\n c_in=c_in,\n c_out=c_out,\n seq_len=seq_len,\n d=d,\n s_cat_idxs=s_cat_idxs, s_cat_embeddings=s_cat_embeddings, s_cat_embedding_dims=s_cat_embedding_dims,\n s_cont_idxs=s_cont_idxs,\n o_cat_idxs=o_cat_idxs, o_cat_embeddings=o_cat_embeddings, o_cat_embedding_dims=o_cat_embedding_dims,\n o_cont_idxs=o_cont_idxs,\n patch_len=patch_len,\n patch_stride=patch_stride,\n fusion_layers=fusion_layers,\n ).to(default_device())\n\n test_eq(model(t).shape, (bs, c_out))\n\narch: InceptionTimePlus, patch_len: None, patch_stride: None\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: None, patch_stride: None\narch: TSiTPlus, patch_len: None, patch_stride: None\narch: InceptionTimePlus, patch_len: 5, patch_stride: None\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: None\narch: TSiTPlus, patch_len: 5, patch_stride: None\narch: InceptionTimePlus, patch_len: 5, patch_stride: 1\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 1\narch: TSiTPlus, patch_len: 5, patch_stride: 1\narch: InceptionTimePlus, patch_len: 5, patch_stride: 3\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 3\narch: TSiTPlus, patch_len: 5, patch_stride: 3\narch: InceptionTimePlus, patch_len: 5, patch_stride: 5\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 5\narch: TSiTPlus, patch_len: 5, patch_stride: 5\n\n\n\nbs = 8\nc_in = 6\nc_out = 3\nseq_len = 97\nd = None\n\ns_cat_idxs=None\ns_cont_idxs=None\no_cat_idxs=None\no_cont_idxs=None\ns_cat_embeddings = None\ns_cat_embedding_dims = None\no_cat_embeddings = None\no_cat_embedding_dims = None\n\nfusion_layers = 128\n\nt0 = torch.randint(0, 7, (bs, 1, seq_len)) # cat\nt1 = torch.randn(bs, 1, seq_len)\nt2 = torch.randint(0, 5, (bs, 1, seq_len)) # cat\nt3 = torch.randint(0, 3, (bs, 1, seq_len)) # cat\nt4 = torch.randn(bs, 1, seq_len)\nt5 = torch.randn(bs, 1, seq_len)\n\nt = torch.cat([t0, t1, t2, t3, t4, t5], 1).float().to(default_device())\n\npatch_lens = [None, 5, 5, 5, 5]\npatch_strides = [None, None, 1, 3, 5]\nfor patch_len, patch_stride in zip(patch_lens, patch_strides):\n for arch in [\"InceptionTimePlus\", InceptionTimePlus, \"TSiTPlus\"]:\n print(f\"arch: {arch}, patch_len: {patch_len}, patch_stride: {patch_stride}\")\n\n model = MultInputWrapper(\n arch=arch,\n c_in=c_in,\n c_out=c_out,\n seq_len=seq_len,\n d=d,\n s_cat_idxs=s_cat_idxs, s_cat_embeddings=s_cat_embeddings, s_cat_embedding_dims=s_cat_embedding_dims,\n s_cont_idxs=s_cont_idxs,\n o_cat_idxs=o_cat_idxs, o_cat_embeddings=o_cat_embeddings, o_cat_embedding_dims=o_cat_embedding_dims,\n o_cont_idxs=o_cont_idxs,\n patch_len=patch_len,\n patch_stride=patch_stride,\n fusion_layers=fusion_layers,\n ).to(default_device())\n\n test_eq(model(t).shape, (bs, c_out))\n\narch: InceptionTimePlus, patch_len: None, patch_stride: None\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: None, patch_stride: None\narch: TSiTPlus, patch_len: None, patch_stride: None\narch: InceptionTimePlus, patch_len: 5, patch_stride: None\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: None\narch: TSiTPlus, patch_len: 5, patch_stride: None\narch: InceptionTimePlus, patch_len: 5, patch_stride: 1\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 1\narch: TSiTPlus, patch_len: 5, patch_stride: 1\narch: InceptionTimePlus, patch_len: 5, patch_stride: 3\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 3\narch: TSiTPlus, patch_len: 5, patch_stride: 3\narch: InceptionTimePlus, patch_len: 5, patch_stride: 5\narch: <class 'tsai.models.InceptionTimePlus.InceptionTimePlus'>, patch_len: 5, patch_stride: 5\narch: TSiTPlus, patch_len: 5, patch_stride: 5", + "crumbs": [ + "Models", + "Miscellaneous", + "Multimodal" + ] + }, + { + "objectID": "models.inceptiontime.html", + "href": "models.inceptiontime.html", + "title": "InceptionTime", + "section": "", + "text": "An ensemble of deep Convolutional Neural Network (CNN) models, inspired by the Inception-v4 architecture\n\nThis is an unofficial PyTorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on:\nFawaz, H. I., Lucas, B., Forestier, G., Pelletier, C., Schmidt, D. F., Weber, J. & Petitjean, F. (2019). InceptionTime: Finding AlexNet for Time Series Classification. arXiv preprint arXiv:1909.04939.\nOfficial InceptionTime tensorflow implementation: https://github.com/hfawaz/InceptionTime\n\nsource\n\nInceptionTime\n\n InceptionTime (c_in, c_out, seq_len=None, nf=32, nb_filters=None, ks=40,\n bottleneck=True)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nInceptionBlock\n\n InceptionBlock (ni, nf=32, residual=True, depth=6, ks=40,\n bottleneck=True)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nInceptionModule\n\n InceptionModule (ni, nf, ks=40, bottleneck=True)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nfrom tsai.models.utils import count_parameters\n\n\nbs = 16\nvars = 1\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, vars, seq_len)\ntest_eq(InceptionTime(vars,c_out)(xb).shape, [bs, c_out])\ntest_eq(InceptionTime(vars,c_out, bottleneck=False)(xb).shape, [bs, c_out])\ntest_eq(InceptionTime(vars,c_out, residual=False)(xb).shape, [bs, c_out])\ntest_eq(count_parameters(InceptionTime(3, 2)), 455490)\n\n\nInceptionTime(3,2)\n\nInceptionTime(\n (inceptionblock): InceptionBlock(\n (inception): ModuleList(\n (0): InceptionModule(\n (bottleneck): Conv1d(3, 32, kernel_size=(1,), stride=(1,), bias=False)\n (convs): ModuleList(\n (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n )\n (maxconvpool): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): Conv1d(3, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (concat): Concat(dim=1)\n (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (act): ReLU()\n )\n (1): InceptionModule(\n (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n (convs): ModuleList(\n (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n )\n (maxconvpool): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (concat): Concat(dim=1)\n (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (act): ReLU()\n )\n (2): InceptionModule(\n (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n (convs): ModuleList(\n (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n )\n (maxconvpool): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (concat): Concat(dim=1)\n (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (act): ReLU()\n )\n (3): InceptionModule(\n (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n (convs): ModuleList(\n (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n )\n (maxconvpool): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (concat): Concat(dim=1)\n (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (act): ReLU()\n )\n (4): InceptionModule(\n (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n (convs): ModuleList(\n (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n )\n (maxconvpool): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (concat): Concat(dim=1)\n (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (act): ReLU()\n )\n (5): InceptionModule(\n (bottleneck): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n (convs): ModuleList(\n (0): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), bias=False)\n (1): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), bias=False)\n (2): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), bias=False)\n )\n (maxconvpool): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): Conv1d(128, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (concat): Concat(dim=1)\n (bn): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (act): ReLU()\n )\n )\n (shortcut): ModuleList(\n (0): ConvBlock(\n (0): Conv1d(3, 128, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (add): Add\n (act): ReLU()\n )\n (gap): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Flatten(full=False)\n )\n (fc): Linear(in_features=128, out_features=2, bias=True)\n)", + "crumbs": [ + "Models", + "CNNs", + "InceptionTime" + ] + }, + { + "objectID": "models.patchtst.html", + "href": "models.patchtst.html", + "title": "PatchTST", + "section": "", + "text": "This is an unofficial PyTorch implementation of PatchTST created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on:\nIn this notebook, we are going to use a new state-of-the-art model called PatchTST (Nie et al, 2022) to create a long-term time series forecast.\nHere are some paper details:\n\nNie, Y., Nguyen, N. H., Sinthong, P., & Kalagnanam, J. (2022). A Time Series is Worth 64 Words: Long-term Forecasting with Transformers. arXiv preprint arXiv:2211.14730.\nOfficial implementation:: https://github.com/yuqinie98/PatchTST\n\n@article{Yuqietal-2022-PatchTST,\n title={A Time Series is Worth 64 Words: Long-term Forecasting with Transformers},\n author={Yuqi Nie and \n Nam H. Nguyen and \n Phanwadee Sinthong and \n Jayant Kalagnanam},\n journal={arXiv preprint arXiv:2211.14730},\n year={2022}\n}\nPatchTST has shown some impressive results across some of the most widely used long-term datasets for benchmarking:\n\n\n\nimage.png\n\n\n\nsource\n\nSeriesDecomposition\n\n SeriesDecomposition (kernel_size:int)\n\nSeries decomposition block\n\n\n\n\nType\nDetails\n\n\n\n\nkernel_size\nint\nthe size of the window\n\n\n\n\nsource\n\n\nMovingAverage\n\n MovingAverage (kernel_size:int)\n\nMoving average block to highlight the trend of time series\n\n\n\n\nType\nDetails\n\n\n\n\nkernel_size\nint\nthe size of the window\n\n\n\n\nsource\n\n\nFlatten_Head\n\n Flatten_Head (individual, n_vars, nf, pred_dim)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nPatchTST\n\n PatchTST (c_in, c_out, seq_len, pred_dim=None, n_layers=2, n_heads=8,\n d_model=512, d_ff=2048, dropout=0.05, attn_dropout=0.0,\n patch_len=16, stride=8, padding_patch=True, revin=True,\n affine=False, individual=False, subtract_last=False,\n decomposition=False, kernel_size=25, activation='gelu',\n norm='BatchNorm', pre_norm=False, res_attention=True,\n store_attn=False)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n\nivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\nnumber of input channels\n\n\nc_out\n\n\nused for compatibility\n\n\nseq_len\n\n\ninput sequence length\n\n\npred_dim\nNoneType\nNone\nprediction sequence length\n\n\nn_layers\nint\n2\nnumber of encoder layers\n\n\nn_heads\nint\n8\nnumber of heads\n\n\nd_model\nint\n512\ndimension of model\n\n\nd_ff\nint\n2048\ndimension of fully connected network (fcn)\n\n\ndropout\nfloat\n0.05\ndropout applied to all linear layers in the encoder\n\n\nattn_dropout\nfloat\n0.0\ndropout applied to the attention scores\n\n\npatch_len\nint\n16\npatch_len\n\n\nstride\nint\n8\nstride\n\n\npadding_patch\nbool\nTrue\nflag to indicate if padded is added if necessary\n\n\nrevin\nbool\nTrue\nRevIN\n\n\naffine\nbool\nFalse\nRevIN affine\n\n\nindividual\nbool\nFalse\nindividual head\n\n\nsubtract_last\nbool\nFalse\nsubtract_last\n\n\ndecomposition\nbool\nFalse\napply decomposition\n\n\nkernel_size\nint\n25\ndecomposition kernel size\n\n\nactivation\nstr\ngelu\nactivation function of intermediate layer, relu or gelu.\n\n\nnorm\nstr\nBatchNorm\ntype of normalization layer used in the encoder\n\n\npre_norm\nbool\nFalse\nflag to indicate if normalization is applied as the first step in the sublayers\n\n\nres_attention\nbool\nTrue\nflag to indicate if Residual MultiheadAttention should be used\n\n\nstore_attn\nbool\nFalse\ncan be used to visualize attention weights\n\n\n\n\nfrom fastcore.test import test_eq\nfrom tsai.models.utils import count_parameters\n\nbs = 32\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 1\nseq_len = 60\npred_dim = 20\n\nxb = torch.randn(bs, c_in, seq_len)\n\narch_config=dict(\n n_layers=3, # number of encoder layers\n n_heads=16, # number of heads\n d_model=128, # dimension of model\n d_ff=256, # dimension of fully connected network (fcn)\n attn_dropout=0.,\n dropout=0.2, # dropout applied to all linear layers in the encoder\n patch_len=16, # patch_len\n stride=8, # stride\n )\n\nmodel = PatchTST(c_in, c_out, seq_len, pred_dim, **arch_config)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_in, pred_dim])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 418470\n\n\n\n\nTest conversion to Torchscript\n\nimport gc\nimport os\nimport torch\nimport torch.nn as nn\nfrom fastcore.test import test_eq, test_close\n\n\nbs = 1\nnew_bs = 8\nc_in = 3\nc_out = 1\nseq_len = 96\npred_dim = 20\n\n# module\nmodel = PatchTST(c_in, c_out, seq_len, pred_dim)\nmodel = model.eval()\n\n# input data\ninp = torch.rand(bs, c_in, seq_len)\nnew_inp = torch.rand(new_bs, c_in, seq_len)\n\n# original\ntry:\n output = model(inp)\n new_output = model(new_inp)\n print(f'{\"original\":10}: ok')\nexcept:\n print(f'{\"original\":10}: failed')\n\n# tracing\ntry:\n traced_model = torch.jit.trace(model, inp)\n file_path = f\"_test_traced_model.pt\"\n torch.jit.save(traced_model, file_path)\n traced_model = torch.jit.load(file_path)\n test_eq(output, traced_model(inp))\n test_eq(new_output, traced_model(new_inp))\n os.remove(file_path)\n del traced_model\n gc.collect()\n print(f'{\"tracing\":10}: ok')\nexcept:\n print(f'{\"tracing\":10}: failed')\n\n# scripting\ntry:\n scripted_model = torch.jit.script(model)\n file_path = f\"_test_scripted_model.pt\"\n torch.jit.save(scripted_model, file_path)\n scripted_model = torch.jit.load(file_path)\n test_eq(output, scripted_model(inp))\n test_eq(new_output, scripted_model(new_inp))\n os.remove(file_path)\n del scripted_model\n gc.collect()\n print(f'{\"scripting\":10}: ok')\nexcept:\n print(f'{\"scripting\":10}: failed')\n\noriginal : ok\ntracing : ok\nscripting : failed\n\n\n\n\nTest conversion to onnx\n\ntry:\n import onnx\n import onnxruntime as ort\n \n try:\n file_path = \"_model_cpu.onnx\"\n torch.onnx.export(model.cpu(), # model being run\n inp, # model input (or a tuple for multiple inputs)\n file_path, # where to save the model (can be a file or file-like object)\n input_names = ['input'], # the model's input names\n output_names = ['output'], # the model's output names\n dynamic_axes={\n 'input' : {0 : 'batch_size'}, \n 'output' : {0 : 'batch_size'}} # variable length axes\n )\n\n\n # Load the model and check it's ok\n onnx_model = onnx.load(file_path)\n onnx.checker.check_model(onnx_model)\n del onnx_model\n gc.collect()\n\n # New session\n ort_sess = ort.InferenceSession(file_path)\n output_onnx = ort_sess.run(None, {'input': inp.numpy()})[0]\n test_close(output.detach().numpy(), output_onnx)\n new_output_onnx = ort_sess.run(None, {'input': new_inp.numpy()})[0]\n test_close(new_output.detach().numpy(), new_output_onnx)\n os.remove(file_path)\n print(f'{\"onnx\":10}: ok')\n except:\n print(f'{\"onnx\":10}: failed')\n\nexcept ImportError:\n print('onnx and onnxruntime are not installed. Please install them to run this test')\n\nonnx and onnxruntime are not installed. Please install them to run this test", + "crumbs": [ + "Models", + "Transformers", + "PatchTST" + ] + }, + { + "objectID": "models.rescnn.html", + "href": "models.rescnn.html", + "title": "ResCNN", + "section": "", + "text": "This is an unofficial PyTorch implementation by Ignacio Oguiza - oguiza@timeseriesAI.co\n\n\nfrom tsai.models.utils import *\n\n\nsource\n\nResCNN\n\n ResCNN (c_in, c_out, coord=False, separable=False, zero_norm=False)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nxb = torch.rand(16, 3, 10)\ntest_eq(ResCNN(3,2,coord=True, separable=True)(xb).shape, [xb.shape[0], 2])\ntest_eq(count_parameters(ResCNN(3,2)), 257283)\n\n\nResCNN(3,2,coord=True, separable=True)\n\nResCNN(\n (block1): _ResCNNBlock(\n (convblock1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), groups=4, bias=False)\n (pointwise_conv): Conv1d(4, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (convblock2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(65, 65, kernel_size=(5,), stride=(1,), padding=(2,), groups=65, bias=False)\n (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (convblock3): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(65, 65, kernel_size=(3,), stride=(1,), padding=(1,), groups=65, bias=False)\n (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (shortcut): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(4, 64, kernel_size=(1,), stride=(1,), bias=False)\n (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (add): Add\n (act): ReLU()\n )\n (block2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(65, 65, kernel_size=(3,), stride=(1,), padding=(1,), groups=65, bias=False)\n (pointwise_conv): Conv1d(65, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): LeakyReLU(negative_slope=0.2)\n )\n (block3): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(129, 129, kernel_size=(3,), stride=(1,), padding=(1,), groups=129, bias=False)\n (pointwise_conv): Conv1d(129, 256, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): PReLU(num_parameters=1)\n )\n (block4): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(257, 257, kernel_size=(3,), stride=(1,), padding=(1,), groups=257, bias=False)\n (pointwise_conv): Conv1d(257, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ELU(alpha=0.3)\n )\n (gap): AdaptiveAvgPool1d(output_size=1)\n (squeeze): Squeeze(dim=-1)\n (lin): Linear(in_features=128, out_features=2, bias=True)\n)\n\n\n\ncheck_weight(ResCNN(3,2, zero_norm=True), is_bn)\n\n(array([1., 1., 0., 1., 1., 1., 1.], dtype=float32),\n array([0., 0., 0., 0., 0., 0., 0.], dtype=float32))", + "crumbs": [ + "Models", + "CNNs", + "ResCNN" + ] + }, + { + "objectID": "models.rnnattention.html", + "href": "models.rnnattention.html", + "title": "RNNAttention", + "section": "", + "text": "This is an custom PyTorch implementation by @yangtzech, based on TST implementation of Ignacio Oguiza.", + "crumbs": [ + "Models", + "RNNs", + "RNNAttention" + ] + }, + { + "objectID": "models.rnnattention.html#arguments", + "href": "models.rnnattention.html#arguments", + "title": "RNNAttention", + "section": "Arguments", + "text": "Arguments\nUsual values are the ones that appear in the “Attention is all you need” and “A Transformer-based Framework for Multivariate Time Series Representation Learning” papers. And some parameters are necessary for the RNN part.\nThe default values are the ones selected as a default configuration in the latter.\n\nc_in: the number of features (aka variables, dimensions, channels) in the time series dataset. dls.var\nc_out: the number of target classes. dls.c\nseq_len: number of time steps in the time series. dls.len\nhidden_size: the number of features in the hidden state in the RNN model. Default: 128.\nrnn_layers: the number of recurrent layers of the RNN model. Default: 1.\nbias: If False, then the layer does not use bias weights b_ih and b_hh. Default: True\nrnn_dropout: If non-zero, introduces a Dropout layer on the outputs of each RNN layer except the last layer, with dropout probability equal to :attr:rnn_dropout. Default: 0\nbidirectional: If True, becomes a bidirectional RNN. Default: False\nn_heads: parallel attention heads. Usual values: 8-16. Default: 16.\nd_k: size of the learned linear projection of queries and keys in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.\nd_v: size of the learned linear projection of values in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.\nd_ff: the dimension of the feedforward network model. Usual values: 256-4096. Default: 256.\nencoder_dropout: amount of residual dropout applied in the encoder. Usual values: 0.-0.3. Default: 0.1.\nact: the activation function of intermediate layer, relu or gelu. Default: ‘gelu’.\nencoder_layers: the number of sub-encoder-layers in the encoder. Usual values: 2-8. Default: 3.\nfc_dropout: dropout applied to the final fully connected layer. Usual values: 0.-0.8. Default: 0.\ny_range: range of possible y values (used in regression tasks). Default: None\nkwargs: nn.Conv1d kwargs. If not {}, a nn.Conv1d with those kwargs will be applied to original time series.", + "crumbs": [ + "Models", + "RNNs", + "RNNAttention" + ] + }, + { + "objectID": "models.rnnattention.html#imports", + "href": "models.rnnattention.html#imports", + "title": "RNNAttention", + "section": "Imports", + "text": "Imports", + "crumbs": [ + "Models", + "RNNs", + "RNNAttention" + ] + }, + { + "objectID": "models.rnnattention.html#rnnattention", + "href": "models.rnnattention.html#rnnattention", + "title": "RNNAttention", + "section": "RNNAttention", + "text": "RNNAttention\n\nt = torch.rand(16, 50, 128)\noutput, attn = _MultiHeadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)(t, t, t)\noutput.shape, attn.shape\n\n(torch.Size([16, 50, 128]), torch.Size([16, 3, 50, 50]))\n\n\n\nt = torch.rand(16, 50, 128)\noutput = _TSTEncoderLayer(q_len=50, d_model=128, n_heads=3, d_k=None, d_v=None, d_ff=512, dropout=0.1, activation='gelu')(t)\noutput.shape\n\ntorch.Size([16, 50, 128])\n\n\n\nsource\n\nGRUAttention\n\n GRUAttention (c_in:int, c_out:int, seq_len:int, hidden_size=128,\n rnn_layers=1, bias=True, rnn_dropout=0,\n bidirectional=False, encoder_layers:int=3, n_heads:int=16,\n d_k:Optional[int]=None, d_v:Optional[int]=None,\n d_ff:int=256, encoder_dropout:float=0.1, act:str='gelu',\n fc_dropout:float=0.0, y_range:Optional[tuple]=None,\n verbose:bool=False, custom_head=None)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nLSTMAttention\n\n LSTMAttention (c_in:int, c_out:int, seq_len:int, hidden_size=128,\n rnn_layers=1, bias=True, rnn_dropout=0,\n bidirectional=False, encoder_layers:int=3, n_heads:int=16,\n d_k:Optional[int]=None, d_v:Optional[int]=None,\n d_ff:int=256, encoder_dropout:float=0.1, act:str='gelu',\n fc_dropout:float=0.0, y_range:Optional[tuple]=None,\n verbose:bool=False, custom_head=None)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nRNNAttention\n\n RNNAttention (c_in:int, c_out:int, seq_len:int, hidden_size=128,\n rnn_layers=1, bias=True, rnn_dropout=0,\n bidirectional=False, encoder_layers:int=3, n_heads:int=16,\n d_k:Optional[int]=None, d_v:Optional[int]=None,\n d_ff:int=256, encoder_dropout:float=0.1, act:str='gelu',\n fc_dropout:float=0.0, y_range:Optional[tuple]=None,\n verbose:bool=False, custom_head=None)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 32\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 500\n\nxb = torch.randn(bs, c_in, seq_len)\n\n# standardize by channel by_var based on the training set\nxb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)\n\n# Settings\nhidden_size = 128\nrnn_layers=1\nbias=True\nrnn_dropout=0\nbidirectional=False\nencoder_layers=3\nn_heads = 16\nd_k = d_v = None # if None --> d_model // n_heads\nd_ff = 256\nencoder_dropout = 0.1\nact = \"gelu\"\nfc_dropout = 0.1\nkwargs = {}\n\nmodel = RNNAttention(c_in, c_out, seq_len, hidden_size=hidden_size, rnn_layers=rnn_layers, bias=bias, rnn_dropout=rnn_dropout, bidirectional=bidirectional,\n encoder_layers=encoder_layers, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, encoder_dropout=encoder_dropout, act=act, \n fc_dropout=fc_dropout, **kwargs)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 541698\n\n\n\nbs = 32\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 60\n\nxb = torch.randn(bs, c_in, seq_len)\n\n# standardize by channel by_var based on the training set\nxb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)\n\n# Settings\nhidden_size = 128\nrnn_layers=1\nbias=True\nrnn_dropout=0\nbidirectional=False\nencoder_layers=3\nn_heads = 16\nd_k = d_v = None # if None --> d_model // n_heads\nd_ff = 256\nencoder_dropout = 0.1\nact = \"gelu\"\nfc_dropout = 0.1\nkwargs = {}\n# kwargs = dict(kernel_size=5, padding=2)\n\nmodel = RNNAttention(c_in, c_out, seq_len, hidden_size=hidden_size, rnn_layers=rnn_layers, bias=bias, rnn_dropout=rnn_dropout, bidirectional=bidirectional,\n encoder_layers=encoder_layers, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, encoder_dropout=encoder_dropout, act=act, \n fc_dropout=fc_dropout, **kwargs)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 429058", + "crumbs": [ + "Models", + "RNNs", + "RNNAttention" + ] + }, + { + "objectID": "models.layers.html", + "href": "models.layers.html", + "title": "Layers", + "section": "", + "text": "Helper functions used to build PyTorch timeseries models.\n\n\nsource\n\ntest_module_to_torchscript\n\n test_module_to_torchscript (m:torch.nn.modules.module.Module,\n inputs:torch.Tensor, trace:bool=True,\n script:bool=True, serialize:bool=True,\n verbose:bool=True)\n\nTests if a PyTorch module can be correctly traced or scripted and serialized\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nm\nModule\n\nThe PyTorch module to be tested.\n\n\ninputs\nTensor\n\nA tensor or tuple of tensors representing the inputs to the model.\n\n\ntrace\nbool\nTrue\nIf True, attempts to trace the model. Defaults to True.\n\n\nscript\nbool\nTrue\nIf True, attempts to script the model. Defaults to True.\n\n\nserialize\nbool\nTrue\nIf True, saves and loads the traced/scripted module to ensure it can be serialized. Defaults to True.\n\n\nverbose\nbool\nTrue\nIf True, prints detailed information about the tracing and scripting process. Defaults to True.\n\n\n\n\nm = nn.Linear(10, 2)\ninp = torch.randn(3, 10)\ntest_module_to_torchscript(m, inp, trace=True, script=True, serialize=True, verbose=True)\n\noutput.shape: torch.Size([3, 2])\nTracing...\n...Linear has been successfully traced 😃\n\n\n\nTrue\n\n\n\nsource\n\n\ninit_lin_zero\n\n init_lin_zero (m)\n\n\nsource\n\n\nSwishBeta\n\n SwishBeta ()\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nSmeLU\n\n SmeLU (beta:float=2.0)\n\nSmooth ReLU activation function based on https://arxiv.org/pdf/2202.06499.pdf\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nbeta\nfloat\n2.0\nBeta value\n\n\nReturns\nNone\n\n\n\n\n\n\nsource\n\n\nChomp1d\n\n Chomp1d (chomp_size)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nSameConv1d\n\n SameConv1d (ni, nf, ks=3, stride=1, dilation=1, **kwargs)\n\nConv1d with padding=‘same’\n\nsource\n\n\nPad1d\n\n Pad1d (padding, value=0.0)\n\nPads the input tensor boundaries with a constant value.\nFor N-dimensional padding, use :func:torch.nn.functional.pad().\nArgs: padding (int, tuple): the size of the padding. If is int, uses the same padding in both boundaries. If a 2-tuple, uses (:math:\\text{padding\\_left}, :math:\\text{padding\\_right})\nShape: - Input: :math:(C, W_{in}) or :math:(N, C, W_{in}). - Output: :math:(C, W_{out}) or :math:(N, C, W_{out}), where\n :math:`W_{out} = W_{in} + \\text{padding\\_left} + \\text{padding\\_right}`\nExamples::\n>>> # xdoctest: +IGNORE_WANT(\"non-deterministic\")\n>>> m = nn.ConstantPad1d(2, 3.5)\n>>> input = torch.randn(1, 2, 4)\n>>> input\ntensor([[[-1.0491, -0.7152, -0.0749, 0.8530],\n [-1.3287, 1.8966, 0.1466, -0.2771]]])\n>>> m(input)\ntensor([[[ 3.5000, 3.5000, -1.0491, -0.7152, -0.0749, 0.8530, 3.5000,\n 3.5000],\n [ 3.5000, 3.5000, -1.3287, 1.8966, 0.1466, -0.2771, 3.5000,\n 3.5000]]])\n>>> m = nn.ConstantPad1d(2, 3.5)\n>>> input = torch.randn(1, 2, 3)\n>>> input\ntensor([[[ 1.6616, 1.4523, -1.1255],\n [-3.6372, 0.1182, -1.8652]]])\n>>> m(input)\ntensor([[[ 3.5000, 3.5000, 1.6616, 1.4523, -1.1255, 3.5000, 3.5000],\n [ 3.5000, 3.5000, -3.6372, 0.1182, -1.8652, 3.5000, 3.5000]]])\n>>> # using different paddings for different sides\n>>> m = nn.ConstantPad1d((3, 1), 3.5)\n>>> m(input)\ntensor([[[ 3.5000, 3.5000, 3.5000, 1.6616, 1.4523, -1.1255, 3.5000],\n [ 3.5000, 3.5000, 3.5000, -3.6372, 0.1182, -1.8652, 3.5000]]])\n\nsource\n\n\nsame_padding1d\n\n same_padding1d (seq_len, ks, stride=1, dilation=1)\n\nSame padding formula as used in Tensorflow\n\nsource\n\n\nConv2d\n\n Conv2d (ni, nf, kernel_size=None, ks=None, stride=1, padding='same',\n dilation=1, init='auto', bias_std=0.01, **kwargs)\n\nconv1d layer with padding=‘same’, ‘valid’, or any integer (defaults to ‘same’)\n\nsource\n\n\nConv2dSame\n\n Conv2dSame (ni, nf, ks=(3, 3), stride=(1, 1), dilation=(1, 1), **kwargs)\n\nConv2d with padding=‘same’\n\nsource\n\n\nPad2d\n\n Pad2d (padding, value=0.0)\n\nPads the input tensor boundaries with a constant value.\nFor N-dimensional padding, use :func:torch.nn.functional.pad().\nArgs: padding (int, tuple): the size of the padding. If is int, uses the same padding in all boundaries. If a 4-tuple, uses (:math:\\text{padding\\_left}, :math:\\text{padding\\_right}, :math:\\text{padding\\_top}, :math:\\text{padding\\_bottom})\nShape: - Input: :math:(N, C, H_{in}, W_{in}) or :math:(C, H_{in}, W_{in}). - Output: :math:(N, C, H_{out}, W_{out}) or :math:(C, H_{out}, W_{out}), where\n :math:`H_{out} = H_{in} + \\text{padding\\_top} + \\text{padding\\_bottom}`\n\n :math:`W_{out} = W_{in} + \\text{padding\\_left} + \\text{padding\\_right}`\nExamples::\n>>> # xdoctest: +IGNORE_WANT(\"non-deterministic\")\n>>> m = nn.ConstantPad2d(2, 3.5)\n>>> input = torch.randn(1, 2, 2)\n>>> input\ntensor([[[ 1.6585, 0.4320],\n [-0.8701, -0.4649]]])\n>>> m(input)\ntensor([[[ 3.5000, 3.5000, 3.5000, 3.5000, 3.5000, 3.5000],\n [ 3.5000, 3.5000, 3.5000, 3.5000, 3.5000, 3.5000],\n [ 3.5000, 3.5000, 1.6585, 0.4320, 3.5000, 3.5000],\n [ 3.5000, 3.5000, -0.8701, -0.4649, 3.5000, 3.5000],\n [ 3.5000, 3.5000, 3.5000, 3.5000, 3.5000, 3.5000],\n [ 3.5000, 3.5000, 3.5000, 3.5000, 3.5000, 3.5000]]])\n>>> # using different paddings for different sides\n>>> m = nn.ConstantPad2d((3, 0, 2, 1), 3.5)\n>>> m(input)\ntensor([[[ 3.5000, 3.5000, 3.5000, 3.5000, 3.5000],\n [ 3.5000, 3.5000, 3.5000, 3.5000, 3.5000],\n [ 3.5000, 3.5000, 3.5000, 1.6585, 0.4320],\n [ 3.5000, 3.5000, 3.5000, -0.8701, -0.4649],\n [ 3.5000, 3.5000, 3.5000, 3.5000, 3.5000]]])\n\nsource\n\n\nsame_padding2d\n\n same_padding2d (H, W, ks, stride=(1, 1), dilation=(1, 1))\n\nSame padding formula as used in Tensorflow\n\nbs = 2\nc_in = 3\nc_out = 5\nh = 16\nw = 20\nt = torch.rand(bs, c_in, h, w)\ntest_eq(Conv2dSame(c_in, c_out, ks=3, stride=1, dilation=1, bias=False)(t).shape, (bs, c_out, h, w))\ntest_eq(Conv2dSame(c_in, c_out, ks=(3, 1), stride=1, dilation=1, bias=False)(t).shape, (bs, c_out, h, w))\ntest_eq(Conv2dSame(c_in, c_out, ks=3, stride=(1, 1), dilation=(2, 2), bias=False)(t).shape, (bs, c_out, h, w))\ntest_eq(Conv2dSame(c_in, c_out, ks=3, stride=(2, 2), dilation=(1, 1), bias=False)(t).shape, (bs, c_out, h//2, w//2))\ntest_eq(Conv2dSame(c_in, c_out, ks=3, stride=(2, 2), dilation=(2, 2), bias=False)(t).shape, (bs, c_out, h//2, w//2))\ntest_eq(Conv2d(c_in, c_out, ks=3, padding='same', stride=1, dilation=1, bias=False)(t).shape, (bs, c_out, h, w))\n\n\nsource\n\n\nCausalConv1d\n\n CausalConv1d (ni, nf, ks, stride=1, dilation=1, groups=1, bias=True)\n\nApplies a 1D convolution over an input signal composed of several input planes.\nIn the simplest case, the output value of the layer with input size :math:(N, C_{\\text{in}}, L) and output :math:(N, C_{\\text{out}}, L_{\\text{out}}) can be precisely described as:\n.. math:: (N_i, C_{j}) = (C{j}) + {k = 0}^{C_{in} - 1} (C_{_j}, k) (N_i, k)\nwhere :math:\\star is the valid cross-correlation_ operator, :math:N is a batch size, :math:C denotes a number of channels, :math:L is a length of signal sequence.\nThis module supports :ref:TensorFloat32<tf32_on_ampere>.\nOn certain ROCm devices, when using float16 inputs this module will use :ref:different precision<fp16_on_mi200> for backward.\n\n:attr:stride controls the stride for the cross-correlation, a single number or a one-element tuple.\n:attr:padding controls the amount of padding applied to the input. It can be either a string {‘valid’, ‘same’} or a tuple of ints giving the amount of implicit padding applied on both sides.\n:attr:dilation controls the spacing between the kernel points; also known as the à trous algorithm. It is harder to describe, but this link_ has a nice visualization of what :attr:dilation does.\n:attr:groups controls the connections between inputs and outputs. :attr:in_channels and :attr:out_channels must both be divisible by :attr:groups. For example,\n\nAt groups=1, all inputs are convolved to all outputs.\nAt groups=2, the operation becomes equivalent to having two conv layers side by side, each seeing half the input channels and producing half the output channels, and both subsequently concatenated.\nAt groups= :attr:in_channels, each input channel is convolved with its own set of filters (of size :math:\\frac{\\text{out\\_channels}}{\\text{in\\_channels}}).\n\n\nNote: When groups == in_channels and out_channels == K * in_channels, where K is a positive integer, this operation is also known as a “depthwise convolution”.\nIn other words, for an input of size :math:`(N, C_{in}, L_{in})`,\na depthwise convolution with a depthwise multiplier `K` can be performed with the arguments\n:math:`(C_\\text{in}=C_\\text{in}, C_\\text{out}=C_\\text{in} \\times \\text{K}, ..., \\text{groups}=C_\\text{in})`.\nNote: In some circumstances when given tensors on a CUDA device and using CuDNN, this operator may select a nondeterministic algorithm to increase performance. If this is undesirable, you can try to make the operation deterministic (potentially at a performance cost) by setting torch.backends.cudnn.deterministic = True. See :doc:/notes/randomness for more information.\nNote: padding='valid' is the same as no padding. padding='same' pads the input so the output has the shape as the input. However, this mode doesn’t support any stride values other than 1.\nNote: This module supports complex data types i.e. complex32, complex64, complex128.\nArgs: in_channels (int): Number of channels in the input image out_channels (int): Number of channels produced by the convolution kernel_size (int or tuple): Size of the convolving kernel stride (int or tuple, optional): Stride of the convolution. Default: 1 padding (int, tuple or str, optional): Padding added to both sides of the input. Default: 0 padding_mode (str, optional): 'zeros', 'reflect', 'replicate' or 'circular'. Default: 'zeros' dilation (int or tuple, optional): Spacing between kernel elements. Default: 1 groups (int, optional): Number of blocked connections from input channels to output channels. Default: 1 bias (bool, optional): If True, adds a learnable bias to the output. Default: True\nShape: - Input: :math:(N, C_{in}, L_{in}) or :math:(C_{in}, L_{in}) - Output: :math:(N, C_{out}, L_{out}) or :math:(C_{out}, L_{out}), where\n .. math::\n L_{out} = \\left\\lfloor\\frac{L_{in} + 2 \\times \\text{padding} - \\text{dilation}\n \\times (\\text{kernel\\_size} - 1) - 1}{\\text{stride}} + 1\\right\\rfloor\nAttributes: weight (Tensor): the learnable weights of the module of shape :math:(\\text{out\\_channels}, \\frac{\\text{in\\_channels}}{\\text{groups}}, \\text{kernel\\_size}). The values of these weights are sampled from :math:\\mathcal{U}(-\\sqrt{k}, \\sqrt{k}) where :math:k = \\frac{groups}{C_\\text{in} * \\text{kernel\\_size}} bias (Tensor): the learnable bias of the module of shape (out_channels). If :attr:bias is True, then the values of these weights are sampled from :math:\\mathcal{U}(-\\sqrt{k}, \\sqrt{k}) where :math:k = \\frac{groups}{C_\\text{in} * \\text{kernel\\_size}}\nExamples::\n>>> m = nn.Conv1d(16, 33, 3, stride=2)\n>>> input = torch.randn(20, 16, 50)\n>>> output = m(input)\n.. _cross-correlation: https://en.wikipedia.org/wiki/Cross-correlation\n.. _link: https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md\n\nsource\n\n\nConv1d\n\n Conv1d (ni, nf, kernel_size=None, ks=None, stride=1, padding='same',\n dilation=1, init='auto', bias_std=0.01, **kwargs)\n\nconv1d layer with padding=‘same’, ‘causal’, ‘valid’, or any integer (defaults to ‘same’)\n\nbs = 2\nc_in = 3\nc_out = 5\nseq_len = 512\nt = torch.rand(bs, c_in, seq_len)\ndilation = 1\ntest_eq(CausalConv1d(c_in, c_out, ks=3, dilation=dilation)(t).shape, Conv1d(c_in, c_out, ks=3, padding=\"same\", dilation=dilation)(t).shape)\ndilation = 2\ntest_eq(CausalConv1d(c_in, c_out, ks=3, dilation=dilation)(t).shape, Conv1d(c_in, c_out, ks=3, padding=\"same\", dilation=dilation)(t).shape)\n\n\nbs = 2\nni = 3\nnf = 5\nseq_len = 6\nks = 3\nt = torch.rand(bs, c_in, seq_len)\ntest_eq(Conv1d(ni, nf, ks, padding=0)(t).shape, (bs, c_out, seq_len - (2 * (ks//2))))\ntest_eq(Conv1d(ni, nf, ks, padding='valid')(t).shape, (bs, c_out, seq_len - (2 * (ks//2))))\ntest_eq(Conv1d(ni, nf, ks, padding='same')(t).shape, (bs, c_out, seq_len))\ntest_eq(Conv1d(ni, nf, ks, padding='causal')(t).shape, (bs, c_out, seq_len))\ntest_error('use kernel_size or ks but not both simultaneously', Conv1d, ni, nf, kernel_size=3, ks=3)\ntest_error('you need to pass a ks', Conv1d, ni, nf)\n\n\nconv = Conv1d(ni, nf, ks, padding='same')\ninit_linear(conv, None, init='auto', bias_std=.01)\nconv\n\nConv1d(3, 5, kernel_size=(3,), stride=(1,), padding=(1,))\n\n\n\nconv = Conv1d(ni, nf, ks, padding='causal')\ninit_linear(conv, None, init='auto', bias_std=.01)\nconv\n\nCausalConv1d(3, 5, kernel_size=(3,), stride=(1,))\n\n\n\nconv = Conv1d(ni, nf, ks, padding='valid')\ninit_linear(conv, None, init='auto', bias_std=.01)\nweight_norm(conv)\nconv\n\nConv1d(3, 5, kernel_size=(3,), stride=(1,))\n\n\n\nconv = Conv1d(ni, nf, ks, padding=0)\ninit_linear(conv, None, init='auto', bias_std=.01)\nweight_norm(conv)\nconv\n\nConv1d(3, 5, kernel_size=(3,), stride=(1,))\n\n\n\nsource\n\n\nSeparableConv1d\n\n SeparableConv1d (ni, nf, ks, stride=1, padding='same', dilation=1,\n bias=True, bias_std=0.01)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 64\nc_in = 6\nc_out = 5\nseq_len = 512\nt = torch.rand(bs, c_in, seq_len)\ntest_eq(SeparableConv1d(c_in, c_out, 3)(t).shape, (bs, c_out, seq_len))\n\n\nsource\n\n\nAddCoords1d\n\n AddCoords1d ()\n\nAdd coordinates to ease position identification without modifying mean and std\n\nbs = 2\nc_in = 3\nc_out = 5\nseq_len = 50\n\nt = torch.rand(bs, c_in, seq_len)\nt = (t - t.mean()) / t.std()\ntest_eq(AddCoords1d()(t).shape, (bs, c_in + 1, seq_len))\nnew_t = AddCoords1d()(t)\ntest_close(new_t.mean(),0, 1e-2)\ntest_close(new_t.std(), 1, 1e-2)\n\n\nsource\n\n\nConvBlock\n\n ConvBlock (ni, nf, kernel_size=None, ks=3, stride=1, padding='same',\n bias=None, bias_std=0.01, norm='Batch', zero_norm=False,\n bn_1st=True, act=<class 'torch.nn.modules.activation.ReLU'>,\n act_kwargs={}, init='auto', dropout=0.0, xtra=None,\n coord=False, separable=False, **kwargs)\n\nCreate a sequence of conv1d (ni to nf), activation (if act_cls) and norm_type layers.\n\nsource\n\n\nResBlock1dPlus\n\n ResBlock1dPlus (expansion, ni, nf, coord=False, stride=1, groups=1,\n reduction=None, nh1=None, nh2=None, dw=False, g2=1,\n sa=False, sym=False, norm='Batch', zero_norm=True,\n act_cls=<class 'torch.nn.modules.activation.ReLU'>, ks=3,\n pool=<function AvgPool>, pool_first=True, **kwargs)\n\nResnet block from ni to nh with stride\n\nsource\n\n\nSEModule1d\n\n SEModule1d (ni, reduction=16, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={})\n\nSqueeze and excitation module for 1d\n\nt = torch.rand(8, 32, 12)\ntest_eq(SEModule1d(t.shape[1], 16, act=nn.ReLU, act_kwargs={})(t).shape, t.shape)\n\n\nsource\n\n\nNorm\n\n Norm (nf, ndim=1, norm='Batch', zero_norm=False, init=True, **kwargs)\n\nNorm layer with nf features and ndim with auto init.\n\nbs = 2\nni = 3\nnf = 5\nsl = 4\nks = 5\n\nt = torch.rand(bs, ni, sl)\ntest_eq(ConvBlock(ni, nf, ks)(t).shape, (bs, nf, sl))\ntest_eq(ConvBlock(ni, nf, ks, padding='causal')(t).shape, (bs, nf, sl))\ntest_eq(ConvBlock(ni, nf, ks, coord=True)(t).shape, (bs, nf, sl))\n\n\ntest_eq(BN1d(ni)(t).shape, (bs, ni, sl))\ntest_eq(BN1d(ni).weight.data.mean().item(), 1.)\ntest_eq(BN1d(ni, zero_norm=True).weight.data.mean().item(), 0.)\n\n\ntest_eq(ConvBlock(ni, nf, ks, norm='batch', zero_norm=True)[1].weight.data.unique().item(), 0)\ntest_ne(ConvBlock(ni, nf, ks, norm='batch', zero_norm=False)[1].weight.data.unique().item(), 0)\ntest_eq(ConvBlock(ni, nf, ks, bias=False)[0].bias, None)\nConvBlock(ni, nf, ks, act=Swish, coord=True)\n\nConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(4, 5, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)\n (2): BatchNorm1d(5, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): Swish()\n)\n\n\n\nsource\n\n\nLinLnDrop\n\n LinLnDrop (n_in, n_out, ln=True, p=0.0, act=None, lin_first=False)\n\nModule grouping LayerNorm1d, Dropout and Linear layers\n\nLinLnDrop(2, 3, p=.5)\n\nLinLnDrop(\n (0): LayerNorm((2,), eps=1e-05, elementwise_affine=True)\n (1): Dropout(p=0.5, inplace=False)\n (2): Linear(in_features=2, out_features=3, bias=False)\n)\n\n\n\nsource\n\n\nLambdaPlus\n\n LambdaPlus (func, *args, **kwargs)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nReZero\n\n ReZero (module)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nClip\n\n Clip (min=None, max=None)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nClamp\n\n Clamp (min=None, max=None)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nSoftMax\n\n SoftMax (dim=-1)\n\nSoftMax layer\n\nsource\n\n\nLastStep\n\n LastStep ()\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nMax\n\n Max (dim=None, keepdim=False)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nReshape\n\n Reshape (*shape)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nView\n\n View (*shape)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nTranspose\n\n Transpose (*dims, contiguous=False)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nPermute\n\n Permute (*dims)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nUnfold\n\n Unfold (dim, size, step=1)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nConcat\n\n Concat (dim=1)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nAdd\n\n Add ()\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nUnsqueeze\n\n Unsqueeze (dim=-1)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nSqueeze\n\n Squeeze (dim=-1)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 2\nnf = 5\nsl = 4\n\nt = torch.rand(bs, nf, sl)\ntest_eq(Permute(0,2,1)(t).shape, (bs, sl, nf))\ntest_eq(Max(1)(t).shape, (bs, sl))\ntest_eq(Transpose(1,2)(t).shape, (bs, sl, nf))\ntest_eq(Transpose(1,2, contiguous=True)(t).shape, (bs, sl, nf))\ntest_eq(View(-1, 2, 10)(t).shape, (bs, 1, 2, 10))\ntest_eq(Reshape(-1, 2, 10)(t).shape, (bs, 1, 2, 10))\ntest_eq(Reshape()(t).shape, (2, 20))\ntest_eq(Reshape(-1)(t).shape, (40,))\nTranspose(1,2), Permute(0,2,1), View(-1, 2, 10), Transpose(1,2, contiguous=True), Reshape(-1, 2, 10), Noop\n\n(Transpose(1, 2),\n Permute(dims=0, 2, 1),\n View(bs, -1, 2, 10),\n Transpose(dims=1, 2).contiguous(),\n Reshape(bs, -1, 2, 10),\n Sequential())\n\n\n\nsource\n\n\nDropPath\n\n DropPath (p=None)\n\nDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).\nIt’s similar to Dropout but it drops individual connections instead of nodes. Original code in https://github.com/rwightman/pytorch-image-models (timm library)\n\nt = torch.ones(100,2,3)\ntest_eq(DropPath(0.)(t), t)\nassert DropPath(0.5)(t).max() >= 1\n\n\nsource\n\n\nSharpen\n\n Sharpen (T=0.5)\n\nThis is used to increase confidence in predictions - MixMatch paper\n\nn_samples = 1000\nn_classes = 3\n\nt = (torch.rand(n_samples, n_classes) - .5) * 10\nprobas = F.softmax(t, -1)\nsharpened_probas = Sharpen()(probas)\nplt.plot(probas.flatten().sort().values, color='r')\nplt.plot(sharpened_probas.flatten().sort().values, color='b')\nplt.show()\ntest_gt(sharpened_probas[n_samples//2:].max(-1).values.sum().item(), probas[n_samples//2:].max(-1).values.sum().item())\n\n\n\n\n\n\n\n\n\nsource\n\n\nSequential\n\n Sequential (*args)\n\nClass that allows you to pass one or multiple inputs\n\nsource\n\n\nTimeDistributed\n\n TimeDistributed (module, batch_first=False)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nget_calibrator\n\n get_calibrator (calibrator=None, n_classes=1, **kwargs)\n\n\nsource\n\n\nMatrix_Scale\n\n Matrix_Scale (n_classes=1, dirichlet=False)\n\nUsed to perform Matrix Scaling (dirichlet=False) or Dirichlet calibration (dirichlet=True)\n\nsource\n\n\nVector_Scale\n\n Vector_Scale (n_classes=1, dirichlet=False)\n\nUsed to perform Vector Scaling (dirichlet=False) or Diagonal Dirichlet calibration (dirichlet=True)\n\nsource\n\n\nTemp_Scale\n\n Temp_Scale (temp=1.0, dirichlet=False)\n\nUsed to perform Temperature Scaling (dirichlet=False) or Single-parameter Dirichlet calibration (dirichlet=True)\n\nbs = 2\nc_out = 3\n\nt = torch.rand(bs, c_out)\nfor calibrator, cal_name in zip(['temp', 'vector', 'matrix'], ['Temp_Scale', 'Vector_Scale', 'Matrix_Scale']): \n cal = get_calibrator(calibrator, n_classes=c_out)\n# print(calibrator)\n# print(cal.weight, cal.bias, '\\n')\n test_eq(cal(t), t)\n test_eq(cal.__class__.__name__, cal_name)\nfor calibrator, cal_name in zip(['dtemp', 'dvector', 'dmatrix'], ['Temp_Scale', 'Vector_Scale', 'Matrix_Scale']):\n cal = get_calibrator(calibrator, n_classes=c_out)\n# print(calibrator)\n# print(cal.weight, cal.bias, '\\n')\n test_eq(cal(t), F.log_softmax(t, dim=1))\n test_eq(cal.__class__.__name__, cal_name)\n\n\nbs = 2\nc_out = 3\n\nt = torch.rand(bs, c_out)\n\ntest_eq(Temp_Scale()(t).shape, t.shape)\ntest_eq(Vector_Scale(c_out)(t).shape, t.shape)\ntest_eq(Matrix_Scale(c_out)(t).shape, t.shape)\ntest_eq(Temp_Scale(dirichlet=True)(t).shape, t.shape)\ntest_eq(Vector_Scale(c_out, dirichlet=True)(t).shape, t.shape)\ntest_eq(Matrix_Scale(c_out, dirichlet=True)(t).shape, t.shape)\n\ntest_eq(Temp_Scale()(t), t)\ntest_eq(Vector_Scale(c_out)(t), t)\ntest_eq(Matrix_Scale(c_out)(t), t)\n\n\nbs = 2\nc_out = 5\n\nt = torch.rand(bs, c_out)\ntest_eq(Vector_Scale(c_out)(t), t)\ntest_eq(Vector_Scale(c_out).weight.data, torch.ones(c_out))\ntest_eq(Vector_Scale(c_out).weight.requires_grad, True)\ntest_eq(type(Vector_Scale(c_out).weight), torch.nn.parameter.Parameter)\n\n\nbs = 2\nc_out = 3\nweight = 2\nbias = 1\n\nt = torch.rand(bs, c_out)\ntest_eq(Matrix_Scale(c_out)(t).shape, t.shape)\ntest_eq(Matrix_Scale(c_out).weight.requires_grad, True)\ntest_eq(type(Matrix_Scale(c_out).weight), torch.nn.parameter.Parameter)\n\n\nsource\n\n\nLogitAdjustmentLayer\n\n LogitAdjustmentLayer (class_priors)\n\nLogit Adjustment for imbalanced datasets\n\nbs, n_classes = 16, 3\nclass_priors = torch.rand(n_classes)\nlogits = torch.randn(bs, n_classes) * 2\ntest_eq(LogitAdjLayer(class_priors)(logits), logits + class_priors)\n\n\nsource\n\n\nMaxPPVPool1d\n\n MaxPPVPool1d ()\n\nDrop-in replacement for AdaptiveConcatPool1d - multiplies nf by 2\n\nsource\n\n\nPPAuc\n\n PPAuc (dim=-1)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nPPV\n\n PPV (dim=-1)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 2\nnf = 5\nsl = 4\n\nt = torch.rand(bs, nf, sl)\ntest_eq(MaxPPVPool1d()(t).shape, (bs, nf*2, 1))\ntest_eq(MaxPPVPool1d()(t).shape, AdaptiveConcatPool1d(1)(t).shape)\n\n\nsource\n\n\nAdaptiveWeightedAvgPool1d\n\n AdaptiveWeightedAvgPool1d (n_in, seq_len, mult=2, n_layers=2, ln=False,\n dropout=0.5, act=ReLU(), zero_init=True)\n\nGlobal Pooling layer that performs a weighted average along the temporal axis\nIt can be considered as a channel-wise form of local temporal attention. Inspired by the paper: Hyun, J., Seong, H., & Kim, E. (2019). Universal Pooling–A New Pooling Method for Convolutional Neural Networks. arXiv preprint arXiv:1907.11440.\n\nsource\n\n\nGAWP1d\n\n GAWP1d (n_in, seq_len, n_layers=2, ln=False, dropout=0.5, act=ReLU(),\n zero_init=False)\n\nGlobal AdaptiveWeightedAvgPool1d + Flatten\n\nsource\n\n\nGACP1d\n\n GACP1d (output_size=1)\n\nGlobal AdaptiveConcatPool + Flatten\n\nsource\n\n\nGAP1d\n\n GAP1d (output_size=1)\n\nGlobal Adaptive Pooling + Flatten\n\nsource\n\n\ngwa_pool_head\n\n gwa_pool_head (n_in, c_out, seq_len, bn=True, fc_dropout=0.0)\n\n\nsource\n\n\nGlobalWeightedAveragePool1d\n\n GlobalWeightedAveragePool1d (n_in, seq_len)\n\nGlobal Weighted Average Pooling layer\nInspired by Building Efficient CNN Architecture for Offline Handwritten Chinese Character Recognition https://arxiv.org/pdf/1804.01259.pdf\n\nt = torch.randn(16, 64, 50)\nhead = gwa_pool_head(64, 5, 50)\ntest_eq(head(t).shape, (16, 5))\n\n\nsource\n\n\nattentional_pool_head\n\n attentional_pool_head (n_in, c_out, seq_len=None, bn=True, **kwargs)\n\n\nsource\n\n\nGAttP1d\n\n GAttP1d (n_in, c_out, bn=False)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nAttentionalPool1d\n\n AttentionalPool1d (n_in, c_out, bn=False)\n\nGlobal Adaptive Pooling layer inspired by Attentional Pooling for Action Recognition https://arxiv.org/abs/1711.01467\n\nbs, c_in, seq_len = 16, 1, 50\nc_out = 3\nt = torch.rand(bs, c_in, seq_len)\ntest_eq(GAP1d()(t).shape, (bs, c_in))\ntest_eq(GACP1d()(t).shape, (bs, c_in*2))\nbs, c_in, seq_len = 16, 4, 50\nt = torch.rand(bs, c_in, seq_len)\ntest_eq(GAP1d()(t).shape, (bs, c_in))\ntest_eq(GACP1d()(t).shape, (bs, c_in*2))\ntest_eq(GAWP1d(c_in, seq_len, n_layers=2, ln=False, dropout=0.5, act=nn.ReLU(), zero_init=False)(t).shape, (bs, c_in))\ntest_eq(GAWP1d(c_in, seq_len, n_layers=2, ln=False, dropout=0.5, act=nn.ReLU(), zero_init=False)(t).shape, (bs, c_in))\ntest_eq(GAWP1d(c_in, seq_len, n_layers=1, ln=False, dropout=0.5, zero_init=False)(t).shape, (bs, c_in))\ntest_eq(GAWP1d(c_in, seq_len, n_layers=1, ln=False, dropout=0.5, zero_init=True)(t).shape, (bs, c_in))\ntest_eq(AttentionalPool1d(c_in, c_out)(t).shape, (bs, c_out, 1))\n\n\nbs, c_in, seq_len = 16, 128, 50\nc_out = 14\nt = torch.rand(bs, c_in, seq_len)\nattp = attentional_pool_head(c_in, c_out)\ntest_eq(attp(t).shape, (bs, c_out))\n\n\nsource\n\n\nPoolingLayer\n\n PoolingLayer (method='cls', seq_len=None, token=True, seq_last=True)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nt = torch.arange(24).reshape(2, 3, 4).float()\ntest_eq(PoolingLayer('cls', token=True, seq_last=True)(t), tensor([[ 0., 4., 8.], [12., 16., 20.]]))\ntest_eq(PoolingLayer('max', token=True, seq_last=True)(t), tensor([[ 3., 7., 11.], [15., 19., 23.]]))\ntest_close(PoolingLayer('mean', token=True, seq_last=True)(t), tensor([[ 2., 6., 10.], [14., 18., 22.]]))\ntest_close(PoolingLayer('max-mean', token=True, seq_last=True)(t), tensor([[ 3., 7., 11., 2., 6., 10.],\n [15., 19., 23., 14., 18., 22.]]))\ntest_close(PoolingLayer('flatten', token=True, seq_last=True)(t), tensor([[ 1., 2., 3., 5., 6., 7., 9., 10., 11.],\n [13., 14., 15., 17., 18., 19., 21., 22., 23.]]))\ntest_eq(PoolingLayer('linear', seq_len=4, token=True, seq_last=True)(t).shape, (2, 3))\ntest_eq(PoolingLayer('max', token=False, seq_last=True)(t), tensor([[ 3., 7., 11.], [15., 19., 23.]]))\ntest_close(PoolingLayer('mean', token=False, seq_last=True)(t), tensor([[ 1.5000, 5.5000, 9.5000],\n [13.5000, 17.5000, 21.5000]]))\ntest_close(PoolingLayer('max-mean', token=False, seq_last=True)(t), tensor([[ 3., 7., 11., 1.5000, 5.5000, 9.5000],\n [15., 19., 23., 13.5000, 17.5000, 21.5000]]))\ntest_close(PoolingLayer('flatten', token=False, seq_last=True)(t), tensor([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.],\n [12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22., 23.]]))\ntest_eq(PoolingLayer('linear', seq_len=4, token=False, seq_last=True)(t).shape, (2, 3))\n\n\nt = torch.arange(24).reshape(2, 3, 4).swapaxes(1,2).float()\ntest_eq(PoolingLayer('cls', token=True, seq_last=False)(t), tensor([[ 0., 4., 8.], [12., 16., 20.]]))\ntest_eq(PoolingLayer('max', token=True, seq_last=False)(t), tensor([[ 3., 7., 11.], [15., 19., 23.]]))\ntest_close(PoolingLayer('mean', token=True, seq_last=False)(t), tensor([[ 2., 6., 10.], [14., 18., 22.]]))\ntest_close(PoolingLayer('max-mean', token=True, seq_last=False)(t), tensor([[ 3., 7., 11., 2., 6., 10.],\n [15., 19., 23., 14., 18., 22.]]))\ntest_close(PoolingLayer('flatten', token=True, seq_last=False)(t), tensor([[ 1., 5., 9., 2., 6., 10., 3., 7., 11.],\n [13., 17., 21., 14., 18., 22., 15., 19., 23.]]))\nt = torch.arange(24).reshape(2, 3, 4).swapaxes(1,2).float()\ntest_eq(PoolingLayer('conv1d', seq_len=4, token=False, seq_last=False)(t).shape, (2, 3))\ntest_eq(PoolingLayer('max', token=False, seq_last=False)(t), tensor([[ 3., 7., 11.], [15., 19., 23.]]))\ntest_close(PoolingLayer('mean', token=False, seq_last=False)(t), tensor([[ 1.5000, 5.5000, 9.5000],\n [13.5000, 17.5000, 21.5000]]))\ntest_close(PoolingLayer('max-mean', token=False, seq_last=False)(t), tensor([[ 3., 7., 11., 1.5000, 5.5000, 9.5000],\n [15., 19., 23., 13.5000, 17.5000, 21.5000]]))\ntest_close(PoolingLayer('flatten', token=False, seq_last=False)(t), tensor([[ 0., 4., 8., 1., 5., 9., 2., 6., 10., 3., 7., 11.],\n [12., 16., 20., 13., 17., 21., 14., 18., 22., 15., 19., 23.]]))\ntest_eq(PoolingLayer('conv1d', seq_len=4, token=False, seq_last=False)(t).shape, (2, 3))\n\n\nsource\n\n\nReGLU\n\n ReGLU ()\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nGEGLU\n\n GEGLU ()\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nget_act_fn\n\n get_act_fn (act, **act_kwargs)\n\n\ntest_eq(get_act_fn(nn.ReLU).__repr__(), \"ReLU()\")\ntest_eq(get_act_fn(nn.ReLU()).__repr__(), \"ReLU()\")\ntest_eq(get_act_fn(nn.LeakyReLU, negative_slope=0.05).__repr__(), \"LeakyReLU(negative_slope=0.05)\")\ntest_eq(get_act_fn('reglu').__repr__(), \"ReGLU()\")\ntest_eq(get_act_fn('leakyrelu', negative_slope=0.05).__repr__(), \"LeakyReLU(negative_slope=0.05)\")\n\n\nsource\n\n\nRevIN\n\n RevIN (c_in:int, affine:bool=True, subtract_last:bool=False, dim:int=2,\n eps:float=1e-05)\n\nReversible Instance Normalization layer adapted from\nKim, T., Kim, J., Tae, Y., Park, C., Choi, J. H., & Choo, J. (2021, September). Reversible instance normalization for accurate time-series forecasting against distribution shift. In International Conference on Learning Representations. Original code: https://github.com/ts-kim/RevIN\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\n#features (aka variables or channels)\n\n\naffine\nbool\nTrue\nflag to incidate if RevIN has learnable weight and bias\n\n\nsubtract_last\nbool\nFalse\n\n\n\ndim\nint\n2\nint or tuple of dimensions used to calculate mean and std\n\n\neps\nfloat\n1e-05\nepsilon - parameter added for numerical stability\n\n\n\n\nsource\n\n\nRevIN\n\n RevIN (c_in:int, affine:bool=True, subtract_last:bool=False, dim:int=2,\n eps:float=1e-05)\n\nReversible Instance Normalization layer adapted from\nKim, T., Kim, J., Tae, Y., Park, C., Choi, J. H., & Choo, J. (2021, September). Reversible instance normalization for accurate time-series forecasting against distribution shift. In International Conference on Learning Representations. Original code: https://github.com/ts-kim/RevIN\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\n#features (aka variables or channels)\n\n\naffine\nbool\nTrue\nflag to incidate if RevIN has learnable weight and bias\n\n\nsubtract_last\nbool\nFalse\n\n\n\ndim\nint\n2\nint or tuple of dimensions used to calculate mean and std\n\n\neps\nfloat\n1e-05\nepsilon - parameter added for numerical stability\n\n\n\n\nt = ((torch.rand(16, 5, 100) - .25) * torch.Tensor([.01, .1, 1, 10, 100]).reshape(1, -1, 1)).cumsum(-1)\nt_clone = t.clone()\nl = RevIN(5)\nt_norm = l(t, torch.tensor(True))\nt_denorm = l(t_norm, torch.tensor(False))\ntest_close(t_clone, t_denorm, eps=1e-3)\n\n\nmodel = RevIN(5, affine=True)\ntry:\n scripted_model = torch.jit.script(model)\n file_path = f\"test_scripted_model.pt\"\n torch.jit.save(scripted_model, file_path)\n scripted_model = torch.jit.load(file_path)\n\n inp = ((torch.rand(16, 5, 100) - .25) * torch.Tensor([.01, .1, 1, 10, 100]).reshape(1, -1, 1)).cumsum(-1)\n normed_output = model(inp, torch.tensor(True))\n demormed_output = model(normed_output, torch.tensor(False))\n scripted_normed_output = scripted_model(inp, torch.tensor(True))\n scripted_denormed_output = scripted_model(scripted_normed_output, torch.tensor(False))\n test_close(normed_output, scripted_normed_output)\n test_close(demormed_output, scripted_denormed_output)\n os.remove(file_path)\n del scripted_model\n gc.collect()\n print('scripting ok')\nexcept Exception as e:\n print(f'scripting failed: {e}')\n\nscripting ok\n\n\n\nsource\n\n\ncreate_pool_head\n\n create_pool_head (n_in, c_out, seq_len=None, concat_pool=False,\n fc_dropout=0.0, bn=False, y_range=None, **kwargs)\n\n\nbs = 16\nnf = 12\nc_out = 2\nseq_len = 20\nt = torch.rand(bs, nf, seq_len)\ntest_eq(create_pool_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))\ntest_eq(create_pool_head(nf, c_out, seq_len, concat_pool=True, fc_dropout=0.5)(t).shape, (bs, c_out))\ncreate_pool_head(nf, c_out, seq_len, concat_pool=True, bn=True, fc_dropout=.5)\n\nSequential(\n (0): GACP1d(\n (gacp): AdaptiveConcatPool1d(\n (ap): AdaptiveAvgPool1d(output_size=1)\n (mp): AdaptiveMaxPool1d(output_size=1)\n )\n (flatten): Reshape(bs)\n )\n (1): LinBnDrop(\n (0): BatchNorm1d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (1): Dropout(p=0.5, inplace=False)\n (2): Linear(in_features=24, out_features=2, bias=False)\n )\n)\n\n\n\nsource\n\n\nmax_pool_head\n\n max_pool_head (n_in, c_out, seq_len, fc_dropout=0.0, bn=False,\n y_range=None, **kwargs)\n\n\nbs = 16\nnf = 12\nc_out = 2\nseq_len = 20\nt = torch.rand(bs, nf, seq_len)\ntest_eq(max_pool_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))\n\n\nsource\n\n\ncreate_pool_plus_head\n\n create_pool_plus_head (*args, lin_ftrs=None, fc_dropout=0.0,\n concat_pool=True, bn_final=False, lin_first=False,\n y_range=None)\n\n\nbs = 16\nnf = 12\nc_out = 2\nseq_len = 20\nt = torch.rand(bs, nf, seq_len)\ntest_eq(create_pool_plus_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))\ntest_eq(create_pool_plus_head(nf, c_out, concat_pool=True, fc_dropout=0.5)(t).shape, (bs, c_out))\ncreate_pool_plus_head(nf, c_out, seq_len, fc_dropout=0.5)\n\nSequential(\n (0): AdaptiveConcatPool1d(\n (ap): AdaptiveAvgPool1d(output_size=1)\n (mp): AdaptiveMaxPool1d(output_size=1)\n )\n (1): Reshape(bs)\n (2): BatchNorm1d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): Dropout(p=0.25, inplace=False)\n (4): Linear(in_features=24, out_features=512, bias=False)\n (5): ReLU(inplace=True)\n (6): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (7): Dropout(p=0.5, inplace=False)\n (8): Linear(in_features=512, out_features=2, bias=False)\n)\n\n\n\nsource\n\n\ncreate_conv_head\n\n create_conv_head (*args, adaptive_size=None, y_range=None)\n\n\nbs = 16\nnf = 12\nc_out = 2\nseq_len = 20\nt = torch.rand(bs, nf, seq_len)\ntest_eq(create_conv_head(nf, c_out, seq_len)(t).shape, (bs, c_out))\ntest_eq(create_conv_head(nf, c_out, adaptive_size=50)(t).shape, (bs, c_out))\ncreate_conv_head(nf, c_out, 50)\n\nSequential(\n (0): ConvBlock(\n (0): Conv1d(12, 6, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(6, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (1): ConvBlock(\n (0): Conv1d(6, 3, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (2): ConvBlock(\n (0): Conv1d(3, 2, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (3): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Reshape(bs)\n )\n)\n\n\n\nsource\n\n\ncreate_mlp_head\n\n create_mlp_head (nf, c_out, seq_len=None, flatten=True, fc_dropout=0.0,\n bn=False, lin_first=False, y_range=None)\n\n\nbs = 16\nnf = 12\nc_out = 2\nseq_len = 20\nt = torch.rand(bs, nf, seq_len)\ntest_eq(create_mlp_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))\nt = torch.rand(bs, nf, seq_len)\ncreate_mlp_head(nf, c_out, seq_len, bn=True, fc_dropout=.5)\n\nSequential(\n (0): Reshape(bs)\n (1): LinBnDrop(\n (0): BatchNorm1d(240, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (1): Dropout(p=0.5, inplace=False)\n (2): Linear(in_features=240, out_features=2, bias=False)\n )\n)\n\n\n\nsource\n\n\ncreate_fc_head\n\n create_fc_head (nf, c_out, seq_len=None, flatten=True, lin_ftrs=None,\n y_range=None, fc_dropout=0.0, bn=False, bn_final=False,\n act=ReLU(inplace=True))\n\n\nbs = 16\nnf = 12\nc_out = 2\nseq_len = 20\nt = torch.rand(bs, nf, seq_len)\ntest_eq(create_fc_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))\ncreate_mlp_head(nf, c_out, seq_len, bn=True, fc_dropout=.5)\n\nSequential(\n (0): Reshape(bs)\n (1): LinBnDrop(\n (0): BatchNorm1d(240, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (1): Dropout(p=0.5, inplace=False)\n (2): Linear(in_features=240, out_features=2, bias=False)\n )\n)\n\n\n\nsource\n\n\ncreate_rnn_head\n\n create_rnn_head (*args, fc_dropout=0.0, bn=False, y_range=None)\n\n\nbs = 16\nnf = 12\nc_out = 2\nseq_len = 20\nt = torch.rand(bs, nf, seq_len)\ntest_eq(create_rnn_head(nf, c_out, seq_len, fc_dropout=0.5)(t).shape, (bs, c_out))\ncreate_rnn_head(nf, c_out, seq_len, bn=True, fc_dropout=.5)\n\nSequential(\n (0): LastStep()\n (1): LinBnDrop(\n (0): BatchNorm1d(12, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (1): Dropout(p=0.5, inplace=False)\n (2): Linear(in_features=12, out_features=2, bias=False)\n )\n)\n\n\n\nsource\n\n\nimputation_head\n\n imputation_head (c_in, c_out, seq_len=None, ks=1, y_range=None,\n fc_dropout=0.0)\n\n\nbs = 16\nnf = 12\nni = 2\nseq_len = 20\nt = torch.rand(bs, nf, seq_len)\nhead = imputation_head(nf, ni, seq_len=None, ks=1, y_range=None, fc_dropout=0.)\ntest_eq(head(t).shape, (bs, ni, seq_len))\nhead = imputation_head(nf, ni, seq_len=None, ks=1, y_range=(.3,.7), fc_dropout=0.)\ntest_ge(head(t).min(), .3)\ntest_le(head(t).max(), .7)\ny_range = (tensor([0.1000, 0.1000, 0.1000, 0.1000, 0.2000, 0.2000, 0.2000, 0.2000, 0.3000,\n 0.3000, 0.3000, 0.3000]),\n tensor([0.6000, 0.6000, 0.6000, 0.6000, 0.7000, 0.7000, 0.7000, 0.7000, 0.8000,\n 0.8000, 0.8000, 0.8000]))\ntest_ge(head(t).min(), .1)\ntest_le(head(t).max(), .9)\nhead = imputation_head(nf, ni, seq_len=None, ks=1, y_range=y_range, fc_dropout=0.)\nhead\n\nSequential(\n (0): Dropout(p=0.0, inplace=False)\n (1): Conv1d(12, 2, kernel_size=(1,), stride=(1,))\n (2): fastai.layers.SigmoidRange(low=tensor([0.1000, 0.1000, 0.1000, 0.1000, 0.2000, 0.2000, 0.2000, 0.2000, 0.3000,\n 0.3000, 0.3000, 0.3000]), high=tensor([0.6000, 0.6000, 0.6000, 0.6000, 0.7000, 0.7000, 0.7000, 0.7000, 0.8000,\n 0.8000, 0.8000, 0.8000]))\n)\n\n\n\nsource\n\n\ncreate_conv_lin_nd_head\n\n create_conv_lin_nd_head (n_in, n_out, seq_len, d, conv_first=True,\n conv_bn=False, lin_bn=False, fc_dropout=0.0,\n **kwargs)\n\nModule to create a nd output head\n\nbs = 16\nnf = 32\nc = 5\nseq_len = 10\nd = 2\ntarg = torch.randint(0, c, (bs,d))\nt = torch.randn(bs, nf, seq_len)\nhead = conv_lin_nd_head(nf, c, seq_len, d, conv_first=True, fc_dropout=.5)\ninp = head(t)\ntest_eq(inp.shape, (bs, d, c))\nloss = CrossEntropyLossFlat()(inp, targ)\nloss, head\n\n(TensorBase(1.7074, grad_fn=<AliasBackward0>),\n create_conv_lin_nd_head(\n (0): Conv1d(32, 5, kernel_size=(1,), stride=(1,))\n (1): Dropout(p=0.5, inplace=False)\n (2): Linear(in_features=10, out_features=2, bias=True)\n (3): Transpose(-1, -2)\n (4): Reshape(bs, 2, 5)\n ))\n\n\n\nbs = 16\nnf = 32\nc = 5\nseq_len = 10\nd = [2, 8]\ntarg = torch.randint(0, c, [bs]+d)\nt = torch.randn(bs, nf, seq_len)\nhead = conv_lin_nd_head(nf, c, seq_len, d, conv_first=False, fc_dropout=.5)\ninp = head(t)\ntest_eq(inp.shape, [bs]+d+[c])\nloss = CrossEntropyLossFlat()(inp, targ)\nloss, head\n\n(TensorBase(1.6561, grad_fn=<AliasBackward0>),\n create_conv_lin_nd_head(\n (0): Dropout(p=0.5, inplace=False)\n (1): Linear(in_features=10, out_features=16, bias=True)\n (2): Conv1d(32, 5, kernel_size=(1,), stride=(1,))\n (3): Transpose(-1, -2)\n (4): Reshape(bs, 2, 8, 5)\n ))\n\n\n\nbs = 16\nnf = 32\nc = 1\nseq_len = 10\nd = 2\ntarg = torch.rand(bs, d)\nt = torch.randn(bs, nf, seq_len)\nhead = conv_lin_nd_head(nf, c, seq_len, d, conv_first=False, fc_dropout=.5)\ninp = head(t)\ntest_eq(inp.shape, (bs, d))\nloss = L1LossFlat()(inp, targ)\nloss, head\n\n(TensorBase(0.6017, grad_fn=<AliasBackward0>),\n create_conv_lin_nd_head(\n (0): Dropout(p=0.5, inplace=False)\n (1): Linear(in_features=10, out_features=2, bias=True)\n (2): Conv1d(32, 1, kernel_size=(1,), stride=(1,))\n (3): Transpose(-1, -2)\n (4): Reshape(bs, 2)\n ))\n\n\n\nbs = 16\nnf = 32\nc = 1\nseq_len = 10\nd = [2,3]\ntarg = torch.rand(bs, *d)\nt = torch.randn(bs, nf, seq_len)\nhead = conv_lin_nd_head(nf, c, seq_len, d, conv_first=False, fc_dropout=.5)\ninp = head(t)\ntest_eq(inp.shape, [bs]+d)\nloss = L1LossFlat()(inp, targ)\nloss, head\n\n(TensorBase(0.5439, grad_fn=<AliasBackward0>),\n create_conv_lin_nd_head(\n (0): Dropout(p=0.5, inplace=False)\n (1): Linear(in_features=10, out_features=6, bias=True)\n (2): Conv1d(32, 1, kernel_size=(1,), stride=(1,))\n (3): Transpose(-1, -2)\n (4): Reshape(bs, 2, 3)\n ))\n\n\n\nsource\n\n\nlin_nd_head\n\n lin_nd_head (n_in, n_out, seq_len=None, d=None, flatten=False,\n use_bn=False, fc_dropout=0.0)\n\nModule to create a nd output head with linear layers\n\nbs = 16\nnf = 32\nseq_len = 50\nx = torch.normal(0, 1, (bs, nf, seq_len))\n\nfor use_bn in [False, True]:\n for fc_dropout in [0, 0.2]:\n for flatten in [False, True]:\n for c in [1, 3]:\n for d in [None, (50,), (50,10), (30,5), (50,2,3), (30,2,3)]:\n for q_len in [1, seq_len]:\n head = lin_nd_head(nf, c, q_len, d, flatten=flatten, use_bn=use_bn, fc_dropout=fc_dropout)\n test_eq(head(x).shape, (bs, ) + (d if d is not None else ()) + ((c,) if c != 1 else ()))\n\n\nbs = 16\nnf = 32\nc = 5\nseq_len = 10\nd = 2\ntarg = torch.randint(0, c, (bs,d))\nt = torch.randn(bs, nf, seq_len)\nhead = lin_nd_head(nf, c, seq_len, d, fc_dropout=.5)\ninp = head(t)\ntest_eq(inp.shape, (bs, d, c))\nloss = CrossEntropyLossFlat()(inp, targ)\nloss, head\n\n(TensorBase(1.8360, grad_fn=<AliasBackward0>),\n lin_nd_head(\n (0): Dropout(p=0.5, inplace=False)\n (1): Reshape(bs)\n (2): Linear(in_features=320, out_features=10, bias=True)\n (3): Reshape(bs, 2, 5)\n ))\n\n\n\nbs = 16\nnf = 32\nc = 5\nseq_len = 10\nd = [2, 8]\ntarg = torch.randint(0, c, [bs]+d)\nt = torch.randn(bs, nf, seq_len)\nhead = lin_nd_head(nf, c, seq_len, d, fc_dropout=.5)\ninp = head(t)\ntest_eq(inp.shape, [bs]+d+[c])\nloss = CrossEntropyLossFlat()(inp, targ)\nloss, head\n\n(TensorBase(1.7557, grad_fn=<AliasBackward0>),\n lin_nd_head(\n (0): Dropout(p=0.5, inplace=False)\n (1): Reshape(bs)\n (2): Linear(in_features=320, out_features=80, bias=True)\n (3): Reshape(bs, 2, 8, 5)\n ))\n\n\n\nbs = 16\nnf = 32\nc = 1\nseq_len = 10\nd = 2\ntarg = torch.rand(bs, d)\nt = torch.randn(bs, nf, seq_len)\nhead = lin_nd_head(nf, c, seq_len, d, fc_dropout=.5)\ninp = head(t)\ntest_eq(inp.shape, (bs, d))\nloss = L1LossFlat()(inp, targ)\nloss, head\n\n(TensorBase(0.5978, grad_fn=<AliasBackward0>),\n lin_nd_head(\n (0): Dropout(p=0.5, inplace=False)\n (1): Reshape(bs)\n (2): Linear(in_features=320, out_features=2, bias=True)\n (3): Reshape(bs, 2)\n ))\n\n\n\nbs = 16\nnf = 32\nc = 1\nseq_len = 10\nd = [2,3]\ntarg = torch.rand(bs, *d)\nt = torch.randn(bs, nf, seq_len)\nhead = lin_nd_head(nf, c, seq_len, d, fc_dropout=.5)\ninp = head(t)\ntest_eq(inp.shape, [bs]+d)\nloss = L1LossFlat()(inp, targ)\nloss, head\n\n(TensorBase(0.8286, grad_fn=<AliasBackward0>),\n lin_nd_head(\n (0): Dropout(p=0.5, inplace=False)\n (1): Reshape(bs)\n (2): Linear(in_features=320, out_features=6, bias=True)\n (3): Reshape(bs, 2, 3)\n ))\n\n\n\nsource\n\n\nrocket_nd_head\n\n rocket_nd_head (n_in, n_out, seq_len=None, d=None, use_bn=False,\n fc_dropout=0.0, zero_init=True)\n\nModule to create a nd output head with linear layers for the rocket family of models\n\nbs = 16\nnf = 99\nseq_len = 1\nx = torch.normal(0, 1, (bs, nf, seq_len))\n\nfor use_bn in [False, True]:\n for fc_dropout in [0, 0.2]:\n for c in [1, 3]:\n for d in [None, (50,), (50,10), (30,5), (50,2,3), (30,2,3)]:\n head = rocket_nd_head(nf, c, 1, d, use_bn=use_bn, fc_dropout=fc_dropout)\n test_eq(head(x).shape, (bs, ) + (d if d is not None else ()) + ((c,) if c != 1 else ()))\n\n\nsource\n\n\nxresnet1d_nd_head\n\n xresnet1d_nd_head (n_in, n_out, seq_len=None, d=None, use_bn=False,\n fc_dropout=0.0, zero_init=True)\n\nModule to create a nd output head with linear layers for the xresnet family of models\n\nbs = 16\nnf = 99\nseq_len = 2\nx = torch.normal(0, 1, (bs, nf, seq_len))\n\nfor use_bn in [False, True]:\n for fc_dropout in [0, 0.2]:\n for c in [1, 3]:\n for d in [None, (50,), (50,10), (30,5), (50,2,3), (30,2,3)]:\n head = xresnet1d_nd_head(nf, c, 1, d, use_bn=use_bn, fc_dropout=fc_dropout)\n test_eq(head(x).shape, (bs, ) + (d if d is not None else ()) + ((c,) if c != 1 else ()))\n\n\nsource\n\n\ncreate_conv_3d_head\n\n create_conv_3d_head (n_in, n_out, seq_len, d, use_bn=False, **kwargs)\n\nModule to create a nd output head with a convolutional layer\n\nbs = 16\nnf = 32\nc = 5\nseq_len = 10\nd = 10\ntarg = torch.randint(0, c, (bs,d))\nt = torch.randn(bs, nf, seq_len)\nhead = conv_3d_head(nf, c, seq_len, d)\ninp = head(t)\ntest_eq(inp.shape, (bs, d, c))\nloss = CrossEntropyLossFlat()(inp, targ)\nloss, head\n\n(TensorBase(1.7321, grad_fn=<AliasBackward0>),\n create_conv_3d_head(\n (0): ConvBlock(\n (0): Conv1d(32, 5, kernel_size=(1,), stride=(1,))\n )\n (1): Transpose(-1, -2)\n ))\n\n\n\nbs = 16\nnf = 32\nc = 1\nseq_len = 10\nd = 10\ntarg = torch.rand(bs, d)\nt = torch.randn(bs, nf, seq_len)\nhead = conv_3d_head(nf, c, seq_len, d)\ninp = head(t)\ntest_eq(inp.shape, (bs, d))\nloss = L1LossFlat()(inp, targ)\nloss, head\n\n(TensorBase(0.5833, grad_fn=<AliasBackward0>),\n create_conv_3d_head(\n (0): ConvBlock(\n (0): Conv1d(32, 1, kernel_size=(1,), stride=(1,))\n )\n (1): Transpose(-1, -2)\n (2): Squeeze(dim=-1)\n ))\n\n\n\nsource\n\n\nuniversal_pool_head\n\n universal_pool_head (n_in, c_out, seq_len, mult=2, pool_n_layers=2,\n pool_ln=True, pool_dropout=0.5, pool_act=ReLU(),\n zero_init=True, bn=True, fc_dropout=0.0)\n\n\nbs, c_in, seq_len = 16, 128, 50\nc_out = 14\nt = torch.rand(bs, c_in, seq_len)\nuph = universal_pool_head(c_in, c_out, seq_len)\ntest_eq(uph(t).shape, (bs, c_out))\nuph = universal_pool_head(c_in, c_out, seq_len, 2)\ntest_eq(uph(t).shape, (bs, c_out))\n\n\nbs, c_in, seq_len = 16, 128, 50\nc_out = 14\nd = 5\nt = torch.rand(bs, c_in, seq_len)\nfor head in heads: \n print(head.__name__)\n if head.__name__ == \"create_conv_3d_head\":\n h = head(c_in, c_out, seq_len, seq_len)\n test_eq(h(t).shape, (bs, seq_len, c_out))\n elif 'nd' in head.__name__: \n h = head(c_in, c_out, seq_len, d)\n test_eq(h(t).shape, (bs, d, c_out))\n else: \n h = head(c_in, c_out, seq_len)\n test_eq(h(t).shape, (bs, c_out))\n\ncreate_mlp_head\ncreate_fc_head\naverage_pool_head\nmax_pool_head\nconcat_pool_head\ncreate_pool_plus_head\ncreate_conv_head\ncreate_rnn_head\ncreate_conv_lin_nd_head\nlin_nd_head\ncreate_conv_3d_head\nattentional_pool_head\nuniversal_pool_head\ngwa_pool_head\n\n\n\nsource\n\n\nSqueezeExciteBlock\n\n SqueezeExciteBlock (ni, reduction=16)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 2\nni = 32\nsl = 4\nt = torch.rand(bs, ni, sl)\ntest_eq(SqueezeExciteBlock(ni)(t).shape, (bs, ni, sl))\n\n\nsource\n\n\nGaussianNoise\n\n GaussianNoise (sigma=0.1, is_relative_detach=True)\n\nGaussian noise regularizer.\nArgs: sigma (float, optional): relative standard deviation used to generate the noise. Relative means that it will be multiplied by the magnitude of the value your are adding the noise to. This means that sigma can be the same regardless of the scale of the vector. is_relative_detach (bool, optional): whether to detach the variable before computing the scale of the noise. If False then the scale of the noise won’t be seen as a constant but something to optimize: this will bias the network to generate vectors with smaller values.\n\nt = torch.ones(2,3,4)\ntest_ne(GaussianNoise()(t), t)\ntest_eq(GaussianNoise()(t).shape, t.shape)\nt = torch.ones(2,3)\ntest_ne(GaussianNoise()(t), t)\ntest_eq(GaussianNoise()(t).shape, t.shape)\nt = torch.ones(2)\ntest_ne(GaussianNoise()(t), t)\ntest_eq(GaussianNoise()(t).shape, t.shape)\n\n\nsource\n\n\nTokenLayer\n\n TokenLayer (token=True)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nPositionwiseFeedForward\n\n PositionwiseFeedForward (dim, dropout=0.0, act='reglu', mlp_ratio=1)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nt = torch.randn(2,3,10)\nm = PositionwiseFeedForward(10, dropout=0., act='reglu', mlp_ratio=1)\ntest_eq(m(t).shape, t.shape)\nm = PositionwiseFeedForward(10, dropout=0., act='smelu', mlp_ratio=1)\ntest_eq(m(t).shape, t.shape)\n\n\nsource\n\n\nScaledDotProductAttention\n\n ScaledDotProductAttention (d_model, n_heads, attn_dropout=0.0,\n res_attention=False, lsa=False)\n\nScaled Dot-Product Attention module (Attention is all you need by Vaswani et al., 2017) with optional residual attention from previous layer (Realformer: Transformer likes residual attention by He et al, 2020) and locality self sttention (Vision Transformer for Small-Size Datasets by Lee et al, 2021)\n\nB = 16\nC = 10\nM = 1500 # seq_len\n\nn_heads = 1\nD = 128 # model dimension\nN = 512 # max_seq_len - latent's index dimension\nd_k = D // n_heads\n\nxb = torch.randn(B, C, M)\nxb = (xb - xb.mean()) / xb.std()\n\n# Attention\n# input (Q)\nlin = nn.Linear(M, N, bias=False)\nQ = lin(xb).transpose(1,2)\ntest_eq(Q.shape, (B, N, C))\n\n# q\nto_q = nn.Linear(C, D, bias=False)\nq = to_q(Q)\nq = nn.LayerNorm(D)(q)\n\n# k, v\ncontext = xb.transpose(1,2)\nto_kv = nn.Linear(C, D * 2, bias=False)\nk, v = to_kv(context).chunk(2, dim = -1)\nk = k.transpose(-1, -2)\nk = nn.LayerNorm(M)(k)\nv = nn.LayerNorm(D)(v)\n\ntest_eq(q.shape, (B, N, D))\ntest_eq(k.shape, (B, D, M))\ntest_eq(v.shape, (B, M, D))\n\noutput, attn, scores = ScaledDotProductAttention(D, n_heads, res_attention=True)(q.unsqueeze(1), k.unsqueeze(1), v.unsqueeze(1))\ntest_eq(output.shape, (B, 1, N, D))\ntest_eq(attn.shape, (B, 1, N, M))\ntest_eq(scores.shape, (B, 1, N, M))\nscores.mean(), scores.std()\n\n(tensor(1.3535e-10, grad_fn=<MeanBackward0>),\n tensor(1.0555, grad_fn=<StdBackward0>))\n\n\n\nsource\n\n\nMultiheadAttention\n\n MultiheadAttention (d_model, n_heads, d_k=None, d_v=None,\n res_attention=False, attn_dropout=0.0,\n proj_dropout=0.0, qkv_bias=True, lsa=False)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nq = torch.rand([16, 3, 50, 8]) \nk = torch.rand([16, 3, 50, 8]).transpose(-1, -2)\nv = torch.rand([16, 3, 50, 6])\nattn_mask = torch.triu(torch.ones(50, 50)) # shape: q_len x q_len\nkey_padding_mask = torch.zeros(16, 50)\nkey_padding_mask[[1, 3, 6, 15], -10:] = 1\nkey_padding_mask = key_padding_mask.bool()\nprint('attn_mask', attn_mask.shape, 'key_padding_mask', key_padding_mask.shape)\noutput, attn = ScaledDotProductAttention(24, 3, attn_dropout=.1)(q, k, v, attn_mask=attn_mask, key_padding_mask=key_padding_mask)\noutput.shape, attn.shape\n\nattn_mask torch.Size([50, 50]) key_padding_mask torch.Size([16, 50])\n\n\n(torch.Size([16, 3, 50, 6]), torch.Size([16, 3, 50, 50]))\n\n\n\nt = torch.rand(16, 50, 128)\noutput, attn = MultiheadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)(t, t, t, key_padding_mask=key_padding_mask, attn_mask=attn_mask)\noutput.shape, attn.shape\n\n(torch.Size([16, 50, 128]), torch.Size([16, 3, 50, 50]))\n\n\nTest multi-head attention with self-locality attention\n\n# lsa (locality self-sttention)\nt = torch.rand(16, 50, 128)\nattn_mask = torch.eye(50).reshape(1, 1, 50, 50).bool()\noutput, attn = MultiheadAttention(d_model=128, n_heads=8, lsa=True)(t, t, t, key_padding_mask=key_padding_mask, attn_mask=attn_mask)\noutput.shape, attn.shape\n\n(torch.Size([16, 50, 128]), torch.Size([16, 8, 50, 50]))\n\n\n\nt = torch.rand(16, 50, 128)\natt_mask = (torch.rand((50, 50)) > .85).float()\natt_mask[att_mask == 1] = -np.inf\n\nmha = MultiheadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)\noutput, attn = mha(t, t, t, attn_mask=att_mask)\ntest_eq(torch.isnan(output).sum().item(), 0)\ntest_eq(torch.isnan(attn).sum().item(), 0)\nloss = output[:2, :].sum()\ntest_eq(torch.isnan(loss).sum().item(), 0)\nloss.backward()\nfor n, p in mha.named_parameters(): \n if p.grad is not None:\n test_eq(torch.isnan(p.grad).sum().item(), 0)\n\n\nt = torch.rand(16, 50, 128)\nattn_mask = (torch.rand((50, 50)) > .85)\n\n# True values will be masked\nmha = MultiheadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)\noutput, attn = mha(t, t, t, attn_mask=att_mask)\ntest_eq(torch.isnan(output).sum().item(), 0)\ntest_eq(torch.isnan(attn).sum().item(), 0)\nloss = output[:2, :].sum()\ntest_eq(torch.isnan(loss).sum().item(), 0)\nloss.backward()\nfor n, p in mha.named_parameters(): \n if p.grad is not None:\n test_eq(torch.isnan(p.grad).sum().item(), 0)\n\n\nsource\n\n\nMultiConv1d\n\n MultiConv1d (ni, nf=None, kss=[1, 3, 5, 7], keep_original=False,\n separable=False, dim=1, **kwargs)\n\nModule that applies multiple convolutions with different kernel sizes\n\nt = torch.rand(16, 6, 37)\ntest_eq(MultiConv1d(6, None, kss=[1,3,5], keep_original=True)(t).shape, [16, 24, 37])\ntest_eq(MultiConv1d(6, 36, kss=[1,3,5], keep_original=False)(t).shape, [16, 36, 37])\ntest_eq(MultiConv1d(6, None, kss=[1,3,5], keep_original=True, dim=-1)(t).shape, [16, 6, 37*4])\ntest_eq(MultiConv1d(6, 60, kss=[1,3,5], keep_original=True)(t).shape, [16, 60, 37])\ntest_eq(MultiConv1d(6, 60, kss=[1,3,5], separable=True)(t).shape, [16, 60, 37])\n\n\nsource\n\n\nLSTMOutput\n\n LSTMOutput ()\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nt = ([1], [2], [3])\ntest_eq(LSTMOutput()(t), [1])\n\n\nsource\n\n\nemb_sz_rule\n\n emb_sz_rule (n_cat)\n\nRule of thumb to pick embedding size corresponding to n_cat (original from fastai)\n\ntest_eq(emb_sz_rule(7), 5)\n\n\nsource\n\n\nTSEmbedding\n\n TSEmbedding (ni, nf, std=0.01, padding_idx=None)\n\nEmbedding layer with truncated normal initialization adapted from fastai\n\nsource\n\n\nMultiEmbedding\n\n MultiEmbedding (c_in, n_cat_embeds, cat_embed_dims=None, cat_pos=None,\n std=0.01, cat_padding_idxs=None)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\na = alphabet[np.random.randint(0,3,40)]\nb = ALPHABET[np.random.randint(6,10,40)]\nc = np.random.rand(40).reshape(4,1,10)\nmap_a = {k:v for v,k in enumerate(np.unique(a))}\nmap_b = {k:v for v,k in enumerate(np.unique(b))}\nn_embeds = [len(m.keys()) for m in [map_a, map_b]]\nszs = [emb_sz_rule(n) for n in n_embeds]\na = np.asarray(a.map(map_a)).reshape(4,1,10)\nb = np.asarray(b.map(map_b)).reshape(4,1,10)\ninp = torch.from_numpy(np.concatenate((c,a,b), 1)).float()\nmemb = MultiEmbedding(3, n_embeds, cat_pos=[1,2])\n# registered buffers are part of the state_dict() but not module.parameters()\nassert all([(k in memb.state_dict().keys()) for k in ['cat_pos', 'cont_pos']])\nembeddings = memb(inp)\nprint(n_embeds, szs, inp.shape, embeddings.shape)\ntest_eq(embeddings.shape, (inp.shape[0],sum(szs)+1,inp.shape[-1]))\n\n[3, 4] [3, 3] torch.Size([4, 3, 10]) torch.Size([4, 7, 10])\n\n\n\nme = MultiEmbedding(3, 4, cat_pos=2)\ntest_eq(me.cat_embed[0].weight.shape, (4,3))\ntest_eq(me.cat_pos.cpu().item(), 2)", + "crumbs": [ + "Models", + "Layers" + ] + }, + { + "objectID": "models.tabfusiontransformer.html", + "href": "models.tabfusiontransformer.html", + "title": "TabFusionTransformer", + "section": "", + "text": "This is a a Pytorch implementeation of TabTransformerTransformer created by Ignacio Oguiza (oguiza@timeseriesAI.co)\nThis implementation is inspired by:\nHuang, X., Khetan, A., Cvitkovic, M., & Karnin, Z. (2020). TabTransformer: Tabular Data Modeling Using Contextual Embeddings. arXiv preprint https://arxiv.org/pdf/2012.06678\nOfficial repo: https://github.com/awslabs/autogluon/tree/master/tabular/src/autogluon/tabular/models/tab_transformer\n\nsource\n\nTabFusionTransformer\n\n TabFusionTransformer (classes, cont_names, c_out, d_model=32, n_layers=6,\n n_heads=8, d_k=None, d_v=None, d_ff=None,\n res_attention=True, attention_act='gelu',\n res_dropout=0.0, fc_mults=(4, 2), fc_dropout=0.0,\n fc_act=None, fc_skip=False, fc_bn=False,\n bn_final=False, init=True)\n\nClass that allows you to pass one or multiple inputs\n\nsource\n\n\nTabFusionBackbone\n\n TabFusionBackbone (classes, cont_names, d_model=32, n_layers=6,\n n_heads=8, d_k=None, d_v=None, d_ff=None, init=True,\n res_attention=True, attention_act='gelu',\n res_dropout=0.0)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nSequential\n\n Sequential (*args)\n\nClass that allows you to pass one or multiple inputs\n\nsource\n\n\nifnone\n\n ifnone (a, b)\n\nb if a is None else a\n\nfrom fastai.tabular.all import *\n\n\npath = untar_data(URLs.ADULT_SAMPLE)\ndf = pd.read_csv(path/'adult.csv')\ndls = TabularDataLoaders.from_csv(path/'adult.csv', path=path, y_names=\"salary\",\n cat_names = ['workclass', 'education', 'marital-status', 'occupation', 'relationship', 'race'],\n cont_names = ['age', 'fnlwgt', 'education-num'],\n procs = [Categorify, FillMissing, Normalize])\nx_cat, x_cont, yb = first(dls.train)\nmodel = TabFusionTransformer(dls.classes, dls.cont_names, dls.c)\ntest_eq(model(x_cat, x_cont).shape, (dls.train.bs, dls.c))\n\n\nsource\n\n\nTSTabFusionTransformer\n\n TSTabFusionTransformer (c_in, c_out, seq_len, classes, cont_names,\n d_model=32, n_layers=6, n_heads=8, d_k=None,\n d_v=None, d_ff=None, res_attention=True,\n attention_act='gelu', res_dropout=0.0,\n fc_mults=(1, 0.5), fc_dropout=0.0, fc_act=None,\n fc_skip=False, fc_bn=False, bn_final=False,\n init=True)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nclasses = {'education': ['#na#', '10th', '11th', '12th', '1st-4th', '5th-6th', '7th-8th', '9th', 'Assoc-acdm', 'Assoc-voc', 'Bachelors', 'Doctorate', \n 'HS-grad', 'Masters', 'Preschool', 'Prof-school', 'Some-college'],\n 'education-num_na': ['#na#', False, True],\n 'marital-status': ['#na#', 'Divorced', 'Married-AF-spouse', 'Married-civ-spouse', 'Married-spouse-absent', 'Never-married', 'Separated', 'Widowed'],\n 'occupation': ['#na#', '?', 'Adm-clerical', 'Armed-Forces', 'Craft-repair', 'Exec-managerial', 'Farming-fishing', 'Handlers-cleaners', 'Machine-op-inspct', \n 'Other-service', 'Priv-house-serv', 'Prof-specialty', 'Protective-serv', 'Sales', 'Tech-support', 'Transport-moving'],\n 'race': ['#na#', 'Amer-Indian-Eskimo', 'Asian-Pac-Islander', 'Black', 'Other', 'White'],\n 'relationship': ['#na#', 'Husband', 'Not-in-family', 'Other-relative', 'Own-child', 'Unmarried', 'Wife'],\n 'workclass': ['#na#', '?', 'Federal-gov', 'Local-gov', 'Never-worked', 'Private', 'Self-emp-inc', 'Self-emp-not-inc', 'State-gov', 'Without-pay']}\n\ncont_names = ['a', 'b', 'c']\nc_out = 6\nx_ts = torch.randn(64, 3, 10)\nx_cat = torch.randint(0,3,(64,7))\nx_cont = torch.randn(64,3)\nmodel = TSTabFusionTransformer(x_ts.shape[1], c_out, x_ts.shape[-1], classes, cont_names)\nx = (x_ts, (x_cat, x_cont))\ntest_eq(model(x).shape, (x_ts.shape[0], c_out))", + "crumbs": [ + "Models", + "Tabular models", + "TabFusionTransformer" + ] + }, + { + "objectID": "models.omniscalecnn.html", + "href": "models.omniscalecnn.html", + "title": "OmniScaleCNN", + "section": "", + "text": "This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co\n\n\nsource\n\ngenerate_layer_parameter_list\n\n generate_layer_parameter_list (start, end, layers, in_channel=1)\n\n\nsource\n\n\nget_out_channel_number\n\n get_out_channel_number (paramenter_layer, in_channel, prime_list)\n\n\nsource\n\n\nget_Prime_number_in_a_range\n\n get_Prime_number_in_a_range (start, end)\n\n\nsource\n\n\nOmniScaleCNN\n\n OmniScaleCNN (c_in, c_out, seq_len, layers=[1024, 229376],\n few_shot=False)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nbuild_layer_with_layer_parameter\n\n build_layer_with_layer_parameter (layer_parameters)\n\nformerly build_layer_with_layer_parameter\n\nsource\n\n\nSampaddingConv1D_BN\n\n SampaddingConv1D_BN (in_channels, out_channels, kernel_size)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 16\nc_in = 3\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, c_in, seq_len)\nm = create_model(OmniScaleCNN, c_in, c_out, seq_len)\ntest_eq(OmniScaleCNN(c_in, c_out, seq_len)(xb).shape, [bs, c_out])\nm\n\nOmniScaleCNN(\n (net): Sequential(\n (0): build_layer_with_layer_parameter(\n (conv_list): ModuleList(\n (0): SampaddingConv1D_BN(\n (padding): ConstantPad1d(padding=(0, 0), value=0)\n (conv1d): Conv1d(3, 56, kernel_size=(1,), stride=(1,))\n (bn): BatchNorm1d(56, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (1): SampaddingConv1D_BN(\n (padding): ConstantPad1d(padding=(0, 1), value=0)\n (conv1d): Conv1d(3, 56, kernel_size=(2,), stride=(1,))\n (bn): BatchNorm1d(56, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (2): SampaddingConv1D_BN(\n (padding): ConstantPad1d(padding=(1, 1), value=0)\n (conv1d): Conv1d(3, 56, kernel_size=(3,), stride=(1,))\n (bn): BatchNorm1d(56, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n )\n )\n (1): build_layer_with_layer_parameter(\n (conv_list): ModuleList(\n (0): SampaddingConv1D_BN(\n (padding): ConstantPad1d(padding=(0, 0), value=0)\n (conv1d): Conv1d(168, 227, kernel_size=(1,), stride=(1,))\n (bn): BatchNorm1d(227, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (1): SampaddingConv1D_BN(\n (padding): ConstantPad1d(padding=(0, 1), value=0)\n (conv1d): Conv1d(168, 227, kernel_size=(2,), stride=(1,))\n (bn): BatchNorm1d(227, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (2): SampaddingConv1D_BN(\n (padding): ConstantPad1d(padding=(1, 1), value=0)\n (conv1d): Conv1d(168, 227, kernel_size=(3,), stride=(1,))\n (bn): BatchNorm1d(227, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n )\n )\n (2): build_layer_with_layer_parameter(\n (conv_list): ModuleList(\n (0): SampaddingConv1D_BN(\n (padding): ConstantPad1d(padding=(0, 0), value=0)\n (conv1d): Conv1d(681, 510, kernel_size=(1,), stride=(1,))\n (bn): BatchNorm1d(510, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (1): SampaddingConv1D_BN(\n (padding): ConstantPad1d(padding=(0, 1), value=0)\n (conv1d): Conv1d(681, 510, kernel_size=(2,), stride=(1,))\n (bn): BatchNorm1d(510, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n )\n )\n )\n (gap): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Flatten(full=False)\n )\n (hidden): Linear(in_features=1020, out_features=2, bias=True)\n)", + "crumbs": [ + "Models", + "CNNs", + "OmniScaleCNN" + ] + }, + { + "objectID": "callback.core.html", + "href": "callback.core.html", + "title": "Callback", + "section": "", + "text": "Miscellaneous callbacks for timeseriesAI.", + "crumbs": [ + "Training", + "Callbacks", + "Callback" + ] + }, + { + "objectID": "callback.core.html#events", + "href": "callback.core.html#events", + "title": "Callback", + "section": "Events", + "text": "Events\nA callback can implement actions on the following events: * before_fit: called before doing anything, ideal for initial setup. * before_epoch: called at the beginning of each epoch, useful for any behavior you need to reset at each epoch. * before_train: called at the beginning of the training part of an epoch. * before_batch: called at the beginning of each batch, just after drawing said batch. It can be used to do any setup necessary for the batch (like hyper-parameter scheduling) or to change the input/target before it goes in the model (change of the input with techniques like mixup for instance). * after_pred: called after computing the output of the model on the batch. It can be used to change that output before it’s fed to the loss. * after_loss: called after the loss has been computed, but before the backward pass. It can be used to add any penalty to the loss (AR or TAR in RNN training for instance). * before_backward: called after the loss has been computed, but only in training mode (i.e. when the backward pass will be used) * after_backward: called after the backward pass, but before the update of the parameters. It can be used to do any change to the gradients before said update (gradient clipping for instance). * after_step: called after the step and before the gradients are zeroed. * after_batch: called at the end of a batch, for any clean-up before the next one. * after_train: called at the end of the training phase of an epoch. * before_validate: called at the beginning of the validation phase of an epoch, useful for any setup needed specifically for validation. * after_validate: called at the end of the validation part of an epoch. * after_epoch: called at the end of an epoch, for any clean-up before the next one. * after_fit: called at the end of training, for final clean-up.", + "crumbs": [ + "Training", + "Callbacks", + "Callback" + ] + }, + { + "objectID": "callback.core.html#learner-attributes", + "href": "callback.core.html#learner-attributes", + "title": "Callback", + "section": "Learner attributes", + "text": "Learner attributes\nWhen writing a callback, the following attributes of Learner are available:\n\nmodel: the model used for training/validation\ndata: the underlying DataLoaders\nloss_func: the loss function used\nopt: the optimizer used to udpate the model parameters\nopt_func: the function used to create the optimizer\ncbs: the list containing all Callbacks\ndl: current DataLoader used for iteration\nx/xb: last input drawn from self.dl (potentially modified by callbacks). xb is always a tuple (potentially with one element) and x is detuplified. You can only assign to xb.\ny/yb: last target drawn from self.dl (potentially modified by callbacks). yb is always a tuple (potentially with one element) and y is detuplified. You can only assign to yb.\npred: last predictions from self.model (potentially modified by callbacks)\nloss: last computed loss (potentially modified by callbacks)\nn_epoch: the number of epochs in this training\nn_iter: the number of iterations in the current self.dl\nepoch: the current epoch index (from 0 to n_epoch-1)\niter: the current iteration index in self.dl (from 0 to n_iter-1)\n\nThe following attributes are added by TrainEvalCallback and should be available unless you went out of your way to remove that callback: * train_iter: the number of training iterations done since the beginning of this training * pct_train: from 0. to 1., the percentage of training iterations completed * training: flag to indicate if we’re in training mode or not\nThe following attribute is added by Recorder and should be available unless you went out of your way to remove that callback: * smooth_loss: an exponentially-averaged version of the training loss", + "crumbs": [ + "Training", + "Callbacks", + "Callback" + ] + }, + { + "objectID": "callback.core.html#transform-scheduler", + "href": "callback.core.html#transform-scheduler", + "title": "Callback", + "section": "Transform scheduler", + "text": "Transform scheduler\n\nsource\n\nTransformScheduler\n\n TransformScheduler (schedule_func:<built-infunctioncallable>,\n show_plot:bool=False)\n\nA callback to schedule batch transforms during training based on a function (sched_lin, sched_exp, sched_cos (default), etc)\n\nTransformScheduler(SchedCos(1, 0))\n\nTransformScheduler(<fastai.callback.schedule._Annealer object>)\n\n\n\np = torch.linspace(0.,1,100)\nf = combine_scheds([0.3, 0.4, 0.3], [SchedLin(1.,1.), SchedCos(1.,0.), SchedLin(0.,.0), ])\nplt.plot(p, [f(o) for o in p]);\n\n\n\n\n\n\n\n\n\np = torch.linspace(0.,1,100)\nf = combine_scheds([0.3, 0.7], [SchedCos(0.,1.), SchedCos(1.,0.)])\nplt.plot(p, [f(o) for o in p]);", + "crumbs": [ + "Training", + "Callbacks", + "Callback" + ] + }, + { + "objectID": "callback.core.html#showgraph", + "href": "callback.core.html#showgraph", + "title": "Callback", + "section": "ShowGraph", + "text": "ShowGraph\n\nsource\n\nShowGraph\n\n ShowGraph (plot_metrics:bool=True, final_losses:bool=True,\n perc:float=0.5)\n\n(Modified) Update a graph of training and validation loss", + "crumbs": [ + "Training", + "Callbacks", + "Callback" + ] + }, + { + "objectID": "callback.core.html#savemodel", + "href": "callback.core.html#savemodel", + "title": "Callback", + "section": "SaveModel", + "text": "SaveModel\n\nsource\n\nSaveModel\n\n SaveModel (monitor='valid_loss', comp=None, min_delta=0.0, fname='model',\n every_epoch=False, at_end=False, with_opt=False,\n reset_on_fit=True, verbose=False)\n\nA TrackerCallback that saves the model’s best during training and loads it at the end with a verbose option.", + "crumbs": [ + "Training", + "Callbacks", + "Callback" + ] + }, + { + "objectID": "models.fcnplus.html", + "href": "models.fcnplus.html", + "title": "FCNPlus", + "section": "", + "text": "This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co\n\n\nsource\n\nFCNPlus\n\n FCNPlus (c_in, c_out, layers=[128, 256, 128], kss=[7, 5, 3], coord=False,\n separable=False, use_bn=False, fc_dropout=0.0, zero_norm=False,\n act=<class 'torch.nn.modules.activation.ReLU'>, act_kwargs={},\n residual=False, custom_head=None)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nxb = torch.rand(16, 3, 10)\ntest_eq(FCNPlus(3, 2)(xb).shape, [xb.shape[0], 2])\ntest_eq(FCNPlus(3, 2, coord=True, separable=True, act=Swish, residual=True)(xb).shape, [xb.shape[0], 2])\ntest_eq(nn.Sequential(*FCNPlus(3, 2).children())(xb).shape, [xb.shape[0], 2])\ntest_eq(FCNPlus(3, 2, custom_head=partial(mlp_head, seq_len=10))(xb).shape, [xb.shape[0], 2])\n\n\nfrom tsai.models.utils import *\n\n\nmodel = build_ts_model(FCNPlus, 2, 3)\nmodel[-1]\n\nSequential(\n (0): AdaptiveAvgPool1d(output_size=1)\n (1): Squeeze(dim=-1)\n (2): Linear(in_features=128, out_features=3, bias=True)\n)\n\n\n\nfrom tsai.models.FCN import *\n\n\ntest_eq(count_parameters(FCN(3,2)), count_parameters(FCNPlus(3,2)))\n\n\nFCNPlus(3,2)\n\nFCNPlus(\n (backbone): _FCNBlockPlus(\n (convblock1): ConvBlock(\n (0): Conv1d(3, 128, kernel_size=(7,), stride=(1,), padding=(3,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (convblock2): ConvBlock(\n (0): Conv1d(128, 256, kernel_size=(5,), stride=(1,), padding=(2,), bias=False)\n (1): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (convblock3): ConvBlock(\n (0): Conv1d(256, 128, kernel_size=(3,), stride=(1,), padding=(1,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (add): Sequential()\n )\n (head): Sequential(\n (0): AdaptiveAvgPool1d(output_size=1)\n (1): Squeeze(dim=-1)\n (2): Linear(in_features=128, out_features=2, bias=True)\n )\n)", + "crumbs": [ + "Models", + "CNNs", + "FCNPlus" + ] + }, + { + "objectID": "models.resnetplus.html", + "href": "models.resnetplus.html", + "title": "ResNetPlus", + "section": "", + "text": "This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co\n\n\nsource\n\nResNetPlus\n\n ResNetPlus (c_in, c_out, seq_len=None, nf=64, sa=False, se=None,\n fc_dropout=0.0, concat_pool=False, flatten=False,\n custom_head=None, y_range=None, ks=[7, 5, 3], coord=False,\n separable=False, bn_1st=True, zero_norm=False, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={})\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nResBlockPlus\n\n ResBlockPlus (ni, nf, ks=[7, 5, 3], coord=False, separable=False,\n bn_1st=True, zero_norm=False, sa=False, se=None, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={})\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nfrom tsai.models.layers import Swish\n\n\nxb = torch.rand(2, 3, 4)\ntest_eq(ResNetPlus(3,2)(xb).shape, [xb.shape[0], 2])\ntest_eq(ResNetPlus(3,2,coord=True, separable=True, bn_1st=False, zero_norm=True, act=Swish, act_kwargs={}, fc_dropout=0.5)(xb).shape, [xb.shape[0], 2])\ntest_eq(count_parameters(ResNetPlus(3, 2)), 479490) # for (3,2)\n\n\nfrom tsai.models.ResNet import *\n\n\ntest_eq(count_parameters(ResNet(3, 2)), count_parameters(ResNetPlus(3, 2))) # for (3,2)\n\n\nm = ResNetPlus(3, 2, zero_norm=True, coord=True, separable=True)\nprint('n_params:', count_parameters(m))\nprint(m)\nprint(check_weight(m, is_bn)[0])\n\nn_params: 114820\nResNetPlus(\n (backbone): Sequential(\n (0): ResBlockPlus(\n (convblock1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(4, 4, kernel_size=(7,), stride=(1,), padding=(3,), groups=4, bias=False)\n (pointwise_conv): Conv1d(4, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (convblock2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(65, 65, kernel_size=(5,), stride=(1,), padding=(2,), groups=65, bias=False)\n (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (convblock3): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(65, 65, kernel_size=(3,), stride=(1,), padding=(1,), groups=65, bias=False)\n (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (shortcut): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(4, 64, kernel_size=(1,), stride=(1,), bias=False)\n (2): BatchNorm1d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (add): Add\n (act): ReLU()\n )\n (1): ResBlockPlus(\n (convblock1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(65, 65, kernel_size=(7,), stride=(1,), padding=(3,), groups=65, bias=False)\n (pointwise_conv): Conv1d(65, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (convblock2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(129, 129, kernel_size=(5,), stride=(1,), padding=(2,), groups=129, bias=False)\n (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (convblock3): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(129, 129, kernel_size=(3,), stride=(1,), padding=(1,), groups=129, bias=False)\n (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (shortcut): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(65, 128, kernel_size=(1,), stride=(1,), bias=False)\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (add): Add\n (act): ReLU()\n )\n (2): ResBlockPlus(\n (convblock1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(129, 129, kernel_size=(7,), stride=(1,), padding=(3,), groups=129, bias=False)\n (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (convblock2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(129, 129, kernel_size=(5,), stride=(1,), padding=(2,), groups=129, bias=False)\n (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (convblock3): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(129, 129, kernel_size=(3,), stride=(1,), padding=(1,), groups=129, bias=False)\n (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (shortcut): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (add): Add\n (act): ReLU()\n )\n )\n (head): Sequential(\n (0): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Reshape(bs)\n )\n (1): Linear(in_features=128, out_features=2, bias=True)\n )\n)\n[1. 1. 0. 1. 1. 1. 0. 1. 1. 1. 0. 1.]", + "crumbs": [ + "Models", + "CNNs", + "ResNetPlus" + ] + }, + { + "objectID": "callback.experimental.html", + "href": "callback.experimental.html", + "title": "Experimental Callbacks", + "section": "", + "text": "Miscellaneous experimental callbacks for timeseriesAI.", + "crumbs": [ + "Training", + "Callbacks", + "Experimental Callbacks" + ] + }, + { + "objectID": "callback.experimental.html#gamblers-loss-noisy-labels", + "href": "callback.experimental.html#gamblers-loss-noisy-labels", + "title": "Experimental Callbacks", + "section": "Gambler’s loss: noisy labels", + "text": "Gambler’s loss: noisy labels\n\nsource\n\ngambler_loss\n\n gambler_loss (reward=2)\n\n\nsource\n\n\nGamblersCallback\n\n GamblersCallback (after_create=None, before_fit=None, before_epoch=None,\n before_train=None, before_batch=None, after_pred=None,\n after_loss=None, before_backward=None,\n after_cancel_backward=None, after_backward=None,\n before_step=None, after_cancel_step=None,\n after_step=None, after_cancel_batch=None,\n after_batch=None, after_cancel_train=None,\n after_train=None, before_validate=None,\n after_cancel_validate=None, after_validate=None,\n after_cancel_epoch=None, after_epoch=None,\n after_cancel_fit=None, after_fit=None)\n\nA callback to use metrics with gambler’s loss\n\nfrom tsai.data.external import *\nfrom tsai.data.core import *\nfrom tsai.models.InceptionTime import *\nfrom tsai.models.layers import *\nfrom tsai.learner import *\nfrom fastai.metrics import *\nfrom tsai.metrics import *\n\n\nX, y, splits = get_UCR_data('NATOPS', return_split=False)\ntfms = [None, TSCategorize()]\ndsets = TSDatasets(X, y, tfms=tfms, splits=splits)\ndls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[64, 128])\nloss_func = gambler_loss()\nlearn = ts_learner(dls, InceptionTime(dls.vars, dls.c + 1), loss_func=loss_func, cbs=GamblersCallback, metrics=[accuracy])\nlearn.fit_one_cycle(1)\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\ntime\n\n\n\n\n0\n1.840055\n1.945397\n0.166667\n00:05", + "crumbs": [ + "Training", + "Callbacks", + "Experimental Callbacks" + ] + }, + { + "objectID": "callback.experimental.html#uncertainty-based-data-augmentation", + "href": "callback.experimental.html#uncertainty-based-data-augmentation", + "title": "Experimental Callbacks", + "section": "Uncertainty-based data augmentation", + "text": "Uncertainty-based data augmentation\n\nsource\n\nUBDAug\n\n UBDAug (batch_tfms:list, N:int=2, C:int=4, S:int=1)\n\nA callback to implement the uncertainty-based data augmentation.\n\nfrom tsai.models.utils import *\n\n\nX, y, splits = get_UCR_data('NATOPS', return_split=False)\ntfms = [None, TSCategorize()]\ndsets = TSDatasets(X, y, tfms=tfms, splits=splits)\ndls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, batch_tfms=[TSStandardize()])\nmodel = build_ts_model(InceptionTime, dls=dls)\nTS_tfms = [TSMagScale(.75, p=.5), TSMagWarp(.1, p=0.5), TSWindowWarp(.25, p=.5), \n TSSmooth(p=0.5), TSRandomResizedCrop(.1, p=.5), \n TSRandomCropPad(.3, p=0.5), \n TSMagAddNoise(.5, p=.5)]\n\nubda_cb = UBDAug(TS_tfms, N=2, C=4, S=2)\nlearn = ts_learner(dls, model, cbs=ubda_cb, metrics=accuracy)\nlearn.fit_one_cycle(1)\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\ntime\n\n\n\n\n0\n1.817080\n1.791119\n0.077778\n00:14", + "crumbs": [ + "Training", + "Callbacks", + "Experimental Callbacks" + ] + }, + { + "objectID": "models.transformermodel.html", + "href": "models.transformermodel.html", + "title": "TransformerModel", + "section": "", + "text": "This is an unofficial PyTorch implementation created by Ignacio Oguiza - oguiza@timeseriesAI.co\n\n\nsource\n\nTransformerModel\n\n TransformerModel (c_in, c_out, d_model=64, n_head=1, d_ffn=128,\n dropout=0.1, activation='relu', n_layers=1)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 16\nnvars = 3\nseq_len = 96\nc_out = 2\nxb = torch.rand(bs, nvars, seq_len)\n\n\nmodel = TransformerModel(nvars, c_out, d_model=64, n_head=1, d_ffn=128, dropout=0.1, activation='gelu', n_layers=3)\ntest_eq(model(xb).shape, [bs, c_out])\nprint(count_parameters(model))\nmodel\n\n100930\n\n\nTransformerModel(\n (permute): Permute(dims=2, 0, 1)\n (inlinear): Linear(in_features=3, out_features=64, bias=True)\n (relu): ReLU()\n (transformer_encoder): TransformerEncoder(\n (layers): ModuleList(\n (0): TransformerEncoderLayer(\n (self_attn): MultiheadAttention(\n (out_proj): NonDynamicallyQuantizableLinear(in_features=64, out_features=64, bias=True)\n )\n (linear1): Linear(in_features=64, out_features=128, bias=True)\n (dropout): Dropout(p=0.1, inplace=False)\n (linear2): Linear(in_features=128, out_features=64, bias=True)\n (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)\n (norm2): LayerNorm((64,), eps=1e-05, elementwise_affine=True)\n (dropout1): Dropout(p=0.1, inplace=False)\n (dropout2): Dropout(p=0.1, inplace=False)\n )\n (1): TransformerEncoderLayer(\n (self_attn): MultiheadAttention(\n (out_proj): NonDynamicallyQuantizableLinear(in_features=64, out_features=64, bias=True)\n )\n (linear1): Linear(in_features=64, out_features=128, bias=True)\n (dropout): Dropout(p=0.1, inplace=False)\n (linear2): Linear(in_features=128, out_features=64, bias=True)\n (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)\n (norm2): LayerNorm((64,), eps=1e-05, elementwise_affine=True)\n (dropout1): Dropout(p=0.1, inplace=False)\n (dropout2): Dropout(p=0.1, inplace=False)\n )\n (2): TransformerEncoderLayer(\n (self_attn): MultiheadAttention(\n (out_proj): NonDynamicallyQuantizableLinear(in_features=64, out_features=64, bias=True)\n )\n (linear1): Linear(in_features=64, out_features=128, bias=True)\n (dropout): Dropout(p=0.1, inplace=False)\n (linear2): Linear(in_features=128, out_features=64, bias=True)\n (norm1): LayerNorm((64,), eps=1e-05, elementwise_affine=True)\n (norm2): LayerNorm((64,), eps=1e-05, elementwise_affine=True)\n (dropout1): Dropout(p=0.1, inplace=False)\n (dropout2): Dropout(p=0.1, inplace=False)\n )\n )\n (norm): LayerNorm((64,), eps=1e-05, elementwise_affine=True)\n )\n (transpose): Transpose(1, 0)\n (max): Max(dim=1, keepdim=False)\n (outlinear): Linear(in_features=64, out_features=2, bias=True)\n)", + "crumbs": [ + "Models", + "Transformers", + "TransformerModel" + ] + }, + { + "objectID": "index.html#description", + "href": "index.html#description", + "title": "tsai", + "section": "Description", + "text": "Description\n\nState-of-the-art Deep Learning library for Time Series and Sequences.\n\ntsai is an open-source deep learning package built on top of Pytorch & fastai focused on state-of-the-art techniques for time series tasks like classification, regression, forecasting, imputation…\ntsai is currently under active development by timeseriesAI.", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "index.html#whats-new", + "href": "index.html#whats-new", + "title": "tsai", + "section": "What’s new:", + "text": "What’s new:\nDuring the last few releases, here are some of the most significant additions to tsai:\n\nNew models: PatchTST (Accepted by ICLR 2023), RNN with Attention (RNNAttention, LSTMAttention, GRUAttention), TabFusionTransformer, …\nNew datasets: we have increased the number of datasets you can download using tsai:\n\n128 univariate classification datasets\n30 multivariate classification datasets\n15 regression datasets\n62 forecasting datasets\n9 long term forecasting datasets\n\nNew tutorials: PatchTST. Based on some of your requests, we are planning to release additional tutorials on data preparation and forecasting.\nNew functionality: sklearn-type pipeline transforms, walk-foward cross validation, reduced RAM requirements, and a lot of new functionality to perform more accurate time series forecasts.\nPytorch 2.0 support.", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "index.html#installation", + "href": "index.html#installation", + "title": "tsai", + "section": "Installation", + "text": "Installation\n\nPip install\nYou can install the latest stable version from pip using:\npip install tsai\nIf you plan to develop tsai yourself, or want to be on the cutting edge, you can use an editable install. First install PyTorch, and then:\ngit clone https://github.com/timeseriesAI/tsai\npip install -e \"tsai[dev]\"\nNote: starting with tsai 0.3.0 tsai will only install hard dependencies. Other soft dependencies (which are only required for selected tasks) will not be installed by default (this is the recommended approach. If you require any of the dependencies that is not installed, tsai will ask you to install it when necessary). If you still want to install tsai with all its dependencies you can do it by running:\npip install tsai[extras]\n\n\nConda install\nYou can also install tsai using conda (note that if you replace conda with mamba the install process will be much faster and more reliable):\nconda install -c timeseriesai tsai", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "index.html#documentation", + "href": "index.html#documentation", + "title": "tsai", + "section": "Documentation", + "text": "Documentation\nHere’s the link to the documentation.", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "index.html#available-models", + "href": "index.html#available-models", + "title": "tsai", + "section": "Available models:", + "text": "Available models:\nHere’s a list with some of the state-of-the-art models available in tsai:\n\nLSTM (Hochreiter, 1997) (paper)\nGRU (Cho, 2014) (paper)\nMLP - Multilayer Perceptron (Wang, 2016) (paper)\nFCN - Fully Convolutional Network (Wang, 2016) (paper)\nResNet - Residual Network (Wang, 2016) (paper)\nLSTM-FCN (Karim, 2017) (paper)\nGRU-FCN (Elsayed, 2018) (paper)\nmWDN - Multilevel wavelet decomposition network (Wang, 2018) (paper)\nTCN - Temporal Convolutional Network (Bai, 2018) (paper)\nMLSTM-FCN - Multivariate LSTM-FCN (Karim, 2019) (paper)\nInceptionTime (Fawaz, 2019) (paper)\nRocket (Dempster, 2019) (paper)\nXceptionTime (Rahimian, 2019) (paper)\nResCNN - 1D-ResCNN (Zou , 2019) (paper)\nTabModel - modified from fastai’s TabularModel\nOmniScale - Omni-Scale 1D-CNN (Tang, 2020) (paper)\nTST - Time Series Transformer (Zerveas, 2020) (paper)\nTabTransformer (Huang, 2020) (paper)\nTSiT Adapted from ViT (Dosovitskiy, 2020) (paper)\nMiniRocket (Dempster, 2021) (paper)\nXCM - An Explainable Convolutional Neural Network (Fauvel, 2021) (paper)\ngMLP - Gated Multilayer Perceptron (Liu, 2021) (paper)\nTSPerceiver - Adapted from Perceiver IO (Jaegle, 2021) (paper)\nGatedTabTransformer (Cholakov, 2022) (paper)\nTSSequencerPlus - Adapted from Sequencer (Tatsunami, 2022) (paper)\nPatchTST - (Nie, 2022) (paper)\n\nplus other custom models like: TransformerModel, LSTMAttention, GRUAttention, …", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "index.html#how-to-start-using-tsai", + "href": "index.html#how-to-start-using-tsai", + "title": "tsai", + "section": "How to start using tsai?", + "text": "How to start using tsai?\nTo get to know the tsai package, we’d suggest you start with this notebook in Google Colab: 01_Intro_to_Time_Series_Classification It provides an overview of a time series classification task.\nWe have also develop many other tutorial notebooks.\nTo use tsai in your own notebooks, the only thing you need to do after you have installed the package is to run this:\nfrom tsai.all import *", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "index.html#examples", + "href": "index.html#examples", + "title": "tsai", + "section": "Examples", + "text": "Examples\nThese are just a few examples of how you can use tsai:\n\nBinary, univariate classification\nTraining:\nfrom tsai.basics import *\n\nX, y, splits = get_classification_data('ECG200', split_data=False)\ntfms = [None, TSClassification()]\nbatch_tfms = TSStandardize()\nclf = TSClassifier(X, y, splits=splits, path='models', arch=\"InceptionTimePlus\", tfms=tfms, batch_tfms=batch_tfms, metrics=accuracy, cbs=ShowGraph())\nclf.fit_one_cycle(100, 3e-4)\nclf.export(\"clf.pkl\") \nInference:\nfrom tsai.inference import load_learner\n\nclf = load_learner(\"models/clf.pkl\")\nprobas, target, preds = clf.get_X_preds(X[splits[1]], y[splits[1]])\n\n\nMulti-class, multivariate classification\nTraining:\nfrom tsai.basics import *\n\nX, y, splits = get_classification_data('LSST', split_data=False)\ntfms = [None, TSClassification()]\nbatch_tfms = TSStandardize(by_sample=True)\nmv_clf = TSClassifier(X, y, splits=splits, path='models', arch=\"InceptionTimePlus\", tfms=tfms, batch_tfms=batch_tfms, metrics=accuracy, cbs=ShowGraph())\nmv_clf.fit_one_cycle(10, 1e-2)\nmv_clf.export(\"mv_clf.pkl\")\nInference:\nfrom tsai.inference import load_learner\n\nmv_clf = load_learner(\"models/mv_clf.pkl\")\nprobas, target, preds = mv_clf.get_X_preds(X[splits[1]], y[splits[1]])\n\n\nMultivariate Regression\nTraining:\nfrom tsai.basics import *\n\nX, y, splits = get_regression_data('AppliancesEnergy', split_data=False)\ntfms = [None, TSRegression()]\nbatch_tfms = TSStandardize(by_sample=True)\nreg = TSRegressor(X, y, splits=splits, path='models', arch=\"TSTPlus\", tfms=tfms, batch_tfms=batch_tfms, metrics=rmse, cbs=ShowGraph(), verbose=True)\nreg.fit_one_cycle(100, 3e-4)\nreg.export(\"reg.pkl\")\nInference:\nfrom tsai.inference import load_learner\n\nreg = load_learner(\"models/reg.pkl\")\nraw_preds, target, preds = reg.get_X_preds(X[splits[1]], y[splits[1]])\nThe ROCKETs (RocketClassifier, RocketRegressor, MiniRocketClassifier, MiniRocketRegressor, MiniRocketVotingClassifier or MiniRocketVotingRegressor) are somewhat different models. They are not actually deep learning models (although they use convolutions) and are used in a different way.\n⚠️ You’ll also need to install sktime to be able to use them. You can install it separately:\npip install sktime\nor use:\npip install tsai[extras]\nTraining:\nfrom sklearn.metrics import mean_squared_error, make_scorer\nfrom tsai.data.external import get_Monash_regression_data\nfrom tsai.models.MINIROCKET import MiniRocketRegressor\n\nX_train, y_train, *_ = get_Monash_regression_data('AppliancesEnergy')\nrmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)\nreg = MiniRocketRegressor(scoring=rmse_scorer)\nreg.fit(X_train, y_train)\nreg.save('MiniRocketRegressor')\nInference:\nfrom sklearn.metrics import mean_squared_error\nfrom tsai.data.external import get_Monash_regression_data\nfrom tsai.models.MINIROCKET import load_minirocket\n\n*_, X_test, y_test = get_Monash_regression_data('AppliancesEnergy')\nreg = load_minirocket('MiniRocketRegressor')\ny_pred = reg.predict(X_test)\nmean_squared_error(y_test, y_pred, squared=False)\n\n\nForecasting\nYou can use tsai for forecast in the following scenarios:\n\nunivariate or multivariate time series input\nunivariate or multivariate time series output\nsingle or multi-step ahead\n\nYou’ll need to: * prepare X (time series input) and the target y (see documentation) * select PatchTST or one of tsai’s models ending in Plus (TSTPlus, InceptionTimePlus, TSiTPlus, etc). The model will auto-configure a head to yield an output with the same shape as the target input y.\n\nSingle step\nTraining:\nfrom tsai.basics import *\n\nts = get_forecasting_time_series(\"Sunspots\").values\nX, y = SlidingWindow(60, horizon=1)(ts)\nsplits = TimeSplitter(235)(y) \ntfms = [None, TSForecasting()]\nbatch_tfms = TSStandardize()\nfcst = TSForecaster(X, y, splits=splits, path='models', tfms=tfms, batch_tfms=batch_tfms, bs=512, arch=\"TSTPlus\", metrics=mae, cbs=ShowGraph())\nfcst.fit_one_cycle(50, 1e-3)\nfcst.export(\"fcst.pkl\")\nInference:\nfrom tsai.inference import load_learner\n\nfcst = load_learner(\"models/fcst.pkl\", cpu=False)\nraw_preds, target, preds = fcst.get_X_preds(X[splits[1]], y[splits[1]])\nraw_preds.shape\n# torch.Size([235, 1])\n\n\nMulti-step\nThis example show how to build a 3-step ahead univariate forecast.\nTraining:\nfrom tsai.basics import *\n\nts = get_forecasting_time_series(\"Sunspots\").values\nX, y = SlidingWindow(60, horizon=3)(ts)\nsplits = TimeSplitter(235, fcst_horizon=3)(y) \ntfms = [None, TSForecasting()]\nbatch_tfms = TSStandardize()\nfcst = TSForecaster(X, y, splits=splits, path='models', tfms=tfms, batch_tfms=batch_tfms, bs=512, arch=\"TSTPlus\", metrics=mae, cbs=ShowGraph())\nfcst.fit_one_cycle(50, 1e-3)\nfcst.export(\"fcst.pkl\")\nInference:\nfrom tsai.inference import load_learner\nfcst = load_learner(\"models/fcst.pkl\", cpu=False)\nraw_preds, target, preds = fcst.get_X_preds(X[splits[1]], y[splits[1]])\nraw_preds.shape\n# torch.Size([235, 3])", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "index.html#input-data-format", + "href": "index.html#input-data-format", + "title": "tsai", + "section": "Input data format", + "text": "Input data format\nThe input format for all time series models and image models in tsai is the same. An np.ndarray (or array-like object like zarr, etc) with 3 dimensions:\n[# samples x # variables x sequence length]\nThe input format for tabular models in tsai (like TabModel, TabTransformer and TabFusionTransformer) is a pandas dataframe. See example.", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "index.html#how-to-contribute-to-tsai", + "href": "index.html#how-to-contribute-to-tsai", + "title": "tsai", + "section": "How to contribute to tsai?", + "text": "How to contribute to tsai?\nWe welcome contributions of all kinds. Development of enhancements, bug fixes, documentation, tutorial notebooks, …\nWe have created a guide to help you start contributing to tsai. You can read it here.", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "index.html#enterprise-support-and-consulting-services", + "href": "index.html#enterprise-support-and-consulting-services", + "title": "tsai", + "section": "Enterprise support and consulting services:", + "text": "Enterprise support and consulting services:\nWant to make the most out of timeseriesAI/tsai in a professional setting? Let us help. Send us an email to learn more: info@timeseriesai.co", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "index.html#citing-tsai", + "href": "index.html#citing-tsai", + "title": "tsai", + "section": "Citing tsai", + "text": "Citing tsai\nIf you use tsai in your research please use the following BibTeX entry:\n@Misc{tsai,\n author = {Ignacio Oguiza},\n title = {tsai - A state-of-the-art deep learning library for time series and sequential data},\n howpublished = {Github},\n year = {2023},\n url = {https://github.com/timeseriesAI/tsai}\n}", + "crumbs": [ + "tsai" + ] + }, + { + "objectID": "data.image.html", + "href": "data.image.html", + "title": "Imaging Time Series", + "section": "", + "text": "Main functions used to transform time series into TSImage tensors.\n\n\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, return_split=False)\n\n\nsource\n\nToTSImage\n\n ToTSImage (enc=None, dec=None, split_idx=None, order=None)\n\nDelegates (__call__,decode,setup) to (encodes,decodes,setups) if split_idx matches\n\nsource\n\n\nTSImage\n\n TSImage (x, **kwargs)\n\nA Tensor which support subclass pickling, and maintains metadata when casting or after methods\n\nsource\n\n\nTSToPlot\n\n TSToPlot (size:Optional[int]=224, dpi:int=100, lw=1, **kwargs)\n\nTransforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by creating a matplotlib plot.\n\nout = TSToPlot()(TSTensor(X[:2]), split_idx=0)\nprint(out.shape)\nout[0].show()\n\ntorch.Size([2, 3, 224, 224])\n\n\n\n\n\n\n\n\n\n\nsource\n\n\nTSToMat\n\n TSToMat (size=224, dpi=100, cmap=None, **kwargs)\n\nTransforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by creating a matplotlib matrix. Input data must be normalized with a range(-1, 1)\n\nout = TSToMat()(TSTensor(X[:2]), split_idx=0)\nprint(out.shape)\nout[0].show()\n\ntorch.Size([2, 3, 224, 224])\n\n\n\n\n\n\n\n\n\n\nout = TSToMat(cmap='spring')(TSTensor(X[:2]), split_idx=0)\nprint(out.shape)\nout[0].show()\n\ntorch.Size([2, 3, 224, 224])\n\n\n\n\n\n\n\n\n\n\nsource\n\n\nTSToJRP\n\n TSToJRP (size=224, cmap=None, dimension=1, time_delay=1, threshold=None,\n percentage=10)\n\nTransforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by applying Joint Recurrence Plot\n\nsource\n\n\nTSToRP\n\n TSToRP (size=224, cmap=None, dimension=1, time_delay=1, threshold=None,\n percentage=10, flatten=False)\n\nTransforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by applying Recurrence Plot. It requires input to be previously normalized between -1 and 1\n\nsource\n\n\nTSToMTF\n\n TSToMTF (size=224, cmap=None, n_bins=5, image_size=1.0,\n strategy='quantile', overlapping=False, flatten=False)\n\nTransforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by applying Markov Transition Field\n\nsource\n\n\nTSToGASF\n\n TSToGASF (size=224, cmap=None, range=None, image_size=1.0,\n sample_range=(-1, 1), method='summation', overlapping=False,\n flatten=False)\n\nTransforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by applying Gramian Angular Summation Field. It requires either input to be previously normalized between -1 and 1 or set range to (-1, 1)\n\nsource\n\n\nTSToGADF\n\n TSToGADF (size=224, cmap=None, range=None, image_size=1.0,\n sample_range=(-1, 1), method='summation', overlapping=False,\n flatten=False)\n\nTransforms a time series batch to a 4d TSImage (bs, n_vars, size, size) by applying Gramian Angular Difference Field. It requires either input to be previously normalized between -1 and 1 or set range to (-1, 1)\n\nout = TSToRP()(TSTensor(X[:2]), split_idx=0)\nprint(out.shape)\nout[0].show()\n\ntorch.Size([2, 24, 224, 224])\n\n\n\n\n\n\n\n\n\n\no = TSTensor(X[0][1][None])\nencoder = RecurrencePlot()\na = encoder.fit_transform(o.cpu().numpy())[0]\no = TSTensor(X[0])\nencoder = RecurrencePlot()\nb = encoder.fit_transform(o.cpu().numpy())[1]\ntest_eq(a,b) # channels can all be processed in parallel\n\n\ntest_eq(TSToRP()(TSTensor(X[0]), split_idx=False)[0], TSToRP()(TSTensor(X[0][0][None]), split_idx=False)[0])\ntest_eq(TSToRP()(TSTensor(X[0]), split_idx=False)[1], TSToRP()(TSTensor(X[0][1][None]), split_idx=False)[0])\ntest_eq(TSToRP()(TSTensor(X[0]), split_idx=False)[2], TSToRP()(TSTensor(X[0][2][None]), split_idx=False)[0])\n\n\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, return_split=False)\ntfms = [None, Categorize()]\nbts = [[TSNormalize(), TSToPlot(100)],\n [TSNormalize(), TSToMat(100)],\n [TSNormalize(), TSToGADF(100)],\n [TSNormalize(), TSToGASF(100)],\n [TSNormalize(), TSToMTF(100)],\n [TSNormalize(), TSToRP(100)]]\nbtns = ['Plot', 'Mat', 'GADF', 'GASF', 'MTF', 'RP']\ndsets = TSDatasets(X, y, tfms=tfms, splits=splits)\nfor i, (bt, btn) in enumerate(zip(bts, btns)):\n dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=8, batch_tfms=bt)\n test_eq(dls.vars, 3 if i <2 else X.shape[1])\n test_eq(dls.vars, 3 if i <2 else X.shape[1])\n test_eq(dls.len, (100,100))\n xb, yb = dls.train.one_batch()\n print(i, btn, xb, xb.dtype, xb.min(), xb.max())\n xb[0].show()\n plt.show()\n\n0 Plot TSImage(shape:torch.Size([8, 3, 100, 100])) torch.float32 0.054901961237192154 1.0\n1 Mat TSImage(shape:torch.Size([8, 3, 100, 100])) torch.float32 0.019607843831181526 1.0\n2 GADF TSImage(shape:torch.Size([8, 24, 100, 100])) torch.float32 2.980232238769531e-07 0.9999997019767761\n3 GASF TSImage(shape:torch.Size([8, 24, 100, 100])) torch.float32 0.0 0.938302218914032\n4 MTF TSImage(shape:torch.Size([8, 24, 100, 100])) torch.float32 0.0 1.0\n5 RP TSImage(shape:torch.Size([8, 24, 100, 100])) torch.float32 0.0 0.8106333613395691\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nThe simplest way to train a model using time series to image transforms is this:\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, return_split=False)\ntfms = [None, Categorize()]\nbatch_tfms = [TSNormalize(), TSToGADF(224)]\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\nlearn = tsimage_learner(dls, xresnet34)\nlearn.fit_one_cycle(10)", + "crumbs": [ + "Data", + "Imaging Time Series" + ] + }, + { + "objectID": "callback.mvp.html", + "href": "callback.mvp.html", + "title": "MVP (aka TSBERT)", + "section": "", + "text": "Self-Supervised Pretraining of Time Series Models\n\nMasked Value Predictor callback used to predict time series step values after a binary mask has been applied.\n\nsource\n\nself_mask\n\n self_mask (o)\n\n\nsource\n\n\ncreate_future_mask\n\n create_future_mask (o, r=0.15, sync=False)\n\n\nsource\n\n\ncreate_variable_mask\n\n create_variable_mask (o, r=0.15)\n\n\nsource\n\n\ncreate_subsequence_mask\n\n create_subsequence_mask (o, r=0.15, lm=3, stateful=True, sync=False)\n\n\nt = torch.rand(16, 3, 100)\nmask = create_subsequence_mask(t, sync=False)\ntest_eq(mask.shape, t.shape)\nmask = create_subsequence_mask(t, sync=True)\ntest_eq(mask.shape, t.shape)\nmask = create_variable_mask(t)\ntest_eq(mask.shape, t.shape)\nmask = create_future_mask(t)\ntest_eq(mask.shape, t.shape)\n\n\no = torch.randn(2, 3, 4)\no[o>.5] = np.nan\ntest_eq(torch.isnan(self_mask(o)).sum(), 0)\n\n\nt = torch.rand(16, 30, 100)\nmask = create_subsequence_mask(t, r=.15) # default settings\ntest_eq(mask.dtype, torch.bool)\nplt.figure(figsize=(10, 3))\nplt.pcolormesh(mask[0], cmap='cool')\nplt.title(f'sample 0 subsequence mask (sync=False) - default mean: {mask[0].float().mean().item():.3f}')\nplt.show()\nplt.figure(figsize=(10, 3))\nplt.pcolormesh(mask[1], cmap='cool')\nplt.title(f'sample 1 subsequence mask (sync=False) - default mean: {mask[1].float().mean().item():.3f}')\nplt.show()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nt = torch.rand(16, 30, 100)\nmask = create_subsequence_mask(t, r=.5) # 50% of values masked\ntest_eq(mask.dtype, torch.bool)\nplt.figure(figsize=(10, 3))\nplt.pcolormesh(mask[0], cmap='cool')\nplt.title(f'sample 0 subsequence mask (r=.5) mean: {mask[0].float().mean().item():.3f}')\nplt.show()\n\n\n\n\n\n\n\n\n\nt = torch.rand(16, 30, 100)\nmask = create_subsequence_mask(t, lm=5) # average length of mask = 5 \ntest_eq(mask.dtype, torch.bool)\nplt.figure(figsize=(10, 3))\nplt.pcolormesh(mask[0], cmap='cool')\nplt.title(f'sample 0 subsequence mask (lm=5) mean: {mask[0].float().mean().item():.3f}')\nplt.show()\n\n\n\n\n\n\n\n\n\nt = torch.rand(16, 30, 100)\nmask = create_subsequence_mask(t, stateful=False) # individual time steps masked \ntest_eq(mask.dtype, torch.bool)\nplt.figure(figsize=(10, 3))\nplt.pcolormesh(mask[0], cmap='cool')\nplt.title(f'per sample subsequence mask (stateful=False) mean: {mask[0].float().mean().item():.3f}')\nplt.show()\n\n\n\n\n\n\n\n\n\nt = torch.rand(1, 30, 100)\nmask = create_subsequence_mask(t, sync=True) # all time steps masked simultaneously\ntest_eq(mask.dtype, torch.bool)\nplt.figure(figsize=(10, 3))\nplt.pcolormesh(mask[0], cmap='cool')\nplt.title(f'per sample subsequence mask (sync=True) mean: {mask[0].float().mean().item():.3f}')\nplt.show()\n\n\n\n\n\n\n\n\n\nt = torch.rand(1, 30, 100)\nmask = create_variable_mask(t) # masked variables\ntest_eq(mask.dtype, torch.bool)\nplt.figure(figsize=(10, 3))\nplt.pcolormesh(mask[0], cmap='cool')\nplt.title(f'per sample variable mask mean: {mask[0].float().mean().item():.3f}')\nplt.show()\n\n\n\n\n\n\n\n\n\nt = torch.rand(1, 30, 100)\nmask = create_future_mask(t, r=.15, sync=True) # masked steps\ntest_eq(mask.dtype, torch.bool)\nplt.figure(figsize=(10, 3))\nplt.pcolormesh(mask[0], cmap='cool')\nplt.title(f'future mask mean: {mask[0].float().mean().item():.3f}')\nplt.show()\n\n\n\n\n\n\n\n\n\nt = torch.rand(1, 30, 100)\nmask = create_future_mask(t, r=.15, sync=False) # masked steps\nmask = create_future_mask(t, r=.15, sync=True) # masked steps\ntest_eq(mask.dtype, torch.bool)\nplt.figure(figsize=(10, 3))\nplt.pcolormesh(mask[0], cmap='cool')\nplt.title(f'future mask mean: {mask[0].float().mean().item():.3f}')\nplt.show()\n\n\n\n\n\n\n\n\n\nsource\n\n\ncreate_mask\n\n create_mask (o, r=0.15, lm=3, stateful=True, sync=False,\n subsequence_mask=True, variable_mask=False,\n future_mask=False)\n\n\nsource\n\n\nMVP\n\n MVP (r:float=0.15, subsequence_mask:bool=True, lm:float=3.0,\n stateful:bool=True, sync:bool=False, variable_mask:bool=False,\n future_mask:bool=False, custom_mask:Optional=None,\n sel_vars:Optional[list]=None, nan_to_num:int=0,\n window_size:Optional[tuple]=None, dropout:float=0.1, crit:<built-\n infunctioncallable>=None, weights_path:Optional[str]=None,\n target_dir:str='./models/MVP', fname:str='model',\n save_best:bool=True, verbose:bool=False)\n\nBasic class handling tweaks of the training loop by changing a Learner in various events\n\n\nExperiments\n\nfrom tsai.data.external import get_UCR_data, check_data\nfrom tsai.data.preprocessing import TSStandardize, TSNan2Value\nfrom tsai.data.core import TSCategorize, get_ts_dls\nfrom tsai.learner import ts_learner\nfrom tsai.models.InceptionTimePlus import InceptionTimePlus\n\n\ndsid = 'MoteStrain'\nX, y, splits = get_UCR_data(dsid, split_data=False)\ncheck_data(X, y, splits, False)\nX[X<-1] = np.nan # This is to test the model works well even if nan values are passed through the dataloaders.\n\nX - shape: [1272 samples x 1 features x 84 timesteps] type: memmap dtype:float32 isnan: 0\ny - shape: (1272,) type: memmap dtype:<U1 n_classes: 2 (636 samples per class) ['1', '2'] isnan: False\nsplits - n_splits: 2 shape: [20, 1252] overlap: False\n\n\n\n# Pre-train\ntfms = [None, [TSCategorize()]]\nbatch_tfms = [TSStandardize(by_var=True)]\nunlabeled_dls = get_ts_dls(X, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\nlearn = ts_learner(unlabeled_dls, InceptionTimePlus, cbs=[MVP(fname=f'{dsid}', window_size=(.5, 1))]) # trained on variable window size\nlearn.fit_one_cycle(1, 3e-3)\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\ntime\n\n\n\n\n0\n1.270972\n1.194974\n00:06\n\n\n\n\n\n\nlearn = ts_learner(unlabeled_dls, InceptionTimePlus, cbs=[MVP(weights_path=f'models/MVP/{dsid}.pth')])\nlearn.fit_one_cycle(1, 3e-3)\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\ntime\n\n\n\n\n0\n0.837741\n1.200484\n00:07\n\n\n\n\n\n\nlearn.MVP.show_preds(sharey=True) # these preds are highly inaccurate as the model's been trained for just 1 epoch for testing purposes\n\n\n\n\n\n\n\n\n\n# Fine-tune\ntfms = [None, [TSCategorize()]]\nbatch_tfms = [TSStandardize(by_var=True), TSNan2Value()]\nlabeled_dls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=64)\nlearn = ts_learner(labeled_dls, InceptionTimePlus, pretrained=True, weights_path=f'models/MVP/{dsid}.pth', metrics=accuracy)\nlearn.fit_one_cycle(1)\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\ntime\n\n\n\n\n0\n0.773015\n0.744267\n0.460863\n00:09\n\n\n\n\n\n\ntfms = [None, [TSCategorize()]]\nbatch_tfms = [TSStandardize(by_var=True), TSNan2Value()]\nunlabeled_dls = get_ts_dls(X, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=64)\nfname = f'{dsid}_test'\nmvp = MVP(subsequence_mask=True, sync='random', variable_mask=True, future_mask=True, fname=fname)\nlearn = ts_learner(unlabeled_dls, InceptionTimePlus, metrics=accuracy, cbs=mvp) # Metrics will not be used!\n\n/Users/nacho/opt/anaconda3/envs/py37torch113/lib/python3.7/site-packages/ipykernel_launcher.py:42: UserWarning: Only future_mask will be used\n\n\n\ntfms = [None, [TSCategorize()]]\nbatch_tfms = [TSStandardize(by_var=True)]\nunlabeled_dls = get_ts_dls(X, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=64)\nfname = f'{dsid}_test'\nmvp = MVP(subsequence_mask=True, sync='random', variable_mask=True, future_mask=True, custom_mask=partial(create_future_mask, r=.15),\n fname=fname)\nlearn = ts_learner(unlabeled_dls, InceptionTimePlus, metrics=accuracy, cbs=mvp) # Metrics will not be used!\n\n/Users/nacho/opt/anaconda3/envs/py37torch113/lib/python3.7/site-packages/ipykernel_launcher.py:40: UserWarning: Only custom_mask will be used\n\n\n\ntry: os.remove(\"models/MVP/MoteStrain.pth\")\nexcept OSError: pass\ntry: os.remove(\"models/MVP/model.pth\")\nexcept OSError: pass", + "crumbs": [ + "Training", + "Callbacks", + "MVP (aka TSBERT)" + ] + }, + { + "objectID": "models.xceptiontimeplus.html", + "href": "models.xceptiontimeplus.html", + "title": "XceptionTimePlus", + "section": "", + "text": "This is an unofficial PyTorch implementation by Ignacio Oguiza - oguiza@timeseriesAI.co modified on:\nFawaz, H. I., Lucas, B., Forestier, G., Pelletier, C., Schmidt, D. F., Weber, J. & Petitjean, F. (2019). InceptionTime: Finding AlexNet for Time Series Classification. arXiv preprint arXiv:1909.04939.\nOfficial InceptionTime tensorflow implementation: https://github.com/hfawaz/InceptionTime\n\nsource\n\nXceptionTimePlus\n\n XceptionTimePlus (c_in, c_out, seq_len=None, nf=16, nb_filters=None,\n coord=False, norm='Batch', concat_pool=False,\n adaptive_size=50, custom_head=None, residual=True,\n zero_norm=False, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={})\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nXceptionBlockPlus\n\n XceptionBlockPlus (ni, nf, residual=True, coord=False, norm='Batch',\n zero_norm=False, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={},\n ks=40, kss=None, bottleneck=True, separable=True,\n bn_1st=True, norm_act=False)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nXceptionModulePlus\n\n XceptionModulePlus (ni, nf, ks=40, kss=None, bottleneck=True,\n coord=False, separable=True, norm='Batch',\n zero_norm=False, bn_1st=True, act=<class\n 'torch.nn.modules.activation.ReLU'>, act_kwargs={},\n norm_act=False)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 16\nvars = 3\nseq_len = 12\nc_out = 2\nxb = torch.rand(bs, vars, seq_len)\n\n\ntest_eq(XceptionTimePlus(vars,c_out)(xb).shape, [bs, c_out])\ntest_eq(XceptionTimePlus(vars,c_out, nf=32)(xb).shape, [bs, c_out])\ntest_eq(XceptionTimePlus(vars,c_out, bottleneck=False)(xb).shape, [bs, c_out])\ntest_eq(XceptionTimePlus(vars,c_out, residual=False)(xb).shape, [bs, c_out])\ntest_eq(XceptionTimePlus(vars,c_out, coord=True)(xb).shape, [bs, c_out])\ntest_eq(XceptionTimePlus(vars,c_out, concat_pool=True)(xb).shape, [bs, c_out])\ntest_eq(count_parameters(XceptionTimePlus(3, 2)), 399540)\n\n\nm = XceptionTimePlus(2,3)\ntest_eq(check_weight(m, is_bn)[0].sum(), 5)\ntest_eq(len(check_bias(m, is_conv)[0]), 0)\nm = XceptionTimePlus(2,3, zero_norm=True)\ntest_eq(check_weight(m, is_bn)[0].sum(), 5)\nm = XceptionTimePlus(2,3, zero_norm=True, norm_act=True)\ntest_eq(check_weight(m, is_bn)[0].sum(), 7)\n\n\nm = XceptionTimePlus(2,3, coord=True)\ntest_eq(len(get_layers(m, cond=is_layer(AddCoords1d))), 25)\ntest_eq(len(get_layers(m, cond=is_layer(nn.Conv1d))), 37)\nm = XceptionTimePlus(2,3, bottleneck=False, coord=True)\ntest_eq(len(get_layers(m, cond=is_layer(AddCoords1d))), 21)\ntest_eq(len(get_layers(m, cond=is_layer(nn.Conv1d))), 33)\n\n\nm = XceptionTimePlus(vars, c_out, seq_len=seq_len, custom_head=mlp_head)\ntest_eq(m(xb).shape, [bs, c_out])\n\n\nXceptionTimePlus(vars, c_out, coord=True)\n\nXceptionTimePlus(\n (backbone): XceptionBlockPlus(\n (xception): ModuleList(\n (0): XceptionModulePlus(\n (bottleneck): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(4, 16, kernel_size=(1,), stride=(1,), bias=False)\n )\n (convs): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(17, 17, kernel_size=(39,), stride=(1,), padding=(19,), groups=17, bias=False)\n (pointwise_conv): Conv1d(17, 16, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(17, 17, kernel_size=(19,), stride=(1,), padding=(9,), groups=17, bias=False)\n (pointwise_conv): Conv1d(17, 16, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(17, 17, kernel_size=(9,), stride=(1,), padding=(4,), groups=17, bias=False)\n (pointwise_conv): Conv1d(17, 16, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n )\n (mp_conv): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(4, 16, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (concat): Concat(dim=1)\n )\n (1): XceptionModulePlus(\n (bottleneck): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(65, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (convs): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(39,), stride=(1,), padding=(19,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(19,), stride=(1,), padding=(9,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(33, 33, kernel_size=(9,), stride=(1,), padding=(4,), groups=33, bias=False)\n (pointwise_conv): Conv1d(33, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n )\n (mp_conv): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(65, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (concat): Concat(dim=1)\n )\n (2): XceptionModulePlus(\n (bottleneck): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n (convs): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(65, 65, kernel_size=(39,), stride=(1,), padding=(19,), groups=65, bias=False)\n (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(65, 65, kernel_size=(19,), stride=(1,), padding=(9,), groups=65, bias=False)\n (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(65, 65, kernel_size=(9,), stride=(1,), padding=(4,), groups=65, bias=False)\n (pointwise_conv): Conv1d(65, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n )\n (mp_conv): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (concat): Concat(dim=1)\n )\n (3): XceptionModulePlus(\n (bottleneck): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(257, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (convs): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(129, 129, kernel_size=(39,), stride=(1,), padding=(19,), groups=129, bias=False)\n (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(129, 129, kernel_size=(19,), stride=(1,), padding=(9,), groups=129, bias=False)\n (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(129, 129, kernel_size=(9,), stride=(1,), padding=(4,), groups=129, bias=False)\n (pointwise_conv): Conv1d(129, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n )\n (mp_conv): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(257, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (concat): Concat(dim=1)\n )\n )\n (shortcut): ModuleList(\n (0): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(4, 128, kernel_size=(1,), stride=(1,), bias=False)\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 512, kernel_size=(1,), stride=(1,), bias=False)\n (2): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n )\n (act): ModuleList(\n (0): ReLU()\n (1): ReLU()\n )\n (add): Add\n )\n (head): Sequential(\n (0): AdaptiveAvgPool1d(output_size=50)\n (1): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(513, 256, kernel_size=(1,), stride=(1,), bias=False)\n (2): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (2): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(257, 128, kernel_size=(1,), stride=(1,), bias=False)\n (2): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (3): ConvBlock(\n (0): AddCoords1d()\n (1): Conv1d(129, 2, kernel_size=(1,), stride=(1,), bias=False)\n (2): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (3): ReLU()\n )\n (4): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Reshape(bs)\n )\n )\n)", + "crumbs": [ + "Models", + "CNNs", + "XceptionTimePlus" + ] + }, + { + "objectID": "models.misc.html", + "href": "models.misc.html", + "title": "Miscellaneous", + "section": "", + "text": "This contains a set of experiments.\n\n\nsource\n\nInputWrapper\n\n InputWrapper (arch, c_in, c_out, seq_len, new_c_in=None,\n new_seq_len=None, **kwargs)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nfrom tsai.models.TST import *\n\n\nxb = torch.randn(16, 1, 1000)\nmodel = InputWrapper(TST, 1, 4, 1000, 10, 224)\ntest_eq(model.to(xb.device)(xb).shape, (16,4))\n\n\nsource\n\n\nResidualWrapper\n\n ResidualWrapper (model)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nRecursiveWrapper\n\n RecursiveWrapper (model, n_steps, anchored=False)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nxb = torch.randn(16, 1, 20)\nmodel = RecursiveWrapper(TST(1, 1, 20), 5)\ntest_eq(model.to(xb.device)(xb).shape, (16, 5))", + "crumbs": [ + "Models", + "Miscellaneous", + "Miscellaneous" + ] + }, + { + "objectID": "models.tssequencerplus.html", + "href": "models.tssequencerplus.html", + "title": "TSSequencerPlus", + "section": "", + "text": "This is a PyTorch implementation created by Ignacio Oguiza (oguiza@timeseriesAI.co) based on Sequencer: Deep LSTM for Image Classification\nclass TSSequencerPlus(nn.Sequential):\n r\"\"\"Time Series Sequencer model based on:\n\n Tatsunami, Y., & Taki, M. (2022). Sequencer: Deep LSTM for Image Classification. arXiv preprint arXiv:2205.01972.\n Official implementation: https://github.com/okojoalg/sequencer\n\n Args:\n c_in: the number of features (aka variables, dimensions, channels) in the time series dataset.\n c_out: the number of target classes.\n seq_len: number of time steps in the time series.\n d_model: total dimension of the model (number of features created by the model).\n depth: number of blocks in the encoder.\n act: the activation function of positionwise feedforward layer.\n lstm_dropout: dropout rate applied to the lstm sublayer.\n dropout: dropout applied to to the embedded sequence steps after position embeddings have been added and \n to the mlp sublayer in the encoder.\n drop_path_rate: stochastic depth rate.\n mlp_ratio: ratio of mlp hidden dim to embedding dim.\n lstm_bias: determines whether bias is applied to the LSTM layer.\n pre_norm: if True normalization will be applied as the first step in the sublayers. Defaults to False.\n use_token: if True, the output will come from the transformed token. This is meant to be use in classification tasks.\n use_pe: flag to indicate if positional embedding is used.\n n_cat_embeds: list with the sizes of the dictionaries of embeddings (int).\n cat_embed_dims: list with the sizes of each embedding vector (int).\n cat_padding_idxs: If specified, the entries at cat_padding_idxs do not contribute to the gradient; therefore, the embedding vector at cat_padding_idxs\n are not updated during training. Use 0 for those categorical embeddings that may have #na# values. Otherwise, leave them as None.\n You can enter a combination for different embeddings (for example, [0, None, None]).\n cat_pos: list with the position of the categorical variables in the input.\n token_size: Size of the embedding function used to reduce the sequence length (similar to ViT's patch size)\n tokenizer: nn.Module or callable that will be used to reduce the sequence length\n feature_extractor: nn.Module or callable that will be used to preprocess the time series before \n the embedding step. It is useful to extract features or resample the time series.\n flatten: flag to indicate if the 3d logits will be flattened to 2d in the model's head if use_token is set to False. \n If use_token is False and flatten is False, the model will apply a pooling layer.\n concat_pool: if True the head begins with fastai's AdaptiveConcatPool2d if concat_pool=True; otherwise, it uses traditional average pooling. \n fc_dropout: dropout applied to the final fully connected layer.\n use_bn: flag that indicates if batchnorm will be applied to the head.\n bias_init: values used to initialized the output layer.\n y_range: range of possible y values (used in regression tasks). \n custom_head: custom head that will be applied to the network. It must contain all kwargs (pass a partial function)\n verbose: flag to control verbosity of the model.\n\n Input:\n x: bs (batch size) x nvars (aka features, variables, dimensions, channels) x seq_len (aka time steps)\n \"\"\"\n \n def __init__(self, c_in:int, c_out:int, seq_len:int, d_model:int=128, depth:int=6, act:str='gelu',\n lstm_dropout:float=0., dropout:float=0., drop_path_rate:float=0., mlp_ratio:int=1, lstm_bias:bool=True, \n pre_norm:bool=False, use_token:bool=False, use_pe:bool=True, \n cat_pos:Optional[list]=None, n_cat_embeds:Optional[list]=None, cat_embed_dims:Optional[list]=None, cat_padding_idxs:Optional[list]=None,\n token_size:int=None, tokenizer:Optional[Callable]=None, feature_extractor:Optional[Callable]=None, \n flatten:bool=False, concat_pool:bool=True, fc_dropout:float=0., use_bn:bool=False, \n bias_init:Optional[Union[float, list]]=None, y_range:Optional[tuple]=None, custom_head:Optional[Callable]=None, verbose:bool=True,\n **kwargs):\n\n if use_token and c_out == 1: \n use_token = False\n pv(\"use_token set to False as c_out == 1\", verbose)\n backbone = _TSSequencerBackbone(c_in, seq_len, depth=depth, d_model=d_model, act=act,\n lstm_dropout=lstm_dropout, dropout=dropout, drop_path_rate=drop_path_rate, \n pre_norm=pre_norm, mlp_ratio=mlp_ratio, use_pe=use_pe, use_token=use_token, \n n_cat_embeds=n_cat_embeds, cat_embed_dims=cat_embed_dims, cat_padding_idxs=cat_padding_idxs, cat_pos=cat_pos, \n feature_extractor=feature_extractor, token_size=token_size, tokenizer=tokenizer)\n\n self.head_nf = d_model\n self.c_out = c_out\n self.seq_len = seq_len\n\n # Head\n if custom_head:\n if isinstance(custom_head, nn.Module): head = custom_head\n else: head = custom_head(self.head_nf, c_out, seq_len, **kwargs)\n else:\n nf = d_model\n layers = []\n if use_token: \n layers += [TokenLayer()]\n elif flatten:\n layers += [Reshape(-1)]\n nf = nf * seq_len\n else:\n if concat_pool: nf *= 2\n layers = [GACP1d(1) if concat_pool else GAP1d(1)]\n if use_bn: layers += [nn.BatchNorm1d(nf)]\n if fc_dropout: layers += [nn.Dropout(fc_dropout)]\n \n # Last layer\n linear = nn.Linear(nf, c_out)\n if bias_init is not None: \n if isinstance(bias_init, float): nn.init.constant_(linear.bias, bias_init)\n else: linear.bias = nn.Parameter(torch.as_tensor(bias_init, dtype=torch.float32))\n layers += [linear]\n\n if y_range: layers += [SigmoidRange(*y_range)]\n head = nn.Sequential(*layers)\n super().__init__(OrderedDict([('backbone', backbone), ('head', head)]))\n \n \nTSSequencer = TSSequencerPlus\nsource", + "crumbs": [ + "Models", + "RNNs", + "TSSequencerPlus" + ] + }, + { + "objectID": "models.tssequencerplus.html#feature-extractor", + "href": "models.tssequencerplus.html#feature-extractor", + "title": "TSSequencerPlus", + "section": "Feature extractor", + "text": "Feature extractor\nIt’s a known fact that transformers cannot be directly applied to long sequences. To avoid this, we have included a way to subsample the sequence to generate a more manageable input.\n\nfrom tsai.data.validation import get_splits\nfrom tsai.data.core import get_ts_dls\n\n\nX = np.zeros((10, 3, 5000)) \ny = np.random.randint(0,2,X.shape[0])\nsplits = get_splits(y)\ndls = get_ts_dls(X, y, splits=splits)\nxb, yb = dls.train.one_batch()\nxb\n\n\n\n\n\n\n\n\nTSTensor(samples:8, vars:3, len:5000, device=cpu, dtype=torch.float32)\n\n\nIf you try to use SequencerPlus, it’s likely you’ll get an ‘out-of-memory’ error.\nTo avoid this you can subsample the sequence reducing the input’s length. This can be done in multiple ways. Here are a few examples:\n\n# Separable convolution (to avoid mixing channels)\nfeature_extractor = Conv1d(xb.shape[1], xb.shape[1], ks=100, stride=50, padding=0, groups=xb.shape[1]).to(default_device())\nfeature_extractor.to(xb.device)(xb).shape\n\ntorch.Size([8, 3, 99])\n\n\n\n# Convolution (if you want to mix channels or change number of channels)\nfeature_extractor=MultiConv1d(xb.shape[1], 64, kss=[1,3,5,7,9], keep_original=True).to(default_device())\ntest_eq(feature_extractor.to(xb.device)(xb).shape, (xb.shape[0], 64, xb.shape[-1]))\n\n\n# MaxPool\nfeature_extractor = nn.Sequential(Pad1d((0, 50), 0), nn.MaxPool1d(kernel_size=100, stride=50)).to(default_device())\nfeature_extractor.to(xb.device)(xb).shape\n\ntorch.Size([8, 3, 100])\n\n\n\n# AvgPool\nfeature_extractor = nn.Sequential(Pad1d((0, 50), 0), nn.AvgPool1d(kernel_size=100, stride=50)).to(default_device())\nfeature_extractor.to(xb.device)(xb).shape\n\ntorch.Size([8, 3, 100])\n\n\nOnce you decide what type of transform you want to apply, you just need to pass the layer as the feature_extractor attribute:\n\nbs = 16\nnvars = 4\nseq_len = 1000\nc_out = 2\nd_model = 128\n\nxb = torch.rand(bs, nvars, seq_len)\nfeature_extractor = partial(Conv1d, ks=5, stride=3, padding=0, groups=xb.shape[1])\nmodel = TSSequencerPlus(nvars, c_out, seq_len, d_model=d_model, feature_extractor=feature_extractor)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))", + "crumbs": [ + "Models", + "RNNs", + "TSSequencerPlus" + ] + }, + { + "objectID": "models.tssequencerplus.html#categorical-variables", + "href": "models.tssequencerplus.html#categorical-variables", + "title": "TSSequencerPlus", + "section": "Categorical variables", + "text": "Categorical variables\n\nfrom tsai.utils import alphabet, ALPHABET\n\n\na = alphabet[np.random.randint(0,3,40)]\nb = ALPHABET[np.random.randint(6,10,40)]\nc = np.random.rand(40).reshape(4,1,10)\nmap_a = {k:v for v,k in enumerate(np.unique(a))}\nmap_b = {k:v for v,k in enumerate(np.unique(b))}\nn_cat_embeds = [len(m.keys()) for m in [map_a, map_b]]\nszs = [emb_sz_rule(n) for n in n_cat_embeds]\na = np.asarray(a.map(map_a)).reshape(4,1,10)\nb = np.asarray(b.map(map_b)).reshape(4,1,10)\ninp = torch.from_numpy(np.concatenate((c,a,b), 1)).float()\nfeature_extractor = partial(Conv1d, ks=3, padding='same')\nmodel = TSSequencerPlus(3, 2, 10, d_model=64, cat_pos=[1,2], feature_extractor=feature_extractor)\ntest_eq(model(inp).shape, (4,2))\n\n[W NNPACK.cpp:53] Could not initialize NNPACK! Reason: Unsupported hardware.", + "crumbs": [ + "Models", + "RNNs", + "TSSequencerPlus" + ] + }, + { + "objectID": "models.tssequencerplus.html#sequence-embedding", + "href": "models.tssequencerplus.html#sequence-embedding", + "title": "TSSequencerPlus", + "section": "Sequence Embedding", + "text": "Sequence Embedding\nSometimes you have a samples with a very long sequence length. In those cases you may want to reduce it’s length before passing it to the transformer. To do that you may just pass a token_size like in this example:\n\nt = torch.rand(8, 2, 10080)\nSeqTokenizer(2, 128, 60)(t).shape\n\ntorch.Size([8, 128, 168])\n\n\n\nt = torch.rand(8, 2, 10080)\nmodel = TSSequencerPlus(2, 5, 10080, d_model=64, token_size=60)\nmodel(t).shape\n\ntorch.Size([8, 5])", + "crumbs": [ + "Models", + "RNNs", + "TSSequencerPlus" + ] + }, + { + "objectID": "inference.html", + "href": "inference.html", + "title": "Inference", + "section": "", + "text": "Code required for inference.\n\n\nsource\n\nLearner.get_X_preds\n\n Learner.get_X_preds (X, y=None, bs=64, with_input=False,\n with_decoded=True, with_loss=False, act=None)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nX\n\n\n\n\n\ny\nNoneType\nNone\n\n\n\nbs\nint\n64\n\n\n\nwith_input\nbool\nFalse\nreturns the input as well\n\n\nwith_decoded\nbool\nTrue\nreturns decoded predictions as well\n\n\nwith_loss\nbool\nFalse\nreturns the loss per item as well\n\n\nact\nNoneType\nNone\nApply activation to predictions, defaults to self.loss_func’s activation\n\n\n\nGet the predictions and targets, optionally with_input and with_loss.\nwith_decoded will also return the decoded predictions (it reverses the transforms applied).\nThe order of the output is the following:\n\ninput (optional): if with_input is True\nprobabiblities (for classification) or predictions (for regression)\ntarget: if y is provided. Otherwise None.\npredictions: predicted labels. Predictions will be decoded if with_decoded=True.\nloss (optional): if with_loss is set to True and y is not None.\n\n\nfrom tsai.data.external import get_UCR_data\n\n\ndsid = 'OliveOil'\nX, y, splits = get_UCR_data(dsid, split_data=False)\nX_test = X[splits[1]]\ny_test = y[splits[1]]\n\n\nlearn = load_learner(\"./models/test.pth\")\n\n⚠️ Warning: load_learner (from fastai) requires all your custom code be in the exact same place as when exporting your Learner (the main script, or the module you imported it from).\n\ntest_probas, test_targets, test_preds = learn.get_X_preds(X_test, with_decoded=True)\ntest_probas, test_targets, test_preds\n\n\n\n\n\n\n\n\n(tensor([[0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2639],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2641],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2421, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640]]),\n None,\n array(['4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n '4', '4', '4', '4'], dtype='<U1'))\n\n\n\nimport torch\nfrom fastcore.test import test_close\n\n\ntorch_test_probas, torch_test_targets, torch_test_preds = learn.get_X_preds(torch.from_numpy(X_test), with_decoded=True)\ntorch_test_probas, torch_test_targets, torch_test_preds\ntest_close(test_probas, torch_test_probas)\n\n\n\n\n\n\n\n\n\ntest_probas2, test_targets2, test_preds2 = learn.get_X_preds(X_test, y_test, with_decoded=True)\ntest_probas2, test_targets2, test_preds2\n\n\n\n\n\n\n\n\n(tensor([[0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2639],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2641],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2421, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640]]),\n tensor([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3]),\n array(['4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n '4', '4', '4', '4'], dtype='<U1'))\n\n\n\ntest_probas3, test_targets3, test_preds3, test_losses3 = learn.get_X_preds(X_test, y_test, with_loss=True, with_decoded=True)\ntest_probas3, test_targets3, test_preds3, test_losses3\n\n\n\n\n\n\n\n\n(tensor([[0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2639],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2641],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2421, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2421, 0.2364, 0.2641],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640],\n [0.2574, 0.2422, 0.2364, 0.2640]]),\n tensor([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3]),\n array(['4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4',\n '4', '4', '4', '4'], dtype='<U1'),\n TensorBase([1.3572, 1.3572, 1.3572, 1.3571, 1.3572, 1.4181, 1.4181, 1.4181,\n 1.4181, 1.4181, 1.4181, 1.4181, 1.4181, 1.4181, 1.4423, 1.4422,\n 1.4422, 1.4422, 1.3316, 1.3316, 1.3316, 1.3316, 1.3316, 1.3316,\n 1.3316, 1.3316, 1.3316, 1.3316, 1.3317, 1.3317]))\n\n\n\nfrom fastcore.test import test_eq\n\n\ntest_eq(test_probas, test_probas2)\ntest_eq(test_preds, test_preds2)\ntest_eq(test_probas, test_probas3)\ntest_eq(test_preds, test_preds3)", + "crumbs": [ + "Inference" + ] + }, + { + "objectID": "analysis.html", + "href": "analysis.html", + "title": "Analysis", + "section": "", + "text": "fastai Learner extensions useful to perform prediction analysis.\nsource", + "crumbs": [ + "Analysis" + ] + }, + { + "objectID": "analysis.html#permutation-importance", + "href": "analysis.html#permutation-importance", + "title": "Analysis", + "section": "Permutation importance", + "text": "Permutation importance\nWe’ve also introduced 2 methods to help you better understand how important certain features or certain steps are for your model. Both methods use permutation importance.\n⚠️The permutation feature or step importance is defined as the decrease in a model score when a single feature or step value is randomly shuffled.\nSo if you using accuracy (higher is better), the most important features or steps will be those with a lower value on the chart (as randomly shuffling them reduces performance).\nThe opposite occurs for metrics like mean squared error (lower is better). In this case, the most important features or steps will be those with a higher value on the chart.\nThere are 2 issues with step importance:\n\nthere may be many steps and the analysis could take very long\nsteps will likely have a high autocorrelation\n\nFor those reasons, we’ve introduced an argument (n_steps) to group steps. In this way you’ll be able to know which part of the time series is the most important.\nFeature importance has been adapted from https://www.kaggle.com/cdeotte/lstm-feature-importance by Chris Deotte (Kaggle GrandMaster).\n\nsource\n\nLearner.feature_importance\n\n Learner.feature_importance (X=None, y=None, bs:int=None,\n partial_n:(<class'int'>,<class'float'>)=None,\n method:str='permutation',\n feature_names:list=None, sel_classes:(<class'\n str'>,<class'list'>)=None,\n key_metric_idx:int=0, show_chart:bool=True,\n figsize:tuple=None, title:str=None,\n return_df:bool=True,\n save_df_path:pathlib.Path=None,\n random_state:int=23, verbose:bool=True)\n\nCalculates feature importance as the drop in the model’s validation loss or metric when a feature value is randomly shuffled\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nX\nNoneType\nNone\narray-like object containing the time series. If None, all data in the validation set will be used.\n\n\ny\nNoneType\nNone\narray-like object containing the targets. If None, all targets in the validation set will be used.\n\n\nbs\nint\nNone\nbatch size. If None, the default batch size of the dataloader will be used.\n\n\npartial_n\n(<class ‘int’>, <class ‘float’>)\nNone\n# (int) or % (float) of used to measure feature importance. If None, all data will be used.\n\n\nmethod\nstr\npermutation\nMethod used to invalidate feature. Use ‘permutation’ for shuffling or ‘ablation’ for setting values to np.nan.\n\n\nfeature_names\nlist\nNone\nOptional list of feature names that will be displayed if available. Otherwise var_0, var_1, etc.\n\n\nsel_classes\n(<class ‘str’>, <class ‘list’>)\nNone\nclasses for which the analysis will be made\n\n\nkey_metric_idx\nint\n0\nOptional position of the metric used. If None or no metric is available, the loss will be used.\n\n\nshow_chart\nbool\nTrue\nFlag to indicate if a chart showing permutation feature importance will be plotted.\n\n\nfigsize\ntuple\nNone\nSize of the chart.\n\n\ntitle\nstr\nNone\nOptional string that will be used as the chart title. If None ‘Permutation Feature Importance’.\n\n\nreturn_df\nbool\nTrue\nFlag to indicate if the dataframe with feature importance will be returned.\n\n\nsave_df_path\nPath\nNone\nPath where dataframe containing the permutation feature importance results will be saved.\n\n\nrandom_state\nint\n23\nOptional int that controls the shuffling applied to the data.\n\n\nverbose\nbool\nTrue\nFlag that controls verbosity.\n\n\n\n\nsource\n\n\nLearner.step_importance\n\n Learner.step_importance (X=None, y=None, bs:int=None,\n partial_n:(<class'int'>,<class'float'>)=None,\n method:str='permutation', step_names:list=None,\n sel_classes:(<class'str'>,<class'list'>)=None,\n n_steps:int=1, key_metric_idx:int=0,\n show_chart:bool=True, figsize:tuple=(10, 5),\n title:str=None, xlabel=None,\n return_df:bool=True,\n save_df_path:pathlib.Path=None,\n random_state:int=23, verbose:bool=True)\n\nCalculates step importance as the drop in the model’s validation loss or metric when a step/s value/s is/are randomly shuffled\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nX\nNoneType\nNone\narray-like object containing the time series. If None, all data in the validation set will be used.\n\n\ny\nNoneType\nNone\narray-like object containing the targets. If None, all targets in the validation set will be used.\n\n\nbs\nint\nNone\nbatch size used to compute predictions. If None, the batch size used in the validation set will be used.\n\n\npartial_n\n(<class ‘int’>, <class ‘float’>)\nNone\n# (int) or % (float) of used to measure feature importance. If None, all data will be used.\n\n\nmethod\nstr\npermutation\nMethod used to invalidate feature. Use ‘permutation’ for shuffling or ‘ablation’ for setting values to np.nan.\n\n\nstep_names\nlist\nNone\nOptional list of step names that will be displayed if available. Otherwise 0, 1, 2, etc.\n\n\nsel_classes\n(<class ‘str’>, <class ‘list’>)\nNone\nclasses for which the analysis will be made\n\n\nn_steps\nint\n1\n# of steps that will be analyzed at a time. Default is 1.\n\n\nkey_metric_idx\nint\n0\nOptional position of the metric used. If None or no metric is available, the loss will be used.\n\n\nshow_chart\nbool\nTrue\nFlag to indicate if a chart showing permutation feature importance will be plotted.\n\n\nfigsize\ntuple\n(10, 5)\nSize of the chart.\n\n\ntitle\nstr\nNone\nOptional string that will be used as the chart title. If None ‘Permutation Feature Importance’.\n\n\nxlabel\nNoneType\nNone\nOptional string that will be used as the chart xlabel. If None ‘steps’.\n\n\nreturn_df\nbool\nTrue\nFlag to indicate if the dataframe with feature importance will be returned.\n\n\nsave_df_path\nPath\nNone\nPath where dataframe containing the permutation feature importance results will be saved.\n\n\nrandom_state\nint\n23\nOptional int that controls the shuffling applied to the data.\n\n\nverbose\nbool\nTrue\nFlag that controls verbosity.\n\n\n\n\nfrom tsai.data.external import get_UCR_data\nfrom tsai.data.preprocessing import TSRobustScale, TSStandardize\nfrom tsai.learner import ts_learner\nfrom tsai.models.FCNPlus import FCNPlus\nfrom tsai.metrics import accuracy\n\n\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, split_data=False)\ntfms = [None, [TSClassification()]]\nbatch_tfms = TSRobustScale()\nbatch_tfms = TSStandardize()\ndls = get_ts_dls(X, y, splits=splits, sel_vars=[0, 3, 5, 8, 10], sel_steps=slice(-30, None), tfms=tfms, batch_tfms=batch_tfms)\nlearn = ts_learner(dls, FCNPlus, metrics=accuracy, train_metrics=True)\nlearn.fit_one_cycle(2)\nlearn.plot_metrics()\nlearn.show_probas()\nlearn.plot_confusion_matrix()\nlearn.plot_top_losses(X[splits[1]], y[splits[1]], largest=True)\nlearn.top_losses(X[splits[1]], y[splits[1]], largest=True)\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\ntrain_accuracy\nvalid_loss\nvalid_accuracy\ntime\n\n\n\n\n0\n1.792511\n0.187500\n1.619460\n0.216667\n00:02\n\n\n1\n1.592681\n0.632812\n1.475991\n0.250000\n00:01\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(TensorBase([2.3713, 2.3146, 2.2843, 2.2581, 2.2408, 2.2264, 2.2254, 2.2237,\n 2.2230]),\n [9, 56, 128, 25, 104, 116, 57, 72, 108])\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nlearn.feature_importance()\n\nX.shape: (180, 24, 51)\ny.shape: (180,)\nSelected metric: accuracy\nComputing feature importance (permutation method)...\n 0 feature: BASELINE accuracy: 0.277778\n 0 feature: var_0 accuracy: 0.238889\n 3 feature: var_3 accuracy: 0.172222\n 5 feature: var_5 accuracy: 0.261111\n 8 feature: var_8 accuracy: 0.250000\n 10 feature: var_10 accuracy: 0.266667\n\n\n\n\n\n\n\n\n \n \n 100.00% [6/6 00:04<00:00]\n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nFeature\naccuracy\naccuracy_change\n\n\n\n\n0\nvar_3\n0.172222\n0.105556\n\n\n1\nvar_0\n0.238889\n0.038889\n\n\n2\nvar_8\n0.250000\n0.027778\n\n\n3\nvar_5\n0.261111\n0.016667\n\n\n4\nvar_10\n0.266667\n0.011111\n\n\n5\nBASELINE\n0.277778\n-0.000000\n\n\n\n\n\n\n\n\nlearn.step_importance(n_steps=5);\n\nX.shape: (180, 24, 51)\ny.shape: (180,)\nSelected metric: accuracy\nComputing step importance...\n 0 step: BASELINE accuracy: 0.277778\n 1 step: 21 to 25 accuracy: 0.288889\n 2 step: 26 to 30 accuracy: 0.255556\n 3 step: 31 to 35 accuracy: 0.194444\n 4 step: 36 to 40 accuracy: 0.216667\n 5 step: 41 to 45 accuracy: 0.272222\n 6 step: 46 to 50 accuracy: 0.283333\n\n\n\n\n\n\n\n\n \n \n 100.00% [7/7 00:04<00:00]\n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nYou may pass an X and y if you want to analyze a particular group of samples:\nlearn.feature_importance(X=X[splits[1]], y=y[splits[1]])\nIf you have a large validation dataset, you may also use the partial_n argument to select a fixed amount of samples (integer) or a percentage of the validation dataset (float):\nlearn.feature_importance(partial_n=.1)\nlearn.feature_importance(partial_n=100)", + "crumbs": [ + "Analysis" + ] + }, + { + "objectID": "calibration.html", + "href": "calibration.html", + "title": "Calibration", + "section": "", + "text": "Functionality to calibrate a trained, binary classification model using temperature scaling.\n\n\nsource\n\nECELoss\n\n ECELoss (n_bins=10)\n\nCalculates the Expected Calibration Error of a model.\n\nsource\n\n\nTemperatureSetter\n\n TemperatureSetter (model, lr=0.01, max_iter=1000, line_search_fn=None,\n n_bins=10, verbose=True)\n\nCalibrates a binary classification model optimizing temperature\n\nsource\n\n\nModelWithTemperature\n\n ModelWithTemperature (model)\n\nA decorator which wraps a model with temperature scaling\n\nsource\n\n\nplot_calibration_curve\n\n plot_calibration_curve (labels, logits, cal_logits=None, figsize=(6, 6),\n n_bins=10, strategy='uniform')\n\n\nsource\n\n\nLearner.calibrate_model\n\n Learner.calibrate_model (X=None, y=None, lr=0.01, max_iter=10000,\n line_search_fn=None, n_bins=10,\n strategy='uniform', show_plot=True, figsize=(6,\n 6), verbose=True)\n\n\nfrom tsai.basics import *\nfrom tsai.models.FCNPlus import FCNPlus\n\n\nX, y, splits = get_UCR_data('FingerMovements', split_data=False)\ntfms = [None, [TSClassification()]]\nbatch_tfms = TSRobustScale()\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\nlearn = ts_learner(dls, FCNPlus, metrics=accuracy)\nlearn.fit_one_cycle(2)\n\n\n\n\nepoch\ntrain_loss\nvalid_loss\naccuracy\ntime\n\n\n\n\n0\n0.696826\n0.706016\n0.430000\n00:04\n\n\n1\n0.690209\n0.699720\n0.490000\n00:03\n\n\n\n\n\n\nlearn.calibrate_model()\ncalibrated_model = learn.calibrated_model\n\nBefore temperature - NLL: 0.700, ECE: 0.066\nCalibrating the model...\n...model calibrated\nOptimal temperature: 6.383\nAfter temperature - NLL: 0.693, ECE: 0.019", + "crumbs": [ + "Training", + "Calibration" + ] + }, + { + "objectID": "data.core.html", + "href": "data.core.html", + "title": "Data Core", + "section": "", + "text": "Main Numpy and Times Series functions used throughout the library.\n\n\nfrom tsai.data.external import get_UCR_data\n\n\ndsid = 'OliveOil'\nX_train, y_train, X_valid, y_valid = get_UCR_data(dsid, on_disk=True, force_download=True)\nX_on_disk, y_on_disk, splits = get_UCR_data(dsid, on_disk=True, return_split=False, force_download=True)\nX_in_memory, y_in_memory, splits = get_UCR_data(dsid, on_disk=False, return_split=False, force_download=True)\ny_tensor = cat2int(y_on_disk)\ny_array = y_tensor.numpy()\n\n\nsource\n\nToNumpyTensor\n\n ToNumpyTensor (enc=None, dec=None, split_idx=None, order=None)\n\nTransforms an object into NumpyTensor\n\nsource\n\n\nNumpyTensor\n\n NumpyTensor (o, dtype=None, device=None, copy=None, requires_grad=False,\n **kwargs)\n\nReturns a tensor with subclass NumpyTensor that has a show method\n\nsource\n\n\nTSTensor\n\n TSTensor (o, dtype=None, device=None, copy=None, requires_grad=False,\n **kwargs)\n\nReturns a tensor with subclass TSTensor that has a show method\n\nsource\n\n\nshow_tuple\n\n show_tuple (tup, nrows:int=1, ncols:int=1,\n sharex:Union[bool,Literal['none','all','row','col']]=False,\n sharey:Union[bool,Literal['none','all','row','col']]=False,\n squeeze:bool=True,\n width_ratios:Optional[Sequence[float]]=None,\n height_ratios:Optional[Sequence[float]]=None,\n subplot_kw:Optional[dict[str,Any]]=None,\n gridspec_kw:Optional[dict[str,Any]]=None)\n\nDisplay a timeseries plot from a decoded tuple\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ntup\n\n\n\n\n\nnrows\nint\n1\n\n\n\nncols\nint\n1\n\n\n\nsharex\nbool | Literal[‘none’, ‘all’, ‘row’, ‘col’]\nFalse\n\n\n\nsharey\nbool | Literal[‘none’, ‘all’, ‘row’, ‘col’]\nFalse\n\n\n\nsqueeze\nbool\nTrue\n- If True, extra dimensions are squeezed out from the returned array of ~matplotlib.axes.Axes: - if only one subplot is constructed (nrows=ncols=1), the resulting single Axes object is returned as a scalar. - for Nx1 or 1xM subplots, the returned object is a 1D numpy object array of Axes objects. - for NxM, subplots with N>1 and M>1 are returned as a 2D array.- If False, no squeezing at all is done: the returned Axes object is always a 2D array containing Axes instances, even if it ends up being 1x1.\n\n\nwidth_ratios\nSequence[float] | None\nNone\nDefines the relative widths of the columns. Each column gets arelative width of width_ratios[i] / sum(width_ratios).If not given, all columns will have the same width. Equivalentto gridspec_kw={'width_ratios': [...]}.\n\n\nheight_ratios\nSequence[float] | None\nNone\nDefines the relative heights of the rows. Each row gets arelative height of height_ratios[i] / sum(height_ratios).If not given, all rows will have the same height. Conveniencefor gridspec_kw={'height_ratios': [...]}.\n\n\nsubplot_kw\ndict[str, Any] | None\nNone\nDict with keywords passed to the~matplotlib.figure.Figure.add_subplot call used to create eachsubplot.\n\n\ngridspec_kw\ndict[str, Any] | None\nNone\nDict with keywords passed to the ~matplotlib.gridspec.GridSpecconstructor used to create the grid the subplots are placed on.\n\n\n\n\nsource\n\n\nToTSTensor\n\n ToTSTensor (enc=None, dec=None, split_idx=None, order=None)\n\nTransforms an object into TSTensor\n\na = np.random.randn(2, 3, 4).astype(np.float16)\nassert np.shares_memory(a, NumpyTensor(a))\nassert np.shares_memory(a, TSTensor(a))\n\n\na = np.random.randn(2, 3, 4).astype(np.float32)\nassert np.shares_memory(a, NumpyTensor(a))\nassert np.shares_memory(a, TSTensor(a))\n\n\na = np.random.randint(10, size=10).astype(np.int64)\nassert np.shares_memory(a, NumpyTensor(a))\nassert np.shares_memory(a, TSTensor(a))\n\n\na = np.random.randint(10, size=10).astype(np.int32)\nassert np.shares_memory(a, NumpyTensor(a))\nassert np.shares_memory(a, TSTensor(a))\n\n\na = torch.rand(2, 3, 4).float()\nassert np.shares_memory(a, NumpyTensor(a))\nassert np.shares_memory(a, TSTensor(a))\n\n\na = torch.randint(3, (10,))\nassert np.shares_memory(a, NumpyTensor(a))\nassert np.shares_memory(a, TSTensor(a))\n\n\nt = TSTensor(torch.randn(2, 3, 4))\np = torch.tensor(3., requires_grad=True)\ntest = torch.add(t, p)\ntest_eq(test.requires_grad, True)\ntest_eq(type(t.data), torch.Tensor)\ntest_eq(type(t), TSTensor)\n\n\nl = L([0,1,2,3], [4,5,6,7], [8, 9, 10, 11])\nTSTensor(l), TSTensor(l).data\n\n(TSTensor(vars:3, len:4, device=cpu, dtype=torch.int64),\n tensor([[ 0, 1, 2, 3],\n [ 4, 5, 6, 7],\n [ 8, 9, 10, 11]]))\n\n\n\nt = TSTensor(X_train)\nfor i in range(4):\n print(t, t.ndim, torch.is_tensor(t))\n if i < 3: t = t[0]\n\nTSTensor(samples:30, vars:1, len:570, device=cpu, dtype=torch.float32) 3 True\nTSTensor(vars:1, len:570, device=cpu, dtype=torch.float32) 2 True\nTSTensor(len:570, device=cpu, dtype=torch.float32) 1 True\nTSTensor([-0.6113752722740173], device=cpu, dtype=torch.float32) 0 True\n\n\n\nTSTensor(X_on_disk)\n\nTSTensor(samples:60, vars:1, len:570, device=cpu, dtype=torch.float32)\n\n\n\nToTSTensor()(X_on_disk)\n\nTSTensor(samples:60, vars:1, len:570, device=cpu, dtype=torch.float32)\n\n\n\nTSTensor(X_train).show();\n\n\n\n\n\n\n\n\n\nTSTensor(X_train).show(title='1');\n\n\n\n\n\n\n\n\n\nshow_tuple((TSTensor(X_train), ['1', '2']))\n\n\n\n\n\n\n\n\n\nshow_tuple((TSTensor(np.arange(10).reshape(2,5)), 1))\n\n\n\n\n\n\n\n\n\nshow_tuple((TSTensor(np.arange(10).reshape(2,5)), '1'))\n\n\n\n\n\n\n\n\n\nshow_tuple((TSTensor(np.arange(10).reshape(2,5)), [1,2]))\n\n\n\n\n\n\n\n\n\nshow_tuple((TSTensor(np.arange(10).reshape(2,5)), ['1', '2']))\n\n\n\n\n\n\n\n\n\nsource\n\n\nTSMaskTensor\n\n TSMaskTensor (o, dtype=None, device=None, copy=None, requires_grad=False,\n **kwargs)\n\nReturns a tensor with subclass NumpyTensor that has a show method\n\nsource\n\n\nTSLabelTensor\n\n TSLabelTensor (o, dtype=None, device=None, copy=None,\n requires_grad=False, **kwargs)\n\nReturns a tensor with subclass NumpyTensor that has a show method\n\nt = TSLabelTensor(torch.randint(0,10,(1, 2, 3)))\nt, t[0], t[0][0], t[0][0][0]\n\n(TSLabelTensor(shape:(1, 2, 3), device=cpu, dtype=torch.int64),\n TSLabelTensor(shape:(2, 3), device=cpu, dtype=torch.int64),\n TSLabelTensor(shape:(3,), device=cpu, dtype=torch.int64),\n 7)\n\n\n\nt = TSMaskTensor(torch.randint(0,10,(1, 2, 3)))\nt, t[0], t[0][0], t[0][0][0]\n\n(TSMaskTensor(shape:(1, 2, 3), device=cpu, dtype=torch.int64),\n TSMaskTensor(shape:(2, 3), device=cpu, dtype=torch.int64),\n TSMaskTensor(shape:(3,), device=cpu, dtype=torch.int64),\n 1)\n\n\n\nsource\n\n\nTSClassification\n\n TSClassification (vocab=None, sort=True)\n\nVectorized, reversible transform of category string to vocab id\n\nsource\n\n\nToInt\n\n ToInt (enc=None, dec=None, split_idx=None, order=None)\n\nTransforms an object dtype to int\n\nsource\n\n\nToFloat\n\n ToFloat (enc=None, dec=None, split_idx=None, order=None)\n\nTransforms an object dtype to float (vectorized)\n\na = np.random.randint(0, 2, 10)\nb = np.array(['1', '2', '3'])\nc = np.array(['1.0', '2.0', '3.0'])\nt = torch.randint(0, 2, (10, ))\ntest_eq(ToFloat()(a).dtype, 'float32')\ntest_eq(ToFloat()(b).dtype, 'float32')\ntest_eq(ToFloat()(c).dtype, 'float32')\ntest_eq(ToFloat()(t).dtype, torch.float32)\n\n\na = np.random.rand(10)*10\nb = np.array(['1.0', '2.0', '3.0'])\nt = torch.rand(10)*10\ntest_eq(ToInt()(a).dtype, 'int64')\ntest_eq(ToInt()(b).dtype, 'int64')\ntest_eq(ToInt()(t).dtype, torch.long)\n\n\nt = TSClassification()\nt.setup(y_on_disk[splits[0]])\ny_encoded = t(y_on_disk)\nprint(y_encoded)\ntest_eq(t.decodes(y_encoded), y_on_disk)\n\nTensorCategory([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,\n 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3])\n\n\n\ny_multi= np.random.randint(0,3,20)\ny_multi = np.asarray(alphabet[y_multi]).reshape(4,5)\ntfm = TSClassification()\ntfm.setup(y_multi)\nenc_y_multi = tfm(y_multi)\ntest_eq(y_multi, tfm.decode(enc_y_multi))\nenc_y_multi\n\nTensorCategory([[0, 1, 1, 1, 2],\n [0, 1, 2, 1, 0],\n [2, 1, 0, 1, 2],\n [0, 2, 0, 2, 2]])\n\n\n\nsource\n\n\nTSMultiLabelClassification\n\n TSMultiLabelClassification (c=None, vocab=None, add_na=False, sort=True)\n\nReversible combined transform of multi-category strings to one-hot encoded vocab id\n\nsource\n\n\nTSTensorBlock\n\n TSTensorBlock (type_tfms=None, item_tfms=None, batch_tfms=None,\n dl_type=None, dls_kwargs=None)\n\nInitialize self. See help(type(self)) for accurate signature.\n\nsource\n\n\nNumpyTensorBlock\n\n NumpyTensorBlock (type_tfms=None, item_tfms=None, batch_tfms=None,\n dl_type=None, dls_kwargs=None)\n\nInitialize self. See help(type(self)) for accurate signature.\n\ntest_eq(NumpyTensorBlock().item_tfms[0].__name__, 'ToNumpyTensor')\ntest_eq(TSTensorBlock().item_tfms[0].__name__, 'ToTSTensor')\n\n\nsource\n\n\nTSDataset\n\n TSDataset (X, y=None, split=None, sel_vars=None, sel_steps=None,\n types=None, dtype=None, device=None)\n\nInitialize self. See help(type(self)) for accurate signature.\n\nsource\n\n\nNumpyDataset\n\n NumpyDataset (X, y=None, types=None)\n\nInitialize self. See help(type(self)) for accurate signature.\n\nsource\n\n\nTorchDataset\n\n TorchDataset (X, y=None)\n\nInitialize self. See help(type(self)) for accurate signature.\n\na = np.random.rand(5,6,7)\nb = np.random.rand(5)\nds = NumpyDataset(a,b)\nxb, yb = ds[[0,4]]\ntest_eq(xb.shape, (2,6,7))\ntest_eq(yb.shape, (2,))\n\n\nsource\n\n\nTSTfmdLists\n\n TSTfmdLists (items=None, *rest, use_list=False, match=None)\n\nA Pipeline of tfms applied to a collection of items\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nitems\nlist\n\nItems to apply Transforms to\n\n\nuse_list\nbool\nNone\nUse list in L\n\n\n\n\nsource\n\n\nNoTfmLists\n\n NoTfmLists (items=None, *rest, use_list=False, match=None)\n\nA Pipeline of tfms applied to a collection of items\n\nitems = X_on_disk\ntl = TfmdLists(items, tfms=None, splits=splits)\ntest_eq(len(tl), len(X_on_disk))\ntest_eq(len(tl.train), len(splits[0]))\ntest_eq(len(tl.valid), len(splits[1]))\ntest_eq(tl[[0,4,7]], X_on_disk[[0,4,7]])\ntest_eq(tl.train[[0,4,7]], X_on_disk[splits[0][0,4,7]])\ntest_eq(tl.valid[[0,4,7]], X_on_disk[splits[1][0,4,7]])\ntest_eq(tl[0], items[0])\ntest_eq(tl[[0,1]], items[[0,1]])\ntest_eq(tl.decode(tl[0]), tl[0])\ntest_eq((tl.split_idx, tl.train.split_idx, tl.valid.split_idx), (None, 0, 1))\n\n\nitems = X_on_disk\ntl = TSTfmdLists(items, tfms=None, splits=splits)\ntest_eq(len(tl), len(X_on_disk))\ntest_eq(len(tl.train), len(splits[0]))\ntest_eq(len(tl.valid), len(splits[1]))\ntest_eq(tl[[0,4,7]], X_on_disk[[0,4,7]])\ntest_eq(tl.train[[0,4,7]], X_on_disk[splits[0][0,4,7]])\ntest_eq(tl.valid[[0,4,7]], X_on_disk[splits[1][0,4,7]])\ntest_eq(tl[0], items[0])\ntest_eq(tl[[0,1]], items[[0,1]])\ntest_eq(tl.decode(tl[0]), tl[0])\ntest_eq((tl.split_idx, tl.train.split_idx, tl.valid.split_idx), (None, 0, 1))\n\n\nitems = X_on_disk\nntl = NoTfmLists(items, splits=splits)\ntest_eq(len(ntl), len(X_on_disk))\ntest_eq(len(ntl.train), len(splits[0]))\ntest_eq(len(ntl.valid), len(splits[1]))\ntest_eq(ntl._splits, np.arange(len(X_on_disk)))\ntest_eq(ntl.train._splits, np.arange(len(splits[0])))\ntest_eq(ntl.valid._splits, np.arange(len(splits[0]), len(X_on_disk)))\nprint(ntl)\nprint(ntl.train)\nprint(ntl.valid)\ntest_eq(ntl[[0,4,7]], X_on_disk[[0,4,7]])\ntest_eq(ntl.train[[0,4,7]], X_on_disk[splits[0][0,4,7]])\ntest_eq(ntl.valid[[0,4,7]], X_on_disk[splits[1][0,4,7]])\ntest_eq(ntl[0], items[0])\ntest_eq(ntl[[0,1]], items[[0,1]])\ntest_eq(ntl[:], X_on_disk)\nntl[0].shape, stack(ntl[[0,1]]).shape\ntest_eq(ntl.decode(ntl[0]), ntl[0])\nassert id(items) == id(ntl.items) == id(ntl.train.items) == id(ntl.valid.items)\ntest_eq((ntl.split_idx, ntl.train.split_idx, ntl.valid.split_idx), (None, 0, 1))\n\nNoTfmLists: memmap(60, 1, 570)\nNoTfmLists: memmap(30, 1, 570)\nNoTfmLists: memmap(30, 1, 570)\n\n\n\nsubitems = X_on_disk\nnew_ntl = ntl._new(X_on_disk)\ntest_eq(new_ntl[:], X_on_disk)\n\n\nidxs = random_choice(len(X_on_disk), 10, False)\nnew_ntl = ntl._new(X_on_disk[idxs])\ntest_eq(new_ntl[:], X_on_disk[idxs])\n\n\nidxs = random_choice(len(X_on_disk), 10, False)\nnew_ntl = ntl.valid._new(X_on_disk[idxs])\ntest_eq(new_ntl[:], X_on_disk[idxs])\n\n\nsource\n\n\ntscoll_repr\n\n tscoll_repr (c, max_n=10)\n\nString repr of up to max_n items of (possibly lazy) collection c\n\nsource\n\n\nNumpyDatasets\n\n NumpyDatasets (items:list=None, tfms:MutableSequence|Pipeline=None,\n tls:TfmdLists=None, n_inp:int=None, dl_type=None,\n use_list:bool=None, do_setup:bool=True,\n split_idx:int=None, train_setup:bool=True,\n splits:list=None, types=None, verbose:bool=False)\n\nA dataset that creates tuples from X (and y) and applies tfms of type item_tfms\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nitems\nlist\n\nItems to apply Transforms to\n\n\ntfms\nMutableSequence | Pipeline\n\nTransform(s) or Pipeline to apply\n\n\ntls\nNoneType\nNone\n\n\n\nn_inp\nNoneType\nNone\n\n\n\ndl_type\nTfmdDL\nNone\nType of DataLoader\n\n\nuse_list\nbool\nNone\nUse list in L\n\n\ndo_setup\nbool\nTrue\nCall setup() for Transform\n\n\nsplit_idx\nint\nNone\nApply Transform(s) to training or validation set. 0 for training set and 1 for validation set\n\n\ntrain_setup\nbool\nTrue\nApply Transform(s) only on training DataLoader\n\n\nsplits\nlist\nNone\nIndices for training and validation sets\n\n\ntypes\nNoneType\nNone\nTypes of data in items\n\n\nverbose\nbool\nFalse\nPrint verbose output\n\n\n\n\nsource\n\n\nTSDatasets\n\n TSDatasets (items:list=None, tfms:MutableSequence|Pipeline=None,\n tls:TfmdLists=None, n_inp:int=None, dl_type=None,\n use_list:bool=None, do_setup:bool=True, split_idx:int=None,\n train_setup:bool=True, splits:list=None, types=None,\n verbose:bool=False)\n\nA dataset that creates tuples from X (and optionally y) and applies item_tfms\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nitems\nlist\n\nItems to apply Transforms to\n\n\ntfms\nMutableSequence | Pipeline\n\nTransform(s) or Pipeline to apply\n\n\ntls\nNoneType\nNone\n\n\n\nn_inp\nNoneType\nNone\n\n\n\ndl_type\nTfmdDL\nNone\nType of DataLoader\n\n\nuse_list\nbool\nNone\nUse list in L\n\n\ndo_setup\nbool\nTrue\nCall setup() for Transform\n\n\nsplit_idx\nint\nNone\nApply Transform(s) to training or validation set. 0 for training set and 1 for validation set\n\n\ntrain_setup\nbool\nTrue\nApply Transform(s) only on training DataLoader\n\n\nsplits\nlist\nNone\nIndices for training and validation sets\n\n\ntypes\nNoneType\nNone\nTypes of data in items\n\n\nverbose\nbool\nFalse\nPrint verbose output\n\n\n\n\ndsets = TSDatasets(X_on_disk, y_on_disk, splits=splits, tfms=[None, TSClassification()], inplace=True)\ni = random_choice(len(splits[0]), 10, False).tolist()\ntest_eq(dsets.subset(i), dsets.train.subset(i))\ndsets.valid.subset(i)\ndsets.valid.subset(i)[[0,6,8]]\ntest_eq(dsets.subset(i)[[0,6,8]], dsets.train.subset(i)[[0,6,8]])\ndsets.subset([0,7,3])\ndsets.subset(i), dsets.train.subset(i), dsets.valid.subset(i)\n\n((#10) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(2)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3))] ...],\n (#10) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(2)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3))] ...],\n (#10) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(2)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(3))] ...])\n\n\n\ntfms = [None, TSClassification()]\ndsets = TSDatasets(X_on_disk, y_on_disk, splits=splits, tfms=tfms, inplace=False)\nassert id(X_on_disk) == id(dsets.ptls[0].items) == id(dsets.train.ptls[0].items) == id(dsets.valid.ptls[0].items)\n\ntfms = None\ndsets = TSDatasets(X_on_disk, splits=splits, tfms=tfms, inplace=False)\nassert id(X_on_disk) == id(dsets.ptls[0].items) == id(dsets.train.ptls[0].items) == id(dsets.valid.ptls[0].items)\n\n\nsource\n\n\nTSDatasets.add_unlabeled\n\n TSDatasets.add_unlabeled (X, inplace=True)\n\n\nsource\n\n\nTSDatasets.add_test\n\n TSDatasets.add_test (X, y=None, inplace=True)\n\n\nsource\n\n\nTSDatasets.add_dataset\n\n TSDatasets.add_dataset (X, y=None, inplace=True)\n\n\nsource\n\n\nNumpyDatasets.add_unlabeled\n\n NumpyDatasets.add_unlabeled (X, inplace=True)\n\n\nsource\n\n\nNumpyDatasets.add_test\n\n NumpyDatasets.add_test (X, y=None, inplace=True)\n\n\nsource\n\n\nNumpyDatasets.add_dataset\n\n NumpyDatasets.add_dataset (X, y=None, inplace=True)\n\n\nsource\n\n\nadd_ds\n\n add_ds (dsets, X, y=None, inplace=True)\n\nCreate test datasets from X (and y) using validation transforms of dsets\n\ndsets = TSDatasets(X_on_disk, y_on_disk, splits=splits, tfms=[None, TSClassification()], inplace=True)\nprint(dsets.train[0][0].shape, dsets.train[[0,1]][0].shape)\nprint(dsets.split_idx, dsets.train.split_idx, dsets.valid.split_idx)\nprint(dsets.new_empty())\ndsets\n\ntorch.Size([1, 570]) torch.Size([2, 1, 570])\nNone 0 1\n(#0) []\n\n\n(#60) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory(1))] ...]\n\n\n\ndsets = TSDatasets(X_on_disk, y_on_disk, splits=splits, tfms=[None, TSClassification()], inplace=False)\nprint(dsets.train[0][0].shape, dsets.train[[0,1]][0].shape)\nprint(dsets.split_idx, dsets.train.split_idx, dsets.valid.split_idx)\nprint(dsets.new_empty())\ndsets\n\ntorch.Size([1, 570]) torch.Size([2, 1, 570])\nNone 0 1\n(#0) []\n\n\n(#60) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([0])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([0])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([0])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([0])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([0])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([1])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([1])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([1])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([1])), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), TensorCategory([1]))] ...]\n\n\n\ndsets = TSDatasets(X_on_disk, y_on_disk, tfms=[None, TSClassification()], splits=splits, inplace=True)\n\nidxs = random_choice(len(dsets), 10, False)\ntest_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])\ntest_eq(dsets[idxs][1].numpy(), y_array[idxs])\n\nidxs = random_choice(len(dsets.train), 10, False)\ntest_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])\ntest_eq(dsets.train[idxs][1].numpy(), y_array[splits[0][idxs]])\n\nidxs = random_choice(len(dsets.valid), 10, False)\ntest_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])\ntest_eq(dsets.valid[idxs][1].numpy(), y_array[splits[1][idxs]])\n\n\ndsets = TSDatasets(X_on_disk, y_on_disk, tfms=[None, TSClassification()], splits=splits, inplace=False)\nassert id(X_on_disk) == id(dsets.tls[0].items) == id(dsets.ptls[0].items)\nassert id(X_on_disk) == id(dsets.train.tls[0].items) == id(dsets.train.ptls[0].items)\nassert id(X_on_disk) == id(dsets.valid.tls[0].items) == id(dsets.valid.ptls[0].items)\n\nidxs = random_choice(len(dsets), 10, False)\ntest_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])\ntest_eq(dsets[idxs][1].numpy(), y_array[idxs])\n\n\nidxs = random_choice(len(dsets.train), 10, False)\ntest_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])\ntest_eq(dsets.train[idxs][1].numpy(), y_array[splits[0][idxs]])\n\nidxs = random_choice(len(dsets.valid), 10, False)\ntest_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])\ntest_eq(dsets.valid[idxs][1].numpy(), y_array[splits[1][idxs]])\n\n\ndsets = TSDatasets(X_on_disk, splits=splits, inplace=True)\n\nidxs = random_choice(len(dsets), 10, False)\ntest_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])\n\nidxs = random_choice(len(dsets.train), 10, False)\ntest_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])\n\nidxs = random_choice(len(dsets.valid), 10, False)\ntest_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])\n\n\ndsets = TSDatasets(X_on_disk, splits=splits, inplace=False)\nassert np.shares_memory(X_on_disk, dsets.tls[0].items)\nassert np.shares_memory(X_on_disk, dsets.ptls[0].items)\nassert np.shares_memory(X_on_disk, dsets.train.tls[0].items)\nassert np.shares_memory(X_on_disk, dsets.train.ptls[0].items)\nassert np.shares_memory(X_on_disk, dsets.valid.tls[0].items)\nassert np.shares_memory(X_on_disk, dsets.valid.ptls[0].items)\n\nidxs = random_choice(len(dsets), 10, False)\ntest_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])\n\nidxs = random_choice(len(dsets.train), 10, False)\ntest_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])\n\nidxs = random_choice(len(dsets.valid), 10, False)\ntest_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])\n\n\ndsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits, inplace=True)\n\nidxs = random_choice(len(dsets), 10, False)\ntest_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])\ntest_eq(dsets[idxs][1].numpy(), y_array[idxs])\n\nidxs = random_choice(len(dsets.train), 10, False)\ntest_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])\ntest_eq(dsets.train[idxs][1].numpy(), y_array[splits[0][idxs]])\n\nidxs = random_choice(len(dsets.valid), 10, False)\ntest_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])\ntest_eq(dsets.valid[idxs][1].numpy(), y_array[splits[1][idxs]])\n\n\ndsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits, inplace=False)\nassert np.shares_memory(X_on_disk, dsets.tls[0].items)\nassert np.shares_memory(X_on_disk, dsets.ptls[0].items)\nassert np.shares_memory(X_on_disk, dsets.train.tls[0].items)\nassert np.shares_memory(X_on_disk, dsets.train.ptls[0].items)\nassert np.shares_memory(X_on_disk, dsets.valid.tls[0].items)\nassert np.shares_memory(X_on_disk, dsets.valid.ptls[0].items)\n\nidxs = random_choice(len(dsets), 10, False)\ntest_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])\ntest_eq(dsets[idxs][1].numpy(), y_array[idxs])\n\nidxs = random_choice(len(dsets.train), 10, False)\ntest_eq(dsets.train[idxs][0].numpy(), X_on_disk[splits[0][idxs]])\ntest_eq(dsets.train[idxs][1].numpy(), y_array[splits[0][idxs]])\n\nidxs = random_choice(len(dsets.valid), 10, False)\ntest_eq(dsets.valid[idxs][0].numpy(), X_on_disk[splits[1][idxs]])\ntest_eq(dsets.valid[idxs][1].numpy(), y_array[splits[1][idxs]])\n\n\ndsets = TSDatasets(X_on_disk, y_on_disk, tfms=[None, TSClassification()], splits=None, inplace=True)\n\nidxs = random_choice(len(dsets), 10, False)\ntest_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])\ntest_eq(dsets[idxs][1].numpy(), y_array[idxs])\n\n\ndsets = TSDatasets(X_on_disk, y_on_disk, tfms=[None, TSClassification()], splits=None, inplace=False)\nassert id(X_on_disk) == id(dsets.tls[0].items) == id(dsets.ptls[0].items)\nassert id(X_on_disk) == id(dsets.train.tls[0].items) == id(dsets.train.ptls[0].items)\n\nidxs = random_choice(len(dsets), 10, False)\ntest_eq(dsets[idxs][0].numpy(), X_on_disk[idxs])\ntest_eq(dsets[idxs][1].numpy(), y_array[idxs])\n\n\ndsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits)\ntest_eq(dsets.train[0:10], dsets.add_dataset(X_on_disk[0:10], y_array[0:10])[:])\ntest_eq(dsets.train[0:10][0], dsets.add_dataset(X_on_disk[0:10])[:][0])\n\n\ndsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits)\ntorch.save(dsets, 'export/dsets.pth')\ndel dsets\ndsets = torch.load('export/dsets.pth')\ndsets\n\n(#60) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1))] ...]\n\n\n\ndsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits)\ntorch.save(dsets.train, 'export/dsets.pth')\ndel dsets\ndsets = torch.load('export/dsets.pth')\ndsets\n\n(#30) [(TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(0)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1)), (TSTensor(vars:1, len:570, device=cpu, dtype=torch.float32), tensor(1))] ...]\n\n\n\ndsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits)\ntest_eq(len(dsets.train), len(X_train))\ndsets = TSDatasets(X_on_disk, y_array, tfms=None, splits=splits)\ntest_eq(len(dsets.train), len(X_train))\ndsets = TSDatasets(X_on_disk, y_array, tfms=[add(1), TSCategorize()], splits=splits)\ntest_eq(len(dsets.train), len(X_train))\n# test_eq(dsets.train[0][0].data, tensor(X_train[0] + 1))\ntest_eq(dsets.train[0][1].item(), y_tensor[0])\n\n\ndsets = TSDatasets(X_on_disk, y_on_disk, tfms=[None, TSCategorize()], splits=splits)\ntest_eq(len(dsets.add_test(X_train, y_train)), len(X_train))\ntest_eq(len(dsets.add_unlabeled(X_train)), len(X_train))\n\n\nX_tensor = torch.randn(100, 4, 50)\ny_tensor = torch.randint(0, 2, size=(len(X_tensor),))\ntensor_splits = (np.arange(80), np.arange(80, 100))\ndsets = TSDatasets(X_tensor, y_tensor, tfms=[None, TSClassification()], splits=tensor_splits)\ntest_eq(type(dsets[0][0]), TSTensor)\n\n\nsource\n\n\nTSDataLoader\n\n TSDataLoader (dataset, bs=64, shuffle=False, drop_last=False,\n num_workers=0, verbose=False, do_setup=True, vocab=None,\n sort=False, weights=None, partial_n=None, sampler=None,\n pin_memory=False, timeout=0, batch_size=None, indexed=None,\n n=None, device=None, persistent_workers=False,\n pin_memory_device='', wif=None, before_iter=None,\n after_item=None, before_batch=None, after_batch=None,\n after_iter=None, create_batches=None, create_item=None,\n create_batch=None, retain=None, get_idxs=None, sample=None,\n shuffle_fn=None, do_batch=None)\n\nTransformed DataLoader\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndataset\n\n\nMap- or iterable-style dataset from which to load the data\n\n\nbs\nint\n64\nSize of batch\n\n\nshuffle\nbool\nFalse\nWhether to shuffle data\n\n\ndrop_last\nbool\nFalse\n\n\n\nnum_workers\nint\nNone\nNumber of CPU cores to use in parallel (default: All available up to 16)\n\n\nverbose\nbool\nFalse\nWhether to print verbose logs\n\n\ndo_setup\nbool\nTrue\nWhether to run setup() for batch transform(s)\n\n\nvocab\nNoneType\nNone\n\n\n\nsort\nbool\nFalse\n\n\n\nweights\nNoneType\nNone\n\n\n\npartial_n\nNoneType\nNone\n\n\n\nsampler\nNoneType\nNone\n\n\n\npin_memory\nbool\nFalse\n\n\n\ntimeout\nint\n0\n\n\n\nbatch_size\nNoneType\nNone\n\n\n\nindexed\nNoneType\nNone\n\n\n\nn\nNoneType\nNone\n\n\n\ndevice\nNoneType\nNone\n\n\n\npersistent_workers\nbool\nFalse\n\n\n\npin_memory_device\nstr\n\n\n\n\nwif\nNoneType\nNone\n\n\n\nbefore_iter\nNoneType\nNone\n\n\n\nafter_item\nNoneType\nNone\n\n\n\nbefore_batch\nNoneType\nNone\n\n\n\nafter_batch\nNoneType\nNone\n\n\n\nafter_iter\nNoneType\nNone\n\n\n\ncreate_batches\nNoneType\nNone\n\n\n\ncreate_item\nNoneType\nNone\n\n\n\ncreate_batch\nNoneType\nNone\n\n\n\nretain\nNoneType\nNone\n\n\n\nget_idxs\nNoneType\nNone\n\n\n\nsample\nNoneType\nNone\n\n\n\nshuffle_fn\nNoneType\nNone\n\n\n\ndo_batch\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nNumpyDataLoader\n\n NumpyDataLoader (dataset, bs=64, shuffle=False, drop_last=False,\n num_workers=0, verbose=False, do_setup=True, vocab=None,\n sort=False, weights=None, partial_n=None, sampler=None,\n pin_memory=False, timeout=0, batch_size=None,\n indexed=None, n=None, device=None,\n persistent_workers=False, pin_memory_device='',\n wif=None, before_iter=None, after_item=None,\n before_batch=None, after_batch=None, after_iter=None,\n create_batches=None, create_item=None,\n create_batch=None, retain=None, get_idxs=None,\n sample=None, shuffle_fn=None, do_batch=None)\n\nTransformed DataLoader\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ndataset\n\n\nMap- or iterable-style dataset from which to load the data\n\n\nbs\nint\n64\nSize of batch\n\n\nshuffle\nbool\nFalse\nWhether to shuffle data\n\n\ndrop_last\nbool\nFalse\n\n\n\nnum_workers\nint\nNone\nNumber of CPU cores to use in parallel (default: All available up to 16)\n\n\nverbose\nbool\nFalse\nWhether to print verbose logs\n\n\ndo_setup\nbool\nTrue\nWhether to run setup() for batch transform(s)\n\n\nvocab\nNoneType\nNone\n\n\n\nsort\nbool\nFalse\n\n\n\nweights\nNoneType\nNone\n\n\n\npartial_n\nNoneType\nNone\n\n\n\nsampler\nNoneType\nNone\n\n\n\npin_memory\nbool\nFalse\n\n\n\ntimeout\nint\n0\n\n\n\nbatch_size\nNoneType\nNone\n\n\n\nindexed\nNoneType\nNone\n\n\n\nn\nNoneType\nNone\n\n\n\ndevice\nNoneType\nNone\n\n\n\npersistent_workers\nbool\nFalse\n\n\n\npin_memory_device\nstr\n\n\n\n\nwif\nNoneType\nNone\n\n\n\nbefore_iter\nNoneType\nNone\n\n\n\nafter_item\nNoneType\nNone\n\n\n\nbefore_batch\nNoneType\nNone\n\n\n\nafter_batch\nNoneType\nNone\n\n\n\nafter_iter\nNoneType\nNone\n\n\n\ncreate_batches\nNoneType\nNone\n\n\n\ncreate_item\nNoneType\nNone\n\n\n\ncreate_batch\nNoneType\nNone\n\n\n\nretain\nNoneType\nNone\n\n\n\nget_idxs\nNoneType\nNone\n\n\n\nsample\nNoneType\nNone\n\n\n\nshuffle_fn\nNoneType\nNone\n\n\n\ndo_batch\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nTSDataLoaders\n\n TSDataLoaders (*loaders, path='.', device=None)\n\nBasic wrapper around several DataLoaders.\n\nsource\n\n\nNumpyDataLoaders\n\n NumpyDataLoaders (*loaders, path='.', device=None)\n\nBasic wrapper around several DataLoaders.\n\nsource\n\n\nStratifiedSampler\n\n StratifiedSampler (y, bs:int=64, shuffle:bool=False,\n drop_last:bool=False)\n\nSampler where batches preserve the percentage of samples for each class\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\ny\n\n\nThe target variable for supervised learning problems. Stratification is done based on the y labels.\n\n\nbs\nint\n64\nBatch size\n\n\nshuffle\nbool\nFalse\nFlag to shuffle each class’s samples before splitting into batches.\n\n\ndrop_last\nbool\nFalse\nFlag to drop the last incomplete batch.\n\n\n\n\na = np.concatenate([np.zeros(90), np.ones(10)])\nsampler = StratifiedSampler(a, bs=32, shuffle=True, drop_last=True)\nidxs = np.array(list(iter(sampler)))\nprint(idxs[:32])\nprint(a[idxs][:32])\ntest_eq(a[idxs][:32].mean(), .1)\n\n[[ 0 2 8 17 18 21 27 29 34 38 39 43 45 48 52 54 55 60 61 63 66 67 68 69\n 71 73 78 80 81 84 90 92 95 99 1 6 11 12 15 16 20 23 24 28 30 33 36 37\n 40 41 42 44 49 59 62 64 65 74 75 76 77 79 86 87 91 93 96 3 4 5 7 9\n 10 13 14 19 22 25 26 31 32 35 46 47 50 51 53 56 57 58 70 72 82 83 85 88\n 89 94 97 98]]\n[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 0. 0. 0. 0. 0.\n 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.\n 0. 1. 1. 1.]]\n\n\n\nsource\n\n\nget_c\n\n get_c (dls)\n\n\nsource\n\n\nget_best_dls_params\n\n get_best_dls_params (dls, n_iters=10, num_workers=[0, 1, 2, 4, 8],\n pin_memory=[True, False], prefetch_factor=[2, 4, 8],\n return_best=True, verbose=True)\n\n\nsource\n\n\nget_best_dl_params\n\n get_best_dl_params (dl, n_iters=10, num_workers=[0, 1, 2, 4, 8],\n pin_memory=[True, False], prefetch_factor=[2, 4, 8],\n return_best=True, verbose=True)\n\n\nsource\n\n\nget_ts_dls\n\n get_ts_dls (X, y=None, splits=None, sel_vars=None, sel_steps=None,\n tfms=None, inplace=True, path='.', bs=64, batch_tfms=None,\n num_workers=0, device=None, shuffle_train=True,\n drop_last=True, weights=None, partial_n=None, sampler=None,\n sort=False, **kwargs)\n\n\n# Tests\na = np.arange(10)\n\nfor s in [None, np.arange(10), np.arange(10).tolist(), L(np.arange(10).tolist()), (np.arange(10).tolist(), None), (np.arange(10).tolist(), L())]:\n test_eq(_check_splits(a, s), (L(np.arange(10).tolist()), L()))\n\n\nsource\n\n\nget_subset_dl\n\n get_subset_dl (dl, idxs)\n\n\nsource\n\n\nget_ts_dl\n\n get_ts_dl (X, y=None, split=None, sel_vars=None, sel_steps=None,\n tfms=None, inplace=True, path='.', bs=64, batch_tfms=None,\n num_workers=0, device=None, shuffle_train=True,\n drop_last=True, weights=None, partial_n=None, sampler=None,\n sort=False, **kwargs)\n\n\nX, y, splits = get_UCR_data(dsid, on_disk=False, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=8)\ndls = get_best_dls_params(dls, prefetch_factor=[2, 4, 8, 16])\n\n\nDataloader 0\n\n num_workers: 0 pin_memory: True prefetch_factor: 2 - time: 1.400 ms/iter\n num_workers: 0 pin_memory: False prefetch_factor: 2 - time: 0.620 ms/iter\n\n best dl params:\n best num_workers : 0\n best pin_memory : False\n best prefetch_factor: 2\n return_best : True\n\n\n\nDataloader 1\n\n num_workers: 0 pin_memory: True prefetch_factor: 2 - time: 0.261 ms/iter\n num_workers: 0 pin_memory: False prefetch_factor: 2 - time: 0.306 ms/iter\n\n best dl params:\n best num_workers : 0\n best pin_memory : True\n best prefetch_factor: 2\n return_best : True\n\n\n\n\n\ny_int = np.random.randint(0, 4, size=len(X))\ndls = get_ts_dls(X, y_int, splits=splits, bs=8)\ntest_eq(hasattr(dls, \"vocab\"), False)\n\ndls = get_ts_dls(X, y_int, splits=splits, bs=8, vocab=[0,1,2,3])\ntest_eq(dls.vocab, [0,1,2,3])\ntest_eq(dls.c, 4)\ntest_eq(dls.cat, True)\n\n\nX, y, splits = get_UCR_data(dsid, on_disk=False, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=8)\nb=first(dls.train)\ndls.decode(b)\ntest_eq(X.shape[1], dls.vars)\ntest_eq(X.shape[-1], dls.len)\n\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=64, inplace=True)\n\nidxs = random_choice(len(dls.valid_ds), 10, False)\nnew_dl = get_subset_dl(dls.train, idxs)\n\nidxs = random_choice(len(dls.valid_ds), 10, False)\nnew_dl = get_subset_dl(dls.valid, idxs)\ntest_eq(new_dl.one_batch()[0].cpu().numpy(), X[splits[1][idxs]])\n\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\nweights = np.random.rand(len(X))\ndls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=64, inplace=True, weights=weights)\nweights2 = weights[splits[0]] / weights[splits[0]].sum()\ntest_eq(dls.train.weights, weights2)\ntest_eq(dls.valid.weights, None)\n\n\npartial_n = 12\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ndls = get_ts_dls(X, y, splits=splits, tfms=[None, TSClassification()], bs=64, inplace=True, partial_n=partial_n)\ntest_eq(len(dls.train.one_batch()[0]), partial_n)\n\npartial_n = .1\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSClassification()], bs=64, inplace=True, partial_n=partial_n)\ntest_eq(len(dls.train.one_batch()[0]), int(round(len(dls.train.dataset) * partial_n)))\n\nYou’ll now be able to pass a sampler to a tsai dataloader.\nYou should use a sampler for the train set and a sampler for the validation set. You’ll need to pass an object with the same length as each dataset. For example, the splits like in the case below.\n⚠️ Remember to set shuffle=False when using a sampler since they a mutually exclusive. This means that when you use a sampler, you always need to set the shuffle in the dataloader to False. The sampler will control whether the indices are shuffled or not (you can set shuffle to True or False in the sampler).\ndrop_last is managed in the dataloder though.\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ntrain_sampler = torch.utils.data.sampler.RandomSampler(splits[0])\nvalid_sampler = torch.utils.data.sampler.SequentialSampler(splits[1])\ndls = get_ts_dls(X, y, splits=splits, tfms=[None, TSClassification()], bs=8, inplace=True,\n shuffle=False, drop_last=True, sampler=[train_sampler, valid_sampler])\nprint('train')\nfor _ in dls.train:\n print(dls.train.idxs)\nprint('valid')\nfor _ in dls.valid:\n print(dls.valid.idxs)\n\ntrain\n[22, 25, 16, 3, 26, 28, 7, 18]\n[5, 4, 12, 27, 29, 24, 9, 11]\n[0, 2, 8, 17, 21, 20, 23, 10]\nvalid\n[0, 1, 2, 3, 4, 5, 6, 7]\n[8, 9, 10, 11, 12, 13, 14, 15]\n[16, 17, 18, 19, 20, 21, 22, 23]\n[24, 25, 26, 27, 28, 29]\n\n\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ntrain_sampler = torch.utils.data.sampler.SequentialSampler(splits[0])\nvalid_sampler = torch.utils.data.sampler.SequentialSampler(splits[1])\ndls = get_ts_dls(X, y, splits=splits, tfms=[None, TSClassification()], bs=64, inplace=True,\n shuffle=False, sampler=[train_sampler, valid_sampler])\ntest_eq(dls.get_idxs(), np.arange(len(splits[0])))\ntest_eq(dls.train.get_idxs(), np.arange(len(splits[0])))\ntest_eq(dls.valid.get_idxs(), np.arange(len(splits[1])))\nxb = dls.valid.one_batch()[0].cpu().numpy()\ntest_close(xb, X[dls.valid.split_idxs])\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ntrain_sampler = torch.utils.data.sampler.RandomSampler(splits[0])\nvalid_sampler = torch.utils.data.sampler.SequentialSampler(splits[0])\ndls = get_ts_dls(X, y, splits=splits, tfms=[None, TSClassification()], bs=32, inplace=True,\n shuffle=False, drop_last=True, sampler=[train_sampler, valid_sampler])\ntest_ne(dls.train.get_idxs(), np.arange(len(splits[0])))\ntest_eq(np.sort(dls.train.get_idxs()), np.arange(len(splits[0])))\ntest_eq(dls.valid.get_idxs(), np.arange(len(splits[1])))\n\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=64, inplace=False)\n\nidxs = random_choice(len(dls.valid_ds), 10, False)\nnew_dl = get_subset_dl(dls.train, idxs)\n\nidxs = random_choice(len(dls.valid_ds), 10, False)\nnew_dl = get_subset_dl(dls.valid, idxs)\ntest_eq(new_dl.one_batch()[0].cpu().numpy(), X[splits[1][idxs]])\n\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSClassification()], splits=splits, bs=8)\nb = dls.one_batch()\ninput_idxs = dls.input_idxs\ntest_eq(b[0].cpu().numpy(), X[input_idxs])\nb = dls.train.one_batch()\ninput_idxs = dls.train.input_idxs\ntest_eq(b[0].cpu().numpy(), X[input_idxs])\nassert max(input_idxs) < len(splits[0])\nb = dls.valid.one_batch()\ninput_idxs = dls.valid.input_idxs\ntest_eq(b[0].cpu().numpy(), X[input_idxs])\nassert min(input_idxs) >= len(splits[0])\n\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSCategorize()], splits=splits, bs=8)\nb=first(dls.train)\ndls.decode(b)\ntest_eq(X.shape[1], dls.vars)\ntest_eq(X.shape[-1], dls.len)\n\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSCategorize()], splits=splits, bs=8, weights=np.random.randint(0, 3, len(y)))\nb=first(dls.train)\ndls.decode(b)\ntest_eq(X.shape[1], dls.vars)\ntest_eq(X.shape[-1], dls.len)\n\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ndsets = TSDatasets(X, y, tfms=[None, TSCategorize()], splits=splits)\nts_dls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, device=default_device(), bs=4)\ntorch.save(ts_dls, 'export/ts_dls.pth')\ndel ts_dls\nts_dls = torch.load('export/ts_dls.pth')\nfor xb,yb in ts_dls.train:\n test_eq(tensor(X[ts_dls.train.idxs]), xb.cpu())\n\n\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSCategorize()], splits=splits, bs=4)\nfor xb,yb in dls.train:\n test_eq(xb.cpu().numpy(), X[dls.train.input_idxs])\nfor xb,yb in dls.valid:\n test_eq(xb.cpu().numpy(), X[dls.valid.input_idxs])\n\n\ntest_eq((ts_dls.train.shuffle, ts_dls.valid.shuffle, ts_dls.train.drop_last, ts_dls.valid.drop_last), (True, False, True, False))\n\n\ndsid = 'OliveOil'\nX, y, splits = get_UCR_data(dsid, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSCategorize()], splits=splits, bs=8, num_workers=0)\nxb, yb = first(dls.train)\ntest_eq(tensor(X[dls.train.idxs]), xb.cpu())\n\n\ntest_eq((dls.train.shuffle, dls.valid.shuffle, dls.train.drop_last, dls.valid.drop_last), (True, False, True, False))\n\n\n# multiclass\ndsid = 'OliveOil'\nX, y, splits = get_UCR_data(dsid, on_disk=True, split_data=False)\ndls = get_ts_dls(X, y, tfms=[None, TSCategorize()], splits=splits, inplace=True)\ndls.show_dist()\ndls.train.show_dist()\nxb,yb = first(dls.train)\ntest_eq((dls.cat, dls.c), (True, 4))\ntest_ne(dls.cws.cpu().numpy(), None)\ndls.decoder((xb, ))\ndls.decoder((xb[0], ))\ndls.decoder((xb, yb))\ndls.decoder((xb[0], yb[0]))\ndls.decoder(yb)\ndls.decoder(yb[0])\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'1'\n\n\n\nnew_dl = dls.new_dl(X)\nfirst(new_dl)\n\n(TSTensor(samples:60, vars:1, len:570, device=cpu, dtype=torch.float32),)\n\n\n\nnew_dl = dls.new_dl(X, y=y)\nfirst(new_dl)\n\n(TSTensor(samples:60, vars:1, len:570, device=cpu, dtype=torch.float32),\n TensorCategory([2, 3, 2, 2, 0, 1, 1, 3, 3, 1, 2, 0, 0, 3, 0, 1, 0, 3, 3, 3, 1,\n 3, 3, 3, 3, 3, 0, 3, 1, 1, 3, 3, 2, 3, 3, 3, 1, 1, 3, 2, 3, 0,\n 3, 0, 3, 1, 1, 2, 1, 1, 1, 3, 3, 1, 2, 1, 1, 3, 0, 0]))\n\n\n\ndls.train.dataset.split_idxs, dls.train.dataset.splits, dls.valid.split_idxs\n\n(array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], dtype=int8),\n (#30) [0,1,2,3,4,5,6,7,8,9...],\n array([30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,\n 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], dtype=int8))\n\n\n\n# 2d input array and tfms == None return a NoTfmLists object\nX, y, splits = get_UCR_data('OliveOil', on_disk=False, split_data=False)\nX = X[:, 0]\ntfms=[None, TSCategorize()]\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, bs=8)\ntest_eq(1, dls.vars)\ntest_eq(X.shape[-1], dls.len)\ntest_eq(type(dls.tls[0]).__name__, 'NoTfmLists')\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, bs=8, inplace=False)\ntest_eq(1, dls.vars)\ntest_eq(X.shape[-1], dls.len)\ntest_eq(type(dls.tls[0]).__name__, 'NoTfmLists')\n\n\n# regression\ndsid = 'OliveOil'\nX, y, splits = get_UCR_data(dsid, on_disk=True, split_data=False)\ndls = get_ts_dls(X, np.random.rand(60, ), tfms=[None, ToNumpyTensor], splits=splits)\ndls.show_dist()\ndls.train.show_dist()\nxb,yb = first(dls.train)\ndls.decoder((xb, ))\ndls.decoder((xb[0], ))\ndls.decoder((xb, yb))\ndls.decoder((xb[0], yb[0]))\ndls.decoder(yb)\ndls.decoder(yb[0])\ntest_eq((dls.cat, dls.c), (False, 1))\ntest_eq(dls.cws, None)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# regression, multilabel\ndsid = 'OliveOil'\nX, y, splits = get_UCR_data(dsid, on_disk=True, split_data=False)\ndls = get_ts_dls(X, np.random.rand(60, 3) * 5, tfms=[None, ToNumpyTensor], splits=splits)\ndls.show_dist()\ndls.train.show_dist()\nxb,yb = first(dls.train)\ndls.decoder((xb, ))\ndls.decoder((xb[0], ))\ndls.decoder((xb, yb))\ndls.decoder((xb[0], yb[0]))\ndls.decoder(yb)\ndls.decoder(yb[0])\ntest_eq((dls.cat, dls.c, dls.d),(False, 1, 3))\ntest_eq(dls.cws, None)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# multiclass, multilabel\ndsid = 'OliveOil'\nX, y, splits = get_UCR_data(dsid, on_disk=True, split_data=False)\ncm = {\n '1':'A',\n '2':['B', 'C'],\n '3':['B', 'D'] ,\n '4':'E',\n }\nkeys = cm.keys()\nnew_cm = {k:v for k,v in zip(keys, [listify(v) for v in cm.values()])}\ny_multi = np.array([new_cm[yi] if yi in keys else listify(yi) for yi in y], dtype=object)\ndls = get_ts_dls(X, y_multi, tfms=[None, TSMultiLabelClassification()], splits=splits)\ndls.show_dist()\ndls.train.show_dist()\nxb,yb = first(dls.train)\ndls.decoder((xb, ))\ndls.decoder((xb[0], ))\ndls.decoder((xb, yb))\ndls.decoder((xb[0], yb[0]))\ndls.decoder(yb)\ndls.decoder(yb[0])\ntest_eq((dls.cat, dls.c), (True, 5))\ntest_ne(dls.cws.cpu().numpy(), None)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ndsid = 'OliveOil'\nX, y, splits = get_UCR_data(dsid, on_disk=True, split_data=False)\ncm = {\n '1':'A',\n '2':['B', 'C'],\n '3':['B', 'D'] ,\n '4':'E',\n }\nkeys = cm.keys()\nnew_cm = {k:v for k,v in zip(keys, [listify(v) for v in cm.values()])}\ny_multi = np.array([new_cm[yi] if yi in keys else listify(yi) for yi in y], dtype=object)\ndls = get_ts_dls(X, y_multi, tfms=[None, TSMultiLabelClassification()], splits=splits)\ntest_eq(dls.new(X[0]).one_batch().shape, (1, 570))\ntest_eq(dls.new(X[:15]).one_batch().shape, (15, 1, 570))\ntest_eq(dls.train.new(X[0]).one_batch().shape, (1, 570))\ntest_eq(dls.valid.new(X[:15]).one_batch().shape, (15, 1, 570))\n\n\nbs = 25\ndsets = TSDatasets(X, y, tfms=[None, TSCategorize()], splits=splits)\ndls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[bs, bs*2], batch_tfms=add(1), num_workers=0)\nxb,yb = dls.train.one_batch()\ntest_eq(xb.cpu().data, tensor(X_on_disk[splits[0]][dls.train.idxs]) + 1)\n\n\ndsets = TSDatasets(X, y, tfms=[None, TSCategorize()], splits=splits)\ndls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[bs, bs*2])\nxb,yb = dls.train.one_batch()\ntest_eq(xb.shape, (min(bs, len(splits[0])), X.shape[1], X.shape[-1]))\nit = iter(dls.valid)\nfor xb,yb in it:\n test_close(xb.cpu(), TSTensor(X[splits[1]][dls.valid.idxs]))\n\n\nbs = 64\ndsets = TSDatasets(X, y, tfms=[add(1), TSCategorize()], splits=RandomSplitter(valid_pct=.3)(y_array))\ndls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[bs, bs*2])\nxb,yb = dls.train.one_batch()\ntest_eq(xb.shape, (min(bs, len(dsets.train)), X_on_disk.shape[1], X_on_disk.shape[-1]))\nxb,yb = dls.valid.one_batch()\ntest_eq(xb.shape, (min(bs*2, len(dsets.valid)), X_on_disk.shape[1], X_on_disk.shape[-1]))\n\n\ndsets = TSDatasets(X_on_disk, y_array, tfms=[None, TSCategorize()], splits=splits)\ndls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[32, 64])\nfor i in range(10):\n dl = dls.train if random.random() < .5 else dls.valid\n xb,yb = dl.one_batch()\n torch.equal(xb.cpu(), TSTensor(X_on_disk[dl.input_idxs]))\n\ndsets = TSDatasets(X_on_disk, y_array, tfms=[None, TSCategorize()])\ndls = TSDataLoaders.from_dsets(dsets, bs=32)\nfor i in range(10):\n xb,yb = dls.one_batch()\n torch.equal(xb.cpu(), TSTensor(X_on_disk[dl.input_idxs]))\n\ndsets = TSDatasets(X_on_disk, tfms=None)\ndls = TSDataLoaders.from_dsets(dsets, bs=32)\nfor i in range(10):\n xb = dls.one_batch()\n torch.equal(xb[0].cpu(), TSTensor(X_on_disk[dl.input_idxs]))\n\n\ndsets = TSDatasets(X_on_disk, y_array, tfms=[None, TSCategorize()])\ndls = TSDataLoaders.from_dsets(dsets, bs=32)\ntest_eq(dls.split_idxs, L(np.arange(len(X_on_disk)).tolist()))\n\n\nX, y, splits = get_UCR_data('NATOPS', return_split=False)\ntfms = [None, [TSCategorize()]]\ndls = get_ts_dls(X, y, tfms=tfms, splits=splits, bs=[64, 128])\ndls.show_batch()\ndls.show_dist()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# test passing a list with categories instead of a numpy array\ndsid = 'NATOPS'\nbs = 64\nX2, y2, splits2 = get_UCR_data(dsid, return_split=False)\nvocab = sorted(set(y))\ntfms = [None, [TSCategorize(vocab=vocab)]]\ndsets = TSDatasets(X2, y2, tfms=tfms, splits=splits2)\ndls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=[bs, bs*2])\ndls.train.one_batch()\n\n(TSTensor(samples:64, vars:24, len:51, device=cpu, dtype=torch.float32),\n TensorCategory([0, 3, 0, 5, 0, 0, 5, 3, 3, 1, 2, 0, 0, 2, 5, 2, 2, 4, 5, 3, 2,\n 4, 2, 1, 1, 0, 1, 2, 0, 4, 4, 4, 4, 2, 0, 0, 3, 3, 0, 5, 4, 3,\n 2, 5, 5, 2, 2, 4, 3, 0, 2, 4, 4, 5, 5, 0, 5, 3, 2, 1, 0, 3, 4,\n 2]))\n\n\n\n# MultiCategory\nbs = 64\nn_epochs = 100\ntfms = [None, [MultiCategorize()]]\ndsets = TSDatasets(X2, y2, tfms=tfms, splits=splits2)\ndls = TSDataLoaders.from_dsets(dsets.train, dsets.valid, bs=bs)\ndls.train.one_batch()\n\n(TSTensor(samples:64, vars:24, len:51, device=cpu, dtype=torch.float32),\n TensorMultiCategory([[7, 0, 1],\n [4, 0, 1],\n [7, 0, 1],\n [5, 0, 1],\n [2, 0, 1],\n [2, 0, 1],\n [2, 0, 1],\n [7, 0, 1],\n [5, 0, 1],\n [3, 0, 1],\n [6, 0, 1],\n [7, 0, 1],\n [3, 0, 1],\n [6, 0, 1],\n [7, 0, 1],\n [7, 0, 1],\n [6, 0, 1],\n [7, 0, 1],\n [5, 0, 1],\n [3, 0, 1],\n [3, 0, 1],\n [7, 0, 1],\n [7, 0, 1],\n [2, 0, 1],\n [4, 0, 1],\n [4, 0, 1],\n [2, 0, 1],\n [4, 0, 1],\n [6, 0, 1],\n [2, 0, 1],\n [2, 0, 1],\n [5, 0, 1],\n [2, 0, 1],\n [5, 0, 1],\n [4, 0, 1],\n [7, 0, 1],\n [2, 0, 1],\n [3, 0, 1],\n [4, 0, 1],\n [6, 0, 1],\n [2, 0, 1],\n [7, 0, 1],\n [2, 0, 1],\n [3, 0, 1],\n [4, 0, 1],\n [5, 0, 1],\n [5, 0, 1],\n [2, 0, 1],\n [5, 0, 1],\n [2, 0, 1],\n [3, 0, 1],\n [5, 0, 1],\n [6, 0, 1],\n [7, 0, 1],\n [5, 0, 1],\n [2, 0, 1],\n [7, 0, 1],\n [4, 0, 1],\n [5, 0, 1],\n [6, 0, 1],\n [7, 0, 1],\n [4, 0, 1],\n [7, 0, 1],\n [3, 0, 1]]))\n\n\nThe combination of splits, sel_vars and sel_steps is very powerful, as it allows you to perform advanced indexing of the array-like X.\n\nfrom tsai.data.validation import TSSplitter\n\n\nX = np.arange(16*5*50).reshape(16,5,50)\ny = alphabet[np.random.randint(0,3, 16)]\nsplits = TSSplitter(show_plot=False)(y)\ntfms = [None, TSCategorize()]\nbatch_tfms = None\ndls = get_ts_dls(X, y, splits=splits, sel_vars=[0, 1, 3], sel_steps=slice(-10, None), tfms=tfms, batch_tfms=batch_tfms)\nxb,yb=dls.train.one_batch()\ntest_close(X[dls.input_idxs][:, [0, 1, 3]][...,slice(-10, None)], xb.cpu().numpy())\nnew_dl = dls.train.new_dl(X[:5], y[:5])\nprint(new_dl.one_batch())\nnew_empty_dl = dls.new_empty() # when exported\ndl = new_empty_dl.new_dl(X[:10], y[:10], bs=64) # after export\ndl.one_batch()\n\n(TSTensor(samples:5, vars:3, len:10, device=cpu, dtype=torch.int64), TensorCategory([2, 2, 2, 2, 2]))\n\n\n(TSTensor(samples:10, vars:3, len:10, device=cpu, dtype=torch.int64),\n TensorCategory([2, 2, 2, 0, 2, 2, 0, 2, 1, 1]))\n\n\n\nsource\n\n\nget_dl_percent_per_epoch\n\n get_dl_percent_per_epoch (dl, model, n_batches=None)\n\n\nsource\n\n\nget_time_per_batch\n\n get_time_per_batch (dl, model=None, n_batches=None)\n\n\nX, y, splits = get_UCR_data('NATOPS', split_data=False)\ntfms = [None, [TSCategorize()]]\ndls = get_ts_dls(X, y, tfms=tfms, splits=splits)\ntrain_dl = dls.train\nxb, _ = train_dl.one_batch()\nmodel = nn.Linear(xb.shape[-1], 2).to(xb.device)\nt = get_dl_percent_per_epoch(train_dl, model, n_batches=10)\nprint(t)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n93.70%", + "crumbs": [ + "Data", + "Data Core" + ] + }, + { + "objectID": "models.xresnet1d.html", + "href": "models.xresnet1d.html", + "title": "XResNet1d", + "section": "", + "text": "This is a modified version of fastai’s XResNet model in github\n\n\nsource\n\nxresnet1d50_deeper\n\n xresnet1d50_deeper (c_in, c_out, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,\n pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True,\n transpose=False, init='auto', xtra=None,\n bias_std=0.01, dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d34_deeper\n\n xresnet1d34_deeper (c_in, c_out, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,\n pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True,\n transpose=False, init='auto', xtra=None,\n bias_std=0.01, dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d18_deeper\n\n xresnet1d18_deeper (c_in, c_out, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,\n pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True,\n transpose=False, init='auto', xtra=None,\n bias_std=0.01, dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d50_deep\n\n xresnet1d50_deep (c_in, c_out, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None, dw=False,\n g2=1, sa=False, sym=False, norm_type=<NormType.Batch:\n 1>, act_cls=<class 'torch.nn.modules.activation.ReLU'>,\n ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True, transpose=False,\n init='auto', xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d34_deep\n\n xresnet1d34_deep (c_in, c_out, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None, dw=False,\n g2=1, sa=False, sym=False, norm_type=<NormType.Batch:\n 1>, act_cls=<class 'torch.nn.modules.activation.ReLU'>,\n ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True, transpose=False,\n init='auto', xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d18_deep\n\n xresnet1d18_deep (c_in, c_out, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1,\n groups=1, reduction=None, nh1=None, nh2=None, dw=False,\n g2=1, sa=False, sym=False, norm_type=<NormType.Batch:\n 1>, act_cls=<class 'torch.nn.modules.activation.ReLU'>,\n ndim=2, ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True, transpose=False,\n init='auto', xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d152\n\n xresnet1d152 (c_in, c_out, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1, groups=1,\n reduction=None, nh1=None, nh2=None, dw=False, g2=1,\n sa=False, sym=False, norm_type=<NormType.Batch: 1>,\n act_cls=<class 'torch.nn.modules.activation.ReLU'>, ndim=2,\n ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True, transpose=False,\n init='auto', xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d101\n\n xresnet1d101 (c_in, c_out, act=<class\n 'torch.nn.modules.activation.ReLU'>, stride=1, groups=1,\n reduction=None, nh1=None, nh2=None, dw=False, g2=1,\n sa=False, sym=False, norm_type=<NormType.Batch: 1>,\n act_cls=<class 'torch.nn.modules.activation.ReLU'>, ndim=2,\n ks=3, pool=<function AvgPool>, pool_first=True,\n padding=None, bias=None, bn_1st=True, transpose=False,\n init='auto', xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d50\n\n xresnet1d50 (c_in, c_out, act=<class 'torch.nn.modules.activation.ReLU'>,\n stride=1, groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,\n pool=<function AvgPool>, pool_first=True, padding=None,\n bias=None, bn_1st=True, transpose=False, init='auto',\n xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d34\n\n xresnet1d34 (c_in, c_out, act=<class 'torch.nn.modules.activation.ReLU'>,\n stride=1, groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,\n pool=<function AvgPool>, pool_first=True, padding=None,\n bias=None, bn_1st=True, transpose=False, init='auto',\n xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nsource\n\n\nxresnet1d18\n\n xresnet1d18 (c_in, c_out, act=<class 'torch.nn.modules.activation.ReLU'>,\n stride=1, groups=1, reduction=None, nh1=None, nh2=None,\n dw=False, g2=1, sa=False, sym=False,\n norm_type=<NormType.Batch: 1>, act_cls=<class\n 'torch.nn.modules.activation.ReLU'>, ndim=2, ks=3,\n pool=<function AvgPool>, pool_first=True, padding=None,\n bias=None, bn_1st=True, transpose=False, init='auto',\n xtra=None, bias_std=0.01,\n dilation:Union[int,Tuple[int,int]]=1,\n padding_mode:str='zeros', device=None, dtype=None)\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\n\n\n\n\n\nc_out\n\n\n\n\n\nact\ntype\nReLU\n\n\n\nstride\nint\n1\n\n\n\ngroups\nint\n1\n\n\n\nreduction\nNoneType\nNone\n\n\n\nnh1\nNoneType\nNone\n\n\n\nnh2\nNoneType\nNone\n\n\n\ndw\nbool\nFalse\n\n\n\ng2\nint\n1\n\n\n\nsa\nbool\nFalse\n\n\n\nsym\nbool\nFalse\n\n\n\nnorm_type\nNormType\nNormType.Batch\n\n\n\nact_cls\ntype\nReLU\n\n\n\nndim\nint\n2\n\n\n\nks\nint\n3\n\n\n\npool\nfunction\nAvgPool\n\n\n\npool_first\nbool\nTrue\n\n\n\npadding\nNoneType\nNone\n\n\n\nbias\nNoneType\nNone\n\n\n\nbn_1st\nbool\nTrue\n\n\n\ntranspose\nbool\nFalse\n\n\n\ninit\nstr\nauto\n\n\n\nxtra\nNoneType\nNone\n\n\n\nbias_std\nfloat\n0.01\n\n\n\ndilation\ntyping.Union[int, typing.Tuple[int, int]]\n1\n\n\n\npadding_mode\nstr\nzeros\nTODO: refine this type\n\n\ndevice\nNoneType\nNone\n\n\n\ndtype\nNoneType\nNone\n\n\n\n\n\nbs, c_in, seq_len = 2, 4, 32\nc_out = 2\nx = torch.rand(bs, c_in, seq_len)\narchs = [\n xresnet1d18, xresnet1d34, xresnet1d50, \n xresnet1d18_deep, xresnet1d34_deep, xresnet1d50_deep, xresnet1d18_deeper,\n xresnet1d34_deeper, xresnet1d50_deeper\n# # Long test\n# xresnet1d101, xresnet1d152,\n]\nfor i, arch in enumerate(archs):\n print(i, arch.__name__)\n test_eq(arch(c_in, c_out, sa=True, act=Mish)(x).shape, (bs, c_out))\n\n0 xresnet1d18\n1 xresnet1d34\n2 xresnet1d50\n3 xresnet1d18_deep\n4 xresnet1d34_deep\n5 xresnet1d50_deep\n6 xresnet1d18_deeper\n7 xresnet1d34_deeper\n8 xresnet1d50_deeper\n\n\n\nm = xresnet1d34(4, 2, act=Mish)\ntest_eq(len(get_layers(m, is_bn)), 38)\ntest_eq(check_weight(m, is_bn)[0].sum(), 22)", + "crumbs": [ + "Models", + "CNNs", + "XResNet1d" + ] + }, + { + "objectID": "tslearner.html", + "href": "tslearner.html", + "title": "TSLearner", + "section": "", + "text": "New set of time series learners with a new sklearn-like API that simplifies the learner creation. The following classes are included:", + "crumbs": [ + "Training", + "TSLearner" + ] + }, + { + "objectID": "tslearner.html#tsclassifier-api", + "href": "tslearner.html#tsclassifier-api", + "title": "TSLearner", + "section": "TSClassifier API", + "text": "TSClassifier API\n\nCommonly used arguments:\n\nX: array-like of shape (n_samples, n_steps) or (n_samples, n_features, n_steps) with the input time series samples. Internally, they will be converted to torch tensors.\ny: array-like of shape (n_samples), (n_samples, n_outputs) or (n_samples, n_features, n_outputs) with the target. Internally, they will be converted to torch tensors. Default=None. None is used for unlabeled datasets.\nsplits: lists of indices used to split data between train and validation. Default=None. If no splits are passed, data will be split 100:0 between train and test without shuffling.\ntfms: item transforms that will be applied to each sample individually. Default:None.\nbatch_tfms: transforms applied to each batch. Default=None.\npipelines: store sklearn-type pipelines that can then be applied to pandas dataframes with transform or inverse_transform methods. Default=None.\nbs: batch size (if batch_size is provided then batch_size will override bs). An int or a list of ints can be passed. Default=[64, 128]. If a list of ints, the first one will be used for training, and the second for the valid (batch size can be larger as it doesn’t require backpropagation which consumes more memory).\narch: indicates which architecture will be used. Alternatively, you can pass an instantiated model. Default: InceptionTimePlus.\narch_config: keyword arguments passed to the selected architecture. Default={}.\npretrained: indicates if pretrained model weights will be used. Default=False.\nweights_path: indicates the path to the pretrained weights in case they are used.\nloss_func: allows you to pass any loss function. Default=None (in which case CrossEntropyLossFlat() is applied).\nopt_func: allows you to pass an optimizer. Default=Adam.\nlr: learning rate. Default=0.001.\nmetrics: list of metrics passed to the Learner. Default=accuracy.\ncbs: list of callbacks passed to the Learner. Default=None.\nwd: is the default weight decay used when training the model. Default=None.\n\nLess frequently used arguments:\n\nsel_vars: used to select which of the features in multivariate datasets are used. Default=None means all features are used. If necessary a list-like of indices can be used (eg.[0,3,5]).\nsel_steps: used to select the steps used. Default=None means all steps are used. If necessary a list-like of indices can be used (eg. slice(-50, None) will select the last 50 steps from each time series).\ns_cat_idxs: list of indices for static categorical variables\ns_cat_embeddings: list of num_embeddings for each static categorical variable\ns_cat_embedding_dims: list of embedding dimensions for each static categorical variable\ns_cont_idxs: list of indices for static continuous variables\no_cat_idxs: list of indices for observed categorical variables\no_cat_embeddings: list of num_embeddings for each observed categorical variable\no_cat_embedding_dims: list of embedding dimensions for each observed categorical variable\no_cont_idxs: list of indices for observed continuous variables\npatch_len: Number of time steps in each patch.\npatch_stride: Stride of the patch.\nfusion_layers: list of layer dimensions for the fusion MLP\nfusion_act: activation function for the fusion MLP\nfusion_dropout: dropout probability for the fusion MLP\nfusion_use_bn: boolean indicating whether to use batch normalization in the fusion MLP\nweights: indicates a sample weight per instance. Used to pass pass a probability to the train dataloader sampler. Samples with more weight will be selected more often during training.\npartial_n: select randomly partial quantity of data at each epoch. Used to reduce the training size (for example for testing purposes). int or float can be used.\nvocab: vocabulary used to transform the target. Only required when transformed is not perform by a dataloader’s tfm (external transforms).\ntrain_metrics: flag used to display metrics in the training set. Defaults to False.\nvalid_metrics: flag used to display metrics in the validtion set. Defaults to True.\ninplace: indicates whether tfms are applied during instantiation or on-the-fly. Default=True, which means that tfms will be applied during instantiation. This results in a faster training, but it can only be used when data fits in memory. Otherwise set it to False.\nshuffle_train: indicates whether to shuffle the training set every time the dataloader is fully read/iterated or not. This doesn’t have an impact on the validation set which is never shuffled. Default=True.\ndrop_last: if True the last incomplete training batch is dropped (thus ensuring training batches of equal size). This doesn’t have an impact on the validation set where samples are never dropped. Default=True.\nnum_workers: num_workers (int): how many subprocesses to use for data loading. 0 means that the data will be loaded in the main process. Default=0.\ndo_setup: ndicates if the Pipeline.setup method should be called during initialization. Default=True.\ndevice: Defaults to default_device() which is CUDA by default. You can specify device as `torch.device(‘cpu’).\nseed: Set to an int to ensure reprodubibility. Default=None.\nverbose: controls the verbosity when fitting and predicting.\nexclude_head: indicates whether the head of the pretrained model needs to be removed or not. Default=True.\ncut: indicates the position where the pretrained model head needs to be cut. Defaults=-1.\ninit: allows you to set to None (no initialization applied), set to True (in which case nn.init.kaiming_normal_ will be applied) or pass an initialization. Default=None.\nsplitter: To do transfer learning, you need to pass a splitter to Learner. This should be a function taking the model and returning a collection of parameter groups, e.g. a list of list of parameters. Default=trainable_params. If the model has a backbone and a head, it will then be split in those 2 groups.\npath and model_dir: are used to save and/or load models. Often path will be inferred from dls, but you can override it or pass a Path object to model_dir.\nwd_bn_bias: controls if weight decay is applied to BatchNorm layers and bias. Default=False. train_bn=True\nmoms: the default momentums used in Learner.fit_one_cycle. Default=(0.95, 0.85, 0.95).\n\n\nsource\n\nTSClassifier\n\n TSClassifier (X, y=None, splits=None, tfms=None, inplace=True,\n sel_vars=None, sel_steps=None, s_cat_idxs=None,\n s_cat_embeddings=None, s_cat_embedding_dims=None,\n s_cont_idxs=None, o_cat_idxs=None, o_cat_embeddings=None,\n o_cat_embedding_dims=None, o_cont_idxs=None,\n patch_len=None, patch_stride=None, fusion_layers=128,\n fusion_act='relu', fusion_dropout=0.0, fusion_use_bn=True,\n weights=None, partial_n=None, vocab=None,\n train_metrics=False, valid_metrics=True, bs=[64, 128],\n batch_size=None, batch_tfms=None, pipelines=None,\n shuffle_train=True, drop_last=True, num_workers=0,\n do_setup=True, device=None, seed=None, arch=None,\n arch_config={}, pretrained=False, weights_path=None,\n exclude_head=True, cut=-1, init=None, loss_func=None,\n opt_func=<function Adam>, lr=0.001, metrics=<function\n accuracy>, cbs=None, wd=None, wd_bn_bias=False,\n train_bn=True, moms=(0.95, 0.85, 0.95), path='.',\n model_dir='models', splitter=<function trainable_params>,\n verbose=False)\n\nGroup together a model, some dls and a loss_func to handle training\n\nfrom tsai.data.external import *\nfrom tsai.data.preprocessing import *\nfrom tsai.models.InceptionTimePlus import *\n\n\n# With validation split\nX, y, splits = get_classification_data('OliveOil', split_data=False)\ntfms = [None, TSClassification()]\nbatch_tfms = [TSStandardize(by_sample=True)]\nlearn = TSClassifier(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, metrics=accuracy, arch=InceptionTimePlus, arch_config=dict(fc_dropout=.5),\n train_metrics=True)\nlearn.fit_one_cycle(1)\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\ntrain_accuracy\nvalid_loss\nvalid_accuracy\ntime\n\n\n\n\n0\n1.446255\n0.266667\n1.403359\n0.300000\n00:00\n\n\n\n\n\n\n# Without validation split\nX, y, splits = get_classification_data('OliveOil', split_data=False)\nsplits = (splits[0], None)\ntfms = [None, TSClassification()]\nbatch_tfms = [TSStandardize(by_sample=True)]\nlearn = TSClassifier(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, metrics=accuracy, arch=InceptionTimePlus, arch_config=dict(fc_dropout=.5),\n train_metrics=True)\nlearn.fit_one_cycle(1)\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\naccuracy\ntime\n\n\n\n\n0\n1.286023\n0.400000\n00:00\n\n\n\n\n\n\nnum_classes = 5\nX = torch.rand(8, 2, 50)\ny = torch.randint(0, num_classes, (len(X), 3, 50))\nsplits = TimeSplitter(show_plot=False)(y)\nvocab = np.arange(num_classes)\n\nfail_test = []\nfor arch in all_arch_names:\n if not \"plus\" in arch.lower(): continue\n try:\n learn = TSClassifier(X, y, splits=splits, arch=arch, metrics=accuracy, vocab=vocab, device=default_device())\n with ContextManagers([learn.no_bar(), learn.no_logging()]):\n learn.fit_one_cycle(1, 1e-3)\n del learn\n gc.collect()\n except Exception as e:\n fail_test.append(arch)\n print(arch, e)\n\ntest_eq(fail_test, [])", + "crumbs": [ + "Training", + "TSLearner" + ] + }, + { + "objectID": "tslearner.html#tsregressor-api", + "href": "tslearner.html#tsregressor-api", + "title": "TSLearner", + "section": "TSRegressor API", + "text": "TSRegressor API\n\nCommonly used arguments:\n\nX: array-like of shape (n_samples, n_steps) or (n_samples, n_features, n_steps) with the input time series samples. Internally, they will be converted to torch tensors.\ny: array-like of shape (n_samples), (n_samples, n_outputs) or (n_samples, n_features, n_outputs) with the target. Internally, they will be converted to torch tensors. Default=None. None is used for unlabeled datasets.\nsplits: lists of indices used to split data between train and validation. Default=None. If no splits are passed, data will be split 100:0 between train and test without shuffling.\ntfms: item transforms that will be applied to each sample individually. Default=None.\nbatch_tfms: transforms applied to each batch. Default=None.\npipelines: store sklearn-type pipelines that can then be applied to pandas dataframes with transform or inverse_transform methods. Default=None.\nbs: batch size (if batch_size is provided then batch_size will override bs). An int or a list of ints can be passed. Default=[64, 128]. If a list of ints, the first one will be used for training, and the second for the valid (batch size can be larger as it doesn’t require backpropagation which consumes more memory).\narch: indicates which architecture will be used. Alternatively, you can pass an instantiated model. Default: InceptionTimePlus.\narch_config: keyword arguments passed to the selected architecture. Default={}.\npretrained: indicates if pretrained model weights will be used. Default=False.\nweights_path: indicates the path to the pretrained weights in case they are used.\nloss_func: allows you to pass any loss function. Default=None (in which case CrossEntropyLossFlat() is applied).\nopt_func: allows you to pass an optimizer. Default=Adam.\nlr: learning rate. Default=0.001.\nmetrics: list of metrics passed to the Learner. Default=None.\ncbs: list of callbacks passed to the Learner. Default=None.\nwd: is the default weight decay used when training the model. Default=None.\n\nLess frequently used arguments:\n\nsel_vars: used to select which of the features in multivariate datasets are used. Default=None means all features are used. If necessary a list-like of indices can be used (eg.[0,3,5]).\nsel_steps: used to select the steps used. Default=None means all steps are used. If necessary a list-like of indices can be used (eg. slice(-50, None) will select the last 50 steps from each time series).\ns_cat_idxs: list of indices for static categorical variables\ns_cat_embeddings: list of num_embeddings for each static categorical variable\ns_cat_embedding_dims: list of embedding dimensions for each static categorical variable\ns_cont_idxs: list of indices for static continuous variables\no_cat_idxs: list of indices for observed categorical variables\no_cat_embeddings: list of num_embeddings for each observed categorical variable\no_cat_embedding_dims: list of embedding dimensions for each observed categorical variable\no_cont_idxs: list of indices for observed continuous variables\npatch_len: Number of time steps in each patch.\npatch_stride: Stride of the patch.\nfusion_layers: list of layer dimensions for the fusion MLP\nfusion_act: activation function for the fusion MLP\nfusion_dropout: dropout probability for the fusion MLP\nfusion_use_bn: boolean indicating whether to use batch normalization in the fusion MLP\nweights: indicates a sample weight per instance. Used to pass pass a probability to the train dataloader sampler. Samples with more weight will be selected more often during training.\npartial_n: select randomly partial quantity of data at each epoch. Used to reduce the training size (for example for testing purposes). int or float can be used.\ntrain_metrics: flag used to display metrics in the training set. Defaults to False.\nvalid_metrics: flag used to display metrics in the validtion set. Defaults to True.\ninplace: indicates whether tfms are applied during instantiation or on-the-fly. Default=True, which means that tfms will be applied during instantiation. This results in a faster training, but it can only be used when data fits in memory. Otherwise set it to False.\nshuffle_train: indicates whether to shuffle the training set every time the dataloader is fully read/iterated or not. This doesn’t have an impact on the validation set which is never shuffled. Default=True.\ndrop_last: if True the last incomplete training batch is dropped (thus ensuring training batches of equal size). This doesn’t have an impact on the validation set where samples are never dropped. Default=True.\nnum_workers: num_workers (int): how many subprocesses to use for data loading. 0 means that the data will be loaded in the main process. Default=0.\ndo_setup: ndicates if the Pipeline.setup method should be called during initialization. Default=True.\ndevice: Defaults to default_device() which is CUDA by default. You can specify device as `torch.device(‘cpu’).\nseed: Set to an int to ensure reprodubibility. Default=None.\nverbose: controls the verbosity when fitting and predicting.\nexclude_head: indicates whether the head of the pretrained model needs to be removed or not. Default=True.\ncut: indicates the position where the pretrained model head needs to be cut. Defaults=-1.\ninit: allows you to set to None (no initialization applied), set to True (in which case nn.init.kaiming_normal_ will be applied) or pass an initialization. Default=None.\nsplitter: To do transfer learning, you need to pass a splitter to Learner. This should be a function taking the model and returning a collection of parameter groups, e.g. a list of list of parameters. Default=trainable_params. If the model has a backbone and a head, it will then be split in those 2 groups.\npath and model_dir: are used to save and/or load models. Often path will be inferred from dls, but you can override it or pass a Path object to model_dir.\nwd_bn_bias: controls if weight decay is applied to BatchNorm layers and bias. Default=False. train_bn=True\nmoms: the default momentums used in Learner.fit_one_cycle. Default=(0.95, 0.85, 0.95).\n\n\nsource\n\nTSRegressor\n\n TSRegressor (X, y=None, splits=None, tfms=None, inplace=True,\n sel_vars=None, sel_steps=None, s_cat_idxs=None,\n s_cat_embeddings=None, s_cat_embedding_dims=None,\n s_cont_idxs=None, o_cat_idxs=None, o_cat_embeddings=None,\n o_cat_embedding_dims=None, o_cont_idxs=None, patch_len=None,\n patch_stride=None, fusion_layers=128, fusion_act='relu',\n fusion_dropout=0.0, fusion_use_bn=True, weights=None,\n partial_n=None, train_metrics=False, valid_metrics=True,\n bs=[64, 128], batch_size=None, batch_tfms=None,\n pipelines=None, shuffle_train=True, drop_last=True,\n num_workers=0, do_setup=True, device=None, seed=None,\n arch=None, arch_config={}, pretrained=False,\n weights_path=None, exclude_head=True, cut=-1, init=None,\n loss_func=None, opt_func=<function Adam>, lr=0.001,\n metrics=None, cbs=None, wd=None, wd_bn_bias=False,\n train_bn=True, moms=(0.95, 0.85, 0.95), path='.',\n model_dir='models', splitter=<function trainable_params>,\n verbose=False)\n\nGroup together a model, some dls and a loss_func to handle training\n\nX, y, splits = get_regression_data('AppliancesEnergy', split_data=False)\nif X is not None: # This is to prevent a test fail when the data server is not available\n X = X.astype('float32')\n y = y.astype('float32')\n batch_tfms = [TSStandardize()]\n learn = TSRegressor(X, y, splits=splits, batch_tfms=batch_tfms, arch=None, metrics=mae, bs=512, train_metrics=True, device=default_device())\n learn.fit_one_cycle(1, 1e-4)\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\ntrain_mae\nvalid_loss\nvalid_mae\ntime\n\n\n\n\n0\n221.239578\n14.241582\n208.787231\n14.034328\n00:00", + "crumbs": [ + "Training", + "TSLearner" + ] + }, + { + "objectID": "tslearner.html#tsforecaster-api", + "href": "tslearner.html#tsforecaster-api", + "title": "TSLearner", + "section": "TSForecaster API", + "text": "TSForecaster API\n\nCommonly used arguments:\n\nX: array-like of shape (n_samples, n_steps) or (n_samples, n_features, n_steps) with the input time series samples. Internally, they will be converted to torch tensors.\ny: array-like of shape (n_samples), (n_samples, n_outputs) or (n_samples, n_features, n_outputs) with the target. Internally, they will be converted to torch tensors. Default=None. None is used for unlabeled datasets.\nsplits: lists of indices used to split data between train and validation. Default=None. If no splits are passed, data will be split 100:0 between train and test without shuffling.\ntfms: item transforms that will be applied to each sample individually. Default=None.\nbatch_tfms: transforms applied to each batch. Default=None.\npipelines: store sklearn-type pipelines that can then be applied to pandas dataframes with transform or inverse_transform methods. Default=None.\nbs: batch size (if batch_size is provided then batch_size will override bs). An int or a list of ints can be passed. Default=[64, 128]. If a list of ints, the first one will be used for training, and the second for the valid (batch size can be larger as it doesn’t require backpropagation which consumes more memory).\narch: indicates which architecture will be used. Alternatively, you can pass an instantiated model. Default: InceptionTimePlus.\narch_config: keyword arguments passed to the selected architecture. Default={}.\npretrained: indicates if pretrained model weights will be used. Default=False.\nweights_path: indicates the path to the pretrained weights in case they are used.\nloss_func: allows you to pass any loss function. Default=None (in which case CrossEntropyLossFlat() is applied).\nopt_func: allows you to pass an optimizer. Default=Adam.\nlr: learning rate. Default=0.001.\nmetrics: list of metrics passed to the Learner. Default=None.\ncbs: list of callbacks passed to the Learner. Default=None.\nwd: is the default weight decay used when training the model. Default=None.\n\nLess frequently used arguments:\n\nsel_vars: used to select which of the features in multivariate datasets are used. Default=None means all features are used. If necessary a list-like of indices can be used (eg.[0,3,5]).\nsel_steps: used to select the steps used. Default=None means all steps are used. If necessary a list-like of indices can be used (eg. slice(-50, None) will select the last 50 steps from each time series).\ns_cat_idxs: list of indices for static categorical variables\ns_cat_embeddings: list of num_embeddings for each static categorical variable\ns_cat_embedding_dims: list of embedding dimensions for each static categorical variable\ns_cont_idxs: list of indices for static continuous variables\no_cat_idxs: list of indices for observed categorical variables\no_cat_embeddings: list of num_embeddings for each observed categorical variable\no_cat_embedding_dims: list of embedding dimensions for each observed categorical variable\no_cont_idxs: list of indices for observed continuous variables\npatch_len: Number of time steps in each patch.\npatch_stride: Stride of the patch.\nfusion_layers: list of layer dimensions for the fusion MLP\nfusion_act: activation function for the fusion MLP\nfusion_dropout: dropout probability for the fusion MLP\nfusion_use_bn: boolean indicating whether to use batch normalization in the fusion MLP\nweights: indicates a sample weight per instance. Used to pass pass a probability to the train dataloader sampler. Samples with more weight will be selected more often during training.\npartial_n: select randomly partial quantity of data at each epoch. Used to reduce the training size (for example for testing purposes). int or float can be used.\ntrain_metrics: flag used to display metrics in the training set. Defaults to False.\nvalid_metrics: flag used to display metrics in the validtion set. Defaults to True.\ninplace: indicates whether tfms are applied during instantiation or on-the-fly. Default=True, which means that tfms will be applied during instantiation. This results in a faster training, but it can only be used when data fits in memory. Otherwise set it to False.\nshuffle_train: indicates whether to shuffle the training set every time the dataloader is fully read/iterated or not. This doesn’t have an impact on the validation set which is never shuffled. Default=True.\ndrop_last: if True the last incomplete training batch is dropped (thus ensuring training batches of equal size). This doesn’t have an impact on the validation set where samples are never dropped. Default=True.\nnum_workers: num_workers (int): how many subprocesses to use for data loading. 0 means that the data will be loaded in the main process. Default=None.\ndo_setup: ndicates if the Pipeline.setup method should be called during initialization. Default=True.\ndevice: Defaults to default_device() which is CUDA by default. You can specify device as `torch.device(‘cpu’).\nseed: Set to an int to ensure reprodubibility. Default=None.\nverbose: controls the verbosity when fitting and predicting.\nexclude_head: indicates whether the head of the pretrained model needs to be removed or not. Default=True.\ncut: indicates the position where the pretrained model head needs to be cut. Defaults=-1.\ninit: allows you to set to None (no initialization applied), set to True (in which case nn.init.kaiming_normal_ will be applied) or pass an initialization. Default=None.\nsplitter: To do transfer learning, you need to pass a splitter to Learner. This should be a function taking the model and returning a collection of parameter groups, e.g. a list of list of parameters. Default=trainable_params. If the model has a backbone and a head, it will then be split in those 2 groups.\npath and model_dir: are used to save and/or load models. Often path will be inferred from dls, but you can override it or pass a Path object to model_dir.\nwd_bn_bias: controls if weight decay is applied to BatchNorm layers and bias. Default=False. train_bn=True\nmoms: the default momentums used in Learner.fit_one_cycle. Default=(0.95, 0.85, 0.95).\n\n\nsource\n\nTSForecaster\n\n TSForecaster (X, y=None, splits=None, tfms=None, inplace=True,\n sel_vars=None, sel_steps=None, s_cat_idxs=None,\n s_cat_embeddings=None, s_cat_embedding_dims=None,\n s_cont_idxs=None, o_cat_idxs=None, o_cat_embeddings=None,\n o_cat_embedding_dims=None, o_cont_idxs=None,\n patch_len=None, patch_stride=None, fusion_layers=128,\n fusion_act='relu', fusion_dropout=0.0, fusion_use_bn=True,\n weights=None, partial_n=None, train_metrics=False,\n valid_metrics=True, bs=[64, 128], batch_size=None,\n batch_tfms=None, pipelines=None, shuffle_train=True,\n drop_last=True, num_workers=0, do_setup=True, device=None,\n seed=None, arch=None, arch_config={}, pretrained=False,\n weights_path=None, exclude_head=True, cut=-1, init=None,\n loss_func=None, opt_func=<function Adam>, lr=0.001,\n metrics=None, cbs=None, wd=None, wd_bn_bias=False,\n train_bn=True, moms=(0.95, 0.85, 0.95), path='.',\n model_dir='models', splitter=<function trainable_params>,\n verbose=False)\n\nGroup together a model, some dls and a loss_func to handle training\n\nfrom tsai.data.preparation import *\n\n\nts = get_forecasting_time_series('Sunspots')\nif ts is not None: # This is to prevent a test fail when the data server is not available\n X, y = SlidingWindowSplitter(60, horizon=1)(ts)\n X, y = X.astype('float32'), y.astype('float32')\n splits = TSSplitter(235)(y)\n batch_tfms = [TSStandardize(by_var=True)]\n learn = TSForecaster(X, y, splits=splits, batch_tfms=batch_tfms, arch=None, arch_config=dict(fc_dropout=.5), metrics=mae, bs=512,\n partial_n=.1, train_metrics=True, device=default_device())\n learn.fit_one_cycle(1)\n\nDataset: Sunspots\ndownloading data...\n...done. Path = data/forecasting/Sunspots.csv\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\ntrain_mae\nvalid_loss\nvalid_mae\ntime\n\n\n\n\n0\n4616.225098\n53.340523\n7969.317871\n74.670258\n00:00\n\n\n\n\n\n\nX=torch.rand(8,2,50)\ny=torch.rand(8,1)\nsplits = TimeSplitter(show_plot=False)(y)\n\nfail_test = []\nfor arch in all_arch_names:\n if not \"plus\" in arch.lower(): continue\n try:\n fcst = TSForecaster(X, y, splits=splits, arch=arch, metrics=mse, device=default_device())\n with ContextManagers([fcst.no_bar(), fcst.no_logging()]):\n fcst.fit_one_cycle(1, 1e-3)\n except Exception as e:\n fail_test.append(arch)\n print(arch, e)\n\ntest_eq(fail_test, [])", + "crumbs": [ + "Training", + "TSLearner" + ] + }, + { + "objectID": "models.rocket.html", + "href": "models.rocket.html", + "title": "ROCKET", + "section": "", + "text": "ROCKET (RandOm Convolutional KErnel Transform) functions for univariate and multivariate time series.\n\n\nsource\n\nRocketClassifier\n\n RocketClassifier (num_kernels=10000, normalize_input=True,\n random_state=None, alphas=array([1.e-03, 1.e-02,\n 1.e-01, 1.e+00, 1.e+01, 1.e+02, 1.e+03]),\n normalize_features=True, memory=None, verbose=False,\n scoring=None, class_weight=None, **kwargs)\n\nTime series classification using ROCKET features and a linear classifier\n\nsource\n\n\nload_rocket\n\n load_rocket (fname='Rocket', path='./models')\n\n\nsource\n\n\nRocketRegressor\n\n RocketRegressor (num_kernels=10000, normalize_input=True,\n random_state=None, alphas=array([1.e-03, 1.e-02, 1.e-01,\n 1.e+00, 1.e+01, 1.e+02, 1.e+03]),\n normalize_features=True, memory=None, verbose=False,\n scoring=None, **kwargs)\n\nTime series regression using ROCKET features and a linear regressor\n\n# Univariate classification with sklearn-type API\ndsid = 'OliveOil'\nfname = 'RocketClassifier'\nX_train, y_train, X_test, y_test = get_UCR_data(dsid, Xdtype='float64')\ncls = RocketClassifier()\ncls.fit(X_train, y_train)\ncls.save(fname)\ndel cls\ncls = load_rocket(fname)\nprint(cls.score(X_test, y_test))\n\nOMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.\n\n\n0.9\n\n\n\n# Multivariate classification with sklearn-type API\ndsid = 'NATOPS'\nfname = 'RocketClassifier'\nX_train, y_train, X_test, y_test = get_UCR_data(dsid, Xdtype='float64')\ncls = RocketClassifier()\ncls.fit(X_train, y_train)\ncls.save(fname)\ndel cls\ncls = load_rocket(fname)\nprint(cls.score(X_test, y_test))\n\n0.8666666666666667\n\n\n\nfrom sklearn.metrics import mean_squared_error\n\n\n# Univariate regression with sklearn-type API\ndsid = 'Covid3Month'\nfname = 'RocketRegressor'\nX_train, y_train, X_test, y_test = get_Monash_regression_data(dsid, Xdtype='float64')\nif X_train is not None: \n rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)\n reg = RocketRegressor(scoring=rmse_scorer)\n reg.fit(X_train, y_train)\n reg.save(fname)\n del reg\n reg = load_rocket(fname)\n y_pred = reg.predict(X_test)\n print(mean_squared_error(y_test, y_pred, squared=False))\n\n0.03908714523468997\n\n\n\n# Multivariate regression with sklearn-type API\ndsid = 'AppliancesEnergy'\nfname = 'RocketRegressor'\nX_train, y_train, X_test, y_test = get_Monash_regression_data(dsid, Xdtype='float64')\nif X_train is not None: \n rmse_scorer = make_scorer(mean_squared_error, greater_is_better=False)\n reg = RocketRegressor(scoring=rmse_scorer)\n reg.fit(X_train, y_train)\n reg.save(fname)\n del reg\n reg = load_rocket(fname)\n y_pred = reg.predict(X_test)\n print(mean_squared_error(y_test, y_pred, squared=False))\n\n2.287302226812576", + "crumbs": [ + "Models", + "ROCKETs", + "ROCKET" + ] + }, + { + "objectID": "models.xceptiontime.html", + "href": "models.xceptiontime.html", + "title": "XceptionTime", + "section": "", + "text": "This is an unofficial PyTorch implementation by Ignacio Oguiza - oguiza@timeseriesAI.co modified on:\nFawaz, H. I., Lucas, B., Forestier, G., Pelletier, C., Schmidt, D. F., Weber, J. & Petitjean, F. (2019). InceptionTime: Finding AlexNet for Time Series Classification. arXiv preprint arXiv:1909.04939.\nOfficial InceptionTime tensorflow implementation: https://github.com/hfawaz/InceptionTime\n\nsource\n\nXceptionTime\n\n XceptionTime (c_in, c_out, nf=16, nb_filters=None, adaptive_size=50,\n residual=True)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nXceptionBlock\n\n XceptionBlock (ni, nf, residual=True, ks=40, bottleneck=True)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nXceptionModule\n\n XceptionModule (ni, nf, ks=40, bottleneck=True)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 16\nvars = 3\nseq_len = 12\nc_out = 6\nxb = torch.rand(bs, vars, seq_len)\ntest_eq(XceptionTime(vars,c_out)(xb).shape, [bs, c_out])\ntest_eq(XceptionTime(vars,c_out, bottleneck=False)(xb).shape, [bs, c_out])\ntest_eq(XceptionTime(vars,c_out, residual=False)(xb).shape, [bs, c_out])\ntest_eq(count_parameters(XceptionTime(3, 2)), 399540)\n\n\nm = XceptionTime(2,3)\ntest_eq(check_weight(m, is_bn)[0].sum(), 5) # 2 shortcut + 3 bn\ntest_eq(len(check_bias(m, is_conv)[0]), 0)\ntest_eq(len(check_bias(m)[0]), 5) # 2 shortcut + 3 bn\n\n\nXceptionTime(3, 2)\n\nXceptionTime(\n (block): XceptionBlock(\n (xception): ModuleList(\n (0): XceptionModule(\n (bottleneck): Conv1d(3, 16, kernel_size=(1,), stride=(1,), bias=False)\n (convs): ModuleList(\n (0): SeparableConv1d(\n (depthwise_conv): Conv1d(16, 16, kernel_size=(39,), stride=(1,), padding=(19,), groups=16, bias=False)\n (pointwise_conv): Conv1d(16, 16, kernel_size=(1,), stride=(1,), bias=False)\n )\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(16, 16, kernel_size=(19,), stride=(1,), padding=(9,), groups=16, bias=False)\n (pointwise_conv): Conv1d(16, 16, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): SeparableConv1d(\n (depthwise_conv): Conv1d(16, 16, kernel_size=(9,), stride=(1,), padding=(4,), groups=16, bias=False)\n (pointwise_conv): Conv1d(16, 16, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (maxconvpool): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): Conv1d(3, 16, kernel_size=(1,), stride=(1,), bias=False)\n )\n (concat): Concat(dim=1)\n )\n (1): XceptionModule(\n (bottleneck): Conv1d(64, 32, kernel_size=(1,), stride=(1,), bias=False)\n (convs): ModuleList(\n (0): SeparableConv1d(\n (depthwise_conv): Conv1d(32, 32, kernel_size=(39,), stride=(1,), padding=(19,), groups=32, bias=False)\n (pointwise_conv): Conv1d(32, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(32, 32, kernel_size=(19,), stride=(1,), padding=(9,), groups=32, bias=False)\n (pointwise_conv): Conv1d(32, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): SeparableConv1d(\n (depthwise_conv): Conv1d(32, 32, kernel_size=(9,), stride=(1,), padding=(4,), groups=32, bias=False)\n (pointwise_conv): Conv1d(32, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (maxconvpool): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): Conv1d(64, 32, kernel_size=(1,), stride=(1,), bias=False)\n )\n (concat): Concat(dim=1)\n )\n (2): XceptionModule(\n (bottleneck): Conv1d(128, 64, kernel_size=(1,), stride=(1,), bias=False)\n (convs): ModuleList(\n (0): SeparableConv1d(\n (depthwise_conv): Conv1d(64, 64, kernel_size=(39,), stride=(1,), padding=(19,), groups=64, bias=False)\n (pointwise_conv): Conv1d(64, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(64, 64, kernel_size=(19,), stride=(1,), padding=(9,), groups=64, bias=False)\n (pointwise_conv): Conv1d(64, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): SeparableConv1d(\n (depthwise_conv): Conv1d(64, 64, kernel_size=(9,), stride=(1,), padding=(4,), groups=64, bias=False)\n (pointwise_conv): Conv1d(64, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (maxconvpool): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): Conv1d(128, 64, kernel_size=(1,), stride=(1,), bias=False)\n )\n (concat): Concat(dim=1)\n )\n (3): XceptionModule(\n (bottleneck): Conv1d(256, 128, kernel_size=(1,), stride=(1,), bias=False)\n (convs): ModuleList(\n (0): SeparableConv1d(\n (depthwise_conv): Conv1d(128, 128, kernel_size=(39,), stride=(1,), padding=(19,), groups=128, bias=False)\n (pointwise_conv): Conv1d(128, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (1): SeparableConv1d(\n (depthwise_conv): Conv1d(128, 128, kernel_size=(19,), stride=(1,), padding=(9,), groups=128, bias=False)\n (pointwise_conv): Conv1d(128, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (2): SeparableConv1d(\n (depthwise_conv): Conv1d(128, 128, kernel_size=(9,), stride=(1,), padding=(4,), groups=128, bias=False)\n (pointwise_conv): Conv1d(128, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n )\n (maxconvpool): Sequential(\n (0): MaxPool1d(kernel_size=3, stride=1, padding=1, dilation=1, ceil_mode=False)\n (1): Conv1d(256, 128, kernel_size=(1,), stride=(1,), bias=False)\n )\n (concat): Concat(dim=1)\n )\n )\n (shortcut): ModuleList(\n (0): ConvBlock(\n (0): Conv1d(3, 128, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n (1): ConvBlock(\n (0): Conv1d(128, 512, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n )\n )\n (add): Add\n (act): ReLU()\n )\n (head): Sequential(\n (0): AdaptiveAvgPool1d(output_size=50)\n (1): ConvBlock(\n (0): Conv1d(512, 256, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (2): ConvBlock(\n (0): Conv1d(256, 128, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (3): ConvBlock(\n (0): Conv1d(128, 2, kernel_size=(1,), stride=(1,), bias=False)\n (1): BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n (2): ReLU()\n )\n (4): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Flatten(full=False)\n )\n )\n)", + "crumbs": [ + "Models", + "CNNs", + "XceptionTime" + ] + }, + { + "objectID": "models.tcn.html", + "href": "models.tcn.html", + "title": "TCN", + "section": "", + "text": "This is an unofficial PyTorch implementation by Ignacio Oguiza (oguiza@timeseriesAI.co) based on:\n\nBai, S., Kolter, J. Z., & Koltun, V. (2018). An empirical evaluation of generic convolutional and recurrent networks for sequence modeling. arXiv preprint arXiv:1803.01271.\nOfficial TCN PyTorch implementation: https://github.com/locuslab/TCN\n\n\nsource\n\nTCN\n\n TCN (c_in, c_out, layers=[25, 25, 25, 25, 25, 25, 25, 25], ks=7,\n conv_dropout=0.0, fc_dropout=0.0)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nTemporalConvNet\n\n TemporalConvNet (c_in, layers, ks=2, dropout=0.0)\n\n\nsource\n\n\nTemporalBlock\n\n TemporalBlock (ni, nf, ks, stride, dilation, padding, dropout=0.0)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nbs = 16\nnvars = 3\nseq_len = 128\nc_out = 2\nxb = torch.rand(bs, nvars, seq_len)\nmodel = TCN(nvars, c_out, fc_dropout=.5)\ntest_eq(model(xb).shape, (bs, c_out))\nmodel = TCN(nvars, c_out, conv_dropout=.2)\ntest_eq(model(xb).shape, (bs, c_out))\nmodel = TCN(nvars, c_out)\ntest_eq(model(xb).shape, (bs, c_out))\nmodel\n\nTCN(\n (tcn): Sequential(\n (0): TemporalBlock(\n (conv1): Conv1d(3, 25, kernel_size=(7,), stride=(1,), padding=(6,))\n (chomp1): Chomp1d()\n (relu1): ReLU()\n (dropout1): Dropout(p=0.0, inplace=False)\n (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(6,))\n (chomp2): Chomp1d()\n (relu2): ReLU()\n (dropout2): Dropout(p=0.0, inplace=False)\n (net): Sequential(\n (0): Conv1d(3, 25, kernel_size=(7,), stride=(1,), padding=(6,))\n (1): Chomp1d()\n (2): ReLU()\n (3): Dropout(p=0.0, inplace=False)\n (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(6,))\n (5): Chomp1d()\n (6): ReLU()\n (7): Dropout(p=0.0, inplace=False)\n )\n (downsample): Conv1d(3, 25, kernel_size=(1,), stride=(1,))\n (relu): ReLU()\n )\n (1): TemporalBlock(\n (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(12,), dilation=(2,))\n (chomp1): Chomp1d()\n (relu1): ReLU()\n (dropout1): Dropout(p=0.0, inplace=False)\n (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(12,), dilation=(2,))\n (chomp2): Chomp1d()\n (relu2): ReLU()\n (dropout2): Dropout(p=0.0, inplace=False)\n (net): Sequential(\n (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(12,), dilation=(2,))\n (1): Chomp1d()\n (2): ReLU()\n (3): Dropout(p=0.0, inplace=False)\n (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(12,), dilation=(2,))\n (5): Chomp1d()\n (6): ReLU()\n (7): Dropout(p=0.0, inplace=False)\n )\n (relu): ReLU()\n )\n (2): TemporalBlock(\n (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(24,), dilation=(4,))\n (chomp1): Chomp1d()\n (relu1): ReLU()\n (dropout1): Dropout(p=0.0, inplace=False)\n (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(24,), dilation=(4,))\n (chomp2): Chomp1d()\n (relu2): ReLU()\n (dropout2): Dropout(p=0.0, inplace=False)\n (net): Sequential(\n (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(24,), dilation=(4,))\n (1): Chomp1d()\n (2): ReLU()\n (3): Dropout(p=0.0, inplace=False)\n (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(24,), dilation=(4,))\n (5): Chomp1d()\n (6): ReLU()\n (7): Dropout(p=0.0, inplace=False)\n )\n (relu): ReLU()\n )\n (3): TemporalBlock(\n (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(48,), dilation=(8,))\n (chomp1): Chomp1d()\n (relu1): ReLU()\n (dropout1): Dropout(p=0.0, inplace=False)\n (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(48,), dilation=(8,))\n (chomp2): Chomp1d()\n (relu2): ReLU()\n (dropout2): Dropout(p=0.0, inplace=False)\n (net): Sequential(\n (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(48,), dilation=(8,))\n (1): Chomp1d()\n (2): ReLU()\n (3): Dropout(p=0.0, inplace=False)\n (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(48,), dilation=(8,))\n (5): Chomp1d()\n (6): ReLU()\n (7): Dropout(p=0.0, inplace=False)\n )\n (relu): ReLU()\n )\n (4): TemporalBlock(\n (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(96,), dilation=(16,))\n (chomp1): Chomp1d()\n (relu1): ReLU()\n (dropout1): Dropout(p=0.0, inplace=False)\n (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(96,), dilation=(16,))\n (chomp2): Chomp1d()\n (relu2): ReLU()\n (dropout2): Dropout(p=0.0, inplace=False)\n (net): Sequential(\n (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(96,), dilation=(16,))\n (1): Chomp1d()\n (2): ReLU()\n (3): Dropout(p=0.0, inplace=False)\n (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(96,), dilation=(16,))\n (5): Chomp1d()\n (6): ReLU()\n (7): Dropout(p=0.0, inplace=False)\n )\n (relu): ReLU()\n )\n (5): TemporalBlock(\n (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(192,), dilation=(32,))\n (chomp1): Chomp1d()\n (relu1): ReLU()\n (dropout1): Dropout(p=0.0, inplace=False)\n (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(192,), dilation=(32,))\n (chomp2): Chomp1d()\n (relu2): ReLU()\n (dropout2): Dropout(p=0.0, inplace=False)\n (net): Sequential(\n (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(192,), dilation=(32,))\n (1): Chomp1d()\n (2): ReLU()\n (3): Dropout(p=0.0, inplace=False)\n (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(192,), dilation=(32,))\n (5): Chomp1d()\n (6): ReLU()\n (7): Dropout(p=0.0, inplace=False)\n )\n (relu): ReLU()\n )\n (6): TemporalBlock(\n (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(384,), dilation=(64,))\n (chomp1): Chomp1d()\n (relu1): ReLU()\n (dropout1): Dropout(p=0.0, inplace=False)\n (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(384,), dilation=(64,))\n (chomp2): Chomp1d()\n (relu2): ReLU()\n (dropout2): Dropout(p=0.0, inplace=False)\n (net): Sequential(\n (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(384,), dilation=(64,))\n (1): Chomp1d()\n (2): ReLU()\n (3): Dropout(p=0.0, inplace=False)\n (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(384,), dilation=(64,))\n (5): Chomp1d()\n (6): ReLU()\n (7): Dropout(p=0.0, inplace=False)\n )\n (relu): ReLU()\n )\n (7): TemporalBlock(\n (conv1): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(768,), dilation=(128,))\n (chomp1): Chomp1d()\n (relu1): ReLU()\n (dropout1): Dropout(p=0.0, inplace=False)\n (conv2): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(768,), dilation=(128,))\n (chomp2): Chomp1d()\n (relu2): ReLU()\n (dropout2): Dropout(p=0.0, inplace=False)\n (net): Sequential(\n (0): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(768,), dilation=(128,))\n (1): Chomp1d()\n (2): ReLU()\n (3): Dropout(p=0.0, inplace=False)\n (4): Conv1d(25, 25, kernel_size=(7,), stride=(1,), padding=(768,), dilation=(128,))\n (5): Chomp1d()\n (6): ReLU()\n (7): Dropout(p=0.0, inplace=False)\n )\n (relu): ReLU()\n )\n )\n (gap): GAP1d(\n (gap): AdaptiveAvgPool1d(output_size=1)\n (flatten): Flatten(full=False)\n )\n (linear): Linear(in_features=25, out_features=2, bias=True)\n)", + "crumbs": [ + "Models", + "CNNs", + "TCN" + ] + }, + { + "objectID": "data.unwindowed.html", + "href": "data.unwindowed.html", + "title": "Unwindowed datasets", + "section": "", + "text": "Functionality that will allow you to create a dataset that applies sliding windows to the input data on the fly. This heavily reduces the size of the input data files, as only the original unwindowed data needs to be stored.\n\nI’d like to thank both Thomas Capelle (https://github.com/tcapelle) and Xander Dunn (https://github.com/xanderdunn) for their contributions to make this code possible.\n\nsource\n\nTSUnwindowedDatasets\n\n TSUnwindowedDatasets (dataset, splits)\n\nBase class for lists with subsets\n\nsource\n\n\nTSUnwindowedDataset\n\n TSUnwindowedDataset (X=None, y=None, y_func=None, window_size=1,\n stride=1, drop_start=0, drop_end=0, seq_first=True,\n **kwargs)\n\nInitialize self. See help(type(self)) for accurate signature.\n\ndef y_func(y): return y.astype('float').mean(1)\n\nThis approach works with both univariate and multivariate data.\n\nUnivariate: we’ll use a simple array with 20 values, one with the seq_len first (X0), the other with seq_len second (X1).\nMultivariate: we’ll use 2 time series arrays, one with the seq_len first (X2), the other with seq_len second (X3). No sliding window has been applied to them yet.\n\n\n# Univariate\nX0 = np.arange(20).astype(float)\nX1 = np.arange(20).reshape(1, -1).astype(float)\nX0.shape, X0, X1.shape, X1\n\n((20,),\n array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.,\n 13., 14., 15., 16., 17., 18., 19.]),\n (1, 20),\n array([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12.,\n 13., 14., 15., 16., 17., 18., 19.]]))\n\n\n\n# Multivariate\nX2 = np.arange(20).reshape(-1,1)*np.array([1, 10, 100]).reshape(1,-1).astype(float)\nX3 = np.arange(20).reshape(1,-1)*np.array([1, 10, 100]).reshape(-1,1).astype(float)\nX2.shape, X3.shape, X2, X3\n\n((20, 3),\n (3, 20),\n array([[0.0e+00, 0.0e+00, 0.0e+00],\n [1.0e+00, 1.0e+01, 1.0e+02],\n [2.0e+00, 2.0e+01, 2.0e+02],\n [3.0e+00, 3.0e+01, 3.0e+02],\n [4.0e+00, 4.0e+01, 4.0e+02],\n [5.0e+00, 5.0e+01, 5.0e+02],\n [6.0e+00, 6.0e+01, 6.0e+02],\n [7.0e+00, 7.0e+01, 7.0e+02],\n [8.0e+00, 8.0e+01, 8.0e+02],\n [9.0e+00, 9.0e+01, 9.0e+02],\n [1.0e+01, 1.0e+02, 1.0e+03],\n [1.1e+01, 1.1e+02, 1.1e+03],\n [1.2e+01, 1.2e+02, 1.2e+03],\n [1.3e+01, 1.3e+02, 1.3e+03],\n [1.4e+01, 1.4e+02, 1.4e+03],\n [1.5e+01, 1.5e+02, 1.5e+03],\n [1.6e+01, 1.6e+02, 1.6e+03],\n [1.7e+01, 1.7e+02, 1.7e+03],\n [1.8e+01, 1.8e+02, 1.8e+03],\n [1.9e+01, 1.9e+02, 1.9e+03]]),\n array([[0.0e+00, 1.0e+00, 2.0e+00, 3.0e+00, 4.0e+00, 5.0e+00, 6.0e+00,\n 7.0e+00, 8.0e+00, 9.0e+00, 1.0e+01, 1.1e+01, 1.2e+01, 1.3e+01,\n 1.4e+01, 1.5e+01, 1.6e+01, 1.7e+01, 1.8e+01, 1.9e+01],\n [0.0e+00, 1.0e+01, 2.0e+01, 3.0e+01, 4.0e+01, 5.0e+01, 6.0e+01,\n 7.0e+01, 8.0e+01, 9.0e+01, 1.0e+02, 1.1e+02, 1.2e+02, 1.3e+02,\n 1.4e+02, 1.5e+02, 1.6e+02, 1.7e+02, 1.8e+02, 1.9e+02],\n [0.0e+00, 1.0e+02, 2.0e+02, 3.0e+02, 4.0e+02, 5.0e+02, 6.0e+02,\n 7.0e+02, 8.0e+02, 9.0e+02, 1.0e+03, 1.1e+03, 1.2e+03, 1.3e+03,\n 1.4e+03, 1.5e+03, 1.6e+03, 1.7e+03, 1.8e+03, 1.9e+03]]))\n\n\nNow, instead of applying SlidingWindow to create and save the time series that can be consumed by a time series model, we can use a dataset that creates the data on the fly. In this way we avoid the need to create and save large files. This approach is also useful when you want to test different sliding window sizes, as otherwise you would need to create files for every size you want to test.The dataset will create the samples correctly formatted and ready to be passed on to a time series architecture.\n\nwds0 = TSUnwindowedDataset(X0, window_size=5, stride=2, seq_first=True)[:][0]\nwds1 = TSUnwindowedDataset(X1, window_size=5, stride=2, seq_first=False)[:][0]\ntest_eq(wds0, wds1)\nwds0, wds0.data, wds1, wds1.data\n\n(TSTensor(samples:8, vars:1, len:5, device=cpu),\n tensor([[[ 0., 1., 2., 3., 4.]],\n \n [[ 2., 3., 4., 5., 6.]],\n \n [[ 4., 5., 6., 7., 8.]],\n \n [[ 6., 7., 8., 9., 10.]],\n \n [[ 8., 9., 10., 11., 12.]],\n \n [[10., 11., 12., 13., 14.]],\n \n [[12., 13., 14., 15., 16.]],\n \n [[14., 15., 16., 17., 18.]]]),\n TSTensor(samples:8, vars:1, len:5, device=cpu),\n tensor([[[ 0., 1., 2., 3., 4.]],\n \n [[ 2., 3., 4., 5., 6.]],\n \n [[ 4., 5., 6., 7., 8.]],\n \n [[ 6., 7., 8., 9., 10.]],\n \n [[ 8., 9., 10., 11., 12.]],\n \n [[10., 11., 12., 13., 14.]],\n \n [[12., 13., 14., 15., 16.]],\n \n [[14., 15., 16., 17., 18.]]]))\n\n\n\nwds2 = TSUnwindowedDataset(X2, window_size=5, stride=2, seq_first=True)[:][0]\nwds3 = TSUnwindowedDataset(X3, window_size=5, stride=2, seq_first=False)[:][0]\ntest_eq(wds2, wds3)\nwds2, wds3, wds2.data, wds3.data\n\n(TSTensor(samples:8, vars:3, len:5, device=cpu),\n TSTensor(samples:8, vars:3, len:5, device=cpu),\n tensor([[[0.0000e+00, 1.0000e+00, 2.0000e+00, 3.0000e+00, 4.0000e+00],\n [0.0000e+00, 1.0000e+01, 2.0000e+01, 3.0000e+01, 4.0000e+01],\n [0.0000e+00, 1.0000e+02, 2.0000e+02, 3.0000e+02, 4.0000e+02]],\n \n [[2.0000e+00, 3.0000e+00, 4.0000e+00, 5.0000e+00, 6.0000e+00],\n [2.0000e+01, 3.0000e+01, 4.0000e+01, 5.0000e+01, 6.0000e+01],\n [2.0000e+02, 3.0000e+02, 4.0000e+02, 5.0000e+02, 6.0000e+02]],\n \n [[4.0000e+00, 5.0000e+00, 6.0000e+00, 7.0000e+00, 8.0000e+00],\n [4.0000e+01, 5.0000e+01, 6.0000e+01, 7.0000e+01, 8.0000e+01],\n [4.0000e+02, 5.0000e+02, 6.0000e+02, 7.0000e+02, 8.0000e+02]],\n \n [[6.0000e+00, 7.0000e+00, 8.0000e+00, 9.0000e+00, 1.0000e+01],\n [6.0000e+01, 7.0000e+01, 8.0000e+01, 9.0000e+01, 1.0000e+02],\n [6.0000e+02, 7.0000e+02, 8.0000e+02, 9.0000e+02, 1.0000e+03]],\n \n [[8.0000e+00, 9.0000e+00, 1.0000e+01, 1.1000e+01, 1.2000e+01],\n [8.0000e+01, 9.0000e+01, 1.0000e+02, 1.1000e+02, 1.2000e+02],\n [8.0000e+02, 9.0000e+02, 1.0000e+03, 1.1000e+03, 1.2000e+03]],\n \n [[1.0000e+01, 1.1000e+01, 1.2000e+01, 1.3000e+01, 1.4000e+01],\n [1.0000e+02, 1.1000e+02, 1.2000e+02, 1.3000e+02, 1.4000e+02],\n [1.0000e+03, 1.1000e+03, 1.2000e+03, 1.3000e+03, 1.4000e+03]],\n \n [[1.2000e+01, 1.3000e+01, 1.4000e+01, 1.5000e+01, 1.6000e+01],\n [1.2000e+02, 1.3000e+02, 1.4000e+02, 1.5000e+02, 1.6000e+02],\n [1.2000e+03, 1.3000e+03, 1.4000e+03, 1.5000e+03, 1.6000e+03]],\n \n [[1.4000e+01, 1.5000e+01, 1.6000e+01, 1.7000e+01, 1.8000e+01],\n [1.4000e+02, 1.5000e+02, 1.6000e+02, 1.7000e+02, 1.8000e+02],\n [1.4000e+03, 1.5000e+03, 1.6000e+03, 1.7000e+03, 1.8000e+03]]]),\n tensor([[[0.0000e+00, 1.0000e+00, 2.0000e+00, 3.0000e+00, 4.0000e+00],\n [0.0000e+00, 1.0000e+01, 2.0000e+01, 3.0000e+01, 4.0000e+01],\n [0.0000e+00, 1.0000e+02, 2.0000e+02, 3.0000e+02, 4.0000e+02]],\n \n [[2.0000e+00, 3.0000e+00, 4.0000e+00, 5.0000e+00, 6.0000e+00],\n [2.0000e+01, 3.0000e+01, 4.0000e+01, 5.0000e+01, 6.0000e+01],\n [2.0000e+02, 3.0000e+02, 4.0000e+02, 5.0000e+02, 6.0000e+02]],\n \n [[4.0000e+00, 5.0000e+00, 6.0000e+00, 7.0000e+00, 8.0000e+00],\n [4.0000e+01, 5.0000e+01, 6.0000e+01, 7.0000e+01, 8.0000e+01],\n [4.0000e+02, 5.0000e+02, 6.0000e+02, 7.0000e+02, 8.0000e+02]],\n \n [[6.0000e+00, 7.0000e+00, 8.0000e+00, 9.0000e+00, 1.0000e+01],\n [6.0000e+01, 7.0000e+01, 8.0000e+01, 9.0000e+01, 1.0000e+02],\n [6.0000e+02, 7.0000e+02, 8.0000e+02, 9.0000e+02, 1.0000e+03]],\n \n [[8.0000e+00, 9.0000e+00, 1.0000e+01, 1.1000e+01, 1.2000e+01],\n [8.0000e+01, 9.0000e+01, 1.0000e+02, 1.1000e+02, 1.2000e+02],\n [8.0000e+02, 9.0000e+02, 1.0000e+03, 1.1000e+03, 1.2000e+03]],\n \n [[1.0000e+01, 1.1000e+01, 1.2000e+01, 1.3000e+01, 1.4000e+01],\n [1.0000e+02, 1.1000e+02, 1.2000e+02, 1.3000e+02, 1.4000e+02],\n [1.0000e+03, 1.1000e+03, 1.2000e+03, 1.3000e+03, 1.4000e+03]],\n \n [[1.2000e+01, 1.3000e+01, 1.4000e+01, 1.5000e+01, 1.6000e+01],\n [1.2000e+02, 1.3000e+02, 1.4000e+02, 1.5000e+02, 1.6000e+02],\n [1.2000e+03, 1.3000e+03, 1.4000e+03, 1.5000e+03, 1.6000e+03]],\n \n [[1.4000e+01, 1.5000e+01, 1.6000e+01, 1.7000e+01, 1.8000e+01],\n [1.4000e+02, 1.5000e+02, 1.6000e+02, 1.7000e+02, 1.8000e+02],\n [1.4000e+03, 1.5000e+03, 1.6000e+03, 1.7000e+03, 1.8000e+03]]]))", + "crumbs": [ + "Data", + "Unwindowed datasets" + ] + }, + { + "objectID": "optimizer.html", + "href": "optimizer.html", + "title": "Optimizers", + "section": "", + "text": "This contains a set of optimizers.\n\n\nsource\n\nwrap_optimizer\n\n wrap_optimizer (opt, **kwargs)\n\nYou can natively use any of the optimizers included in the fastai library. You just need to pass it to the learner as the opt_func.\nIn addition, you will be able to use any of the optimizers from:\n\nPytorch\ntorch_optimizer (https://github.com/jettify/pytorch-optimizer). In this case, you will need to install torch-optimizer first)\n\nExamples of use:\nadamw = wrap_optimizer(torch.optim.AdamW)\nimport torch_optimizer as optim\nadabelief = wrap_optimizer(optim.AdaBelief)\nIf you want to use any these last 2, you can use the wrap_optimizer function. Here are a few examples:", + "crumbs": [ + "Training", + "Optimizers" + ] + }, + { + "objectID": "losses.html", + "href": "losses.html", + "title": "Losses", + "section": "", + "text": "Losses not available in fastai or Pytorch.\n\n\nsource\n\nHuberLoss\n\n HuberLoss (reduction='mean', delta=1.0)\n\nHuber loss\nCreates a criterion that uses a squared term if the absolute element-wise error falls below delta and a delta-scaled L1 term otherwise. This loss combines advantages of both :class:L1Loss and :class:MSELoss; the delta-scaled L1 region makes the loss less sensitive to outliers than :class:MSELoss, while the L2 region provides smoothness over :class:L1Loss near 0. See Huber loss <https://en.wikipedia.org/wiki/Huber_loss>_ for more information. This loss is equivalent to nn.SmoothL1Loss when delta == 1.\n\nsource\n\n\nLogCoshLoss\n\n LogCoshLoss (reduction='mean', delta=1.0)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\ninp = torch.rand(8, 3, 10)\ntarg = torch.randn(8, 3, 10)\ntest_close(HuberLoss(delta=1)(inp, targ), nn.SmoothL1Loss()(inp, targ))\nLogCoshLoss()(inp, targ)\n\ntensor(0.4588)\n\n\n\nsource\n\n\nMaskedLossWrapper\n\n MaskedLossWrapper (crit)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\ninp = torch.rand(8, 3, 10)\ntarg = torch.randn(8, 3, 10)\ntarg[targ >.8] = np.nan\nnn.L1Loss()(inp, targ), MaskedLossWrapper(nn.L1Loss())(inp, targ)\n\n(tensor(nan), tensor(1.0520))\n\n\n\nsource\n\n\nCenterPlusLoss\n\n CenterPlusLoss (loss, c_out, λ=0.01, logits_dim=None)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nsource\n\n\nCenterLoss\n\n CenterLoss (c_out, logits_dim=None)\n\nCode in Pytorch has been slightly modified from: https://github.com/KaiyangZhou/pytorch-center-loss/blob/master/center_loss.py Based on paper: Wen et al. A Discriminative Feature Learning Approach for Deep Face Recognition. ECCV 2016.\nArgs: c_out (int): number of classes. logits_dim (int): dim 1 of the logits. By default same as c_out (for one hot encoded logits)\n\nc_in = 10\nx = torch.rand(64, c_in).to(device=default_device())\nx = F.softmax(x, dim=1)\nlabel = x.max(dim=1).indices\nCenterLoss(c_in).to(x.device)(x, label), CenterPlusLoss(LabelSmoothingCrossEntropyFlat(), c_in).to(x.device)(x, label)\n\n(tensor(9.2481, grad_fn=<DivBackward0>),\n TensorBase(2.3559, grad_fn=<AliasBackward0>))\n\n\n\nCenterPlusLoss(LabelSmoothingCrossEntropyFlat(), c_in)\n\nCenterPlusLoss(loss=FlattenedLoss of LabelSmoothingCrossEntropy(), c_out=10, λ=0.01)\n\n\n\nsource\n\n\nFocalLoss\n\n FocalLoss (alpha:Optional[torch.Tensor]=None, gamma:float=2.0,\n reduction:str='mean')\n\nWeighted, multiclass focal loss\n\ninputs = torch.normal(0, 2, (16, 2)).to(device=default_device())\ntargets = torch.randint(0, 2, (16,)).to(device=default_device())\nFocalLoss()(inputs, targets)\n\ntensor(0.9829)\n\n\n\nsource\n\n\nTweedieLoss\n\n TweedieLoss (p=1.5, eps=1e-08)\n\nSame as nn.Module, but no need for subclasses to call super().__init__\n\nc_in = 10\noutput = torch.rand(64).to(device=default_device())\ntarget = torch.rand(64).to(device=default_device())\nTweedieLoss().to(output.device)(output, target)\n\ntensor(3.0539)", + "crumbs": [ + "Training", + "Losses" + ] + }, + { + "objectID": "data.preprocessing.html", + "href": "data.preprocessing.html", + "title": "Data preprocessing", + "section": "", + "text": "Functions used to preprocess time series (both X and y).\nfrom tsai.data.external import get_UCR_data\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, return_split=False)\ntfms = [None, Categorize()]\ndsets = TSDatasets(X, y, tfms=tfms, splits=splits)\nsource", + "crumbs": [ + "Data", + "Data preprocessing" + ] + }, + { + "objectID": "data.preprocessing.html#y-transforms", + "href": "data.preprocessing.html#y-transforms", + "title": "Data preprocessing", + "section": "y transforms", + "text": "y transforms\n\nsource\n\nPreprocessor\n\n Preprocessor (preprocessor, **kwargs)\n\nInitialize self. See help(type(self)) for accurate signature.\n\n# Standardize\nfrom tsai.data.validation import TimeSplitter\n\n\ny = random_shuffle(np.random.randn(1000) * 10 + 5)\nsplits = TimeSplitter()(y)\npreprocessor = Preprocessor(StandardScaler)\npreprocessor.fit(y[splits[0]])\ny_tfm = preprocessor.transform(y)\ntest_close(preprocessor.inverse_transform(y_tfm), y)\nplt.hist(y, 50, label='ori',)\nplt.hist(y_tfm, 50, label='tfm')\nplt.legend(loc='best')\nplt.show()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# RobustScaler\ny = random_shuffle(np.random.randn(1000) * 10 + 5)\nsplits = TimeSplitter()(y)\npreprocessor = Preprocessor(RobustScaler)\npreprocessor.fit(y[splits[0]])\ny_tfm = preprocessor.transform(y)\ntest_close(preprocessor.inverse_transform(y_tfm), y)\nplt.hist(y, 50, label='ori',)\nplt.hist(y_tfm, 50, label='tfm')\nplt.legend(loc='best')\nplt.show()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# Normalize\ny = random_shuffle(np.random.rand(1000) * 3 + .5)\nsplits = TimeSplitter()(y)\npreprocessor = Preprocessor(Normalizer)\npreprocessor.fit(y[splits[0]])\ny_tfm = preprocessor.transform(y)\ntest_close(preprocessor.inverse_transform(y_tfm), y)\nplt.hist(y, 50, label='ori',)\nplt.hist(y_tfm, 50, label='tfm')\nplt.legend(loc='best')\nplt.show()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# BoxCox\ny = random_shuffle(np.random.rand(1000) * 10 + 5)\nsplits = TimeSplitter()(y)\npreprocessor = Preprocessor(BoxCox)\npreprocessor.fit(y[splits[0]])\ny_tfm = preprocessor.transform(y)\ntest_close(preprocessor.inverse_transform(y_tfm), y)\nplt.hist(y, 50, label='ori',)\nplt.hist(y_tfm, 50, label='tfm')\nplt.legend(loc='best')\nplt.show()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# YeoJohnshon\ny = random_shuffle(np.random.randn(1000) * 10 + 5)\ny = np.random.beta(.5, .5, size=1000)\nsplits = TimeSplitter()(y)\npreprocessor = Preprocessor(YeoJohnshon)\npreprocessor.fit(y[splits[0]])\ny_tfm = preprocessor.transform(y)\ntest_close(preprocessor.inverse_transform(y_tfm), y)\nplt.hist(y, 50, label='ori',)\nplt.hist(y_tfm, 50, label='tfm')\nplt.legend(loc='best')\nplt.show()\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n# QuantileTransformer\ny = - np.random.beta(1, .5, 10000) * 10\nsplits = TimeSplitter()(y)\npreprocessor = Preprocessor(Quantile)\npreprocessor.fit(y[splits[0]])\nplt.hist(y, 50, label='ori',)\ny_tfm = preprocessor.transform(y)\nplt.legend(loc='best')\nplt.show()\nplt.hist(y_tfm, 50, label='tfm')\nplt.legend(loc='best')\nplt.show()\ntest_close(preprocessor.inverse_transform(y_tfm), y, 1e-1)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nsource\n\n\nReLabeler\n\n ReLabeler (cm)\n\nChanges the labels in a dataset based on a dictionary (class mapping) Args: cm = class mapping dictionary\n\nvals = {0:'a', 1:'b', 2:'c', 3:'d', 4:'e'}\ny = np.array([vals[i] for i in np.random.randint(0, 5, 20)])\nlabeler = ReLabeler(dict(a='x', b='x', c='y', d='z', e='z'))\ny_new = labeler(y)\ntest_eq(y.shape, y_new.shape)\ny, y_new\n\n(array(['d', 'd', 'a', 'd', 'b', 'e', 'a', 'd', 'b', 'c', 'b', 'e', 'b',\n 'b', 'a', 'e', 'd', 'e', 'c', 'e'], dtype='<U1'),\n array(['z', 'z', 'x', 'z', 'x', 'z', 'x', 'z', 'x', 'y', 'x', 'z', 'x',\n 'x', 'x', 'z', 'z', 'z', 'y', 'z'], dtype='<U1'))", + "crumbs": [ + "Data", + "Data preprocessing" + ] + }, + { + "objectID": "learner.html", + "href": "learner.html", + "title": "Learner", + "section": "", + "text": "fastai Learner extensions.\n\n\nsource\n\nLearner.show_batch\n\n Learner.show_batch (**kwargs)\n\n\nsource\n\n\nLearner.remove_all_cbs\n\n Learner.remove_all_cbs (max_iters=10)\n\n\nsource\n\n\nLearner.one_batch\n\n Learner.one_batch (i, b)\n\n\nsource\n\n\nLearner.inverse_transform\n\n Learner.inverse_transform (df:pandas.core.frame.DataFrame)\n\nApplies sklearn-type pipeline inverse transforms\n\nsource\n\n\nLearner.transform\n\n Learner.transform (df:pandas.core.frame.DataFrame)\n\nApplies sklearn-type pipeline transforms\n⚠️ Important: save_all and load_all methods are designed for small datasets only. If you are using a larger dataset, you should use the standard save and load_learner methods.\n\nsource\n\n\nload_all\n\n load_all (path='export', dls_fname='dls', model_fname='model',\n learner_fname='learner', device=None, pickle_module=<module\n 'pickle' from '/opt/hostedtoolcache/Python/3.9.18/x64/lib/pytho\n n3.9/pickle.py'>, verbose=False)\n\n\nsource\n\n\nLearner.save_all\n\n Learner.save_all (path='export', dls_fname='dls', model_fname='model',\n learner_fname='learner', verbose=False)\n\n\nfrom tsai.data.core import get_ts_dls\nfrom tsai.utils import remove_dir\n\n\nX = np.random.rand(100, 2, 10)\ndls = get_ts_dls(X)\nlearn = Learner(dls, InceptionTimePlus(2, 1), loss_func=MSELossFlat())\nlearn.save_all(Path.home()/'tmp', verbose=True)\nlearn2 = load_all(Path.home()/'tmp', verbose=True)\nremove_dir(Path.home()/'tmp')\n\nLearner saved:\npath = '/Users/nacho/tmp'\ndls_fname = '['dls_0.pth', 'dls_1.pth']'\nmodel_fname = 'model.pth'\nlearner_fname = 'learner.pkl'\nLearner loaded:\npath = '/Users/nacho/tmp'\ndls_fname = '['dls_0.pth', 'dls_1.pth']'\nmodel_fname = 'model.pth'\nlearner_fname = 'learner.pkl'\n/Users/nacho/tmp directory removed.\n\n\n\nsource\n\n\nLearner.plot_metrics\n\n Learner.plot_metrics (nrows:int=1, ncols:int=1, figsize:tuple=None,\n imsize:int=3, suptitle:str=None, sharex:Union[bool,\n Literal['none','all','row','col']]=False, sharey:Un\n ion[bool,Literal['none','all','row','col']]=False,\n squeeze:bool=True,\n width_ratios:Optional[Sequence[float]]=None,\n height_ratios:Optional[Sequence[float]]=None,\n subplot_kw:Optional[dict[str,Any]]=None,\n gridspec_kw:Optional[dict[str,Any]]=None)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nnrows\nint\n1\nNumber of rows in returned axes grid\n\n\nncols\nint\n1\nNumber of columns in returned axes grid\n\n\nfigsize\ntuple\nNone\nWidth, height in inches of the returned figure\n\n\nimsize\nint\n3\nSize (in inches) of images that will be displayed in the returned figure\n\n\nsuptitle\nstr\nNone\nTitle to be set to returned figure\n\n\nsharex\nbool | Literal[‘none’, ‘all’, ‘row’, ‘col’]\nFalse\n\n\n\nsharey\nbool | Literal[‘none’, ‘all’, ‘row’, ‘col’]\nFalse\n\n\n\nsqueeze\nbool\nTrue\n\n\n\nwidth_ratios\nSequence[float] | None\nNone\n\n\n\nheight_ratios\nSequence[float] | None\nNone\n\n\n\nsubplot_kw\ndict[str, Any] | None\nNone\n\n\n\ngridspec_kw\ndict[str, Any] | None\nNone\n\n\n\nReturns\n(plt.Figure, plt.Axes)\n\nReturns both fig and ax as a tuple\n\n\n\n\nsource\n\n\nRecorder.plot_metrics\n\n Recorder.plot_metrics (nrows=None, ncols=None, figsize=None,\n final_losses=True, perc=0.5, imsize:int=3,\n suptitle:str=None, sharex:Union[bool,Literal['none\n ','all','row','col']]=False, sharey:Union[bool,Lit\n eral['none','all','row','col']]=False,\n squeeze:bool=True,\n width_ratios:Optional[Sequence[float]]=None,\n height_ratios:Optional[Sequence[float]]=None,\n subplot_kw:Optional[dict[str,Any]]=None,\n gridspec_kw:Optional[dict[str,Any]]=None)\n\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nnrows\nint\n1\nNumber of rows in returned axes grid\n\n\nncols\nint\n1\nNumber of columns in returned axes grid\n\n\nfigsize\ntuple\nNone\nWidth, height in inches of the returned figure\n\n\nfinal_losses\nbool\nTrue\n\n\n\nperc\nfloat\n0.5\n\n\n\nimsize\nint\n3\nSize (in inches) of images that will be displayed in the returned figure\n\n\nsuptitle\nstr\nNone\nTitle to be set to returned figure\n\n\nsharex\nbool | Literal[‘none’, ‘all’, ‘row’, ‘col’]\nFalse\n\n\n\nsharey\nbool | Literal[‘none’, ‘all’, ‘row’, ‘col’]\nFalse\n\n\n\nsqueeze\nbool\nTrue\n\n\n\nwidth_ratios\nSequence[float] | None\nNone\n\n\n\nheight_ratios\nSequence[float] | None\nNone\n\n\n\nsubplot_kw\ndict[str, Any] | None\nNone\n\n\n\ngridspec_kw\ndict[str, Any] | None\nNone\n\n\n\nReturns\n(plt.Figure, plt.Axes)\n\nReturns both fig and ax as a tuple\n\n\n\n\nsource\n\n\nget_arch\n\n get_arch (arch_name)\n\n\nfor arch_name in all_arch_names:\n get_arch(arch_name)\n\n\nsource\n\n\nts_learner\n\n ts_learner (dls, arch=None, c_in=None, c_out=None, seq_len=None, d=None,\n s_cat_idxs=None, s_cat_embeddings=None,\n s_cat_embedding_dims=None, s_cont_idxs=None, o_cat_idxs=None,\n o_cat_embeddings=None, o_cat_embedding_dims=None,\n o_cont_idxs=None, splitter=<function trainable_params>,\n loss_func=None, opt_func=<function Adam>, lr=0.001, cbs=None,\n metrics=None, path=None, model_dir='models', wd=None,\n wd_bn_bias=False, train_bn=True, moms=(0.95, 0.85, 0.95),\n train_metrics=False, valid_metrics=True, seed=None,\n device=None, verbose=False, patch_len=None,\n patch_stride=None, fusion_layers=128, fusion_act='relu',\n fusion_dropout=0.0, fusion_use_bn=True, pretrained=False,\n weights_path=None, exclude_head=True, cut=-1, init=None,\n arch_config={})\n\n\nsource\n\n\ntsimage_learner\n\n tsimage_learner (dls, arch=None, pretrained=False, loss_func=None,\n opt_func=<function Adam>, lr=0.001, cbs=None,\n metrics=None, path=None, model_dir='models', wd=None,\n wd_bn_bias=False, train_bn=True, moms=(0.95, 0.85,\n 0.95), c_in=None, c_out=None, device=None,\n verbose=False, init=None, arch_config={})\n\n\nsource\n\n\nLearner.decoder\n\n Learner.decoder (o)\n\n\nfrom tsai.data.core import *\nfrom tsai.data.external import get_UCR_data\nfrom tsai.models.FCNPlus import FCNPlus\n\n\nX, y, splits = get_UCR_data('OliveOil', verbose=True, split_data=False)\ntfms = [None, [TSCategorize()]]\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms)\nlearn = ts_learner(dls, FCNPlus)\nfor p in learn.model.parameters():\n p.requires_grad=False\ntest_eq(count_parameters(learn.model), 0)\nlearn.freeze()\ntest_eq(count_parameters(learn.model), 1540)\nlearn.unfreeze()\ntest_eq(count_parameters(learn.model), 264580)\n\nlearn = ts_learner(dls, 'FCNPlus')\nfor p in learn.model.parameters():\n p.requires_grad=False\ntest_eq(count_parameters(learn.model), 0)\nlearn.freeze()\ntest_eq(count_parameters(learn.model), 1540)\nlearn.unfreeze()\ntest_eq(count_parameters(learn.model), 264580)\n\nDataset: OliveOil\nX : (60, 1, 570)\ny : (60,)\nsplits : (#30) [0,1,2,3,4,5,6,7,8,9...] (#30) [30,31,32,33,34,35,36,37,38,39...] \n\n\n\n\nlearn.show_batch();\n\n\n\n\n\n\n\n\n\nfrom fastai.metrics import accuracy\nfrom tsai.data.preprocessing import TSRobustScale\n\n\nX, y, splits = get_UCR_data('OliveOil', split_data=False)\ntfms = [None, TSClassification()]\nbatch_tfms = TSRobustScale()\ndls = get_ts_dls(X, y, tfms=tfms, splits=splits, batch_tfms=batch_tfms)\nlearn = ts_learner(dls, FCNPlus, metrics=accuracy, train_metrics=True)\nlearn.fit_one_cycle(2)\nlearn.plot_metrics()\n\n\n\n\n\n\n\n\nepoch\ntrain_loss\ntrain_accuracy\nvalid_loss\nvalid_accuracy\ntime\n\n\n\n\n0\n1.480875\n0.266667\n1.390461\n0.300000\n00:02\n\n\n1\n1.476655\n0.266667\n1.387370\n0.300000\n00:01\n\n\n\n\n\n\n\n\n\n\n\n\n\nif not os.path.exists(\"./models\"): os.mkdir(\"./models\")\nif not os.path.exists(\"./data\"): os.mkdir(\"./data\")\nnp.save(\"data/X_test.npy\", X[splits[1]])\nnp.save(\"data/y_test.npy\", y[splits[1]])\nlearn.export(\"./models/test.pth\")", + "crumbs": [ + "Training", + "Learner" + ] + }, + { + "objectID": "export.html", + "href": "export.html", + "title": "nb2py", + "section": "", + "text": "nb2py will allow you to convert the notebook (.ipynb) where the function is executed to a python script.\n\nThe conversion applies these rules:\n\nThe notebook will be automatically saved when the function is executed.\nOnly code cells will be converted (not markdown cells).\nA header will be added to indicate the script has been automatically generated. It also indicates where the original ipynb is.\nCells with a #hide flag won’t be converted. Flag variants like # hide, #Hide, #HIDE, … are also acceptable.\nEmpty cells and unnecessary empty lines within cells will be removed.\nBy default the script will be created with the same name and in the same folder of the original notebook. But you can pass a dir folder and a different name if you wish.\nIf a script with the same name already exists, it will be overwriten.\n\nThis code is required to identify flags in the notebook. We are looking for #hide flags.\nThis code automatically gets the name of the notebook. It’s been tested to work on Jupyter notebooks, Jupyter Lab and Google Colab.\n\nsource\n\nget_script_path\n\n get_script_path (nb_name=None)\n\n\nsource\n\n\nnb_name_to_py\n\n nb_name_to_py (nb_name)\n\n\nsource\n\n\nget_nb_path\n\n get_nb_path ()\n\nReturns the absolute path of the notebook, or raises a FileNotFoundError exception if it cannot be determined.\n\nsource\n\n\nget_colab_nb_name\n\n get_colab_nb_name ()\n\n\nsource\n\n\nget_nb_name\n\n get_nb_name (d=None)\n\nReturns the short name of the notebook w/o the .ipynb extension, or raises a FileNotFoundError exception if it cannot be determined.\nThis code is used when trying to save a file to google drive. We first need to mount the drive.\n\nsource\n\n\nnb2py\n\n nb2py (nb:str<absoluteorrelativefullpathtothenotebookyouwanttoconverttoap\n ythonscript>=None, folder:str<absoluteorrelativepathtofolderofthes\n criptyouwillcreate.Defaultstocurrentnb'sdirectory>=None, name:str<\n nameofthescriptyouwanttocreate.Defaultstocurrentnbname.ipynbby.py>\n =None, save:<savesthenbbeforeconvertingittoascript>=True,\n run:<importandrunthescript>=False,\n verbose:<controlsverbosity>=True)\n\nConverts a notebook to a python script in a predefined folder.\n\nif not is_colab():\n nb = None\n folder = None\n name = None\n pyname = nb2py(nb=nb, folder=folder, name=name)\n if pyname is not None: \n assert os.path.isfile(pyname)\n os.remove(pyname)\n assert not os.path.isfile(pyname)\n\n nb = '001_export.ipynb'\n folder = None\n name = None\n pyname = nb2py(nb=nb, folder=folder, name=name)\n if pyname is not None: \n assert os.path.isfile(pyname)\n os.remove(pyname)\n assert not os.path.isfile(pyname)\n\n nb = '../nbs/001_export'\n folder = None\n name = None\n pyname = nb2py(nb=nb, folder=folder, name=name)\n if pyname is not None: \n assert os.path.isfile(pyname)\n os.remove(pyname)\n assert not os.path.isfile(pyname)\n\n nb = None\n folder = '../test_export/'\n name = None\n pyname = nb2py(nb=nb, folder=folder, name=name)\n if pyname is not None: \n assert os.path.isfile(pyname)\n shutil.rmtree(folder)\n assert not os.path.isfile(pyname)\n\nnb2py couldn't get the nb name. Pass it as an nb argument and rerun nb2py.\n001_export.ipynb converted to /Users/nacho/notebooks/tsai/nbs/001_export.py\n001_export.ipynb converted to /Users/nacho/notebooks/tsai/nbs/../nbs/001_export.py\nnb2py couldn't get the nb name. Pass it as an nb argument and rerun nb2py." + }, + { + "objectID": "models.rnnplus.html", + "href": "models.rnnplus.html", + "title": "RNNPlus", + "section": "", + "text": "These are RNN, LSTM and GRU PyTorch implementations created by Ignacio Oguiza - oguiza@timeseriesAI.co\nThe idea of including a feature extractor to the RNN network comes from the solution developed by the UPSTAGE team (https://www.kaggle.com/songwonho, https://www.kaggle.com/limerobot and https://www.kaggle.com/jungikhyo). They finished in 3rd position in Kaggle’s Google Brain - Ventilator Pressure Prediction competition. They used a Conv1d + Stacked LSTM architecture.\nsource", + "crumbs": [ + "Models", + "RNNs", + "RNNPlus" + ] + }, + { + "objectID": "models.rnnplus.html#converting-a-model-to-torchscript", + "href": "models.rnnplus.html#converting-a-model-to-torchscript", + "title": "RNNPlus", + "section": "Converting a model to TorchScript", + "text": "Converting a model to TorchScript\n\nmodel = GRUPlus(c_in, c_out, hidden_size=100, n_layers=2, bidirectional=True, rnn_dropout=.5, fc_dropout=.5)\nmodel.eval()\ninp = torch.rand(1, c_in, 50)\noutput = model(inp)\nprint(output)\n\ntensor([[-0.0677, -0.0857]], grad_fn=<AddmmBackward0>)\n\n\n\nTracing\n\n# save to gpu, cpu or both\ntraced_cpu = torch.jit.trace(model.cpu(), inp)\nprint(traced_cpu)\ntorch.jit.save(traced_cpu, \"cpu.pt\")\n\n# load cpu or gpu model\ntraced_cpu = torch.jit.load(\"cpu.pt\")\ntest_eq(traced_cpu(inp), output)\n\n!rm \"cpu.pt\"\n\nGRUPlus(\n original_name=GRUPlus\n (backbone): _RNN_Backbone(\n original_name=_RNN_Backbone\n (to_cat_embed): Identity(original_name=Identity)\n (feature_extractor): Identity(original_name=Identity)\n (rnn): Sequential(\n original_name=Sequential\n (0): GRU(original_name=GRU)\n (1): LSTMOutput(original_name=LSTMOutput)\n )\n (transpose): Transpose(original_name=Transpose)\n )\n (head): Sequential(\n original_name=Sequential\n (0): LastStep(original_name=LastStep)\n (1): Dropout(original_name=Dropout)\n (2): Linear(original_name=Linear)\n )\n)", + "crumbs": [ + "Models", + "RNNs", + "RNNPlus" + ] + }, + { + "objectID": "models.rnnplus.html#converting-a-model-to-onnx", + "href": "models.rnnplus.html#converting-a-model-to-onnx", + "title": "RNNPlus", + "section": "Converting a model to ONNX", + "text": "Converting a model to ONNX\nimport onnx\n\ntorch.onnx.export(model.cpu(), # model being run\n inp, # model input (or a tuple for multiple inputs)\n \"cpu.onnx\", # where to save the model (can be a file or file-like object)\n export_params=True, # store the trained parameter weights inside the model file\n verbose=False,\n opset_version=13, # the ONNX version to export the model to\n do_constant_folding=True, # whether to execute constant folding for optimization\n input_names = ['input'], # the model's input names\n output_names = ['output'], # the model's output names\n dynamic_axes={\n 'input' : {0 : 'batch_size'}, \n 'output' : {0 : 'batch_size'}} # variable length axes\n )\n\n\nonnx_model = onnx.load(\"cpu.onnx\") # Load the model and check it's ok\nonnx.checker.check_model(onnx_model)\nimport onnxruntime as ort\n\nort_sess = ort.InferenceSession('cpu.onnx')\nout = ort_sess.run(None, {'input': inp.numpy()})\n\ninput_name = ort_sess.get_inputs()[0].name\noutput_name = ort_sess.get_outputs()[0].name\ninput_dims = ort_sess.get_inputs()[0].shape\n\ntest_close(out, output.detach().numpy())\n!rm \"cpu.onnx\"", + "crumbs": [ + "Models", + "RNNs", + "RNNPlus" + ] + }, + { + "objectID": "models.convtranplus.html", + "href": "models.convtranplus.html", + "title": "ConvTranPlus", + "section": "", + "text": "ConvTran: Improving Position Encoding of Transformers for Multivariate Time Series Classification\n\nThis is a Pytorch implementation of ConvTran adapted by Ignacio Oguiza and based on:\nFoumani, N. M., Tan, C. W., Webb, G. I., & Salehi, M. (2023). Improving Position Encoding of Transformers for Multivariate Time Series Classification. arXiv preprint arXiv:2305.16642.\nPre-print: https://arxiv.org/abs/2305.16642v1\nOriginal repository: https://github.com/Navidfoumani/ConvTran\n\nsource\n\ntAPE\n\n tAPE (d_model:int, seq_len=1024, dropout:float=0.1, scale_factor=1.0)\n\ntime Absolute Position Encoding\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nd_model\nint\n\nthe embedding dimension\n\n\nseq_len\nint\n1024\nthe max. length of the incoming sequence\n\n\ndropout\nfloat\n0.1\ndropout value\n\n\nscale_factor\nfloat\n1.0\n\n\n\n\n\nt = torch.randn(8, 50, 128)\nassert tAPE(128, 50)(t).shape == t.shape\n\n\nsource\n\n\nAbsolutePositionalEncoding\n\n AbsolutePositionalEncoding (d_model:int, seq_len=1024, dropout:float=0.1,\n scale_factor=1.0)\n\nAbsolute positional encoding\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nd_model\nint\n\nthe embedding dimension\n\n\nseq_len\nint\n1024\nthe max. length of the incoming sequence\n\n\ndropout\nfloat\n0.1\ndropout value\n\n\nscale_factor\nfloat\n1.0\n\n\n\n\n\nt = torch.randn(8, 50, 128)\nassert AbsolutePositionalEncoding(128, 50)(t).shape == t.shape\n\n\nsource\n\n\nLearnablePositionalEncoding\n\n LearnablePositionalEncoding (d_model:int, seq_len=1024,\n dropout:float=0.1)\n\nLearnable positional encoding\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nd_model\nint\n\nthe embedding dimension\n\n\nseq_len\nint\n1024\nthe max. length of the incoming sequence\n\n\ndropout\nfloat\n0.1\ndropout value\n\n\n\n\nt = torch.randn(8, 50, 128)\nassert LearnablePositionalEncoding(128, 50)(t).shape == t.shape\n\n\nsource\n\n\nAttention\n\n Attention (d_model:int, n_heads:int=8, dropout:float=0.01)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n\nivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\n\n\nType\nDefault\nDetails\n\n\n\n\nd_model\nint\n\nEmbedding dimension\n\n\nn_heads\nint\n8\nnumber of attention heads\n\n\ndropout\nfloat\n0.01\ndropout\n\n\n\n\nt = torch.randn(8, 50, 128)\nassert Attention(128)(t).shape == t.shape\n\n\nsource\n\n\nAttention_Rel_Scl\n\n Attention_Rel_Scl (d_model:int, seq_len:int, n_heads:int=8,\n dropout:float=0.01)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n\nivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\n\n\nType\nDefault\nDetails\n\n\n\n\nd_model\nint\n\nEmbedding dimension\n\n\nseq_len\nint\n\nsequence length\n\n\nn_heads\nint\n8\nnumber of attention heads\n\n\ndropout\nfloat\n0.01\ndropout\n\n\n\n\nt = torch.randn(8, 50, 128)\nassert Attention_Rel_Scl(128, 50)(t).shape == t.shape\n\n\nsource\n\n\nAttention_Rel_Vec\n\n Attention_Rel_Vec (d_model:int, seq_len:int, n_heads:int=8,\n dropout:float=0.01)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n\nivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\n\n\nType\nDefault\nDetails\n\n\n\n\nd_model\nint\n\nEmbedding dimension\n\n\nseq_len\nint\n\nsequence length\n\n\nn_heads\nint\n8\nnumber of attention heads\n\n\ndropout\nfloat\n0.01\ndropout\n\n\n\n\nt = torch.randn(8, 50, 128)\nassert Attention_Rel_Vec(128, 50)(t).shape == t.shape\n\n\nsource\n\n\nConvTranBackbone\n\n ConvTranBackbone (c_in:int, seq_len:int, d_model=16, n_heads:int=8,\n dim_ff:int=256, abs_pos_encode:str='tAPE',\n rel_pos_encode:str='eRPE', dropout:float=0.01)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n\nivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\n\n\n\nseq_len\nint\n\n\n\n\nd_model\nint\n16\nInternal dimension of transformer embeddings\n\n\nn_heads\nint\n8\nNumber of multi-headed attention heads\n\n\ndim_ff\nint\n256\nDimension of dense feedforward part of transformer layer\n\n\nabs_pos_encode\nstr\ntAPE\nAbsolute Position Embedding. choices={‘tAPE’, ‘sin’, ‘learned’, None}\n\n\nrel_pos_encode\nstr\neRPE\nRelative Position Embedding. choices={‘eRPE’, ‘vector’, None}\n\n\ndropout\nfloat\n0.01\nDroupout regularization ratio\n\n\n\n\nt = torch.randn(8, 5, 20)\nassert ConvTranBackbone(5, 20)(t).shape, (8, 16, 20)\n\n\nsource\n\n\nConvTranPlus\n\n ConvTranPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,\n d_model:int=16, n_heads:int=8, dim_ff:int=256,\n abs_pos_encode:str='tAPE', rel_pos_encode:str='eRPE',\n encoder_dropout:float=0.01, fc_dropout:float=0.1,\n use_bn:bool=True, flatten:bool=True, custom_head:Any=None)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\nNumber of channels in input\n\n\nc_out\nint\n\nNumber of channels in output\n\n\nseq_len\nint\n\nNumber of input sequence length\n\n\nd\ntuple\nNone\noutput shape (excluding batch dimension).\n\n\nd_model\nint\n16\nInternal dimension of transformer embeddings\n\n\nn_heads\nint\n8\nNumber of multi-headed attention heads\n\n\ndim_ff\nint\n256\nDimension of dense feedforward part of transformer layer\n\n\nabs_pos_encode\nstr\ntAPE\nAbsolute Position Embedding. choices={‘tAPE’, ‘sin’, ‘learned’, None}\n\n\nrel_pos_encode\nstr\neRPE\nRelative Position Embedding. choices={‘eRPE’, ‘vector’, None}\n\n\nencoder_dropout\nfloat\n0.01\nDroupout regularization ratio for the encoder\n\n\nfc_dropout\nfloat\n0.1\nDroupout regularization ratio for the head\n\n\nuse_bn\nbool\nTrue\nindicates if batchnorm will be applied to the model head.\n\n\nflatten\nbool\nTrue\nthis will flatten the output of the encoder before applying the head if True.\n\n\ncustom_head\ntyping.Any\nNone\ncustom head that will be applied to the model head (optional).\n\n\n\n\nxb = torch.randn(16, 5, 20)\n\nmodel = ConvTranPlus(5, 3, 20, d=None)\noutput = model(xb)\nassert output.shape == (16, 3)\n\n\nxb = torch.randn(16, 5, 20)\n\nmodel = ConvTranPlus(5, 3, 20, d=5)\noutput = model(xb)\nassert output.shape == (16, 5, 3)\n\n\nxb = torch.randn(16, 5, 20)\n\nmodel = ConvTranPlus(5, 3, 20, d=(2, 10))\noutput = model(xb)\nassert output.shape == (16, 2, 10, 3)", + "crumbs": [ + "Models", + "Hybrid models", + "ConvTranPlus" + ] + }, + { + "objectID": "models.minirocketplus_pytorch.html", + "href": "models.minirocketplus_pytorch.html", + "title": "MINIROCKETPlus Pytorch", + "section": "", + "text": "This is a modified Pytorch implementation of MiniRocket originally developed by Malcolm McLean and Ignacio Oguiza and based on:\nDempster, A., Schmidt, D. F., & Webb, G. I. (2020). MINIROCKET: A Very Fast (Almost) Deterministic Transform for Time Series Classification. arXiv preprint arXiv:2012.08791.\nOriginal paper: https://arxiv.org/abs/2012.08791\nOriginal code: https://github.com/angus924/minirocket\n\nsource\n\nMiniRocketFeaturesPlus\n\n MiniRocketFeaturesPlus (c_in, seq_len, num_features=10000,\n max_dilations_per_kernel=32, kernel_size=9,\n max_num_channels=9, max_num_kernels=84,\n add_lsaz=False)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nMiniRocketPlus\n\n MiniRocketPlus (c_in, c_out, seq_len, num_features=10000,\n max_dilations_per_kernel=32, kernel_size=9,\n max_num_channels=None, max_num_kernels=84, bn=True,\n fc_dropout=0, add_lsaz=False, custom_head=None,\n zero_init=True)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nsource\n\n\nFlatten\n\n Flatten (*args, **kwargs)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nget_minirocket_features\n\n get_minirocket_features (o, model, chunksize=1024, use_cuda=None,\n to_np=False)\n\nFunction used to split a large dataset into chunks, avoiding OOM error.\n\nsource\n\n\nMiniRocketHead\n\n MiniRocketHead (c_in, c_out, seq_len=1, bn=True, fc_dropout=0.0)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nfrom tsai.imports import default_device\nfrom fastai.metrics import accuracy\nfrom fastai.callback.tracker import ReduceLROnPlateau\nfrom tsai.data.all import *\nfrom tsai.learner import *\n\n\n# Offline feature calculation\ndsid = 'ECGFiveDays'\nX, y, splits = get_UCR_data(dsid, split_data=False)\nmrf = MiniRocketFeaturesPlus(c_in=X.shape[1], seq_len=X.shape[2]).to(default_device())\nX_train = X[splits[0]] # X_train may either be a np.ndarray or a torch.Tensor\nmrf.fit(X_train)\nX_tfm = get_minirocket_features(X, mrf).cpu().numpy()\ntfms = [None, TSClassification()]\nbatch_tfms = TSStandardize(by_var=True)\ndls = get_ts_dls(X_tfm, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=256)\nlearn = ts_learner(dls, MiniRocketHead, metrics=accuracy)\nlearn.fit(1, 1e-4, cbs=ReduceLROnPlateau(factor=0.5, min_lr=1e-8, patience=10))\n\n\n# Online feature calculation\ndsid = 'ECGFiveDays'\nX, y, splits = get_UCR_data(dsid, split_data=False)\ntfms = [None, TSClassification()]\nbatch_tfms = TSStandardize()\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, bs=256)\nlearn = ts_learner(dls, MiniRocketPlus, kernel_size=7, metrics=accuracy)\nlearn.fit_one_cycle(1, 1e-2)\n\n\nfrom functools import partial\nfrom fastcore.test import *\nfrom tsai.models.utils import build_ts_model\nfrom tsai.models.layers import mlp_head, rocket_nd_head\n\n\nbs, c_in, seq_len = 8, 3, 50\nc_out = 2\nxb = torch.randn(bs, c_in, seq_len)\nmodel = build_ts_model(MiniRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\nmodel = build_ts_model(MiniRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len, add_lsaz=True)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\nmodel = build_ts_model(MiniRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len, custom_head=mlp_head)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\n\n\nX = np.random.rand(8, 10, 100)\ny = np.random.rand(8, 1, 100)\nsplits = TimeSplitter(show_plot=False)(y)\ntfms = [None, TSRegression()]\nbatch_tfms = TSStandardize(by_sample=True)\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\ncustom_head = partial(rocket_nd_head, d=dls.d)\nmodel = MiniRocketPlus(dls.vars, dls.c, dls.len, custom_head=custom_head)\nxb,yb = dls.one_batch()\ntest_eq(model.to(xb.device)(xb).shape[1:], y.shape[1:])\n\n\nX = np.random.rand(16, 10, 100)\ny = np.random.randint(0, 4, (16, 1, 100))\nsplits = TimeSplitter(show_plot=False)(y)\ntfms = [None, TSClassification()]\nbatch_tfms = TSStandardize(by_sample=True)\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\ncustom_head = partial(rocket_nd_head, d=dls.d)\nmodel = MiniRocketPlus(dls.vars, dls.c, dls.len, custom_head=custom_head)\nxb,yb = dls.one_batch()\ntest_eq(model.to(xb.device)(xb).shape[1:], y.shape[1:]+(4,))\n\n\nsource\n\n\nInceptionRocketFeaturesPlus\n\n InceptionRocketFeaturesPlus (c_in, seq_len, num_features=10000,\n max_dilations_per_kernel=32,\n kernel_sizes=array([3, 5, 7, 9]),\n max_num_channels=None, max_num_kernels=84,\n add_lsaz=True, same_n_feats_per_ks=False)\n\nBase class for all neural network modules.\nYour models should also subclass this class.\nModules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes::\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass Model(nn.Module):\n def __init__(self):\n super().__init__()\n self.conv1 = nn.Conv2d(1, 20, 5)\n self.conv2 = nn.Conv2d(20, 20, 5)\n\n def forward(self, x):\n x = F.relu(self.conv1(x))\n return F.relu(self.conv2(x))\nSubmodules assigned in this way will be registered, and will have their parameters converted too when you call :meth:to, etc.\n.. note:: As per the example above, an __init__() call to the parent class must be made before assignment on the child.\n:ivar training: Boolean represents whether this module is in training or evaluation mode. :vartype training: bool\n\nsource\n\n\nInceptionRocketPlus\n\n InceptionRocketPlus (c_in, c_out, seq_len, num_features=10000,\n max_dilations_per_kernel=32, kernel_sizes=[3, 5, 7,\n 9], max_num_channels=None, max_num_kernels=84,\n same_n_feats_per_ks=False, add_lsaz=False, bn=True,\n fc_dropout=0, custom_head=None, zero_init=True)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\nfrom fastcore.test import *\nfrom tsai.models.utils import build_ts_model\n\n\nbs, c_in, seq_len = 8, 3, 50\nc_out = 2\nxb = torch.randn(bs, c_in, seq_len)\nmodel = build_ts_model(InceptionRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\nmodel = build_ts_model(InceptionRocketPlus, c_in=c_in, c_out=c_out, seq_len=seq_len, add_lsaz=True)\ntest_eq(model.to(xb.device)(xb).shape, (bs, c_out))\n\n\nX = np.random.rand(8, 10, 100)\ny = np.random.rand(8, 1, 100)\nsplits = TimeSplitter(show_plot=False)(y)\ntfms = [None, TSRegression()]\nbatch_tfms = TSStandardize(by_sample=True)\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\ncustom_head = partial(rocket_nd_head, d=dls.d)\nmodel = InceptionRocketPlus(dls.vars, dls.c, dls.len, custom_head=custom_head)\nxb,yb = dls.one_batch()\ntest_eq(model.to(xb.device)(xb).shape[1:], y.shape[1:])\n\n\nX = np.random.rand(16, 10, 100)\ny = np.random.randint(0, 4, (16, 1, 100))\nsplits = TimeSplitter(show_plot=False)(y)\ntfms = [None, TSClassification()]\nbatch_tfms = TSStandardize(by_sample=True)\ndls = get_ts_dls(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms)\ncustom_head = partial(rocket_nd_head, d=dls.d)\nmodel = MiniRocketPlus(dls.vars, dls.c, dls.len, custom_head=custom_head)\nxb,yb = dls.one_batch()\ntest_eq(model.to(xb.device)(xb).shape[1:], y.shape[1:]+(4,))", + "crumbs": [ + "Models", + "ROCKETs", + "MINIROCKETPlus Pytorch" + ] + }, + { + "objectID": "data.transforms.html", + "href": "data.transforms.html", + "title": "Time Series Data Augmentation", + "section": "", + "text": "Functions used to transform TSTensors (Data Augmentation)\n\n\nfrom tsai.data.core import TSCategorize\nfrom tsai.data.external import get_UCR_data\nfrom tsai.data.preprocessing import TSStandardize\n\n\ndsid = 'NATOPS'\nX, y, splits = get_UCR_data(dsid, return_split=False)\ntfms = [None, TSCategorize()]\nbatch_tfms = TSStandardize()\ndls = get_ts_dls(X, y, tfms=tfms, splits=splits, batch_tfms=batch_tfms, bs=128)\nxb, yb = next(iter(dls.train))\n\n\nsource\n\nTSIdentity\n\n TSIdentity (magnitude=None, **kwargs)\n\nApplies the identity tfm to a TSTensor batch\n\ntest_eq(TSIdentity()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSShuffle_HLs\n\n TSShuffle_HLs (magnitude=1.0, ex=None, **kwargs)\n\nRandomly shuffles HIs/LOs of an OHLC TSTensor batch\n\ntest_eq(TSShuffle_HLs()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSShuffleSteps\n\n TSShuffleSteps (magnitude=1.0, ex=None, **kwargs)\n\nRandomly shuffles consecutive sequence datapoints in batch\n\nt = TSTensor(torch.arange(11).float())\ntt_ = []\nfor _ in range(1000):\n tt = TSShuffleSteps()(t, split_idx=0)\n test_eq(len(set(tt.tolist())), len(t))\n test_ne(tt, t)\n tt_.extend([t for i,t in enumerate(tt) if t!=i])\nx, y = np.unique(tt_, return_counts=True) # This is to visualize distribution which should be equal for all and half for first and last items\nplt.bar(x, y);\n\n\n\n\n\n\n\n\n\nsource\n\n\nTSGaussianNoise\n\n TSGaussianNoise (magnitude=0.5, additive=True, ex=None, **kwargs)\n\nApplies additive or multiplicative gaussian noise\n\ntest_eq(TSGaussianNoise(.1, additive=True)(xb, split_idx=0).shape, xb.shape)\ntest_eq(TSGaussianNoise(.1, additive=False)(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSMagMulNoise\n\n TSMagMulNoise (magnitude=1, ex=None, **kwargs)\n\nApplies multiplicative noise on the y-axis for each step of a TSTensor batch\n\nsource\n\n\nTSMagAddNoise\n\n TSMagAddNoise (magnitude=1, ex=None, **kwargs)\n\nApplies additive noise on the y-axis for each step of a TSTensor batch\n\ntest_eq(TSMagAddNoise()(xb, split_idx=0).shape, xb.shape)\ntest_eq(TSMagMulNoise()(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSMagAddNoise()(xb, split_idx=0), xb)\ntest_ne(TSMagMulNoise()(xb, split_idx=0), xb)\n\n\nsource\n\n\nrandom_cum_linear_generator\n\n random_cum_linear_generator (o, magnitude=0.1)\n\n\nsource\n\n\nrandom_cum_noise_generator\n\n random_cum_noise_generator (o, magnitude=0.1, noise=None)\n\n\nsource\n\n\nrandom_cum_curve_generator\n\n random_cum_curve_generator (o, magnitude=0.1, order=4, noise=None)\n\n\nsource\n\n\nrandom_curve_generator\n\n random_curve_generator (o, magnitude=0.1, order=4, noise=None)\n\n\nsource\n\n\nTSTimeNoise\n\n TSTimeNoise (magnitude=0.1, ex=None, **kwargs)\n\nApplies noise to each step in the x-axis of a TSTensor batch based on smooth random curve\n\ntest_eq(TSTimeNoise()(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSTimeNoise()(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSMagWarp\n\n TSMagWarp (magnitude=0.02, ord=4, ex=None, **kwargs)\n\nApplies warping to the y-axis of a TSTensor batch based on a smooth random curve\n\ntest_eq(TSMagWarp()(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSMagWarp()(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSTimeWarp\n\n TSTimeWarp (magnitude=0.1, ord=6, ex=None, **kwargs)\n\nApplies time warping to the x-axis of a TSTensor batch based on a smooth random curve\n\ntest_eq(TSTimeWarp()(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSTimeWarp()(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSWindowWarp\n\n TSWindowWarp (magnitude=0.1, ex=None, **kwargs)\n\nApplies window slicing to the x-axis of a TSTensor batch based on a random linear curve based on https://halshs.archives-ouvertes.fr/halshs-01357973/document\n\ntest_eq(TSWindowWarp()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSMagScalePerVar\n\n TSMagScalePerVar (magnitude=0.5, ex=None, **kwargs)\n\nApplies per_var scaling to the y-axis of a TSTensor batch based on a scalar\n\nsource\n\n\nTSMagScale\n\n TSMagScale (magnitude=0.5, ex=None, **kwargs)\n\nApplies scaling to the y-axis of a TSTensor batch based on a scalar\n\ntest_eq(TSMagScale()(xb, split_idx=0).shape, xb.shape)\ntest_eq(TSMagScalePerVar()(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSMagScale()(xb, split_idx=0), xb)\ntest_ne(TSMagScalePerVar()(xb, split_idx=0), xb)\n\n\nsource\n\n\ntest_interpolate\n\n test_interpolate (mode='linear')\n\n\n# Run the test\ntest_interpolate('linear')\n\nlinear interpolation is not supported by mps. You can try a different mode\nError: The operator 'aten::upsample_linear1d.out' is not currently implemented for the MPS device. If you want this op to be added in priority during the prototype phase of this feature, please comment on https://github.com/pytorch/pytorch/issues/77764. As a temporary fix, you can set the environment variable `PYTORCH_ENABLE_MPS_FALLBACK=1` to use the CPU as a fallback for this op. WARNING: this will be slower than running natively on MPS.\n\n\nFalse\n\n\n\ntest_interpolate('nearest')\n\nTrue\n\n\n\nsource\n\n\nTSRandomResizedCrop\n\n TSRandomResizedCrop (magnitude=0.1, size=None, scale=None, ex=None,\n mode='nearest', **kwargs)\n\nRandomly amplifies a sequence focusing on a random section of the steps\n\nif test_interpolate('nearest'):\n test_eq(TSRandomResizedCrop(.5)(xb, split_idx=0).shape, xb.shape)\n test_ne(TSRandomResizedCrop(size=.8, scale=(.5, 1))(xb, split_idx=0).shape, xb.shape)\n test_ne(TSRandomResizedCrop(size=20, scale=(.5, 1))(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSWindowSlicing\n\n TSWindowSlicing (magnitude=0.1, ex=None, mode='nearest', **kwargs)\n\nRandomly extracts an resize a ts slice based on https://halshs.archives-ouvertes.fr/halshs-01357973/document\n\nif test_interpolate('nearest'):\n test_eq(TSWindowSlicing()(xb, split_idx=0).shape, xb.shape)\n test_ne(TSWindowSlicing()(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSRandomZoomOut\n\n TSRandomZoomOut (magnitude=0.1, ex=None, mode='nearest', **kwargs)\n\nRandomly compresses a sequence on the x-axis\n\nif test_interpolate('nearest'):\n test_eq(TSRandomZoomOut(.5)(xb, split_idx=0).shape, xb.shape)#\n\n\nsource\n\n\nTSRandomTimeScale\n\n TSRandomTimeScale (magnitude=0.1, ex=None, mode='nearest', **kwargs)\n\nRandomly amplifies/ compresses a sequence on the x-axis keeping the same length\n\nif test_interpolate('nearest'):\n test_eq(TSRandomTimeScale(.5)(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSRandomTimeStep\n\n TSRandomTimeStep (magnitude=0.02, ex=None, mode='nearest', **kwargs)\n\nCompresses a sequence on the x-axis by randomly selecting sequence steps and interpolating to previous size\n\nif test_interpolate('nearest'):\n test_eq(TSRandomTimeStep()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSResampleSteps\n\n TSResampleSteps (step_pct=1.0, same_seq_len=True, magnitude=None,\n **kwargs)\n\nTransform that randomly selects and sorts sequence steps (with replacement) maintaining the sequence length\n\ntest_eq(TSResampleSteps(step_pct=.9, same_seq_len=False)(xb, split_idx=0).shape[-1], round(.9*xb.shape[-1]))\ntest_eq(TSResampleSteps(step_pct=.9, same_seq_len=True)(xb, split_idx=0).shape[-1], xb.shape[-1])\n\n\nsource\n\n\nTSBlur\n\n TSBlur (magnitude=1.0, ex=None, filt_len=None, **kwargs)\n\nBlurs a sequence applying a filter of type [1, 0, 1]\n\ntest_eq(TSBlur(filt_len=7)(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSBlur()(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSSmooth\n\n TSSmooth (magnitude=1.0, ex=None, filt_len=None, **kwargs)\n\nSmoothens a sequence applying a filter of type [1, 5, 1]\n\ntest_eq(TSSmooth(filt_len=7)(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSSmooth()(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSFreqDenoise\n\n TSFreqDenoise (magnitude=0.1, ex=None, wavelet='db4', level=2, thr=None,\n thr_mode='hard', pad_mode='per', **kwargs)\n\nDenoises a sequence applying a wavelet decomposition method\n\nsource\n\n\nmaddest\n\n maddest (d, axis=None)\n\n\ntry: import pywt\nexcept ImportError: pass\n\n\nif 'pywt' in dir():\n test_eq(TSFreqDenoise()(xb, split_idx=0).shape, xb.shape)\n test_ne(TSFreqDenoise()(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSRandomFreqNoise\n\n TSRandomFreqNoise (magnitude=0.1, ex=None, wavelet='db4', level=2,\n mode='constant', **kwargs)\n\nApplys random noise using a wavelet decomposition method\n\nif 'pywt' in dir():\n test_eq(TSRandomFreqNoise()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSRandomResizedLookBack\n\n TSRandomResizedLookBack (magnitude=0.1, mode='nearest', **kwargs)\n\nSelects a random number of sequence steps starting from the end and return an output of the same shape\n\nif test_interpolate('nearest'):\n for i in range(100):\n o = TSRandomResizedLookBack()(xb, split_idx=0)\n test_eq(o.shape[-1], xb.shape[-1])\n\n\nsource\n\n\nTSRandomLookBackOut\n\n TSRandomLookBackOut (magnitude=0.1, **kwargs)\n\nSelects a random number of sequence steps starting from the end and set them to zero\n\nfor i in range(100):\n o = TSRandomLookBackOut()(xb, split_idx=0)\n test_eq(o.shape[-1], xb.shape[-1])\n\n\nsource\n\n\nTSVarOut\n\n TSVarOut (magnitude=0.05, ex=None, **kwargs)\n\nSet the value of a random number of variables to zero\n\ntest_eq(TSVarOut()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSCutOut\n\n TSCutOut (magnitude=0.05, ex=None, **kwargs)\n\nSets a random section of the sequence to zero\n\ntest_eq(TSCutOut()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSTimeStepOut\n\n TSTimeStepOut (magnitude=0.05, ex=None, **kwargs)\n\nSets random sequence steps to zero\n\ntest_eq(TSTimeStepOut()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSRandomCropPad\n\n TSRandomCropPad (magnitude=0.05, ex=None, **kwargs)\n\nCrops a section of the sequence of a random length\n\ntest_eq(TSRandomCropPad()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSMaskOut\n\n TSMaskOut (magnitude=0.1, compensate:bool=False, ex=None, **kwargs)\n\nApplies a random mask\n\ntest_eq(TSMaskOut()(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSMaskOut()(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSInputDropout\n\n TSInputDropout (magnitude=0.0, ex=None, **kwargs)\n\nApplies input dropout with required_grad=False\n\ntest_eq(TSInputDropout(.1)(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSInputDropout(.1)(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSTranslateX\n\n TSTranslateX (magnitude=0.1, ex=None, **kwargs)\n\nMoves a selected sequence window a random number of steps\n\ntest_eq(TSTranslateX()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSRandomShift\n\n TSRandomShift (magnitude=0.02, ex=None, **kwargs)\n\nShifts and splits a sequence\n\ntest_eq(TSRandomShift()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSHorizontalFlip\n\n TSHorizontalFlip (magnitude=1.0, ex=None, **kwargs)\n\nFlips the sequence along the x-axis\n\ntest_eq(TSHorizontalFlip()(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSHorizontalFlip()(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSRandomTrend\n\n TSRandomTrend (magnitude=0.1, ex=None, **kwargs)\n\nRandomly rotates the sequence along the z-axis\n\ntest_eq(TSRandomTrend()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSVerticalFlip\n\n TSVerticalFlip (magnitude=1.0, ex=None, **kwargs)\n\nApplies a negative value to the time sequence\n\ntest_eq(TSVerticalFlip()(xb, split_idx=0).shape, xb.shape)\ntest_ne(TSVerticalFlip()(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSResize\n\n TSResize (magnitude=-0.5, size=None, ex=None, mode='nearest', **kwargs)\n\nResizes the sequence length of a time series\n\nif test_interpolate('nearest'):\n for sz in np.linspace(.2, 2, 10): test_eq(TSResize(sz)(xb, split_idx=0).shape[-1], int(round(xb.shape[-1]*(1+sz))))\n test_ne(TSResize(1)(xb, split_idx=0), xb)\n\n\nsource\n\n\nTSRandomSize\n\n TSRandomSize (magnitude=0.1, ex=None, mode='nearest', **kwargs)\n\nRandomly resizes the sequence length of a time series\n\nif test_interpolate('nearest'):\n seq_len_ = []\n for i in range(100):\n o = TSRandomSize(.5)(xb, split_idx=0)\n seq_len_.append(o.shape[-1])\n test_lt(min(seq_len_), xb.shape[-1])\n test_gt(max(seq_len_), xb.shape[-1])\n\n\nsource\n\n\nTSRandomLowRes\n\n TSRandomLowRes (magnitude=0.5, ex=None, mode='nearest', **kwargs)\n\nRandomly resizes the sequence length of a time series to a lower resolution\n\nsource\n\n\nTSDownUpScale\n\n TSDownUpScale (magnitude=0.5, ex=None, mode='nearest', **kwargs)\n\nDownscales a time series and upscales it again to previous sequence length\n\nif test_interpolate('nearest'):\n test_eq(TSDownUpScale()(xb, split_idx=0).shape, xb.shape)\n\n\nsource\n\n\nTSRandomDownUpScale\n\n TSRandomDownUpScale (magnitude=0.5, ex=None, mode='nearest', **kwargs)\n\nRandomly downscales a time series and upscales it again to previous sequence length\n\nif test_interpolate('nearest'):\n test_eq(TSRandomDownUpScale()(xb, split_idx=0).shape, xb.shape)\n test_ne(TSDownUpScale()(xb, split_idx=0), xb)\n test_eq(TSDownUpScale()(xb, split_idx=1), xb)\n\n\nsource\n\n\nTSRandomConv\n\n TSRandomConv (magnitude=0.05, ex=None, ks=[1, 3, 5, 7], **kwargs)\n\nApplies a convolution with a random kernel and random weights with required_grad=False\n\nfor i in range(5):\n o = TSRandomConv(magnitude=0.05, ex=None, ks=[1, 3, 5, 7])(xb, split_idx=0)\n test_eq(o.shape, xb.shape)\n\n\nsource\n\n\nTSRandom2Value\n\n TSRandom2Value (magnitude=0.1, sel_vars=None, sel_steps=None,\n static=False, value=nan, **kwargs)\n\nRandomly sets selected variables of type TSTensor to predefined value (default: np.nan)\n\nt = TSTensor(torch.ones(2, 3, 10))\nTSRandom2Value(magnitude=0.5, sel_vars=None, sel_steps=None, static=False, value=0)(t, split_idx=0).data\n\ntensor([[[0., 0., 1., 0., 1., 1., 0., 1., 1., 0.],\n [1., 1., 0., 1., 1., 1., 1., 1., 1., 0.],\n [1., 1., 1., 1., 1., 0., 0., 1., 1., 1.]],\n\n [[1., 1., 1., 1., 1., 0., 1., 1., 0., 1.],\n [0., 0., 0., 0., 0., 1., 0., 1., 0., 1.],\n [0., 1., 0., 1., 0., 0., 0., 1., 0., 0.]]])\n\n\n\nt = TSTensor(torch.ones(2, 3, 10))\nTSRandom2Value(magnitude=0.5, sel_vars=[1], sel_steps=slice(-5, None), static=False, value=0)(t, split_idx=0).data\n\ntensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1., 0., 1., 0., 0., 0.],\n [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]],\n\n [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1., 0., 1., 0., 0., 0.],\n [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]])\n\n\n\nt = TSTensor(torch.ones(2, 3, 10))\nTSRandom2Value(magnitude=0.5, sel_vars=[1], sel_steps=None, static=True, value=0)(t, split_idx=0).data\n\ntensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]],\n\n [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]])\n\n\n\nt = TSTensor(torch.ones(2, 3, 10))\nTSRandom2Value(magnitude=1, sel_vars=1, sel_steps=None, static=False, value=0)(t, split_idx=0).data\n\ntensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]],\n\n [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]])\n\n\n\nt = TSTensor(torch.ones(2, 3, 10))\nTSRandom2Value(magnitude=1, sel_vars=[1,2], sel_steps=None, static=False, value=0)(t, split_idx=0).data\n\ntensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]],\n\n [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]])\n\n\n\nt = TSTensor(torch.ones(2, 3, 10))\nTSRandom2Value(magnitude=1, sel_vars=1, sel_steps=[1,3,5], static=False, value=0)(t, split_idx=0).data\n\ntensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]],\n\n [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.],\n [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]]])\n\n\n\nt = TSTensor(torch.ones(2, 3, 10))\nTSRandom2Value(magnitude=1, sel_vars=[1,2], sel_steps=[1,3,5], static=False, value=0)(t, split_idx=0).data\n\ntensor([[[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.],\n [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.]],\n\n [[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],\n [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.],\n [1., 0., 1., 0., 1., 0., 1., 1., 1., 1.]]])\n\n\n\nt = TSTensor(torch.ones(2,3,4))\nTSRandom2Value(magnitude=.5, sel_vars=[0,2])(t, split_idx=0).data\n\ntensor([[[1., nan, nan, 1.],\n [1., 1., 1., 1.],\n [1., nan, 1., 1.]],\n\n [[nan, 1., 1., nan],\n [1., 1., 1., 1.],\n [nan, nan, 1., 1.]]])\n\n\n\nt = TSTensor(torch.ones(2,3,4))\nTSRandom2Value(magnitude=.5, sel_steps=slice(2, None))(t, split_idx=0).data\n\ntensor([[[1., 1., 1., nan],\n [1., 1., nan, 1.],\n [1., 1., nan, nan]],\n\n [[1., 1., nan, 1.],\n [1., 1., nan, nan],\n [1., 1., nan, 1.]]])\n\n\n\nt = TSTensor(torch.ones(2,3,100))\ntest_gt(np.isnan(TSRandom2Value(magnitude=.5)(t, split_idx=0)).sum().item(), 0)\nt = TSTensor(torch.ones(2,3,100))\ntest_gt(np.isnan(TSRandom2Value(magnitude=.5, sel_vars=[0,2])(t, split_idx=0)[:, [0,2]]).sum().item(), 0)\nt = TSTensor(torch.ones(2,3,100))\ntest_eq(np.isnan(TSRandom2Value(magnitude=.5, sel_vars=[0,2])(t, split_idx=0)[:, 1]).sum().item(), 0)\n\n\nsource\n\n\nTSMask2Value\n\n TSMask2Value (mask_fn, value=nan, sel_vars=None, **kwargs)\n\nRandomly sets selected variables of type TSTensor to predefined value (default: np.nan)\n\nt = TSTensor(torch.ones(2,3,100))\ndef _mask_fn(o, r=.15, value=np.nan):\n return torch.rand_like(o) > (1-r)\ntest_gt(np.isnan(TSMask2Value(_mask_fn)(t, split_idx=0)).sum().item(), 0)\n\n\nsource\n\n\nTSSelfDropout\n\n TSSelfDropout (p:float=1.0, nm:str=None, before_call:callable=None,\n **kwargs)\n\nApplies dropout to a tensor with nan values by rotating axis=0 inplace\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\np\nfloat\n1.0\nProbability of applying Transform\n\n\nnm\nstr\nNone\n\n\n\nbefore_call\ncallable\nNone\nOptional batchwise preprocessing function\n\n\nkwargs\n\n\n\n\n\n\n\nsource\n\n\nself_mask\n\n self_mask (o)\n\n\nt = TSTensor(torch.ones(2,3,100))\nmask = torch.rand_like(t) > .7\nt[mask] = np.nan\nnan_perc = np.isnan(t).float().mean().item()\nt2 = TSSelfDropout()(t, split_idx=0)\ntest_gt(torch.isnan(t2).float().mean().item(), nan_perc)\nnan_perc, torch.isnan(t2).float().mean().item()\n\n(0.30000001192092896, 0.49000000953674316)\n\n\n\nsource\n\n\nRandAugment\n\n RandAugment (tfms:list, N:int=1, M:int=3, **kwargs)\n\nA transform that before_call its state at each __call__\n\ntest_ne(RandAugment(TSMagAddNoise, N=5, M=10)(xb, split_idx=0), xb)\n\n\nsource\n\n\nTestTfm\n\n TestTfm (tfm, magnitude=1.0, ex=None, **kwargs)\n\nUtility class to test the output of selected tfms during training\n\nsource\n\n\nget_tfm_name\n\n get_tfm_name (tfm)\n\n\ntest_eq(get_tfm_name(partial(TSMagScale()))==get_tfm_name((partial(TSMagScale()), 0.1, .05))==get_tfm_name(TSMagScale())==get_tfm_name((TSMagScale(), 0.1, .05)), True)\n\n\nall_TS_randaugs_names = [get_tfm_name(t) for t in all_TS_randaugs]", + "crumbs": [ + "Data", + "Time Series Data Augmentation" + ] + }, + { + "objectID": "models.rnnattentionplus.html", + "href": "models.rnnattentionplus.html", + "title": "RNNAttentionPlus", + "section": "", + "text": "This is an custom PyTorch implementation by @yangtzech, based on TST implementation of Ignacio Oguiza." + }, + { + "objectID": "models.rnnattentionplus.html#arguments", + "href": "models.rnnattentionplus.html#arguments", + "title": "RNNAttentionPlus", + "section": "Arguments", + "text": "Arguments\nUsual values are the ones that appear in the “Attention is all you need” and “A Transformer-based Framework for Multivariate Time Series Representation Learning” papers. And some parameters are necessary for the RNN part.\nThe default values are the ones selected as a default configuration in the latter.\n\nc_in: the number of features (aka variables, dimensions, channels) in the time series dataset. dls.var\nc_out: the number of target classes. dls.c\nseq_len: number of time steps in the time series. dls.len\nhidden_size: the number of features in the hidden state in the RNN model. Default: 128.\nrnn_layers: the number of recurrent layers of the RNN model. Default: 1.\nbias: If False, then the layer does not use bias weights b_ih and b_hh. Default: True\nrnn_dropout: If non-zero, introduces a Dropout layer on the outputs of each RNN layer except the last layer, with dropout probability equal to :attr:rnn_dropout. Default: 0\nbidirectional: If True, becomes a bidirectional RNN. Default: False\nn_heads: parallel attention heads. Usual values: 8-16. Default: 16.\nd_k: size of the learned linear projection of queries and keys in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.\nd_v: size of the learned linear projection of values in the MHA. Usual values: 16-512. Default: None -> (d_model/n_heads) = 32.\nd_ff: the dimension of the feedforward network model. Usual values: 256-4096. Default: 256.\nencoder_dropout: amount of residual dropout applied in the encoder. Usual values: 0.-0.3. Default: 0.1.\nact: the activation function of intermediate layer, relu or gelu. Default: ‘gelu’.\nencoder_layers: the number of sub-encoder-layers in the encoder. Usual values: 2-8. Default: 3.\nfc_dropout: dropout applied to the final fully connected layer. Usual values: 0.-0.8. Default: 0.\ny_range: range of possible y values (used in regression tasks). Default: None" + }, + { + "objectID": "models.rnnattentionplus.html#imports", + "href": "models.rnnattentionplus.html#imports", + "title": "RNNAttentionPlus", + "section": "Imports", + "text": "Imports" + }, + { + "objectID": "models.rnnattentionplus.html#rnnattentionplus", + "href": "models.rnnattentionplus.html#rnnattentionplus", + "title": "RNNAttentionPlus", + "section": "RNNAttentionPlus", + "text": "RNNAttentionPlus\n\nt = torch.rand(16, 50, 128)\noutput, attn = _MultiHeadAttention(d_model=128, n_heads=3, d_k=8, d_v=6)(t, t, t)\noutput.shape, attn.shape\n\n(torch.Size([16, 50, 128]), torch.Size([16, 3, 50, 50]))\n\n\n\nt = torch.rand(16, 50, 128)\noutput = _TSTEncoderLayer(q_len=50, d_model=128, n_heads=3, d_k=None, d_v=None, d_ff=512, dropout=0.1, activation='gelu')(t)\noutput.shape\n\ntorch.Size([16, 50, 128])\n\n\n\nsource\n\nGRUAttentionPlus\n\n GRUAttentionPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,\n hidden_size:int=128, rnn_layers:int=1, bias:bool=True,\n rnn_dropout:float=0, bidirectional=False,\n encoder_layers:int=3, n_heads:int=16,\n d_k:Optional[int]=None, d_v:Optional[int]=None,\n d_ff:int=256, encoder_dropout:float=0.1,\n act:str='gelu', fc_dropout:float=0.0,\n y_range:Optional[tuple]=None, custom_head=None,\n use_bn:bool=True, flatten:bool=True)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\nthe number of features (aka variables, dimensions, channels) in the time series dataset.\n\n\nc_out\nint\n\nthe number of target classes.\n\n\nseq_len\nint\n\nnumber of time steps in the time series.\n\n\nd\ntuple\nNone\noutput shape (excluding batch dimension).\n\n\nhidden_size\nint\n128\nthe number of features in the hidden state h\n\n\nrnn_layers\nint\n1\nthe number of recurrent layers of the RNN model.\n\n\nbias\nbool\nTrue\nIf False, then the layer does not use bias weights b_ih and b_hh.\n\n\nrnn_dropout\nfloat\n0\nrnn dropout applied to the output of each RNN layer except the last layer.\n\n\nbidirectional\nbool\nFalse\nIf True, becomes a bidirectional RNN. Default: False\n\n\nencoder_layers\nint\n3\nthe number of sub-encoder-layers in the encoder.\n\n\nn_heads\nint\n16\nparallel attention heads.\n\n\nd_k\ntyping.Optional[int]\nNone\nsize of the learned linear projection of queries and keys in the MHA.\n\n\nd_v\ntyping.Optional[int]\nNone\nsize of the learned linear projection of values in the MHA.\n\n\nd_ff\nint\n256\nthe dimension of the feedforward network model.\n\n\nencoder_dropout\nfloat\n0.1\namount of residual dropout applied in the encoder.\n\n\nact\nstr\ngelu\nthe activation function of intermediate layer, relu or gelu.\n\n\nfc_dropout\nfloat\n0.0\ndropout applied to the final fully connected layer.\n\n\ny_range\ntyping.Optional[tuple]\nNone\nrange of possible y values (used in regression tasks).\n\n\ncustom_head\nNoneType\nNone\ncustom head that will be applied to the model head (optional).\n\n\nuse_bn\nbool\nTrue\nindicates if batchnorm will be applied to the model head.\n\n\nflatten\nbool\nTrue\nthis will flatten the output of the encoder before applying the head if True.\n\n\n\n\nsource\n\n\nLSTMAttentionPlus\n\n LSTMAttentionPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,\n hidden_size:int=128, rnn_layers:int=1, bias:bool=True,\n rnn_dropout:float=0, bidirectional=False,\n encoder_layers:int=3, n_heads:int=16,\n d_k:Optional[int]=None, d_v:Optional[int]=None,\n d_ff:int=256, encoder_dropout:float=0.1,\n act:str='gelu', fc_dropout:float=0.0,\n y_range:Optional[tuple]=None, custom_head=None,\n use_bn:bool=True, flatten:bool=True)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\nthe number of features (aka variables, dimensions, channels) in the time series dataset.\n\n\nc_out\nint\n\nthe number of target classes.\n\n\nseq_len\nint\n\nnumber of time steps in the time series.\n\n\nd\ntuple\nNone\noutput shape (excluding batch dimension).\n\n\nhidden_size\nint\n128\nthe number of features in the hidden state h\n\n\nrnn_layers\nint\n1\nthe number of recurrent layers of the RNN model.\n\n\nbias\nbool\nTrue\nIf False, then the layer does not use bias weights b_ih and b_hh.\n\n\nrnn_dropout\nfloat\n0\nrnn dropout applied to the output of each RNN layer except the last layer.\n\n\nbidirectional\nbool\nFalse\nIf True, becomes a bidirectional RNN. Default: False\n\n\nencoder_layers\nint\n3\nthe number of sub-encoder-layers in the encoder.\n\n\nn_heads\nint\n16\nparallel attention heads.\n\n\nd_k\ntyping.Optional[int]\nNone\nsize of the learned linear projection of queries and keys in the MHA.\n\n\nd_v\ntyping.Optional[int]\nNone\nsize of the learned linear projection of values in the MHA.\n\n\nd_ff\nint\n256\nthe dimension of the feedforward network model.\n\n\nencoder_dropout\nfloat\n0.1\namount of residual dropout applied in the encoder.\n\n\nact\nstr\ngelu\nthe activation function of intermediate layer, relu or gelu.\n\n\nfc_dropout\nfloat\n0.0\ndropout applied to the final fully connected layer.\n\n\ny_range\ntyping.Optional[tuple]\nNone\nrange of possible y values (used in regression tasks).\n\n\ncustom_head\nNoneType\nNone\ncustom head that will be applied to the model head (optional).\n\n\nuse_bn\nbool\nTrue\nindicates if batchnorm will be applied to the model head.\n\n\nflatten\nbool\nTrue\nthis will flatten the output of the encoder before applying the head if True.\n\n\n\n\nsource\n\n\nRNNAttentionPlus\n\n RNNAttentionPlus (c_in:int, c_out:int, seq_len:int, d:tuple=None,\n hidden_size:int=128, rnn_layers:int=1, bias:bool=True,\n rnn_dropout:float=0, bidirectional=False,\n encoder_layers:int=3, n_heads:int=16,\n d_k:Optional[int]=None, d_v:Optional[int]=None,\n d_ff:int=256, encoder_dropout:float=0.1,\n act:str='gelu', fc_dropout:float=0.0,\n y_range:Optional[tuple]=None, custom_head=None,\n use_bn:bool=True, flatten:bool=True)\n\nA sequential container.\nModules will be added to it in the order they are passed in the constructor. Alternatively, an OrderedDict of modules can be passed in. The forward() method of [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) accepts any input and forwards it to the first module it contains. It then “chains” outputs to inputs sequentially for each subsequent module, finally returning the output of the last module.\nThe value a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) applies to each of the modules it stores (which are each a registered submodule of the [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential)).\nWhat’s the difference between a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) and a :class:torch.nn.ModuleList? A ModuleList is exactly what it sounds like–a list for storing Module s! On the other hand, the layers in a [Sequential](https://timeseriesAI.github.io/models.layers.html#sequential) are connected in a cascading way.\nExample::\n# Using Sequential to create a small model. When `model` is run,\n# input will first be passed to `Conv2d(1,20,5)`. The output of\n# `Conv2d(1,20,5)` will be used as the input to the first\n# `ReLU`; the output of the first `ReLU` will become the input\n# for `Conv2d(20,64,5)`. Finally, the output of\n# `Conv2d(20,64,5)` will be used as input to the second `ReLU`\nmodel = nn.Sequential(\n nn.Conv2d(1,20,5),\n nn.ReLU(),\n nn.Conv2d(20,64,5),\n nn.ReLU()\n )\n\n# Using Sequential with OrderedDict. This is functionally the\n# same as the above code\nmodel = nn.Sequential(OrderedDict([\n ('conv1', nn.Conv2d(1,20,5)),\n ('relu1', nn.ReLU()),\n ('conv2', nn.Conv2d(20,64,5)),\n ('relu2', nn.ReLU())\n ]))\n\n\n\n\n\n\n\n\n\n\nType\nDefault\nDetails\n\n\n\n\nc_in\nint\n\nthe number of features (aka variables, dimensions, channels) in the time series dataset.\n\n\nc_out\nint\n\nthe number of target classes.\n\n\nseq_len\nint\n\nnumber of time steps in the time series.\n\n\nd\ntuple\nNone\noutput shape (excluding batch dimension).\n\n\nhidden_size\nint\n128\nthe number of features in the hidden state h\n\n\nrnn_layers\nint\n1\nthe number of recurrent layers of the RNN model.\n\n\nbias\nbool\nTrue\nIf False, then the layer does not use bias weights b_ih and b_hh.\n\n\nrnn_dropout\nfloat\n0\nrnn dropout applied to the output of each RNN layer except the last layer.\n\n\nbidirectional\nbool\nFalse\nIf True, becomes a bidirectional RNN. Default: False\n\n\nencoder_layers\nint\n3\nthe number of sub-encoder-layers in the encoder.\n\n\nn_heads\nint\n16\nparallel attention heads.\n\n\nd_k\ntyping.Optional[int]\nNone\nsize of the learned linear projection of queries and keys in the MHA.\n\n\nd_v\ntyping.Optional[int]\nNone\nsize of the learned linear projection of values in the MHA.\n\n\nd_ff\nint\n256\nthe dimension of the feedforward network model.\n\n\nencoder_dropout\nfloat\n0.1\namount of residual dropout applied in the encoder.\n\n\nact\nstr\ngelu\nthe activation function of intermediate layer, relu or gelu.\n\n\nfc_dropout\nfloat\n0.0\ndropout applied to the final fully connected layer.\n\n\ny_range\ntyping.Optional[tuple]\nNone\nrange of possible y values (used in regression tasks).\n\n\ncustom_head\nNoneType\nNone\ncustom head that will be applied to the model head (optional).\n\n\nuse_bn\nbool\nTrue\nindicates if batchnorm will be applied to the model head.\n\n\nflatten\nbool\nTrue\nthis will flatten the output of the encoder before applying the head if True.\n\n\n\n\nbs = 32\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 500\n\nxb = torch.randn(bs, c_in, seq_len)\n\n# standardize by channel by_var based on the training set\nxb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)\n\n# Settings\nhidden_size = 128\nrnn_layers=1\nbias=True\nrnn_dropout=0\nbidirectional=False\nencoder_layers=3\nn_heads = 16\nd_k = d_v = None # if None --> d_model // n_heads\nd_ff = 256\nencoder_dropout = 0.1\nact = \"gelu\"\nfc_dropout = 0.1\nkwargs = {}\n\nmodel = RNNAttentionPlus(c_in, c_out, seq_len, hidden_size=hidden_size, rnn_layers=rnn_layers, bias=bias, rnn_dropout=rnn_dropout, bidirectional=bidirectional,\n encoder_layers=encoder_layers, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, encoder_dropout=encoder_dropout, act=act, \n fc_dropout=fc_dropout, **kwargs)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 541698\n\n\n\nbs = 32\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 60\n\nxb = torch.randn(bs, c_in, seq_len)\n\n# standardize by channel by_var based on the training set\nxb = (xb - xb.mean((0, 2), keepdim=True)) / xb.std((0, 2), keepdim=True)\n\n# Settings\nhidden_size = 128\nrnn_layers=1\nbias=True\nrnn_dropout=0\nbidirectional=False\nencoder_layers=3\nn_heads = 16\nd_k = d_v = None # if None --> d_model // n_heads\nd_ff = 256\nencoder_dropout = 0.1\nact = \"gelu\"\nfc_dropout = 0.1\nkwargs = {}\n# kwargs = dict(kernel_size=5, padding=2)\n\nmodel = RNNAttentionPlus(c_in, c_out, seq_len, hidden_size=hidden_size, rnn_layers=rnn_layers, bias=bias, rnn_dropout=rnn_dropout, bidirectional=bidirectional,\n encoder_layers=encoder_layers, n_heads=n_heads,\n d_k=d_k, d_v=d_v, d_ff=d_ff, encoder_dropout=encoder_dropout, act=act, \n fc_dropout=fc_dropout, **kwargs)\ntest_eq(model.to(xb.device)(xb).shape, [bs, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 429058\n\n\n\nbs = 32\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 60\nd = 10\n\nxb = torch.randn(bs, c_in, seq_len)\nmodel = RNNAttentionPlus(c_in, c_out, seq_len, d=d)\ntest_eq(model.to(xb.device)(xb).shape, [bs, d, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 567572\n\n\n\nbs = 32\nc_in = 9 # aka channels, features, variables, dimensions\nc_out = 2\nseq_len = 60\nd = (3, 10)\n\nxb = torch.randn(bs, c_in, seq_len)\nmodel = RNNAttentionPlus(c_in, c_out, seq_len, d=d)\ntest_eq(model.to(xb.device)(xb).shape, [bs, *d, c_out])\nprint(f'model parameters: {count_parameters(model)}')\n\nmodel parameters: 874812" + } +] \ No newline at end of file diff --git a/site_libs/bootstrap/bootstrap-icons.css b/site_libs/bootstrap/bootstrap-icons.css new file mode 100644 index 000000000..285e4448f --- /dev/null +++ b/site_libs/bootstrap/bootstrap-icons.css @@ -0,0 +1,2078 @@ +/*! + * Bootstrap Icons v1.11.1 (https://icons.getbootstrap.com/) + * Copyright 2019-2023 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) + */ + +@font-face { + font-display: block; + font-family: "bootstrap-icons"; + src: +url("./bootstrap-icons.woff?2820a3852bdb9a5832199cc61cec4e65") format("woff"); +} + +.bi::before, +[class^="bi-"]::before, +[class*=" bi-"]::before { + display: inline-block; + font-family: bootstrap-icons !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: -.125em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bi-123::before { content: "\f67f"; } +.bi-alarm-fill::before { content: "\f101"; } +.bi-alarm::before { content: "\f102"; } +.bi-align-bottom::before { content: "\f103"; } +.bi-align-center::before { content: "\f104"; } +.bi-align-end::before { content: "\f105"; } +.bi-align-middle::before { content: "\f106"; } +.bi-align-start::before { content: "\f107"; } +.bi-align-top::before { content: "\f108"; } +.bi-alt::before { content: "\f109"; } +.bi-app-indicator::before { content: "\f10a"; } +.bi-app::before { content: "\f10b"; } +.bi-archive-fill::before { content: "\f10c"; } +.bi-archive::before { content: "\f10d"; } +.bi-arrow-90deg-down::before { content: "\f10e"; } +.bi-arrow-90deg-left::before { content: "\f10f"; } +.bi-arrow-90deg-right::before { content: "\f110"; } +.bi-arrow-90deg-up::before { content: "\f111"; } +.bi-arrow-bar-down::before { content: "\f112"; } +.bi-arrow-bar-left::before { content: "\f113"; } +.bi-arrow-bar-right::before { content: "\f114"; } +.bi-arrow-bar-up::before { content: "\f115"; } +.bi-arrow-clockwise::before { content: "\f116"; } +.bi-arrow-counterclockwise::before { content: "\f117"; } +.bi-arrow-down-circle-fill::before { content: "\f118"; } +.bi-arrow-down-circle::before { content: "\f119"; } +.bi-arrow-down-left-circle-fill::before { content: "\f11a"; } +.bi-arrow-down-left-circle::before { content: "\f11b"; } +.bi-arrow-down-left-square-fill::before { content: "\f11c"; } +.bi-arrow-down-left-square::before { content: "\f11d"; } +.bi-arrow-down-left::before { content: "\f11e"; } +.bi-arrow-down-right-circle-fill::before { content: "\f11f"; } +.bi-arrow-down-right-circle::before { content: "\f120"; } +.bi-arrow-down-right-square-fill::before { content: "\f121"; } +.bi-arrow-down-right-square::before { content: "\f122"; } +.bi-arrow-down-right::before { content: "\f123"; } +.bi-arrow-down-short::before { content: "\f124"; } +.bi-arrow-down-square-fill::before { content: "\f125"; } +.bi-arrow-down-square::before { content: "\f126"; } +.bi-arrow-down-up::before { content: "\f127"; } +.bi-arrow-down::before { content: "\f128"; } +.bi-arrow-left-circle-fill::before { content: "\f129"; } +.bi-arrow-left-circle::before { content: "\f12a"; } +.bi-arrow-left-right::before { content: "\f12b"; } +.bi-arrow-left-short::before { content: "\f12c"; } +.bi-arrow-left-square-fill::before { content: "\f12d"; } +.bi-arrow-left-square::before { content: "\f12e"; } +.bi-arrow-left::before { content: "\f12f"; } +.bi-arrow-repeat::before { content: "\f130"; } +.bi-arrow-return-left::before { content: "\f131"; } +.bi-arrow-return-right::before { content: "\f132"; } +.bi-arrow-right-circle-fill::before { content: "\f133"; } +.bi-arrow-right-circle::before { content: "\f134"; } +.bi-arrow-right-short::before { content: "\f135"; } +.bi-arrow-right-square-fill::before { content: "\f136"; } +.bi-arrow-right-square::before { content: "\f137"; } +.bi-arrow-right::before { content: "\f138"; } +.bi-arrow-up-circle-fill::before { content: "\f139"; } +.bi-arrow-up-circle::before { content: "\f13a"; } +.bi-arrow-up-left-circle-fill::before { content: "\f13b"; } +.bi-arrow-up-left-circle::before { content: "\f13c"; } +.bi-arrow-up-left-square-fill::before { content: "\f13d"; } +.bi-arrow-up-left-square::before { content: "\f13e"; } +.bi-arrow-up-left::before { content: "\f13f"; } +.bi-arrow-up-right-circle-fill::before { content: "\f140"; } +.bi-arrow-up-right-circle::before { content: "\f141"; } +.bi-arrow-up-right-square-fill::before { content: "\f142"; } +.bi-arrow-up-right-square::before { content: "\f143"; } +.bi-arrow-up-right::before { content: "\f144"; } +.bi-arrow-up-short::before { content: "\f145"; } +.bi-arrow-up-square-fill::before { content: "\f146"; } +.bi-arrow-up-square::before { content: "\f147"; } +.bi-arrow-up::before { content: "\f148"; } +.bi-arrows-angle-contract::before { content: "\f149"; } +.bi-arrows-angle-expand::before { content: "\f14a"; } +.bi-arrows-collapse::before { content: "\f14b"; } +.bi-arrows-expand::before { content: "\f14c"; } +.bi-arrows-fullscreen::before { content: "\f14d"; } +.bi-arrows-move::before { content: "\f14e"; } +.bi-aspect-ratio-fill::before { content: "\f14f"; } +.bi-aspect-ratio::before { content: "\f150"; } +.bi-asterisk::before { content: "\f151"; } +.bi-at::before { content: "\f152"; } +.bi-award-fill::before { content: "\f153"; } +.bi-award::before { content: "\f154"; } +.bi-back::before { content: "\f155"; } +.bi-backspace-fill::before { content: "\f156"; } +.bi-backspace-reverse-fill::before { content: "\f157"; } +.bi-backspace-reverse::before { content: "\f158"; } +.bi-backspace::before { content: "\f159"; } +.bi-badge-3d-fill::before { content: "\f15a"; } +.bi-badge-3d::before { content: "\f15b"; } +.bi-badge-4k-fill::before { content: "\f15c"; } +.bi-badge-4k::before { content: "\f15d"; } +.bi-badge-8k-fill::before { content: "\f15e"; } +.bi-badge-8k::before { content: "\f15f"; } +.bi-badge-ad-fill::before { content: "\f160"; } +.bi-badge-ad::before { content: "\f161"; } +.bi-badge-ar-fill::before { content: "\f162"; } +.bi-badge-ar::before { content: "\f163"; } +.bi-badge-cc-fill::before { content: "\f164"; } +.bi-badge-cc::before { content: "\f165"; } +.bi-badge-hd-fill::before { content: "\f166"; } +.bi-badge-hd::before { content: "\f167"; } +.bi-badge-tm-fill::before { content: "\f168"; } +.bi-badge-tm::before { content: "\f169"; } +.bi-badge-vo-fill::before { content: "\f16a"; } +.bi-badge-vo::before { content: "\f16b"; } +.bi-badge-vr-fill::before { content: "\f16c"; } +.bi-badge-vr::before { content: "\f16d"; } +.bi-badge-wc-fill::before { content: "\f16e"; } +.bi-badge-wc::before { content: "\f16f"; } +.bi-bag-check-fill::before { content: "\f170"; } +.bi-bag-check::before { content: "\f171"; } +.bi-bag-dash-fill::before { content: "\f172"; } +.bi-bag-dash::before { content: "\f173"; } +.bi-bag-fill::before { content: "\f174"; } +.bi-bag-plus-fill::before { content: "\f175"; } +.bi-bag-plus::before { content: "\f176"; } +.bi-bag-x-fill::before { content: "\f177"; } +.bi-bag-x::before { content: "\f178"; } +.bi-bag::before { content: "\f179"; } +.bi-bar-chart-fill::before { content: "\f17a"; } +.bi-bar-chart-line-fill::before { content: "\f17b"; } +.bi-bar-chart-line::before { content: "\f17c"; } +.bi-bar-chart-steps::before { content: "\f17d"; } +.bi-bar-chart::before { content: "\f17e"; } +.bi-basket-fill::before { content: "\f17f"; } +.bi-basket::before { content: "\f180"; } +.bi-basket2-fill::before { content: "\f181"; } +.bi-basket2::before { content: "\f182"; } +.bi-basket3-fill::before { content: "\f183"; } +.bi-basket3::before { content: "\f184"; } +.bi-battery-charging::before { content: "\f185"; } +.bi-battery-full::before { content: "\f186"; } +.bi-battery-half::before { content: "\f187"; } +.bi-battery::before { content: "\f188"; } +.bi-bell-fill::before { content: "\f189"; } +.bi-bell::before { content: "\f18a"; } +.bi-bezier::before { content: "\f18b"; } +.bi-bezier2::before { content: "\f18c"; } +.bi-bicycle::before { content: "\f18d"; } +.bi-binoculars-fill::before { content: "\f18e"; } +.bi-binoculars::before { content: "\f18f"; } +.bi-blockquote-left::before { content: "\f190"; } +.bi-blockquote-right::before { content: "\f191"; } +.bi-book-fill::before { content: "\f192"; } +.bi-book-half::before { content: "\f193"; } +.bi-book::before { content: "\f194"; } +.bi-bookmark-check-fill::before { content: "\f195"; } +.bi-bookmark-check::before { content: "\f196"; } +.bi-bookmark-dash-fill::before { content: "\f197"; } +.bi-bookmark-dash::before { content: "\f198"; } +.bi-bookmark-fill::before { content: "\f199"; } +.bi-bookmark-heart-fill::before { content: "\f19a"; } +.bi-bookmark-heart::before { content: "\f19b"; } +.bi-bookmark-plus-fill::before { content: "\f19c"; } +.bi-bookmark-plus::before { content: "\f19d"; } +.bi-bookmark-star-fill::before { content: "\f19e"; } +.bi-bookmark-star::before { content: "\f19f"; } +.bi-bookmark-x-fill::before { content: "\f1a0"; } +.bi-bookmark-x::before { content: "\f1a1"; } +.bi-bookmark::before { content: "\f1a2"; } +.bi-bookmarks-fill::before { content: "\f1a3"; } +.bi-bookmarks::before { content: "\f1a4"; } +.bi-bookshelf::before { content: "\f1a5"; } +.bi-bootstrap-fill::before { content: "\f1a6"; } +.bi-bootstrap-reboot::before { content: "\f1a7"; } +.bi-bootstrap::before { content: "\f1a8"; } +.bi-border-all::before { content: "\f1a9"; } +.bi-border-bottom::before { content: "\f1aa"; } +.bi-border-center::before { content: "\f1ab"; } +.bi-border-inner::before { content: "\f1ac"; } +.bi-border-left::before { content: "\f1ad"; } +.bi-border-middle::before { content: "\f1ae"; } +.bi-border-outer::before { content: "\f1af"; } +.bi-border-right::before { content: "\f1b0"; } +.bi-border-style::before { content: "\f1b1"; } +.bi-border-top::before { content: "\f1b2"; } +.bi-border-width::before { content: "\f1b3"; } +.bi-border::before { content: "\f1b4"; } +.bi-bounding-box-circles::before { content: "\f1b5"; } +.bi-bounding-box::before { content: "\f1b6"; } +.bi-box-arrow-down-left::before { content: "\f1b7"; } +.bi-box-arrow-down-right::before { content: "\f1b8"; } +.bi-box-arrow-down::before { content: "\f1b9"; } +.bi-box-arrow-in-down-left::before { content: "\f1ba"; } +.bi-box-arrow-in-down-right::before { content: "\f1bb"; } +.bi-box-arrow-in-down::before { content: "\f1bc"; } +.bi-box-arrow-in-left::before { content: "\f1bd"; } +.bi-box-arrow-in-right::before { content: "\f1be"; } +.bi-box-arrow-in-up-left::before { content: "\f1bf"; } +.bi-box-arrow-in-up-right::before { content: "\f1c0"; } +.bi-box-arrow-in-up::before { content: "\f1c1"; } +.bi-box-arrow-left::before { content: "\f1c2"; } +.bi-box-arrow-right::before { content: "\f1c3"; } +.bi-box-arrow-up-left::before { content: "\f1c4"; } +.bi-box-arrow-up-right::before { content: "\f1c5"; } +.bi-box-arrow-up::before { content: "\f1c6"; } +.bi-box-seam::before { content: "\f1c7"; } +.bi-box::before { content: "\f1c8"; } +.bi-braces::before { content: "\f1c9"; } +.bi-bricks::before { content: "\f1ca"; } +.bi-briefcase-fill::before { content: "\f1cb"; } +.bi-briefcase::before { content: "\f1cc"; } +.bi-brightness-alt-high-fill::before { content: "\f1cd"; } +.bi-brightness-alt-high::before { content: "\f1ce"; } +.bi-brightness-alt-low-fill::before { content: "\f1cf"; } +.bi-brightness-alt-low::before { content: "\f1d0"; } +.bi-brightness-high-fill::before { content: "\f1d1"; } +.bi-brightness-high::before { content: "\f1d2"; } +.bi-brightness-low-fill::before { content: "\f1d3"; } +.bi-brightness-low::before { content: "\f1d4"; } +.bi-broadcast-pin::before { content: "\f1d5"; } +.bi-broadcast::before { content: "\f1d6"; } +.bi-brush-fill::before { content: "\f1d7"; } +.bi-brush::before { content: "\f1d8"; } +.bi-bucket-fill::before { content: "\f1d9"; } +.bi-bucket::before { content: "\f1da"; } +.bi-bug-fill::before { content: "\f1db"; } +.bi-bug::before { content: "\f1dc"; } +.bi-building::before { content: "\f1dd"; } +.bi-bullseye::before { content: "\f1de"; } +.bi-calculator-fill::before { content: "\f1df"; } +.bi-calculator::before { content: "\f1e0"; } +.bi-calendar-check-fill::before { content: "\f1e1"; } +.bi-calendar-check::before { content: "\f1e2"; } +.bi-calendar-date-fill::before { content: "\f1e3"; } +.bi-calendar-date::before { content: "\f1e4"; } +.bi-calendar-day-fill::before { content: "\f1e5"; } +.bi-calendar-day::before { content: "\f1e6"; } +.bi-calendar-event-fill::before { content: "\f1e7"; } +.bi-calendar-event::before { content: "\f1e8"; } +.bi-calendar-fill::before { content: "\f1e9"; } +.bi-calendar-minus-fill::before { content: "\f1ea"; } +.bi-calendar-minus::before { content: "\f1eb"; } +.bi-calendar-month-fill::before { content: "\f1ec"; } +.bi-calendar-month::before { content: "\f1ed"; } +.bi-calendar-plus-fill::before { content: "\f1ee"; } +.bi-calendar-plus::before { content: "\f1ef"; } +.bi-calendar-range-fill::before { content: "\f1f0"; } +.bi-calendar-range::before { content: "\f1f1"; } +.bi-calendar-week-fill::before { content: "\f1f2"; } +.bi-calendar-week::before { content: "\f1f3"; } +.bi-calendar-x-fill::before { content: "\f1f4"; } +.bi-calendar-x::before { content: "\f1f5"; } +.bi-calendar::before { content: "\f1f6"; } +.bi-calendar2-check-fill::before { content: "\f1f7"; } +.bi-calendar2-check::before { content: "\f1f8"; } +.bi-calendar2-date-fill::before { content: "\f1f9"; } +.bi-calendar2-date::before { content: "\f1fa"; } +.bi-calendar2-day-fill::before { content: "\f1fb"; } +.bi-calendar2-day::before { content: "\f1fc"; } +.bi-calendar2-event-fill::before { content: "\f1fd"; } +.bi-calendar2-event::before { content: "\f1fe"; } +.bi-calendar2-fill::before { content: "\f1ff"; } +.bi-calendar2-minus-fill::before { content: "\f200"; } +.bi-calendar2-minus::before { content: "\f201"; } +.bi-calendar2-month-fill::before { content: "\f202"; } +.bi-calendar2-month::before { content: "\f203"; } +.bi-calendar2-plus-fill::before { content: "\f204"; } +.bi-calendar2-plus::before { content: "\f205"; } +.bi-calendar2-range-fill::before { content: "\f206"; } +.bi-calendar2-range::before { content: "\f207"; } +.bi-calendar2-week-fill::before { content: "\f208"; } +.bi-calendar2-week::before { content: "\f209"; } +.bi-calendar2-x-fill::before { content: "\f20a"; } +.bi-calendar2-x::before { content: "\f20b"; } +.bi-calendar2::before { content: "\f20c"; } +.bi-calendar3-event-fill::before { content: "\f20d"; } +.bi-calendar3-event::before { content: "\f20e"; } +.bi-calendar3-fill::before { content: "\f20f"; } +.bi-calendar3-range-fill::before { content: "\f210"; } +.bi-calendar3-range::before { content: "\f211"; } +.bi-calendar3-week-fill::before { content: "\f212"; } +.bi-calendar3-week::before { content: "\f213"; } +.bi-calendar3::before { content: "\f214"; } +.bi-calendar4-event::before { content: "\f215"; } +.bi-calendar4-range::before { content: "\f216"; } +.bi-calendar4-week::before { content: "\f217"; } +.bi-calendar4::before { content: "\f218"; } +.bi-camera-fill::before { content: "\f219"; } +.bi-camera-reels-fill::before { content: "\f21a"; } +.bi-camera-reels::before { content: "\f21b"; } +.bi-camera-video-fill::before { content: "\f21c"; } +.bi-camera-video-off-fill::before { content: "\f21d"; } +.bi-camera-video-off::before { content: "\f21e"; } +.bi-camera-video::before { content: "\f21f"; } +.bi-camera::before { content: "\f220"; } +.bi-camera2::before { content: "\f221"; } +.bi-capslock-fill::before { content: "\f222"; } +.bi-capslock::before { content: "\f223"; } +.bi-card-checklist::before { content: "\f224"; } +.bi-card-heading::before { content: "\f225"; } +.bi-card-image::before { content: "\f226"; } +.bi-card-list::before { content: "\f227"; } +.bi-card-text::before { content: "\f228"; } +.bi-caret-down-fill::before { content: "\f229"; } +.bi-caret-down-square-fill::before { content: "\f22a"; } +.bi-caret-down-square::before { content: "\f22b"; } +.bi-caret-down::before { content: "\f22c"; } +.bi-caret-left-fill::before { content: "\f22d"; } +.bi-caret-left-square-fill::before { content: "\f22e"; } +.bi-caret-left-square::before { content: "\f22f"; } +.bi-caret-left::before { content: "\f230"; } +.bi-caret-right-fill::before { content: "\f231"; } +.bi-caret-right-square-fill::before { content: "\f232"; } +.bi-caret-right-square::before { content: "\f233"; } +.bi-caret-right::before { content: "\f234"; } +.bi-caret-up-fill::before { content: "\f235"; } +.bi-caret-up-square-fill::before { content: "\f236"; } +.bi-caret-up-square::before { content: "\f237"; } +.bi-caret-up::before { content: "\f238"; } +.bi-cart-check-fill::before { content: "\f239"; } +.bi-cart-check::before { content: "\f23a"; } +.bi-cart-dash-fill::before { content: "\f23b"; } +.bi-cart-dash::before { content: "\f23c"; } +.bi-cart-fill::before { content: "\f23d"; } +.bi-cart-plus-fill::before { content: "\f23e"; } +.bi-cart-plus::before { content: "\f23f"; } +.bi-cart-x-fill::before { content: "\f240"; } +.bi-cart-x::before { content: "\f241"; } +.bi-cart::before { content: "\f242"; } +.bi-cart2::before { content: "\f243"; } +.bi-cart3::before { content: "\f244"; } +.bi-cart4::before { content: "\f245"; } +.bi-cash-stack::before { content: "\f246"; } +.bi-cash::before { content: "\f247"; } +.bi-cast::before { content: "\f248"; } +.bi-chat-dots-fill::before { content: "\f249"; } +.bi-chat-dots::before { content: "\f24a"; } +.bi-chat-fill::before { content: "\f24b"; } +.bi-chat-left-dots-fill::before { content: "\f24c"; } +.bi-chat-left-dots::before { content: "\f24d"; } +.bi-chat-left-fill::before { content: "\f24e"; } +.bi-chat-left-quote-fill::before { content: "\f24f"; } +.bi-chat-left-quote::before { content: "\f250"; } +.bi-chat-left-text-fill::before { content: "\f251"; } +.bi-chat-left-text::before { content: "\f252"; } +.bi-chat-left::before { content: "\f253"; } +.bi-chat-quote-fill::before { content: "\f254"; } +.bi-chat-quote::before { content: "\f255"; } +.bi-chat-right-dots-fill::before { content: "\f256"; } +.bi-chat-right-dots::before { content: "\f257"; } +.bi-chat-right-fill::before { content: "\f258"; } +.bi-chat-right-quote-fill::before { content: "\f259"; } +.bi-chat-right-quote::before { content: "\f25a"; } +.bi-chat-right-text-fill::before { content: "\f25b"; } +.bi-chat-right-text::before { content: "\f25c"; } +.bi-chat-right::before { content: "\f25d"; } +.bi-chat-square-dots-fill::before { content: "\f25e"; } +.bi-chat-square-dots::before { content: "\f25f"; } +.bi-chat-square-fill::before { content: "\f260"; } +.bi-chat-square-quote-fill::before { content: "\f261"; } +.bi-chat-square-quote::before { content: "\f262"; } +.bi-chat-square-text-fill::before { content: "\f263"; } +.bi-chat-square-text::before { content: "\f264"; } +.bi-chat-square::before { content: "\f265"; } +.bi-chat-text-fill::before { content: "\f266"; } +.bi-chat-text::before { content: "\f267"; } +.bi-chat::before { content: "\f268"; } +.bi-check-all::before { content: "\f269"; } +.bi-check-circle-fill::before { content: "\f26a"; } +.bi-check-circle::before { content: "\f26b"; } +.bi-check-square-fill::before { content: "\f26c"; } +.bi-check-square::before { content: "\f26d"; } +.bi-check::before { content: "\f26e"; } +.bi-check2-all::before { content: "\f26f"; } +.bi-check2-circle::before { content: "\f270"; } +.bi-check2-square::before { content: "\f271"; } +.bi-check2::before { content: "\f272"; } +.bi-chevron-bar-contract::before { content: "\f273"; } +.bi-chevron-bar-down::before { content: "\f274"; } +.bi-chevron-bar-expand::before { content: "\f275"; } +.bi-chevron-bar-left::before { content: "\f276"; } +.bi-chevron-bar-right::before { content: "\f277"; } +.bi-chevron-bar-up::before { content: "\f278"; } +.bi-chevron-compact-down::before { content: "\f279"; } +.bi-chevron-compact-left::before { content: "\f27a"; } +.bi-chevron-compact-right::before { content: "\f27b"; } +.bi-chevron-compact-up::before { content: "\f27c"; } +.bi-chevron-contract::before { content: "\f27d"; } +.bi-chevron-double-down::before { content: "\f27e"; } +.bi-chevron-double-left::before { content: "\f27f"; } +.bi-chevron-double-right::before { content: "\f280"; } +.bi-chevron-double-up::before { content: "\f281"; } +.bi-chevron-down::before { content: "\f282"; } +.bi-chevron-expand::before { content: "\f283"; } +.bi-chevron-left::before { content: "\f284"; } +.bi-chevron-right::before { content: "\f285"; } +.bi-chevron-up::before { content: "\f286"; } +.bi-circle-fill::before { content: "\f287"; } +.bi-circle-half::before { content: "\f288"; } +.bi-circle-square::before { content: "\f289"; } +.bi-circle::before { content: "\f28a"; } +.bi-clipboard-check::before { content: "\f28b"; } +.bi-clipboard-data::before { content: "\f28c"; } +.bi-clipboard-minus::before { content: "\f28d"; } +.bi-clipboard-plus::before { content: "\f28e"; } +.bi-clipboard-x::before { content: "\f28f"; } +.bi-clipboard::before { content: "\f290"; } +.bi-clock-fill::before { content: "\f291"; } +.bi-clock-history::before { content: "\f292"; } +.bi-clock::before { content: "\f293"; } +.bi-cloud-arrow-down-fill::before { content: "\f294"; } +.bi-cloud-arrow-down::before { content: "\f295"; } +.bi-cloud-arrow-up-fill::before { content: "\f296"; } +.bi-cloud-arrow-up::before { content: "\f297"; } +.bi-cloud-check-fill::before { content: "\f298"; } +.bi-cloud-check::before { content: "\f299"; } +.bi-cloud-download-fill::before { content: "\f29a"; } +.bi-cloud-download::before { content: "\f29b"; } +.bi-cloud-drizzle-fill::before { content: "\f29c"; } +.bi-cloud-drizzle::before { content: "\f29d"; } +.bi-cloud-fill::before { content: "\f29e"; } +.bi-cloud-fog-fill::before { content: "\f29f"; } +.bi-cloud-fog::before { content: "\f2a0"; } +.bi-cloud-fog2-fill::before { content: "\f2a1"; } +.bi-cloud-fog2::before { content: "\f2a2"; } +.bi-cloud-hail-fill::before { content: "\f2a3"; } +.bi-cloud-hail::before { content: "\f2a4"; } +.bi-cloud-haze-fill::before { content: "\f2a6"; } +.bi-cloud-haze::before { content: "\f2a7"; } +.bi-cloud-haze2-fill::before { content: "\f2a8"; } +.bi-cloud-lightning-fill::before { content: "\f2a9"; } +.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } +.bi-cloud-lightning-rain::before { content: "\f2ab"; } +.bi-cloud-lightning::before { content: "\f2ac"; } +.bi-cloud-minus-fill::before { content: "\f2ad"; } +.bi-cloud-minus::before { content: "\f2ae"; } +.bi-cloud-moon-fill::before { content: "\f2af"; } +.bi-cloud-moon::before { content: "\f2b0"; } +.bi-cloud-plus-fill::before { content: "\f2b1"; } +.bi-cloud-plus::before { content: "\f2b2"; } +.bi-cloud-rain-fill::before { content: "\f2b3"; } +.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } +.bi-cloud-rain-heavy::before { content: "\f2b5"; } +.bi-cloud-rain::before { content: "\f2b6"; } +.bi-cloud-slash-fill::before { content: "\f2b7"; } +.bi-cloud-slash::before { content: "\f2b8"; } +.bi-cloud-sleet-fill::before { content: "\f2b9"; } +.bi-cloud-sleet::before { content: "\f2ba"; } +.bi-cloud-snow-fill::before { content: "\f2bb"; } +.bi-cloud-snow::before { content: "\f2bc"; } +.bi-cloud-sun-fill::before { content: "\f2bd"; } +.bi-cloud-sun::before { content: "\f2be"; } +.bi-cloud-upload-fill::before { content: "\f2bf"; } +.bi-cloud-upload::before { content: "\f2c0"; } +.bi-cloud::before { content: "\f2c1"; } +.bi-clouds-fill::before { content: "\f2c2"; } +.bi-clouds::before { content: "\f2c3"; } +.bi-cloudy-fill::before { content: "\f2c4"; } +.bi-cloudy::before { content: "\f2c5"; } +.bi-code-slash::before { content: "\f2c6"; } +.bi-code-square::before { content: "\f2c7"; } +.bi-code::before { content: "\f2c8"; } +.bi-collection-fill::before { content: "\f2c9"; } +.bi-collection-play-fill::before { content: "\f2ca"; } +.bi-collection-play::before { content: "\f2cb"; } +.bi-collection::before { content: "\f2cc"; } +.bi-columns-gap::before { content: "\f2cd"; } +.bi-columns::before { content: "\f2ce"; } +.bi-command::before { content: "\f2cf"; } +.bi-compass-fill::before { content: "\f2d0"; } +.bi-compass::before { content: "\f2d1"; } +.bi-cone-striped::before { content: "\f2d2"; } +.bi-cone::before { content: "\f2d3"; } +.bi-controller::before { content: "\f2d4"; } +.bi-cpu-fill::before { content: "\f2d5"; } +.bi-cpu::before { content: "\f2d6"; } +.bi-credit-card-2-back-fill::before { content: "\f2d7"; } +.bi-credit-card-2-back::before { content: "\f2d8"; } +.bi-credit-card-2-front-fill::before { content: "\f2d9"; } +.bi-credit-card-2-front::before { content: "\f2da"; } +.bi-credit-card-fill::before { content: "\f2db"; } +.bi-credit-card::before { content: "\f2dc"; } +.bi-crop::before { content: "\f2dd"; } +.bi-cup-fill::before { content: "\f2de"; } +.bi-cup-straw::before { content: "\f2df"; } +.bi-cup::before { content: "\f2e0"; } +.bi-cursor-fill::before { content: "\f2e1"; } +.bi-cursor-text::before { content: "\f2e2"; } +.bi-cursor::before { content: "\f2e3"; } +.bi-dash-circle-dotted::before { content: "\f2e4"; } +.bi-dash-circle-fill::before { content: "\f2e5"; } +.bi-dash-circle::before { content: "\f2e6"; } +.bi-dash-square-dotted::before { content: "\f2e7"; } +.bi-dash-square-fill::before { content: "\f2e8"; } +.bi-dash-square::before { content: "\f2e9"; } +.bi-dash::before { content: "\f2ea"; } +.bi-diagram-2-fill::before { content: "\f2eb"; } +.bi-diagram-2::before { content: "\f2ec"; } +.bi-diagram-3-fill::before { content: "\f2ed"; } +.bi-diagram-3::before { content: "\f2ee"; } +.bi-diamond-fill::before { content: "\f2ef"; } +.bi-diamond-half::before { content: "\f2f0"; } +.bi-diamond::before { content: "\f2f1"; } +.bi-dice-1-fill::before { content: "\f2f2"; } +.bi-dice-1::before { content: "\f2f3"; } +.bi-dice-2-fill::before { content: "\f2f4"; } +.bi-dice-2::before { content: "\f2f5"; } +.bi-dice-3-fill::before { content: "\f2f6"; } +.bi-dice-3::before { content: "\f2f7"; } +.bi-dice-4-fill::before { content: "\f2f8"; } +.bi-dice-4::before { content: "\f2f9"; } +.bi-dice-5-fill::before { content: "\f2fa"; } +.bi-dice-5::before { content: "\f2fb"; } +.bi-dice-6-fill::before { content: "\f2fc"; } +.bi-dice-6::before { content: "\f2fd"; } +.bi-disc-fill::before { content: "\f2fe"; } +.bi-disc::before { content: "\f2ff"; } +.bi-discord::before { content: "\f300"; } +.bi-display-fill::before { content: "\f301"; } +.bi-display::before { content: "\f302"; } +.bi-distribute-horizontal::before { content: "\f303"; } +.bi-distribute-vertical::before { content: "\f304"; } +.bi-door-closed-fill::before { content: "\f305"; } +.bi-door-closed::before { content: "\f306"; } +.bi-door-open-fill::before { content: "\f307"; } +.bi-door-open::before { content: "\f308"; } +.bi-dot::before { content: "\f309"; } +.bi-download::before { content: "\f30a"; } +.bi-droplet-fill::before { content: "\f30b"; } +.bi-droplet-half::before { content: "\f30c"; } +.bi-droplet::before { content: "\f30d"; } +.bi-earbuds::before { content: "\f30e"; } +.bi-easel-fill::before { content: "\f30f"; } +.bi-easel::before { content: "\f310"; } +.bi-egg-fill::before { content: "\f311"; } +.bi-egg-fried::before { content: "\f312"; } +.bi-egg::before { content: "\f313"; } +.bi-eject-fill::before { content: "\f314"; } +.bi-eject::before { content: "\f315"; } +.bi-emoji-angry-fill::before { content: "\f316"; } +.bi-emoji-angry::before { content: "\f317"; } +.bi-emoji-dizzy-fill::before { content: "\f318"; } +.bi-emoji-dizzy::before { content: "\f319"; } +.bi-emoji-expressionless-fill::before { content: "\f31a"; } +.bi-emoji-expressionless::before { content: "\f31b"; } +.bi-emoji-frown-fill::before { content: "\f31c"; } +.bi-emoji-frown::before { content: "\f31d"; } +.bi-emoji-heart-eyes-fill::before { content: "\f31e"; } +.bi-emoji-heart-eyes::before { content: "\f31f"; } +.bi-emoji-laughing-fill::before { content: "\f320"; } +.bi-emoji-laughing::before { content: "\f321"; } +.bi-emoji-neutral-fill::before { content: "\f322"; } +.bi-emoji-neutral::before { content: "\f323"; } +.bi-emoji-smile-fill::before { content: "\f324"; } +.bi-emoji-smile-upside-down-fill::before { content: "\f325"; } +.bi-emoji-smile-upside-down::before { content: "\f326"; } +.bi-emoji-smile::before { content: "\f327"; } +.bi-emoji-sunglasses-fill::before { content: "\f328"; } +.bi-emoji-sunglasses::before { content: "\f329"; } +.bi-emoji-wink-fill::before { content: "\f32a"; } +.bi-emoji-wink::before { content: "\f32b"; } +.bi-envelope-fill::before { content: "\f32c"; } +.bi-envelope-open-fill::before { content: "\f32d"; } +.bi-envelope-open::before { content: "\f32e"; } +.bi-envelope::before { content: "\f32f"; } +.bi-eraser-fill::before { content: "\f330"; } +.bi-eraser::before { content: "\f331"; } +.bi-exclamation-circle-fill::before { content: "\f332"; } +.bi-exclamation-circle::before { content: "\f333"; } +.bi-exclamation-diamond-fill::before { content: "\f334"; } +.bi-exclamation-diamond::before { content: "\f335"; } +.bi-exclamation-octagon-fill::before { content: "\f336"; } +.bi-exclamation-octagon::before { content: "\f337"; } +.bi-exclamation-square-fill::before { content: "\f338"; } +.bi-exclamation-square::before { content: "\f339"; } +.bi-exclamation-triangle-fill::before { content: "\f33a"; } +.bi-exclamation-triangle::before { content: "\f33b"; } +.bi-exclamation::before { content: "\f33c"; } +.bi-exclude::before { content: "\f33d"; } +.bi-eye-fill::before { content: "\f33e"; } +.bi-eye-slash-fill::before { content: "\f33f"; } +.bi-eye-slash::before { content: "\f340"; } +.bi-eye::before { content: "\f341"; } +.bi-eyedropper::before { content: "\f342"; } +.bi-eyeglasses::before { content: "\f343"; } +.bi-facebook::before { content: "\f344"; } +.bi-file-arrow-down-fill::before { content: "\f345"; } +.bi-file-arrow-down::before { content: "\f346"; } +.bi-file-arrow-up-fill::before { content: "\f347"; } +.bi-file-arrow-up::before { content: "\f348"; } +.bi-file-bar-graph-fill::before { content: "\f349"; } +.bi-file-bar-graph::before { content: "\f34a"; } +.bi-file-binary-fill::before { content: "\f34b"; } +.bi-file-binary::before { content: "\f34c"; } +.bi-file-break-fill::before { content: "\f34d"; } +.bi-file-break::before { content: "\f34e"; } +.bi-file-check-fill::before { content: "\f34f"; } +.bi-file-check::before { content: "\f350"; } +.bi-file-code-fill::before { content: "\f351"; } +.bi-file-code::before { content: "\f352"; } +.bi-file-diff-fill::before { content: "\f353"; } +.bi-file-diff::before { content: "\f354"; } +.bi-file-earmark-arrow-down-fill::before { content: "\f355"; } +.bi-file-earmark-arrow-down::before { content: "\f356"; } +.bi-file-earmark-arrow-up-fill::before { content: "\f357"; } +.bi-file-earmark-arrow-up::before { content: "\f358"; } +.bi-file-earmark-bar-graph-fill::before { content: "\f359"; } +.bi-file-earmark-bar-graph::before { content: "\f35a"; } +.bi-file-earmark-binary-fill::before { content: "\f35b"; } +.bi-file-earmark-binary::before { content: "\f35c"; } +.bi-file-earmark-break-fill::before { content: "\f35d"; } +.bi-file-earmark-break::before { content: "\f35e"; } +.bi-file-earmark-check-fill::before { content: "\f35f"; } +.bi-file-earmark-check::before { content: "\f360"; } +.bi-file-earmark-code-fill::before { content: "\f361"; } +.bi-file-earmark-code::before { content: "\f362"; } +.bi-file-earmark-diff-fill::before { content: "\f363"; } +.bi-file-earmark-diff::before { content: "\f364"; } +.bi-file-earmark-easel-fill::before { content: "\f365"; } +.bi-file-earmark-easel::before { content: "\f366"; } +.bi-file-earmark-excel-fill::before { content: "\f367"; } +.bi-file-earmark-excel::before { content: "\f368"; } +.bi-file-earmark-fill::before { content: "\f369"; } +.bi-file-earmark-font-fill::before { content: "\f36a"; } +.bi-file-earmark-font::before { content: "\f36b"; } +.bi-file-earmark-image-fill::before { content: "\f36c"; } +.bi-file-earmark-image::before { content: "\f36d"; } +.bi-file-earmark-lock-fill::before { content: "\f36e"; } +.bi-file-earmark-lock::before { content: "\f36f"; } +.bi-file-earmark-lock2-fill::before { content: "\f370"; } +.bi-file-earmark-lock2::before { content: "\f371"; } +.bi-file-earmark-medical-fill::before { content: "\f372"; } +.bi-file-earmark-medical::before { content: "\f373"; } +.bi-file-earmark-minus-fill::before { content: "\f374"; } +.bi-file-earmark-minus::before { content: "\f375"; } +.bi-file-earmark-music-fill::before { content: "\f376"; } +.bi-file-earmark-music::before { content: "\f377"; } +.bi-file-earmark-person-fill::before { content: "\f378"; } +.bi-file-earmark-person::before { content: "\f379"; } +.bi-file-earmark-play-fill::before { content: "\f37a"; } +.bi-file-earmark-play::before { content: "\f37b"; } +.bi-file-earmark-plus-fill::before { content: "\f37c"; } +.bi-file-earmark-plus::before { content: "\f37d"; } +.bi-file-earmark-post-fill::before { content: "\f37e"; } +.bi-file-earmark-post::before { content: "\f37f"; } +.bi-file-earmark-ppt-fill::before { content: "\f380"; } +.bi-file-earmark-ppt::before { content: "\f381"; } +.bi-file-earmark-richtext-fill::before { content: "\f382"; } +.bi-file-earmark-richtext::before { content: "\f383"; } +.bi-file-earmark-ruled-fill::before { content: "\f384"; } +.bi-file-earmark-ruled::before { content: "\f385"; } +.bi-file-earmark-slides-fill::before { content: "\f386"; } +.bi-file-earmark-slides::before { content: "\f387"; } +.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } +.bi-file-earmark-spreadsheet::before { content: "\f389"; } +.bi-file-earmark-text-fill::before { content: "\f38a"; } +.bi-file-earmark-text::before { content: "\f38b"; } +.bi-file-earmark-word-fill::before { content: "\f38c"; } +.bi-file-earmark-word::before { content: "\f38d"; } +.bi-file-earmark-x-fill::before { content: "\f38e"; } +.bi-file-earmark-x::before { content: "\f38f"; } +.bi-file-earmark-zip-fill::before { content: "\f390"; } +.bi-file-earmark-zip::before { content: "\f391"; } +.bi-file-earmark::before { content: "\f392"; } +.bi-file-easel-fill::before { content: "\f393"; } +.bi-file-easel::before { content: "\f394"; } +.bi-file-excel-fill::before { content: "\f395"; } +.bi-file-excel::before { content: "\f396"; } +.bi-file-fill::before { content: "\f397"; } +.bi-file-font-fill::before { content: "\f398"; } +.bi-file-font::before { content: "\f399"; } +.bi-file-image-fill::before { content: "\f39a"; } +.bi-file-image::before { content: "\f39b"; } +.bi-file-lock-fill::before { content: "\f39c"; } +.bi-file-lock::before { content: "\f39d"; } +.bi-file-lock2-fill::before { content: "\f39e"; } +.bi-file-lock2::before { content: "\f39f"; } +.bi-file-medical-fill::before { content: "\f3a0"; } +.bi-file-medical::before { content: "\f3a1"; } +.bi-file-minus-fill::before { content: "\f3a2"; } +.bi-file-minus::before { content: "\f3a3"; } +.bi-file-music-fill::before { content: "\f3a4"; } +.bi-file-music::before { content: "\f3a5"; } +.bi-file-person-fill::before { content: "\f3a6"; } +.bi-file-person::before { content: "\f3a7"; } +.bi-file-play-fill::before { content: "\f3a8"; } +.bi-file-play::before { content: "\f3a9"; } +.bi-file-plus-fill::before { content: "\f3aa"; } +.bi-file-plus::before { content: "\f3ab"; } +.bi-file-post-fill::before { content: "\f3ac"; } +.bi-file-post::before { content: "\f3ad"; } +.bi-file-ppt-fill::before { content: "\f3ae"; } +.bi-file-ppt::before { content: "\f3af"; } +.bi-file-richtext-fill::before { content: "\f3b0"; } +.bi-file-richtext::before { content: "\f3b1"; } +.bi-file-ruled-fill::before { content: "\f3b2"; } +.bi-file-ruled::before { content: "\f3b3"; } +.bi-file-slides-fill::before { content: "\f3b4"; } +.bi-file-slides::before { content: "\f3b5"; } +.bi-file-spreadsheet-fill::before { content: "\f3b6"; } +.bi-file-spreadsheet::before { content: "\f3b7"; } +.bi-file-text-fill::before { content: "\f3b8"; } +.bi-file-text::before { content: "\f3b9"; } +.bi-file-word-fill::before { content: "\f3ba"; } +.bi-file-word::before { content: "\f3bb"; } +.bi-file-x-fill::before { content: "\f3bc"; } +.bi-file-x::before { content: "\f3bd"; } +.bi-file-zip-fill::before { content: "\f3be"; } +.bi-file-zip::before { content: "\f3bf"; } +.bi-file::before { content: "\f3c0"; } +.bi-files-alt::before { content: "\f3c1"; } +.bi-files::before { content: "\f3c2"; } +.bi-film::before { content: "\f3c3"; } +.bi-filter-circle-fill::before { content: "\f3c4"; } +.bi-filter-circle::before { content: "\f3c5"; } +.bi-filter-left::before { content: "\f3c6"; } +.bi-filter-right::before { content: "\f3c7"; } +.bi-filter-square-fill::before { content: "\f3c8"; } +.bi-filter-square::before { content: "\f3c9"; } +.bi-filter::before { content: "\f3ca"; } +.bi-flag-fill::before { content: "\f3cb"; } +.bi-flag::before { content: "\f3cc"; } +.bi-flower1::before { content: "\f3cd"; } +.bi-flower2::before { content: "\f3ce"; } +.bi-flower3::before { content: "\f3cf"; } +.bi-folder-check::before { content: "\f3d0"; } +.bi-folder-fill::before { content: "\f3d1"; } +.bi-folder-minus::before { content: "\f3d2"; } +.bi-folder-plus::before { content: "\f3d3"; } +.bi-folder-symlink-fill::before { content: "\f3d4"; } +.bi-folder-symlink::before { content: "\f3d5"; } +.bi-folder-x::before { content: "\f3d6"; } +.bi-folder::before { content: "\f3d7"; } +.bi-folder2-open::before { content: "\f3d8"; } +.bi-folder2::before { content: "\f3d9"; } +.bi-fonts::before { content: "\f3da"; } +.bi-forward-fill::before { content: "\f3db"; } +.bi-forward::before { content: "\f3dc"; } +.bi-front::before { content: "\f3dd"; } +.bi-fullscreen-exit::before { content: "\f3de"; } +.bi-fullscreen::before { content: "\f3df"; } +.bi-funnel-fill::before { content: "\f3e0"; } +.bi-funnel::before { content: "\f3e1"; } +.bi-gear-fill::before { content: "\f3e2"; } +.bi-gear-wide-connected::before { content: "\f3e3"; } +.bi-gear-wide::before { content: "\f3e4"; } +.bi-gear::before { content: "\f3e5"; } +.bi-gem::before { content: "\f3e6"; } +.bi-geo-alt-fill::before { content: "\f3e7"; } +.bi-geo-alt::before { content: "\f3e8"; } +.bi-geo-fill::before { content: "\f3e9"; } +.bi-geo::before { content: "\f3ea"; } +.bi-gift-fill::before { content: "\f3eb"; } +.bi-gift::before { content: "\f3ec"; } +.bi-github::before { content: "\f3ed"; } +.bi-globe::before { content: "\f3ee"; } +.bi-globe2::before { content: "\f3ef"; } +.bi-google::before { content: "\f3f0"; } +.bi-graph-down::before { content: "\f3f1"; } +.bi-graph-up::before { content: "\f3f2"; } +.bi-grid-1x2-fill::before { content: "\f3f3"; } +.bi-grid-1x2::before { content: "\f3f4"; } +.bi-grid-3x2-gap-fill::before { content: "\f3f5"; } +.bi-grid-3x2-gap::before { content: "\f3f6"; } +.bi-grid-3x2::before { content: "\f3f7"; } +.bi-grid-3x3-gap-fill::before { content: "\f3f8"; } +.bi-grid-3x3-gap::before { content: "\f3f9"; } +.bi-grid-3x3::before { content: "\f3fa"; } +.bi-grid-fill::before { content: "\f3fb"; } +.bi-grid::before { content: "\f3fc"; } +.bi-grip-horizontal::before { content: "\f3fd"; } +.bi-grip-vertical::before { content: "\f3fe"; } +.bi-hammer::before { content: "\f3ff"; } +.bi-hand-index-fill::before { content: "\f400"; } +.bi-hand-index-thumb-fill::before { content: "\f401"; } +.bi-hand-index-thumb::before { content: "\f402"; } +.bi-hand-index::before { content: "\f403"; } +.bi-hand-thumbs-down-fill::before { content: "\f404"; } +.bi-hand-thumbs-down::before { content: "\f405"; } +.bi-hand-thumbs-up-fill::before { content: "\f406"; } +.bi-hand-thumbs-up::before { content: "\f407"; } +.bi-handbag-fill::before { content: "\f408"; } +.bi-handbag::before { content: "\f409"; } +.bi-hash::before { content: "\f40a"; } +.bi-hdd-fill::before { content: "\f40b"; } +.bi-hdd-network-fill::before { content: "\f40c"; } +.bi-hdd-network::before { content: "\f40d"; } +.bi-hdd-rack-fill::before { content: "\f40e"; } +.bi-hdd-rack::before { content: "\f40f"; } +.bi-hdd-stack-fill::before { content: "\f410"; } +.bi-hdd-stack::before { content: "\f411"; } +.bi-hdd::before { content: "\f412"; } +.bi-headphones::before { content: "\f413"; } +.bi-headset::before { content: "\f414"; } +.bi-heart-fill::before { content: "\f415"; } +.bi-heart-half::before { content: "\f416"; } +.bi-heart::before { content: "\f417"; } +.bi-heptagon-fill::before { content: "\f418"; } +.bi-heptagon-half::before { content: "\f419"; } +.bi-heptagon::before { content: "\f41a"; } +.bi-hexagon-fill::before { content: "\f41b"; } +.bi-hexagon-half::before { content: "\f41c"; } +.bi-hexagon::before { content: "\f41d"; } +.bi-hourglass-bottom::before { content: "\f41e"; } +.bi-hourglass-split::before { content: "\f41f"; } +.bi-hourglass-top::before { content: "\f420"; } +.bi-hourglass::before { content: "\f421"; } +.bi-house-door-fill::before { content: "\f422"; } +.bi-house-door::before { content: "\f423"; } +.bi-house-fill::before { content: "\f424"; } +.bi-house::before { content: "\f425"; } +.bi-hr::before { content: "\f426"; } +.bi-hurricane::before { content: "\f427"; } +.bi-image-alt::before { content: "\f428"; } +.bi-image-fill::before { content: "\f429"; } +.bi-image::before { content: "\f42a"; } +.bi-images::before { content: "\f42b"; } +.bi-inbox-fill::before { content: "\f42c"; } +.bi-inbox::before { content: "\f42d"; } +.bi-inboxes-fill::before { content: "\f42e"; } +.bi-inboxes::before { content: "\f42f"; } +.bi-info-circle-fill::before { content: "\f430"; } +.bi-info-circle::before { content: "\f431"; } +.bi-info-square-fill::before { content: "\f432"; } +.bi-info-square::before { content: "\f433"; } +.bi-info::before { content: "\f434"; } +.bi-input-cursor-text::before { content: "\f435"; } +.bi-input-cursor::before { content: "\f436"; } +.bi-instagram::before { content: "\f437"; } +.bi-intersect::before { content: "\f438"; } +.bi-journal-album::before { content: "\f439"; } +.bi-journal-arrow-down::before { content: "\f43a"; } +.bi-journal-arrow-up::before { content: "\f43b"; } +.bi-journal-bookmark-fill::before { content: "\f43c"; } +.bi-journal-bookmark::before { content: "\f43d"; } +.bi-journal-check::before { content: "\f43e"; } +.bi-journal-code::before { content: "\f43f"; } +.bi-journal-medical::before { content: "\f440"; } +.bi-journal-minus::before { content: "\f441"; } +.bi-journal-plus::before { content: "\f442"; } +.bi-journal-richtext::before { content: "\f443"; } +.bi-journal-text::before { content: "\f444"; } +.bi-journal-x::before { content: "\f445"; } +.bi-journal::before { content: "\f446"; } +.bi-journals::before { content: "\f447"; } +.bi-joystick::before { content: "\f448"; } +.bi-justify-left::before { content: "\f449"; } +.bi-justify-right::before { content: "\f44a"; } +.bi-justify::before { content: "\f44b"; } +.bi-kanban-fill::before { content: "\f44c"; } +.bi-kanban::before { content: "\f44d"; } +.bi-key-fill::before { content: "\f44e"; } +.bi-key::before { content: "\f44f"; } +.bi-keyboard-fill::before { content: "\f450"; } +.bi-keyboard::before { content: "\f451"; } +.bi-ladder::before { content: "\f452"; } +.bi-lamp-fill::before { content: "\f453"; } +.bi-lamp::before { content: "\f454"; } +.bi-laptop-fill::before { content: "\f455"; } +.bi-laptop::before { content: "\f456"; } +.bi-layer-backward::before { content: "\f457"; } +.bi-layer-forward::before { content: "\f458"; } +.bi-layers-fill::before { content: "\f459"; } +.bi-layers-half::before { content: "\f45a"; } +.bi-layers::before { content: "\f45b"; } +.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } +.bi-layout-sidebar-inset::before { content: "\f45d"; } +.bi-layout-sidebar-reverse::before { content: "\f45e"; } +.bi-layout-sidebar::before { content: "\f45f"; } +.bi-layout-split::before { content: "\f460"; } +.bi-layout-text-sidebar-reverse::before { content: "\f461"; } +.bi-layout-text-sidebar::before { content: "\f462"; } +.bi-layout-text-window-reverse::before { content: "\f463"; } +.bi-layout-text-window::before { content: "\f464"; } +.bi-layout-three-columns::before { content: "\f465"; } +.bi-layout-wtf::before { content: "\f466"; } +.bi-life-preserver::before { content: "\f467"; } +.bi-lightbulb-fill::before { content: "\f468"; } +.bi-lightbulb-off-fill::before { content: "\f469"; } +.bi-lightbulb-off::before { content: "\f46a"; } +.bi-lightbulb::before { content: "\f46b"; } +.bi-lightning-charge-fill::before { content: "\f46c"; } +.bi-lightning-charge::before { content: "\f46d"; } +.bi-lightning-fill::before { content: "\f46e"; } +.bi-lightning::before { content: "\f46f"; } +.bi-link-45deg::before { content: "\f470"; } +.bi-link::before { content: "\f471"; } +.bi-linkedin::before { content: "\f472"; } +.bi-list-check::before { content: "\f473"; } +.bi-list-nested::before { content: "\f474"; } +.bi-list-ol::before { content: "\f475"; } +.bi-list-stars::before { content: "\f476"; } +.bi-list-task::before { content: "\f477"; } +.bi-list-ul::before { content: "\f478"; } +.bi-list::before { content: "\f479"; } +.bi-lock-fill::before { content: "\f47a"; } +.bi-lock::before { content: "\f47b"; } +.bi-mailbox::before { content: "\f47c"; } +.bi-mailbox2::before { content: "\f47d"; } +.bi-map-fill::before { content: "\f47e"; } +.bi-map::before { content: "\f47f"; } +.bi-markdown-fill::before { content: "\f480"; } +.bi-markdown::before { content: "\f481"; } +.bi-mask::before { content: "\f482"; } +.bi-megaphone-fill::before { content: "\f483"; } +.bi-megaphone::before { content: "\f484"; } +.bi-menu-app-fill::before { content: "\f485"; } +.bi-menu-app::before { content: "\f486"; } +.bi-menu-button-fill::before { content: "\f487"; } +.bi-menu-button-wide-fill::before { content: "\f488"; } +.bi-menu-button-wide::before { content: "\f489"; } +.bi-menu-button::before { content: "\f48a"; } +.bi-menu-down::before { content: "\f48b"; } +.bi-menu-up::before { content: "\f48c"; } +.bi-mic-fill::before { content: "\f48d"; } +.bi-mic-mute-fill::before { content: "\f48e"; } +.bi-mic-mute::before { content: "\f48f"; } +.bi-mic::before { content: "\f490"; } +.bi-minecart-loaded::before { content: "\f491"; } +.bi-minecart::before { content: "\f492"; } +.bi-moisture::before { content: "\f493"; } +.bi-moon-fill::before { content: "\f494"; } +.bi-moon-stars-fill::before { content: "\f495"; } +.bi-moon-stars::before { content: "\f496"; } +.bi-moon::before { content: "\f497"; } +.bi-mouse-fill::before { content: "\f498"; } +.bi-mouse::before { content: "\f499"; } +.bi-mouse2-fill::before { content: "\f49a"; } +.bi-mouse2::before { content: "\f49b"; } +.bi-mouse3-fill::before { content: "\f49c"; } +.bi-mouse3::before { content: "\f49d"; } +.bi-music-note-beamed::before { content: "\f49e"; } +.bi-music-note-list::before { content: "\f49f"; } +.bi-music-note::before { content: "\f4a0"; } +.bi-music-player-fill::before { content: "\f4a1"; } +.bi-music-player::before { content: "\f4a2"; } +.bi-newspaper::before { content: "\f4a3"; } +.bi-node-minus-fill::before { content: "\f4a4"; } +.bi-node-minus::before { content: "\f4a5"; } +.bi-node-plus-fill::before { content: "\f4a6"; } +.bi-node-plus::before { content: "\f4a7"; } +.bi-nut-fill::before { content: "\f4a8"; } +.bi-nut::before { content: "\f4a9"; } +.bi-octagon-fill::before { content: "\f4aa"; } +.bi-octagon-half::before { content: "\f4ab"; } +.bi-octagon::before { content: "\f4ac"; } +.bi-option::before { content: "\f4ad"; } +.bi-outlet::before { content: "\f4ae"; } +.bi-paint-bucket::before { content: "\f4af"; } +.bi-palette-fill::before { content: "\f4b0"; } +.bi-palette::before { content: "\f4b1"; } +.bi-palette2::before { content: "\f4b2"; } +.bi-paperclip::before { content: "\f4b3"; } +.bi-paragraph::before { content: "\f4b4"; } +.bi-patch-check-fill::before { content: "\f4b5"; } +.bi-patch-check::before { content: "\f4b6"; } +.bi-patch-exclamation-fill::before { content: "\f4b7"; } +.bi-patch-exclamation::before { content: "\f4b8"; } +.bi-patch-minus-fill::before { content: "\f4b9"; } +.bi-patch-minus::before { content: "\f4ba"; } +.bi-patch-plus-fill::before { content: "\f4bb"; } +.bi-patch-plus::before { content: "\f4bc"; } +.bi-patch-question-fill::before { content: "\f4bd"; } +.bi-patch-question::before { content: "\f4be"; } +.bi-pause-btn-fill::before { content: "\f4bf"; } +.bi-pause-btn::before { content: "\f4c0"; } +.bi-pause-circle-fill::before { content: "\f4c1"; } +.bi-pause-circle::before { content: "\f4c2"; } +.bi-pause-fill::before { content: "\f4c3"; } +.bi-pause::before { content: "\f4c4"; } +.bi-peace-fill::before { content: "\f4c5"; } +.bi-peace::before { content: "\f4c6"; } +.bi-pen-fill::before { content: "\f4c7"; } +.bi-pen::before { content: "\f4c8"; } +.bi-pencil-fill::before { content: "\f4c9"; } +.bi-pencil-square::before { content: "\f4ca"; } +.bi-pencil::before { content: "\f4cb"; } +.bi-pentagon-fill::before { content: "\f4cc"; } +.bi-pentagon-half::before { content: "\f4cd"; } +.bi-pentagon::before { content: "\f4ce"; } +.bi-people-fill::before { content: "\f4cf"; } +.bi-people::before { content: "\f4d0"; } +.bi-percent::before { content: "\f4d1"; } +.bi-person-badge-fill::before { content: "\f4d2"; } +.bi-person-badge::before { content: "\f4d3"; } +.bi-person-bounding-box::before { content: "\f4d4"; } +.bi-person-check-fill::before { content: "\f4d5"; } +.bi-person-check::before { content: "\f4d6"; } +.bi-person-circle::before { content: "\f4d7"; } +.bi-person-dash-fill::before { content: "\f4d8"; } +.bi-person-dash::before { content: "\f4d9"; } +.bi-person-fill::before { content: "\f4da"; } +.bi-person-lines-fill::before { content: "\f4db"; } +.bi-person-plus-fill::before { content: "\f4dc"; } +.bi-person-plus::before { content: "\f4dd"; } +.bi-person-square::before { content: "\f4de"; } +.bi-person-x-fill::before { content: "\f4df"; } +.bi-person-x::before { content: "\f4e0"; } +.bi-person::before { content: "\f4e1"; } +.bi-phone-fill::before { content: "\f4e2"; } +.bi-phone-landscape-fill::before { content: "\f4e3"; } +.bi-phone-landscape::before { content: "\f4e4"; } +.bi-phone-vibrate-fill::before { content: "\f4e5"; } +.bi-phone-vibrate::before { content: "\f4e6"; } +.bi-phone::before { content: "\f4e7"; } +.bi-pie-chart-fill::before { content: "\f4e8"; } +.bi-pie-chart::before { content: "\f4e9"; } +.bi-pin-angle-fill::before { content: "\f4ea"; } +.bi-pin-angle::before { content: "\f4eb"; } +.bi-pin-fill::before { content: "\f4ec"; } +.bi-pin::before { content: "\f4ed"; } +.bi-pip-fill::before { content: "\f4ee"; } +.bi-pip::before { content: "\f4ef"; } +.bi-play-btn-fill::before { content: "\f4f0"; } +.bi-play-btn::before { content: "\f4f1"; } +.bi-play-circle-fill::before { content: "\f4f2"; } +.bi-play-circle::before { content: "\f4f3"; } +.bi-play-fill::before { content: "\f4f4"; } +.bi-play::before { content: "\f4f5"; } +.bi-plug-fill::before { content: "\f4f6"; } +.bi-plug::before { content: "\f4f7"; } +.bi-plus-circle-dotted::before { content: "\f4f8"; } +.bi-plus-circle-fill::before { content: "\f4f9"; } +.bi-plus-circle::before { content: "\f4fa"; } +.bi-plus-square-dotted::before { content: "\f4fb"; } +.bi-plus-square-fill::before { content: "\f4fc"; } +.bi-plus-square::before { content: "\f4fd"; } +.bi-plus::before { content: "\f4fe"; } +.bi-power::before { content: "\f4ff"; } +.bi-printer-fill::before { content: "\f500"; } +.bi-printer::before { content: "\f501"; } +.bi-puzzle-fill::before { content: "\f502"; } +.bi-puzzle::before { content: "\f503"; } +.bi-question-circle-fill::before { content: "\f504"; } +.bi-question-circle::before { content: "\f505"; } +.bi-question-diamond-fill::before { content: "\f506"; } +.bi-question-diamond::before { content: "\f507"; } +.bi-question-octagon-fill::before { content: "\f508"; } +.bi-question-octagon::before { content: "\f509"; } +.bi-question-square-fill::before { content: "\f50a"; } +.bi-question-square::before { content: "\f50b"; } +.bi-question::before { content: "\f50c"; } +.bi-rainbow::before { content: "\f50d"; } +.bi-receipt-cutoff::before { content: "\f50e"; } +.bi-receipt::before { content: "\f50f"; } +.bi-reception-0::before { content: "\f510"; } +.bi-reception-1::before { content: "\f511"; } +.bi-reception-2::before { content: "\f512"; } +.bi-reception-3::before { content: "\f513"; } +.bi-reception-4::before { content: "\f514"; } +.bi-record-btn-fill::before { content: "\f515"; } +.bi-record-btn::before { content: "\f516"; } +.bi-record-circle-fill::before { content: "\f517"; } +.bi-record-circle::before { content: "\f518"; } +.bi-record-fill::before { content: "\f519"; } +.bi-record::before { content: "\f51a"; } +.bi-record2-fill::before { content: "\f51b"; } +.bi-record2::before { content: "\f51c"; } +.bi-reply-all-fill::before { content: "\f51d"; } +.bi-reply-all::before { content: "\f51e"; } +.bi-reply-fill::before { content: "\f51f"; } +.bi-reply::before { content: "\f520"; } +.bi-rss-fill::before { content: "\f521"; } +.bi-rss::before { content: "\f522"; } +.bi-rulers::before { content: "\f523"; } +.bi-save-fill::before { content: "\f524"; } +.bi-save::before { content: "\f525"; } +.bi-save2-fill::before { content: "\f526"; } +.bi-save2::before { content: "\f527"; } +.bi-scissors::before { content: "\f528"; } +.bi-screwdriver::before { content: "\f529"; } +.bi-search::before { content: "\f52a"; } +.bi-segmented-nav::before { content: "\f52b"; } +.bi-server::before { content: "\f52c"; } +.bi-share-fill::before { content: "\f52d"; } +.bi-share::before { content: "\f52e"; } +.bi-shield-check::before { content: "\f52f"; } +.bi-shield-exclamation::before { content: "\f530"; } +.bi-shield-fill-check::before { content: "\f531"; } +.bi-shield-fill-exclamation::before { content: "\f532"; } +.bi-shield-fill-minus::before { content: "\f533"; } +.bi-shield-fill-plus::before { content: "\f534"; } +.bi-shield-fill-x::before { content: "\f535"; } +.bi-shield-fill::before { content: "\f536"; } +.bi-shield-lock-fill::before { content: "\f537"; } +.bi-shield-lock::before { content: "\f538"; } +.bi-shield-minus::before { content: "\f539"; } +.bi-shield-plus::before { content: "\f53a"; } +.bi-shield-shaded::before { content: "\f53b"; } +.bi-shield-slash-fill::before { content: "\f53c"; } +.bi-shield-slash::before { content: "\f53d"; } +.bi-shield-x::before { content: "\f53e"; } +.bi-shield::before { content: "\f53f"; } +.bi-shift-fill::before { content: "\f540"; } +.bi-shift::before { content: "\f541"; } +.bi-shop-window::before { content: "\f542"; } +.bi-shop::before { content: "\f543"; } +.bi-shuffle::before { content: "\f544"; } +.bi-signpost-2-fill::before { content: "\f545"; } +.bi-signpost-2::before { content: "\f546"; } +.bi-signpost-fill::before { content: "\f547"; } +.bi-signpost-split-fill::before { content: "\f548"; } +.bi-signpost-split::before { content: "\f549"; } +.bi-signpost::before { content: "\f54a"; } +.bi-sim-fill::before { content: "\f54b"; } +.bi-sim::before { content: "\f54c"; } +.bi-skip-backward-btn-fill::before { content: "\f54d"; } +.bi-skip-backward-btn::before { content: "\f54e"; } +.bi-skip-backward-circle-fill::before { content: "\f54f"; } +.bi-skip-backward-circle::before { content: "\f550"; } +.bi-skip-backward-fill::before { content: "\f551"; } +.bi-skip-backward::before { content: "\f552"; } +.bi-skip-end-btn-fill::before { content: "\f553"; } +.bi-skip-end-btn::before { content: "\f554"; } +.bi-skip-end-circle-fill::before { content: "\f555"; } +.bi-skip-end-circle::before { content: "\f556"; } +.bi-skip-end-fill::before { content: "\f557"; } +.bi-skip-end::before { content: "\f558"; } +.bi-skip-forward-btn-fill::before { content: "\f559"; } +.bi-skip-forward-btn::before { content: "\f55a"; } +.bi-skip-forward-circle-fill::before { content: "\f55b"; } +.bi-skip-forward-circle::before { content: "\f55c"; } +.bi-skip-forward-fill::before { content: "\f55d"; } +.bi-skip-forward::before { content: "\f55e"; } +.bi-skip-start-btn-fill::before { content: "\f55f"; } +.bi-skip-start-btn::before { content: "\f560"; } +.bi-skip-start-circle-fill::before { content: "\f561"; } +.bi-skip-start-circle::before { content: "\f562"; } +.bi-skip-start-fill::before { content: "\f563"; } +.bi-skip-start::before { content: "\f564"; } +.bi-slack::before { content: "\f565"; } +.bi-slash-circle-fill::before { content: "\f566"; } +.bi-slash-circle::before { content: "\f567"; } +.bi-slash-square-fill::before { content: "\f568"; } +.bi-slash-square::before { content: "\f569"; } +.bi-slash::before { content: "\f56a"; } +.bi-sliders::before { content: "\f56b"; } +.bi-smartwatch::before { content: "\f56c"; } +.bi-snow::before { content: "\f56d"; } +.bi-snow2::before { content: "\f56e"; } +.bi-snow3::before { content: "\f56f"; } +.bi-sort-alpha-down-alt::before { content: "\f570"; } +.bi-sort-alpha-down::before { content: "\f571"; } +.bi-sort-alpha-up-alt::before { content: "\f572"; } +.bi-sort-alpha-up::before { content: "\f573"; } +.bi-sort-down-alt::before { content: "\f574"; } +.bi-sort-down::before { content: "\f575"; } +.bi-sort-numeric-down-alt::before { content: "\f576"; } +.bi-sort-numeric-down::before { content: "\f577"; } +.bi-sort-numeric-up-alt::before { content: "\f578"; } +.bi-sort-numeric-up::before { content: "\f579"; } +.bi-sort-up-alt::before { content: "\f57a"; } +.bi-sort-up::before { content: "\f57b"; } +.bi-soundwave::before { content: "\f57c"; } +.bi-speaker-fill::before { content: "\f57d"; } +.bi-speaker::before { content: "\f57e"; } +.bi-speedometer::before { content: "\f57f"; } +.bi-speedometer2::before { content: "\f580"; } +.bi-spellcheck::before { content: "\f581"; } +.bi-square-fill::before { content: "\f582"; } +.bi-square-half::before { content: "\f583"; } +.bi-square::before { content: "\f584"; } +.bi-stack::before { content: "\f585"; } +.bi-star-fill::before { content: "\f586"; } +.bi-star-half::before { content: "\f587"; } +.bi-star::before { content: "\f588"; } +.bi-stars::before { content: "\f589"; } +.bi-stickies-fill::before { content: "\f58a"; } +.bi-stickies::before { content: "\f58b"; } +.bi-sticky-fill::before { content: "\f58c"; } +.bi-sticky::before { content: "\f58d"; } +.bi-stop-btn-fill::before { content: "\f58e"; } +.bi-stop-btn::before { content: "\f58f"; } +.bi-stop-circle-fill::before { content: "\f590"; } +.bi-stop-circle::before { content: "\f591"; } +.bi-stop-fill::before { content: "\f592"; } +.bi-stop::before { content: "\f593"; } +.bi-stoplights-fill::before { content: "\f594"; } +.bi-stoplights::before { content: "\f595"; } +.bi-stopwatch-fill::before { content: "\f596"; } +.bi-stopwatch::before { content: "\f597"; } +.bi-subtract::before { content: "\f598"; } +.bi-suit-club-fill::before { content: "\f599"; } +.bi-suit-club::before { content: "\f59a"; } +.bi-suit-diamond-fill::before { content: "\f59b"; } +.bi-suit-diamond::before { content: "\f59c"; } +.bi-suit-heart-fill::before { content: "\f59d"; } +.bi-suit-heart::before { content: "\f59e"; } +.bi-suit-spade-fill::before { content: "\f59f"; } +.bi-suit-spade::before { content: "\f5a0"; } +.bi-sun-fill::before { content: "\f5a1"; } +.bi-sun::before { content: "\f5a2"; } +.bi-sunglasses::before { content: "\f5a3"; } +.bi-sunrise-fill::before { content: "\f5a4"; } +.bi-sunrise::before { content: "\f5a5"; } +.bi-sunset-fill::before { content: "\f5a6"; } +.bi-sunset::before { content: "\f5a7"; } +.bi-symmetry-horizontal::before { content: "\f5a8"; } +.bi-symmetry-vertical::before { content: "\f5a9"; } +.bi-table::before { content: "\f5aa"; } +.bi-tablet-fill::before { content: "\f5ab"; } +.bi-tablet-landscape-fill::before { content: "\f5ac"; } +.bi-tablet-landscape::before { content: "\f5ad"; } +.bi-tablet::before { content: "\f5ae"; } +.bi-tag-fill::before { content: "\f5af"; } +.bi-tag::before { content: "\f5b0"; } +.bi-tags-fill::before { content: "\f5b1"; } +.bi-tags::before { content: "\f5b2"; } +.bi-telegram::before { content: "\f5b3"; } +.bi-telephone-fill::before { content: "\f5b4"; } +.bi-telephone-forward-fill::before { content: "\f5b5"; } +.bi-telephone-forward::before { content: "\f5b6"; } +.bi-telephone-inbound-fill::before { content: "\f5b7"; } +.bi-telephone-inbound::before { content: "\f5b8"; } +.bi-telephone-minus-fill::before { content: "\f5b9"; } +.bi-telephone-minus::before { content: "\f5ba"; } +.bi-telephone-outbound-fill::before { content: "\f5bb"; } +.bi-telephone-outbound::before { content: "\f5bc"; } +.bi-telephone-plus-fill::before { content: "\f5bd"; } +.bi-telephone-plus::before { content: "\f5be"; } +.bi-telephone-x-fill::before { content: "\f5bf"; } +.bi-telephone-x::before { content: "\f5c0"; } +.bi-telephone::before { content: "\f5c1"; } +.bi-terminal-fill::before { content: "\f5c2"; } +.bi-terminal::before { content: "\f5c3"; } +.bi-text-center::before { content: "\f5c4"; } +.bi-text-indent-left::before { content: "\f5c5"; } +.bi-text-indent-right::before { content: "\f5c6"; } +.bi-text-left::before { content: "\f5c7"; } +.bi-text-paragraph::before { content: "\f5c8"; } +.bi-text-right::before { content: "\f5c9"; } +.bi-textarea-resize::before { content: "\f5ca"; } +.bi-textarea-t::before { content: "\f5cb"; } +.bi-textarea::before { content: "\f5cc"; } +.bi-thermometer-half::before { content: "\f5cd"; } +.bi-thermometer-high::before { content: "\f5ce"; } +.bi-thermometer-low::before { content: "\f5cf"; } +.bi-thermometer-snow::before { content: "\f5d0"; } +.bi-thermometer-sun::before { content: "\f5d1"; } +.bi-thermometer::before { content: "\f5d2"; } +.bi-three-dots-vertical::before { content: "\f5d3"; } +.bi-three-dots::before { content: "\f5d4"; } +.bi-toggle-off::before { content: "\f5d5"; } +.bi-toggle-on::before { content: "\f5d6"; } +.bi-toggle2-off::before { content: "\f5d7"; } +.bi-toggle2-on::before { content: "\f5d8"; } +.bi-toggles::before { content: "\f5d9"; } +.bi-toggles2::before { content: "\f5da"; } +.bi-tools::before { content: "\f5db"; } +.bi-tornado::before { content: "\f5dc"; } +.bi-trash-fill::before { content: "\f5dd"; } +.bi-trash::before { content: "\f5de"; } +.bi-trash2-fill::before { content: "\f5df"; } +.bi-trash2::before { content: "\f5e0"; } +.bi-tree-fill::before { content: "\f5e1"; } +.bi-tree::before { content: "\f5e2"; } +.bi-triangle-fill::before { content: "\f5e3"; } +.bi-triangle-half::before { content: "\f5e4"; } +.bi-triangle::before { content: "\f5e5"; } +.bi-trophy-fill::before { content: "\f5e6"; } +.bi-trophy::before { content: "\f5e7"; } +.bi-tropical-storm::before { content: "\f5e8"; } +.bi-truck-flatbed::before { content: "\f5e9"; } +.bi-truck::before { content: "\f5ea"; } +.bi-tsunami::before { content: "\f5eb"; } +.bi-tv-fill::before { content: "\f5ec"; } +.bi-tv::before { content: "\f5ed"; } +.bi-twitch::before { content: "\f5ee"; } +.bi-twitter::before { content: "\f5ef"; } +.bi-type-bold::before { content: "\f5f0"; } +.bi-type-h1::before { content: "\f5f1"; } +.bi-type-h2::before { content: "\f5f2"; } +.bi-type-h3::before { content: "\f5f3"; } +.bi-type-italic::before { content: "\f5f4"; } +.bi-type-strikethrough::before { content: "\f5f5"; } +.bi-type-underline::before { content: "\f5f6"; } +.bi-type::before { content: "\f5f7"; } +.bi-ui-checks-grid::before { content: "\f5f8"; } +.bi-ui-checks::before { content: "\f5f9"; } +.bi-ui-radios-grid::before { content: "\f5fa"; } +.bi-ui-radios::before { content: "\f5fb"; } +.bi-umbrella-fill::before { content: "\f5fc"; } +.bi-umbrella::before { content: "\f5fd"; } +.bi-union::before { content: "\f5fe"; } +.bi-unlock-fill::before { content: "\f5ff"; } +.bi-unlock::before { content: "\f600"; } +.bi-upc-scan::before { content: "\f601"; } +.bi-upc::before { content: "\f602"; } +.bi-upload::before { content: "\f603"; } +.bi-vector-pen::before { content: "\f604"; } +.bi-view-list::before { content: "\f605"; } +.bi-view-stacked::before { content: "\f606"; } +.bi-vinyl-fill::before { content: "\f607"; } +.bi-vinyl::before { content: "\f608"; } +.bi-voicemail::before { content: "\f609"; } +.bi-volume-down-fill::before { content: "\f60a"; } +.bi-volume-down::before { content: "\f60b"; } +.bi-volume-mute-fill::before { content: "\f60c"; } +.bi-volume-mute::before { content: "\f60d"; } +.bi-volume-off-fill::before { content: "\f60e"; } +.bi-volume-off::before { content: "\f60f"; } +.bi-volume-up-fill::before { content: "\f610"; } +.bi-volume-up::before { content: "\f611"; } +.bi-vr::before { content: "\f612"; } +.bi-wallet-fill::before { content: "\f613"; } +.bi-wallet::before { content: "\f614"; } +.bi-wallet2::before { content: "\f615"; } +.bi-watch::before { content: "\f616"; } +.bi-water::before { content: "\f617"; } +.bi-whatsapp::before { content: "\f618"; } +.bi-wifi-1::before { content: "\f619"; } +.bi-wifi-2::before { content: "\f61a"; } +.bi-wifi-off::before { content: "\f61b"; } +.bi-wifi::before { content: "\f61c"; } +.bi-wind::before { content: "\f61d"; } +.bi-window-dock::before { content: "\f61e"; } +.bi-window-sidebar::before { content: "\f61f"; } +.bi-window::before { content: "\f620"; } +.bi-wrench::before { content: "\f621"; } +.bi-x-circle-fill::before { content: "\f622"; } +.bi-x-circle::before { content: "\f623"; } +.bi-x-diamond-fill::before { content: "\f624"; } +.bi-x-diamond::before { content: "\f625"; } +.bi-x-octagon-fill::before { content: "\f626"; } +.bi-x-octagon::before { content: "\f627"; } +.bi-x-square-fill::before { content: "\f628"; } +.bi-x-square::before { content: "\f629"; } +.bi-x::before { content: "\f62a"; } +.bi-youtube::before { content: "\f62b"; } +.bi-zoom-in::before { content: "\f62c"; } +.bi-zoom-out::before { content: "\f62d"; } +.bi-bank::before { content: "\f62e"; } +.bi-bank2::before { content: "\f62f"; } +.bi-bell-slash-fill::before { content: "\f630"; } +.bi-bell-slash::before { content: "\f631"; } +.bi-cash-coin::before { content: "\f632"; } +.bi-check-lg::before { content: "\f633"; } +.bi-coin::before { content: "\f634"; } +.bi-currency-bitcoin::before { content: "\f635"; } +.bi-currency-dollar::before { content: "\f636"; } +.bi-currency-euro::before { content: "\f637"; } +.bi-currency-exchange::before { content: "\f638"; } +.bi-currency-pound::before { content: "\f639"; } +.bi-currency-yen::before { content: "\f63a"; } +.bi-dash-lg::before { content: "\f63b"; } +.bi-exclamation-lg::before { content: "\f63c"; } +.bi-file-earmark-pdf-fill::before { content: "\f63d"; } +.bi-file-earmark-pdf::before { content: "\f63e"; } +.bi-file-pdf-fill::before { content: "\f63f"; } +.bi-file-pdf::before { content: "\f640"; } +.bi-gender-ambiguous::before { content: "\f641"; } +.bi-gender-female::before { content: "\f642"; } +.bi-gender-male::before { content: "\f643"; } +.bi-gender-trans::before { content: "\f644"; } +.bi-headset-vr::before { content: "\f645"; } +.bi-info-lg::before { content: "\f646"; } +.bi-mastodon::before { content: "\f647"; } +.bi-messenger::before { content: "\f648"; } +.bi-piggy-bank-fill::before { content: "\f649"; } +.bi-piggy-bank::before { content: "\f64a"; } +.bi-pin-map-fill::before { content: "\f64b"; } +.bi-pin-map::before { content: "\f64c"; } +.bi-plus-lg::before { content: "\f64d"; } +.bi-question-lg::before { content: "\f64e"; } +.bi-recycle::before { content: "\f64f"; } +.bi-reddit::before { content: "\f650"; } +.bi-safe-fill::before { content: "\f651"; } +.bi-safe2-fill::before { content: "\f652"; } +.bi-safe2::before { content: "\f653"; } +.bi-sd-card-fill::before { content: "\f654"; } +.bi-sd-card::before { content: "\f655"; } +.bi-skype::before { content: "\f656"; } +.bi-slash-lg::before { content: "\f657"; } +.bi-translate::before { content: "\f658"; } +.bi-x-lg::before { content: "\f659"; } +.bi-safe::before { content: "\f65a"; } +.bi-apple::before { content: "\f65b"; } +.bi-microsoft::before { content: "\f65d"; } +.bi-windows::before { content: "\f65e"; } +.bi-behance::before { content: "\f65c"; } +.bi-dribbble::before { content: "\f65f"; } +.bi-line::before { content: "\f660"; } +.bi-medium::before { content: "\f661"; } +.bi-paypal::before { content: "\f662"; } +.bi-pinterest::before { content: "\f663"; } +.bi-signal::before { content: "\f664"; } +.bi-snapchat::before { content: "\f665"; } +.bi-spotify::before { content: "\f666"; } +.bi-stack-overflow::before { content: "\f667"; } +.bi-strava::before { content: "\f668"; } +.bi-wordpress::before { content: "\f669"; } +.bi-vimeo::before { content: "\f66a"; } +.bi-activity::before { content: "\f66b"; } +.bi-easel2-fill::before { content: "\f66c"; } +.bi-easel2::before { content: "\f66d"; } +.bi-easel3-fill::before { content: "\f66e"; } +.bi-easel3::before { content: "\f66f"; } +.bi-fan::before { content: "\f670"; } +.bi-fingerprint::before { content: "\f671"; } +.bi-graph-down-arrow::before { content: "\f672"; } +.bi-graph-up-arrow::before { content: "\f673"; } +.bi-hypnotize::before { content: "\f674"; } +.bi-magic::before { content: "\f675"; } +.bi-person-rolodex::before { content: "\f676"; } +.bi-person-video::before { content: "\f677"; } +.bi-person-video2::before { content: "\f678"; } +.bi-person-video3::before { content: "\f679"; } +.bi-person-workspace::before { content: "\f67a"; } +.bi-radioactive::before { content: "\f67b"; } +.bi-webcam-fill::before { content: "\f67c"; } +.bi-webcam::before { content: "\f67d"; } +.bi-yin-yang::before { content: "\f67e"; } +.bi-bandaid-fill::before { content: "\f680"; } +.bi-bandaid::before { content: "\f681"; } +.bi-bluetooth::before { content: "\f682"; } +.bi-body-text::before { content: "\f683"; } +.bi-boombox::before { content: "\f684"; } +.bi-boxes::before { content: "\f685"; } +.bi-dpad-fill::before { content: "\f686"; } +.bi-dpad::before { content: "\f687"; } +.bi-ear-fill::before { content: "\f688"; } +.bi-ear::before { content: "\f689"; } +.bi-envelope-check-fill::before { content: "\f68b"; } +.bi-envelope-check::before { content: "\f68c"; } +.bi-envelope-dash-fill::before { content: "\f68e"; } +.bi-envelope-dash::before { content: "\f68f"; } +.bi-envelope-exclamation-fill::before { content: "\f691"; } +.bi-envelope-exclamation::before { content: "\f692"; } +.bi-envelope-plus-fill::before { content: "\f693"; } +.bi-envelope-plus::before { content: "\f694"; } +.bi-envelope-slash-fill::before { content: "\f696"; } +.bi-envelope-slash::before { content: "\f697"; } +.bi-envelope-x-fill::before { content: "\f699"; } +.bi-envelope-x::before { content: "\f69a"; } +.bi-explicit-fill::before { content: "\f69b"; } +.bi-explicit::before { content: "\f69c"; } +.bi-git::before { content: "\f69d"; } +.bi-infinity::before { content: "\f69e"; } +.bi-list-columns-reverse::before { content: "\f69f"; } +.bi-list-columns::before { content: "\f6a0"; } +.bi-meta::before { content: "\f6a1"; } +.bi-nintendo-switch::before { content: "\f6a4"; } +.bi-pc-display-horizontal::before { content: "\f6a5"; } +.bi-pc-display::before { content: "\f6a6"; } +.bi-pc-horizontal::before { content: "\f6a7"; } +.bi-pc::before { content: "\f6a8"; } +.bi-playstation::before { content: "\f6a9"; } +.bi-plus-slash-minus::before { content: "\f6aa"; } +.bi-projector-fill::before { content: "\f6ab"; } +.bi-projector::before { content: "\f6ac"; } +.bi-qr-code-scan::before { content: "\f6ad"; } +.bi-qr-code::before { content: "\f6ae"; } +.bi-quora::before { content: "\f6af"; } +.bi-quote::before { content: "\f6b0"; } +.bi-robot::before { content: "\f6b1"; } +.bi-send-check-fill::before { content: "\f6b2"; } +.bi-send-check::before { content: "\f6b3"; } +.bi-send-dash-fill::before { content: "\f6b4"; } +.bi-send-dash::before { content: "\f6b5"; } +.bi-send-exclamation-fill::before { content: "\f6b7"; } +.bi-send-exclamation::before { content: "\f6b8"; } +.bi-send-fill::before { content: "\f6b9"; } +.bi-send-plus-fill::before { content: "\f6ba"; } +.bi-send-plus::before { content: "\f6bb"; } +.bi-send-slash-fill::before { content: "\f6bc"; } +.bi-send-slash::before { content: "\f6bd"; } +.bi-send-x-fill::before { content: "\f6be"; } +.bi-send-x::before { content: "\f6bf"; } +.bi-send::before { content: "\f6c0"; } +.bi-steam::before { content: "\f6c1"; } +.bi-terminal-dash::before { content: "\f6c3"; } +.bi-terminal-plus::before { content: "\f6c4"; } +.bi-terminal-split::before { content: "\f6c5"; } +.bi-ticket-detailed-fill::before { content: "\f6c6"; } +.bi-ticket-detailed::before { content: "\f6c7"; } +.bi-ticket-fill::before { content: "\f6c8"; } +.bi-ticket-perforated-fill::before { content: "\f6c9"; } +.bi-ticket-perforated::before { content: "\f6ca"; } +.bi-ticket::before { content: "\f6cb"; } +.bi-tiktok::before { content: "\f6cc"; } +.bi-window-dash::before { content: "\f6cd"; } +.bi-window-desktop::before { content: "\f6ce"; } +.bi-window-fullscreen::before { content: "\f6cf"; } +.bi-window-plus::before { content: "\f6d0"; } +.bi-window-split::before { content: "\f6d1"; } +.bi-window-stack::before { content: "\f6d2"; } +.bi-window-x::before { content: "\f6d3"; } +.bi-xbox::before { content: "\f6d4"; } +.bi-ethernet::before { content: "\f6d5"; } +.bi-hdmi-fill::before { content: "\f6d6"; } +.bi-hdmi::before { content: "\f6d7"; } +.bi-usb-c-fill::before { content: "\f6d8"; } +.bi-usb-c::before { content: "\f6d9"; } +.bi-usb-fill::before { content: "\f6da"; } +.bi-usb-plug-fill::before { content: "\f6db"; } +.bi-usb-plug::before { content: "\f6dc"; } +.bi-usb-symbol::before { content: "\f6dd"; } +.bi-usb::before { content: "\f6de"; } +.bi-boombox-fill::before { content: "\f6df"; } +.bi-displayport::before { content: "\f6e1"; } +.bi-gpu-card::before { content: "\f6e2"; } +.bi-memory::before { content: "\f6e3"; } +.bi-modem-fill::before { content: "\f6e4"; } +.bi-modem::before { content: "\f6e5"; } +.bi-motherboard-fill::before { content: "\f6e6"; } +.bi-motherboard::before { content: "\f6e7"; } +.bi-optical-audio-fill::before { content: "\f6e8"; } +.bi-optical-audio::before { content: "\f6e9"; } +.bi-pci-card::before { content: "\f6ea"; } +.bi-router-fill::before { content: "\f6eb"; } +.bi-router::before { content: "\f6ec"; } +.bi-thunderbolt-fill::before { content: "\f6ef"; } +.bi-thunderbolt::before { content: "\f6f0"; } +.bi-usb-drive-fill::before { content: "\f6f1"; } +.bi-usb-drive::before { content: "\f6f2"; } +.bi-usb-micro-fill::before { content: "\f6f3"; } +.bi-usb-micro::before { content: "\f6f4"; } +.bi-usb-mini-fill::before { content: "\f6f5"; } +.bi-usb-mini::before { content: "\f6f6"; } +.bi-cloud-haze2::before { content: "\f6f7"; } +.bi-device-hdd-fill::before { content: "\f6f8"; } +.bi-device-hdd::before { content: "\f6f9"; } +.bi-device-ssd-fill::before { content: "\f6fa"; } +.bi-device-ssd::before { content: "\f6fb"; } +.bi-displayport-fill::before { content: "\f6fc"; } +.bi-mortarboard-fill::before { content: "\f6fd"; } +.bi-mortarboard::before { content: "\f6fe"; } +.bi-terminal-x::before { content: "\f6ff"; } +.bi-arrow-through-heart-fill::before { content: "\f700"; } +.bi-arrow-through-heart::before { content: "\f701"; } +.bi-badge-sd-fill::before { content: "\f702"; } +.bi-badge-sd::before { content: "\f703"; } +.bi-bag-heart-fill::before { content: "\f704"; } +.bi-bag-heart::before { content: "\f705"; } +.bi-balloon-fill::before { content: "\f706"; } +.bi-balloon-heart-fill::before { content: "\f707"; } +.bi-balloon-heart::before { content: "\f708"; } +.bi-balloon::before { content: "\f709"; } +.bi-box2-fill::before { content: "\f70a"; } +.bi-box2-heart-fill::before { content: "\f70b"; } +.bi-box2-heart::before { content: "\f70c"; } +.bi-box2::before { content: "\f70d"; } +.bi-braces-asterisk::before { content: "\f70e"; } +.bi-calendar-heart-fill::before { content: "\f70f"; } +.bi-calendar-heart::before { content: "\f710"; } +.bi-calendar2-heart-fill::before { content: "\f711"; } +.bi-calendar2-heart::before { content: "\f712"; } +.bi-chat-heart-fill::before { content: "\f713"; } +.bi-chat-heart::before { content: "\f714"; } +.bi-chat-left-heart-fill::before { content: "\f715"; } +.bi-chat-left-heart::before { content: "\f716"; } +.bi-chat-right-heart-fill::before { content: "\f717"; } +.bi-chat-right-heart::before { content: "\f718"; } +.bi-chat-square-heart-fill::before { content: "\f719"; } +.bi-chat-square-heart::before { content: "\f71a"; } +.bi-clipboard-check-fill::before { content: "\f71b"; } +.bi-clipboard-data-fill::before { content: "\f71c"; } +.bi-clipboard-fill::before { content: "\f71d"; } +.bi-clipboard-heart-fill::before { content: "\f71e"; } +.bi-clipboard-heart::before { content: "\f71f"; } +.bi-clipboard-minus-fill::before { content: "\f720"; } +.bi-clipboard-plus-fill::before { content: "\f721"; } +.bi-clipboard-pulse::before { content: "\f722"; } +.bi-clipboard-x-fill::before { content: "\f723"; } +.bi-clipboard2-check-fill::before { content: "\f724"; } +.bi-clipboard2-check::before { content: "\f725"; } +.bi-clipboard2-data-fill::before { content: "\f726"; } +.bi-clipboard2-data::before { content: "\f727"; } +.bi-clipboard2-fill::before { content: "\f728"; } +.bi-clipboard2-heart-fill::before { content: "\f729"; } +.bi-clipboard2-heart::before { content: "\f72a"; } +.bi-clipboard2-minus-fill::before { content: "\f72b"; } +.bi-clipboard2-minus::before { content: "\f72c"; } +.bi-clipboard2-plus-fill::before { content: "\f72d"; } +.bi-clipboard2-plus::before { content: "\f72e"; } +.bi-clipboard2-pulse-fill::before { content: "\f72f"; } +.bi-clipboard2-pulse::before { content: "\f730"; } +.bi-clipboard2-x-fill::before { content: "\f731"; } +.bi-clipboard2-x::before { content: "\f732"; } +.bi-clipboard2::before { content: "\f733"; } +.bi-emoji-kiss-fill::before { content: "\f734"; } +.bi-emoji-kiss::before { content: "\f735"; } +.bi-envelope-heart-fill::before { content: "\f736"; } +.bi-envelope-heart::before { content: "\f737"; } +.bi-envelope-open-heart-fill::before { content: "\f738"; } +.bi-envelope-open-heart::before { content: "\f739"; } +.bi-envelope-paper-fill::before { content: "\f73a"; } +.bi-envelope-paper-heart-fill::before { content: "\f73b"; } +.bi-envelope-paper-heart::before { content: "\f73c"; } +.bi-envelope-paper::before { content: "\f73d"; } +.bi-filetype-aac::before { content: "\f73e"; } +.bi-filetype-ai::before { content: "\f73f"; } +.bi-filetype-bmp::before { content: "\f740"; } +.bi-filetype-cs::before { content: "\f741"; } +.bi-filetype-css::before { content: "\f742"; } +.bi-filetype-csv::before { content: "\f743"; } +.bi-filetype-doc::before { content: "\f744"; } +.bi-filetype-docx::before { content: "\f745"; } +.bi-filetype-exe::before { content: "\f746"; } +.bi-filetype-gif::before { content: "\f747"; } +.bi-filetype-heic::before { content: "\f748"; } +.bi-filetype-html::before { content: "\f749"; } +.bi-filetype-java::before { content: "\f74a"; } +.bi-filetype-jpg::before { content: "\f74b"; } +.bi-filetype-js::before { content: "\f74c"; } +.bi-filetype-jsx::before { content: "\f74d"; } +.bi-filetype-key::before { content: "\f74e"; } +.bi-filetype-m4p::before { content: "\f74f"; } +.bi-filetype-md::before { content: "\f750"; } +.bi-filetype-mdx::before { content: "\f751"; } +.bi-filetype-mov::before { content: "\f752"; } +.bi-filetype-mp3::before { content: "\f753"; } +.bi-filetype-mp4::before { content: "\f754"; } +.bi-filetype-otf::before { content: "\f755"; } +.bi-filetype-pdf::before { content: "\f756"; } +.bi-filetype-php::before { content: "\f757"; } +.bi-filetype-png::before { content: "\f758"; } +.bi-filetype-ppt::before { content: "\f75a"; } +.bi-filetype-psd::before { content: "\f75b"; } +.bi-filetype-py::before { content: "\f75c"; } +.bi-filetype-raw::before { content: "\f75d"; } +.bi-filetype-rb::before { content: "\f75e"; } +.bi-filetype-sass::before { content: "\f75f"; } +.bi-filetype-scss::before { content: "\f760"; } +.bi-filetype-sh::before { content: "\f761"; } +.bi-filetype-svg::before { content: "\f762"; } +.bi-filetype-tiff::before { content: "\f763"; } +.bi-filetype-tsx::before { content: "\f764"; } +.bi-filetype-ttf::before { content: "\f765"; } +.bi-filetype-txt::before { content: "\f766"; } +.bi-filetype-wav::before { content: "\f767"; } +.bi-filetype-woff::before { content: "\f768"; } +.bi-filetype-xls::before { content: "\f76a"; } +.bi-filetype-xml::before { content: "\f76b"; } +.bi-filetype-yml::before { content: "\f76c"; } +.bi-heart-arrow::before { content: "\f76d"; } +.bi-heart-pulse-fill::before { content: "\f76e"; } +.bi-heart-pulse::before { content: "\f76f"; } +.bi-heartbreak-fill::before { content: "\f770"; } +.bi-heartbreak::before { content: "\f771"; } +.bi-hearts::before { content: "\f772"; } +.bi-hospital-fill::before { content: "\f773"; } +.bi-hospital::before { content: "\f774"; } +.bi-house-heart-fill::before { content: "\f775"; } +.bi-house-heart::before { content: "\f776"; } +.bi-incognito::before { content: "\f777"; } +.bi-magnet-fill::before { content: "\f778"; } +.bi-magnet::before { content: "\f779"; } +.bi-person-heart::before { content: "\f77a"; } +.bi-person-hearts::before { content: "\f77b"; } +.bi-phone-flip::before { content: "\f77c"; } +.bi-plugin::before { content: "\f77d"; } +.bi-postage-fill::before { content: "\f77e"; } +.bi-postage-heart-fill::before { content: "\f77f"; } +.bi-postage-heart::before { content: "\f780"; } +.bi-postage::before { content: "\f781"; } +.bi-postcard-fill::before { content: "\f782"; } +.bi-postcard-heart-fill::before { content: "\f783"; } +.bi-postcard-heart::before { content: "\f784"; } +.bi-postcard::before { content: "\f785"; } +.bi-search-heart-fill::before { content: "\f786"; } +.bi-search-heart::before { content: "\f787"; } +.bi-sliders2-vertical::before { content: "\f788"; } +.bi-sliders2::before { content: "\f789"; } +.bi-trash3-fill::before { content: "\f78a"; } +.bi-trash3::before { content: "\f78b"; } +.bi-valentine::before { content: "\f78c"; } +.bi-valentine2::before { content: "\f78d"; } +.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; } +.bi-wrench-adjustable-circle::before { content: "\f78f"; } +.bi-wrench-adjustable::before { content: "\f790"; } +.bi-filetype-json::before { content: "\f791"; } +.bi-filetype-pptx::before { content: "\f792"; } +.bi-filetype-xlsx::before { content: "\f793"; } +.bi-1-circle-fill::before { content: "\f796"; } +.bi-1-circle::before { content: "\f797"; } +.bi-1-square-fill::before { content: "\f798"; } +.bi-1-square::before { content: "\f799"; } +.bi-2-circle-fill::before { content: "\f79c"; } +.bi-2-circle::before { content: "\f79d"; } +.bi-2-square-fill::before { content: "\f79e"; } +.bi-2-square::before { content: "\f79f"; } +.bi-3-circle-fill::before { content: "\f7a2"; } +.bi-3-circle::before { content: "\f7a3"; } +.bi-3-square-fill::before { content: "\f7a4"; } +.bi-3-square::before { content: "\f7a5"; } +.bi-4-circle-fill::before { content: "\f7a8"; } +.bi-4-circle::before { content: "\f7a9"; } +.bi-4-square-fill::before { content: "\f7aa"; } +.bi-4-square::before { content: "\f7ab"; } +.bi-5-circle-fill::before { content: "\f7ae"; } +.bi-5-circle::before { content: "\f7af"; } +.bi-5-square-fill::before { content: "\f7b0"; } +.bi-5-square::before { content: "\f7b1"; } +.bi-6-circle-fill::before { content: "\f7b4"; } +.bi-6-circle::before { content: "\f7b5"; } +.bi-6-square-fill::before { content: "\f7b6"; } +.bi-6-square::before { content: "\f7b7"; } +.bi-7-circle-fill::before { content: "\f7ba"; } +.bi-7-circle::before { content: "\f7bb"; } +.bi-7-square-fill::before { content: "\f7bc"; } +.bi-7-square::before { content: "\f7bd"; } +.bi-8-circle-fill::before { content: "\f7c0"; } +.bi-8-circle::before { content: "\f7c1"; } +.bi-8-square-fill::before { content: "\f7c2"; } +.bi-8-square::before { content: "\f7c3"; } +.bi-9-circle-fill::before { content: "\f7c6"; } +.bi-9-circle::before { content: "\f7c7"; } +.bi-9-square-fill::before { content: "\f7c8"; } +.bi-9-square::before { content: "\f7c9"; } +.bi-airplane-engines-fill::before { content: "\f7ca"; } +.bi-airplane-engines::before { content: "\f7cb"; } +.bi-airplane-fill::before { content: "\f7cc"; } +.bi-airplane::before { content: "\f7cd"; } +.bi-alexa::before { content: "\f7ce"; } +.bi-alipay::before { content: "\f7cf"; } +.bi-android::before { content: "\f7d0"; } +.bi-android2::before { content: "\f7d1"; } +.bi-box-fill::before { content: "\f7d2"; } +.bi-box-seam-fill::before { content: "\f7d3"; } +.bi-browser-chrome::before { content: "\f7d4"; } +.bi-browser-edge::before { content: "\f7d5"; } +.bi-browser-firefox::before { content: "\f7d6"; } +.bi-browser-safari::before { content: "\f7d7"; } +.bi-c-circle-fill::before { content: "\f7da"; } +.bi-c-circle::before { content: "\f7db"; } +.bi-c-square-fill::before { content: "\f7dc"; } +.bi-c-square::before { content: "\f7dd"; } +.bi-capsule-pill::before { content: "\f7de"; } +.bi-capsule::before { content: "\f7df"; } +.bi-car-front-fill::before { content: "\f7e0"; } +.bi-car-front::before { content: "\f7e1"; } +.bi-cassette-fill::before { content: "\f7e2"; } +.bi-cassette::before { content: "\f7e3"; } +.bi-cc-circle-fill::before { content: "\f7e6"; } +.bi-cc-circle::before { content: "\f7e7"; } +.bi-cc-square-fill::before { content: "\f7e8"; } +.bi-cc-square::before { content: "\f7e9"; } +.bi-cup-hot-fill::before { content: "\f7ea"; } +.bi-cup-hot::before { content: "\f7eb"; } +.bi-currency-rupee::before { content: "\f7ec"; } +.bi-dropbox::before { content: "\f7ed"; } +.bi-escape::before { content: "\f7ee"; } +.bi-fast-forward-btn-fill::before { content: "\f7ef"; } +.bi-fast-forward-btn::before { content: "\f7f0"; } +.bi-fast-forward-circle-fill::before { content: "\f7f1"; } +.bi-fast-forward-circle::before { content: "\f7f2"; } +.bi-fast-forward-fill::before { content: "\f7f3"; } +.bi-fast-forward::before { content: "\f7f4"; } +.bi-filetype-sql::before { content: "\f7f5"; } +.bi-fire::before { content: "\f7f6"; } +.bi-google-play::before { content: "\f7f7"; } +.bi-h-circle-fill::before { content: "\f7fa"; } +.bi-h-circle::before { content: "\f7fb"; } +.bi-h-square-fill::before { content: "\f7fc"; } +.bi-h-square::before { content: "\f7fd"; } +.bi-indent::before { content: "\f7fe"; } +.bi-lungs-fill::before { content: "\f7ff"; } +.bi-lungs::before { content: "\f800"; } +.bi-microsoft-teams::before { content: "\f801"; } +.bi-p-circle-fill::before { content: "\f804"; } +.bi-p-circle::before { content: "\f805"; } +.bi-p-square-fill::before { content: "\f806"; } +.bi-p-square::before { content: "\f807"; } +.bi-pass-fill::before { content: "\f808"; } +.bi-pass::before { content: "\f809"; } +.bi-prescription::before { content: "\f80a"; } +.bi-prescription2::before { content: "\f80b"; } +.bi-r-circle-fill::before { content: "\f80e"; } +.bi-r-circle::before { content: "\f80f"; } +.bi-r-square-fill::before { content: "\f810"; } +.bi-r-square::before { content: "\f811"; } +.bi-repeat-1::before { content: "\f812"; } +.bi-repeat::before { content: "\f813"; } +.bi-rewind-btn-fill::before { content: "\f814"; } +.bi-rewind-btn::before { content: "\f815"; } +.bi-rewind-circle-fill::before { content: "\f816"; } +.bi-rewind-circle::before { content: "\f817"; } +.bi-rewind-fill::before { content: "\f818"; } +.bi-rewind::before { content: "\f819"; } +.bi-train-freight-front-fill::before { content: "\f81a"; } +.bi-train-freight-front::before { content: "\f81b"; } +.bi-train-front-fill::before { content: "\f81c"; } +.bi-train-front::before { content: "\f81d"; } +.bi-train-lightrail-front-fill::before { content: "\f81e"; } +.bi-train-lightrail-front::before { content: "\f81f"; } +.bi-truck-front-fill::before { content: "\f820"; } +.bi-truck-front::before { content: "\f821"; } +.bi-ubuntu::before { content: "\f822"; } +.bi-unindent::before { content: "\f823"; } +.bi-unity::before { content: "\f824"; } +.bi-universal-access-circle::before { content: "\f825"; } +.bi-universal-access::before { content: "\f826"; } +.bi-virus::before { content: "\f827"; } +.bi-virus2::before { content: "\f828"; } +.bi-wechat::before { content: "\f829"; } +.bi-yelp::before { content: "\f82a"; } +.bi-sign-stop-fill::before { content: "\f82b"; } +.bi-sign-stop-lights-fill::before { content: "\f82c"; } +.bi-sign-stop-lights::before { content: "\f82d"; } +.bi-sign-stop::before { content: "\f82e"; } +.bi-sign-turn-left-fill::before { content: "\f82f"; } +.bi-sign-turn-left::before { content: "\f830"; } +.bi-sign-turn-right-fill::before { content: "\f831"; } +.bi-sign-turn-right::before { content: "\f832"; } +.bi-sign-turn-slight-left-fill::before { content: "\f833"; } +.bi-sign-turn-slight-left::before { content: "\f834"; } +.bi-sign-turn-slight-right-fill::before { content: "\f835"; } +.bi-sign-turn-slight-right::before { content: "\f836"; } +.bi-sign-yield-fill::before { content: "\f837"; } +.bi-sign-yield::before { content: "\f838"; } +.bi-ev-station-fill::before { content: "\f839"; } +.bi-ev-station::before { content: "\f83a"; } +.bi-fuel-pump-diesel-fill::before { content: "\f83b"; } +.bi-fuel-pump-diesel::before { content: "\f83c"; } +.bi-fuel-pump-fill::before { content: "\f83d"; } +.bi-fuel-pump::before { content: "\f83e"; } +.bi-0-circle-fill::before { content: "\f83f"; } +.bi-0-circle::before { content: "\f840"; } +.bi-0-square-fill::before { content: "\f841"; } +.bi-0-square::before { content: "\f842"; } +.bi-rocket-fill::before { content: "\f843"; } +.bi-rocket-takeoff-fill::before { content: "\f844"; } +.bi-rocket-takeoff::before { content: "\f845"; } +.bi-rocket::before { content: "\f846"; } +.bi-stripe::before { content: "\f847"; } +.bi-subscript::before { content: "\f848"; } +.bi-superscript::before { content: "\f849"; } +.bi-trello::before { content: "\f84a"; } +.bi-envelope-at-fill::before { content: "\f84b"; } +.bi-envelope-at::before { content: "\f84c"; } +.bi-regex::before { content: "\f84d"; } +.bi-text-wrap::before { content: "\f84e"; } +.bi-sign-dead-end-fill::before { content: "\f84f"; } +.bi-sign-dead-end::before { content: "\f850"; } +.bi-sign-do-not-enter-fill::before { content: "\f851"; } +.bi-sign-do-not-enter::before { content: "\f852"; } +.bi-sign-intersection-fill::before { content: "\f853"; } +.bi-sign-intersection-side-fill::before { content: "\f854"; } +.bi-sign-intersection-side::before { content: "\f855"; } +.bi-sign-intersection-t-fill::before { content: "\f856"; } +.bi-sign-intersection-t::before { content: "\f857"; } +.bi-sign-intersection-y-fill::before { content: "\f858"; } +.bi-sign-intersection-y::before { content: "\f859"; } +.bi-sign-intersection::before { content: "\f85a"; } +.bi-sign-merge-left-fill::before { content: "\f85b"; } +.bi-sign-merge-left::before { content: "\f85c"; } +.bi-sign-merge-right-fill::before { content: "\f85d"; } +.bi-sign-merge-right::before { content: "\f85e"; } +.bi-sign-no-left-turn-fill::before { content: "\f85f"; } +.bi-sign-no-left-turn::before { content: "\f860"; } +.bi-sign-no-parking-fill::before { content: "\f861"; } +.bi-sign-no-parking::before { content: "\f862"; } +.bi-sign-no-right-turn-fill::before { content: "\f863"; } +.bi-sign-no-right-turn::before { content: "\f864"; } +.bi-sign-railroad-fill::before { content: "\f865"; } +.bi-sign-railroad::before { content: "\f866"; } +.bi-building-add::before { content: "\f867"; } +.bi-building-check::before { content: "\f868"; } +.bi-building-dash::before { content: "\f869"; } +.bi-building-down::before { content: "\f86a"; } +.bi-building-exclamation::before { content: "\f86b"; } +.bi-building-fill-add::before { content: "\f86c"; } +.bi-building-fill-check::before { content: "\f86d"; } +.bi-building-fill-dash::before { content: "\f86e"; } +.bi-building-fill-down::before { content: "\f86f"; } +.bi-building-fill-exclamation::before { content: "\f870"; } +.bi-building-fill-gear::before { content: "\f871"; } +.bi-building-fill-lock::before { content: "\f872"; } +.bi-building-fill-slash::before { content: "\f873"; } +.bi-building-fill-up::before { content: "\f874"; } +.bi-building-fill-x::before { content: "\f875"; } +.bi-building-fill::before { content: "\f876"; } +.bi-building-gear::before { content: "\f877"; } +.bi-building-lock::before { content: "\f878"; } +.bi-building-slash::before { content: "\f879"; } +.bi-building-up::before { content: "\f87a"; } +.bi-building-x::before { content: "\f87b"; } +.bi-buildings-fill::before { content: "\f87c"; } +.bi-buildings::before { content: "\f87d"; } +.bi-bus-front-fill::before { content: "\f87e"; } +.bi-bus-front::before { content: "\f87f"; } +.bi-ev-front-fill::before { content: "\f880"; } +.bi-ev-front::before { content: "\f881"; } +.bi-globe-americas::before { content: "\f882"; } +.bi-globe-asia-australia::before { content: "\f883"; } +.bi-globe-central-south-asia::before { content: "\f884"; } +.bi-globe-europe-africa::before { content: "\f885"; } +.bi-house-add-fill::before { content: "\f886"; } +.bi-house-add::before { content: "\f887"; } +.bi-house-check-fill::before { content: "\f888"; } +.bi-house-check::before { content: "\f889"; } +.bi-house-dash-fill::before { content: "\f88a"; } +.bi-house-dash::before { content: "\f88b"; } +.bi-house-down-fill::before { content: "\f88c"; } +.bi-house-down::before { content: "\f88d"; } +.bi-house-exclamation-fill::before { content: "\f88e"; } +.bi-house-exclamation::before { content: "\f88f"; } +.bi-house-gear-fill::before { content: "\f890"; } +.bi-house-gear::before { content: "\f891"; } +.bi-house-lock-fill::before { content: "\f892"; } +.bi-house-lock::before { content: "\f893"; } +.bi-house-slash-fill::before { content: "\f894"; } +.bi-house-slash::before { content: "\f895"; } +.bi-house-up-fill::before { content: "\f896"; } +.bi-house-up::before { content: "\f897"; } +.bi-house-x-fill::before { content: "\f898"; } +.bi-house-x::before { content: "\f899"; } +.bi-person-add::before { content: "\f89a"; } +.bi-person-down::before { content: "\f89b"; } +.bi-person-exclamation::before { content: "\f89c"; } +.bi-person-fill-add::before { content: "\f89d"; } +.bi-person-fill-check::before { content: "\f89e"; } +.bi-person-fill-dash::before { content: "\f89f"; } +.bi-person-fill-down::before { content: "\f8a0"; } +.bi-person-fill-exclamation::before { content: "\f8a1"; } +.bi-person-fill-gear::before { content: "\f8a2"; } +.bi-person-fill-lock::before { content: "\f8a3"; } +.bi-person-fill-slash::before { content: "\f8a4"; } +.bi-person-fill-up::before { content: "\f8a5"; } +.bi-person-fill-x::before { content: "\f8a6"; } +.bi-person-gear::before { content: "\f8a7"; } +.bi-person-lock::before { content: "\f8a8"; } +.bi-person-slash::before { content: "\f8a9"; } +.bi-person-up::before { content: "\f8aa"; } +.bi-scooter::before { content: "\f8ab"; } +.bi-taxi-front-fill::before { content: "\f8ac"; } +.bi-taxi-front::before { content: "\f8ad"; } +.bi-amd::before { content: "\f8ae"; } +.bi-database-add::before { content: "\f8af"; } +.bi-database-check::before { content: "\f8b0"; } +.bi-database-dash::before { content: "\f8b1"; } +.bi-database-down::before { content: "\f8b2"; } +.bi-database-exclamation::before { content: "\f8b3"; } +.bi-database-fill-add::before { content: "\f8b4"; } +.bi-database-fill-check::before { content: "\f8b5"; } +.bi-database-fill-dash::before { content: "\f8b6"; } +.bi-database-fill-down::before { content: "\f8b7"; } +.bi-database-fill-exclamation::before { content: "\f8b8"; } +.bi-database-fill-gear::before { content: "\f8b9"; } +.bi-database-fill-lock::before { content: "\f8ba"; } +.bi-database-fill-slash::before { content: "\f8bb"; } +.bi-database-fill-up::before { content: "\f8bc"; } +.bi-database-fill-x::before { content: "\f8bd"; } +.bi-database-fill::before { content: "\f8be"; } +.bi-database-gear::before { content: "\f8bf"; } +.bi-database-lock::before { content: "\f8c0"; } +.bi-database-slash::before { content: "\f8c1"; } +.bi-database-up::before { content: "\f8c2"; } +.bi-database-x::before { content: "\f8c3"; } +.bi-database::before { content: "\f8c4"; } +.bi-houses-fill::before { content: "\f8c5"; } +.bi-houses::before { content: "\f8c6"; } +.bi-nvidia::before { content: "\f8c7"; } +.bi-person-vcard-fill::before { content: "\f8c8"; } +.bi-person-vcard::before { content: "\f8c9"; } +.bi-sina-weibo::before { content: "\f8ca"; } +.bi-tencent-qq::before { content: "\f8cb"; } +.bi-wikipedia::before { content: "\f8cc"; } +.bi-alphabet-uppercase::before { content: "\f2a5"; } +.bi-alphabet::before { content: "\f68a"; } +.bi-amazon::before { content: "\f68d"; } +.bi-arrows-collapse-vertical::before { content: "\f690"; } +.bi-arrows-expand-vertical::before { content: "\f695"; } +.bi-arrows-vertical::before { content: "\f698"; } +.bi-arrows::before { content: "\f6a2"; } +.bi-ban-fill::before { content: "\f6a3"; } +.bi-ban::before { content: "\f6b6"; } +.bi-bing::before { content: "\f6c2"; } +.bi-cake::before { content: "\f6e0"; } +.bi-cake2::before { content: "\f6ed"; } +.bi-cookie::before { content: "\f6ee"; } +.bi-copy::before { content: "\f759"; } +.bi-crosshair::before { content: "\f769"; } +.bi-crosshair2::before { content: "\f794"; } +.bi-emoji-astonished-fill::before { content: "\f795"; } +.bi-emoji-astonished::before { content: "\f79a"; } +.bi-emoji-grimace-fill::before { content: "\f79b"; } +.bi-emoji-grimace::before { content: "\f7a0"; } +.bi-emoji-grin-fill::before { content: "\f7a1"; } +.bi-emoji-grin::before { content: "\f7a6"; } +.bi-emoji-surprise-fill::before { content: "\f7a7"; } +.bi-emoji-surprise::before { content: "\f7ac"; } +.bi-emoji-tear-fill::before { content: "\f7ad"; } +.bi-emoji-tear::before { content: "\f7b2"; } +.bi-envelope-arrow-down-fill::before { content: "\f7b3"; } +.bi-envelope-arrow-down::before { content: "\f7b8"; } +.bi-envelope-arrow-up-fill::before { content: "\f7b9"; } +.bi-envelope-arrow-up::before { content: "\f7be"; } +.bi-feather::before { content: "\f7bf"; } +.bi-feather2::before { content: "\f7c4"; } +.bi-floppy-fill::before { content: "\f7c5"; } +.bi-floppy::before { content: "\f7d8"; } +.bi-floppy2-fill::before { content: "\f7d9"; } +.bi-floppy2::before { content: "\f7e4"; } +.bi-gitlab::before { content: "\f7e5"; } +.bi-highlighter::before { content: "\f7f8"; } +.bi-marker-tip::before { content: "\f802"; } +.bi-nvme-fill::before { content: "\f803"; } +.bi-nvme::before { content: "\f80c"; } +.bi-opencollective::before { content: "\f80d"; } +.bi-pci-card-network::before { content: "\f8cd"; } +.bi-pci-card-sound::before { content: "\f8ce"; } +.bi-radar::before { content: "\f8cf"; } +.bi-send-arrow-down-fill::before { content: "\f8d0"; } +.bi-send-arrow-down::before { content: "\f8d1"; } +.bi-send-arrow-up-fill::before { content: "\f8d2"; } +.bi-send-arrow-up::before { content: "\f8d3"; } +.bi-sim-slash-fill::before { content: "\f8d4"; } +.bi-sim-slash::before { content: "\f8d5"; } +.bi-sourceforge::before { content: "\f8d6"; } +.bi-substack::before { content: "\f8d7"; } +.bi-threads-fill::before { content: "\f8d8"; } +.bi-threads::before { content: "\f8d9"; } +.bi-transparency::before { content: "\f8da"; } +.bi-twitter-x::before { content: "\f8db"; } +.bi-type-h4::before { content: "\f8dc"; } +.bi-type-h5::before { content: "\f8dd"; } +.bi-type-h6::before { content: "\f8de"; } +.bi-backpack-fill::before { content: "\f8df"; } +.bi-backpack::before { content: "\f8e0"; } +.bi-backpack2-fill::before { content: "\f8e1"; } +.bi-backpack2::before { content: "\f8e2"; } +.bi-backpack3-fill::before { content: "\f8e3"; } +.bi-backpack3::before { content: "\f8e4"; } +.bi-backpack4-fill::before { content: "\f8e5"; } +.bi-backpack4::before { content: "\f8e6"; } +.bi-brilliance::before { content: "\f8e7"; } +.bi-cake-fill::before { content: "\f8e8"; } +.bi-cake2-fill::before { content: "\f8e9"; } +.bi-duffle-fill::before { content: "\f8ea"; } +.bi-duffle::before { content: "\f8eb"; } +.bi-exposure::before { content: "\f8ec"; } +.bi-gender-neuter::before { content: "\f8ed"; } +.bi-highlights::before { content: "\f8ee"; } +.bi-luggage-fill::before { content: "\f8ef"; } +.bi-luggage::before { content: "\f8f0"; } +.bi-mailbox-flag::before { content: "\f8f1"; } +.bi-mailbox2-flag::before { content: "\f8f2"; } +.bi-noise-reduction::before { content: "\f8f3"; } +.bi-passport-fill::before { content: "\f8f4"; } +.bi-passport::before { content: "\f8f5"; } +.bi-person-arms-up::before { content: "\f8f6"; } +.bi-person-raised-hand::before { content: "\f8f7"; } +.bi-person-standing-dress::before { content: "\f8f8"; } +.bi-person-standing::before { content: "\f8f9"; } +.bi-person-walking::before { content: "\f8fa"; } +.bi-person-wheelchair::before { content: "\f8fb"; } +.bi-shadows::before { content: "\f8fc"; } +.bi-suitcase-fill::before { content: "\f8fd"; } +.bi-suitcase-lg-fill::before { content: "\f8fe"; } +.bi-suitcase-lg::before { content: "\f8ff"; } +.bi-suitcase::before { content: "\f900"; } +.bi-suitcase2-fill::before { content: "\f901"; } +.bi-suitcase2::before { content: "\f902"; } +.bi-vignette::before { content: "\f903"; } diff --git a/site_libs/bootstrap/bootstrap-icons.woff b/site_libs/bootstrap/bootstrap-icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..dbeeb055674125ad78fda0f3d166b36e5cc92336 GIT binary patch literal 176200 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

    2+UrCZlNAp`)&G@jg{m-!Dn; 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πR(XEyYV3az{Ot$Y*f93mYq^Lnu{qbYp!X!TA9&! zE-IItGEKZ{gMP4Nd#xGUa1=;JG3Pv}=~igMHBlVHo@se@2@*-F)x;^M`yc7LKu=nh zhA_grH$yzgP~Jdm()hD&SH=^MgaTh61QR<#GK=rQaO4x6U2~|tOMDBiVFfUVF-$`{ zM<|?NloMDpTixy!w|>^OBf`pPm2YOj_yE1m)YZVcW_SuUG!acvGpOPj*Q}t^SxvY6 zMw@@dD@iJ>i?)HcRjHqjUAt+&$qDU?<9a&##C}v@AjXWNIrQVpFoMK^u?a-Ih|y&6 z=4{#968MJCMOP#2CpnTs0ELJ9iK@U9fx#`V3x4B8_-}*}d01MIR-{eoG)8!ivO(o$ zI%4N8Hf?cCy{r4fzL-U^tjot~B7zSB-3Tyoq3m^2DlydUix~QaQyJ}W_{9hLb_FiV zBRa%Yv1%%yC)6>536NXkNE9!=fCo(j!nIUK4)ZxtPr6&WU;5sO9g6)()bis7tAirkm@kH)(n*}lhV+HnJ;M8R_7%gBj^6CN-l#Q*Co`X z5m#ya<-R7)lZ>Gz!2p@$Re;__w5$p=INcYnLKWXz+c`xSqe!e*aXLCMV(+K%gI}k7 z`@Iytabxq@8<6JJ%XqLjfd@+L68t6%Ie4-$HkTgln?EUi5Vfc18dX%7q-*)=uW4GkCT3cDubQN#OR zQkYUl8^)UQOVC~N2}@nxNz;YHOH&iOFqYxFClW#9k-B_nJVP`sf%|OSFMUHAV2d#< z%z4sjcNT_9%mw#BwMTz9EML17-HIKcWd9??}rG#6vLb&&H3?O}N$|=*M5^lwJ^cA=P>aYVnbJ!tJ*?!H zs{4qfr2C6{o(}>QV&IY?8aWQRaa}%?O5*V1j$Nm0joSqXTM=I~87EN$?E`=T+CI9Vj2(a|=eUl1b5h`w-Aby?L z=j)~`VlYY)MqH!xXCpM2mC%gX$YS44jR~T3m5v)ah=iva zY6&XRJV!QS2U>?I*;@BLsqSIK@akU*$nw#CQ^@zZa-Z@7uzefnk9^rbhWQe`toigI z3Mbv<>)6~*;vrqTOyRK)r!$$ubUud*xqo(;qF&~ywKJLZ`o;AkfnhT2wJ(YELt)vu z^Q7kdZ=rFaISnee&R&wX(84(Z zE~gM9Hd$Q4a;h-uO)i}N)^iVDerl4k)QnUW6y8ZcLx8^LKvIM~1d)(A|!u(Me?xuPj>HcX<)2BWg4C9Z1e z@BL9t31v-lwpv?`rpcj#ErV~pC@SBzbpPd?&Z|Y_J1vU1luZgVxstZP{hJ8keohNo z3FcC?sXK~7TaF(wYl|*WgUB*5-~wl<9;8LGGvnvcxCdp2u^BJ|DkhuIB} zQw6-SgLog_ytu{ESd%-r3vcHW@{k7(KS|z#lIm^sxSX_iYSCV@ie6V4eD8;KS9Phy zppCZ9+<)5g;L4(&;{GonK2=5GJw9D{Uw#8+V(4v4Q`j6@G7v=}Xk;+Q6wPYu#>8Ip z>SWv<6e~&y9mLDrlN?QEhU?rB94EJ0ar^o2m(N%P#!kLxoKR&lZ!y{EX}XGrbec?5 zJuYlZ%SMATActy8L{^)oX3!dppuFmA$5((gPS$I$y!HxTPr~(Q?DhHH0T3h%?1cp* z-~8DewyhZhBqN(LJwn+M^R#7KwjyiB-MLhw%pxsIwwE;zUcm?O8A!;Ofe#q1UD|PH zaIdhC-`0US78mhxUY=qj^tu}dk@Bwd}P31uP0{8|0Axx#4&@?q= zj!ROY`4nIA6*jUwH2G%QLE*4$mHT)?)q0~`-L6_RVyaSo?;U!`B9$&f+3A6HL_=!T zTi+1V5mh4=>UX@is;DfYmeNu&1xPf|mo$3p4awy7mE*93+=`e+ZCv_2NmAF=168W3 zD0golD;%;yr}rrOfyG#pbp^x3k_@|I<8EcF94kQcBPrg^G^*Im74VQO?WX$MH&?b~ zX$n)-n=9Ihay)!+IgUY+3=S&1UrZ@QAskd@9pR6nj+K)GG~Jz#d(&KdH(59@j;Q+3 z&6UY_Qks`;x)@$}yEvK&6g;A!Avvf>eqCVX=-S=rhIP-z4U|kN6_%!M+=KJ>yS2ZT zHgPYGZn90B!thNth*RZJEWcZBp!|x6Ksk00PU;66n+KKQAE{cSfXKsvd=4x{bNqV_ z{IjbZ-}+rB$Nf0F$+Dcv_)V7P9&&konZ)JIZgTVl;m(*XG)kBu!XdNV2i|Z4 z5WY;x{q-UKLug72qneb5>xhH}GQm{=t-Z#9s|F`Ye{H?oO@!YJ zFc~ypC!{b0g1-;8b$X6PWDD@**ph+lz!Ow#!l;tCqoBe31Dnj!Zktokn6xf#k9@Ox8M>uFNNpCNuV2^_?%104QQ>{9aOdmh%V?nbA|4(T zD@qzZ77q1L-{3u%Hym`BYYacZz3$1NPFYuQWEJ1-+g!o zDd+K7Ydl`dDo3zwaZsgR(*zY_Xwl+(6Jh!6z{iJn!E^oAoN!O1Tp_n{X z^>B1%+e#N`<6SWj^$hOY*nAhqhc7t)czAiF5<;lqQ@Ggu9~H%;mg@7pC0o|lQ)7=! zl!VQ9ntW)cX9TqTYOXZju=E#o^QD(eI9Y#lx+0{;m7Sygu4b`%pi#alU3rUwg5*4> zLQMto#x+J)cBjU#bNi?o%++S4Bhtw{{_AMAR^SxboG>{~CN>x@5mCqSu*mCoGp+4+ zj=UmsPsz*a6zna$rZ=;S|3q50a0q$vW`&#jB1kXi_9Wx8%if;*mSb;rMu-RIu8>VNx>g_>LcC|ya?7g-h zN$NOFj#QHtIV%2mJ>Qd#RWi1jQpok(RAMMOw@X$Wgk?k-Zy>m|l!C0*c+P|T5Dt)c`B{zIq!n-KrR$|SKX5-k?t29z>Md0EEoiP4#XwTv@Ga!x zxu{M^J^K6z`u1U{5nI@@Zp&+MY2c;F#Ys~iXtWg{N~fhaOYbP`J@c`B?yYnL?d$sK zvy^WBEVUeqS+?Wd&n|jx);}o^F+LqyK;sHQe^yTVjlg=*3XqTdBEkbzUxXGcyD-Fd z%^!)=)+c0LX1>RmbJAhV^O>x_g5Tb%lxijA*3qT7$8t+w@zN9fOyX~=V_PbDMyEvA zVVdv^Q7v0icgf)bMzz(d8ioyOs94Ob%vMZhDgIf@SDZLf9zseUQrs6% zTdz2+dHA+E-*T?`_Ep(zGKG(xvpEJysv@u_OxJnaijC^)mQtvx6+SqwErc9A)VF1s<=~-VXvn(70brRd z+djt*4Hs&BxLZkkPi!L%E^9xR^%?0NXeBR7e@FV!H!k(udU?z&ncKpnD;|c(;PWaN zP>qfH#*lrA3B8^|KyjW|6bE}bSJoe*YGr<&vy5{EmBOG=%sf@C4E=?JLUiT6_~GlW zO;8SELW}rEd1`Hy&L5eFjy|3%(`8}iyf&gKqS=o|zMQ;18XU7m8fK;{{QxD5C`K6E zd4NDwya2e$wm1ZD=0+P8s$c_Aw+fZ8OVXGLY>b&JX`fr*sNnN$!uSa1%^UsogvYn+ zvi>-B%orzEGJ&vj1$*&ol0DviCa!&R)R)%@la=`r>X`~b*C280ypw? zx58k=_3@Hi(lz}Vkq{n!%`$5hMb#6hG#3%ePU`p7Dz;?>%XH2)R*x5&yc zuBJhBUs1Fi3taPUNhFtxjY{>?7sJY2ZsqWgcWm>ADlO;nd zYg9Mus+5jHrC%m~>IXi;e;e$&c%kTrF8;QJTloV*DIX94JftjLNcETVbTc%z{;rFu zi9EYIvyr{s3XGd0^miO)=4M4)i3#L@NVh1|&9Cd)9JTaseklz%iwjXdqSHAFe{f-K zjcRsIKjz~J{EA&z4^wic^D%4p&Sn{?-yF*sU2x~VK6h<|KDjeaLG&YYbE7%SVaU6e zw$R1#wy;*7SbSLDJi-w)hQhKk9l4E`Rb4VDuCelH&fMC~R%v#F!JuJ6GYvg)}Wj&!&5p0WAP5yGc3vm=a-X)AI2 z^DV49r;TCTQ#p!Kek}d^KEi0ggE;nipkZ_kDCe{R=aOM|_nAB{KbMFQvp5xTG!h|rD3D&aS4p4rz@b7DTm(D8%ElMwb zKY;&Qc$m+xKD~D#HpVn4yUf}|QMR|fj*{G`&b+QVv3JSst^6ZjXha_BLqFS(v5SrK zwdN#7;-PQ7)}di}HYo*Ob-BM>tuEJKfVVnNR+37iW9t4VYWT3fTq7NPJXaa@KZnzG zpJnt%;3ziBqTE;!*``ebEDT!(UHfId*sa9@LCk@B=hsh)e&2z>T;FTglI2RPgY?h8;!DwMwyTE z6G*d&t1lYsZZ9ieFvk z8xnjI;UauT8t_kp-x0VmD)ov952De|#b_-VBxCX@TYZk)p4yW@v9QeDpq~I$C*@T0 zMsh<*&XWF6h>w5p&yL~@=BQ!_ai1 zszlcevJxF*+WI;)O^NF_Tv~4WYaz@f)svLYLh5LJtc7a|^(zizi)?;T)#Dj&eVyvW z)Sg!$Wtg)KVJ<(Jw1F84Uue+J!_uA7=cHf2nZkyEm`G;|BC1v*79P?lTN<~P<`4;k zu7HW^im+OF^vqs&n8w25YZh&-$8D^|#9jm^s1Dt1JvCHio)mrk)ahihGY z#*Nj7-PB6L<8UeK_#&1Km{Tk~wGdjGuF4pXhA5g0a@TAa;yHHRDVegaDjuUU8ZJ1i+_wL=fBRQ=F3EK5;zeU?D#x{h9A=~>GB!m#`?Vj`kOoRn^d8uPI91deJW zZjLiUhIuE9Ur`?w4<{V8hi9f#osB_KjSM;)=OJk83g?M4uP_VzN#KF#9qWNilvWFi;?T) z)YWN4nN=PADQg=Wm2K-O-BD+i|FLI!!hW3f~O(JSr~!myChw&&MrpM%Ua>LY3w`~V7>IEQe9`NZ}0d@X9vbO z=N11cLT{0k^NM_n7I6VbXHkA$4HjK&OE__rE|8gbL}xClM3`Sx7pT6uKC zI9oAsdQ5sJ=-wx|&pB_cXL46jY)6OFCAUjDsS?GR z10Kw*ds7TV*k~A@8Ij~F`kq?17S5Qaz)c~hIdgGBm>(+&F4Zc2ZT(%8*LKLoR@fFh zn=2;qL6$x(*-|T2|WSNT<+b=i#MuW*RYrsX>w=0XL70KG=u-tCPk<6HUfvAu?{HZ@S z2A?r;lB8Yb@uYM~dJaY>|M-T>11ka(FnKVv>xz(}O~kCk0mKpB><%}f&a^j&I3PKW z;9AEC+DA^7LBcCUT17U~*glix*zV=!$l^VVsCCS+h;5L(G}iMnBZf^ZH7UD+pw%HSuI;8 z`X-CDTA$awBhqmmmn18YA}Ed6N6B{7#cI+Nz^Ek7g5a!|SFtRNvVYMp<5s$UhQnE9 z%dCB&Rkvh_Vd#^qTi0-&ea+G%W^u&SY2Z&r{z%IFZT%GAsv}|K`-f9}tLYRLz|DrK zvqY|p!nQEQ5QCq^-be_m1QhYf>C~ScWAv;57dxX{UzPbHt^DQd*T1GImyint#>%gZ z{N~y&-YwQ8UqS=AFOew9@e*oM1SN$LefShR=D>*DOipzFY3$=}7lvpEb4upq*nP;2 z<)55=WY*R+Tb%xbEQ_#Kvi$29toe5=m>*FUN(WlxiM%>_9;+nH7SYp_K28Bq#_(yD z%Uqi6zibeTJ;W^1@K-liUruxR^)%P{FEO1Eoxw?$QXD(p{x_vV*^WUJr$auL306qN{&hf~5(ipO{qhF%HiBd$(yo3A01Jq+!j z`P|rS7xnvDU}c9s!a1A9^NerlKcHLw5d}EZH3RoMfNN7*Nx4PeM&Pa?_)IzXehWGO zIx|i7^^o&Q;HYw^NFfB3j`1zlM|Fu{Kj%?gUp8roYN%YFxHz@l6UNU|lE8;C4{t%!2I3A$gXX^cUCFLOF zmUblvL!tkJ$mEaBVzPyFISzWXfopDM4^nIQx~FjY7uTU?Nq>I*BCMk%-8jzfmyD8P3)3TT{gSEFK!`ElTU~)bwUzY9>CB{eady^PhV)8u*HU z%k*3&nwd>Zr2}p zkeigweXcWT&$t#<*ECaR#4rexO>IrpOn0U|aNI(?Je~U;WH|B|iVESQ(>+AV%kk2DIKOpv3yo`PM>Z?P`})zX(Hi!%&5e1b8}l9jIF-fkl|Uq3(w}^kNaUBZOo+0=u53qzTf_BzM{8*8a)(4ZKy)KfJr%s zB=EA^EHZ6^_;OV|OTMMj$kiK~Z{u?N1t3nhu4_LfCf;8VQ~HXhQn?}1$P8Y>;X_+D z7op#XWBw1uG8p%wXbwr$MOAJq=ZIO{E5ZGSTcq2i`}5If5@%RP{c)g^v4sf{9Zg{7 z;8J65lF{p@yYZmqXG?XAn~mNY7twJ;)6IJ61->rk>PI$?=x!vK`7v>NH=jv#aY8^= z>ZNNIbhEtYoZ)b1TFJUrs&C;pZ-)6DV=$3>0%57d0v8;+WVF_m#h(;$3TB|iA432C zp4?6a#!>lVl}oY(mdsg0gnLV^LSkTcyBN7*WCPnSSi=@=nR|oHZu^3ee7bsdNiYY8 z3pxKFi>pV6t6O~jYU)}pDi|58+JRW)A%T5?3y7HMN=wEvxmpm#n{_LCGh+|nJakfY zEV91l+t;`yx9#Wl&gk#6nXW?P?r*~Jba!j7OOD7xU@$>PNBC%%51mTGS-#?$Y42{` zhHP!WsLoap2PTa7Dl{ww^eGtnsMl0_-3(}^($~f`{X0Sgje?4sp-IfpQd~m^WdW(s zkMo&{=EF^@=#Nj@0_Xkz63kS72K0c#o1VhB^rIt3n-i|E*%2m{H~i(0dzH4jn*#1< zGqw7{FbX|afQX6JR9rHFnJDAG;<55D*&*MR;h^O3KOsz=H?1fLBh!q+AhOJPYRGgR zAHZXL0FUQYMZV!L`#Li$g;63Kj4>VBiAH z0G@p$v^)c&+v~RJmuB2fsZuh^Ny%1JquxO8J=cl-c?bFu*^n7ia6tsR6{gyHV7am1 za_R+pFCKq(QJV01>Zhx?eA#xHaK!l&xRQI4h(1-=p}$0#rdxz4s&Buf{r|;%3y>vO zd0wA$y8HC&cK7YR-F@HlxO4B_-I<-)o!Pnf&aQT}TCIe%gQNv52us>UDiaDWM>ximPmEsR~KqGImP1pb}KBkg8QBPMHwOHXBz=#UlTI zPQUIvRx5)l(rkC%ex3K}|3Clte}8_wA_eyUB7RgJDK4bPrFcIM%&;eSq&{Bj(oSw? zK8cp*H8kSliWy9~C@H{*!v3=^*4s)s`X1`MAW*(2cE;7K6<>w#v~9q{SDpMg&EU5P z+|}2 z;f{Nk-+AfHx7^fxszti*`@);w{41Zm?+bsHW1HYJh4@w>>7e0L=lE|KEu_n2sK*H+ zKH>!9b%1P&IGka8adc=9)q+YjsPVAo9qd=N{;i2)*StzQG7MeQXKMa|n!y*tR^#A- zLq;Vus1w_&$7_Qco$Ev^E~wP;Jk&{0uehX@;~f7?`D+Cud<%X`Oq4Nns`y;_y4JrRPGtMO*ikS=+9$=)~}3H z0!WE8>T!5|^r^;$M&rV#8;2LkD|5}+FJ;dj5YG;$pUuLr@jduDKiPPo z(Rko|&<(k2-S+-_SAET#U7wl!-raZq-ud(Yh`3?Zb!=|mcnWZbsaS+l) z2FhcK((k1x;k6Vt9Lai4F~Tv=7Rt+cAPaTMO*gC))vg4wAM{#&%dCXe*?RZQ@mvIw z@mOT#PYjI@7Hn>MeycNAapS>itKN8P5Z8va`0g}QGN#tIq2EUUd_aT0$ODT@PCd|P zWLU$s@iN`+5YwZtp_WNVhZ=YYO5p20YHAd1<{JN~p%cr3qYNXh{BIaTeU!kG-az!v zM6ePjGSI8osIqfm3UC^Z8%-pJLqNxay_;={>1ABrv7DB^jO>Ce0(wk39YKUp>|x47!iK zKW??+w}(o$KHF9PT&%12a5kEX%2UL~-OOUqA!2TrN5?%B+!7?4$>!PSdh;tJYArWt zM7*ZgOB#)^71@5JG9QkQ9sAnX{_)*+U#?!L)sw(-+=?45#DN3XWo$KF$Z9L89E%q5 zRpe*MBW~pf9OuO$@_DQchPl0ZEEGx}!{2a}NNc6OSZy?VjmCcn8jXc|{pO@^L%ogW zJl`Rk^3q*_XZeO-p`QO@&3BiY#5s7!2OA6UK;t6b&})22gGp7LJuFPG&ejnJ9sK&bV{wR9HlL>+r=hpUX<{wE^K0&*;mPopE)f?om}TI5ouJf2u_nj`t{22~`nV zrs6`Y%5?e&wQH_hbBG8TXmL=iD#jyJXBw{4N*Ed;ps)3gFHlR>a^LJFfo^$^^1)ZJ z29OPDw2HvPWF#D%a7|Re7UAbI`MFh4GMsRK5TKG290+tXNlg6~A0Dg@s(kYEtiA($ zb>1}NxP7N()oSxWFkibPY)6S{&aY;&$2H|e&=?j(#6>i5AnH{{SVIgf8biup|JzMs_M^5s2EhxK@15w$voH(YWEZ#DM~5sd!xiKzsuks``ccO6Q%!I zKkjF7;QQhyOrEijHwt|HQIJE|hfz7k`8to*g=&$m5FM4V)Mf8e}f2*W}BYs7u9HyEnH zNkk0z#|_mazI1@Q&q%>5#5nz!s#8sUhYEih)z!z+cIByE5PROv={g zre4C$#krMPe0NM5DEj!~yMED+B}yNM%$66IV+-`sxM44w%1$|C&s2X$#7IJc>3Zp3 zwhg4X#*I>rqZC4YpHyBi@MiBmPJd~+N!3bbGAU@J+7-0^u^W%@y9n+xtAwNSIuslz%&0NMLVW| zh<^4ncO0G|%G40%<@_CnZcV-98*-PYUrPM(T^?{Rw@K{_V*ayX2E@K_vydHrrV5(e zU_oDaIvF!7L&E19YoRgy&$w= z2bC+V*u&xIDM~kl-1`)sed+){QChzQ4IJxGDT6@EnA{1DfGfCpHuq0`UdlNu5>==a z{yzAwy7(fM-?oGOKEF`7qy8XG0ydMJMeIrWdQ%ErCu5{7jMKSVc~SVNS3qN(E5#V; z<(_prM*SthP<#Ph^xl9@qcDUuRhl2SZb6s5ElqtEtL|BW(Utw{YAKDS8%c$)<<^=~ zf?Ect+FOnfsa}xG&E<4$<4J^Le39G17X@&3x@~0a@YEl0E>CB=%a{VFETSF#?F%5| z&=)AB&uc11H^WVv(Ev}wMoHtAqD?XNQ%*w=q;D6IL3TRk8QL61oY0}xW_9DKyk}p< zpXadN&Y>sqq;Me4;&Wg+`}!&Gm2wizt)I_F&QsGV|KT6bzVwrloAP8j{c!f&xx9SW zpjT(!t9&}0^->-36dVRxdXW-xuQXlXSHqN{w-3xxI05(9rowW&1uH&@v*pn&lNaYkx_xJ-D9Na zz9(#kp0Dp3FAv&QQWu_|og}gB2i25&Z7S`JSC%@~2|}=YD58v~2ayq47Eic|kt<** zskKT-oSH^<45!z-PR9#%%hE%yBE;oeyDPlDqR9=f#2mvAzthBfo zBs6CcjRVmXNk%9FiiUJ)+QB<gzR!%I87o<+d9BvPKu_)I5yyMsIgt?89JArHkGie*fmy=MEwNtC%)kdMOW@_UEb= zVtnpr7!C1yNLf3bO+d-n%5`{@nUSY(MLDIsPI)UxK#B-z%n{a$ak^6-1TFj$_O_O@ zdFEFCWs>JoXfitk$oEC{qx4_SI*gocvst5#J2T@twATDZe94|Xh}=UYY5jPqfB#y8cIX>A~JKj zhUCKK`tYa-f)OWW*#<`1bOoI(a(%ui9Q~NsiW;havRu~Zh{c~V9E|6Jg$k}bYmsWV z8r5nM?8qd2NYrytv0s&Ysre@94bTMNH{fZ4@Yiej!fV&ArTw)>dSXRvkjGr~D2}T! z+5{3*_R&_!Q;jV0$RAOIfl{>KQOo$oacc8TdXq+uen}(VzkOI3_3t5M7IY_O(1lHI z)8qf1Tht3ZqJ8No(QbP0J!rKz9;Suv*Cc+yAvfOXhqQA>-B*@Q#- zj?D|PFPCEdIJEP%+S8I?_4`?L!7Oh}`TA>$FWn<=*=X8%ecHXEw^t6Y>~Ri*Cui%% zVQFc3J6$%0(?MyKSy9|vA97L;#5LuFa;sR^y8ylZ-O8iFyKY}~xrmpP9gKBJea+MT zSQoe&s2jP@nOl0qM5 zf9bXN9QlPKZZK>Tb!}2vKHQG98ng)Lup-LZ6?wK=r^HoAq+Lhnz} zSw%}+Ejffsfqz2+Y{H`c4oBm zQtVY&G;vrIBhCAu6xnzu=M2={CzQ`B|4jLp%D>5C0>(nf5Kd@<`&q2mxTIJe(1lon zS%zj6_9Z+P(o3=4Fwo`F4!l6D2x3);7Y~XB1@Q=00K8(82*Zqc^(c3wz|XS?BadI9 z!rCXz6RV?b!`4k&Q9V~xD@--in0toG6P0LM6X%4crV%y4u5M{DTxUr7X_>Gyb*PCQ z55ph;;r4n@s|XMh4=>A_-%2rRDa7xsDNv6rWlwX}@c7P$Wy;L7ka_evNtYhpmGAP? zQ>D&ObRC(cTcuy*Byajs+h^X!AIa8=#H!pfh=v7@SBgKP6G*P-P3e>@#ez*4(8Y0#LcR6c|j*kXrXi(GhHI!L7h*6%#xMM_EA(7#5rg@s} zX>i>$p)lf3&9k-Z-PV=uv>|ID%<80Qrt}Gr4Y*~oSM=_^Zo6nm*y7>5LmFU96U{pq0K-)N`w8)y>yq+2)r zm7yCPT<&Ic{gTonlxDabGw`DF!<3`s*uX2i1d>?zE%Bk?ff;wnGq!qo5tY8h!>T=T zoQi2#mg_iIK^N=kY)jQa^U=4eGmdN4n|0H5W-=WhO`|1|X**LHj-^xo+G?_IdTX<@ zRP7JgyZ1}?9nJSN=%hWBdWJRnA;@#f$R3E3(n{ffHI_t-JENVXR^bn8mbQe>D(cdb z_Hia@%2{^?4XkiXZFQ#0jK84zw#bOO#ULYxSVl;Vx8pGy$KhB}3NB;JPg{H!cIOBN zm*78uEZk_`43I7Rea2>g>jpE~ZPE#C{Nlb@&9E?-&%N^at#ax+-kq-(rO&rtrj*~> zvm|?FIQ`BWgs1DQBY|o~mLkDwGu-cZcls|R^?FjNMR8cE20^vr`o8Nrm5S(GX1$!J zescWO@x%>}ZLGn~hmRbtR=ob9zE^Q(=CjWBYrE?}o673~|;`6@(|F&==>wO$pn za}`+&jg=L_ytA@m*pIKEp0OephPR}hdJBmoMBwGnwu49>AZmV6*8lT$NW^j1MTA|< z20BmHgfF7Z8%R<;ttY5m2E$$?Rgv|!Gf)@ z6~b24ehj*&arLTUUlY+E`eNy|Rr~a(Awf-ja$wj4J72dXhm@Mq6r~2WI@+OCjYYw| zosk#*TO}fbl>iFp+jo6}YyUA<`pAG)D~Z6zBU0WcAl{HQflU{iV!o0bxacjZ>{<%p z(iLE{#5aOa5ZMb{q;Ek(Qzqetq9mht$pzI9QFWkF&EzZc-)X#^H>tW|mI|clj{2sQ@Zc&U124%8A4cVKHo7cLl2=m1o~G(r zRyI&ZwAkCiwHTy3*x+_MmAic`UhJt^Y!1CNr_U=(%2^n(50*7%j3S`VkQ%xzED}U~ zigj_lmgGl6^dj&?S;r&vbr>KL=LA9eMi-Uo6n&c&_dAV4_4=Wshw4>VrO=ho7M6Db-}HiM3Sa?yo#g| zKaIwn1GgQhMfc1NV4r+=zN0NWES#UrHxBngGPlu-42HDq8ub&CBDn~zqGHfJLsvDX zaaA+zC^nOd?rVgqM2V6EXU_HRih=`Y4s^$VT4j}Gt$W+XT-ZC@nA@0p(56&3ahi!d z=w~`*&{Nt_$+~7FF7%s<9h)krwqr4x$&uexo=CX}GQySQD1Pq+0|76Qu&j>1&4}7O z-c$*roJB_>#%UjtFl#1kE6iYTXP_{H?hJDhXlI1=;SNoMn=6PgmAcCRRj$DIZb2aa z@$I@Gau*(QtNdlN@P8nsrC(ZNMB{9Dame`a&S} z-&d3k!9}5r2g0WY*OahVBz!*2_c$5HiCl%`;t09}2uC;L#385^xmekxc(4CJTC$2L=L3l2{bStx zNKayFLNRL*o9~DMhZ^^|B@XRFRVcbB_XDnBiyNIsWx*?03BQY~%^%|?UngIHdA+9e zMI9*p5weRHm4Kw=qr7!)ya{owzWbW3tl+nuYB4@|#m)NrP?$K$3mnxbh+GEibZ)Gn ziI8ECvlO}JSJ#rL2JP$78G)?p4MFgt;-o7Y4}@K@u8j2RAd-#o5{!IF9{iWEt9~=`n{7kWZI#?g7&ocWYS6CU zM*PKU^ak%%qj^YsjyI`iVe7jK4@MZ1tpw&e*WX&x-mR|rg5=H49~ys_}D9gXMu4j+V7ZhVhSBR-me9V zj*ImL-EXwU*VmA!GFeBMST8O4!RZz~S&qmEeUJxR6T`mvw9T)|Vwuy;Iu(@>Bcgu$ ziEYc;e!?hm6#W0q|Ko2n>`y%Yv*dqCaMFZI8^+FQ<+UOTO5R6HN12rarh@VUQ8pn6 z9j+8JCS#vq*}3y+D7=m|zpH(j$1NWb!~Sz}7x~ZF#&ghnnznHTRkSOHePxOkHRC}$ z2lpc&KHWWk*^jZ)Z5#I1MKrTt3`HmG@B2-9HOAugVx;~|V{zXYsej)QxqpPzLWeE) z>&;iztE0J$ZVYR0?nZiai2eCRZvR+*7hbMI_eFr>|7;mgh~8ZI!(=fbgbzGV)_XJb zBq(TWzaswo82R#-zf1!Et?#QoMjlH(^@Zevd3l$VBg#my>Yh_B2(Gw+QM`Zz|Q-6qwht>7gi{r>_jk$}SJm^3(CpFJL! zl?YTw=B>1A74)Q;ck#FCF4x!#2j({I3xk8hcN1&anI|v(MPUo)gVT4P9*E5sEK4`3 zrGf(P`oT<#fb{+G^J9tvFdY8o8LNM@|8!&fk$>oZlk0KgQuX+m*^(80n7(IlS}E6O zB35cn2<_1$$rv8JnTXAh%TrUXa>#HVCwvB7h=zP1OabHChpDQznP{H-vnLoW$?+0(~gqyEhC>O)0y^}Nh6ut1LIRa&C2?ijgFUl74Rp^#uL9>7=B8F~@ zG3OW(FX8$C3xk^>oXU|TWU1=a$K-tAH^Mt=C)aBB`)ot6HJj!`u4#L!N^Os|4Li7|7${gByg)^x*upZ@x)23nD?nHF?&aa`3*lW5Nt96uR% z*@`HI66#$FW2Z|oveq)?!x3x}Xoj^J=4mTzeK=mf8I(UNnEO9aruu)B@wnq2;B()# zG|AhK9R7Kr07BhP%-N$w*ntmtoybrR%<*5_i|t=4_(u*){*nIFG(Qz0dU~QKOGW4S zBb-uKS8>{2T`e7N7mXk9x+srJ@!1e}GrAt;W|({V?zXQU+Z%BcvprK?WqSi|{uA4) z7;r55V#>>-D;1>%Eh%{fVHU(G@z{_LIW9>I(a)@w{41kwjLx2|oIN`>j5BA?j^Ot@ z#SgMz7-MmzIG5g#+8@(&e3+5CN*{d&*75+kX~b!U{%nJJu^g~MusWcDusWc*wjJYf z1ODoA7miMz95ExfX~fv*EFQAamiSTJgF6zBZi3U7%Xg%=izZ5KiX2NmE_qzm_1b zW4wsN%I#<&7~`rR5|0bIvMv(Y!rxHX0gz&Ali(ttJR1*j`EW&YKZ&S~aSd6a==yM( z>M}q}mmuFf*Lxpbm~o7D)1A}TDz&PrF8J>3hb#w;0IcR}8uuHvUK^MyW8^PsWf&P| zwW3vYM-LFR#hIl(VKqFLTGhbmB~1gSo1Q}mL(1#Qa?9(GRlhzkd911GZT>ubgT30p z3P^ccV)4eQ*ojQ4+6Qj|<;FLd<`}J6YrzTvt*Vnh(M(3DW`JC1YLrxU5!d>sKUMw; zzK@Br0y62ll#dA(lTEA)>0}C;R8&j4^k$S(;S_=sDVoo22I+Hs#L=%7=Lop!QMegv zF8v#?jmBI+7zGM)Mi|~!$7`GLGI$^nvaeW!7nnJ`9a*jDvB5nR%5{x$^|%J2DkbQw zW1HX7(blG0+M@8fw)9QYV&uKZb<50_Wi_FA_`lxQkp!2hOl6h^GErYeKs=>k!r(tB zJ0s+ss*-Rc%2m z;ld~UvX1d}bhA=|oUSF@pZUCTYvYSC8P9>lIRpTRk2V7HpByWuNHh)TV% zYJ>p|Lp7|q3>Uwt?$+Q}NCV%lh91;2At&!YoXQSMDF^w2uw+kxiKis>9FM6FQ}_6k zg*^3-7jT)u=<)VSyS*}jY#!MbgrQ=yO2{3WZ);ojeX6#Sf-v-DaX|E~^nuAr`)zaS z6LXWxgxsmwzIN98ZCzak?X&!xqA0uafAmK4U-oHux%~dNj5vdvm&@jTQvLsbQoMRf z0C=2ZU}Rum0OE?8jfdm;ZN4&aGwJ|E7;02EG{ETpKmR{w^kg&!ayb~7K&k;!1`J04 z0C=2ZU}Rum)L~!%k^g`Gf6VB~z{r3CI2ZwDk_3tX0C=43S=$bSAPjZ?v;Y6MiNc(V zQIOIW4vGm6jfsO^PHS%)hGBTUpGwXyz%Vj!@oM88@XJcTxl zxmYX3n)Bl(zlsi1J~p}bQnsP(tI505HProfJvRM&iC`kklSk~r+(YFf?!EL}D&L`V zVGfTN9#WpI#v^5mipPxC$%_w$KU}`O-(S=>fzE9dFHL{W#Zd2II!TDi`>}IUep>l= z*j!!4e3%8Ne3{PNA0u#V%>>9*-gxJ8y?X+hyGDgH#D;p%BEDm+5+Zb z{Xy7Pir2PB2z&n2lltu{ogutT{F#au3JcG-iky$ydn9Xxa-R;Ly^Wxj+5L%>O<|Bb zM|gQt_#a7#Z5Ea6auRyfz*>qWtFt|m#I{;Gm0*8IZ>!k@hW$X6JZ0WH%lQH#J$Z!y z0C=1|*L%2EWAg^^`L4qjLJ>kQAtWIxIv0vi*$7cO5Q<7~Qqe(_3hAtNN{S>2QAk3O zN-9MNQFM^R8;THqAOHOJbCt`oG`%jKIpfVd3abQIzwscdrGU6aU2bW?CBMyOICS(6z z=SP%vU$$q&q3{mf8*$joh;joX4lm949|7ZteGx~>UEcjsgCmYc`DnS1fn8xs#D6-n zf%_BZ#~-7$EUs=4fLj= zJPpM*DrWMX*OK9NzIx7|9&v%|1+ya>$do`)35gG>0ll@z`cR*jWBQ2*N)C_vc8FSH`DGG2|B5#6D>N|WBA@` zhHiC!n_9cz+tmzqb>B^G-Eh90KDXo9-F|oL|I(?4Ts`>QVMgwtVNbog(|#}9d*jnv zUwW(QE_L6HLtnW4aO~&4zu5j}Xn@#z)G*K--P*s--QSPj{qrJ*z!-x2 zP%%Tz^Dwy{AkG8sAENbebNev8MyP$HT1V4uw6ig48f#7-f%yoW@%T-^VS<n8F!ruG( zxso=ka9J&8HGXSgtQGSi+>cy8!uw;IeB%5QHGQhS^?JHNuQvF7e5vlQCb$2)B9Jmvsa!!aN1}8Z}!i=C?x%&khO|JQMD+P zst|<(%17bA^-(CjJqia`jlv<7qfn-M6v|p3+9?W$m1e`EP_9N44!1sHWfaQKj>6Fk zqfi0PvEq-N6NTeiMxmnE<4dvSQ8-~-6i%$j_*HVP#OI`DY+V#ihI7iWC{%WKs{1O= ztH3gj;v z4bE=l+fgrWf_F2YTUe(yQRuAKo$t{4bmy zxb_s+6URH%)=PXZ+>YJ4 zQQNz;e;2={@+?#1axu%*{T{#f-LHhblD4bxTBVlNus=}y8qbflc&_F55v+CUS?4+M zvHefkXEfR%-&eS9a{jg7`8T+IV|F*|$!6CrW@@Xmt>U)9-=+uO>dST-Z5Q{Q{T=3e z2jB1I-Kpjurhm}! z&n;2#tStN`=AY@2#IQ&TrP!`W68GLcldK%;$JRxXmuJP16qR9ZA}Q5{EsDfDXR?2% zNDl1C=0{T6y0rB{OCmXhZ<(f%l!fn|GAUO%lEbZ!Xc@_ogCp^5O^$|h%FWI%AZQ7obSA`*d~qHs7Nl9_d@zyBu`WIUQDw~;9jD(OJO#H z-E31N&7HTvsRcc}%O#iLU5r<;JjHx37k35RE9Gu!|0-Bl^SP!O+Ym{sl1Q$#z7BS4 z*EZrjN0YWaBWcIK9gZFFzhPV?H{#Y&u8xx(;;NQ&OdtB1Vey1&wbf(>{G{1Fs zB>tTzU8^#)&`ob{7uTKc-r15KINgCmPkHW?x0m={bnLD6KCL3T%N*P#=iRXT>SJGX z)KAX-6`1-5;4(mtdvF-2ANQ*NK3WWtZ;+l0R@?n%V2JvM&~d05hT3~T&Ie&UB!0NO z4_iO%e1x1M_>YulBp##W9i{fs`ZUH&je$QF_E_^V7S1^L@W-3e@nR>azeGwZfM;k*I!&410@zNMFM zxh~S5#eCm31MldoSFU8qzgIQ9OTVS&X(_*DG+U-`%k6m&OjgLZ0`B{8-j{zRpH=o& zsdY83AHe+p#u_}=%DLA4hxmPj^Ex%GQ{%_#_(V;gT7N3`Q+lk&bG@_Ae7wC}tC%Z)p1s?9KRWHji8McMF}jdj4$H^KJNSGc%sG$#%2! zojSi$=MH{5aQxnk>@>4Gar!|Yew6=5zk&a$ahKljQrAy@3qSMw8NXlf`~{cY_V@7p z)%^S>@9%v7(1Sna+^6QhJmdZr^ADeY_D1S^KP_yDG}#nsRxi@LC9_|&F4Fx5Mp~*k z(*3JOdO)j453CVs>5OfN^q~2X9=s^hL&il~hF@9hL)%1p7~gW`B0U`Dk-H-;&-dsG zksc%d80!k`KRqKowhR-0-0Vmzvg5^{(4Os!^u&3QR%#mQNphXU_as;+%W+C$#;*#_ zr*)6iH+Xt_u<4PW(TBl4Q|#GrtFMo==E6wN>Bn|PdTvRiwK_#wyJDnu#ME(K7e+nn zdgAM;xqdY!wt+eu(xK6)NY8_NKD)r$vo&puM`L(R*hMfd=HpqKHltlLd(Gu*fp-ho zmknd~iYG^UxjL@s80nSe8J;c0UB&0Bm62Y}TB+AFG`)@nt<`vaBQ`bCwzO-T=R2C8qA1X@3jfPW0@I@2%>(ZBC?J@asyeuDEwy6KOZG-PC!z ze7DQhU5|YKrak!etjy@$OMI{Gk@lV$sb^{0$KG8yd+$v9>T^GQ`imdXEYf@Q@*eAf zrI_oz^t~7N`^?UL;s?=n(DFzJ%XxnnMzm^#vrN>;H=338FulLCGWxQU|k5}P%k4#^4zCiu22l^ zR-}vkzTS3yhn7q5TPo)=G2Rc;_vpC-*84D5(rG14J@e94;#bq^1A9Kn(+~CFW14-8 z_b1LirT2O{*W3FHzt3s&x!5n{{6dZmt{ddt;5YH5^DpK3$}DY^XOp_VHX~oF^&2z2 znZ}!GvPJ*4>ho4Ho^9ziv-B;l->PvtO}>NkowFTk{9f!2&i_ZVU9|m4?LXu83)^ju z_u#fi+^@L*hRa@fznkqp%-^4$OZ(*Cr>4Ke{q6Vhw;0c}^q=*SMKRkMSz$?JNqe?1 zvUGN2S!FgevV34Tsi6k{nx&Z>=cw!4Mr?XywfNTB9a(MhwfWbZ6d4Bw}HG3@N0lyL+eK3 z8maxf$&sDU_X4<$heg(8U1S%EyJ%5lP2pY)^HRB+(a5teYtE-RPAzb4AbR{E)2l9UyTa@W zr(4U&Zr79U=H|b6_7K-&OJsMLiJoe_Q_P+Gdg)bfK7E|`(Z9RoyW4qR`TDB0AMX9l z*8sc*=+!-DVW9rp`>%<=Pwxkr%fV_MtS9%=#rtJ8)SL~a|493g z)AnK5Bh0`^{q+r=jgn)O^(eTbX*F6+qxEqN{$ptFT{9c!ew^3|t`o$U$X^0`qV**D zOcFC0{$w1cRE_L$+@`rcp)SwFY&tEUf-^&(W~k?B`ps0|OqkEeI}7Hsc+WN)&(mWL zPA}5>CHlO?f38`Xr*|)_0dm0%r^8;QcUr9o9nEH^jf8hBw(_ zeS3%QOT;Xp$Gdnf#c?Sv%j8=o_cAlLTs__iv*lvmGso}Yvx1Lz!fcgU^*)%b#^nRC zYv`~>jce7m7LO0beW;#~V1EQ_o%4^ye?s3+;jTBYpYi*mQ)FNIoqcKMzJj$8&rN3N zYdU?ye~VhSz}TvvTlHvLEoQF1^?cZ_Z@#Ou@940DhCAf@-Yk6&Yp1$@!1+hmKYB*| z55_J%-G%#4>igMz{vy{e=4`j#?bhc#wExxqZ|d2rKHu5dUf93uyR7A}`t<`F`^vFBPmy4jp%*eoXF3Y=K|+VoL^Kg@{7e@IxzBPe49;;yg3b<^YMJmFKZKdvD%91 za=G;t%_6^&o>$`6QZKH8do`Zd!0~RGUyI9i!y|9qp2^#qPa9`#;9l=~y*ye%H> z#I{#!2R-iK{svdi*8B$A-`J0>kGvx-JHqRzS2y8#GrwEp=+v0GcE+u<^Ult0H5a$h z={D;wX2UZ#?`p5BI=hLxosQkjV0YaAt4}@j;0`%^^7G8idpYZEZu-FWtj+J%v%B%Q zTd(`lt1k`u=|?{`^w;11W}!c<0qVcU{y z1A67XGk-|E!^J%;&j{L%gf|L?Z~1(TI>zepIJG^3(|9$FSH}diUjnPdyicUVM72E1 zZ<6{Z%k`K(K1SauwD640rUv6_X6X0RdiS*1nF;$DeVzq( z7QAQ8*R%GX-52?6JfEY(HP`ISOUmv155H|X<* zvp3cC7LDKXyI6$7Vlj)&#bTPi?fz}pOYmRf{9SpM@?YkUS9wd-oV^G=$7K%WoH(i(AV+^^N&wbmc;Sx5Je_2(0uKBe<|c)q>!&(!fb z?w_me3pu|qzZ=B+{?5OWcOyMEnwyQZ+eEWX`tda$U&HuDf4r;an_V~4WQ+Z+YT7D( zn>^p@$#xvJtL;13-#h!>41I4_cFOxB-n;xZcDeop<0lwD)8c3I`!n9Z;O*Tt->uF) z?)T94SAF```Zt_@H&1_9|0(Z2dH&M(zvTQ|KmKVGMNuz`3XP&DsT4)&zcw$5vQbf# zSB;{g;waj$3|kXLrRGP`{@bJIfXQrq6dkxTib~IpqJxG-(ZT!`9s(eAR$pk+klWzoF7r8p-Vc7 z6zOee?KrZ%)_M~u4JY6voPZN>1Wv*Mm@HelAp7L?_h#PgS~7qee8IzMdAPRwX?1YH z?vJ~qJI6ipz2iOtJUbpxe{t;N39pU=+~UX+yxt|1A>JK#aD@-YUFx5Xd*pA&ect-x zcz~hjJNB{m9vugG@ZMsjOk;FZkMcxS%}QqbBGN6j)vl#(a#e|GIB7XcSxFrkxe@VE zG>2?vOe#{XO0iItkwu|It<_E@CfpiR&&T7`>0zQu#851QhL1*s8YARLs8!TfkjSt{ zK}VmN{oh^lB+Ykjdx0rJOwMGM%v3fP(U;gT7xVuJdIx^jjH*G(KIM!;Nm|(KX}Vx3 zDz)`?R1)eTwl-B`jxj53&4>2(@)y9?b&vo60C=2rT?KUGMgr~d*p4BzP-afsO}5O; z+$)o8D~TK1axFWsWoBk(zA`g2Gcz+Y-H@b_o!j?f{r?9wjM~}YZ2BLXZPI@n00m>bLk<^}VC`N0BU zL9h^57%T!71&e{j!4hCe&VWf~~;TU>oosur1gQY!7w-JA$3S z&R`d?E7%R}4jhmN1yBSo7z9IL7?i*sU<8yw1yq3tYG6-L2R>+kCKv@{U>r<}?I0PID4g-gSBfyd1C~!151{@2H1IL3Cz=_}_a56XroC;0@ zr-L)VncysNHaG{I3(f=QgA2fg;39A_xCC4ZE(4c?E5McDD)3)$HMj;`3$6p#gB!q& z;3jZ0xCPt_ZUeW2JHVabE^s%v2iyzp1NVamz=Pl+@Gy7;JPIBIkAo+`li(@vG%ev4dT@QX0o)L71UH78z)j(1aC5i?+!AgDw}#um|G;hGc5r*R1Kbhr1b2qJz+K^P zaChjyJS@N>bm1Tzg2S)`_kbg?3@fk-Jy?T#!aDR}12*9(9E0O<0?vYa!M))=a9_9| z+#enQ4}=H7gW)0YPFFN7Dti{T~kQg|7>99{vhgjd1;!mHsm@LG5sydK^FZ-h6&o8c|+ zR(Kn{9o_-&gm=Na;XUwPcptnUJ^&wt55b4wBk)o97+04 zUxY8gm*Fe$Rrnfw9linIgm1yO;XCkM_#S*8egHp&AHk2|C-77F8T=f60l$P_!LQ*r z@LTvD{2u-Qe}q55pW!d?SNI$J9sU9Tgnz-m;Xm+SG#dg4B7`s^h$4nKN}wc4p$?Qr z8I(mi)QP%KH|jyXXbPH&rlIL*b~Fc?6U~L@M)RO~(R^rrv;bNVErb?Ei=ai(VrX%+ z1X>dHp{3B$Xc;sE^`ika6D^CDL(8KT(28g!v@%)+t%_DdtD`m0nrJPwHd+U*i`GNy zqYco8Xd|>S+5~NiHba}EEzp)|E3`G*2K@(Zi?&1CqaDzWXeYEY+6C>3c0;=(2jx)# z6_JYu(GVI&CA0?`L1k1yRpg->+7s20j~b|nM$s4=M-ylk+6(QC_Cfoi{m}mC0CXTa z2px(KS+26Q933EhltLARpY(Cz3B zbSJtC-Hq-+_oDmI{pbPoAbJQrj2=OcqQ}tV=n3>BdI~*_oy^Y>M@1pn6`{)DoA^He?j6Ol1qR-Ih=nM2E`U-uGzCquj@6h+? z2lONQ3H^+ILBFEk(C_FE^e6fY{f+)X|Kiy&zz`#hF~Jlw%y9xIaSC_fG|u2G&f!kn zg}ZSN?!{B^R6Gq&$Ft)(@SJ!qJU5;P&x_~7^Wz2Zf_NdkFkS>NiWkF+<0bHtxDPLd zm&VKB8Mq%0;F)+?yc}L0uYgy?E8&&#DtJ}A8eSc*f!D-q;kEHPcwM|6ULS9OH^dv^ zjqxUUQ@k189B+ZQ#9QI5@izEBcw4+3-X8COcf>p4o$)SsSG*hE9XmLW3%H0~Jcx(z zFfQRe@CYvB3a(-g*YKXWj(yy~O+1Rn@Hn2pv+!PcZ@drQ7w?Dn#|Pj8@j>`td*zlLAO zZ{RoaTlj7K4t^KEhu_B^;1BUf_+$JD{uFBuP@FgQQ7@WJ!*6k}lFsdPpys zLZ*^wWICCh%t7WPbCJ2pJY-%nADN#lKo%qmk%h@3WKpshS)43EmLz>-DY7(KhRh)S zWPr>h%aY~D@?-_FB3X&7OjaSQlGVuSWDT+=S&OVq)*_J9I znN&!Xc%(-5Bz5AG25FK}GDgP91erzlB72j4$i8GhvOhV197ql#2a`j{q2w@fI5~nG zNsb~%lVixSRBHiXxJGq10N$w(dlY7X$r{B2SZN$g|`*@;rHgyhvUmFOyfutK>EEI(dVIf0KX6zjQVVD5QvDN+_j_a+;t?nxY*vO*1r0bF`Co(Qev9d+8K9 zl}@A6>Fjh4Iwzfr&Q0f`^V0d~{B!}jAYF(qOc$Yx(#7cFbP2j7?W0T4rRg$s2JNQ< zbS7PvE=QNAE6^3`N_1tq3SE`1Mpvh6&^75=bZxp0U6-y$*QXoM4e3U7W4a05lx{{h zr(4i1=~i@Wx()pg-Ii`gx2HSM9qCSVXSxgBmF`A&rw+~20xeRP4$>hyOiOeRIzr2| zLaWrHHM%FQQ=c|ylaA6cI!-6(EV>uno9;vRrTfwS=>haWdJsLB9zqYLhtb375%frU z6g`?ALyx7$(c|d}^hA0RJ(-?DPo<~P)9D%XOnMeQo1R0@rRUM}=>_ycdJ(;tUP3RW zm(k1V74%Aa75y*0nqEV%rPtBx=?(NodK0~w-a>Dsx6#|_9rR9m7rmR_L+_>c(fjEG z^g;R%eV9H%AEl4c$LSOFN%|Chnm$9HrO(ml=?nBl`VxJazCvH6uhG}(8}v>37JZw( zL*J$E(f8>G^h5d){g{42Kc%11&*>NROZpZ4ntnsSrQgx-=@0Zr`V;+`{z8AHztP|6 zAM{W97yX<5L;q#7F~A^03^T$gV~n!|OR^N}U}=_NS(am+tc!KC9@fjIu&Hbso6cru zbFewtTx@PO51W_G$L41Xum#ydY+<$tTa+!v7H3PaC0QR^iY?8SVKZ1i8(=fpvTQlF zJX?XS$W~%2vsKutY&EtzTZ661)?#b3b=bOWJ+?mEfNjV&VjHtf*rseVwmI8^ZOOJ` zTeEH0f7rHcJGMRBf$hk4Vmq^4*sg3hwmWlJo)uV;xonUPv0+wXd$18!W))Ut9;>lE zS)KW;!J2H8jj?ey!Dg|&*xqa(wlCX{?avNi2eO0M!R!!rC_9WD&W>P5vZL71>=>hS6yN}(^9$*i$huFjH z5%ws1j6KetU{A8A*wgG8_AGmjJ>c(ldyl=( zK42fRkJ!iT6ZR?ljD60&U|+JY*w^eE_AUF4eb0ViKeC_L&+HfWEBlT8&i-J3vcK5h z>>u_o7xO<3IpUZTPC4V8CwP*lcn44O4A1f$@8n&)oA>ZuK7~)^)A)2gJD-Ek$>-v8 z^LhBZd_F!uUw|*j7vc-^Mfjq8F}^rof-lMY_)>gnz6_ti`}qK$$(QBJ@#Xmnd_}$z zUzxAMSLLhm)%hBHO}-Xio3F#y@4|QGyYbz*!}Gkri`?ade25S865oT5@G`IPD))Ge@5$@j=MCQE zqkN2y^9eqS@5T4#`|y4Fetds^06&l)#1H0&@I(1w{BV8*KawBCkLJhlWBGCXczyyu zk)Om*=BMye`Dy%geg;32pT*DS=kRm+dHj5S0l$!6#4qNT@Jsn+{BnK;zmi|Y|I4rD z*YIokb^LmM1HX~q#Bb)e@LTz9{C0i^zmwm^@8+)1OJi##DC_$@L&0F{CEBb|C9g4|K|Vje-pDM zKmyK&X7mrFm+32%>V>k~H&`l{dBBA1@7Z+fp{!YYM$C4=glyXmSh_!EJ77Y#Z3iqp z5VIXHA=|bCmYx~29WWu=wgZ-4HfB3uLbh!OEWKRJcEE&e+YVTI`Izm13E8$Cu=ENs z+W`}@Z98D;6=SvoCS==oz_?RrltxR9iC(8vua%vu+viq?N>$fa_HwOiIuw*Q0ZTe% zr(RJSQBeH4<4%WDE)7-t@?N9iRSYS()rMP7XyR6jMy`~K#j=~y#BVtDhOyG{YE+<_ zGtuRgYr{_7ZS*y3HMd@Hd=Y&kA*bA+PQ{t!RgqIEGN)Rsd!-^b&;GPitM!$t#Ztj( zcy%Ng5r1X3!>JdBOQZUAm?1f*UiZfOR$Qj&4)qniv1&{xyMv8RTd0?Yh8r1MY1RzQ zJ9XuOMWyp>M3v)?h&OA-uu%32BV#4sonpAxlnK`=OW*Ab?`)IjuoM}%ZF|b(W^GQa zqSNL?n`K+%IW4Z<(GGU%|1oTLWCh&rNE_x_bzAUp<3nrm zb+*YlOR*!PQ_6}=YqEB>$;n7D<)iM_Tqh`db+^&1>$L8QDJoc#SZyia)vkBil8R!? zu@%Rzc0FZD(==`j*S+S@aNn>iDzS3cJ&8e&)|xdtcG(tjddOQ-zGpI%7VB2bdnPkU z$Hdt~)|P0!lNz-;u!3uKpp7zdHKHofqbOP)Wm`lZa2sC`nsd%Gq;AP;J zYToJiHMbxtgwrT_>b*K_g*(1z*h>BgbQ(!#%&8YmM}7tl0v5v{x8ZG2Nn+vG&3h&UF9+`fTg5J%07JafdBXO0+o zg_yiTAUiQnoWK*&J=k*H$c2I}7Yarmj(IX1c;d%oKad+0TW(a0JnGreatRPZ#sIM^Wnv6??G%Zol@rMKZnkgU^6pX}6MkwJ!i%c#qFQuHI?0$JqDWRpi2RWStuEduZ0I6dE}1b> zCaz^8DoTCLPlP;`cl;4odqg$v(2xEgctwmjV2cB}ywebsXhL}cM%y^ys|9uu`?^ z)>DSatP8B^(RyIbYg%sffYuPdF;RAdK*dNt(8o%}#xT{SCoe{}MNx$MrF~`Yusa=#vr05)$#_is~zd7Ggda^wLyw z@hFL|FC!lApqz`DG8@ooc@;e|XB1A$jlN;QOm%BFnA)P1#oOpsyG`%0q|nc7i)e=t z_?3xkNkPlyl57Ff`MT#6MWh>jwNf<^GT}muUSzEhBiD*3?uNRecgqH3uvB*kWgRr! zcLtq$N%-D0O%G8pm2VcJ)?HzqZw{HBrYYL%W~r-R|MyT31MmPD2Nij!B&s zo6tjUTZw`Y!&vjCnYb4Drz&m8tUfZXMOG@Ms_7&%am}(K5_GuLiqxVvi+b9a6!}pX z(;Tyu`q3{+V9l4!r)jhd>yV%+TDY1V zT^b@@qHZ^cA(aM2T@T77ztN$nD0#9yO)65VI76}}6j0jGNRIABLe)iQsK#DuzHM=P zQLIf)MvC!6E$CQ&v@NW)$;n8`X{c9er0uD;U@v{O>nTf0Yuu~_1rGfR{iI8T*+*D>=BZz81HPVSBku@TXc(;No8$&NL zam}JS8$xO~l5x?pq-UfpmXv6PElY1}*lNBSQtdeMEE#bfm@Y)&OJrL_o9pTx@#sBr zt*UJ;3Ov`U+EEDKCEFquqJ*w9DOdYhh3YuTm4C==npdsAjLNqVle*Rc+RC zkz`h&1EJ_O^JP~B(WsJ# zEH`d6%gsfw-+n74^k`gG%QL~Ge|oD}cS_ZuI<=c*TSOCJRE|=XU@TXH&4FaZjZs*z zk`XsXVLW;*E(-AIgq`P+nv4Wv7Ok+SEFm;>%`#ES5=_{B)huQuBW^O$Z&vM06tq*L zW-Tl#9kxOg(Si78n5eLpCM-$3gI9FT3X6uS*~AiKIdaU(T|~DamxW9oMZ8uv^WJQW zn2fmawcM;!{k|cm#tatEN<}sFvcK_l9GM|Ptcqwf>ZO`n#F8XcA0&OO(}L%Xlw{0m z6TDDsDwjxrsfD^*EQ!&zZ2kKC^1+s3SGztfE=3cd?nw-Cwx;tg5^$mJ)e_>z_eCwK zCqvZF3#JX|kYLzrm{-&!A)j*Dehd|4yU?uH-D+W?FJEftBoBn5+`+Aqq-tR_Vsc;;GJ9b(6lGXyVKlDj)wQ^$ z7DihnxiA`+?1j;|iCP$qOKM>>F6lNPu8GNETo_Nsc*NAgXvoyUXvlQ64QaEM4DmP* zV7BOvmI`v8SQp@A!~-MWj~fY|DVCg}x>M;hJMbY54F=){104cYysBxB0;2XM4M`QH z=QDKkqp_CyEva8i1C}(PrJ0sAQ%lQQ(z04w&XSfBvGeuLHI|6UAFo~%vGc>Wiy4wL z&zfh3F)2&v6`3SKl=ah9zVa_G+$a(L;(v zrQtzGpD5N$vyLU=qI=Kh^Rl*y<|glrcgSbi^d%wDDXmGW*c==*^_6POU9;ee1YqJX zFFJ&zD+-A2?TLaZ^=tA&V=WC>(g1gd%(y~5O~Ra8@%AXmLo0Qi z)+tNqHCT+bswIEeq*ks~H9}F0aAJNaVY6nxanHgI|+`Nk(0=pBz8Ov7H_%Kp3kxWLsTf?%`92yP=N}0H3B3N~s zqUR{v5j2ts&##nB*3W4R&6-~-y3r7J>i;oJS-N>IG2|F3%O#@Ndqrw@Ak=I1l4-#* zam~DXBPfN*h#RA^Qgy^Ol6;z59d*m1g0zmmyC*T2(xRCjxU)^pMT)8EmJs=D?a{=w zu8>Bj5Mt8wkXe0)DVCF%M2_RHW^KsCwI~8%Q!*_sSx59HF-XU>$VSbnxjK8Mw`h@n zJ(HPa;$jrPXsahCML|X*=1g46hScojM4SgO<<=eF#F%PKUB4irz}?2MTd%s}RY$E6 z9uHVn0KXCCOETh9?L4y&ShnlaY{~Bax+gKn*jjlg=GH4ToFT8;?$#K@;$$ygx9ihw zNpw#7#GuZ(Nla3f$RutS-Lz;m%cVjoNHfDE@I-wUi8~S0@d-Nz6Cp(cCB>iYjzoEo z&@>f%P_(4-&6{9QDyt4CwY>Gz|6@4&B)Un3-bsz-h^g^ZnKHTAw749l zQuibV@rXvL*43`ZtwyQX)vm{57N%-vn;f?orgCSS91lDiYjw5jEmp@1lUtQ~Je>A4 z9SmB#&New7irU1RBow8`{S24LI@{!_ZA$+neky%>Oscr@(uRJ`p2}RuTyKp>u|kP7!Eg2dM7oCr)a%dHUspoc0Ha{ep!qp{YjEa8_X5g#PHlHigCV~ z%}o1$rt$O$uwi>J)2Qf-p76>5hqWDN=GdNSh1D6HGb zi0c+Qib7b26Cu^EqdJ?6xONlP(L_kIA?ml>D6SL4u7e%6qFqLHE*WuS6xOk1#C4|_ z)F~b?onlrUN?C%Ad{}1^Aq@OjmEzs5SoK^f!$!xAWm>Kr9eNabW>Le6KL zLMkGq$RJ;-MFs`SMZu4e(TEg1oxcGYkBr=LHzGr&!N}gQTe4gYH!9_b?ct0%k+VH& zLs5+O@GWbikXY7yE8G!xA|jQU)+<$tmO;^SQt_-;s?-K-GBYAxV=yA32wP;hW|8WU zMQV+-O{`FBeldz$&5Cs08H)_+`N+L5hRYTc*%I0Fha(UCJk=3pt&)7x-_H;~28Ky468LaoC z4Y6iA>6k<{6CPBDT)DtdZD4s^H!)Z?_e`)vsX;MIteO1|jXU(iT)Z$uKF8ep4D$@Q zC>vf`ot>A%!;~Sqsnl4thk=2b*c$AMLf>A?tKk5t5xG6)i^N}tlM-e zG$t2|3Z5`3G~8k$)UZTo$gSjt+^V{cP|25unqJdS8)49`I3ni_lQ=Mui&!Ex3~SV# zsxOGAPKT@aH-rzF({dslFCiKmZHy&CL!|~4f5XkZe3YGhW~l7tMblStMPu*yJ%;)v zr_X81Etqo2nWjZ~LqaaB`ChXztgLiv1G(!Wo6kY%1yLGRzx}Bp&l@t`71fvz)tYK^ zD5vK6O8Tt@PMUbn>##Ubl9ngw9XF8n}#KkmAVt_wYbQgN?sS& zRy7$3+J#bmYu~+9?Y4zr-#xB%NE+NfV}{^ic`Gg06Uj+XbsM7ZHCywRke0X}-cbx# zMgn!BPFJmvB7p>}lynM9l$3`jYr|gE^%eBRP+_#r3{2_OHC;%oBXSzbb^V-%(RqiI zB@l(P>epI9h&WZyPY=7bXqhQuG5{X1j$wB^v=b7ww_r$0Uc*qk@oqgCV&S{z*GdgD zmgE7;4SUVHTKh5gk+PBC*UF_vI^qqlmIzr!AiXtck~g3^jjUr7mXOsrT$fEoJTUTt zbNLYujZ7&^Mtq8ft?Rg*ZL)DA4UKnUo0*KbiF}mFDN8W!!f|{u;>MkIzQ7XF8k^G3 z1Jc z+)W}1cBo(DJ2NCvsusMVYN_E-S-qHbz!G<_Yj4xDoU(V&NnMvAqyA2a&f6y>kWk1HN#x1 z8hWhCWJk!nqMHqfnP-Jo)led|D#sF`x4|?eG*!n^12WDG;^yfKFyV`~TZAmSxYFQ+ zK1df3HN;|urAC};a4(i>%*Ci$cd!Da#b0#ZjR%aDMNM?;2~qlWslyVb%1%vGV(pp6 z8PPM!yNIG)l!KSFre-LUQq0V&43N2w87*Xi8laHpk*x)lB>-RwATWUSUqEG3(4_ zi>~4$T>gl1T20DB{^p#ZhUQR@dGiiiOerF|Ix#e43VUVkfxIs3ClqWr{)jegin1fG z5QNPhRu>k^&7q;7y19W=Tu~m?3HN>{lue zm;k!SA_3B}{)Qa^4_HzHIV=@3?uv-IFz_2*(W_EfkDHZD#T5fA*}>~{4XH4%c=d^N z#jQ5`>UT{$zt6}RE=idm>h zOHgSBhyDYG1jvfNy61c9%)3+Z6CoESVwA5gxqD90E%JaTE223wUj|Z;S3HrAO)(1# zkKbh#QrWJ1w1{H~b0Td7i5i%cB?v>gLlZL$1>sZB-4X>;>erlH&{#_YmNd|*m#wPu zFnV6Rs9VfhiY$l8h#Si_(`Ly5k*y@E?wGIkJF`{Ur-=IA=Z}>dh2d;fZXQ^RXA#dR z7%ggrRJf5_=XJN(ROjY+wW&)q5`b1mOU06tsE$_5)kBFo>}|u4sIi(M89Ap6&f<-_ zU0zKM>BZEiXuj8xj!9H9QK&`hBqsCe*e6_gz|yhXFFar!HAkdEpS}SrNIAS-!VKZ& z*`H9UCXe6>RCmwD1Th?Q$|E9x zz}vB5*DV+1QQqK{Wlhqb12V$6X_*Y88YH7ZKmbKE*P~%syoEZRqC3YHu}kyOQobHu z{fIjnmNqYAwe(@Vum33(S(|s zFNxMo*frxM0n(~P3Ys|{u$%(+WX=*2;U*83NEw+!H^Rt#G673OcjB9F|BQsNG|r4;Uv2gLfyP)uTmDK#vV-669MbHz0t zP*RhN&K+_xP^gzwN1V1ve}`J=HbW6+NTyczUDtwrn&xqZwj*Q%yMp*$2hv4<(SRy7LVzEayF@_>^)n_k@^>e^sBwza?m zmX7Tk@PLuJQ*`Pn@muoLr!ie7FK*<$u}s}9xFU)B3eAR?Q!ztR@~INOZy5{EuyDVH z2P`}@E3juBX-Y=C%RqZqBqpT{Q~9QGhklq%3q#~nexym*DHcl&Qg?^kajw54*f)b} zAl|K3o{%>db?FFcQX|#*D=4BYr>u6A1Kwp|Jj#}oGR#C-Vp8|=o=8J4{5DFr!3}4` z4Q8{MxJESjO7qdkTtMy@ zO1|&aedZTDPi`m4{g1I?U6hS_hhL2Dd@w^geOG=+)T+xJwn8;Y`|eOher-vNz?{(@ zF%xUMK9+3}yDT1@FN;aqfprKh;u!^_tK=c=Rj73|oNHCJ1C<*JMRSvo>d>vvhebT4 zpxLR`7|RFM3mVKHcEk(%N%1r_k|@~W50~7sd4(=R?E4%>ipEt_ZRP*jRIPo^R%HCs zwlJQuSYS0=d`MYB5J$bsXNc{ed^xumL?B9^4qM@dj8hFnQUrTeL_y)RS2OEHSYnZA z>d1bVFF%u8be&>fkVWa3G(|H{&Q|-}uxsdSleNWg;WH=;bF|BTu;ws{6KOWBT{hKw z5`#%BPy9d26P;~Zk5VeGT+Isa{%2dnUW-Rp>vOHDex0gk?)A&hsYXd<%RPZ2W~L*- zI$5?woEmU*vp(>yt6kTU=xWOK;IdviCS`p6VPvyz+8a^5v0}ZCr6xi_r)BubSW}Z@ zT2DlyB+9mkvq#)lVMN~bPHHqqn;LmOWpXne=0sTik`bp8IyzSBXitA+L-TY9!y=@Z zTE>lDJJNVS1*ilTD)xcpkRpLZP*taI%q``;DgKBU>jsO~VV~I9CQpwm_IGS2GwF(p zx-i(14#Bnh;SO8r35h*cYZ22SR|BAc^(xSI*t%7n78C5l){_`?#Cf9w6oHf;5reqUWKYnb-*Ds?`%`MV~P$T+oGiu*JjM%gjzHj69Xn;+N>8`k+(yl`xc|i zkzgufNJ>22qE~U{ISvbpM5?*vvg*Z!T~F;h*)y-;t08jh$9&&IZ>)PFz2#XPqG%%g z0;fjm%b^kxwW2J3U8j;(J6|QUc)Rm3_! z5OHnf*BsNiCnKJgF#O76E@b5)^YW3v1Dpv!e-uMSd2m-f8C?z&ajb^7!k8h#TeX>| zvqNDa$t4t(7Tx|tMHHR7z2?~&YC$C=4JR)qAL`e1R0hWvT5_!_)dFvrLm^0jg!nV- z&k|)D&UneXIh2ezZ@6Vw?j&at8EsI+!HC*mqS{_sSy`b zrO3OkcD*~2qK}NkwOmBaM@1|l5#nUSt;$8*zCHI$iyAH>;^@WBh^fvkWa`{*$W-^7 z4Cy!zU`p+s>TlKN6xOE&^mlMDIf$>KjZ!*-l29 z2%ss?#N|D65-w#4J+dj2-%WEHVmxWiFK1iCl;OIRYAouSD2`6U4GLeYOtm5&BMomP z+3<$s@}b;x4xo55h5DtM3~`ld=yUVzCk@Xl`$Dc)#cXg|Lw{(a?&{%U^!>8^Ex2`^05?bq>)F`2j6_&;8btojti~KS|Qjp-At_r5quh~r0SW5$zG$4F) z%>si&LKVH7myTV!iRxSlBJfS(jC`oAIQjLNig4JJb5ar6yj#o}W+y`^ z5QSMolr^VPVvSK{12#r!Lv2SUS8Pa-#nWh>Vg{>6AMNSW?=|H>-_irdiSxd0$?cE+#@M4b-w+WT0uf zS;@;J)!!oG0prc8ZUcw_URC}!CZ>vCc@#nJWEKkY7P#5#Y1LEBYB<@a8uMnYpq50D z091cNCE4`zeR|uRD43DIYHdjOc_HNzsg_g%wQnBTP&BPkwPfDIFeQiU-aKF`WYO1& z+(7~+M&+j^8}f8Ui29SGdd0WqRuiKocTDYEcPONW5N?r=mgG5zhD%0E71v9SmZ}rx zqQ8RTx8C%r`t47QdZmIZ&qL%!khKLCO-c1_w)f$%tnRG%H()kiyY= zYRoAIy*JgE=|?|N!zKAEhL&S)zF@w2O*Iw|IoRf7;>UMtH9A%rEcMOMkAAKmB5*80 zVyrYGKPOXiuv}+JnR7d`!^#BM^+h{Z3ytJ%o59x6Xrrj!%;4ZqQ9xza7802m+>mjq z0n-mZA#Zx9&lAiwCYzz*KBp*8Wy!ILJ^q~b|4cjE45(Jp z2~&HaJ`qyko4ueOFffkC^WHd~aLYA5A==sr(Xuglu&J4M*(}eih_0Her_g4b?SHsI F?~0aZ)an2L literal 0 HcmV?d00001 diff --git a/site_libs/bootstrap/bootstrap.min.css b/site_libs/bootstrap/bootstrap.min.css new file mode 100644 index 000000000..9333d3375 --- /dev/null +++ b/site_libs/bootstrap/bootstrap.min.css @@ -0,0 +1,12 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */@import"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;700&display=swap";:root,[data-bs-theme=light]{--bs-blue: #2780e3;--bs-indigo: #6610f2;--bs-purple: #613d7c;--bs-pink: #e83e8c;--bs-red: #ff0039;--bs-orange: #f0ad4e;--bs-yellow: #ff7518;--bs-green: #3fb618;--bs-teal: #20c997;--bs-cyan: #9954bb;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #343a40;--bs-primary: #2780e3;--bs-secondary: #343a40;--bs-success: #3fb618;--bs-info: #9954bb;--bs-warning: #ff7518;--bs-danger: #ff0039;--bs-light: #f8f9fa;--bs-dark: #343a40;--bs-default-rgb: 52, 58, 64;--bs-primary-rgb: 39, 128, 227;--bs-secondary-rgb: 52, 58, 64;--bs-success-rgb: 63, 182, 24;--bs-info-rgb: 153, 84, 187;--bs-warning-rgb: 255, 117, 24;--bs-danger-rgb: 255, 0, 57;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 52, 58, 64;--bs-primary-text-emphasis: #10335b;--bs-secondary-text-emphasis: #15171a;--bs-success-text-emphasis: #19490a;--bs-info-text-emphasis: #3d224b;--bs-warning-text-emphasis: #662f0a;--bs-danger-text-emphasis: #660017;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #d4e6f9;--bs-secondary-bg-subtle: #d6d8d9;--bs-success-bg-subtle: #d9f0d1;--bs-info-bg-subtle: #ebddf1;--bs-warning-bg-subtle: #ffe3d1;--bs-danger-bg-subtle: #ffccd7;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #a9ccf4;--bs-secondary-border-subtle: #aeb0b3;--bs-success-border-subtle: #b2e2a3;--bs-info-border-subtle: #d6bbe4;--bs-warning-border-subtle: #ffc8a3;--bs-danger-border-subtle: #ff99b0;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-root-font-size: 17px;--bs-body-font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #343a40;--bs-body-color-rgb: 52, 58, 64;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(52, 58, 64, 0.75);--bs-secondary-color-rgb: 52, 58, 64;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(52, 58, 64, 0.5);--bs-tertiary-color-rgb: 52, 58, 64;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #2761e3;--bs-link-color-rgb: 39, 97, 227;--bs-link-decoration: underline;--bs-link-hover-color: #1f4eb6;--bs-link-hover-color-rgb: 31, 78, 182;--bs-code-color: #7d12ba;--bs-highlight-bg: #ffe3d1;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.25rem;--bs-border-radius-sm: 0.2em;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(39, 128, 227, 0.25);--bs-form-valid-color: #3fb618;--bs-form-valid-border-color: #3fb618;--bs-form-invalid-color: #ff0039;--bs-form-invalid-border-color: #ff0039}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: #7db3ee;--bs-secondary-text-emphasis: #85898c;--bs-success-text-emphasis: #8cd374;--bs-info-text-emphasis: #c298d6;--bs-warning-text-emphasis: #ffac74;--bs-danger-text-emphasis: #ff6688;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #081a2d;--bs-secondary-bg-subtle: #0a0c0d;--bs-success-bg-subtle: #0d2405;--bs-info-bg-subtle: #1f1125;--bs-warning-bg-subtle: #331705;--bs-danger-bg-subtle: #33000b;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #174d88;--bs-secondary-border-subtle: #1f2326;--bs-success-border-subtle: #266d0e;--bs-info-border-subtle: #5c3270;--bs-warning-border-subtle: #99460e;--bs-danger-border-subtle: #990022;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #7db3ee;--bs-link-hover-color: #97c2f1;--bs-link-color-rgb: 125, 179, 238;--bs-link-hover-color-rgb: 151, 194, 241;--bs-code-color: white;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: #8cd374;--bs-form-valid-border-color: #8cd374;--bs-form-invalid-color: #ff6688;--bs-form-invalid-border-color: #ff6688}*,*::before,*::after{box-sizing:border-box}:root{font-size:var(--bs-root-font-size)}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h1,.h1{font-size:2rem}}h2,.h2{font-size:calc(1.29rem + 0.48vw)}@media(min-width: 1200px){h2,.h2{font-size:1.65rem}}h3,.h3{font-size:calc(1.27rem + 0.24vw)}@media(min-width: 1200px){h3,.h3{font-size:1.45rem}}h4,.h4{font-size:1.25rem}h5,.h5{font-size:1.1rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em;color:#000;background-color:#f8f9fa;padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6)}pre code{background-color:rgba(0,0,0,0);font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);background-color:#f8f9fa;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.4rem .4rem;font-size:0.875em;color:#fff;background-color:#343a40}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:rgba(52,58,64,.75);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:rgba(52,58,64,.75)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media(min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media(min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media(min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media(min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media(min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: #343a40;--bs-table-bg: #fff;--bs-table-border-color: #dee2e6;--bs-table-accent-bg: transparent;--bs-table-striped-color: #343a40;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #343a40;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #343a40;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(1px*2) solid #b2bac1}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #d4e6f9;--bs-table-border-color: #bfcfe0;--bs-table-striped-bg: #c9dbed;--bs-table-striped-color: #000;--bs-table-active-bg: #bfcfe0;--bs-table-active-color: #000;--bs-table-hover-bg: #c4d5e6;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #d6d8d9;--bs-table-border-color: #c1c2c3;--bs-table-striped-bg: #cbcdce;--bs-table-striped-color: #000;--bs-table-active-bg: #c1c2c3;--bs-table-active-color: #000;--bs-table-hover-bg: #c6c8c9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d9f0d1;--bs-table-border-color: #c3d8bc;--bs-table-striped-bg: #cee4c7;--bs-table-striped-color: #000;--bs-table-active-bg: #c3d8bc;--bs-table-active-color: #000;--bs-table-hover-bg: #c9dec1;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #ebddf1;--bs-table-border-color: #d4c7d9;--bs-table-striped-bg: #dfd2e5;--bs-table-striped-color: #000;--bs-table-active-bg: #d4c7d9;--bs-table-active-color: #000;--bs-table-hover-bg: #d9ccdf;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #ffe3d1;--bs-table-border-color: #e6ccbc;--bs-table-striped-bg: #f2d8c7;--bs-table-striped-color: #000;--bs-table-active-bg: #e6ccbc;--bs-table-active-color: #000;--bs-table-hover-bg: #ecd2c1;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #ffccd7;--bs-table-border-color: #e6b8c2;--bs-table-striped-bg: #f2c2cc;--bs-table-striped-color: #000;--bs-table-active-bg: #e6b8c2;--bs-table-active-color: #000;--bs-table-hover-bg: #ecbdc7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #343a40;--bs-table-border-color: #484e53;--bs-table-striped-bg: #3e444a;--bs-table-striped-color: #fff;--bs-table-active-bg: #484e53;--bs-table-active-color: #fff;--bs-table-hover-bg: #43494e;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:rgba(52,58,64,.75)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-clip:padding-box;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#343a40;background-color:#fff;border-color:#93c0f1;outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:rgba(52,58,64,.75);opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#343a40;background-color:#f8f9fa;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e9ecef}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#343a40;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2));padding:.25rem .5rem;font-size:0.875rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2));padding:.5rem 1rem;font-size:1.25rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(1px * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(1px * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important}.form-control-color::-webkit-color-swatch{border:0 !important}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(1px * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(1px * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#93c0f1;outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #343a40}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: #fff;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid #dee2e6;print-color-adjust:exact}.form-check-input[type=radio],.shiny-input-container .checkbox input[type=radio],.shiny-input-container .checkbox-inline input[type=radio],.shiny-input-container .radio input[type=radio],.shiny-input-container .radio-inline input[type=radio]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#93c0f1;outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#2780e3;border-color:#2780e3}.form-check-input:checked[type=checkbox],.shiny-input-container .checkbox input:checked[type=checkbox],.shiny-input-container .checkbox-inline input:checked[type=checkbox],.shiny-input-container .radio input:checked[type=checkbox],.shiny-input-container .radio-inline input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.shiny-input-container .checkbox input:checked[type=radio],.shiny-input-container .checkbox-inline input:checked[type=radio],.shiny-input-container .radio input:checked[type=radio],.shiny-input-container .radio-inline input:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.shiny-input-container .checkbox input[type=checkbox]:indeterminate,.shiny-input-container .checkbox-inline input[type=checkbox]:indeterminate,.shiny-input-container .radio input[type=checkbox]:indeterminate,.shiny-input-container .radio-inline input[type=checkbox]:indeterminate{background-color:#2780e3;border-color:#2780e3;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2393c0f1'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#bed9f7}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#bed9f7}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(52,58,64,.75)}.form-range:disabled::-moz-range-thumb{background-color:rgba(52,58,64,.75)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(1px * 2));min-height:calc(3.5rem + calc(1px * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:#fff}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:#e9ecef}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;text-align:center;white-space:nowrap;background-color:#f8f9fa;border:1px solid #dee2e6}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(1px*-1)}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#3fb618}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#3fb618}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#3fb618;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#3fb618}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#3fb618}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#3fb618}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#3fb618}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#ff0039}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#ff0039}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#ff0039;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#ff0039}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#ff0039}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#ff0039}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#ff0039}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 0.75rem;--bs-btn-padding-y: 0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: #343a40;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: 0.25rem;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2c3136;--bs-btn-hover-border-color: #2a2e33;--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2a2e33;--bs-btn-active-border-color: #272c30;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #216dc1;--bs-btn-hover-border-color: #1f66b6;--bs-btn-focus-shadow-rgb: 71, 147, 231;--bs-btn-active-color: #fff;--bs-btn-active-bg: #1f66b6;--bs-btn-active-border-color: #1d60aa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #2780e3;--bs-btn-disabled-border-color: #2780e3}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2c3136;--bs-btn-hover-border-color: #2a2e33;--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2a2e33;--bs-btn-active-border-color: #272c30;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #369b14;--bs-btn-hover-border-color: #329213;--bs-btn-focus-shadow-rgb: 92, 193, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: #329213;--bs-btn-active-border-color: #2f8912;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #3fb618;--bs-btn-disabled-border-color: #3fb618}.btn-info{--bs-btn-color: #fff;--bs-btn-bg: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #82479f;--bs-btn-hover-border-color: #7a4396;--bs-btn-focus-shadow-rgb: 168, 110, 197;--bs-btn-active-color: #fff;--bs-btn-active-bg: #7a4396;--bs-btn-active-border-color: #733f8c;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #9954bb;--bs-btn-disabled-border-color: #9954bb}.btn-warning{--bs-btn-color: #fff;--bs-btn-bg: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #d96314;--bs-btn-hover-border-color: #cc5e13;--bs-btn-focus-shadow-rgb: 255, 138, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: #cc5e13;--bs-btn-active-border-color: #bf5812;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff7518;--bs-btn-disabled-border-color: #ff7518}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #d90030;--bs-btn-hover-border-color: #cc002e;--bs-btn-focus-shadow-rgb: 255, 38, 87;--bs-btn-active-color: #fff;--bs-btn-active-bg: #cc002e;--bs-btn-active-border-color: #bf002b;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff0039;--bs-btn-disabled-border-color: #ff0039}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #52585d;--bs-btn-hover-border-color: #484e53;--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: #5d6166;--bs-btn-active-border-color: #484e53;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-outline-default{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2780e3;--bs-btn-hover-border-color: #2780e3;--bs-btn-focus-shadow-rgb: 39, 128, 227;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2780e3;--bs-btn-active-border-color: #2780e3;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #2780e3;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #2780e3;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #3fb618;--bs-btn-hover-border-color: #3fb618;--bs-btn-focus-shadow-rgb: 63, 182, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #3fb618;--bs-btn-active-border-color: #3fb618;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #3fb618;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #3fb618;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #9954bb;--bs-btn-hover-border-color: #9954bb;--bs-btn-focus-shadow-rgb: 153, 84, 187;--bs-btn-active-color: #fff;--bs-btn-active-bg: #9954bb;--bs-btn-active-border-color: #9954bb;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #9954bb;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #9954bb;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff7518;--bs-btn-hover-border-color: #ff7518;--bs-btn-focus-shadow-rgb: 255, 117, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff7518;--bs-btn-active-border-color: #ff7518;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff7518;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff7518;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff0039;--bs-btn-hover-border-color: #ff0039;--bs-btn-focus-shadow-rgb: 255, 0, 57;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff0039;--bs-btn-active-border-color: #ff0039;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff0039;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff0039;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: #2761e3;--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: #1f4eb6;--bs-btn-hover-border-color: transparent;--bs-btn-active-color: #1f4eb6;--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 71, 121, 231;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: 0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: 0.2em}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .2s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: #343a40;--bs-dropdown-bg: #fff;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-border-radius: 0.25rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(0.25rem - 1px);--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color: #343a40;--bs-dropdown-link-hover-color: #343a40;--bs-dropdown-link-hover-bg: #f8f9fa;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: rgba(52, 58, 64, 0.5);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(1px*-1)}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(1px*-1)}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: #2761e3;--bs-nav-link-hover-color: #1f4eb6;--bs-nav-link-disabled-color: rgba(52, 58, 64, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: 0.25rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #000;--bs-nav-tabs-link-active-bg: #fff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width))}.nav-pills{--bs-nav-pills-border-radius: 0.25rem;--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #2780e3}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: #000;gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: #fdfeff;--bs-navbar-hover-color: rgba(253, 253, 255, 0.8);--bs-navbar-disabled-color: rgba(253, 254, 255, 0.75);--bs-navbar-active-color: #fdfdff;--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: #fdfeff;--bs-navbar-brand-hover-color: #fdfdff;--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25;--bs-navbar-toggler-padding-x: 0;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23fdfeff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(253, 254, 255, 0);--bs-navbar-toggler-border-radius: 0.25rem;--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: #fdfeff;--bs-navbar-hover-color: rgba(253, 253, 255, 0.8);--bs-navbar-disabled-color: rgba(253, 254, 255, 0.75);--bs-navbar-active-color: #fdfdff;--bs-navbar-brand-color: #fdfeff;--bs-navbar-brand-hover-color: #fdfdff;--bs-navbar-toggler-border-color: rgba(253, 254, 255, 0);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23fdfeff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23fdfeff' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: 1px;--bs-card-border-color: rgba(0, 0, 0, 0.175);--bs-card-border-radius: 0.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(0.25rem - 1px);--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(52, 58, 64, 0.25);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #fff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0}.card>.list-group:last-child{border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}}.accordion{--bs-accordion-color: #343a40;--bs-accordion-bg: #fff;--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: #dee2e6;--bs-accordion-border-width: 1px;--bs-accordion-border-radius: 0.25rem;--bs-accordion-inner-border-radius: calc(0.25rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #343a40;--bs-accordion-btn-bg: #fff;--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23343a40'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2310335b'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #93c0f1;--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: #10335b;--bs-accordion-active-bg: #d4e6f9}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:not(:first-of-type){border-top:0}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%237db3ee'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%237db3ee'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: rgba(52, 58, 64, 0.75);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: rgba(52, 58, 64, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, ">") /* rtl: var(--bs-breadcrumb-divider, ">") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: #2761e3;--bs-pagination-bg: #fff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: 0.25rem;--bs-pagination-hover-color: #1f4eb6;--bs-pagination-hover-bg: #f8f9fa;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: #1f4eb6;--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #2780e3;--bs-pagination-active-border-color: #2780e3;--bs-pagination-disabled-color: rgba(52, 58, 64, 0.75);--bs-pagination-disabled-bg: #e9ecef;--bs-pagination-disabled-border-color: #dee2e6;display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(1px*-1)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: 0.5rem}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: 0.2em}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: 0.25rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: 0 solid var(--bs-alert-border-color);--bs-alert-border-radius: 0.25rem;--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:.5rem}}.progress,.progress-stacked{--bs-progress-height: 0.5rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: #e9ecef;--bs-progress-border-radius: 0.25rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #2780e3;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: #343a40;--bs-list-group-bg: #fff;--bs-list-group-border-color: #dee2e6;--bs-list-group-border-width: 1px;--bs-list-group-border-radius: 0.25rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: rgba(52, 58, 64, 0.75);--bs-list-group-action-hover-color: #000;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #343a40;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: rgba(52, 58, 64, 0.75);--bs-list-group-disabled-bg: #fff;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #2780e3;--bs-list-group-active-border-color: #2780e3;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(255, 255, 255, 0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: rgba(0, 0, 0, 0.175);--bs-toast-border-radius: 0.25rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color: rgba(52, 58, 64, 0.75);--bs-toast-header-bg: rgba(255, 255, 255, 0.85);--bs-toast-header-border-color: rgba(0, 0, 0, 0.175);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color)}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: ;--bs-modal-bg: #fff;--bs-modal-border-color: rgba(0, 0, 0, 0.175);--bs-modal-border-width: 1px;--bs-modal-border-radius: 0.5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius: calc(0.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: #dee2e6;--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: #dee2e6;--bs-modal-footer-border-width: 1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin:calc(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.5*var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: #fff;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: 0.25rem;--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: #fff;--bs-popover-border-width: 1px;--bs-popover-border-color: rgba(0, 0, 0, 0.175);--bs-popover-border-radius: 0.5rem;--bs-popover-inner-border-radius: calc(0.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: #e9ecef;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #343a40;--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: #343a40;--bs-offcanvas-bg: #fff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: rgba(0, 0, 0, 0.175);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 575.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 767.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 991.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1399.98px)and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media(min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin-top:calc(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#fff !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#fff !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#fff !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(31, 102, 182, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(31, 102, 182, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(50, 146, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(50, 146, 19, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(122, 67, 150, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(122, 67, 150, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(204, 94, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 94, 19, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(204, 0, 46, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 0, 46, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.325rem + 0.9vw) !important}.fs-2{font-size:calc(1.29rem + 0.48vw) !important}.fs-3{font-size:calc(1.27rem + 0.24vw) !important}.fs-4{font-size:1.25rem !important}.fs-5{font-size:1.1rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#fff}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#fff}.bg-warning{color:#fff}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media(min-width: 1200px){.fs-1{font-size:2rem !important}.fs-2{font-size:1.65rem !important}.fs-3{font-size:1.45rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #4053e9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #4053e9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3e65ba;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #3e65ba;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: #7466c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #7466c0;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: #7d4d9f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #7d4d9f;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: #7792a7;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #7792a7;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #7d7c92;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #7d7c92;color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: #319692;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #319692;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: #249dc5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #249dc5;color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #556ed3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #556ed3;color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4d3dec;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #4d3dec;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: #6422c3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #6422c3;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: #9a22c9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #9a22c9;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: #a30aa8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #a30aa8;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: #9d4fb0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #9d4fb0;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a3389b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #a3389b;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: #56529b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #56529b;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #7a2bdc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #7a2bdc;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4a58a5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #4a58a5;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #632bab;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #632bab;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: #973d82;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #973d82;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: #a02561;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #a02561;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: #9a6a6a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #9a6a6a;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a05354;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #a05354;color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: #536d54;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #536d54;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: #477587;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #477587;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #774695;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #774695;color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: #9b58af;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #9b58af;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b42cb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b42cb5;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b23e86;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #b23e86;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: #f1256b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #f1256b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: #eb6a73;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #eb6a73;color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #f1545e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #f1545e;color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: #a46e5e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #a46e5e;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: #987690;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #987690;color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #c8479f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #c8479f;color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a9337d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a9337d;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #c20683;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c20683;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: #c01854;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #c01854;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: #f6195a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #f6195a;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: #f94541;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #f94541;color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #ff2f2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #ff2f2c;color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: #b2492c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #b2492c;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: #a6505f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6505f;color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #d6226d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #d6226d;color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a09b8a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a09b8a;color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b96e90;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b96e90;color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b78060;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #b78060;color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: #ed8167;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #ed8167;color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: #f66846;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #f66846;color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #f69738;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #f69738;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a9b138;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #a9b138;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #9db86b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #9db86b;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #cd897a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #cd897a;color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a97969;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a97969;color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #c24d6f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c24d6f;color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: #c05f40;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #c05f40;color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: #f65f46;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #f65f46;color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: #ff4625;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #ff4625;color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #f98b2e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #f98b2e;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: #b28f18;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #b28f18;color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: #a6974b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6974b;color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #d66859;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #d66859;color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: #35a069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #35a069;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #4f746f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #4f746f;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: #4d8640;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #4d8640;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: #838646;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #838646;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: #8c6d25;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #8c6d25;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #86b22e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #86b22e;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #8c9c18;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #8c9c18;color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #33be4b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #33be4b;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #638f59;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #638f59;color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: #23acb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #23acb5;color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3a918c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #3a918c;color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: #709193;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #709193;color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: #797971;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #797971;color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #73be7a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #73be7a;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #79a764;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #79a764;color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #2cc164;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #2cc164;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #509aa5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #509aa5;color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: #6b66cb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #6b66cb;color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #8539d1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #8539d1;color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: #834ba2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #834ba2;color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: #b94ba8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #b94ba8;color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: #c23287;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #c23287;color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: #bc788f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #bc788f;color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #c2617a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #c2617a;color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: #757b7a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #757b7a;color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: #6983ad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #6983ad;color:#fff}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #4053e9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #4053e9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3e65ba;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #3e65ba;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: #7466c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #7466c0;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: #7d4d9f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #7d4d9f;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: #7792a7;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #7792a7;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #7d7c92;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #7d7c92;color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: #319692;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #319692;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: #249dc5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #249dc5;color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #556ed3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #556ed3;color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4d3dec;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #4d3dec;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: #6422c3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #6422c3;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: #9a22c9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #9a22c9;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: #a30aa8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #a30aa8;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: #9d4fb0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #9d4fb0;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a3389b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #a3389b;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: #56529b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #56529b;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #7a2bdc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #7a2bdc;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4a58a5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #4a58a5;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #632bab;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #632bab;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: #973d82;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #973d82;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: #a02561;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #a02561;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: #9a6a6a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #9a6a6a;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a05354;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #a05354;color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: #536d54;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #536d54;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: #477587;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #477587;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #774695;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #774695;color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: #9b58af;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #9b58af;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b42cb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b42cb5;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b23e86;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #b23e86;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: #f1256b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #f1256b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: #eb6a73;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #eb6a73;color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #f1545e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #f1545e;color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: #a46e5e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #a46e5e;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: #987690;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #987690;color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #c8479f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #c8479f;color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a9337d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a9337d;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #c20683;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c20683;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: #c01854;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #c01854;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: #f6195a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #f6195a;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: #f94541;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #f94541;color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #ff2f2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #ff2f2c;color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: #b2492c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #b2492c;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: #a6505f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6505f;color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #d6226d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #d6226d;color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a09b8a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a09b8a;color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b96e90;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b96e90;color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b78060;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #b78060;color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: #ed8167;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #ed8167;color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: #f66846;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #f66846;color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #f69738;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #f69738;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a9b138;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #a9b138;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #9db86b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #9db86b;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #cd897a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #cd897a;color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a97969;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a97969;color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #c24d6f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c24d6f;color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: #c05f40;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #c05f40;color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: #f65f46;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #f65f46;color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: #ff4625;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #ff4625;color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #f98b2e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #f98b2e;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: #b28f18;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #b28f18;color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: #a6974b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6974b;color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #d66859;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #d66859;color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: #35a069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #35a069;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #4f746f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #4f746f;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: #4d8640;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #4d8640;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: #838646;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #838646;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: #8c6d25;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #8c6d25;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #86b22e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #86b22e;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #8c9c18;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #8c9c18;color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #33be4b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #33be4b;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #638f59;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #638f59;color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: #23acb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #23acb5;color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3a918c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #3a918c;color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: #709193;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #709193;color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: #797971;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #797971;color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #73be7a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #73be7a;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #79a764;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #79a764;color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #2cc164;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #2cc164;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #509aa5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #509aa5;color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: #6b66cb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #6b66cb;color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #8539d1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #8539d1;color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: #834ba2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #834ba2;color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: #b94ba8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #b94ba8;color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: #c23287;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #c23287;color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: #bc788f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #bc788f;color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #c2617a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #c2617a;color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: #757b7a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #757b7a;color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: #6983ad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #6983ad;color:#fff}.bslib-grid{display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media(min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media(min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media(min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media(min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media(min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}.bslib-grid-item{grid-column:auto/span 1}@media(max-width: 767.98px){.bslib-grid-item{grid-column:1/-1}}@media(max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important;grid-auto-rows:var(--bslib-grid--row-heights--xs, auto)}}:root{--bslib-page-sidebar-title-bg: #2780e3;--bslib-page-sidebar-title-color: #fff}.bslib-page-title{background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color);font-size:1.25rem;font-weight:300;padding:var(--bslib-spacer, 1rem);padding-left:1.5rem;margin-bottom:0;border-bottom:1px solid #dee2e6}html{height:100%}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media(max-width: 575.98px){.bslib-page-fill{height:var(--bslib-page-fill-mobile-height, auto)}}@media(min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.accordion .accordion-header{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media(min-width: 1200px){.accordion .accordion-header{font-size:1.65rem}}.accordion .accordion-icon:not(:empty){margin-right:.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen=true]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border=true]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius=true]){border-top-left-radius:0;border-top-right-radius:0}[data-full-screen=true]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,.15);margin:.2rem .4rem;padding:.55rem !important;font-size:.8rem;cursor:pointer;opacity:.7;z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card[data-full-screen=false]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .card:hover>*>.bslib-full-screen-enter{display:none}@media(max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-sm:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-md:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-lg:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xl:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xxl:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}:root{--bslib-value-box-shadow: none;--bslib-value-box-border-width-auto-yes: var(--bslib-value-box-border-width-baseline);--bslib-value-box-border-width-auto-no: 0;--bslib-value-box-border-width-baseline: 1px}.bslib-value-box{border-width:var(--bslib-value-box-border-width-auto-no, var(--bslib-value-box-border-width-baseline));container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.card{box-shadow:var(--bslib-value-box-shadow)}.bslib-value-box.border-auto{border-width:var(--bslib-value-box-border-width-auto-yes, var(--bslib-value-box-border-width-baseline))}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #fff);--bslib-value-box-border-color-default: var(--bs-card-border-color, rgba(0, 0, 0, 0.175));color:var(--bslib-value-box-color);background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen=true] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:" "}.bslib-value-box .value-box-value{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}@media(min-width: 1200px){.bslib-value-box .value-box-value{font-size:1.65rem}}.bslib-value-box .value-box-value:empty::after{content:" "}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen=true] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid .value-box-showcase{padding:1rem}[data-bs-theme=dark] .bslib-value-box{--bslib-value-box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 50%)}.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2);--bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, 0.25rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media(prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout[data-bslib-sidebar-border=false]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius=false]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1/2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2/3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1/2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1*var(--bslib-sidebar-padding));margin-right:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1/2;grid-column:1/2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem)/2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:var(--bslib-sidebar-icon-button-size, 2rem);width:var(--bslib-sidebar-icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2/3;border-right:none;border-left:var(--bslib-sidebar-vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2/3;left:var(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc(var(--bslib-sidebar-overlap-counter, 0)*(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)) + var(--bslib-sidebar-icon-size, 1rem)/2);right:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media(min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media(max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open=desktop]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/3}.bslib-sidebar-layout[data-bslib-sidebar-open=always]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed>.main{opacity:1}}.html-fill-container{display:flex;flex-direction:column;min-height:0;min-width:0}.html-fill-container>.html-fill-item{flex:1 1 auto;min-height:0;min-width:0}.html-fill-container>:not(.html-fill-item){flex:0 0 auto}.quarto-container{min-height:calc(100vh - 132px)}body.hypothesis-enabled #quarto-header{margin-right:16px}footer.footer .nav-footer,#quarto-header>nav{padding-left:1em;padding-right:1em}footer.footer div.nav-footer p:first-child{margin-top:0}footer.footer div.nav-footer p:last-child{margin-bottom:0}#quarto-content>*{padding-top:14px}#quarto-content>#quarto-sidebar-glass{padding-top:0px}@media(max-width: 991.98px){#quarto-content>*{padding-top:0}#quarto-content .subtitle{padding-top:14px}#quarto-content section:first-of-type h2:first-of-type,#quarto-content section:first-of-type .h2:first-of-type{margin-top:1rem}}.headroom-target,header.headroom{will-change:transform;transition:position 200ms linear;transition:all 200ms linear}header.headroom--pinned{transform:translateY(0%)}header.headroom--unpinned{transform:translateY(-100%)}.navbar-container{width:100%}.navbar-brand{overflow:hidden;text-overflow:ellipsis}.navbar-brand-container{max-width:calc(100% - 115px);min-width:0;display:flex;align-items:center}@media(min-width: 992px){.navbar-brand-container{margin-right:1em}}.navbar-brand.navbar-brand-logo{margin-right:4px;display:inline-flex}.navbar-toggler{flex-basis:content;flex-shrink:0}.navbar .navbar-brand-container{order:2}.navbar .navbar-toggler{order:1}.navbar .navbar-container>.navbar-nav{order:20}.navbar .navbar-container>.navbar-brand-container{margin-left:0 !important;margin-right:0 !important}.navbar .navbar-collapse{order:20}.navbar #quarto-search{order:4;margin-left:auto}.navbar .navbar-toggler{margin-right:.5em}.navbar-logo{max-height:24px;width:auto;padding-right:4px}nav .nav-item:not(.compact){padding-top:1px}nav .nav-link i,nav .dropdown-item i{padding-right:1px}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.6rem;padding-right:.6rem}nav .nav-item.compact .nav-link{padding-left:.5rem;padding-right:.5rem;font-size:1.1rem}.navbar .quarto-navbar-tools{order:3}.navbar .quarto-navbar-tools div.dropdown{display:inline-block}.navbar .quarto-navbar-tools .quarto-navigation-tool{color:#fdfeff}.navbar .quarto-navbar-tools .quarto-navigation-tool:hover{color:#fdfdff}.navbar-nav .dropdown-menu{min-width:220px;font-size:.9rem}.navbar .navbar-nav .nav-link.dropdown-toggle::after{opacity:.75;vertical-align:.175em}.navbar ul.dropdown-menu{padding-top:0;padding-bottom:0}.navbar .dropdown-header{text-transform:uppercase;font-size:.8rem;padding:0 .5rem}.navbar .dropdown-item{padding:.4rem .5rem}.navbar .dropdown-item>i.bi{margin-left:.1rem;margin-right:.25em}.sidebar #quarto-search{margin-top:-1px}.sidebar #quarto-search svg.aa-SubmitIcon{width:16px;height:16px}.sidebar-navigation a{color:inherit}.sidebar-title{margin-top:.25rem;padding-bottom:.5rem;font-size:1.3rem;line-height:1.6rem;visibility:visible}.sidebar-title>a{font-size:inherit;text-decoration:none}.sidebar-title .sidebar-tools-main{margin-top:-6px}@media(max-width: 991.98px){#quarto-sidebar div.sidebar-header{padding-top:.2em}}.sidebar-header-stacked .sidebar-title{margin-top:.6rem}.sidebar-logo{max-width:90%;padding-bottom:.5rem}.sidebar-logo-link{text-decoration:none}.sidebar-navigation li a{text-decoration:none}.sidebar-navigation .quarto-navigation-tool{opacity:.7;font-size:.875rem}#quarto-sidebar>nav>.sidebar-tools-main{margin-left:14px}.sidebar-tools-main{display:inline-flex;margin-left:0px;order:2}.sidebar-tools-main:not(.tools-wide){vertical-align:middle}.sidebar-navigation .quarto-navigation-tool.dropdown-toggle::after{display:none}.sidebar.sidebar-navigation>*{padding-top:1em}.sidebar-item{margin-bottom:.2em;line-height:1rem;margin-top:.4rem}.sidebar-section{padding-left:.5em;padding-bottom:.2em}.sidebar-item .sidebar-item-container{display:flex;justify-content:space-between;cursor:pointer}.sidebar-item-toggle:hover{cursor:pointer}.sidebar-item .sidebar-item-toggle .bi{font-size:.7rem;text-align:center}.sidebar-item .sidebar-item-toggle .bi-chevron-right::before{transition:transform 200ms ease}.sidebar-item .sidebar-item-toggle[aria-expanded=false] .bi-chevron-right::before{transform:none}.sidebar-item .sidebar-item-toggle[aria-expanded=true] .bi-chevron-right::before{transform:rotate(90deg)}.sidebar-item-text{width:100%}.sidebar-navigation .sidebar-divider{margin-left:0;margin-right:0;margin-top:.5rem;margin-bottom:.5rem}@media(max-width: 991.98px){.quarto-secondary-nav{display:block}.quarto-secondary-nav button.quarto-search-button{padding-right:0em;padding-left:2em}.quarto-secondary-nav button.quarto-btn-toggle{margin-left:-0.75rem;margin-right:.15rem}.quarto-secondary-nav nav.quarto-title-breadcrumbs{display:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs{display:flex;align-items:center;padding-right:1em;margin-left:-0.25em}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{text-decoration:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs ol.breadcrumb{margin-bottom:0}}@media(min-width: 992px){.quarto-secondary-nav{display:none}}.quarto-title-breadcrumbs .breadcrumb{margin-bottom:.5em;font-size:.9rem}.quarto-title-breadcrumbs .breadcrumb li:last-of-type a{color:#6c757d}.quarto-secondary-nav .quarto-btn-toggle{color:#595959}.quarto-secondary-nav[aria-expanded=false] .quarto-btn-toggle .bi-chevron-right::before{transform:none}.quarto-secondary-nav[aria-expanded=true] .quarto-btn-toggle .bi-chevron-right::before{transform:rotate(90deg)}.quarto-secondary-nav .quarto-btn-toggle .bi-chevron-right::before{transition:transform 200ms ease}.quarto-secondary-nav{cursor:pointer}.no-decor{text-decoration:none}.quarto-secondary-nav-title{margin-top:.3em;color:#595959;padding-top:4px}.quarto-secondary-nav nav.quarto-page-breadcrumbs{color:#595959}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{color:#595959}.quarto-secondary-nav nav.quarto-page-breadcrumbs a:hover{color:rgba(33,81,191,.8)}.quarto-secondary-nav nav.quarto-page-breadcrumbs .breadcrumb-item::before{color:#8c8c8c}.breadcrumb-item{line-height:1.2rem}div.sidebar-item-container{color:#595959}div.sidebar-item-container:hover,div.sidebar-item-container:focus{color:rgba(33,81,191,.8)}div.sidebar-item-container.disabled{color:rgba(89,89,89,.75)}div.sidebar-item-container .active,div.sidebar-item-container .show>.nav-link,div.sidebar-item-container .sidebar-link>code{color:#2151bf}div.sidebar.sidebar-navigation.rollup.quarto-sidebar-toggle-contents,nav.sidebar.sidebar-navigation:not(.rollup){background-color:#fff}@media(max-width: 991.98px){.sidebar-navigation .sidebar-item a,.nav-page .nav-page-text,.sidebar-navigation{font-size:1rem}.sidebar-navigation ul.sidebar-section.depth1 .sidebar-section-item{font-size:1.1rem}.sidebar-logo{display:none}.sidebar.sidebar-navigation{position:static;border-bottom:1px solid #dee2e6}.sidebar.sidebar-navigation.collapsing{position:fixed;z-index:1000}.sidebar.sidebar-navigation.show{position:fixed;z-index:1000}.sidebar.sidebar-navigation{min-height:100%}nav.quarto-secondary-nav{background-color:#fff;border-bottom:1px solid #dee2e6}.quarto-banner nav.quarto-secondary-nav{background-color:#2780e3;color:#fdfeff;border-top:1px solid #dee2e6}.sidebar .sidebar-footer{visibility:visible;padding-top:1rem;position:inherit}.sidebar-tools-collapse{display:block}}#quarto-sidebar{transition:width .15s ease-in}#quarto-sidebar>*{padding-right:1em}@media(max-width: 991.98px){#quarto-sidebar .sidebar-menu-container{white-space:nowrap;min-width:225px}#quarto-sidebar.show{transition:width .15s ease-out}}@media(min-width: 992px){#quarto-sidebar{display:flex;flex-direction:column}.nav-page .nav-page-text,.sidebar-navigation .sidebar-section .sidebar-item{font-size:.875rem}.sidebar-navigation .sidebar-item{font-size:.925rem}.sidebar.sidebar-navigation{display:block;position:sticky}.sidebar-search{width:100%}.sidebar .sidebar-footer{visibility:visible}}@media(max-width: 991.98px){#quarto-sidebar-glass{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(255,255,255,0);transition:background-color .15s ease-in;z-index:-1}#quarto-sidebar-glass.collapsing{z-index:1000}#quarto-sidebar-glass.show{transition:background-color .15s ease-out;background-color:rgba(102,102,102,.4);z-index:1000}}.sidebar .sidebar-footer{padding:.5rem 1rem;align-self:flex-end;color:#6c757d;width:100%}.quarto-page-breadcrumbs .breadcrumb-item+.breadcrumb-item,.quarto-page-breadcrumbs .breadcrumb-item{padding-right:.33em;padding-left:0}.quarto-page-breadcrumbs .breadcrumb-item::before{padding-right:.33em}.quarto-sidebar-footer{font-size:.875em}.sidebar-section .bi-chevron-right{vertical-align:middle}.sidebar-section .bi-chevron-right::before{font-size:.9em}.notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.btn:focus:not(:focus-visible){box-shadow:none}.page-navigation{display:flex;justify-content:space-between}.nav-page{padding-bottom:.75em}.nav-page .bi{font-size:1.8rem;vertical-align:middle}.nav-page .nav-page-text{padding-left:.25em;padding-right:.25em}.nav-page a{color:#6c757d;text-decoration:none;display:flex;align-items:center}.nav-page a:hover{color:#1f4eb6}.nav-footer .toc-actions{padding-bottom:.5em;padding-top:.5em}.nav-footer .toc-actions a,.nav-footer .toc-actions a:hover{text-decoration:none}.nav-footer .toc-actions ul{display:flex;list-style:none}.nav-footer .toc-actions ul :first-child{margin-left:auto}.nav-footer .toc-actions ul :last-child{margin-right:auto}.nav-footer .toc-actions ul li{padding-right:1.5em}.nav-footer .toc-actions ul li i.bi{padding-right:.4em}.nav-footer .toc-actions ul li:last-of-type{padding-right:0}.nav-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;text-align:center;padding-top:.5rem;padding-bottom:.5rem;background-color:#fff}body.nav-fixed{padding-top:64px}.nav-footer-contents{color:#6c757d;margin-top:.25rem}.nav-footer{min-height:3.5em;color:#757575}.nav-footer a{color:#757575}.nav-footer .nav-footer-left{font-size:.825em}.nav-footer .nav-footer-center{font-size:.825em}.nav-footer .nav-footer-right{font-size:.825em}.nav-footer-left .footer-items,.nav-footer-center .footer-items,.nav-footer-right .footer-items{display:inline-flex;padding-top:.3em;padding-bottom:.3em;margin-bottom:0em}.nav-footer-left .footer-items .nav-link,.nav-footer-center .footer-items .nav-link,.nav-footer-right .footer-items .nav-link{padding-left:.6em;padding-right:.6em}.nav-footer-left{flex:1 1 0px;text-align:left}.nav-footer-right{flex:1 1 0px;text-align:right}.nav-footer-center{flex:1 1 0px;min-height:3em;text-align:center}.nav-footer-center .footer-items{justify-content:center}@media(max-width: 767.98px){.nav-footer-center{margin-top:3em}}.navbar .quarto-reader-toggle.reader .quarto-reader-toggle-btn{background-color:#fdfeff;border-radius:3px}@media(max-width: 991.98px){.quarto-reader-toggle{display:none}}.quarto-reader-toggle.reader.quarto-navigation-tool .quarto-reader-toggle-btn{background-color:#595959;border-radius:3px}.quarto-reader-toggle .quarto-reader-toggle-btn{display:inline-flex;padding-left:.2em;padding-right:.2em;margin-left:-0.2em;margin-right:-0.2em;text-align:center}.navbar .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}#quarto-back-to-top{display:none;position:fixed;bottom:50px;background-color:#fff;border-radius:.25rem;box-shadow:0 .2rem .5rem #6c757d,0 0 .05rem #6c757d;color:#6c757d;text-decoration:none;font-size:.9em;text-align:center;left:50%;padding:.4rem .8rem;transform:translate(-50%, 0)}.aa-DetachedSearchButtonQuery{display:none}.aa-DetachedOverlay ul.aa-List,#quarto-search-results ul.aa-List{list-style:none;padding-left:0}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{background-color:#fff;position:absolute;z-index:2000}#quarto-search-results .aa-Panel{max-width:400px}#quarto-search input{font-size:.925rem}@media(min-width: 992px){.navbar #quarto-search{margin-left:.25rem;order:999}}.navbar.navbar-expand-sm #quarto-search,.navbar.navbar-expand-md #quarto-search{order:999}@media(min-width: 992px){.navbar .quarto-navbar-tools{margin-left:auto;order:900}}@media(max-width: 991.98px){#quarto-sidebar .sidebar-search{display:none}}#quarto-sidebar .sidebar-search .aa-Autocomplete{width:100%}.navbar .aa-Autocomplete .aa-Form{width:180px}.navbar #quarto-search.type-overlay .aa-Autocomplete{width:40px}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form{background-color:inherit;border:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form:focus-within{box-shadow:none;outline:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper{display:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper:focus-within{display:inherit}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-Label svg,.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-LoadingIndicator svg{width:26px;height:26px;color:#fdfeff;opacity:1}.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon{width:26px;height:26px;color:#fdfeff;opacity:1}.aa-Autocomplete .aa-Form,.aa-DetachedFormContainer .aa-Form{align-items:center;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;color:#343a40;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Autocomplete .aa-Form:focus-within,.aa-DetachedFormContainer .aa-Form:focus-within{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;order:1}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{cursor:initial;flex-shrink:0;padding:0;text-align:left}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg{color:#343a40;opacity:.5}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton{appearance:none;background:none;border:0;margin:0}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapper,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper{order:3;position:relative;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input{appearance:none;background:none;border:0;color:#343a40;font:inherit;height:calc(1.5em + .1rem + 2px);padding:0;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::placeholder,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::placeholder{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix{align-items:center;display:flex;order:4}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton{align-items:center;background:none;border:0;color:#343a40;opacity:.8;cursor:pointer;display:flex;margin:0;width:calc(1.5em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg{width:calc(1.5em + 0.75rem + calc(1px * 2))}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton{border:none;align-items:center;background:none;color:#343a40;opacity:.4;font-size:.7rem;cursor:pointer;display:none;margin:0;width:calc(1em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden]{display:none}.aa-PanelLayout:empty{display:none}.quarto-search-no-results.no-query{display:none}.aa-Source:has(.no-query){display:none}#quarto-search-results .aa-Panel{border:solid #dee2e6 1px}#quarto-search-results .aa-SourceNoResults{width:398px}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{max-height:65vh;overflow-y:auto;font-size:.925rem}.aa-DetachedOverlay .aa-SourceNoResults,#quarto-search-results .aa-SourceNoResults{height:60px;display:flex;justify-content:center;align-items:center}.aa-DetachedOverlay .search-error,#quarto-search-results .search-error{padding-top:10px;padding-left:20px;padding-right:20px;cursor:default}.aa-DetachedOverlay .search-error .search-error-title,#quarto-search-results .search-error .search-error-title{font-size:1.1rem;margin-bottom:.5rem}.aa-DetachedOverlay .search-error .search-error-title .search-error-icon,#quarto-search-results .search-error .search-error-title .search-error-icon{margin-right:8px}.aa-DetachedOverlay .search-error .search-error-text,#quarto-search-results .search-error .search-error-text{font-weight:300}.aa-DetachedOverlay .search-result-text,#quarto-search-results .search-result-text{font-weight:300;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.2rem;max-height:2.4rem}.aa-DetachedOverlay .aa-SourceHeader .search-result-header,#quarto-search-results .aa-SourceHeader .search-result-header{font-size:.875rem;background-color:#f2f2f2;padding-left:14px;padding-bottom:4px;padding-top:4px}.aa-DetachedOverlay .aa-SourceHeader .search-result-header-no-results,#quarto-search-results .aa-SourceHeader .search-result-header-no-results{display:none}.aa-DetachedOverlay .aa-SourceFooter .algolia-search-logo,#quarto-search-results .aa-SourceFooter .algolia-search-logo{width:110px;opacity:.85;margin:8px;float:right}.aa-DetachedOverlay .search-result-section,#quarto-search-results .search-result-section{font-size:.925em}.aa-DetachedOverlay a.search-result-link,#quarto-search-results a.search-result-link{color:inherit;text-decoration:none}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item,#quarto-search-results li.aa-Item[aria-selected=true] .search-item{background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text-container{color:#fff;background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=true] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-match.mark{color:#fff;background-color:#4b95e8}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item,#quarto-search-results li.aa-Item[aria-selected=false] .search-item{background-color:#fff}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text-container{color:#343a40}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=false] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-match.mark{color:inherit;background-color:#e5effc}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container{background-color:#fff;color:#343a40}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container{padding-top:0px}.aa-DetachedOverlay li.aa-Item .search-result-doc.document-selectable .search-result-text-container,#quarto-search-results li.aa-Item .search-result-doc.document-selectable .search-result-text-container{margin-top:-4px}.aa-DetachedOverlay .aa-Item,#quarto-search-results .aa-Item{cursor:pointer}.aa-DetachedOverlay .aa-Item .search-item,#quarto-search-results .aa-Item .search-item{border-left:none;border-right:none;border-top:none;background-color:#fff;border-color:#dee2e6;color:#343a40}.aa-DetachedOverlay .aa-Item .search-item p,#quarto-search-results .aa-Item .search-item p{margin-top:0;margin-bottom:0}.aa-DetachedOverlay .aa-Item .search-item i.bi,#quarto-search-results .aa-Item .search-item i.bi{padding-left:8px;padding-right:8px;font-size:1.3em}.aa-DetachedOverlay .aa-Item .search-item .search-result-title,#quarto-search-results .aa-Item .search-item .search-result-title{margin-top:.3em;margin-bottom:0em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs,#quarto-search-results .aa-Item .search-item .search-result-crumbs{white-space:nowrap;text-overflow:ellipsis;font-size:.8em;font-weight:300;margin-right:1em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap),#quarto-search-results .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap){max-width:30%;margin-left:auto;margin-top:.5em;margin-bottom:.1rem}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap,#quarto-search-results .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap{flex-basis:100%;margin-top:0em;margin-bottom:.2em;margin-left:37px}.aa-DetachedOverlay .aa-Item .search-result-title-container,#quarto-search-results .aa-Item .search-result-title-container{font-size:1em;display:flex;flex-wrap:wrap;padding:6px 4px 6px 4px}.aa-DetachedOverlay .aa-Item .search-result-text-container,#quarto-search-results .aa-Item .search-result-text-container{padding-bottom:8px;padding-right:8px;margin-left:42px}.aa-DetachedOverlay .aa-Item .search-result-doc-section,.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-doc-section,#quarto-search-results .aa-Item .search-result-more{padding-top:8px;padding-bottom:8px;padding-left:44px}.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-more{font-size:.8em;font-weight:400}.aa-DetachedOverlay .aa-Item .search-result-doc,#quarto-search-results .aa-Item .search-result-doc{border-top:1px solid #dee2e6}.aa-DetachedSearchButton{background:none;border:none}.aa-DetachedSearchButton .aa-DetachedSearchButtonPlaceholder{display:none}.navbar .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:#fdfeff}.sidebar-tools-collapse #quarto-search,.sidebar-tools-main #quarto-search{display:inline}.sidebar-tools-collapse #quarto-search .aa-Autocomplete,.sidebar-tools-main #quarto-search .aa-Autocomplete{display:inline}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton{padding-left:4px;padding-right:4px}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:#595959}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon{margin-top:-3px}.aa-DetachedContainer{background:rgba(255,255,255,.65);width:90%;bottom:0;box-shadow:rgba(222,226,230,.6) 0 0 0 1px;outline:currentColor none medium;display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:1101}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{background-color:#fff;border-bottom:1px solid #dee2e6;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:.5em}.aa-DetachedCancelButton{background:none;font-size:.8em;border:0;border-radius:3px;color:#343a40;cursor:pointer;margin:0 0 0 .5em;padding:0 .5em}.aa-DetachedCancelButton:hover,.aa-DetachedCancelButton:focus{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-DetachedContainer--modal{bottom:inherit;height:auto;margin:0 auto;position:absolute;top:100px;border-radius:6px;max-width:850px}@media(max-width: 575.98px){.aa-DetachedContainer--modal{width:100%;top:0px;border-radius:0px;border:none}}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:var(--aa-detached-modal-max-height);padding-bottom:var(--aa-spacing-half);position:static}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(52,58,64,.4);position:fixed;left:0;right:0;top:0;margin:0;padding:0;height:100vh;z-index:1100}.quarto-dashboard.nav-fixed.dashboard-sidebar #quarto-content.quarto-dashboard-content{padding:0em}.quarto-dashboard #quarto-content.quarto-dashboard-content{padding:1em}.quarto-dashboard #quarto-content.quarto-dashboard-content>*{padding-top:0}@media(min-width: 576px){.quarto-dashboard{height:100%}}.quarto-dashboard .card.valuebox.bslib-card.bg-primary{background-color:#5397e9 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-secondary{background-color:#343a40 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-success{background-color:#3aa716 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-info{background-color:rgba(153,84,187,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-warning{background-color:#fa6400 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-danger{background-color:rgba(255,0,57,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-light{background-color:#f8f9fa !important}.quarto-dashboard .card.valuebox.bslib-card.bg-dark{background-color:#343a40 !important}.quarto-dashboard.dashboard-fill{display:flex;flex-direction:column}.quarto-dashboard #quarto-appendix{display:none}.quarto-dashboard #quarto-header #quarto-dashboard-header{border-top:solid 1px #549be9;border-bottom:solid 1px #549be9}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav{padding-left:1em;padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav .navbar-brand-container{padding-left:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler{margin-right:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler-icon{height:1em;width:1em;background-image:url('data:image/svg+xml,')}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-brand-container{padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-title{font-size:1.1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-nav{font-size:.9em}.quarto-dashboard #quarto-dashboard-header .navbar{padding:0}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-container{padding-left:1em}.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-brand-container .nav-link,.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-nav .nav-link{padding:.7em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-color-scheme-toggle{order:9}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-toggler{margin-left:.5em;order:10}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .nav-link{padding:.5em;height:100%;display:flex;align-items:center}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .active{background-color:#4b95e8}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{padding:.5em .5em .5em 0;display:flex;flex-direction:row;margin-right:2em;align-items:center}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{margin-right:auto}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{align-self:stretch}@media(min-width: 768px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:8}}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:1000;padding-bottom:.5em}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse .navbar-nav{align-self:stretch}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title{font-size:1.25em;line-height:1.1em;display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title .navbar-title-text{margin-right:.4em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title a{text-decoration:none;color:inherit}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-subtitle,.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{font-size:.9rem;margin-right:.5em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{margin-left:auto}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-logo{max-height:48px;min-height:30px;object-fit:cover;margin-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-links{order:9;padding-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link-text{margin-left:.25em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link{padding-right:0em;padding-left:.7em;text-decoration:none;color:#fdfeff}.quarto-dashboard .page-layout-custom .tab-content{padding:0;border:none}.quarto-dashboard-img-contain{height:100%;width:100%;object-fit:contain}@media(max-width: 575.98px){.quarto-dashboard .bslib-grid{grid-template-rows:minmax(1em, max-content) !important}.quarto-dashboard .sidebar-content{height:inherit}.quarto-dashboard .page-layout-custom{min-height:100vh}}.quarto-dashboard.dashboard-toolbar>.page-layout-custom,.quarto-dashboard.dashboard-sidebar>.page-layout-custom{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages{padding:0}.quarto-dashboard .callout{margin-bottom:0;margin-top:0}.quarto-dashboard .html-fill-container figure{overflow:hidden}.quarto-dashboard bslib-tooltip .rounded-pill{border:solid #6c757d 1px}.quarto-dashboard bslib-tooltip .rounded-pill .svg{fill:#343a40}.quarto-dashboard .tabset .dashboard-card-no-title .nav-tabs{margin-left:0;margin-right:auto}.quarto-dashboard .tabset .tab-content{border:none}.quarto-dashboard .tabset .card-header .nav-link[role=tab]{margin-top:-6px;padding-top:6px;padding-bottom:6px}.quarto-dashboard .card.valuebox,.quarto-dashboard .card.bslib-value-box{min-height:3rem}.quarto-dashboard .card.valuebox .card-body,.quarto-dashboard .card.bslib-value-box .card-body{padding:0}.quarto-dashboard .bslib-value-box .value-box-value{font-size:clamp(.1em,15cqw,5em)}.quarto-dashboard .bslib-value-box .value-box-showcase .bi{font-size:clamp(.1em,max(18cqw,5.2cqh),5em);text-align:center;height:1em}.quarto-dashboard .bslib-value-box .value-box-showcase .bi::before{vertical-align:1em}.quarto-dashboard .bslib-value-box .value-box-area{margin-top:auto;margin-bottom:auto}.quarto-dashboard .card figure.quarto-float{display:flex;flex-direction:column;align-items:center}.quarto-dashboard .dashboard-scrolling{padding:1em}.quarto-dashboard .full-height{height:100%}.quarto-dashboard .showcase-bottom .value-box-grid{display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:"top" "bottom"}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase i.bi{font-size:4rem}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-area{grid-area:top}.quarto-dashboard .tab-content{margin-bottom:0}.quarto-dashboard .bslib-card .bslib-navs-card-title{justify-content:stretch;align-items:end}.quarto-dashboard .card-header{display:flex;flex-wrap:wrap;justify-content:space-between}.quarto-dashboard .card-header .card-title{display:flex;flex-direction:column;justify-content:center;margin-bottom:0}.quarto-dashboard .tabset .card-toolbar{margin-bottom:1em}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{border:none;gap:var(--bslib-spacer, 1rem)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{padding:0}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.sidebar{border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.collapse-toggle{display:none}@media(max-width: 767.98px){.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{grid-template-columns:1fr;grid-template-rows:max-content 1fr}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{grid-column:1;grid-row:2}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout .sidebar{grid-column:1;grid-row:1}}.quarto-dashboard .sidebar-right .sidebar{padding-left:2.5em}.quarto-dashboard .sidebar-right .collapse-toggle{left:2px}.quarto-dashboard .quarto-dashboard .sidebar-right button.collapse-toggle:not(.transitioning){left:unset}.quarto-dashboard aside.sidebar{padding-left:1em;padding-right:1em;background-color:rgba(52,58,64,.25);color:#343a40}.quarto-dashboard .bslib-sidebar-layout>div.main{padding:.7em}.quarto-dashboard .bslib-sidebar-layout button.collapse-toggle{margin-top:.3em}.quarto-dashboard .bslib-sidebar-layout .collapse-toggle{top:0}.quarto-dashboard .bslib-sidebar-layout.sidebar-collapsed:not(.transitioning):not(.sidebar-right) .collapse-toggle{left:2px}.quarto-dashboard .sidebar>section>.h3:first-of-type{margin-top:0em}.quarto-dashboard .sidebar .h3,.quarto-dashboard .sidebar .h4,.quarto-dashboard .sidebar .h5,.quarto-dashboard .sidebar .h6{margin-top:.5em}.quarto-dashboard .sidebar form{flex-direction:column;align-items:start;margin-bottom:1em}.quarto-dashboard .sidebar form div[class*=oi-][class$=-input]{flex-direction:column}.quarto-dashboard .sidebar form[class*=oi-][class$=-toggle]{flex-direction:row-reverse;align-items:center;justify-content:start}.quarto-dashboard .sidebar form input[type=range]{margin-top:.5em;margin-right:.8em;margin-left:1em}.quarto-dashboard .sidebar label{width:fit-content}.quarto-dashboard .sidebar .card-body{margin-bottom:2em}.quarto-dashboard .sidebar .shiny-input-container{margin-bottom:1em}.quarto-dashboard .sidebar .shiny-options-group{margin-top:0}.quarto-dashboard .sidebar .control-label{margin-bottom:.3em}.quarto-dashboard .card .card-body .quarto-layout-row{align-items:stretch}.quarto-dashboard .toolbar{font-size:.9em;display:flex;flex-direction:row;border-top:solid 1px #bcbfc0;padding:1em;flex-wrap:wrap;background-color:rgba(52,58,64,.25)}.quarto-dashboard .toolbar .cell-output-display{display:flex}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar>*:last-child{margin-right:0}.quarto-dashboard .toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .toolbar .input-daterange{width:inherit}.quarto-dashboard .toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar form{width:fit-content}.quarto-dashboard .toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .toolbar form input[type=date]{width:fit-content}.quarto-dashboard .toolbar form input[type=color]{width:3em}.quarto-dashboard .toolbar form button{padding:.4em}.quarto-dashboard .toolbar form select{width:fit-content}.quarto-dashboard .toolbar>*{font-size:.9em;flex-grow:0}.quarto-dashboard .toolbar .shiny-input-container label{margin-bottom:1px}.quarto-dashboard .toolbar-bottom{margin-top:1em;margin-bottom:0 !important;order:2}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>.tab-content>.tab-pane>*:not(.bslib-sidebar-layout){padding:1em}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>*:not(.tab-content){padding:1em}.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page>.dashboard-toolbar-container>.toolbar-content,.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page:not(.dashboard-sidebar-container)>*:not(.dashboard-toolbar-container){padding:1em}.quarto-dashboard .toolbar-content{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages .tab-pane>.dashboard-toolbar-container .toolbar{border-radius:0;margin-bottom:0}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar{border-bottom:1px solid rgba(0,0,0,.175)}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar-bottom{margin-top:0}.quarto-dashboard .dashboard-toolbar-container:not(.toolbar-toplevel) .toolbar{margin-bottom:1em;border-top:none;border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .vega-embed.has-actions details{width:1.7em;height:2em;position:absolute !important;top:0;right:0}.quarto-dashboard .dashboard-toolbar-container{padding:0}.quarto-dashboard .card .card-header p:last-child,.quarto-dashboard .card .card-footer p:last-child{margin-bottom:0}.quarto-dashboard .card .card-body>.h4:first-child{margin-top:0}.quarto-dashboard .card .card-body{z-index:1000}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_length,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_info,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate{text-align:initial}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_filter{text-align:right}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:initial}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding-top:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper table{flex-shrink:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons{margin-bottom:.5em;margin-left:auto;width:fit-content;float:right}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons.btn-group{background:#fff;border:none}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn-secondary{background-color:#fff;background-image:none;border:solid #dee2e6 1px;padding:.2em .7em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn span{font-size:.8em;color:#343a40}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{margin-left:.5em;margin-bottom:.5em;padding-top:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.875em}}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.8em}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter{margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter input[type=search]{padding:1px 5px 1px 5px;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length{flex-basis:1 1 50%;margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length select{padding:.4em 3em .4em .5em;font-size:.875em;margin-left:.2em;margin-right:.2em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{flex-shrink:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{margin-left:auto}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate ul.pagination .paginate_button .page-link{font-size:.8em}.quarto-dashboard .card .card-footer{font-size:.9em}.quarto-dashboard .card .card-toolbar{display:flex;flex-grow:1;flex-direction:row;width:100%;flex-wrap:wrap}.quarto-dashboard .card .card-toolbar>*{font-size:.8em;flex-grow:0}.quarto-dashboard .card .card-toolbar>.card-title{font-size:1em;flex-grow:1;align-self:flex-start;margin-top:.1em}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar form{width:fit-content}.quarto-dashboard .card .card-toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=date]{width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=color]{width:3em}.quarto-dashboard .card .card-toolbar form button{padding:.4em}.quarto-dashboard .card .card-toolbar form select{width:fit-content}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .card .card-toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .card .card-toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .card .card-toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange{width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .card .card-toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .card .card-toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .card .card-toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .card .card-toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card-body>table>thead{border-top:none}.quarto-dashboard .card-body>.table>:not(caption)>*>*{background-color:#fff}.quarto-listing{padding-bottom:1em}.listing-pagination{padding-top:.5em}ul.pagination{float:right;padding-left:8px;padding-top:.5em}ul.pagination li{padding-right:.75em}ul.pagination li.disabled a,ul.pagination li.active a{color:#fff;text-decoration:none}ul.pagination li:last-of-type{padding-right:0}.listing-actions-group{display:flex}.quarto-listing-filter{margin-bottom:1em;width:200px;margin-left:auto}.quarto-listing-sort{margin-bottom:1em;margin-right:auto;width:auto}.quarto-listing-sort .input-group-text{font-size:.8em}.input-group-text{border-right:none}.quarto-listing-sort select.form-select{font-size:.8em}.listing-no-matching{text-align:center;padding-top:2em;padding-bottom:3em;font-size:1em}#quarto-margin-sidebar .quarto-listing-category{padding-top:0;font-size:1rem}#quarto-margin-sidebar .quarto-listing-category-title{cursor:pointer;font-weight:600;font-size:1rem}.quarto-listing-category .category{cursor:pointer}.quarto-listing-category .category.active{font-weight:600}.quarto-listing-category.category-cloud{display:flex;flex-wrap:wrap;align-items:baseline}.quarto-listing-category.category-cloud .category{padding-right:5px}.quarto-listing-category.category-cloud .category-cloud-1{font-size:.75em}.quarto-listing-category.category-cloud .category-cloud-2{font-size:.95em}.quarto-listing-category.category-cloud .category-cloud-3{font-size:1.15em}.quarto-listing-category.category-cloud .category-cloud-4{font-size:1.35em}.quarto-listing-category.category-cloud .category-cloud-5{font-size:1.55em}.quarto-listing-category.category-cloud .category-cloud-6{font-size:1.75em}.quarto-listing-category.category-cloud .category-cloud-7{font-size:1.95em}.quarto-listing-category.category-cloud .category-cloud-8{font-size:2.15em}.quarto-listing-category.category-cloud .category-cloud-9{font-size:2.35em}.quarto-listing-category.category-cloud .category-cloud-10{font-size:2.55em}.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-1{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-2{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-3{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-3{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-4{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-4{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-5{grid-template-columns:repeat(5, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-5{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-5{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-6{grid-template-columns:repeat(6, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-6{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-6{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-7{grid-template-columns:repeat(7, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-7{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-7{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-8{grid-template-columns:repeat(8, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-8{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-8{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-9{grid-template-columns:repeat(9, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-9{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-9{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-10{grid-template-columns:repeat(10, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-10{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-10{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-11{grid-template-columns:repeat(11, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-11{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-11{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-12{grid-template-columns:repeat(12, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-12{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-12{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-grid{gap:1.5em}.quarto-grid-item.borderless{border:none}.quarto-grid-item.borderless .listing-categories .listing-category:last-of-type,.quarto-grid-item.borderless .listing-categories .listing-category:first-of-type{padding-left:0}.quarto-grid-item.borderless .listing-categories .listing-category{border:0}.quarto-grid-link{text-decoration:none;color:inherit}.quarto-grid-link:hover{text-decoration:none;color:inherit}.quarto-grid-item h5.title,.quarto-grid-item .title.h5{margin-top:0;margin-bottom:0}.quarto-grid-item .card-footer{display:flex;justify-content:space-between;font-size:.8em}.quarto-grid-item .card-footer p{margin-bottom:0}.quarto-grid-item p.card-img-top{margin-bottom:0}.quarto-grid-item p.card-img-top>img{object-fit:cover}.quarto-grid-item .card-other-values{margin-top:.5em;font-size:.8em}.quarto-grid-item .card-other-values tr{margin-bottom:.5em}.quarto-grid-item .card-other-values tr>td:first-of-type{font-weight:600;padding-right:1em;padding-left:1em;vertical-align:top}.quarto-grid-item div.post-contents{display:flex;flex-direction:column;text-decoration:none;height:100%}.quarto-grid-item .listing-item-img-placeholder{background-color:rgba(52,58,64,.25);flex-shrink:0}.quarto-grid-item .card-attribution{padding-top:1em;display:flex;gap:1em;text-transform:uppercase;color:#6c757d;font-weight:500;flex-grow:10;align-items:flex-end}.quarto-grid-item .description{padding-bottom:1em}.quarto-grid-item .card-attribution .date{align-self:flex-end}.quarto-grid-item .card-attribution.justify{justify-content:space-between}.quarto-grid-item .card-attribution.start{justify-content:flex-start}.quarto-grid-item .card-attribution.end{justify-content:flex-end}.quarto-grid-item .card-title{margin-bottom:.1em}.quarto-grid-item .card-subtitle{padding-top:.25em}.quarto-grid-item .card-text{font-size:.9em}.quarto-grid-item .listing-reading-time{padding-bottom:.25em}.quarto-grid-item .card-text-small{font-size:.8em}.quarto-grid-item .card-subtitle.subtitle{font-size:.9em;font-weight:600;padding-bottom:.5em}.quarto-grid-item .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}.quarto-grid-item .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}.quarto-grid-item.card-right{text-align:right}.quarto-grid-item.card-right .listing-categories{justify-content:flex-end}.quarto-grid-item.card-left{text-align:left}.quarto-grid-item.card-center{text-align:center}.quarto-grid-item.card-center .listing-description{text-align:justify}.quarto-grid-item.card-center .listing-categories{justify-content:center}table.quarto-listing-table td.image{padding:0px}table.quarto-listing-table td.image img{width:100%;max-width:50px;object-fit:contain}table.quarto-listing-table a{text-decoration:none;word-break:keep-all}table.quarto-listing-table th a{color:inherit}table.quarto-listing-table th a.asc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table th a.desc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table.table-hover td{cursor:pointer}.quarto-post.image-left{flex-direction:row}.quarto-post.image-right{flex-direction:row-reverse}@media(max-width: 767.98px){.quarto-post.image-right,.quarto-post.image-left{gap:0em;flex-direction:column}.quarto-post .metadata{padding-bottom:1em;order:2}.quarto-post .body{order:1}.quarto-post .thumbnail{order:3}}.list.quarto-listing-default div:last-of-type{border-bottom:none}@media(min-width: 992px){.quarto-listing-container-default{margin-right:2em}}div.quarto-post{display:flex;gap:2em;margin-bottom:1.5em;border-bottom:1px solid #dee2e6}@media(max-width: 767.98px){div.quarto-post{padding-bottom:1em}}div.quarto-post .metadata{flex-basis:20%;flex-grow:0;margin-top:.2em;flex-shrink:10}div.quarto-post .thumbnail{flex-basis:30%;flex-grow:0;flex-shrink:0}div.quarto-post .thumbnail img{margin-top:.4em;width:100%;object-fit:cover}div.quarto-post .body{flex-basis:45%;flex-grow:1;flex-shrink:0}div.quarto-post .body h3.listing-title,div.quarto-post .body .listing-title.h3{margin-top:0px;margin-bottom:0px;border-bottom:none}div.quarto-post .body .listing-subtitle{font-size:.875em;margin-bottom:.5em;margin-top:.2em}div.quarto-post .body .description{font-size:.9em}div.quarto-post .body pre code{white-space:pre-wrap}div.quarto-post a{color:#343a40;text-decoration:none}div.quarto-post .metadata{display:flex;flex-direction:column;font-size:.8em;font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";flex-basis:33%}div.quarto-post .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}div.quarto-post .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}div.quarto-post .listing-description{margin-bottom:.5em}div.quarto-about-jolla{display:flex !important;flex-direction:column;align-items:center;margin-top:10%;padding-bottom:1em}div.quarto-about-jolla .about-image{object-fit:cover;margin-left:auto;margin-right:auto;margin-bottom:1.5em}div.quarto-about-jolla img.round{border-radius:50%}div.quarto-about-jolla img.rounded{border-radius:10px}div.quarto-about-jolla .quarto-title h1.title,div.quarto-about-jolla .quarto-title .title.h1{text-align:center}div.quarto-about-jolla .quarto-title .description{text-align:center}div.quarto-about-jolla h2,div.quarto-about-jolla .h2{border-bottom:none}div.quarto-about-jolla .about-sep{width:60%}div.quarto-about-jolla main{text-align:center}div.quarto-about-jolla .about-links{display:flex}@media(min-width: 992px){div.quarto-about-jolla .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-jolla .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-jolla .about-link{color:#626d78;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-jolla .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-jolla .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-jolla .about-link:hover{color:#2761e3}div.quarto-about-jolla .about-link i.bi{margin-right:.15em}div.quarto-about-solana{display:flex !important;flex-direction:column;padding-top:3em !important;padding-bottom:1em}div.quarto-about-solana .about-entity{display:flex !important;align-items:start;justify-content:space-between}@media(min-width: 992px){div.quarto-about-solana .about-entity{flex-direction:row}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity{flex-direction:column-reverse;align-items:center;text-align:center}}div.quarto-about-solana .about-entity .entity-contents{display:flex;flex-direction:column}@media(max-width: 767.98px){div.quarto-about-solana .about-entity .entity-contents{width:100%}}div.quarto-about-solana .about-entity .about-image{object-fit:cover}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-image{margin-bottom:1.5em}}div.quarto-about-solana .about-entity img.round{border-radius:50%}div.quarto-about-solana .about-entity img.rounded{border-radius:10px}div.quarto-about-solana .about-entity .about-links{display:flex;justify-content:left;padding-bottom:1.2em}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-solana .about-entity .about-link{color:#626d78;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-solana .about-entity .about-link:hover{color:#2761e3}div.quarto-about-solana .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-solana .about-contents{padding-right:1.5em;flex-basis:0;flex-grow:1}div.quarto-about-solana .about-contents main.content{margin-top:0}div.quarto-about-solana .about-contents h2,div.quarto-about-solana .about-contents .h2{border-bottom:none}div.quarto-about-trestles{display:flex !important;flex-direction:row;padding-top:3em !important;padding-bottom:1em}@media(max-width: 991.98px){div.quarto-about-trestles{flex-direction:column;padding-top:0em !important}}div.quarto-about-trestles .about-entity{display:flex !important;flex-direction:column;align-items:center;text-align:center;padding-right:1em}@media(min-width: 992px){div.quarto-about-trestles .about-entity{flex:0 0 42%}}div.quarto-about-trestles .about-entity .about-image{object-fit:cover;margin-bottom:1.5em}div.quarto-about-trestles .about-entity img.round{border-radius:50%}div.quarto-about-trestles .about-entity img.rounded{border-radius:10px}div.quarto-about-trestles .about-entity .about-links{display:flex;justify-content:center}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-trestles .about-entity .about-link{color:#626d78;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-trestles .about-entity .about-link:hover{color:#2761e3}div.quarto-about-trestles .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-trestles .about-contents{flex-basis:0;flex-grow:1}div.quarto-about-trestles .about-contents h2,div.quarto-about-trestles .about-contents .h2{border-bottom:none}@media(min-width: 992px){div.quarto-about-trestles .about-contents{border-left:solid 1px #dee2e6;padding-left:1.5em}}div.quarto-about-trestles .about-contents main.content{margin-top:0}div.quarto-about-marquee{padding-bottom:1em}div.quarto-about-marquee .about-contents{display:flex;flex-direction:column}div.quarto-about-marquee .about-image{max-height:550px;margin-bottom:1.5em;object-fit:cover}div.quarto-about-marquee img.round{border-radius:50%}div.quarto-about-marquee img.rounded{border-radius:10px}div.quarto-about-marquee h2,div.quarto-about-marquee .h2{border-bottom:none}div.quarto-about-marquee .about-links{display:flex;justify-content:center;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-marquee .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-marquee .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-marquee .about-link{color:#626d78;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-marquee .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-marquee .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-marquee .about-link:hover{color:#2761e3}div.quarto-about-marquee .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-marquee .about-link{border:none}}div.quarto-about-broadside{display:flex;flex-direction:column;padding-bottom:1em}div.quarto-about-broadside .about-main{display:flex !important;padding-top:0 !important}@media(min-width: 992px){div.quarto-about-broadside .about-main{flex-direction:row;align-items:flex-start}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main{flex-direction:column}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main .about-entity{flex-shrink:0;width:100%;height:450px;margin-bottom:1.5em;background-size:cover;background-repeat:no-repeat}}@media(min-width: 992px){div.quarto-about-broadside .about-main .about-entity{flex:0 10 50%;margin-right:1.5em;width:100%;height:100%;background-size:100%;background-repeat:no-repeat}}div.quarto-about-broadside .about-main .about-contents{padding-top:14px;flex:0 0 50%}div.quarto-about-broadside h2,div.quarto-about-broadside .h2{border-bottom:none}div.quarto-about-broadside .about-sep{margin-top:1.5em;width:60%;align-self:center}div.quarto-about-broadside .about-links{display:flex;justify-content:center;column-gap:20px;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-broadside .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-broadside .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-broadside .about-link{color:#626d78;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-broadside .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-broadside .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-broadside .about-link:hover{color:#2761e3}div.quarto-about-broadside .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-broadside .about-link{border:none}}.tippy-box[data-theme~=quarto]{background-color:#fff;border:solid 1px #dee2e6;border-radius:.25rem;color:#343a40;font-size:.875rem}.tippy-box[data-theme~=quarto]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=quarto]>.tippy-arrow:after,.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=quarto]>.tippy-arrow:after{border-color:rgba(0,0,0,0);border-style:solid}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-6px}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-6px}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-6px}.tippy-box[data-placement^=left]>.tippy-arrow:before{right:-6px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:after{border-top-color:#dee2e6;border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:#dee2e6;border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:15px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:after{border-left-color:#dee2e6;border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:#dee2e6}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow{fill:#343a40}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}.top-right{position:absolute;top:1em;right:1em}.visually-hidden{border:0;clip:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none !important}.zindex-bottom{z-index:-1 !important}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:.5em}figure>figcaption.quarto-float-caption-top{margin-top:.5em}div[id^=tbl-]{position:relative}.quarto-figure>.anchorjs-link{position:absolute;top:.6em;right:.5em}div[id^=tbl-]>.anchorjs-link{position:absolute;top:.7em;right:.3em}.quarto-figure:hover>.anchorjs-link,div[id^=tbl-]:hover>.anchorjs-link,h2:hover>.anchorjs-link,.h2:hover>.anchorjs-link,h3:hover>.anchorjs-link,.h3:hover>.anchorjs-link,h4:hover>.anchorjs-link,.h4:hover>.anchorjs-link,h5:hover>.anchorjs-link,.h5:hover>.anchorjs-link,h6:hover>.anchorjs-link,.h6:hover>.anchorjs-link,.reveal-anchorjs-link>.anchorjs-link{opacity:1}#title-block-header{margin-block-end:1rem;position:relative;margin-top:-1px}#title-block-header .abstract{margin-block-start:1rem}#title-block-header .abstract .abstract-title{font-weight:600}#title-block-header a{text-decoration:none}#title-block-header .author,#title-block-header .date,#title-block-header .doi{margin-block-end:.2rem}#title-block-header .quarto-title-block>div{display:flex}#title-block-header .quarto-title-block>div>h1,#title-block-header .quarto-title-block>div>.h1{flex-grow:1}#title-block-header .quarto-title-block>div>button{flex-shrink:0;height:2.25rem;margin-top:0}@media(min-width: 992px){#title-block-header .quarto-title-block>div>button{margin-top:5px}}tr.header>th>p:last-of-type{margin-bottom:0px}table,table.table{margin-top:.5rem;margin-bottom:.5rem}caption,.table-caption{padding-top:.5rem;padding-bottom:.5rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-top{margin-top:.5rem;margin-bottom:.25rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-bottom{padding-top:.25rem;margin-bottom:.5rem;text-align:center}.utterances{max-width:none;margin-left:-8px}iframe{margin-bottom:1em}details{margin-bottom:1em}details[show]{margin-bottom:0}details>summary{color:#6c757d}details>summary>p:only-child{display:inline}pre.sourceCode,code.sourceCode{position:relative}p code:not(.sourceCode){white-space:pre-wrap}code{white-space:pre}@media print{code{white-space:pre-wrap}}pre>code{display:block}pre>code.sourceCode{white-space:pre}pre>code.sourceCode>span>a:first-child::before{text-decoration:none}pre.code-overflow-wrap>code.sourceCode{white-space:pre-wrap}pre.code-overflow-scroll>code.sourceCode{white-space:pre}code a:any-link{color:inherit;text-decoration:none}code a:hover{color:inherit;text-decoration:underline}ul.task-list{padding-left:1em}[data-tippy-root]{display:inline-block}.tippy-content .footnote-back{display:none}.footnote-back{margin-left:.2em}.tippy-content{overflow-x:auto}.quarto-embedded-source-code{display:none}.quarto-unresolved-ref{font-weight:600}.quarto-cover-image{max-width:35%;float:right;margin-left:30px}.cell-output-display .widget-subarea{margin-bottom:1em}.cell-output-display:not(.no-overflow-x),.knitsql-table:not(.no-overflow-x){overflow-x:auto}.panel-input{margin-bottom:1em}.panel-input>div,.panel-input>div>div{display:inline-block;vertical-align:top;padding-right:12px}.panel-input>p:last-child{margin-bottom:0}.layout-sidebar{margin-bottom:1em}.layout-sidebar .tab-content{border:none}.tab-content>.page-columns.active{display:grid}div.sourceCode>iframe{width:100%;height:300px;margin-bottom:-0.5em}a{text-underline-offset:3px}div.ansi-escaped-output{font-family:monospace;display:block}/*! +* +* ansi colors from IPython notebook's +* +* we also add `bright-[color]-` synonyms for the `-[color]-intense` classes since +* that seems to be what ansi_up emits +* +*/.ansi-black-fg{color:#3e424d}.ansi-black-bg{background-color:#3e424d}.ansi-black-intense-black,.ansi-bright-black-fg{color:#282c36}.ansi-black-intense-black,.ansi-bright-black-bg{background-color:#282c36}.ansi-red-fg{color:#e75c58}.ansi-red-bg{background-color:#e75c58}.ansi-red-intense-red,.ansi-bright-red-fg{color:#b22b31}.ansi-red-intense-red,.ansi-bright-red-bg{background-color:#b22b31}.ansi-green-fg{color:#00a250}.ansi-green-bg{background-color:#00a250}.ansi-green-intense-green,.ansi-bright-green-fg{color:#007427}.ansi-green-intense-green,.ansi-bright-green-bg{background-color:#007427}.ansi-yellow-fg{color:#ddb62b}.ansi-yellow-bg{background-color:#ddb62b}.ansi-yellow-intense-yellow,.ansi-bright-yellow-fg{color:#b27d12}.ansi-yellow-intense-yellow,.ansi-bright-yellow-bg{background-color:#b27d12}.ansi-blue-fg{color:#208ffb}.ansi-blue-bg{background-color:#208ffb}.ansi-blue-intense-blue,.ansi-bright-blue-fg{color:#0065ca}.ansi-blue-intense-blue,.ansi-bright-blue-bg{background-color:#0065ca}.ansi-magenta-fg{color:#d160c4}.ansi-magenta-bg{background-color:#d160c4}.ansi-magenta-intense-magenta,.ansi-bright-magenta-fg{color:#a03196}.ansi-magenta-intense-magenta,.ansi-bright-magenta-bg{background-color:#a03196}.ansi-cyan-fg{color:#60c6c8}.ansi-cyan-bg{background-color:#60c6c8}.ansi-cyan-intense-cyan,.ansi-bright-cyan-fg{color:#258f8f}.ansi-cyan-intense-cyan,.ansi-bright-cyan-bg{background-color:#258f8f}.ansi-white-fg{color:#c5c1b4}.ansi-white-bg{background-color:#c5c1b4}.ansi-white-intense-white,.ansi-bright-white-fg{color:#a1a6b2}.ansi-white-intense-white,.ansi-bright-white-bg{background-color:#a1a6b2}.ansi-default-inverse-fg{color:#fff}.ansi-default-inverse-bg{background-color:#000}.ansi-bold{font-weight:bold}.ansi-underline{text-decoration:underline}:root{--quarto-body-bg: #fff;--quarto-body-color: #343a40;--quarto-text-muted: #6c757d;--quarto-border-color: #dee2e6;--quarto-border-width: 1px;--quarto-border-radius: 0.25rem}table.gt_table{color:var(--quarto-body-color);font-size:1em;width:100%;background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_column_spanner_outer{color:var(--quarto-body-color);background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_col_heading{color:var(--quarto-body-color);font-weight:bold;background-color:rgba(0,0,0,0)}table.gt_table thead.gt_col_headings{border-bottom:1px solid currentColor;border-top-width:inherit;border-top-color:var(--quarto-border-color)}table.gt_table thead.gt_col_headings:not(:first-child){border-top-width:1px;border-top-color:var(--quarto-border-color)}table.gt_table td.gt_row{border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-width:0px}table.gt_table tbody.gt_table_body{border-top-width:1px;border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-color:currentColor}div.columns{display:initial;gap:initial}div.column{display:inline-block;overflow-x:initial;vertical-align:top;width:50%}.code-annotation-tip-content{word-wrap:break-word}.code-annotation-container-hidden{display:none !important}dl.code-annotation-container-grid{display:grid;grid-template-columns:min-content auto}dl.code-annotation-container-grid dt{grid-column:1}dl.code-annotation-container-grid dd{grid-column:2}pre.sourceCode.code-annotation-code{padding-right:0}code.sourceCode .code-annotation-anchor{z-index:100;position:relative;float:right;background-color:rgba(0,0,0,0)}input[type=checkbox]{margin-right:.5ch}:root{--mermaid-bg-color: #fff;--mermaid-edge-color: #343a40;--mermaid-node-fg-color: #343a40;--mermaid-fg-color: #343a40;--mermaid-fg-color--lighter: #4b545c;--mermaid-fg-color--lightest: #626d78;--mermaid-font-family: Source Sans Pro, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;--mermaid-label-bg-color: #fff;--mermaid-label-fg-color: #2780e3;--mermaid-node-bg-color: rgba(39, 128, 227, 0.1);--mermaid-node-fg-color: #343a40}@media print{:root{font-size:11pt}#quarto-sidebar,#TOC,.nav-page{display:none}.page-columns .content{grid-column-start:page-start}.fixed-top{position:relative}.panel-caption,.figure-caption,figcaption{color:#666}}.code-copy-button{position:absolute;top:0;right:0;border:0;margin-top:5px;margin-right:5px;background-color:rgba(0,0,0,0);z-index:3}.code-copy-button:focus{outline:none}.code-copy-button-tooltip{font-size:.75em}pre.sourceCode:hover>.code-copy-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}pre.sourceCode:hover>.code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}pre.sourceCode:hover>.code-copy-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}pre.sourceCode:hover>.code-copy-button-checked:hover>.bi::before{background-image:url('data:image/svg+xml,')}main ol ol,main ul ul,main ol ul,main ul ol{margin-bottom:1em}ul>li:not(:has(>p))>ul,ol>li:not(:has(>p))>ul,ul>li:not(:has(>p))>ol,ol>li:not(:has(>p))>ol{margin-bottom:0}ul>li:not(:has(>p))>ul>li:has(>p),ol>li:not(:has(>p))>ul>li:has(>p),ul>li:not(:has(>p))>ol>li:has(>p),ol>li:not(:has(>p))>ol>li:has(>p){margin-top:1rem}body{margin:0}main.page-columns>header>h1.title,main.page-columns>header>.title.h1{margin-bottom:0}@media(min-width: 992px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] 35px [page-end-inset page-end] 5fr [screen-end-inset] 1.5em}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 3em [body-end] 50px [body-end-outset] minmax(0px, 250px) [page-end-inset] minmax(50px, 100px) [page-end] 1fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 100px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 150px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 991.98px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1250px - 3em)) [body-content-end body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1.5em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 767.98px){body .page-columns,body.fullcontent:not(.floating):not(.docked) .page-columns,body.slimcontent:not(.floating):not(.docked) .page-columns,body.docked .page-columns,body.docked.slimcontent .page-columns,body.docked.fullcontent .page-columns,body.floating .page-columns,body.floating.slimcontent .page-columns,body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}nav[role=doc-toc]{display:none}}body,.page-row-navigation{grid-template-rows:[page-top] max-content [contents-top] max-content [contents-bottom] max-content [page-bottom]}.page-rows-contents{grid-template-rows:[content-top] minmax(max-content, 1fr) [content-bottom] minmax(60px, max-content) [page-bottom]}.page-full{grid-column:screen-start/screen-end !important}.page-columns>*{grid-column:body-content-start/body-content-end}.page-columns.column-page>*{grid-column:page-start/page-end}.page-columns.column-page-left .page-columns.page-full>*,.page-columns.column-page-left>*{grid-column:page-start/body-content-end}.page-columns.column-page-right .page-columns.page-full>*,.page-columns.column-page-right>*{grid-column:body-content-start/page-end}.page-rows{grid-auto-rows:auto}.header{grid-column:screen-start/screen-end;grid-row:page-top/contents-top}#quarto-content{padding:0;grid-column:screen-start/screen-end;grid-row:contents-top/contents-bottom}body.floating .sidebar.sidebar-navigation{grid-column:page-start/body-start;grid-row:content-top/page-bottom}body.docked .sidebar.sidebar-navigation{grid-column:screen-start/body-start;grid-row:content-top/page-bottom}.sidebar.toc-left{grid-column:page-start/body-start;grid-row:content-top/page-bottom}.sidebar.margin-sidebar{grid-column:body-end/page-end;grid-row:content-top/page-bottom}.page-columns .content{grid-column:body-content-start/body-content-end;grid-row:content-top/content-bottom;align-content:flex-start}.page-columns .page-navigation{grid-column:body-content-start/body-content-end;grid-row:content-bottom/page-bottom}.page-columns .footer{grid-column:screen-start/screen-end;grid-row:contents-bottom/page-bottom}.page-columns .column-body{grid-column:body-content-start/body-content-end}.page-columns .column-body-fullbleed{grid-column:body-start/body-end}.page-columns .column-body-outset{grid-column:body-start-outset/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset table{background:#fff}.page-columns .column-body-outset-left{grid-column:body-start-outset/body-content-end;z-index:998;opacity:.999}.page-columns .column-body-outset-left table{background:#fff}.page-columns .column-body-outset-right{grid-column:body-content-start/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset-right table{background:#fff}.page-columns .column-page{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-page table{background:#fff}.page-columns .column-page-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset table{background:#fff}.page-columns .column-page-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-inset-left table{background:#fff}.page-columns .column-page-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset-right figcaption table{background:#fff}.page-columns .column-page-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-left table{background:#fff}.page-columns .column-page-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-page-right figcaption table{background:#fff}#quarto-content.page-columns #quarto-margin-sidebar,#quarto-content.page-columns #quarto-sidebar{z-index:1}@media(max-width: 991.98px){#quarto-content.page-columns #quarto-margin-sidebar.collapse,#quarto-content.page-columns #quarto-sidebar.collapse,#quarto-content.page-columns #quarto-margin-sidebar.collapsing,#quarto-content.page-columns #quarto-sidebar.collapsing{z-index:1055}}#quarto-content.page-columns main.column-page,#quarto-content.page-columns main.column-page-right,#quarto-content.page-columns main.column-page-left{z-index:0}.page-columns .column-screen-inset{grid-column:screen-start-inset/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:screen-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:screen-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:screen-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:screen-start/screen-end;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}.zindex-content{z-index:998;opacity:.999}.zindex-modal{z-index:1055;opacity:.999}.zindex-over-content{z-index:999;opacity:.999}img.img-fluid.column-screen,img.img-fluid.column-screen-inset-shaded,img.img-fluid.column-screen-inset,img.img-fluid.column-screen-inset-left,img.img-fluid.column-screen-inset-right,img.img-fluid.column-screen-left,img.img-fluid.column-screen-right{width:100%}@media(min-width: 992px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.column-sidebar{grid-column:page-start/body-start !important;z-index:998}.column-leftmargin{grid-column:screen-start-inset/body-start !important;z-index:998}.no-row-height{height:1em;overflow:visible}}@media(max-width: 991.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.no-row-height{height:1em;overflow:visible}.page-columns.page-full{overflow:visible}.page-columns.toc-left .margin-caption,.page-columns.toc-left div.aside,.page-columns.toc-left aside:not(.footnotes):not(.sidebar),.page-columns.toc-left .column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.page-columns.toc-left .no-row-height{height:initial;overflow:initial}}@media(max-width: 767.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.no-row-height{height:initial;overflow:initial}#quarto-margin-sidebar{display:none}#quarto-sidebar-toc-left{display:none}.hidden-sm{display:none}}.panel-grid{display:grid;grid-template-rows:repeat(1, 1fr);grid-template-columns:repeat(24, 1fr);gap:1em}.panel-grid .g-col-1{grid-column:auto/span 1}.panel-grid .g-col-2{grid-column:auto/span 2}.panel-grid .g-col-3{grid-column:auto/span 3}.panel-grid .g-col-4{grid-column:auto/span 4}.panel-grid .g-col-5{grid-column:auto/span 5}.panel-grid .g-col-6{grid-column:auto/span 6}.panel-grid .g-col-7{grid-column:auto/span 7}.panel-grid .g-col-8{grid-column:auto/span 8}.panel-grid .g-col-9{grid-column:auto/span 9}.panel-grid .g-col-10{grid-column:auto/span 10}.panel-grid .g-col-11{grid-column:auto/span 11}.panel-grid .g-col-12{grid-column:auto/span 12}.panel-grid .g-col-13{grid-column:auto/span 13}.panel-grid .g-col-14{grid-column:auto/span 14}.panel-grid .g-col-15{grid-column:auto/span 15}.panel-grid .g-col-16{grid-column:auto/span 16}.panel-grid .g-col-17{grid-column:auto/span 17}.panel-grid .g-col-18{grid-column:auto/span 18}.panel-grid .g-col-19{grid-column:auto/span 19}.panel-grid .g-col-20{grid-column:auto/span 20}.panel-grid .g-col-21{grid-column:auto/span 21}.panel-grid .g-col-22{grid-column:auto/span 22}.panel-grid .g-col-23{grid-column:auto/span 23}.panel-grid .g-col-24{grid-column:auto/span 24}.panel-grid .g-start-1{grid-column-start:1}.panel-grid .g-start-2{grid-column-start:2}.panel-grid .g-start-3{grid-column-start:3}.panel-grid .g-start-4{grid-column-start:4}.panel-grid .g-start-5{grid-column-start:5}.panel-grid .g-start-6{grid-column-start:6}.panel-grid .g-start-7{grid-column-start:7}.panel-grid .g-start-8{grid-column-start:8}.panel-grid .g-start-9{grid-column-start:9}.panel-grid .g-start-10{grid-column-start:10}.panel-grid .g-start-11{grid-column-start:11}.panel-grid .g-start-12{grid-column-start:12}.panel-grid .g-start-13{grid-column-start:13}.panel-grid .g-start-14{grid-column-start:14}.panel-grid .g-start-15{grid-column-start:15}.panel-grid .g-start-16{grid-column-start:16}.panel-grid .g-start-17{grid-column-start:17}.panel-grid .g-start-18{grid-column-start:18}.panel-grid .g-start-19{grid-column-start:19}.panel-grid .g-start-20{grid-column-start:20}.panel-grid .g-start-21{grid-column-start:21}.panel-grid .g-start-22{grid-column-start:22}.panel-grid .g-start-23{grid-column-start:23}@media(min-width: 576px){.panel-grid .g-col-sm-1{grid-column:auto/span 1}.panel-grid .g-col-sm-2{grid-column:auto/span 2}.panel-grid .g-col-sm-3{grid-column:auto/span 3}.panel-grid .g-col-sm-4{grid-column:auto/span 4}.panel-grid .g-col-sm-5{grid-column:auto/span 5}.panel-grid .g-col-sm-6{grid-column:auto/span 6}.panel-grid .g-col-sm-7{grid-column:auto/span 7}.panel-grid .g-col-sm-8{grid-column:auto/span 8}.panel-grid .g-col-sm-9{grid-column:auto/span 9}.panel-grid .g-col-sm-10{grid-column:auto/span 10}.panel-grid .g-col-sm-11{grid-column:auto/span 11}.panel-grid .g-col-sm-12{grid-column:auto/span 12}.panel-grid .g-col-sm-13{grid-column:auto/span 13}.panel-grid .g-col-sm-14{grid-column:auto/span 14}.panel-grid .g-col-sm-15{grid-column:auto/span 15}.panel-grid .g-col-sm-16{grid-column:auto/span 16}.panel-grid .g-col-sm-17{grid-column:auto/span 17}.panel-grid .g-col-sm-18{grid-column:auto/span 18}.panel-grid .g-col-sm-19{grid-column:auto/span 19}.panel-grid .g-col-sm-20{grid-column:auto/span 20}.panel-grid .g-col-sm-21{grid-column:auto/span 21}.panel-grid .g-col-sm-22{grid-column:auto/span 22}.panel-grid .g-col-sm-23{grid-column:auto/span 23}.panel-grid .g-col-sm-24{grid-column:auto/span 24}.panel-grid .g-start-sm-1{grid-column-start:1}.panel-grid .g-start-sm-2{grid-column-start:2}.panel-grid .g-start-sm-3{grid-column-start:3}.panel-grid .g-start-sm-4{grid-column-start:4}.panel-grid .g-start-sm-5{grid-column-start:5}.panel-grid .g-start-sm-6{grid-column-start:6}.panel-grid .g-start-sm-7{grid-column-start:7}.panel-grid .g-start-sm-8{grid-column-start:8}.panel-grid .g-start-sm-9{grid-column-start:9}.panel-grid .g-start-sm-10{grid-column-start:10}.panel-grid .g-start-sm-11{grid-column-start:11}.panel-grid .g-start-sm-12{grid-column-start:12}.panel-grid .g-start-sm-13{grid-column-start:13}.panel-grid .g-start-sm-14{grid-column-start:14}.panel-grid .g-start-sm-15{grid-column-start:15}.panel-grid .g-start-sm-16{grid-column-start:16}.panel-grid .g-start-sm-17{grid-column-start:17}.panel-grid .g-start-sm-18{grid-column-start:18}.panel-grid .g-start-sm-19{grid-column-start:19}.panel-grid .g-start-sm-20{grid-column-start:20}.panel-grid .g-start-sm-21{grid-column-start:21}.panel-grid .g-start-sm-22{grid-column-start:22}.panel-grid .g-start-sm-23{grid-column-start:23}}@media(min-width: 768px){.panel-grid .g-col-md-1{grid-column:auto/span 1}.panel-grid .g-col-md-2{grid-column:auto/span 2}.panel-grid .g-col-md-3{grid-column:auto/span 3}.panel-grid .g-col-md-4{grid-column:auto/span 4}.panel-grid .g-col-md-5{grid-column:auto/span 5}.panel-grid .g-col-md-6{grid-column:auto/span 6}.panel-grid .g-col-md-7{grid-column:auto/span 7}.panel-grid .g-col-md-8{grid-column:auto/span 8}.panel-grid .g-col-md-9{grid-column:auto/span 9}.panel-grid .g-col-md-10{grid-column:auto/span 10}.panel-grid .g-col-md-11{grid-column:auto/span 11}.panel-grid .g-col-md-12{grid-column:auto/span 12}.panel-grid .g-col-md-13{grid-column:auto/span 13}.panel-grid .g-col-md-14{grid-column:auto/span 14}.panel-grid .g-col-md-15{grid-column:auto/span 15}.panel-grid .g-col-md-16{grid-column:auto/span 16}.panel-grid .g-col-md-17{grid-column:auto/span 17}.panel-grid .g-col-md-18{grid-column:auto/span 18}.panel-grid .g-col-md-19{grid-column:auto/span 19}.panel-grid .g-col-md-20{grid-column:auto/span 20}.panel-grid .g-col-md-21{grid-column:auto/span 21}.panel-grid .g-col-md-22{grid-column:auto/span 22}.panel-grid .g-col-md-23{grid-column:auto/span 23}.panel-grid .g-col-md-24{grid-column:auto/span 24}.panel-grid .g-start-md-1{grid-column-start:1}.panel-grid .g-start-md-2{grid-column-start:2}.panel-grid .g-start-md-3{grid-column-start:3}.panel-grid .g-start-md-4{grid-column-start:4}.panel-grid .g-start-md-5{grid-column-start:5}.panel-grid .g-start-md-6{grid-column-start:6}.panel-grid .g-start-md-7{grid-column-start:7}.panel-grid .g-start-md-8{grid-column-start:8}.panel-grid .g-start-md-9{grid-column-start:9}.panel-grid .g-start-md-10{grid-column-start:10}.panel-grid .g-start-md-11{grid-column-start:11}.panel-grid .g-start-md-12{grid-column-start:12}.panel-grid .g-start-md-13{grid-column-start:13}.panel-grid .g-start-md-14{grid-column-start:14}.panel-grid .g-start-md-15{grid-column-start:15}.panel-grid .g-start-md-16{grid-column-start:16}.panel-grid .g-start-md-17{grid-column-start:17}.panel-grid .g-start-md-18{grid-column-start:18}.panel-grid .g-start-md-19{grid-column-start:19}.panel-grid .g-start-md-20{grid-column-start:20}.panel-grid .g-start-md-21{grid-column-start:21}.panel-grid .g-start-md-22{grid-column-start:22}.panel-grid .g-start-md-23{grid-column-start:23}}@media(min-width: 992px){.panel-grid .g-col-lg-1{grid-column:auto/span 1}.panel-grid .g-col-lg-2{grid-column:auto/span 2}.panel-grid .g-col-lg-3{grid-column:auto/span 3}.panel-grid .g-col-lg-4{grid-column:auto/span 4}.panel-grid .g-col-lg-5{grid-column:auto/span 5}.panel-grid .g-col-lg-6{grid-column:auto/span 6}.panel-grid .g-col-lg-7{grid-column:auto/span 7}.panel-grid .g-col-lg-8{grid-column:auto/span 8}.panel-grid .g-col-lg-9{grid-column:auto/span 9}.panel-grid .g-col-lg-10{grid-column:auto/span 10}.panel-grid .g-col-lg-11{grid-column:auto/span 11}.panel-grid .g-col-lg-12{grid-column:auto/span 12}.panel-grid .g-col-lg-13{grid-column:auto/span 13}.panel-grid .g-col-lg-14{grid-column:auto/span 14}.panel-grid .g-col-lg-15{grid-column:auto/span 15}.panel-grid .g-col-lg-16{grid-column:auto/span 16}.panel-grid .g-col-lg-17{grid-column:auto/span 17}.panel-grid .g-col-lg-18{grid-column:auto/span 18}.panel-grid .g-col-lg-19{grid-column:auto/span 19}.panel-grid .g-col-lg-20{grid-column:auto/span 20}.panel-grid .g-col-lg-21{grid-column:auto/span 21}.panel-grid .g-col-lg-22{grid-column:auto/span 22}.panel-grid .g-col-lg-23{grid-column:auto/span 23}.panel-grid .g-col-lg-24{grid-column:auto/span 24}.panel-grid .g-start-lg-1{grid-column-start:1}.panel-grid .g-start-lg-2{grid-column-start:2}.panel-grid .g-start-lg-3{grid-column-start:3}.panel-grid .g-start-lg-4{grid-column-start:4}.panel-grid .g-start-lg-5{grid-column-start:5}.panel-grid .g-start-lg-6{grid-column-start:6}.panel-grid .g-start-lg-7{grid-column-start:7}.panel-grid .g-start-lg-8{grid-column-start:8}.panel-grid .g-start-lg-9{grid-column-start:9}.panel-grid .g-start-lg-10{grid-column-start:10}.panel-grid .g-start-lg-11{grid-column-start:11}.panel-grid .g-start-lg-12{grid-column-start:12}.panel-grid .g-start-lg-13{grid-column-start:13}.panel-grid .g-start-lg-14{grid-column-start:14}.panel-grid .g-start-lg-15{grid-column-start:15}.panel-grid .g-start-lg-16{grid-column-start:16}.panel-grid .g-start-lg-17{grid-column-start:17}.panel-grid .g-start-lg-18{grid-column-start:18}.panel-grid .g-start-lg-19{grid-column-start:19}.panel-grid .g-start-lg-20{grid-column-start:20}.panel-grid .g-start-lg-21{grid-column-start:21}.panel-grid .g-start-lg-22{grid-column-start:22}.panel-grid .g-start-lg-23{grid-column-start:23}}@media(min-width: 1200px){.panel-grid .g-col-xl-1{grid-column:auto/span 1}.panel-grid .g-col-xl-2{grid-column:auto/span 2}.panel-grid .g-col-xl-3{grid-column:auto/span 3}.panel-grid .g-col-xl-4{grid-column:auto/span 4}.panel-grid .g-col-xl-5{grid-column:auto/span 5}.panel-grid .g-col-xl-6{grid-column:auto/span 6}.panel-grid .g-col-xl-7{grid-column:auto/span 7}.panel-grid .g-col-xl-8{grid-column:auto/span 8}.panel-grid .g-col-xl-9{grid-column:auto/span 9}.panel-grid .g-col-xl-10{grid-column:auto/span 10}.panel-grid .g-col-xl-11{grid-column:auto/span 11}.panel-grid .g-col-xl-12{grid-column:auto/span 12}.panel-grid .g-col-xl-13{grid-column:auto/span 13}.panel-grid .g-col-xl-14{grid-column:auto/span 14}.panel-grid .g-col-xl-15{grid-column:auto/span 15}.panel-grid .g-col-xl-16{grid-column:auto/span 16}.panel-grid .g-col-xl-17{grid-column:auto/span 17}.panel-grid .g-col-xl-18{grid-column:auto/span 18}.panel-grid .g-col-xl-19{grid-column:auto/span 19}.panel-grid .g-col-xl-20{grid-column:auto/span 20}.panel-grid .g-col-xl-21{grid-column:auto/span 21}.panel-grid .g-col-xl-22{grid-column:auto/span 22}.panel-grid .g-col-xl-23{grid-column:auto/span 23}.panel-grid .g-col-xl-24{grid-column:auto/span 24}.panel-grid .g-start-xl-1{grid-column-start:1}.panel-grid .g-start-xl-2{grid-column-start:2}.panel-grid .g-start-xl-3{grid-column-start:3}.panel-grid .g-start-xl-4{grid-column-start:4}.panel-grid .g-start-xl-5{grid-column-start:5}.panel-grid .g-start-xl-6{grid-column-start:6}.panel-grid .g-start-xl-7{grid-column-start:7}.panel-grid .g-start-xl-8{grid-column-start:8}.panel-grid .g-start-xl-9{grid-column-start:9}.panel-grid .g-start-xl-10{grid-column-start:10}.panel-grid .g-start-xl-11{grid-column-start:11}.panel-grid .g-start-xl-12{grid-column-start:12}.panel-grid .g-start-xl-13{grid-column-start:13}.panel-grid .g-start-xl-14{grid-column-start:14}.panel-grid .g-start-xl-15{grid-column-start:15}.panel-grid .g-start-xl-16{grid-column-start:16}.panel-grid .g-start-xl-17{grid-column-start:17}.panel-grid .g-start-xl-18{grid-column-start:18}.panel-grid .g-start-xl-19{grid-column-start:19}.panel-grid .g-start-xl-20{grid-column-start:20}.panel-grid .g-start-xl-21{grid-column-start:21}.panel-grid .g-start-xl-22{grid-column-start:22}.panel-grid .g-start-xl-23{grid-column-start:23}}@media(min-width: 1400px){.panel-grid .g-col-xxl-1{grid-column:auto/span 1}.panel-grid .g-col-xxl-2{grid-column:auto/span 2}.panel-grid .g-col-xxl-3{grid-column:auto/span 3}.panel-grid .g-col-xxl-4{grid-column:auto/span 4}.panel-grid .g-col-xxl-5{grid-column:auto/span 5}.panel-grid .g-col-xxl-6{grid-column:auto/span 6}.panel-grid .g-col-xxl-7{grid-column:auto/span 7}.panel-grid .g-col-xxl-8{grid-column:auto/span 8}.panel-grid .g-col-xxl-9{grid-column:auto/span 9}.panel-grid .g-col-xxl-10{grid-column:auto/span 10}.panel-grid .g-col-xxl-11{grid-column:auto/span 11}.panel-grid .g-col-xxl-12{grid-column:auto/span 12}.panel-grid .g-col-xxl-13{grid-column:auto/span 13}.panel-grid .g-col-xxl-14{grid-column:auto/span 14}.panel-grid .g-col-xxl-15{grid-column:auto/span 15}.panel-grid .g-col-xxl-16{grid-column:auto/span 16}.panel-grid .g-col-xxl-17{grid-column:auto/span 17}.panel-grid .g-col-xxl-18{grid-column:auto/span 18}.panel-grid .g-col-xxl-19{grid-column:auto/span 19}.panel-grid .g-col-xxl-20{grid-column:auto/span 20}.panel-grid .g-col-xxl-21{grid-column:auto/span 21}.panel-grid .g-col-xxl-22{grid-column:auto/span 22}.panel-grid .g-col-xxl-23{grid-column:auto/span 23}.panel-grid .g-col-xxl-24{grid-column:auto/span 24}.panel-grid .g-start-xxl-1{grid-column-start:1}.panel-grid .g-start-xxl-2{grid-column-start:2}.panel-grid .g-start-xxl-3{grid-column-start:3}.panel-grid .g-start-xxl-4{grid-column-start:4}.panel-grid .g-start-xxl-5{grid-column-start:5}.panel-grid .g-start-xxl-6{grid-column-start:6}.panel-grid .g-start-xxl-7{grid-column-start:7}.panel-grid .g-start-xxl-8{grid-column-start:8}.panel-grid .g-start-xxl-9{grid-column-start:9}.panel-grid .g-start-xxl-10{grid-column-start:10}.panel-grid .g-start-xxl-11{grid-column-start:11}.panel-grid .g-start-xxl-12{grid-column-start:12}.panel-grid .g-start-xxl-13{grid-column-start:13}.panel-grid .g-start-xxl-14{grid-column-start:14}.panel-grid .g-start-xxl-15{grid-column-start:15}.panel-grid .g-start-xxl-16{grid-column-start:16}.panel-grid .g-start-xxl-17{grid-column-start:17}.panel-grid .g-start-xxl-18{grid-column-start:18}.panel-grid .g-start-xxl-19{grid-column-start:19}.panel-grid .g-start-xxl-20{grid-column-start:20}.panel-grid .g-start-xxl-21{grid-column-start:21}.panel-grid .g-start-xxl-22{grid-column-start:22}.panel-grid .g-start-xxl-23{grid-column-start:23}}main{margin-top:1em;margin-bottom:1em}h1,.h1,h2,.h2{color:inherit;margin-top:2rem;margin-bottom:1rem;font-weight:600}h1.title,.title.h1{margin-top:0}main.content>section:first-of-type>h2:first-child,main.content>section:first-of-type>.h2:first-child{margin-top:0}h2,.h2{border-bottom:1px solid #dee2e6;padding-bottom:.5rem}h3,.h3{font-weight:600}h3,.h3,h4,.h4{opacity:.9;margin-top:1.5rem}h5,.h5,h6,.h6{opacity:.9}.header-section-number{color:#6d7a86}.nav-link.active .header-section-number{color:inherit}mark,.mark{padding:0em}.panel-caption,.figure-caption,.subfigure-caption,.table-caption,figcaption,caption{font-size:.9rem;color:#6d7a86}.quarto-layout-cell[data-ref-parent] caption{color:#6d7a86}.column-margin figcaption,.margin-caption,div.aside,aside,.column-margin{color:#6d7a86;font-size:.825rem}.panel-caption.margin-caption{text-align:inherit}.column-margin.column-container p{margin-bottom:0}.column-margin.column-container>*:not(.collapse):first-child{padding-bottom:.5em;display:block}.column-margin.column-container>*:not(.collapse):not(:first-child){padding-top:.5em;padding-bottom:.5em;display:block}.column-margin.column-container>*.collapse:not(.show){display:none}@media(min-width: 768px){.column-margin.column-container .callout-margin-content:first-child{margin-top:4.5em}.column-margin.column-container .callout-margin-content-simple:first-child{margin-top:3.5em}}.margin-caption>*{padding-top:.5em;padding-bottom:.5em}@media(max-width: 767.98px){.quarto-layout-row{flex-direction:column}}.nav-tabs .nav-item{margin-top:1px;cursor:pointer}.tab-content{margin-top:0px;border-left:#dee2e6 1px solid;border-right:#dee2e6 1px solid;border-bottom:#dee2e6 1px solid;margin-left:0;padding:1em;margin-bottom:1em}@media(max-width: 767.98px){.layout-sidebar{margin-left:0;margin-right:0}}.panel-sidebar,.panel-sidebar .form-control,.panel-input,.panel-input .form-control,.selectize-dropdown{font-size:.9rem}.panel-sidebar .form-control,.panel-input .form-control{padding-top:.1rem}.tab-pane div.sourceCode{margin-top:0px}.tab-pane>p{padding-top:0}.tab-pane>p:nth-child(1){padding-top:0}.tab-pane>p:last-child{margin-bottom:0}.tab-pane>pre:last-child{margin-bottom:0}.tab-content>.tab-pane:not(.active){display:none !important}div.sourceCode{background-color:rgba(233,236,239,.65);border:1px solid rgba(233,236,239,.65);border-radius:.25rem}pre.sourceCode{background-color:rgba(0,0,0,0)}pre.sourceCode{border:none;font-size:.875em;overflow:visible !important;padding:.4em}.callout pre.sourceCode{padding-left:0}div.sourceCode{overflow-y:hidden}.callout div.sourceCode{margin-left:initial}.blockquote{font-size:inherit;padding-left:1rem;padding-right:1.5rem;color:#6d7a86}.blockquote h1:first-child,.blockquote .h1:first-child,.blockquote h2:first-child,.blockquote .h2:first-child,.blockquote h3:first-child,.blockquote .h3:first-child,.blockquote h4:first-child,.blockquote .h4:first-child,.blockquote h5:first-child,.blockquote .h5:first-child{margin-top:0}pre{background-color:initial;padding:initial;border:initial}p pre code:not(.sourceCode),li pre code:not(.sourceCode),pre code:not(.sourceCode){background-color:initial}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:#f8f9fa;padding:.2em}nav p code:not(.sourceCode),nav li code:not(.sourceCode),nav td code:not(.sourceCode){background-color:rgba(0,0,0,0);padding:0}td code:not(.sourceCode){white-space:pre-wrap}#quarto-embedded-source-code-modal>.modal-dialog{max-width:1000px;padding-left:1.75rem;padding-right:1.75rem}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body{padding:0}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body div.sourceCode{margin:0;padding:.2rem .2rem;border-radius:0px;border:none}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-header{padding:.7rem}.code-tools-button{font-size:1rem;padding:.15rem .15rem;margin-left:5px;color:#6c757d;background-color:rgba(0,0,0,0);transition:initial;cursor:pointer}.code-tools-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.sidebar{will-change:top;transition:top 200ms linear;position:sticky;overflow-y:auto;padding-top:1.2em;max-height:100vh}.sidebar.toc-left,.sidebar.margin-sidebar{top:0px;padding-top:1em}.sidebar.quarto-banner-title-block-sidebar>*{padding-top:1.65em}figure .quarto-notebook-link{margin-top:.5em}.quarto-notebook-link{font-size:.75em;color:#6c757d;margin-bottom:1em;text-decoration:none;display:block}.quarto-notebook-link:hover{text-decoration:underline;color:#2761e3}.quarto-notebook-link::before{display:inline-block;height:.75rem;width:.75rem;margin-bottom:0em;margin-right:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}.toc-actions i.bi,.quarto-code-links i.bi,.quarto-other-links i.bi,.quarto-alternate-notebooks i.bi,.quarto-alternate-formats i.bi{margin-right:.4em;font-size:.8rem}.quarto-other-links-text-target .quarto-code-links i.bi,.quarto-other-links-text-target .quarto-other-links i.bi{margin-right:.2em}.quarto-other-formats-text-target .quarto-alternate-formats i.bi{margin-right:.1em}.toc-actions i.bi.empty,.quarto-code-links i.bi.empty,.quarto-other-links i.bi.empty,.quarto-alternate-notebooks i.bi.empty,.quarto-alternate-formats i.bi.empty{padding-left:1em}.quarto-notebook h2,.quarto-notebook .h2{border-bottom:none}.quarto-notebook .cell-container{display:flex}.quarto-notebook .cell-container .cell{flex-grow:4}.quarto-notebook .cell-container .cell-decorator{padding-top:1.5em;padding-right:1em;text-align:right}.quarto-notebook .cell-container.code-fold .cell-decorator{padding-top:3em}.quarto-notebook .cell-code code{white-space:pre-wrap}.quarto-notebook .cell .cell-output-stderr pre code,.quarto-notebook .cell .cell-output-stdout pre code{white-space:pre-wrap;overflow-wrap:anywhere}.toc-actions,.quarto-alternate-formats,.quarto-other-links,.quarto-code-links,.quarto-alternate-notebooks{padding-left:0em}.sidebar .toc-actions a,.sidebar .quarto-alternate-formats a,.sidebar .quarto-other-links a,.sidebar .quarto-code-links a,.sidebar .quarto-alternate-notebooks a,.sidebar nav[role=doc-toc] a{text-decoration:none}.sidebar .toc-actions a:hover,.sidebar .quarto-other-links a:hover,.sidebar .quarto-code-links a:hover,.sidebar .quarto-alternate-formats a:hover,.sidebar .quarto-alternate-notebooks a:hover{color:#2761e3}.sidebar .toc-actions h2,.sidebar .toc-actions .h2,.sidebar .quarto-code-links h2,.sidebar .quarto-code-links .h2,.sidebar .quarto-other-links h2,.sidebar .quarto-other-links .h2,.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2,.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-weight:500;margin-bottom:.2rem;margin-top:.3rem;font-family:inherit;border-bottom:0;padding-bottom:0;padding-top:0px}.sidebar .toc-actions>h2,.sidebar .toc-actions>.h2,.sidebar .quarto-code-links>h2,.sidebar .quarto-code-links>.h2,.sidebar .quarto-other-links>h2,.sidebar .quarto-other-links>.h2,.sidebar .quarto-alternate-notebooks>h2,.sidebar .quarto-alternate-notebooks>.h2,.sidebar .quarto-alternate-formats>h2,.sidebar .quarto-alternate-formats>.h2{font-size:.8rem}.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-size:.875rem}.sidebar nav[role=doc-toc]>ul a{border-left:1px solid #e9ecef;padding-left:.6rem}.sidebar .toc-actions h2>ul a,.sidebar .toc-actions .h2>ul a,.sidebar .quarto-code-links h2>ul a,.sidebar .quarto-code-links .h2>ul a,.sidebar .quarto-other-links h2>ul a,.sidebar .quarto-other-links .h2>ul a,.sidebar .quarto-alternate-notebooks h2>ul a,.sidebar .quarto-alternate-notebooks .h2>ul a,.sidebar .quarto-alternate-formats h2>ul a,.sidebar .quarto-alternate-formats .h2>ul a{border-left:none;padding-left:.6rem}.sidebar .toc-actions ul a:empty,.sidebar .quarto-code-links ul a:empty,.sidebar .quarto-other-links ul a:empty,.sidebar .quarto-alternate-notebooks ul a:empty,.sidebar .quarto-alternate-formats ul a:empty,.sidebar nav[role=doc-toc]>ul a:empty{display:none}.sidebar .toc-actions ul,.sidebar .quarto-code-links ul,.sidebar .quarto-other-links ul,.sidebar .quarto-alternate-notebooks ul,.sidebar .quarto-alternate-formats ul{padding-left:0;list-style:none}.sidebar nav[role=doc-toc] ul{list-style:none;padding-left:0;list-style:none}.sidebar nav[role=doc-toc]>ul{margin-left:.45em}.quarto-margin-sidebar nav[role=doc-toc]{padding-left:.5em}.sidebar .toc-actions>ul,.sidebar .quarto-code-links>ul,.sidebar .quarto-other-links>ul,.sidebar .quarto-alternate-notebooks>ul,.sidebar .quarto-alternate-formats>ul{font-size:.8rem}.sidebar nav[role=doc-toc]>ul{font-size:.875rem}.sidebar .toc-actions ul li a,.sidebar .quarto-code-links ul li a,.sidebar .quarto-other-links ul li a,.sidebar .quarto-alternate-notebooks ul li a,.sidebar .quarto-alternate-formats ul li a,.sidebar nav[role=doc-toc]>ul li a{line-height:1.1rem;padding-bottom:.2rem;padding-top:.2rem;color:inherit}.sidebar nav[role=doc-toc] ul>li>ul>li>a{padding-left:1.2em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>a{padding-left:2.4em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>a{padding-left:3.6em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:4.8em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:6em}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{border-left:1px solid #2761e3;color:#2761e3 !important}.sidebar nav[role=doc-toc] ul>li>a:hover,.sidebar nav[role=doc-toc] ul>li>ul>li>a:hover{color:#2761e3 !important}kbd,.kbd{color:#343a40;background-color:#f8f9fa;border:1px solid;border-radius:5px;border-color:#dee2e6}.quarto-appendix-contents div.hanging-indent{margin-left:0em}.quarto-appendix-contents div.hanging-indent div.csl-entry{margin-left:1em;text-indent:-1em}.citation a,.footnote-ref{text-decoration:none}.footnotes ol{padding-left:1em}.tippy-content>*{margin-bottom:.7em}.tippy-content>*:last-child{margin-bottom:0}.callout{margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;overflow-wrap:break-word}.callout .callout-title-container{overflow-wrap:anywhere}.callout.callout-style-simple{padding:.4em .7em;border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout.callout-style-default{border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout .callout-body-container{flex-grow:1}.callout.callout-style-simple .callout-body{font-size:.9rem;font-weight:400}.callout.callout-style-default .callout-body{font-size:.9rem;font-weight:400}.callout:not(.no-icon).callout-titled.callout-style-simple .callout-body{padding-left:1.6em}.callout.callout-titled>.callout-header{padding-top:.2em;margin-bottom:-0.2em}.callout.callout-style-simple>div.callout-header{border-bottom:none;font-size:.9rem;font-weight:600;opacity:75%}.callout.callout-style-default>div.callout-header{border-bottom:none;font-weight:600;opacity:85%;font-size:.9rem;padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body{padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body>:first-child{padding-top:.5rem;margin-top:0}.callout>div.callout-header[data-bs-toggle=collapse]{cursor:pointer}.callout.callout-style-default .callout-header[aria-expanded=false],.callout.callout-style-default .callout-header[aria-expanded=true]{padding-top:0px;margin-bottom:0px;align-items:center}.callout.callout-titled .callout-body>:last-child:not(.sourceCode),.callout.callout-titled .callout-body>div>:last-child:not(.sourceCode){padding-bottom:.5rem;margin-bottom:0}.callout:not(.callout-titled) .callout-body>:first-child,.callout:not(.callout-titled) .callout-body>div>:first-child{margin-top:.25rem}.callout:not(.callout-titled) .callout-body>:last-child,.callout:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.2rem}.callout.callout-style-simple .callout-icon::before,.callout.callout-style-simple .callout-toggle::before{height:1rem;width:1rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.callout.callout-style-default .callout-icon::before,.callout.callout-style-default .callout-toggle::before{height:.9rem;width:.9rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:.9rem .9rem}.callout.callout-style-default .callout-toggle::before{margin-top:5px}.callout .callout-btn-toggle .callout-toggle::before{transition:transform .2s linear}.callout .callout-header[aria-expanded=false] .callout-toggle::before{transform:rotate(-90deg)}.callout .callout-header[aria-expanded=true] .callout-toggle::before{transform:none}.callout.callout-style-simple:not(.no-icon) div.callout-icon-container{padding-top:.2em;padding-right:.55em}.callout.callout-style-default:not(.no-icon) div.callout-icon-container{padding-top:.1em;padding-right:.35em}.callout.callout-style-default:not(.no-icon) div.callout-title-container{margin-top:-1px}.callout.callout-style-default.callout-caution:not(.no-icon) div.callout-icon-container{padding-top:.3em;padding-right:.35em}.callout>.callout-body>.callout-icon-container>.no-icon,.callout>.callout-header>.callout-icon-container>.no-icon{display:none}div.callout.callout{border-left-color:#6c757d}div.callout.callout-style-default>.callout-header{background-color:#6c757d}div.callout-note.callout{border-left-color:#2780e3}div.callout-note.callout-style-default>.callout-header{background-color:#e9f2fc}div.callout-note:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-tip.callout{border-left-color:#3fb618}div.callout-tip.callout-style-default>.callout-header{background-color:#ecf8e8}div.callout-tip:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-warning.callout{border-left-color:#ff7518}div.callout-warning.callout-style-default>.callout-header{background-color:#fff1e8}div.callout-warning:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-caution.callout{border-left-color:#f0ad4e}div.callout-caution.callout-style-default>.callout-header{background-color:#fef7ed}div.callout-caution:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-important.callout{border-left-color:#ff0039}div.callout-important.callout-style-default>.callout-header{background-color:#ffe6eb}div.callout-important:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important .callout-toggle::before{background-image:url('data:image/svg+xml,')}.quarto-toggle-container{display:flex;align-items:center}.quarto-reader-toggle .bi::before,.quarto-color-scheme-toggle .bi::before{display:inline-block;height:1rem;width:1rem;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.sidebar-navigation{padding-left:20px}.navbar{background-color:#2780e3;color:#fdfeff}.navbar .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.quarto-sidebar-toggle{border-color:#dee2e6;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;border-style:solid;border-width:1px;overflow:hidden;border-top-width:0px;padding-top:0px !important}.quarto-sidebar-toggle-title{cursor:pointer;padding-bottom:2px;margin-left:.25em;text-align:center;font-weight:400;font-size:.775em}#quarto-content .quarto-sidebar-toggle{background:#fafafa}#quarto-content .quarto-sidebar-toggle-title{color:#343a40}.quarto-sidebar-toggle-icon{color:#dee2e6;margin-right:.5em;float:right;transition:transform .2s ease}.quarto-sidebar-toggle-icon::before{padding-top:5px}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(-180deg)}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:solid #dee2e6 1px}.quarto-sidebar-toggle-contents{background-color:#fff;padding-right:10px;padding-left:10px;margin-top:0px !important;transition:max-height .5s ease}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:1em;padding-bottom:10px}@media(max-width: 767.98px){.sidebar-menu-container{padding-bottom:5em}}.quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0px !important;padding-bottom:0px}nav[role=doc-toc]{z-index:1020}#quarto-sidebar>*,nav[role=doc-toc]>*{transition:opacity .1s ease,border .1s ease}#quarto-sidebar.slow>*,nav[role=doc-toc].slow>*{transition:opacity .4s ease,border .4s ease}.quarto-color-scheme-toggle:not(.alternate).top-right .bi::before{background-image:url('data:image/svg+xml,')}.quarto-color-scheme-toggle.alternate.top-right .bi::before{background-image:url('data:image/svg+xml,')}#quarto-appendix.default{border-top:1px solid #dee2e6}#quarto-appendix.default{background-color:#fff;padding-top:1.5em;margin-top:2em;z-index:998}#quarto-appendix.default .quarto-appendix-heading{margin-top:0;line-height:1.4em;font-weight:600;opacity:.9;border-bottom:none;margin-bottom:0}#quarto-appendix.default .footnotes ol,#quarto-appendix.default .footnotes ol li>p:last-of-type,#quarto-appendix.default .quarto-appendix-contents>p:last-of-type{margin-bottom:0}#quarto-appendix.default .footnotes ol{margin-left:.5em}#quarto-appendix.default .quarto-appendix-secondary-label{margin-bottom:.4em}#quarto-appendix.default .quarto-appendix-bibtex{font-size:.7em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-bibtex code.sourceCode{white-space:pre-wrap}#quarto-appendix.default .quarto-appendix-citeas{font-size:.9em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-heading{font-size:1em !important}#quarto-appendix.default *[role=doc-endnotes]>ol,#quarto-appendix.default .quarto-appendix-contents>*:not(h2):not(.h2){font-size:.9em}#quarto-appendix.default section{padding-bottom:1.5em}#quarto-appendix.default section *[role=doc-endnotes],#quarto-appendix.default section>*:not(a){opacity:.9;word-wrap:break-word}.btn.btn-quarto,div.cell-output-display .btn-quarto{--bs-btn-color: #cacccd;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #cacccd;--bs-btn-hover-bg: #52585d;--bs-btn-hover-border-color: #484e53;--bs-btn-focus-shadow-rgb: 75, 80, 85;--bs-btn-active-color: #fff;--bs-btn-active-bg: #5d6166;--bs-btn-active-border-color: #484e53;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}nav.quarto-secondary-nav.color-navbar{background-color:#2780e3;color:#fdfeff}nav.quarto-secondary-nav.color-navbar h1,nav.quarto-secondary-nav.color-navbar .h1,nav.quarto-secondary-nav.color-navbar .quarto-btn-toggle{color:#fdfeff}@media(max-width: 991.98px){body.nav-sidebar .quarto-title-banner{margin-bottom:0;padding-bottom:1em}body.nav-sidebar #title-block-header{margin-block-end:0}}p.subtitle{margin-top:.25em;margin-bottom:.5em}code a:any-link{color:inherit;text-decoration-color:#6c757d}/*! light */div.observablehq table thead tr th{background-color:var(--bs-body-bg)}input,button,select,optgroup,textarea{background-color:var(--bs-body-bg)}.code-annotated .code-copy-button{margin-right:1.25em;margin-top:0;padding-bottom:0;padding-top:3px}.code-annotation-gutter-bg{background-color:#fff}.code-annotation-gutter{background-color:rgba(233,236,239,.65)}.code-annotation-gutter,.code-annotation-gutter-bg{height:100%;width:calc(20px + .5em);position:absolute;top:0;right:0}dl.code-annotation-container-grid dt{margin-right:1em;margin-top:.25rem}dl.code-annotation-container-grid dt{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:#4b545c;border:solid #4b545c 1px;border-radius:50%;height:22px;width:22px;line-height:22px;font-size:11px;text-align:center;vertical-align:middle;text-decoration:none}dl.code-annotation-container-grid dt[data-target-cell]{cursor:pointer}dl.code-annotation-container-grid dt[data-target-cell].code-annotation-active{color:#fff;border:solid #aaa 1px;background-color:#aaa}pre.code-annotation-code{padding-top:0;padding-bottom:0}pre.code-annotation-code code{z-index:3}#code-annotation-line-highlight-gutter{width:100%;border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}#code-annotation-line-highlight{margin-left:-4em;width:calc(100% + 4em);border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}code.sourceCode .code-annotation-anchor.code-annotation-active{background-color:var(--quarto-hl-normal-color, #aaaaaa);border:solid var(--quarto-hl-normal-color, #aaaaaa) 1px;color:#e9ecef;font-weight:bolder}code.sourceCode .code-annotation-anchor{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:var(--quarto-hl-co-color);border:solid var(--quarto-hl-co-color) 1px;border-radius:50%;height:18px;width:18px;font-size:9px;margin-top:2px}code.sourceCode button.code-annotation-anchor{padding:2px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none}code.sourceCode a.code-annotation-anchor{line-height:18px;text-align:center;vertical-align:middle;cursor:default;text-decoration:none}@media print{.page-columns .column-screen-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:page-start-inset/page-end-inset;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}}.quarto-video{margin-bottom:1em}.table{border-top:1px solid #ebedee;border-bottom:1px solid #ebedee}.table>thead{border-top-width:0;border-bottom:1px solid #b2bac1}.table a{word-break:break-word}.table>:not(caption)>*>*{background-color:unset;color:unset}#quarto-document-content .crosstalk-input .checkbox input[type=checkbox],#quarto-document-content .crosstalk-input .checkbox-inline input[type=checkbox]{position:unset;margin-top:unset;margin-left:unset}#quarto-document-content .row{margin-left:unset;margin-right:unset}.quarto-xref{white-space:nowrap}a.external:after{content:"";background-image:url('data:image/svg+xml,');background-size:contain;background-repeat:no-repeat;background-position:center center;margin-left:.2em;padding-right:.75em}div.sourceCode code a.external:after{content:none}a.external:after:hover{cursor:pointer}.quarto-ext-icon{display:inline-block;font-size:.75em;padding-left:.3em}.code-with-filename .code-with-filename-file{margin-bottom:0;padding-bottom:2px;padding-top:2px;padding-left:.7em;border:var(--quarto-border-width) solid var(--quarto-border-color);border-radius:var(--quarto-border-radius);border-bottom:0;border-bottom-left-radius:0%;border-bottom-right-radius:0%}.code-with-filename div.sourceCode,.reveal .code-with-filename div.sourceCode{margin-top:0;border-top-left-radius:0%;border-top-right-radius:0%}.code-with-filename .code-with-filename-file pre{margin-bottom:0}.code-with-filename .code-with-filename-file{background-color:rgba(219,219,219,.8)}.quarto-dark .code-with-filename .code-with-filename-file{background-color:#555}.code-with-filename .code-with-filename-file strong{font-weight:400}.quarto-title-banner{margin-bottom:1em;color:#fdfeff;background:#2780e3}.quarto-title-banner a{color:#fdfeff}.quarto-title-banner h1,.quarto-title-banner .h1,.quarto-title-banner h2,.quarto-title-banner .h2{color:#fdfeff}.quarto-title-banner .code-tools-button{color:#97cbff}.quarto-title-banner .code-tools-button:hover{color:#fdfeff}.quarto-title-banner .code-tools-button>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .quarto-title .title{font-weight:600}.quarto-title-banner .quarto-categories{margin-top:.75em}@media(min-width: 992px){.quarto-title-banner{padding-top:2.5em;padding-bottom:2.5em}}@media(max-width: 991.98px){.quarto-title-banner{padding-top:1em;padding-bottom:1em}}@media(max-width: 767.98px){body.hypothesis-enabled #title-block-header>*{padding-right:20px}}main.quarto-banner-title-block>section:first-child>h2,main.quarto-banner-title-block>section:first-child>.h2,main.quarto-banner-title-block>section:first-child>h3,main.quarto-banner-title-block>section:first-child>.h3,main.quarto-banner-title-block>section:first-child>h4,main.quarto-banner-title-block>section:first-child>.h4{margin-top:0}.quarto-title .quarto-categories{display:flex;flex-wrap:wrap;row-gap:.5em;column-gap:.4em;padding-bottom:.5em;margin-top:.75em}.quarto-title .quarto-categories .quarto-category{padding:.25em .75em;font-size:.65em;text-transform:uppercase;border:solid 1px;border-radius:.25rem;opacity:.6}.quarto-title .quarto-categories .quarto-category a{color:inherit}.quarto-title-meta-container{display:grid;grid-template-columns:1fr auto}.quarto-title-meta-column-end{display:flex;flex-direction:column;padding-left:1em}.quarto-title-meta-column-end a .bi{margin-right:.3em}#title-block-header.quarto-title-block.default .quarto-title-meta{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}#title-block-header.quarto-title-block.default .quarto-title .title{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-author-orcid img{margin-top:-0.2em;height:.8em;width:.8em}#title-block-header.quarto-title-block.default .quarto-title-author-email{opacity:.7}#title-block-header.quarto-title-block.default .quarto-description p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p,#title-block-header.quarto-title-block.default .quarto-title-authors p,#title-block-header.quarto-title-block.default .quarto-title-affiliations p{margin-bottom:.1em}#title-block-header.quarto-title-block.default .quarto-title-meta-heading{text-transform:uppercase;margin-top:1em;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-contents{font-size:.9em}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p.affiliation:last-of-type{margin-bottom:.1em}#title-block-header.quarto-title-block.default p.affiliation{margin-bottom:.1em}#title-block-header.quarto-title-block.default .keywords,#title-block-header.quarto-title-block.default .description,#title-block-header.quarto-title-block.default .abstract{margin-top:0}#title-block-header.quarto-title-block.default .keywords>p,#title-block-header.quarto-title-block.default .description>p,#title-block-header.quarto-title-block.default .abstract>p{font-size:.9em}#title-block-header.quarto-title-block.default .keywords>p:last-of-type,#title-block-header.quarto-title-block.default .description>p:last-of-type,#title-block-header.quarto-title-block.default .abstract>p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .keywords .block-title,#title-block-header.quarto-title-block.default .description .block-title,#title-block-header.quarto-title-block.default .abstract .block-title{margin-top:1em;text-transform:uppercase;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-author{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}.quarto-title-tools-only{display:flex;justify-content:right}body{-webkit-font-smoothing:antialiased}.badge.bg-light{color:#343a40}.progress .progress-bar{font-size:8px;line-height:8px} diff --git a/site_libs/bootstrap/bootstrap.min.js b/site_libs/bootstrap/bootstrap.min.js new file mode 100644 index 000000000..e8f21f703 --- /dev/null +++ b/site_libs/bootstrap/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"

    "},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rs=`.nav-link${Bs}, .list-group-item${Bs}, [role="tab"]${Bs}, ${zs}`,qs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Vs extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return z.find(Rs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(Rs)?t:z.findOne(Rs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Vs.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(qs))Vs.getOrCreateInstance(t)})),m(Vs);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Ys=`focusin${Ks}`,Us=`focusout${Ks}`,Gs=`hide${Ks}`,Js=`hidden${Ks}`,Zs=`show${Ks}`,to=`shown${Ks}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){N.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),d(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),N.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),N.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Qs,(t=>this._onInteraction(t,!0))),N.on(this._element,Xs,(t=>this._onInteraction(t,!1))),N.on(this._element,Ys,(t=>this._onInteraction(t,!0))),N.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ro),m(ro),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Vs,Toast:ro,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/site_libs/clipboard/clipboard.min.js b/site_libs/clipboard/clipboard.min.js new file mode 100644 index 000000000..1103f811e --- /dev/null +++ b/site_libs/clipboard/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1.anchorjs-link,.anchorjs-link:focus{opacity:1}",A.sheet.cssRules.length),A.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",A.sheet.cssRules.length),A.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',A.sheet.cssRules.length)),h=document.querySelectorAll("[id]"),t=[].map.call(h,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),A=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||A||!1}}}); +// @license-end \ No newline at end of file diff --git a/site_libs/quarto-html/popper.min.js b/site_libs/quarto-html/popper.min.js new file mode 100644 index 000000000..e3726d728 --- /dev/null +++ b/site_libs/quarto-html/popper.min.js @@ -0,0 +1,6 @@ +/** + * @popperjs/core v2.11.7 - MIT License + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=w===W?B[_]:H[_],Q=w===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/site_libs/quarto-html/quarto-syntax-highlighting.css b/site_libs/quarto-html/quarto-syntax-highlighting.css new file mode 100644 index 000000000..d9fd98f04 --- /dev/null +++ b/site_libs/quarto-html/quarto-syntax-highlighting.css @@ -0,0 +1,203 @@ +/* quarto syntax highlight colors */ +:root { + --quarto-hl-ot-color: #003B4F; + --quarto-hl-at-color: #657422; + --quarto-hl-ss-color: #20794D; + --quarto-hl-an-color: #5E5E5E; + --quarto-hl-fu-color: #4758AB; + --quarto-hl-st-color: #20794D; + --quarto-hl-cf-color: #003B4F; + --quarto-hl-op-color: #5E5E5E; + --quarto-hl-er-color: #AD0000; + --quarto-hl-bn-color: #AD0000; + --quarto-hl-al-color: #AD0000; + --quarto-hl-va-color: #111111; + --quarto-hl-bu-color: inherit; + --quarto-hl-ex-color: inherit; + --quarto-hl-pp-color: #AD0000; + --quarto-hl-in-color: #5E5E5E; + --quarto-hl-vs-color: #20794D; + --quarto-hl-wa-color: #5E5E5E; + --quarto-hl-do-color: #5E5E5E; + --quarto-hl-im-color: #00769E; + --quarto-hl-ch-color: #20794D; + --quarto-hl-dt-color: #AD0000; + --quarto-hl-fl-color: #AD0000; + --quarto-hl-co-color: #5E5E5E; + --quarto-hl-cv-color: #5E5E5E; + --quarto-hl-cn-color: #8f5902; + --quarto-hl-sc-color: #5E5E5E; + --quarto-hl-dv-color: #AD0000; + --quarto-hl-kw-color: #003B4F; +} + +/* other quarto variables */ +:root { + --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +pre > code.sourceCode > span { + color: #003B4F; +} + +code span { + color: #003B4F; +} + +code.sourceCode > span { + color: #003B4F; +} + +div.sourceCode, +div.sourceCode pre.sourceCode { + color: #003B4F; +} + +code span.ot { + color: #003B4F; + font-style: inherit; +} + +code span.at { + color: #657422; + font-style: inherit; +} + +code span.ss { + color: #20794D; + font-style: inherit; +} + +code span.an { + color: #5E5E5E; + font-style: inherit; +} + +code span.fu { + color: #4758AB; + font-style: inherit; +} + +code span.st { + color: #20794D; + font-style: inherit; +} + +code span.cf { + color: #003B4F; + font-style: inherit; +} + +code span.op { + color: #5E5E5E; + font-style: inherit; +} + +code span.er { + color: #AD0000; + font-style: inherit; +} + +code span.bn { + color: #AD0000; + font-style: inherit; +} + +code span.al { + color: #AD0000; + font-style: inherit; +} + +code span.va { + color: #111111; + font-style: inherit; +} + +code span.bu { + font-style: inherit; +} + +code span.ex { + font-style: inherit; +} + +code span.pp { + color: #AD0000; + font-style: inherit; +} + +code span.in { + color: #5E5E5E; + font-style: inherit; +} + +code span.vs { + color: #20794D; + font-style: inherit; +} + +code span.wa { + color: #5E5E5E; + font-style: italic; +} + +code span.do { + color: #5E5E5E; + font-style: italic; +} + +code span.im { + color: #00769E; + font-style: inherit; +} + +code span.ch { + color: #20794D; + font-style: inherit; +} + +code span.dt { + color: #AD0000; + font-style: inherit; +} + +code span.fl { + color: #AD0000; + font-style: inherit; +} + +code span.co { + color: #5E5E5E; + font-style: inherit; +} + +code span.cv { + color: #5E5E5E; + font-style: italic; +} + +code span.cn { + color: #8f5902; + font-style: inherit; +} + +code span.sc { + color: #5E5E5E; + font-style: inherit; +} + +code span.dv { + color: #AD0000; + font-style: inherit; +} + +code span.kw { + color: #003B4F; + font-style: inherit; +} + +.prevent-inlining { + content: " { + // Find any conflicting margin elements and add margins to the + // top to prevent overlap + const marginChildren = window.document.querySelectorAll( + ".column-margin.column-container > *, .margin-caption, .aside" + ); + + let lastBottom = 0; + for (const marginChild of marginChildren) { + if (marginChild.offsetParent !== null) { + // clear the top margin so we recompute it + marginChild.style.marginTop = null; + const top = marginChild.getBoundingClientRect().top + window.scrollY; + if (top < lastBottom) { + const marginChildStyle = window.getComputedStyle(marginChild); + const marginBottom = parseFloat(marginChildStyle["marginBottom"]); + const margin = lastBottom - top + marginBottom; + marginChild.style.marginTop = `${margin}px`; + } + const styles = window.getComputedStyle(marginChild); + const marginTop = parseFloat(styles["marginTop"]); + lastBottom = top + marginChild.getBoundingClientRect().height + marginTop; + } + } +}; + +window.document.addEventListener("DOMContentLoaded", function (_event) { + // Recompute the position of margin elements anytime the body size changes + if (window.ResizeObserver) { + const resizeObserver = new window.ResizeObserver( + throttle(() => { + layoutMarginEls(); + if ( + window.document.body.getBoundingClientRect().width < 990 && + isReaderMode() + ) { + quartoToggleReader(); + } + }, 50) + ); + resizeObserver.observe(window.document.body); + } + + const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]'); + const sidebarEl = window.document.getElementById("quarto-sidebar"); + const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left"); + const marginSidebarEl = window.document.getElementById( + "quarto-margin-sidebar" + ); + // function to determine whether the element has a previous sibling that is active + const prevSiblingIsActiveLink = (el) => { + const sibling = el.previousElementSibling; + if (sibling && sibling.tagName === "A") { + return sibling.classList.contains("active"); + } else { + return false; + } + }; + + // fire slideEnter for bootstrap tab activations (for htmlwidget resize behavior) + function fireSlideEnter(e) { + const event = window.document.createEvent("Event"); + event.initEvent("slideenter", true, true); + window.document.dispatchEvent(event); + } + const tabs = window.document.querySelectorAll('a[data-bs-toggle="tab"]'); + tabs.forEach((tab) => { + tab.addEventListener("shown.bs.tab", fireSlideEnter); + }); + + // fire slideEnter for tabby tab activations (for htmlwidget resize behavior) + document.addEventListener("tabby", fireSlideEnter, false); + + // Track scrolling and mark TOC links as active + // get table of contents and sidebar (bail if we don't have at least one) + const tocLinks = tocEl + ? [...tocEl.querySelectorAll("a[data-scroll-target]")] + : []; + const makeActive = (link) => tocLinks[link].classList.add("active"); + const removeActive = (link) => tocLinks[link].classList.remove("active"); + const removeAllActive = () => + [...Array(tocLinks.length).keys()].forEach((link) => removeActive(link)); + + // activate the anchor for a section associated with this TOC entry + tocLinks.forEach((link) => { + link.addEventListener("click", () => { + if (link.href.indexOf("#") !== -1) { + const anchor = link.href.split("#")[1]; + const heading = window.document.querySelector( + `[data-anchor-id=${anchor}]` + ); + if (heading) { + // Add the class + heading.classList.add("reveal-anchorjs-link"); + + // function to show the anchor + const handleMouseout = () => { + heading.classList.remove("reveal-anchorjs-link"); + heading.removeEventListener("mouseout", handleMouseout); + }; + + // add a function to clear the anchor when the user mouses out of it + heading.addEventListener("mouseout", handleMouseout); + } + } + }); + }); + + const sections = tocLinks.map((link) => { + const target = link.getAttribute("data-scroll-target"); + if (target.startsWith("#")) { + return window.document.getElementById(decodeURI(`${target.slice(1)}`)); + } else { + return window.document.querySelector(decodeURI(`${target}`)); + } + }); + + const sectionMargin = 200; + let currentActive = 0; + // track whether we've initialized state the first time + let init = false; + + const updateActiveLink = () => { + // The index from bottom to top (e.g. reversed list) + let sectionIndex = -1; + if ( + window.innerHeight + window.pageYOffset >= + window.document.body.offsetHeight + ) { + sectionIndex = 0; + } else { + sectionIndex = [...sections].reverse().findIndex((section) => { + if (section) { + return window.pageYOffset >= section.offsetTop - sectionMargin; + } else { + return false; + } + }); + } + if (sectionIndex > -1) { + const current = sections.length - sectionIndex - 1; + if (current !== currentActive) { + removeAllActive(); + currentActive = current; + makeActive(current); + if (init) { + window.dispatchEvent(sectionChanged); + } + init = true; + } + } + }; + + const inHiddenRegion = (top, bottom, hiddenRegions) => { + for (const region of hiddenRegions) { + if (top <= region.bottom && bottom >= region.top) { + return true; + } + } + return false; + }; + + const categorySelector = "header.quarto-title-block .quarto-category"; + const activateCategories = (href) => { + // Find any categories + // Surround them with a link pointing back to: + // #category=Authoring + try { + const categoryEls = window.document.querySelectorAll(categorySelector); + for (const categoryEl of categoryEls) { + const categoryText = categoryEl.textContent; + if (categoryText) { + const link = `${href}#category=${encodeURIComponent(categoryText)}`; + const linkEl = window.document.createElement("a"); + linkEl.setAttribute("href", link); + for (const child of categoryEl.childNodes) { + linkEl.append(child); + } + categoryEl.appendChild(linkEl); + } + } + } catch { + // Ignore errors + } + }; + function hasTitleCategories() { + return window.document.querySelector(categorySelector) !== null; + } + + function offsetRelativeUrl(url) { + const offset = getMeta("quarto:offset"); + return offset ? offset + url : url; + } + + function offsetAbsoluteUrl(url) { + const offset = getMeta("quarto:offset"); + const baseUrl = new URL(offset, window.location); + + const projRelativeUrl = url.replace(baseUrl, ""); + if (projRelativeUrl.startsWith("/")) { + return projRelativeUrl; + } else { + return "/" + projRelativeUrl; + } + } + + // read a meta tag value + function getMeta(metaName) { + const metas = window.document.getElementsByTagName("meta"); + for (let i = 0; i < metas.length; i++) { + if (metas[i].getAttribute("name") === metaName) { + return metas[i].getAttribute("content"); + } + } + return ""; + } + + async function findAndActivateCategories() { + const currentPagePath = offsetAbsoluteUrl(window.location.href); + const response = await fetch(offsetRelativeUrl("listings.json")); + if (response.status == 200) { + return response.json().then(function (listingPaths) { + const listingHrefs = []; + for (const listingPath of listingPaths) { + const pathWithoutLeadingSlash = listingPath.listing.substring(1); + for (const item of listingPath.items) { + if ( + item === currentPagePath || + item === currentPagePath + "index.html" + ) { + // Resolve this path against the offset to be sure + // we already are using the correct path to the listing + // (this adjusts the listing urls to be rooted against + // whatever root the page is actually running against) + const relative = offsetRelativeUrl(pathWithoutLeadingSlash); + const baseUrl = window.location; + const resolvedPath = new URL(relative, baseUrl); + listingHrefs.push(resolvedPath.pathname); + break; + } + } + } + + // Look up the tree for a nearby linting and use that if we find one + const nearestListing = findNearestParentListing( + offsetAbsoluteUrl(window.location.pathname), + listingHrefs + ); + if (nearestListing) { + activateCategories(nearestListing); + } else { + // See if the referrer is a listing page for this item + const referredRelativePath = offsetAbsoluteUrl(document.referrer); + const referrerListing = listingHrefs.find((listingHref) => { + const isListingReferrer = + listingHref === referredRelativePath || + listingHref === referredRelativePath + "index.html"; + return isListingReferrer; + }); + + if (referrerListing) { + // Try to use the referrer if possible + activateCategories(referrerListing); + } else if (listingHrefs.length > 0) { + // Otherwise, just fall back to the first listing + activateCategories(listingHrefs[0]); + } + } + }); + } + } + if (hasTitleCategories()) { + findAndActivateCategories(); + } + + const findNearestParentListing = (href, listingHrefs) => { + if (!href || !listingHrefs) { + return undefined; + } + // Look up the tree for a nearby linting and use that if we find one + const relativeParts = href.substring(1).split("/"); + while (relativeParts.length > 0) { + const path = relativeParts.join("/"); + for (const listingHref of listingHrefs) { + if (listingHref.startsWith(path)) { + return listingHref; + } + } + relativeParts.pop(); + } + + return undefined; + }; + + const manageSidebarVisiblity = (el, placeholderDescriptor) => { + let isVisible = true; + let elRect; + + return (hiddenRegions) => { + if (el === null) { + return; + } + + // Find the last element of the TOC + const lastChildEl = el.lastElementChild; + + if (lastChildEl) { + // Converts the sidebar to a menu + const convertToMenu = () => { + for (const child of el.children) { + child.style.opacity = 0; + child.style.overflow = "hidden"; + } + + nexttick(() => { + const toggleContainer = window.document.createElement("div"); + toggleContainer.style.width = "100%"; + toggleContainer.classList.add("zindex-over-content"); + toggleContainer.classList.add("quarto-sidebar-toggle"); + toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom + toggleContainer.id = placeholderDescriptor.id; + toggleContainer.style.position = "fixed"; + + const toggleIcon = window.document.createElement("i"); + toggleIcon.classList.add("quarto-sidebar-toggle-icon"); + toggleIcon.classList.add("bi"); + toggleIcon.classList.add("bi-caret-down-fill"); + + const toggleTitle = window.document.createElement("div"); + const titleEl = window.document.body.querySelector( + placeholderDescriptor.titleSelector + ); + if (titleEl) { + toggleTitle.append( + titleEl.textContent || titleEl.innerText, + toggleIcon + ); + } + toggleTitle.classList.add("zindex-over-content"); + toggleTitle.classList.add("quarto-sidebar-toggle-title"); + toggleContainer.append(toggleTitle); + + const toggleContents = window.document.createElement("div"); + toggleContents.classList = el.classList; + toggleContents.classList.add("zindex-over-content"); + toggleContents.classList.add("quarto-sidebar-toggle-contents"); + for (const child of el.children) { + if (child.id === "toc-title") { + continue; + } + + const clone = child.cloneNode(true); + clone.style.opacity = 1; + clone.style.display = null; + toggleContents.append(clone); + } + toggleContents.style.height = "0px"; + const positionToggle = () => { + // position the element (top left of parent, same width as parent) + if (!elRect) { + elRect = el.getBoundingClientRect(); + } + toggleContainer.style.left = `${elRect.left}px`; + toggleContainer.style.top = `${elRect.top}px`; + toggleContainer.style.width = `${elRect.width}px`; + }; + positionToggle(); + + toggleContainer.append(toggleContents); + el.parentElement.prepend(toggleContainer); + + // Process clicks + let tocShowing = false; + // Allow the caller to control whether this is dismissed + // when it is clicked (e.g. sidebar navigation supports + // opening and closing the nav tree, so don't dismiss on click) + const clickEl = placeholderDescriptor.dismissOnClick + ? toggleContainer + : toggleTitle; + + const closeToggle = () => { + if (tocShowing) { + toggleContainer.classList.remove("expanded"); + toggleContents.style.height = "0px"; + tocShowing = false; + } + }; + + // Get rid of any expanded toggle if the user scrolls + window.document.addEventListener( + "scroll", + throttle(() => { + closeToggle(); + }, 50) + ); + + // Handle positioning of the toggle + window.addEventListener( + "resize", + throttle(() => { + elRect = undefined; + positionToggle(); + }, 50) + ); + + window.addEventListener("quarto-hrChanged", () => { + elRect = undefined; + }); + + // Process the click + clickEl.onclick = () => { + if (!tocShowing) { + toggleContainer.classList.add("expanded"); + toggleContents.style.height = null; + tocShowing = true; + } else { + closeToggle(); + } + }; + }); + }; + + // Converts a sidebar from a menu back to a sidebar + const convertToSidebar = () => { + for (const child of el.children) { + child.style.opacity = 1; + child.style.overflow = null; + } + + const placeholderEl = window.document.getElementById( + placeholderDescriptor.id + ); + if (placeholderEl) { + placeholderEl.remove(); + } + + el.classList.remove("rollup"); + }; + + if (isReaderMode()) { + convertToMenu(); + isVisible = false; + } else { + // Find the top and bottom o the element that is being managed + const elTop = el.offsetTop; + const elBottom = + elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight; + + if (!isVisible) { + // If the element is current not visible reveal if there are + // no conflicts with overlay regions + if (!inHiddenRegion(elTop, elBottom, hiddenRegions)) { + convertToSidebar(); + isVisible = true; + } + } else { + // If the element is visible, hide it if it conflicts with overlay regions + // and insert a placeholder toggle (or if we're in reader mode) + if (inHiddenRegion(elTop, elBottom, hiddenRegions)) { + convertToMenu(); + isVisible = false; + } + } + } + } + }; + }; + + const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]'); + for (const tabEl of tabEls) { + const id = tabEl.getAttribute("data-bs-target"); + if (id) { + const columnEl = document.querySelector( + `${id} .column-margin, .tabset-margin-content` + ); + if (columnEl) + tabEl.addEventListener("shown.bs.tab", function (event) { + const el = event.srcElement; + if (el) { + const visibleCls = `${el.id}-margin-content`; + // walk up until we find a parent tabset + let panelTabsetEl = el.parentElement; + while (panelTabsetEl) { + if (panelTabsetEl.classList.contains("panel-tabset")) { + break; + } + panelTabsetEl = panelTabsetEl.parentElement; + } + + if (panelTabsetEl) { + const prevSib = panelTabsetEl.previousElementSibling; + if ( + prevSib && + prevSib.classList.contains("tabset-margin-container") + ) { + const childNodes = prevSib.querySelectorAll( + ".tabset-margin-content" + ); + for (const childEl of childNodes) { + if (childEl.classList.contains(visibleCls)) { + childEl.classList.remove("collapse"); + } else { + childEl.classList.add("collapse"); + } + } + } + } + } + + layoutMarginEls(); + }); + } + } + + // Manage the visibility of the toc and the sidebar + const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, { + id: "quarto-toc-toggle", + titleSelector: "#toc-title", + dismissOnClick: true, + }); + const sidebarScrollVisiblity = manageSidebarVisiblity(sidebarEl, { + id: "quarto-sidebarnav-toggle", + titleSelector: ".title", + dismissOnClick: false, + }); + let tocLeftScrollVisibility; + if (leftTocEl) { + tocLeftScrollVisibility = manageSidebarVisiblity(leftTocEl, { + id: "quarto-lefttoc-toggle", + titleSelector: "#toc-title", + dismissOnClick: true, + }); + } + + // Find the first element that uses formatting in special columns + const conflictingEls = window.document.body.querySelectorAll( + '[class^="column-"], [class*=" column-"], aside, [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]' + ); + + // Filter all the possibly conflicting elements into ones + // the do conflict on the left or ride side + const arrConflictingEls = Array.from(conflictingEls); + const leftSideConflictEls = arrConflictingEls.filter((el) => { + if (el.tagName === "ASIDE") { + return false; + } + return Array.from(el.classList).find((className) => { + return ( + className !== "column-body" && + className.startsWith("column-") && + !className.endsWith("right") && + !className.endsWith("container") && + className !== "column-margin" + ); + }); + }); + const rightSideConflictEls = arrConflictingEls.filter((el) => { + if (el.tagName === "ASIDE") { + return true; + } + + const hasMarginCaption = Array.from(el.classList).find((className) => { + return className == "margin-caption"; + }); + if (hasMarginCaption) { + return true; + } + + return Array.from(el.classList).find((className) => { + return ( + className !== "column-body" && + !className.endsWith("container") && + className.startsWith("column-") && + !className.endsWith("left") + ); + }); + }); + + const kOverlapPaddingSize = 10; + function toRegions(els) { + return els.map((el) => { + const boundRect = el.getBoundingClientRect(); + const top = + boundRect.top + + document.documentElement.scrollTop - + kOverlapPaddingSize; + return { + top, + bottom: top + el.scrollHeight + 2 * kOverlapPaddingSize, + }; + }); + } + + let hasObserved = false; + const visibleItemObserver = (els) => { + let visibleElements = [...els]; + const intersectionObserver = new IntersectionObserver( + (entries, _observer) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + if (visibleElements.indexOf(entry.target) === -1) { + visibleElements.push(entry.target); + } + } else { + visibleElements = visibleElements.filter((visibleEntry) => { + return visibleEntry !== entry; + }); + } + }); + + if (!hasObserved) { + hideOverlappedSidebars(); + } + hasObserved = true; + }, + {} + ); + els.forEach((el) => { + intersectionObserver.observe(el); + }); + + return { + getVisibleEntries: () => { + return visibleElements; + }, + }; + }; + + const rightElementObserver = visibleItemObserver(rightSideConflictEls); + const leftElementObserver = visibleItemObserver(leftSideConflictEls); + + const hideOverlappedSidebars = () => { + marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries())); + sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries())); + if (tocLeftScrollVisibility) { + tocLeftScrollVisibility( + toRegions(leftElementObserver.getVisibleEntries()) + ); + } + }; + + window.quartoToggleReader = () => { + // Applies a slow class (or removes it) + // to update the transition speed + const slowTransition = (slow) => { + const manageTransition = (id, slow) => { + const el = document.getElementById(id); + if (el) { + if (slow) { + el.classList.add("slow"); + } else { + el.classList.remove("slow"); + } + } + }; + + manageTransition("TOC", slow); + manageTransition("quarto-sidebar", slow); + }; + const readerMode = !isReaderMode(); + setReaderModeValue(readerMode); + + // If we're entering reader mode, slow the transition + if (readerMode) { + slowTransition(readerMode); + } + highlightReaderToggle(readerMode); + hideOverlappedSidebars(); + + // If we're exiting reader mode, restore the non-slow transition + if (!readerMode) { + slowTransition(!readerMode); + } + }; + + const highlightReaderToggle = (readerMode) => { + const els = document.querySelectorAll(".quarto-reader-toggle"); + if (els) { + els.forEach((el) => { + if (readerMode) { + el.classList.add("reader"); + } else { + el.classList.remove("reader"); + } + }); + } + }; + + const setReaderModeValue = (val) => { + if (window.location.protocol !== "file:") { + window.localStorage.setItem("quarto-reader-mode", val); + } else { + localReaderMode = val; + } + }; + + const isReaderMode = () => { + if (window.location.protocol !== "file:") { + return window.localStorage.getItem("quarto-reader-mode") === "true"; + } else { + return localReaderMode; + } + }; + let localReaderMode = null; + + const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded"); + const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1; + + // Walk the TOC and collapse/expand nodes + // Nodes are expanded if: + // - they are top level + // - they have children that are 'active' links + // - they are directly below an link that is 'active' + const walk = (el, depth) => { + // Tick depth when we enter a UL + if (el.tagName === "UL") { + depth = depth + 1; + } + + // It this is active link + let isActiveNode = false; + if (el.tagName === "A" && el.classList.contains("active")) { + isActiveNode = true; + } + + // See if there is an active child to this element + let hasActiveChild = false; + for (child of el.children) { + hasActiveChild = walk(child, depth) || hasActiveChild; + } + + // Process the collapse state if this is an UL + if (el.tagName === "UL") { + if (tocOpenDepth === -1 && depth > 1) { + el.classList.add("collapse"); + } else if ( + depth <= tocOpenDepth || + hasActiveChild || + prevSiblingIsActiveLink(el) + ) { + el.classList.remove("collapse"); + } else { + el.classList.add("collapse"); + } + + // untick depth when we leave a UL + depth = depth - 1; + } + return hasActiveChild || isActiveNode; + }; + + // walk the TOC and expand / collapse any items that should be shown + + if (tocEl) { + walk(tocEl, 0); + updateActiveLink(); + } + + // Throttle the scroll event and walk peridiocally + window.document.addEventListener( + "scroll", + throttle(() => { + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + if (!isReaderMode()) { + hideOverlappedSidebars(); + } + }, 5) + ); + window.addEventListener( + "resize", + throttle(() => { + if (!isReaderMode()) { + hideOverlappedSidebars(); + } + }, 10) + ); + hideOverlappedSidebars(); + highlightReaderToggle(isReaderMode()); +}); + +// grouped tabsets +window.addEventListener("pageshow", (_event) => { + function getTabSettings() { + const data = localStorage.getItem("quarto-persistent-tabsets-data"); + if (!data) { + localStorage.setItem("quarto-persistent-tabsets-data", "{}"); + return {}; + } + if (data) { + return JSON.parse(data); + } + } + + function setTabSettings(data) { + localStorage.setItem( + "quarto-persistent-tabsets-data", + JSON.stringify(data) + ); + } + + function setTabState(groupName, groupValue) { + const data = getTabSettings(); + data[groupName] = groupValue; + setTabSettings(data); + } + + function toggleTab(tab, active) { + const tabPanelId = tab.getAttribute("aria-controls"); + const tabPanel = document.getElementById(tabPanelId); + if (active) { + tab.classList.add("active"); + tabPanel.classList.add("active"); + } else { + tab.classList.remove("active"); + tabPanel.classList.remove("active"); + } + } + + function toggleAll(selectedGroup, selectorsToSync) { + for (const [thisGroup, tabs] of Object.entries(selectorsToSync)) { + const active = selectedGroup === thisGroup; + for (const tab of tabs) { + toggleTab(tab, active); + } + } + } + + function findSelectorsToSyncByLanguage() { + const result = {}; + const tabs = Array.from( + document.querySelectorAll(`div[data-group] a[id^='tabset-']`) + ); + for (const item of tabs) { + const div = item.parentElement.parentElement.parentElement; + const group = div.getAttribute("data-group"); + if (!result[group]) { + result[group] = {}; + } + const selectorsToSync = result[group]; + const value = item.innerHTML; + if (!selectorsToSync[value]) { + selectorsToSync[value] = []; + } + selectorsToSync[value].push(item); + } + return result; + } + + function setupSelectorSync() { + const selectorsToSync = findSelectorsToSyncByLanguage(); + Object.entries(selectorsToSync).forEach(([group, tabSetsByValue]) => { + Object.entries(tabSetsByValue).forEach(([value, items]) => { + items.forEach((item) => { + item.addEventListener("click", (_event) => { + setTabState(group, value); + toggleAll(value, selectorsToSync[group]); + }); + }); + }); + }); + return selectorsToSync; + } + + const selectorsToSync = setupSelectorSync(); + for (const [group, selectedName] of Object.entries(getTabSettings())) { + const selectors = selectorsToSync[group]; + // it's possible that stale state gives us empty selections, so we explicitly check here. + if (selectors) { + toggleAll(selectedName, selectors); + } + } +}); + +function throttle(func, wait) { + let waiting = false; + return function () { + if (!waiting) { + func.apply(this, arguments); + waiting = true; + setTimeout(function () { + waiting = false; + }, wait); + } + }; +} + +function nexttick(func) { + return setTimeout(func, 0); +} diff --git a/site_libs/quarto-html/tippy.css b/site_libs/quarto-html/tippy.css new file mode 100644 index 000000000..e6ae635cb --- /dev/null +++ b/site_libs/quarto-html/tippy.css @@ -0,0 +1 @@ +.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} \ No newline at end of file diff --git a/site_libs/quarto-html/tippy.umd.min.js b/site_libs/quarto-html/tippy.umd.min.js new file mode 100644 index 000000000..ca292be32 --- /dev/null +++ b/site_libs/quarto-html/tippy.umd.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],t):(e=e||self).tippy=t(e.Popper)}(this,(function(e){"use strict";var t={passive:!0,capture:!0},n=function(){return document.body};function r(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function o(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function i(e,t){return"function"==typeof e?e.apply(void 0,t):e}function a(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function s(e,t){var n=Object.assign({},e);return t.forEach((function(e){delete n[e]})),n}function u(e){return[].concat(e)}function c(e,t){-1===e.indexOf(t)&&e.push(t)}function p(e){return e.split("-")[0]}function f(e){return[].slice.call(e)}function l(e){return Object.keys(e).reduce((function(t,n){return void 0!==e[n]&&(t[n]=e[n]),t}),{})}function d(){return document.createElement("div")}function v(e){return["Element","Fragment"].some((function(t){return o(e,t)}))}function m(e){return o(e,"MouseEvent")}function g(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function h(e){return v(e)?[e]:function(e){return o(e,"NodeList")}(e)?f(e):Array.isArray(e)?e:f(document.querySelectorAll(e))}function b(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function y(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function w(e){var t,n=u(e)[0];return null!=n&&null!=(t=n.ownerDocument)&&t.body?n.ownerDocument:document}function E(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}function O(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var x={isTouch:!1},C=0;function T(){x.isTouch||(x.isTouch=!0,window.performance&&document.addEventListener("mousemove",A))}function A(){var e=performance.now();e-C<20&&(x.isTouch=!1,document.removeEventListener("mousemove",A)),C=e}function L(){var e=document.activeElement;if(g(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var D=!!("undefined"!=typeof window&&"undefined"!=typeof document)&&!!window.msCrypto,R=Object.assign({appendTo:n,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(R);function P(e){var t=(e.plugins||[]).reduce((function(t,n){var r,o=n.name,i=n.defaultValue;o&&(t[o]=void 0!==e[o]?e[o]:null!=(r=R[o])?r:i);return t}),{});return Object.assign({},e,t)}function j(e,t){var n=Object.assign({},t,{content:i(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(P(Object.assign({},R,{plugins:t}))):k).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function M(e,t){e.innerHTML=t}function V(e){var t=d();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",v(e)?t.appendChild(e):M(t,e)),t}function I(e,t){v(t.content)?(M(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?M(e,t.content):e.textContent=t.content)}function S(e){var t=e.firstElementChild,n=f(t.children);return{box:t,content:n.find((function(e){return e.classList.contains("tippy-content")})),arrow:n.find((function(e){return e.classList.contains("tippy-arrow")||e.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(e){return e.classList.contains("tippy-backdrop")}))}}function N(e){var t=d(),n=d();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=d();function o(n,r){var o=S(t),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||I(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(V(r.arrow))):i.appendChild(V(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),I(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props),{popper:t,onUpdate:o}}N.$$tippy=!0;var B=1,H=[],U=[];function _(o,s){var v,g,h,C,T,A,L,k,M=j(o,Object.assign({},R,P(l(s)))),V=!1,I=!1,N=!1,_=!1,F=[],W=a(we,M.interactiveDebounce),X=B++,Y=(k=M.plugins).filter((function(e,t){return k.indexOf(e)===t})),$={id:X,reference:o,popper:d(),popperInstance:null,props:M,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:Y,clearDelayTimeouts:function(){clearTimeout(v),clearTimeout(g),cancelAnimationFrame(h)},setProps:function(e){if($.state.isDestroyed)return;ae("onBeforeUpdate",[$,e]),be();var t=$.props,n=j(o,Object.assign({},t,l(e),{ignoreAttributes:!0}));$.props=n,he(),t.interactiveDebounce!==n.interactiveDebounce&&(ce(),W=a(we,n.interactiveDebounce));t.triggerTarget&&!n.triggerTarget?u(t.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):n.triggerTarget&&o.removeAttribute("aria-expanded");ue(),ie(),J&&J(t,n);$.popperInstance&&(Ce(),Ae().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));ae("onAfterUpdate",[$,e])},setContent:function(e){$.setProps({content:e})},show:function(){var e=$.state.isVisible,t=$.state.isDestroyed,o=!$.state.isEnabled,a=x.isTouch&&!$.props.touch,s=r($.props.duration,0,R.duration);if(e||t||o||a)return;if(te().hasAttribute("disabled"))return;if(ae("onShow",[$],!1),!1===$.props.onShow($))return;$.state.isVisible=!0,ee()&&(z.style.visibility="visible");ie(),de(),$.state.isMounted||(z.style.transition="none");if(ee()){var u=re(),p=u.box,f=u.content;b([p,f],0)}A=function(){var e;if($.state.isVisible&&!_){if(_=!0,z.offsetHeight,z.style.transition=$.props.moveTransition,ee()&&$.props.animation){var t=re(),n=t.box,r=t.content;b([n,r],s),y([n,r],"visible")}se(),ue(),c(U,$),null==(e=$.popperInstance)||e.forceUpdate(),ae("onMount",[$]),$.props.animation&&ee()&&function(e,t){me(e,t)}(s,(function(){$.state.isShown=!0,ae("onShown",[$])}))}},function(){var e,t=$.props.appendTo,r=te();e=$.props.interactive&&t===n||"parent"===t?r.parentNode:i(t,[r]);e.contains(z)||e.appendChild(z);$.state.isMounted=!0,Ce()}()},hide:function(){var e=!$.state.isVisible,t=$.state.isDestroyed,n=!$.state.isEnabled,o=r($.props.duration,1,R.duration);if(e||t||n)return;if(ae("onHide",[$],!1),!1===$.props.onHide($))return;$.state.isVisible=!1,$.state.isShown=!1,_=!1,V=!1,ee()&&(z.style.visibility="hidden");if(ce(),ve(),ie(!0),ee()){var i=re(),a=i.box,s=i.content;$.props.animation&&(b([a,s],o),y([a,s],"hidden"))}se(),ue(),$.props.animation?ee()&&function(e,t){me(e,(function(){!$.state.isVisible&&z.parentNode&&z.parentNode.contains(z)&&t()}))}(o,$.unmount):$.unmount()},hideWithInteractivity:function(e){ne().addEventListener("mousemove",W),c(H,W),W(e)},enable:function(){$.state.isEnabled=!0},disable:function(){$.hide(),$.state.isEnabled=!1},unmount:function(){$.state.isVisible&&$.hide();if(!$.state.isMounted)return;Te(),Ae().forEach((function(e){e._tippy.unmount()})),z.parentNode&&z.parentNode.removeChild(z);U=U.filter((function(e){return e!==$})),$.state.isMounted=!1,ae("onHidden",[$])},destroy:function(){if($.state.isDestroyed)return;$.clearDelayTimeouts(),$.unmount(),be(),delete o._tippy,$.state.isDestroyed=!0,ae("onDestroy",[$])}};if(!M.render)return $;var q=M.render($),z=q.popper,J=q.onUpdate;z.setAttribute("data-tippy-root",""),z.id="tippy-"+$.id,$.popper=z,o._tippy=$,z._tippy=$;var G=Y.map((function(e){return e.fn($)})),K=o.hasAttribute("aria-expanded");return he(),ue(),ie(),ae("onCreate",[$]),M.showOnCreate&&Le(),z.addEventListener("mouseenter",(function(){$.props.interactive&&$.state.isVisible&&$.clearDelayTimeouts()})),z.addEventListener("mouseleave",(function(){$.props.interactive&&$.props.trigger.indexOf("mouseenter")>=0&&ne().addEventListener("mousemove",W)})),$;function Q(){var e=$.props.touch;return Array.isArray(e)?e:[e,0]}function Z(){return"hold"===Q()[0]}function ee(){var e;return!(null==(e=$.props.render)||!e.$$tippy)}function te(){return L||o}function ne(){var e=te().parentNode;return e?w(e):document}function re(){return S(z)}function oe(e){return $.state.isMounted&&!$.state.isVisible||x.isTouch||C&&"focus"===C.type?0:r($.props.delay,e?0:1,R.delay)}function ie(e){void 0===e&&(e=!1),z.style.pointerEvents=$.props.interactive&&!e?"":"none",z.style.zIndex=""+$.props.zIndex}function ae(e,t,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[e]&&n[e].apply(n,t)})),n)&&(r=$.props)[e].apply(r,t)}function se(){var e=$.props.aria;if(e.content){var t="aria-"+e.content,n=z.id;u($.props.triggerTarget||o).forEach((function(e){var r=e.getAttribute(t);if($.state.isVisible)e.setAttribute(t,r?r+" "+n:n);else{var o=r&&r.replace(n,"").trim();o?e.setAttribute(t,o):e.removeAttribute(t)}}))}}function ue(){!K&&$.props.aria.expanded&&u($.props.triggerTarget||o).forEach((function(e){$.props.interactive?e.setAttribute("aria-expanded",$.state.isVisible&&e===te()?"true":"false"):e.removeAttribute("aria-expanded")}))}function ce(){ne().removeEventListener("mousemove",W),H=H.filter((function(e){return e!==W}))}function pe(e){if(!x.isTouch||!N&&"mousedown"!==e.type){var t=e.composedPath&&e.composedPath()[0]||e.target;if(!$.props.interactive||!O(z,t)){if(u($.props.triggerTarget||o).some((function(e){return O(e,t)}))){if(x.isTouch)return;if($.state.isVisible&&$.props.trigger.indexOf("click")>=0)return}else ae("onClickOutside",[$,e]);!0===$.props.hideOnClick&&($.clearDelayTimeouts(),$.hide(),I=!0,setTimeout((function(){I=!1})),$.state.isMounted||ve())}}}function fe(){N=!0}function le(){N=!1}function de(){var e=ne();e.addEventListener("mousedown",pe,!0),e.addEventListener("touchend",pe,t),e.addEventListener("touchstart",le,t),e.addEventListener("touchmove",fe,t)}function ve(){var e=ne();e.removeEventListener("mousedown",pe,!0),e.removeEventListener("touchend",pe,t),e.removeEventListener("touchstart",le,t),e.removeEventListener("touchmove",fe,t)}function me(e,t){var n=re().box;function r(e){e.target===n&&(E(n,"remove",r),t())}if(0===e)return t();E(n,"remove",T),E(n,"add",r),T=r}function ge(e,t,n){void 0===n&&(n=!1),u($.props.triggerTarget||o).forEach((function(r){r.addEventListener(e,t,n),F.push({node:r,eventType:e,handler:t,options:n})}))}function he(){var e;Z()&&(ge("touchstart",ye,{passive:!0}),ge("touchend",Ee,{passive:!0})),(e=$.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(ge(e,ye),e){case"mouseenter":ge("mouseleave",Ee);break;case"focus":ge(D?"focusout":"blur",Oe);break;case"focusin":ge("focusout",Oe)}}))}function be(){F.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),F=[]}function ye(e){var t,n=!1;if($.state.isEnabled&&!xe(e)&&!I){var r="focus"===(null==(t=C)?void 0:t.type);C=e,L=e.currentTarget,ue(),!$.state.isVisible&&m(e)&&H.forEach((function(t){return t(e)})),"click"===e.type&&($.props.trigger.indexOf("mouseenter")<0||V)&&!1!==$.props.hideOnClick&&$.state.isVisible?n=!0:Le(e),"click"===e.type&&(V=!n),n&&!r&&De(e)}}function we(e){var t=e.target,n=te().contains(t)||z.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.popperState,i=e.props.interactiveBorder,a=p(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,c="top"===a?s.bottom.y:0,f="right"===a?s.left.x:0,l="left"===a?s.right.x:0,d=t.top-r+u>i,v=r-t.bottom-c>i,m=t.left-n+f>i,g=n-t.right-l>i;return d||v||m||g}))}(Ae().concat(z).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:M}:null})).filter(Boolean),e)&&(ce(),De(e))}function Ee(e){xe(e)||$.props.trigger.indexOf("click")>=0&&V||($.props.interactive?$.hideWithInteractivity(e):De(e))}function Oe(e){$.props.trigger.indexOf("focusin")<0&&e.target!==te()||$.props.interactive&&e.relatedTarget&&z.contains(e.relatedTarget)||De(e)}function xe(e){return!!x.isTouch&&Z()!==e.type.indexOf("touch")>=0}function Ce(){Te();var t=$.props,n=t.popperOptions,r=t.placement,i=t.offset,a=t.getReferenceClientRect,s=t.moveTransition,u=ee()?S(z).arrow:null,c=a?{getBoundingClientRect:a,contextElement:a.contextElement||te()}:o,p=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(ee()){var n=re().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];ee()&&u&&p.push({name:"arrow",options:{element:u,padding:3}}),p.push.apply(p,(null==n?void 0:n.modifiers)||[]),$.popperInstance=e.createPopper(c,z,Object.assign({},n,{placement:r,onFirstUpdate:A,modifiers:p}))}function Te(){$.popperInstance&&($.popperInstance.destroy(),$.popperInstance=null)}function Ae(){return f(z.querySelectorAll("[data-tippy-root]"))}function Le(e){$.clearDelayTimeouts(),e&&ae("onTrigger",[$,e]),de();var t=oe(!0),n=Q(),r=n[0],o=n[1];x.isTouch&&"hold"===r&&o&&(t=o),t?v=setTimeout((function(){$.show()}),t):$.show()}function De(e){if($.clearDelayTimeouts(),ae("onUntrigger",[$,e]),$.state.isVisible){if(!($.props.trigger.indexOf("mouseenter")>=0&&$.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&V)){var t=oe(!1);t?g=setTimeout((function(){$.state.isVisible&&$.hide()}),t):h=requestAnimationFrame((function(){$.hide()}))}}else ve()}}function F(e,n){void 0===n&&(n={});var r=R.plugins.concat(n.plugins||[]);document.addEventListener("touchstart",T,t),window.addEventListener("blur",L);var o=Object.assign({},n,{plugins:r}),i=h(e).reduce((function(e,t){var n=t&&_(t,o);return n&&e.push(n),e}),[]);return v(e)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(e){Object.keys(e).forEach((function(t){R[t]=e[t]}))},F.currentInput=x;var W=Object.assign({},e.applyStyles,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(e){var t;if(null==(t=e.props.render)||!t.$$tippy)return{};var n=S(e.popper),r=n.box,o=n.content,i=e.props.animateFill?function(){var e=d();return e.className="tippy-backdrop",y([e],"hidden"),e}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var e=r.style.transitionDuration,t=Number(e.replace("ms",""));o.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y([i],"hidden")}}}};var $={clientX:0,clientY:0},q=[];function z(e){var t=e.clientX,n=e.clientY;$={clientX:t,clientY:n}}var J={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,n=w(e.props.triggerTarget||t),r=!1,o=!1,i=!0,a=e.props;function s(){return"initial"===e.props.followCursor&&e.state.isVisible}function u(){n.addEventListener("mousemove",f)}function c(){n.removeEventListener("mousemove",f)}function p(){r=!0,e.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||t.contains(n.target),o=e.props.followCursor,i=n.clientX,a=n.clientY,s=t.getBoundingClientRect(),u=i-s.left,c=a-s.top;!r&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=e.left+u,r=e.top+c);var s="horizontal"===o?e.top:r,p="vertical"===o?e.right:n,f="horizontal"===o?e.bottom:r,l="vertical"===o?e.left:n;return{width:p-l,height:f-s,top:s,right:p,bottom:f,left:l}}})}function l(){e.props.followCursor&&(q.push({instance:e,doc:n}),function(e){e.addEventListener("mousemove",z)}(n))}function d(){0===(q=q.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===n})).length&&function(e){e.removeEventListener("mousemove",z)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=e.props},onAfterUpdate:function(t,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!e.state.isMounted||o||s()||u()):(c(),p()))},onMount:function(){e.props.followCursor&&!o&&(i&&(f($),i=!1),s()||u())},onTrigger:function(e,t){m(t)&&($={clientX:t.clientX,clientY:t.clientY}),o="focus"===t.type},onHidden:function(){e.props.followCursor&&(p(),c(),i=!0)}}}};var G={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,n=e.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;e.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),t!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,n,r){if(n.length<2||null===e)return t;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===e,s=o.top,u=i.bottom,c=a?o.left:i.left,p=a?o.right:i.right;return{top:s,bottom:u,left:c,right:p,width:p-c,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(e){return e.left}))),l=Math.max.apply(Math,n.map((function(e){return e.right}))),d=n.filter((function(t){return"left"===e?t.left===f:t.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return t}}(p(e),n.getBoundingClientRect(),f(n.getClientRects()),r)}(a.placement)}})),t=a.placement)}};function s(){var t;o||(t=function(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(n=e.popperOptions)?void 0:n.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,a),o=!0,e.setProps(t),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(t,n){if(m(n)){var o=f(e.reference.getClientRects()),i=o.find((function(e){return e.left-2<=n.clientX&&e.right+2>=n.clientX&&e.top-2<=n.clientY&&e.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var K={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,n=e.popper;function r(t){return!0===e.props.sticky||e.props.sticky===t}var o=null,i=null;function a(){var s=r("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Q(o,s)||u&&Q(i,u))&&e.popperInstance&&e.popperInstance.update(),o=s,i=u,e.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){e.props.sticky&&a()}}}};function Q(e,t){return!e||!t||(e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left)}return F.setDefaultProps({plugins:[Y,J,G,K],render:N}),F.createSingleton=function(e,t){var n;void 0===t&&(t={});var r,o=e,i=[],a=[],c=t.overrides,p=[],f=!1;function l(){a=o.map((function(e){return u(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function v(){i=o.map((function(e){return e.reference}))}function m(e){o.forEach((function(t){e?t.enable():t.disable()}))}function g(e){return o.map((function(t){var n=t.setProps;return t.setProps=function(o){n(o),t.reference===r&&e.setProps(o)},function(){t.setProps=n}}))}function h(e,t){var n=a.indexOf(t);if(t!==r){r=t;var s=(c||[]).concat("content").reduce((function(e,t){return e[t]=o[n].props[t],e}),{});e.setProps(Object.assign({},s,{getReferenceClientRect:"function"==typeof s.getReferenceClientRect?s.getReferenceClientRect:function(){var e;return null==(e=i[n])?void 0:e.getBoundingClientRect()}}))}}m(!1),v(),l();var b={fn:function(){return{onDestroy:function(){m(!0)},onHidden:function(){r=null},onClickOutside:function(e){e.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(e){e.props.showOnCreate&&!f&&(f=!0,h(e,i[0]))},onTrigger:function(e,t){h(e,t.currentTarget)}}}},y=F(d(),Object.assign({},s(t,["overrides"]),{plugins:[b].concat(t.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(n=t.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(e){if(w(),!r&&null==e)return h(y,i[0]);if(!r||null!=e){if("number"==typeof e)return i[e]&&h(y,i[e]);if(o.indexOf(e)>=0){var t=e.reference;return h(y,t)}return i.indexOf(e)>=0?h(y,e):void 0}},y.showNext=function(){var e=i[0];if(!r)return y.show(0);var t=i.indexOf(r);y.show(i[t+1]||e)},y.showPrevious=function(){var e=i[i.length-1];if(!r)return y.show(e);var t=i.indexOf(r),n=i[t-1]||e;y.show(n)};var E=y.setProps;return y.setProps=function(e){c=e.overrides||c,E(e)},y.setInstances=function(e){m(!0),p.forEach((function(e){return e()})),o=e,m(!1),v(),l(),p=g(y),y.setProps({triggerTarget:a})},p=g(y),y},F.delegate=function(e,n){var r=[],o=[],i=!1,a=n.target,c=s(n,["target"]),p=Object.assign({},c,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},c,{showOnCreate:!0}),l=F(e,p);function d(e){if(e.target&&!i){var t=e.target.closest(a);if(t){var r=t.getAttribute("data-tippy-trigger")||n.trigger||R.trigger;if(!t._tippy&&!("touchstart"===e.type&&"boolean"==typeof f.touch||"touchstart"!==e.type&&r.indexOf(X[e.type])<0)){var s=F(t,f);s&&(o=o.concat(s))}}}}function v(e,t,n,o){void 0===o&&(o=!1),e.addEventListener(t,n,o),r.push({node:e,eventType:t,handler:n,options:o})}return u(l).forEach((function(e){var n=e.destroy,a=e.enable,s=e.disable;e.destroy=function(e){void 0===e&&(e=!0),e&&o.forEach((function(e){e.destroy()})),o=[],r.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),r=[],n()},e.enable=function(){a(),o.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){s(),o.forEach((function(e){return e.disable()})),i=!0},function(e){var n=e.reference;v(n,"touchstart",d,t),v(n,"mouseover",d),v(n,"focusin",d),v(n,"click",d)}(e)})),l},F.hideAll=function(e){var t=void 0===e?{}:e,n=t.exclude,r=t.duration;U.forEach((function(e){var t=!1;if(n&&(t=g(n)?e.reference===n:e.popper===n.popper),!t){var o=e.props.duration;e.setProps({duration:r}),e.hide(),e.state.isDestroyed||e.setProps({duration:o})}}))},F.roundArrow='',F})); + diff --git a/site_libs/quarto-nav/headroom.min.js b/site_libs/quarto-nav/headroom.min.js new file mode 100644 index 000000000..b08f1dffb --- /dev/null +++ b/site_libs/quarto-nav/headroom.min.js @@ -0,0 +1,7 @@ +/*! + * headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=ls.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t){return t===Object(t)?t:{down:t,up:t}}function s(t,n){n=n||{},Object.assign(this,s.options,n),this.classes=Object.assign({},s.options.classes,n.classes),this.elem=t,this.tolerance=o(this.tolerance),this.offset=o(this.offset),this.initialised=!1,this.frozen=!1}return s.prototype={constructor:s,init:function(){return s.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},s.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},s.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),s}); diff --git a/site_libs/quarto-nav/quarto-nav.js b/site_libs/quarto-nav/quarto-nav.js new file mode 100644 index 000000000..ebfc262e4 --- /dev/null +++ b/site_libs/quarto-nav/quarto-nav.js @@ -0,0 +1,288 @@ +const headroomChanged = new CustomEvent("quarto-hrChanged", { + detail: {}, + bubbles: true, + cancelable: false, + composed: false, +}); + +window.document.addEventListener("DOMContentLoaded", function () { + let init = false; + + // Manage the back to top button, if one is present. + let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop; + const scrollDownBuffer = 5; + const scrollUpBuffer = 35; + const btn = document.getElementById("quarto-back-to-top"); + const hideBackToTop = () => { + btn.style.display = "none"; + }; + const showBackToTop = () => { + btn.style.display = "inline-block"; + }; + if (btn) { + window.document.addEventListener( + "scroll", + function () { + const currentScrollTop = + window.pageYOffset || document.documentElement.scrollTop; + + // Shows and hides the button 'intelligently' as the user scrolls + if (currentScrollTop - scrollDownBuffer > lastScrollTop) { + hideBackToTop(); + lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; + } else if (currentScrollTop < lastScrollTop - scrollUpBuffer) { + showBackToTop(); + lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; + } + + // Show the button at the bottom, hides it at the top + if (currentScrollTop <= 0) { + hideBackToTop(); + } else if ( + window.innerHeight + currentScrollTop >= + document.body.offsetHeight + ) { + showBackToTop(); + } + }, + false + ); + } + + function throttle(func, wait) { + var timeout; + return function () { + const context = this; + const args = arguments; + const later = function () { + clearTimeout(timeout); + timeout = null; + func.apply(context, args); + }; + + if (!timeout) { + timeout = setTimeout(later, wait); + } + }; + } + + function headerOffset() { + // Set an offset if there is are fixed top navbar + const headerEl = window.document.querySelector("header.fixed-top"); + if (headerEl) { + return headerEl.clientHeight; + } else { + return 0; + } + } + + function footerOffset() { + const footerEl = window.document.querySelector("footer.footer"); + if (footerEl) { + return footerEl.clientHeight; + } else { + return 0; + } + } + + function dashboardOffset() { + const dashboardNavEl = window.document.getElementById( + "quarto-dashboard-header" + ); + if (dashboardNavEl !== null) { + return dashboardNavEl.clientHeight; + } else { + return 0; + } + } + + function updateDocumentOffsetWithoutAnimation() { + updateDocumentOffset(false); + } + + function updateDocumentOffset(animated) { + // set body offset + const topOffset = headerOffset(); + const bodyOffset = topOffset + footerOffset() + dashboardOffset(); + const bodyEl = window.document.body; + bodyEl.setAttribute("data-bs-offset", topOffset); + bodyEl.style.paddingTop = topOffset + "px"; + + // deal with sidebar offsets + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + if (!animated) { + sidebar.classList.add("notransition"); + // Remove the no transition class after the animation has time to complete + setTimeout(function () { + sidebar.classList.remove("notransition"); + }, 201); + } + + if (window.Headroom && sidebar.classList.contains("sidebar-unpinned")) { + sidebar.style.top = "0"; + sidebar.style.maxHeight = "100vh"; + } else { + sidebar.style.top = topOffset + "px"; + sidebar.style.maxHeight = "calc(100vh - " + topOffset + "px)"; + } + }); + + // allow space for footer + const mainContainer = window.document.querySelector(".quarto-container"); + if (mainContainer) { + mainContainer.style.minHeight = "calc(100vh - " + bodyOffset + "px)"; + } + + // link offset + let linkStyle = window.document.querySelector("#quarto-target-style"); + if (!linkStyle) { + linkStyle = window.document.createElement("style"); + linkStyle.setAttribute("id", "quarto-target-style"); + window.document.head.appendChild(linkStyle); + } + while (linkStyle.firstChild) { + linkStyle.removeChild(linkStyle.firstChild); + } + if (topOffset > 0) { + linkStyle.appendChild( + window.document.createTextNode(` + section:target::before { + content: ""; + display: block; + height: ${topOffset}px; + margin: -${topOffset}px 0 0; + }`) + ); + } + if (init) { + window.dispatchEvent(headroomChanged); + } + init = true; + } + + // initialize headroom + var header = window.document.querySelector("#quarto-header"); + if (header && window.Headroom) { + const headroom = new window.Headroom(header, { + tolerance: 5, + onPin: function () { + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + sidebar.classList.remove("sidebar-unpinned"); + }); + updateDocumentOffset(); + }, + onUnpin: function () { + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + sidebar.classList.add("sidebar-unpinned"); + }); + updateDocumentOffset(); + }, + }); + headroom.init(); + + let frozen = false; + window.quartoToggleHeadroom = function () { + if (frozen) { + headroom.unfreeze(); + frozen = false; + } else { + headroom.freeze(); + frozen = true; + } + }; + } + + window.addEventListener( + "hashchange", + function (e) { + if ( + getComputedStyle(document.documentElement).scrollBehavior !== "smooth" + ) { + window.scrollTo(0, window.pageYOffset - headerOffset()); + } + }, + false + ); + + // Observe size changed for the header + const headerEl = window.document.querySelector("header.fixed-top"); + if (headerEl && window.ResizeObserver) { + const observer = new window.ResizeObserver(() => { + setTimeout(updateDocumentOffsetWithoutAnimation, 0); + }); + observer.observe(headerEl, { + attributes: true, + childList: true, + characterData: true, + }); + } else { + window.addEventListener( + "resize", + throttle(updateDocumentOffsetWithoutAnimation, 50) + ); + } + setTimeout(updateDocumentOffsetWithoutAnimation, 250); + + // fixup index.html links if we aren't on the filesystem + if (window.location.protocol !== "file:") { + const links = window.document.querySelectorAll("a"); + for (let i = 0; i < links.length; i++) { + if (links[i].href) { + links[i].href = links[i].href.replace(/\/index\.html/, "/"); + } + } + + // Fixup any sharing links that require urls + // Append url to any sharing urls + const sharingLinks = window.document.querySelectorAll( + "a.sidebar-tools-main-item, a.quarto-navigation-tool, a.quarto-navbar-tools, a.quarto-navbar-tools-item" + ); + for (let i = 0; i < sharingLinks.length; i++) { + const sharingLink = sharingLinks[i]; + const href = sharingLink.getAttribute("href"); + if (href) { + sharingLink.setAttribute( + "href", + href.replace("|url|", window.location.href) + ); + } + } + + // Scroll the active navigation item into view, if necessary + const navSidebar = window.document.querySelector("nav#quarto-sidebar"); + if (navSidebar) { + // Find the active item + const activeItem = navSidebar.querySelector("li.sidebar-item a.active"); + if (activeItem) { + // Wait for the scroll height and height to resolve by observing size changes on the + // nav element that is scrollable + const resizeObserver = new ResizeObserver((_entries) => { + // The bottom of the element + const elBottom = activeItem.offsetTop; + const viewBottom = navSidebar.scrollTop + navSidebar.clientHeight; + + // The element height and scroll height are the same, then we are still loading + if (viewBottom !== navSidebar.scrollHeight) { + // Determine if the item isn't visible and scroll to it + if (elBottom >= viewBottom) { + navSidebar.scrollTop = elBottom; + } + + // stop observing now since we've completed the scroll + resizeObserver.unobserve(navSidebar); + } + }); + resizeObserver.observe(navSidebar); + } + } + } +}); diff --git a/site_libs/quarto-search/autocomplete.umd.js b/site_libs/quarto-search/autocomplete.umd.js new file mode 100644 index 000000000..ae0063aa9 --- /dev/null +++ b/site_libs/quarto-search/autocomplete.umd.js @@ -0,0 +1,3 @@ +/*! @algolia/autocomplete-js 1.11.1 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@algolia/autocomplete-js"]={})}(this,(function(e){"use strict";function t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function n(e){for(var n=1;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,u,a=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||c(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function x(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function N(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r=3||2===n&&r>=4||1===n&&r>=10);function i(t,n,r){if(o&&void 0!==r){var i=r[0].__autocomplete_algoliaCredentials,u={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(D(n),[{headers:u}]))}else e.apply(void 0,[t].concat(D(n)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDsAfterSearch",B(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDs",B(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDsAfterSearch",B(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDs",B(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&t.reduce((function(e,t){var n=t.items,r=k(t,A);return[].concat(D(e),D(q(N(N({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return i("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function F(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function L(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function M(e){return function(e){if(Array.isArray(e))return H(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return H(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&z({onItemsChange:r,items:n,insights:a,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function l(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:W({clickAnalytics:!0},e?{userToken:e}:{}),insights:a}})}u("addAlgoliaAgent","insights-plugin"),l(),u("onUserTokenChange",l),u("getUserToken",null,(function(e,t){l(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,i=e.source;L(t)&&o({state:n,event:r,insights:a,item:t,insightsEvents:[W({eventName:"Item Selected"},j({item:t,items:i.getItems().filter(L)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;L(t)&&i({state:r,event:o,insights:a,item:t,insightsEvents:[W({eventName:"Item Active"},j({item:t,items:n.getItems().filter(L)}))]})}))},onStateChange:function(e){var t=e.state;c({state:t})},__autocomplete_pluginOptions:e}}function J(e,t){var n=t;return{then:function(t,r){return J(e.then(Y(t,n,e),Y(r,n,e)),n)},catch:function(t){return J(e.catch(Y(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),J(e.finally(Y(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function X(e){return J(e,{isCanceled:!1,onCancelList:[]})}function Y(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Z(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function te(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:d(),plugins:o,initialState:he({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(ye(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:O,onResolve:O};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=te(te({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return m(e)})).then((function(e){return e.map((function(e){return he(he({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:he({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function Se(e){return Se="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Se(e)}function je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Pe(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var He,Ve,We,Ke=null,Qe=(He=-1,Ve=-1,We=void 0,function(e){var t=++He;return Promise.resolve(e).then((function(e){return We&&t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function et(e){return et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},et(e)}var tt=["props","refresh","store"],nt=["inputElement","formElement","panelElement"],rt=["inputElement"],ot=["inputElement","maxLength"],it=["source"],ut=["item","source"];function at(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ft(e){var t=e.props,n=e.refresh,r=e.store,o=st(e,tt);return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,i=e.panelElement;function u(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,i].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return lt({onTouchStart:u,onMouseDown:u,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},st(e,nt))},getRootProps:function(e){return lt({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return ie(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":ie(t.id,"label")},e)},getFormProps:function(e){return e.inputElement,lt({action:"",noValidate:!0,role:"search",onSubmit:function(i){var u;i.preventDefault(),t.onSubmit(lt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(u=e.inputElement)||void 0===u||u.blur()},onReset:function(i){var u;i.preventDefault(),t.onReset(lt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(u=e.inputElement)||void 0===u||u.focus()}},st(e,rt))},getLabelProps:function(e){return lt({htmlFor:ie(t.id,"input"),id:ie(t.id,"label")},e)},getInputProps:function(e){var i;function u(e){(t.openOnFocus||Boolean(r.getState().query))&&$e(lt({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var a=e||{};a.inputElement;var l=a.maxLength,c=void 0===l?512:l,s=st(a,ot),f=oe(r.getState()),p=function(e){return Boolean(e&&e.match(ue))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),m=t.enterKeyHint||(null!=f&&f.itemUrl&&!p?"go":"search");return lt({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?ie(t.id,"item-".concat(r.getState().activeItemId),null==f?void 0:f.source):void 0,"aria-controls":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return ie(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":ie(t.id,"label"),value:r.getState().completion||r.getState().query,id:ie(t.id,"input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:m,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:c,type:"search",onChange:function(e){$e(lt({event:e,props:t,query:e.currentTarget.value.slice(0,c),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,i=Ze(e,Ge);if("ArrowUp"===t.key||"ArrowDown"===t.key){var u=function(){var e=oe(o.getState()),t=n.environment.document.getElementById(ie(n.id,"item-".concat(o.getState().activeItemId),null==e?void 0:e.source));t&&(t.scrollIntoViewIfNeeded?t.scrollIntoViewIfNeeded(!1):t.scrollIntoView(!1))},a=function(){var e=oe(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,u=e.itemInputValue,a=e.itemUrl,l=e.source;l.onActive(Xe({event:t,item:n,itemInputValue:u,itemUrl:a,refresh:r,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?$e(Xe({event:t,props:n,query:o.getState().query,refresh:r,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),a(),setTimeout(u,0)})):(o.dispatch(t.key,{}),a(),u())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=oe(o.getState()),c=l.item,s=l.itemInputValue,f=l.itemUrl,p=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i)),n.navigator.navigateNewTab({itemUrl:f,item:c,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i)),n.navigator.navigateNewWindow({itemUrl:f,item:c,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i)),void n.navigator.navigate({itemUrl:f,item:c,state:o.getState()});$e(Xe({event:t,nextState:{isOpen:!1},props:n,query:s,refresh:r,store:o},i)).then((function(){p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i))}))}}}(lt({event:e,props:t,refresh:n,store:r},o))},onFocus:u,onBlur:O,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||u(n)}},s)},getPanelProps:function(e){return lt({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.source,o=st(n,it);return lt({role:"listbox","aria-labelledby":ie(t.id,"label"),id:ie(t.id,"list",r)},o)},getItemProps:function(e){var i=e.item,u=e.source,a=st(e,ut);return lt({id:ie(t.id,"item-".concat(i.__autocomplete_id),u),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=oe(r.getState());if(null!==r.getState().activeItemId&&t){var u=t.item,a=t.itemInputValue,l=t.itemUrl,c=t.source;c.onActive(lt({event:e,item:u,itemInputValue:a,itemUrl:l,refresh:n,source:c,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=u.getItemInputValue({item:i,state:r.getState()}),l=u.getItemUrl({item:i,state:r.getState()});(l?Promise.resolve():$e(lt({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){u.onSelect(lt({event:e,item:i,itemInputValue:a,itemUrl:l,refresh:n,source:u,state:r.getState()},o))}))}},a)}}}function pt(e){return pt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pt(e)}function mt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vt(e){for(var t=1;t=5&&((o||!e&&5===r)&&(u.push(r,0,o,n),r=6),e&&(u.push(r,e,0,n),r=6)),o=""},l=0;l"===t?(r=1,o=""):o=t+o[0]:i?t===i?i="":o+=t:'"'===t||"'"===t?i=t:">"===t?(a(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][c+1])?(a(),3===r&&(u=u[0]),r=u,(u=u[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(a(),r=2):o+=t),3===r&&"!--"===o&&(r=4,u=u[0])}return a(),u}(e)),t),arguments,[])).length>1?t:t[0]}var kt=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n};function xt(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function Nt(){for(var e=arguments.length,t=new Array(e),n=0;n2&&(u.children=arguments.length>3?Jt.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===u[i]&&(u[i]=e.defaultProps[i]);return sn(e,u,r,o,null)}function sn(e,t,n,r,o){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++Yt:o};return null==o&&null!=Xt.vnode&&Xt.vnode(i),i}function fn(e){return e.children}function pn(e,t){this.props=e,this.context=t}function mn(e,t){if(null==t)return e.__?mn(e.__,e.__.__k.indexOf(e)+1):null;for(var n;tt&&Zt.sort(nn));yn.__r=0}function bn(e,t,n,r,o,i,u,a,l,c){var s,f,p,m,v,d,y,b=r&&r.__k||on,g=b.length;for(n.__k=[],s=0;s0?sn(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)){if(m.__=n,m.__b=n.__b+1,null===(p=b[s])||p&&m.key==p.key&&m.type===p.type)b[s]=void 0;else for(f=0;f=0;t--)if((n=e.__k[t])&&(r=On(n)))return r;return null}function _n(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||un.test(t)?n:n+"px"}function Sn(e,t,n,r,o){var i;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||_n(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||_n(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])i=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+i]=n,n?r||e.addEventListener(t,i?Pn:jn,i):e.removeEventListener(t,i?Pn:jn,i);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function jn(e){return this.l[e.type+!1](Xt.event?Xt.event(e):e)}function Pn(e){return this.l[e.type+!0](Xt.event?Xt.event(e):e)}function wn(e,t,n,r,o,i,u,a,l){var c,s,f,p,m,v,d,y,b,g,h,O,_,S,j,P=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,a=t.__e=n.__e,t.__h=null,i=[a]),(c=Xt.__b)&&c(t);try{e:if("function"==typeof P){if(y=t.props,b=(c=P.contextType)&&r[c.__c],g=c?b?b.props.value:c.__:r,n.__c?d=(s=t.__c=n.__c).__=s.__E:("prototype"in P&&P.prototype.render?t.__c=s=new P(y,g):(t.__c=s=new pn(y,g),s.constructor=P,s.render=Cn),b&&b.sub(s),s.props=y,s.state||(s.state={}),s.context=g,s.__n=r,f=s.__d=!0,s.__h=[],s._sb=[]),null==s.__s&&(s.__s=s.state),null!=P.getDerivedStateFromProps&&(s.__s==s.state&&(s.__s=an({},s.__s)),an(s.__s,P.getDerivedStateFromProps(y,s.__s))),p=s.props,m=s.state,s.__v=t,f)null==P.getDerivedStateFromProps&&null!=s.componentWillMount&&s.componentWillMount(),null!=s.componentDidMount&&s.__h.push(s.componentDidMount);else{if(null==P.getDerivedStateFromProps&&y!==p&&null!=s.componentWillReceiveProps&&s.componentWillReceiveProps(y,g),!s.__e&&null!=s.shouldComponentUpdate&&!1===s.shouldComponentUpdate(y,s.__s,g)||t.__v===n.__v){for(t.__v!==n.__v&&(s.props=y,s.state=s.__s,s.__d=!1),s.__e=!1,t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),h=0;h0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(xn);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Tn(e){return function(e){if(Array.isArray(e))return qn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return qn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return qn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function qn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",""":'"',"'":"'"},Fn=new RegExp(/\w/i),Ln=/&(amp|quot|lt|gt|#39);/g,Un=RegExp(Ln.source);function Mn(e,t){var n,r,o,i=e[t],u=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,a=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return Fn.test((o=i.value)&&Un.test(o)?o.replace(Ln,(function(e){return Rn[e]})):o)||a!==u?i.isHighlighted:a}function Hn(e){return Hn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Hn(e)}function Vn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Wn(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ur(e){return function(e){if(Array.isArray(e))return ar(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ar(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ar(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ar(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0;if(!O.value.core.openOnFocus&&!t.query)return n;var r=Boolean(y.current||O.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:br,options:e}}))})),j=f(n({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},O.value.core.initialState)),P={getEnvironmentProps:O.value.renderer.getEnvironmentProps,getFormProps:O.value.renderer.getFormProps,getInputProps:O.value.renderer.getInputProps,getItemProps:O.value.renderer.getItemProps,getLabelProps:O.value.renderer.getLabelProps,getListProps:O.value.renderer.getListProps,getPanelProps:O.value.renderer.getPanelProps,getRootProps:O.value.renderer.getRootProps},w={setActiveItemId:S.value.setActiveItemId,setQuery:S.value.setQuery,setCollections:S.value.setCollections,setIsOpen:S.value.setIsOpen,setStatus:S.value.setStatus,setContext:S.value.setContext,refresh:S.value.refresh,navigator:S.value.navigator},I=m((function(){return Ct.bind(O.value.renderer.renderer.createElement)})),A=m((function(){return Gt({autocomplete:S.value,autocompleteScopeApi:w,classNames:O.value.renderer.classNames,environment:O.value.core.environment,isDetached:_.value,placeholder:O.value.core.placeholder,propGetters:P,setIsModalOpen:k,state:j.current,translations:O.value.renderer.translations})}));function E(){Ht(A.value.panel,{style:_.value?{}:yr({panelPlacement:O.value.renderer.panelPlacement,container:A.value.root,form:A.value.form,environment:O.value.core.environment})})}function D(e){j.current=e;var t={autocomplete:S.value,autocompleteScopeApi:w,classNames:O.value.renderer.classNames,components:O.value.renderer.components,container:O.value.renderer.container,html:I.value,dom:A.value,panelContainer:_.value?A.value.detachedContainer:O.value.renderer.panelContainer,propGetters:P,state:j.current,renderer:O.value.renderer.renderer},r=!b(e)&&!y.current&&O.value.renderer.renderNoResults||O.value.renderer.render;!function(e){var t=e.autocomplete,r=e.autocompleteScopeApi,o=e.dom,i=e.propGetters,u=e.state;Vt(o.root,i.getRootProps(n({state:u,props:t.getRootProps({})},r))),Vt(o.input,i.getInputProps(n({state:u,props:t.getInputProps({inputElement:o.input}),inputElement:o.input},r))),Ht(o.label,{hidden:"stalled"===u.status}),Ht(o.loadingIndicator,{hidden:"stalled"!==u.status}),Ht(o.clearButton,{hidden:!u.query}),Ht(o.detachedSearchButtonQuery,{textContent:u.query}),Ht(o.detachedSearchButtonPlaceholder,{hidden:Boolean(u.query)})}(t),function(e,t){var r=t.autocomplete,o=t.autocompleteScopeApi,u=t.classNames,a=t.html,l=t.dom,c=t.panelContainer,s=t.propGetters,f=t.state,p=t.components,m=t.renderer;if(f.isOpen){c.contains(l.panel)||"loading"===f.status||c.appendChild(l.panel),l.panel.classList.toggle("aa-Panel--stalled","stalled"===f.status);var v=f.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var l=e.source,c=e.items;return m.createElement("section",{key:t,className:u.source,"data-autocomplete-source-id":l.sourceId},l.templates.header&&m.createElement("div",{className:u.sourceHeader},l.templates.header({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})),l.templates.noResults&&0===c.length?m.createElement("div",{className:u.sourceNoResults},l.templates.noResults({components:p,createElement:m.createElement,Fragment:m.Fragment,source:l,state:f,html:a})):m.createElement("ul",i({className:u.list},s.getListProps(n({state:f,props:r.getListProps({source:l})},o))),c.map((function(e){var t=r.getItemProps({item:e,source:l});return m.createElement("li",i({key:t.id,className:u.item},s.getItemProps(n({state:f,props:t},o))),l.templates.item({components:p,createElement:m.createElement,Fragment:m.Fragment,item:e,state:f,html:a}))}))),l.templates.footer&&m.createElement("div",{className:u.sourceFooter},l.templates.footer({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})))})),d=m.createElement(m.Fragment,null,m.createElement("div",{className:u.panelLayout},v),m.createElement("div",{className:"aa-GradientBottom"})),y=v.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(n(n({children:d,state:f,sections:v,elements:y},m),{},{components:p,html:a},o),l.panel)}else c.contains(l.panel)&&c.removeChild(l.panel)}(r,t)}function C(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};l();var t=O.value.renderer,n=t.components,r=u(t,gr);g.current=qt(r,O.value.core,{components:Bt(n,(function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")})),initialState:j.current},e),v(),c(),S.value.refresh().then((function(){D(j.current)}))}function k(e){requestAnimationFrame((function(){var t=O.value.core.environment.document.body.contains(A.value.detachedOverlay);e!==t&&(e?(O.value.core.environment.document.body.appendChild(A.value.detachedOverlay),O.value.core.environment.document.body.classList.add("aa-Detached"),A.value.input.focus()):(O.value.core.environment.document.body.removeChild(A.value.detachedOverlay),O.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return a((function(){var e=S.value.getEnvironmentProps({formElement:A.value.form,panelElement:A.value.panel,inputElement:A.value.input});return Ht(O.value.core.environment,e),function(){Ht(O.value.core.environment,Object.keys(e).reduce((function(e,t){return n(n({},e),{},o({},t,void 0))}),{}))}})),a((function(){var e=_.value?O.value.core.environment.document.body:O.value.renderer.panelContainer,t=_.value?A.value.detachedOverlay:A.value.panel;return _.value&&j.current.isOpen&&k(!0),D(j.current),function(){e.contains(t)&&e.removeChild(t)}})),a((function(){var e=O.value.renderer.container;return e.appendChild(A.value.root),function(){e.removeChild(A.value.root)}})),a((function(){var e=p((function(e){D(e.state)}),0);return h.current=function(t){var n=t.state,r=t.prevState;(_.value&&r.isOpen!==n.isOpen&&k(n.isOpen),_.value||!n.isOpen||r.isOpen||E(),n.query!==r.query)&&O.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){h.current=void 0}})),a((function(){var e=p((function(){var e=_.value;_.value=O.value.core.environment.matchMedia(O.value.renderer.detachedMediaQuery).matches,e!==_.value?C({}):requestAnimationFrame(E)}),20);return O.value.core.environment.addEventListener("resize",e),function(){O.value.core.environment.removeEventListener("resize",e)}})),a((function(){if(!_.value)return function(){};function e(e){A.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=O.value.core.environment.matchMedia(getComputedStyle(O.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),a((function(){return requestAnimationFrame(E),function(){}})),n(n({},w),{},{update:C,destroy:function(){l()}})},e.getAlgoliaFacets=function(e){var t=hr({transformResponse:function(e){return e.facetHits}}),r=e.queries.map((function(e){return n(n({},e),{},{type:"facet"})}));return t(n(n({},e),{},{queries:r}))},e.getAlgoliaResults=Or,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/site_libs/quarto-search/fuse.min.js b/site_libs/quarto-search/fuse.min.js new file mode 100644 index 000000000..adc28356e --- /dev/null +++ b/site_libs/quarto-search/fuse.min.js @@ -0,0 +1,9 @@ +/** + * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io) + * + * Copyright (c) 2022 Kiro Risk (http://kiro.me) + * All Rights Reserved. Apache Software License 2.0 + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ +var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(C).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),c=parseFloat(Math.round(o*r)/r);return n.set(i,c),c},clear:function(){n.clear()}}}var $=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?I.getFn:n,o=t.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o;r(this,e),this.norm=E(c,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,g(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();g(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?I.getFn:r,o=n.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o,a=new $({getFn:i,fieldNormWeight:c});return a.setKeys(e.map(_)),a.setSources(t),a.create(),a}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,c=t.expectedLocation,a=void 0===c?0:c,s=t.distance,u=void 0===s?I.distance:s,h=t.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(a-o);return u?f+d/u:d?1:f}function N(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I.minMatchCharLength,n=[],r=-1,i=-1,o=0,c=e.length;o=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}var P=32;function W(e){for(var t={},n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,c=void 0===o?I.location:o,a=i.threshold,s=void 0===a?I.threshold:a,u=i.distance,h=void 0===u?I.distance:u,l=i.includeMatches,f=void 0===l?I.includeMatches:l,d=i.findAllMatches,v=void 0===d?I.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?I.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?I.isCaseSensitive:p,k=i.ignoreLocation,M=void 0===k?I.ignoreLocation:k;if(r(this,e),this.options={location:c,threshold:s,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:M},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var b=function(e,t){n.chunks.push({pattern:e,alphabet:W(e),startIndex:t})},x=this.pattern.length;if(x>P){for(var w=0,L=x%P,S=x-L;w3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?I.location:i,c=r.distance,a=void 0===c?I.distance:c,s=r.threshold,u=void 0===s?I.threshold:s,h=r.findAllMatches,l=void 0===h?I.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?I.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?I.includeMatches:v,y=r.ignoreLocation,p=void 0===y?I.ignoreLocation:y;if(t.length>P)throw new Error(w(P));for(var m,k=t.length,M=e.length,b=Math.max(0,Math.min(o,M)),x=u,L=b,S=d>1||g,_=S?Array(M):[];(m=e.indexOf(t,L))>-1;){var O=R(t,{currentLocation:m,expectedLocation:b,distance:a,ignoreLocation:p});if(x=Math.min(O,x),L=m+k,S)for(var j=0;j=z;q-=1){var B=q-1,J=n[e.charAt(B)];if(S&&(_[B]=+!!J),K[q]=(K[q+1]<<1|1)&J,F&&(K[q]|=(A[q+1]|A[q])<<1|1|A[q+1]),K[q]&$&&(C=R(t,{errors:F,currentLocation:B,expectedLocation:b,distance:a,ignoreLocation:p}))<=x){if(x=C,(L=B)<=b)break;z=Math.max(1,2*b-L)}}if(R(t,{errors:F+1,currentLocation:b,expectedLocation:b,distance:a,ignoreLocation:p})>x)break;A=K}var U={isMatch:L>=0,score:Math.max(.001,C)};if(S){var V=N(_,d);V.length?g&&(U.indices=V):U.isMatch=!1}return U}(e,n,i,{location:c+o,distance:a,threshold:s,findAllMatches:u,minMatchCharLength:h,includeMatches:r,ignoreLocation:l}),p=y.isMatch,m=y.score,k=y.indices;p&&(g=!0),v+=m,p&&k&&(d=[].concat(f(d),f(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=d),y}}]),e}(),z=function(){function e(t){r(this,e),this.pattern=t}return o(e,[{key:"search",value:function(){}}],[{key:"isMultiMatch",value:function(e){return D(e,this.multiRegex)}},{key:"isSingleMatch",value:function(e){return D(e,this.singleRegex)}}]),e}();function D(e,t){var n=e.match(t);return n?n[1]:null}var K=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"exact"}},{key:"multiRegex",get:function(){return/^="(.*)"$/}},{key:"singleRegex",get:function(){return/^=(.*)$/}}]),n}(z),q=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"$/}},{key:"singleRegex",get:function(){return/^!(.*)$/}}]),n}(z),B=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"prefix-exact"}},{key:"multiRegex",get:function(){return/^\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^\^(.*)$/}}]),n}(z),J=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-prefix-exact"}},{key:"multiRegex",get:function(){return/^!\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^!\^(.*)$/}}]),n}(z),U=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}],[{key:"type",get:function(){return"suffix-exact"}},{key:"multiRegex",get:function(){return/^"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^(.*)\$$/}}]),n}(z),V=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-suffix-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^!(.*)\$$/}}]),n}(z),G=function(e){a(n,e);var t=l(n);function n(e){var i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=o.location,a=void 0===c?I.location:c,s=o.threshold,u=void 0===s?I.threshold:s,h=o.distance,l=void 0===h?I.distance:h,f=o.includeMatches,d=void 0===f?I.includeMatches:f,v=o.findAllMatches,g=void 0===v?I.findAllMatches:v,y=o.minMatchCharLength,p=void 0===y?I.minMatchCharLength:y,m=o.isCaseSensitive,k=void 0===m?I.isCaseSensitive:m,M=o.ignoreLocation,b=void 0===M?I.ignoreLocation:M;return r(this,n),(i=t.call(this,e))._bitapSearch=new T(e,{location:a,threshold:u,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:k,ignoreLocation:b}),i}return o(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(z),H=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(z),Q=[K,H,B,J,V,U,q,G],X=Q.length,Y=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/;function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(Y).filter((function(e){return e&&!!e.trim()})),r=[],i=0,o=n.length;i1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,o=void 0===i?I.isCaseSensitive:i,c=n.includeMatches,a=void 0===c?I.includeMatches:c,s=n.minMatchCharLength,u=void 0===s?I.minMatchCharLength:s,h=n.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=n.findAllMatches,d=void 0===f?I.findAllMatches:f,v=n.location,g=void 0===v?I.location:v,y=n.threshold,p=void 0===y?I.threshold:y,m=n.distance,k=void 0===m?I.distance:m;r(this,e),this.query=null,this.options={isCaseSensitive:o,includeMatches:a,minMatchCharLength:u,findAllMatches:d,ignoreLocation:l,location:g,threshold:p,distance:k},this.pattern=o?t:t.toLowerCase(),this.query=Z(this.pattern,this.options)}return o(e,[{key:"searchIn",value:function(e){var t=this.query;if(!t)return{isMatch:!1,score:1};var n=this.options,r=n.includeMatches;e=n.isCaseSensitive?e:e.toLowerCase();for(var i=0,o=[],c=0,a=0,s=t.length;a-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function ve(e,t){t.score=e.score}function ge(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?I.includeMatches:r,o=n.includeScore,c=void 0===o?I.includeScore:o,a=[];return i&&a.push(de),c&&a.push(ve),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return a.length&&a.forEach((function(t){t(e,r)})),r}))}var ye=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},I),i),this.options.useExtendedSearch,this._keyStore=new S(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof $))throw new Error("Incorrect 'index' type");this._myIndex=t||F(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){k(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n1&&void 0!==arguments[1]?arguments[1]:{},n=t.limit,r=void 0===n?-1:n,i=this.options,o=i.includeMatches,c=i.includeScore,a=i.shouldSort,s=i.sortFn,u=i.ignoreFieldNorm,h=g(e)?g(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return fe(h,{ignoreFieldNorm:u}),a&&h.sort(s),y(r)&&r>-1&&(h=h.slice(0,r)),ge(h,this._docs,{includeMatches:o,includeScore:c})}},{key:"_searchStringList",value:function(e){var t=re(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(k(n)){var c=t.searchIn(n),a=c.isMatch,s=c.score,u=c.indices;a&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:u}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=function(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n,i=function e(n){var i=Object.keys(n),o=ue(n);if(!o&&i.length>1&&!se(n))return e(le(n));if(he(n)){var c=o?n[ce]:i[0],a=o?n[ae]:n[c];if(!g(a))throw new Error(x(c));var s={keyId:j(c),pattern:a};return r&&(s.searcher=re(a,t)),s}var u={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];v(r)&&r.forEach((function(t){u.children.push(e(t))}))})),u};return se(e)||(e=le(e)),i(e)}(e,this.options),r=function e(n,r,i){if(!n.children){var o=n.keyId,c=n.searcher,a=t._findMatches({key:t._keyStore.get(o),value:t._myIndex.getValueForItemAtKeyId(r,o),searcher:c});return a&&a.length?[{idx:i,item:r,matches:a}]:[]}for(var s=[],u=0,h=n.children.length;u1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?I.getFn:n,i=t.fieldNormWeight,o=void 0===i?I.fieldNormWeight:i,c=e.keys,a=e.records,s=new $({getFn:r,fieldNormWeight:o});return s.setKeys(c),s.setIndexRecords(a),s},ye.config=I,function(){ne.push.apply(ne,arguments)}(te),ye},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t(); \ No newline at end of file diff --git a/site_libs/quarto-search/quarto-search.js b/site_libs/quarto-search/quarto-search.js new file mode 100644 index 000000000..aefb6a58f --- /dev/null +++ b/site_libs/quarto-search/quarto-search.js @@ -0,0 +1,1247 @@ +const kQueryArg = "q"; +const kResultsArg = "show-results"; + +// If items don't provide a URL, then both the navigator and the onSelect +// function aren't called (and therefore, the default implementation is used) +// +// We're using this sentinel URL to signal to those handlers that this +// item is a more item (along with the type) and can be handled appropriately +const kItemTypeMoreHref = "0767FDFD-0422-4E5A-BC8A-3BE11E5BBA05"; + +window.document.addEventListener("DOMContentLoaded", function (_event) { + // Ensure that search is available on this page. If it isn't, + // should return early and not do anything + var searchEl = window.document.getElementById("quarto-search"); + if (!searchEl) return; + + const { autocomplete } = window["@algolia/autocomplete-js"]; + + let quartoSearchOptions = {}; + let language = {}; + const searchOptionEl = window.document.getElementById( + "quarto-search-options" + ); + if (searchOptionEl) { + const jsonStr = searchOptionEl.textContent; + quartoSearchOptions = JSON.parse(jsonStr); + language = quartoSearchOptions.language; + } + + // note the search mode + if (quartoSearchOptions.type === "overlay") { + searchEl.classList.add("type-overlay"); + } else { + searchEl.classList.add("type-textbox"); + } + + // Used to determine highlighting behavior for this page + // A `q` query param is expected when the user follows a search + // to this page + const currentUrl = new URL(window.location); + const query = currentUrl.searchParams.get(kQueryArg); + const showSearchResults = currentUrl.searchParams.get(kResultsArg); + const mainEl = window.document.querySelector("main"); + + // highlight matches on the page + if (query && mainEl) { + // perform any highlighting + highlight(escapeRegExp(query), mainEl); + + // fix up the URL to remove the q query param + const replacementUrl = new URL(window.location); + replacementUrl.searchParams.delete(kQueryArg); + window.history.replaceState({}, "", replacementUrl); + } + + // function to clear highlighting on the page when the search query changes + // (e.g. if the user edits the query or clears it) + let highlighting = true; + const resetHighlighting = (searchTerm) => { + if (mainEl && highlighting && query && searchTerm !== query) { + clearHighlight(query, mainEl); + highlighting = false; + } + }; + + // Clear search highlighting when the user scrolls sufficiently + const resetFn = () => { + resetHighlighting(""); + window.removeEventListener("quarto-hrChanged", resetFn); + window.removeEventListener("quarto-sectionChanged", resetFn); + }; + + // Register this event after the initial scrolling and settling of events + // on the page + window.addEventListener("quarto-hrChanged", resetFn); + window.addEventListener("quarto-sectionChanged", resetFn); + + // Responsively switch to overlay mode if the search is present on the navbar + // Note that switching the sidebar to overlay mode requires more coordinate (not just + // the media query since we generate different HTML for sidebar overlays than we do + // for sidebar input UI) + const detachedMediaQuery = + quartoSearchOptions.type === "overlay" ? "all" : "(max-width: 991px)"; + + // If configured, include the analytics client to send insights + const plugins = configurePlugins(quartoSearchOptions); + + let lastState = null; + const { setIsOpen, setQuery, setCollections } = autocomplete({ + container: searchEl, + detachedMediaQuery: detachedMediaQuery, + defaultActiveItemId: 0, + panelContainer: "#quarto-search-results", + panelPlacement: quartoSearchOptions["panel-placement"], + debug: false, + openOnFocus: true, + plugins, + classNames: { + form: "d-flex", + }, + placeholder: language["search-text-placeholder"], + translations: { + clearButtonTitle: language["search-clear-button-title"], + detachedCancelButtonText: language["search-detached-cancel-button-title"], + submitButtonTitle: language["search-submit-button-title"], + }, + initialState: { + query, + }, + getItemUrl({ item }) { + return item.href; + }, + onStateChange({ state }) { + // If this is a file URL, note that + + // Perhaps reset highlighting + resetHighlighting(state.query); + + // If the panel just opened, ensure the panel is positioned properly + if (state.isOpen) { + if (lastState && !lastState.isOpen) { + setTimeout(() => { + positionPanel(quartoSearchOptions["panel-placement"]); + }, 150); + } + } + + // Perhaps show the copy link + showCopyLink(state.query, quartoSearchOptions); + + lastState = state; + }, + reshape({ sources, state }) { + return sources.map((source) => { + try { + const items = source.getItems(); + + // Validate the items + validateItems(items); + + // group the items by document + const groupedItems = new Map(); + items.forEach((item) => { + const hrefParts = item.href.split("#"); + const baseHref = hrefParts[0]; + const isDocumentItem = hrefParts.length === 1; + + const items = groupedItems.get(baseHref); + if (!items) { + groupedItems.set(baseHref, [item]); + } else { + // If the href for this item matches the document + // exactly, place this item first as it is the item that represents + // the document itself + if (isDocumentItem) { + items.unshift(item); + } else { + items.push(item); + } + groupedItems.set(baseHref, items); + } + }); + + const reshapedItems = []; + let count = 1; + for (const [_key, value] of groupedItems) { + const firstItem = value[0]; + reshapedItems.push({ + ...firstItem, + type: kItemTypeDoc, + }); + + const collapseMatches = quartoSearchOptions["collapse-after"]; + const collapseCount = + typeof collapseMatches === "number" ? collapseMatches : 1; + + if (value.length > 1) { + const target = `search-more-${count}`; + const isExpanded = + state.context.expanded && + state.context.expanded.includes(target); + + const remainingCount = value.length - collapseCount; + + for (let i = 1; i < value.length; i++) { + if (collapseMatches && i === collapseCount) { + reshapedItems.push({ + target, + title: isExpanded + ? language["search-hide-matches-text"] + : remainingCount === 1 + ? `${remainingCount} ${language["search-more-match-text"]}` + : `${remainingCount} ${language["search-more-matches-text"]}`, + type: kItemTypeMore, + href: kItemTypeMoreHref, + }); + } + + if (isExpanded || !collapseMatches || i < collapseCount) { + reshapedItems.push({ + ...value[i], + type: kItemTypeItem, + target, + }); + } + } + } + count += 1; + } + + return { + ...source, + getItems() { + return reshapedItems; + }, + }; + } catch (error) { + // Some form of error occurred + return { + ...source, + getItems() { + return [ + { + title: error.name || "An Error Occurred While Searching", + text: + error.message || + "An unknown error occurred while attempting to perform the requested search.", + type: kItemTypeError, + }, + ]; + }, + }; + } + }); + }, + navigator: { + navigate({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + window.location.assign(itemUrl); + } + }, + navigateNewTab({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + const windowReference = window.open(itemUrl, "_blank", "noopener"); + if (windowReference) { + windowReference.focus(); + } + } + }, + navigateNewWindow({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + window.open(itemUrl, "_blank", "noopener"); + } + }, + }, + getSources({ state, setContext, setActiveItemId, refresh }) { + return [ + { + sourceId: "documents", + getItemUrl({ item }) { + if (item.href) { + return offsetURL(item.href); + } else { + return undefined; + } + }, + onSelect({ + item, + state, + setContext, + setIsOpen, + setActiveItemId, + refresh, + }) { + if (item.type === kItemTypeMore) { + toggleExpanded(item, state, setContext, setActiveItemId, refresh); + + // Toggle more + setIsOpen(true); + } + }, + getItems({ query }) { + if (query === null || query === "") { + return []; + } + + const limit = quartoSearchOptions.limit; + if (quartoSearchOptions.algolia) { + return algoliaSearch(query, limit, quartoSearchOptions.algolia); + } else { + // Fuse search options + const fuseSearchOptions = { + isCaseSensitive: false, + shouldSort: true, + minMatchCharLength: 2, + limit: limit, + }; + + return readSearchData().then(function (fuse) { + return fuseSearch(query, fuse, fuseSearchOptions); + }); + } + }, + templates: { + noResults({ createElement }) { + const hasQuery = lastState.query; + + return createElement( + "div", + { + class: `quarto-search-no-results${ + hasQuery ? "" : " no-query" + }`, + }, + language["search-no-results-text"] + ); + }, + header({ items, createElement }) { + // count the documents + const count = items.filter((item) => { + return item.type === kItemTypeDoc; + }).length; + + if (count > 0) { + return createElement( + "div", + { class: "search-result-header" }, + `${count} ${language["search-matching-documents-text"]}` + ); + } else { + return createElement( + "div", + { class: "search-result-header-no-results" }, + `` + ); + } + }, + footer({ _items, createElement }) { + if ( + quartoSearchOptions.algolia && + quartoSearchOptions.algolia["show-logo"] + ) { + const libDir = quartoSearchOptions.algolia["libDir"]; + const logo = createElement("img", { + src: offsetURL( + `${libDir}/quarto-search/search-by-algolia.svg` + ), + class: "algolia-search-logo", + }); + return createElement( + "a", + { href: "http://www.algolia.com/" }, + logo + ); + } + }, + + item({ item, createElement }) { + return renderItem( + item, + createElement, + state, + setActiveItemId, + setContext, + refresh, + quartoSearchOptions + ); + }, + }, + }, + ]; + }, + }); + + window.quartoOpenSearch = () => { + setIsOpen(false); + setIsOpen(true); + focusSearchInput(); + }; + + document.addEventListener("keyup", (event) => { + const { key } = event; + const kbds = quartoSearchOptions["keyboard-shortcut"]; + const focusedEl = document.activeElement; + + const isFormElFocused = [ + "input", + "select", + "textarea", + "button", + "option", + ].find((tag) => { + return focusedEl.tagName.toLowerCase() === tag; + }); + + if ( + kbds && + kbds.includes(key) && + !isFormElFocused && + !document.activeElement.isContentEditable + ) { + event.preventDefault(); + window.quartoOpenSearch(); + } + }); + + // Remove the labeleledby attribute since it is pointing + // to a non-existent label + if (quartoSearchOptions.type === "overlay") { + const inputEl = window.document.querySelector( + "#quarto-search .aa-Autocomplete" + ); + if (inputEl) { + inputEl.removeAttribute("aria-labelledby"); + } + } + + function throttle(func, wait) { + let waiting = false; + return function () { + if (!waiting) { + func.apply(this, arguments); + waiting = true; + setTimeout(function () { + waiting = false; + }, wait); + } + }; + } + + // If the main document scrolls dismiss the search results + // (otherwise, since they're floating in the document they can scroll with the document) + window.document.body.onscroll = throttle(() => { + // Only do this if we're not detached + // Bug #7117 + // This will happen when the keyboard is shown on ios (resulting in a scroll) + // which then closed the search UI + if (!window.matchMedia(detachedMediaQuery).matches) { + setIsOpen(false); + } + }, 50); + + if (showSearchResults) { + setIsOpen(true); + focusSearchInput(); + } +}); + +function configurePlugins(quartoSearchOptions) { + const autocompletePlugins = []; + const algoliaOptions = quartoSearchOptions.algolia; + if ( + algoliaOptions && + algoliaOptions["analytics-events"] && + algoliaOptions["search-only-api-key"] && + algoliaOptions["application-id"] + ) { + const apiKey = algoliaOptions["search-only-api-key"]; + const appId = algoliaOptions["application-id"]; + + // Aloglia insights may not be loaded because they require cookie consent + // Use deferred loading so events will start being recorded when/if consent + // is granted. + const algoliaInsightsDeferredPlugin = deferredLoadPlugin(() => { + if ( + window.aa && + window["@algolia/autocomplete-plugin-algolia-insights"] + ) { + window.aa("init", { + appId, + apiKey, + useCookie: true, + }); + + const { createAlgoliaInsightsPlugin } = + window["@algolia/autocomplete-plugin-algolia-insights"]; + // Register the insights client + const algoliaInsightsPlugin = createAlgoliaInsightsPlugin({ + insightsClient: window.aa, + onItemsChange({ insights, insightsEvents }) { + const events = insightsEvents.flatMap((event) => { + // This API limits the number of items per event to 20 + const chunkSize = 20; + const itemChunks = []; + const eventItems = event.items; + for (let i = 0; i < eventItems.length; i += chunkSize) { + itemChunks.push(eventItems.slice(i, i + chunkSize)); + } + // Split the items into multiple events that can be sent + const events = itemChunks.map((items) => { + return { + ...event, + items, + }; + }); + return events; + }); + + for (const event of events) { + insights.viewedObjectIDs(event); + } + }, + }); + return algoliaInsightsPlugin; + } + }); + + // Add the plugin + autocompletePlugins.push(algoliaInsightsDeferredPlugin); + return autocompletePlugins; + } +} + +// For plugins that may not load immediately, create a wrapper +// plugin and forward events and plugin data once the plugin +// is initialized. This is useful for cases like cookie consent +// which may prevent the analytics insights event plugin from initializing +// immediately. +function deferredLoadPlugin(createPlugin) { + let plugin = undefined; + let subscribeObj = undefined; + const wrappedPlugin = () => { + if (!plugin && subscribeObj) { + plugin = createPlugin(); + if (plugin && plugin.subscribe) { + plugin.subscribe(subscribeObj); + } + } + return plugin; + }; + + return { + subscribe: (obj) => { + subscribeObj = obj; + }, + onStateChange: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onStateChange) { + plugin.onStateChange(obj); + } + }, + onSubmit: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onSubmit) { + plugin.onSubmit(obj); + } + }, + onReset: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onReset) { + plugin.onReset(obj); + } + }, + getSources: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.getSources) { + return plugin.getSources(obj); + } else { + return Promise.resolve([]); + } + }, + data: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.data) { + plugin.data(obj); + } + }, + }; +} + +function validateItems(items) { + // Validate the first item + if (items.length > 0) { + const item = items[0]; + const missingFields = []; + if (item.href == undefined) { + missingFields.push("href"); + } + if (!item.title == undefined) { + missingFields.push("title"); + } + if (!item.text == undefined) { + missingFields.push("text"); + } + + if (missingFields.length === 1) { + throw { + name: `Error: Search index is missing the ${missingFields[0]} field.`, + message: `The items being returned for this search do not include all the required fields. Please ensure that your index items include the ${missingFields[0]} field or use index-fields in your _quarto.yml file to specify the field names.`, + }; + } else if (missingFields.length > 1) { + const missingFieldList = missingFields + .map((field) => { + return `${field}`; + }) + .join(", "); + + throw { + name: `Error: Search index is missing the following fields: ${missingFieldList}.`, + message: `The items being returned for this search do not include all the required fields. Please ensure that your index items includes the following fields: ${missingFieldList}, or use index-fields in your _quarto.yml file to specify the field names.`, + }; + } + } +} + +let lastQuery = null; +function showCopyLink(query, options) { + const language = options.language; + lastQuery = query; + // Insert share icon + const inputSuffixEl = window.document.body.querySelector( + ".aa-Form .aa-InputWrapperSuffix" + ); + + if (inputSuffixEl) { + let copyButtonEl = window.document.body.querySelector( + ".aa-Form .aa-InputWrapperSuffix .aa-CopyButton" + ); + + if (copyButtonEl === null) { + copyButtonEl = window.document.createElement("button"); + copyButtonEl.setAttribute("class", "aa-CopyButton"); + copyButtonEl.setAttribute("type", "button"); + copyButtonEl.setAttribute("title", language["search-copy-link-title"]); + copyButtonEl.onmousedown = (e) => { + e.preventDefault(); + e.stopPropagation(); + }; + + const linkIcon = "bi-clipboard"; + const checkIcon = "bi-check2"; + + const shareIconEl = window.document.createElement("i"); + shareIconEl.setAttribute("class", `bi ${linkIcon}`); + copyButtonEl.appendChild(shareIconEl); + inputSuffixEl.prepend(copyButtonEl); + + const clipboard = new window.ClipboardJS(".aa-CopyButton", { + text: function (_trigger) { + const copyUrl = new URL(window.location); + copyUrl.searchParams.set(kQueryArg, lastQuery); + copyUrl.searchParams.set(kResultsArg, "1"); + return copyUrl.toString(); + }, + }); + clipboard.on("success", function (e) { + // Focus the input + + // button target + const button = e.trigger; + const icon = button.querySelector("i.bi"); + + // flash "checked" + icon.classList.add(checkIcon); + icon.classList.remove(linkIcon); + setTimeout(function () { + icon.classList.remove(checkIcon); + icon.classList.add(linkIcon); + }, 1000); + }); + } + + // If there is a query, show the link icon + if (copyButtonEl) { + if (lastQuery && options["copy-button"]) { + copyButtonEl.style.display = "flex"; + } else { + copyButtonEl.style.display = "none"; + } + } + } +} + +/* Search Index Handling */ +// create the index +var fuseIndex = undefined; +var shownWarning = false; +async function readSearchData() { + // Initialize the search index on demand + if (fuseIndex === undefined) { + if (window.location.protocol === "file:" && !shownWarning) { + window.alert( + "Search requires JavaScript features disabled when running in file://... URLs. In order to use search, please run this document in a web server." + ); + shownWarning = true; + return; + } + // create fuse index + const options = { + keys: [ + { name: "title", weight: 20 }, + { name: "section", weight: 20 }, + { name: "text", weight: 10 }, + ], + ignoreLocation: true, + threshold: 0.1, + }; + const fuse = new window.Fuse([], options); + + // fetch the main search.json + const response = await fetch(offsetURL("search.json")); + if (response.status == 200) { + return response.json().then(function (searchDocs) { + searchDocs.forEach(function (searchDoc) { + fuse.add(searchDoc); + }); + fuseIndex = fuse; + return fuseIndex; + }); + } else { + return Promise.reject( + new Error( + "Unexpected status from search index request: " + response.status + ) + ); + } + } + + return fuseIndex; +} + +function inputElement() { + return window.document.body.querySelector(".aa-Form .aa-Input"); +} + +function focusSearchInput() { + setTimeout(() => { + const inputEl = inputElement(); + if (inputEl) { + inputEl.focus(); + } + }, 50); +} + +/* Panels */ +const kItemTypeDoc = "document"; +const kItemTypeMore = "document-more"; +const kItemTypeItem = "document-item"; +const kItemTypeError = "error"; + +function renderItem( + item, + createElement, + state, + setActiveItemId, + setContext, + refresh, + quartoSearchOptions +) { + switch (item.type) { + case kItemTypeDoc: + return createDocumentCard( + createElement, + "file-richtext", + item.title, + item.section, + item.text, + item.href, + item.crumbs, + quartoSearchOptions + ); + case kItemTypeMore: + return createMoreCard( + createElement, + item, + state, + setActiveItemId, + setContext, + refresh + ); + case kItemTypeItem: + return createSectionCard( + createElement, + item.section, + item.text, + item.href + ); + case kItemTypeError: + return createErrorCard(createElement, item.title, item.text); + default: + return undefined; + } +} + +function createDocumentCard( + createElement, + icon, + title, + section, + text, + href, + crumbs, + quartoSearchOptions +) { + const iconEl = createElement("i", { + class: `bi bi-${icon} search-result-icon`, + }); + const titleEl = createElement("p", { class: "search-result-title" }, title); + const titleContents = [iconEl, titleEl]; + const showParent = quartoSearchOptions["show-item-context"]; + if (crumbs && showParent) { + let crumbsOut = undefined; + const crumbClz = ["search-result-crumbs"]; + if (showParent === "root") { + crumbsOut = crumbs.length > 1 ? crumbs[0] : undefined; + } else if (showParent === "parent") { + crumbsOut = crumbs.length > 1 ? crumbs[crumbs.length - 2] : undefined; + } else { + crumbsOut = crumbs.length > 1 ? crumbs.join(" > ") : undefined; + crumbClz.push("search-result-crumbs-wrap"); + } + + const crumbEl = createElement( + "p", + { class: crumbClz.join(" ") }, + crumbsOut + ); + titleContents.push(crumbEl); + } + + const titleContainerEl = createElement( + "div", + { class: "search-result-title-container" }, + titleContents + ); + + const textEls = []; + if (section) { + const sectionEl = createElement( + "p", + { class: "search-result-section" }, + section + ); + textEls.push(sectionEl); + } + const descEl = createElement("p", { + class: "search-result-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + textEls.push(descEl); + + const textContainerEl = createElement( + "div", + { class: "search-result-text-container" }, + textEls + ); + + const containerEl = createElement( + "div", + { + class: "search-result-container", + }, + [titleContainerEl, textContainerEl] + ); + + const linkEl = createElement( + "a", + { + href: offsetURL(href), + class: "search-result-link", + }, + containerEl + ); + + const classes = ["search-result-doc", "search-item"]; + if (!section) { + classes.push("document-selectable"); + } + + return createElement( + "div", + { + class: classes.join(" "), + }, + linkEl + ); +} + +function createMoreCard( + createElement, + item, + state, + setActiveItemId, + setContext, + refresh +) { + const moreCardEl = createElement( + "div", + { + class: "search-result-more search-item", + onClick: (e) => { + // Handle expanding the sections by adding the expanded + // section to the list of expanded sections + toggleExpanded(item, state, setContext, setActiveItemId, refresh); + e.stopPropagation(); + }, + }, + item.title + ); + + return moreCardEl; +} + +function toggleExpanded(item, state, setContext, setActiveItemId, refresh) { + const expanded = state.context.expanded || []; + if (expanded.includes(item.target)) { + setContext({ + expanded: expanded.filter((target) => target !== item.target), + }); + } else { + setContext({ expanded: [...expanded, item.target] }); + } + + refresh(); + setActiveItemId(item.__autocomplete_id); +} + +function createSectionCard(createElement, section, text, href) { + const sectionEl = createSection(createElement, section, text, href); + return createElement( + "div", + { + class: "search-result-doc-section search-item", + }, + sectionEl + ); +} + +function createSection(createElement, title, text, href) { + const descEl = createElement("p", { + class: "search-result-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + + const titleEl = createElement("p", { class: "search-result-section" }, title); + const linkEl = createElement( + "a", + { + href: offsetURL(href), + class: "search-result-link", + }, + [titleEl, descEl] + ); + return linkEl; +} + +function createErrorCard(createElement, title, text) { + const descEl = createElement("p", { + class: "search-error-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + + const titleEl = createElement("p", { + class: "search-error-title", + dangerouslySetInnerHTML: { + __html: ` ${title}`, + }, + }); + const errorEl = createElement("div", { class: "search-error" }, [ + titleEl, + descEl, + ]); + return errorEl; +} + +function positionPanel(pos) { + const panelEl = window.document.querySelector( + "#quarto-search-results .aa-Panel" + ); + const inputEl = window.document.querySelector( + "#quarto-search .aa-Autocomplete" + ); + + if (panelEl && inputEl) { + panelEl.style.top = `${Math.round(panelEl.offsetTop)}px`; + if (pos === "start") { + panelEl.style.left = `${Math.round(inputEl.left)}px`; + } else { + panelEl.style.right = `${Math.round(inputEl.offsetRight)}px`; + } + } +} + +/* Highlighting */ +// highlighting functions +function highlightMatch(query, text) { + if (text) { + const start = text.toLowerCase().indexOf(query.toLowerCase()); + if (start !== -1) { + const startMark = ""; + const endMark = ""; + + const end = start + query.length; + text = + text.slice(0, start) + + startMark + + text.slice(start, end) + + endMark + + text.slice(end); + const startInfo = clipStart(text, start); + const endInfo = clipEnd( + text, + startInfo.position + startMark.length + endMark.length + ); + text = + startInfo.prefix + + text.slice(startInfo.position, endInfo.position) + + endInfo.suffix; + + return text; + } else { + return text; + } + } else { + return text; + } +} + +function clipStart(text, pos) { + const clipStart = pos - 50; + if (clipStart < 0) { + // This will just return the start of the string + return { + position: 0, + prefix: "", + }; + } else { + // We're clipping before the start of the string, walk backwards to the first space. + const spacePos = findSpace(text, pos, -1); + return { + position: spacePos.position, + prefix: "", + }; + } +} + +function clipEnd(text, pos) { + const clipEnd = pos + 200; + if (clipEnd > text.length) { + return { + position: text.length, + suffix: "", + }; + } else { + const spacePos = findSpace(text, clipEnd, 1); + return { + position: spacePos.position, + suffix: spacePos.clipped ? "…" : "", + }; + } +} + +function findSpace(text, start, step) { + let stepPos = start; + while (stepPos > -1 && stepPos < text.length) { + const char = text[stepPos]; + if (char === " " || char === "," || char === ":") { + return { + position: step === 1 ? stepPos : stepPos - step, + clipped: stepPos > 1 && stepPos < text.length, + }; + } + stepPos = stepPos + step; + } + + return { + position: stepPos - step, + clipped: false, + }; +} + +// removes highlighting as implemented by the mark tag +function clearHighlight(searchterm, el) { + const childNodes = el.childNodes; + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + if (node.nodeType === Node.ELEMENT_NODE) { + if ( + node.tagName === "MARK" && + node.innerText.toLowerCase() === searchterm.toLowerCase() + ) { + el.replaceChild(document.createTextNode(node.innerText), node); + } else { + clearHighlight(searchterm, node); + } + } + } +} + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string +} + +// highlight matches +function highlight(term, el) { + const termRegex = new RegExp(term, "ig"); + const childNodes = el.childNodes; + + // walk back to front avoid mutating elements in front of us + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + + if (node.nodeType === Node.TEXT_NODE) { + // Search text nodes for text to highlight + const text = node.nodeValue; + + let startIndex = 0; + let matchIndex = text.search(termRegex); + if (matchIndex > -1) { + const markFragment = document.createDocumentFragment(); + while (matchIndex > -1) { + const prefix = text.slice(startIndex, matchIndex); + markFragment.appendChild(document.createTextNode(prefix)); + + const mark = document.createElement("mark"); + mark.appendChild( + document.createTextNode( + text.slice(matchIndex, matchIndex + term.length) + ) + ); + markFragment.appendChild(mark); + + startIndex = matchIndex + term.length; + matchIndex = text.slice(startIndex).search(new RegExp(term, "ig")); + if (matchIndex > -1) { + matchIndex = startIndex + matchIndex; + } + } + if (startIndex < text.length) { + markFragment.appendChild( + document.createTextNode(text.slice(startIndex, text.length)) + ); + } + + el.replaceChild(markFragment, node); + } + } else if (node.nodeType === Node.ELEMENT_NODE) { + // recurse through elements + highlight(term, node); + } + } +} + +/* Link Handling */ +// get the offset from this page for a given site root relative url +function offsetURL(url) { + var offset = getMeta("quarto:offset"); + return offset ? offset + url : url; +} + +// read a meta tag value +function getMeta(metaName) { + var metas = window.document.getElementsByTagName("meta"); + for (let i = 0; i < metas.length; i++) { + if (metas[i].getAttribute("name") === metaName) { + return metas[i].getAttribute("content"); + } + } + return ""; +} + +function algoliaSearch(query, limit, algoliaOptions) { + const { getAlgoliaResults } = window["@algolia/autocomplete-preset-algolia"]; + + const applicationId = algoliaOptions["application-id"]; + const searchOnlyApiKey = algoliaOptions["search-only-api-key"]; + const indexName = algoliaOptions["index-name"]; + const indexFields = algoliaOptions["index-fields"]; + const searchClient = window.algoliasearch(applicationId, searchOnlyApiKey); + const searchParams = algoliaOptions["params"]; + const searchAnalytics = !!algoliaOptions["analytics-events"]; + + return getAlgoliaResults({ + searchClient, + queries: [ + { + indexName: indexName, + query, + params: { + hitsPerPage: limit, + clickAnalytics: searchAnalytics, + ...searchParams, + }, + }, + ], + transformResponse: (response) => { + if (!indexFields) { + return response.hits.map((hit) => { + return hit.map((item) => { + return { + ...item, + text: highlightMatch(query, item.text), + }; + }); + }); + } else { + const remappedHits = response.hits.map((hit) => { + return hit.map((item) => { + const newItem = { ...item }; + ["href", "section", "title", "text", "crumbs"].forEach( + (keyName) => { + const mappedName = indexFields[keyName]; + if ( + mappedName && + item[mappedName] !== undefined && + mappedName !== keyName + ) { + newItem[keyName] = item[mappedName]; + delete newItem[mappedName]; + } + } + ); + newItem.text = highlightMatch(query, newItem.text); + return newItem; + }); + }); + return remappedHits; + } + }, + }); +} + +function fuseSearch(query, fuse, fuseOptions) { + return fuse.search(query, fuseOptions).map((result) => { + const addParam = (url, name, value) => { + const anchorParts = url.split("#"); + const baseUrl = anchorParts[0]; + const sep = baseUrl.search("\\?") > 0 ? "&" : "?"; + anchorParts[0] = baseUrl + sep + name + "=" + value; + return anchorParts.join("#"); + }; + + return { + title: result.item.title, + section: result.item.section, + href: addParam(result.item.href, kQueryArg, query), + text: highlightMatch(query, result.item.text), + crumbs: result.item.crumbs, + }; + }); +} diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 000000000..3d7f4311c --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,339 @@ + + + + https://timeseriesAI.github.io/tsai/models.tstplus.html + 2024-02-11T19:02:28.923Z + + + https://timeseriesAI.github.io/tsai/tutorials.html + 2024-02-11T19:02:28.587Z + + + https://timeseriesAI.github.io/tsai/models.gatedtabtransformer.html + 2024-02-11T19:02:28.551Z + + + https://timeseriesAI.github.io/tsai/models.xcmplus.html + 2024-02-11T19:02:28.471Z + + + https://timeseriesAI.github.io/tsai/models.minirocket_pytorch.html + 2024-02-11T19:02:28.391Z + + + https://timeseriesAI.github.io/tsai/models.rnn.html + 2024-02-11T19:02:28.291Z + + + https://timeseriesAI.github.io/tsai/models.xcm.html + 2024-02-11T19:02:27.815Z + + + https://timeseriesAI.github.io/tsai/models.tsitplus.html + 2024-02-11T19:02:27.643Z + + + https://timeseriesAI.github.io/tsai/data.metadatasets.html + 2024-02-11T19:02:27.543Z + + + https://timeseriesAI.github.io/tsai/models.multiinputnet.html + 2024-02-11T19:02:27.731Z + + + https://timeseriesAI.github.io/tsai/utils.html + 2024-02-11T19:02:28.483Z + + + https://timeseriesAI.github.io/tsai/models.inceptiontimeplus.html + 2024-02-11T19:02:27.183Z + + + https://timeseriesAI.github.io/tsai/data.mixed_augmentation.html + 2024-02-11T19:02:26.995Z + + + https://timeseriesAI.github.io/tsai/data.tabular.html + 2024-02-11T19:02:26.907Z + + + https://timeseriesAI.github.io/tsai/callback.predictiondynamics.html + 2024-02-11T19:02:26.767Z + + + https://timeseriesAI.github.io/tsai/models.rocket_pytorch.html + 2024-02-11T19:02:26.687Z + + + https://timeseriesAI.github.io/tsai/models.hydraplus.html + 2024-02-11T19:02:26.655Z + + + https://timeseriesAI.github.io/tsai/wandb.html + 2024-02-11T19:02:26.599Z + + + https://timeseriesAI.github.io/tsai/models.positional_encoders.html + 2024-02-11T19:02:26.431Z + + + https://timeseriesAI.github.io/tsai/models.minirocket.html + 2024-02-11T19:02:26.355Z + + + https://timeseriesAI.github.io/tsai/models.utils.html + 2024-02-11T19:02:26.419Z + + + https://timeseriesAI.github.io/tsai/optuna.html + 2024-02-11T19:02:26.231Z + + + https://timeseriesAI.github.io/tsai/models.multirocketplus.html + 2024-02-11T19:02:26.203Z + + + https://timeseriesAI.github.io/tsai/models.tabmodel.html + 2024-02-11T19:02:26.071Z + + + https://timeseriesAI.github.io/tsai/models.hydramultirocketplus.html + 2024-02-11T19:02:26.071Z + + + https://timeseriesAI.github.io/tsai/models.tsperceiver.html + 2024-02-11T19:02:25.831Z + + + https://timeseriesAI.github.io/tsai/data.mixed.html + 2024-02-11T19:02:25.651Z + + + https://timeseriesAI.github.io/tsai/data.external.html + 2024-02-11T19:02:26.039Z + + + https://timeseriesAI.github.io/tsai/metrics.html + 2024-02-11T19:02:25.343Z + + + https://timeseriesAI.github.io/tsai/models.xresnet1dplus.html + 2024-02-11T19:02:25.975Z + + + https://timeseriesAI.github.io/tsai/models.rnn_fcn.html + 2024-02-11T19:02:25.299Z + + + https://timeseriesAI.github.io/tsai/models.mlp.html + 2024-02-11T19:02:24.971Z + + + https://timeseriesAI.github.io/tsai/models.tst.html + 2024-02-11T19:02:24.911Z + + + https://timeseriesAI.github.io/tsai/data.validation.html + 2024-02-11T19:02:24.811Z + + + https://timeseriesAI.github.io/tsai/data.features.html + 2024-02-11T19:02:24.355Z + + + https://timeseriesAI.github.io/tsai/models.resnet.html + 2024-02-11T19:02:24.099Z + + + https://timeseriesAI.github.io/tsai/models.mwdn.html + 2024-02-11T19:02:23.839Z + + + https://timeseriesAI.github.io/tsai/models.fcn.html + 2024-02-11T19:02:23.715Z + + + https://timeseriesAI.github.io/tsai/models.gmlp.html + 2024-02-11T19:02:23.643Z + + + https://timeseriesAI.github.io/tsai/models.transformerrnnplus.html + 2024-02-11T19:02:24.459Z + + + https://timeseriesAI.github.io/tsai/models.rnn_fcnplus.html + 2024-02-11T19:02:23.579Z + + + https://timeseriesAI.github.io/tsai/models.explainability.html + 2024-02-11T19:02:23.267Z + + + https://timeseriesAI.github.io/tsai/callback.noisy_student.html + 2024-02-11T19:02:23.851Z + + + https://timeseriesAI.github.io/tsai/data.preparation.html + 2024-02-11T19:02:23.287Z + + + https://timeseriesAI.github.io/tsai/models.tabtransformer.html + 2024-02-11T19:02:23.379Z + + + https://timeseriesAI.github.io/tsai/models.multimodal.html + 2024-02-11T19:02:23.663Z + + + https://timeseriesAI.github.io/tsai/models.inceptiontime.html + 2024-02-11T19:02:23.727Z + + + https://timeseriesAI.github.io/tsai/models.patchtst.html + 2024-02-11T19:02:25.971Z + + + https://timeseriesAI.github.io/tsai/models.rescnn.html + 2024-02-11T19:02:23.891Z + + + https://timeseriesAI.github.io/tsai/models.rnnattention.html + 2024-02-11T19:02:23.987Z + + + https://timeseriesAI.github.io/tsai/models.layers.html + 2024-02-11T19:02:24.939Z + + + https://timeseriesAI.github.io/tsai/models.tabfusiontransformer.html + 2024-02-11T19:02:24.807Z + + + https://timeseriesAI.github.io/tsai/models.omniscalecnn.html + 2024-02-11T19:02:24.927Z + + + https://timeseriesAI.github.io/tsai/callback.core.html + 2024-02-11T19:02:25.103Z + + + https://timeseriesAI.github.io/tsai/models.fcnplus.html + 2024-02-11T19:02:25.051Z + + + https://timeseriesAI.github.io/tsai/models.resnetplus.html + 2024-02-11T19:02:25.215Z + + + https://timeseriesAI.github.io/tsai/callback.experimental.html + 2024-02-11T19:02:25.455Z + + + https://timeseriesAI.github.io/tsai/models.transformermodel.html + 2024-02-11T19:02:25.511Z + + + https://timeseriesAI.github.io/tsai/index.html + 2024-02-11T19:02:25.695Z + + + https://timeseriesAI.github.io/tsai/data.image.html + 2024-02-11T19:02:25.975Z + + + https://timeseriesAI.github.io/tsai/callback.mvp.html + 2024-02-11T19:02:26.183Z + + + https://timeseriesAI.github.io/tsai/models.xceptiontimeplus.html + 2024-02-11T19:02:26.139Z + + + https://timeseriesAI.github.io/tsai/models.misc.html + 2024-02-11T19:02:26.159Z + + + https://timeseriesAI.github.io/tsai/models.tssequencerplus.html + 2024-02-11T19:02:26.419Z + + + https://timeseriesAI.github.io/tsai/inference.html + 2024-02-11T19:02:26.271Z + + + https://timeseriesAI.github.io/tsai/analysis.html + 2024-02-11T19:02:26.611Z + + + https://timeseriesAI.github.io/tsai/calibration.html + 2024-02-11T19:02:26.559Z + + + https://timeseriesAI.github.io/tsai/data.core.html + 2024-02-11T19:02:27.475Z + + + https://timeseriesAI.github.io/tsai/models.xresnet1d.html + 2024-02-11T19:02:27.427Z + + + https://timeseriesAI.github.io/tsai/tslearner.html + 2024-02-11T19:02:26.811Z + + + https://timeseriesAI.github.io/tsai/models.rocket.html + 2024-02-11T19:02:26.847Z + + + https://timeseriesAI.github.io/tsai/models.xceptiontime.html + 2024-02-11T19:02:26.927Z + + + https://timeseriesAI.github.io/tsai/models.tcn.html + 2024-02-11T19:02:26.999Z + + + https://timeseriesAI.github.io/tsai/data.unwindowed.html + 2024-02-11T19:02:27.075Z + + + https://timeseriesAI.github.io/tsai/optimizer.html + 2024-02-11T19:02:27.255Z + + + https://timeseriesAI.github.io/tsai/losses.html + 2024-02-11T19:02:27.523Z + + + https://timeseriesAI.github.io/tsai/data.preprocessing.html + 2024-02-11T19:02:28.607Z + + + https://timeseriesAI.github.io/tsai/learner.html + 2024-02-11T19:02:28.019Z + + + https://timeseriesAI.github.io/tsai/export.html + 2024-02-11T19:02:28.155Z + + + https://timeseriesAI.github.io/tsai/models.rnnplus.html + 2024-02-11T19:02:28.283Z + + + https://timeseriesAI.github.io/tsai/models.convtranplus.html + 2024-02-11T19:02:28.491Z + + + https://timeseriesAI.github.io/tsai/models.minirocketplus_pytorch.html + 2024-02-11T19:02:28.635Z + + + https://timeseriesAI.github.io/tsai/data.transforms.html + 2024-02-11T19:02:28.879Z + + + https://timeseriesAI.github.io/tsai/models.rnnattentionplus.html + 2024-02-11T19:02:28.943Z + + diff --git a/styles.css b/styles.css new file mode 100644 index 000000000..34daa64a4 --- /dev/null +++ b/styles.css @@ -0,0 +1,21 @@ +div.description { + font-style: italic; +} + +.cell-output pre { + margin-left: 0.8rem; + margin-top: 0; + background: none; + border-left: 2px solid lightsalmon; + border-top-left-radius: 0; + border-top-right-radius: 0; + } + + .cell-output .sourceCode { + background: none; + margin-top: 0; + } + + .cell > .sourceCode { + margin-bottom: 0; + } diff --git a/tslearner.html b/tslearner.html new file mode 100644 index 000000000..22dc3735e --- /dev/null +++ b/tslearner.html @@ -0,0 +1,1792 @@ + + + + + + + + + +tsai - TSLearner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + +
    + + + +
    + +
    +
    +

    TSLearner

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    New set of time series learners with a new sklearn-like API that simplifies the learner creation. The following classes are included:

    +
      +
    • TSClassifier
    • +
    • TSRegressor
    • +
    • TSForecaster
    • +
    +
    +

    TSClassifier API

    +
    +

    Commonly used arguments:

    +
      +
    • X: array-like of shape (n_samples, n_steps) or (n_samples, n_features, n_steps) with the input time series samples. Internally, they will be converted to torch tensors.
    • +
    • y: array-like of shape (n_samples), (n_samples, n_outputs) or (n_samples, n_features, n_outputs) with the target. Internally, they will be converted to torch tensors. Default=None. None is used for unlabeled datasets.
    • +
    • splits: lists of indices used to split data between train and validation. Default=None. If no splits are passed, data will be split 100:0 between train and test without shuffling.
    • +
    • tfms: item transforms that will be applied to each sample individually. Default:None.
    • +
    • batch_tfms: transforms applied to each batch. Default=None.
    • +
    • pipelines: store sklearn-type pipelines that can then be applied to pandas dataframes with transform or inverse_transform methods. Default=None.
    • +
    • bs: batch size (if batch_size is provided then batch_size will override bs). An int or a list of ints can be passed. Default=[64, 128]. If a list of ints, the first one will be used for training, and the second for the valid (batch size can be larger as it doesn’t require backpropagation which consumes more memory).
    • +
    • arch: indicates which architecture will be used. Alternatively, you can pass an instantiated model. Default: InceptionTimePlus.
    • +
    • arch_config: keyword arguments passed to the selected architecture. Default={}.
    • +
    • pretrained: indicates if pretrained model weights will be used. Default=False.
    • +
    • weights_path: indicates the path to the pretrained weights in case they are used.
    • +
    • loss_func: allows you to pass any loss function. Default=None (in which case CrossEntropyLossFlat() is applied).
    • +
    • opt_func: allows you to pass an optimizer. Default=Adam.
    • +
    • lr: learning rate. Default=0.001.
    • +
    • metrics: list of metrics passed to the Learner. Default=accuracy.
    • +
    • cbs: list of callbacks passed to the Learner. Default=None.
    • +
    • wd: is the default weight decay used when training the model. Default=None.
    • +
    +

    Less frequently used arguments:

    +
      +
    • sel_vars: used to select which of the features in multivariate datasets are used. Default=None means all features are used. If necessary a list-like of indices can be used (eg.[0,3,5]).
    • +
    • sel_steps: used to select the steps used. Default=None means all steps are used. If necessary a list-like of indices can be used (eg. slice(-50, None) will select the last 50 steps from each time series).
    • +
    • s_cat_idxs: list of indices for static categorical variables
    • +
    • s_cat_embeddings: list of num_embeddings for each static categorical variable
    • +
    • s_cat_embedding_dims: list of embedding dimensions for each static categorical variable
    • +
    • s_cont_idxs: list of indices for static continuous variables
    • +
    • o_cat_idxs: list of indices for observed categorical variables
    • +
    • o_cat_embeddings: list of num_embeddings for each observed categorical variable
    • +
    • o_cat_embedding_dims: list of embedding dimensions for each observed categorical variable
    • +
    • o_cont_idxs: list of indices for observed continuous variables
    • +
    • patch_len: Number of time steps in each patch.
    • +
    • patch_stride: Stride of the patch.
    • +
    • fusion_layers: list of layer dimensions for the fusion MLP
    • +
    • fusion_act: activation function for the fusion MLP
    • +
    • fusion_dropout: dropout probability for the fusion MLP
    • +
    • fusion_use_bn: boolean indicating whether to use batch normalization in the fusion MLP
    • +
    • weights: indicates a sample weight per instance. Used to pass pass a probability to the train dataloader sampler. Samples with more weight will be selected more often during training.
    • +
    • partial_n: select randomly partial quantity of data at each epoch. Used to reduce the training size (for example for testing purposes). int or float can be used.
    • +
    • vocab: vocabulary used to transform the target. Only required when transformed is not perform by a dataloader’s tfm (external transforms).
    • +
    • train_metrics: flag used to display metrics in the training set. Defaults to False.
    • +
    • valid_metrics: flag used to display metrics in the validtion set. Defaults to True.
    • +
    • inplace: indicates whether tfms are applied during instantiation or on-the-fly. Default=True, which means that tfms will be applied during instantiation. This results in a faster training, but it can only be used when data fits in memory. Otherwise set it to False.
    • +
    • shuffle_train: indicates whether to shuffle the training set every time the dataloader is fully read/iterated or not. This doesn’t have an impact on the validation set which is never shuffled. Default=True.
    • +
    • drop_last: if True the last incomplete training batch is dropped (thus ensuring training batches of equal size). This doesn’t have an impact on the validation set where samples are never dropped. Default=True.
    • +
    • num_workers: num_workers (int): how many subprocesses to use for data loading. 0 means that the data will be loaded in the main process. Default=0.
    • +
    • do_setup: ndicates if the Pipeline.setup method should be called during initialization. Default=True.
    • +
    • device: Defaults to default_device() which is CUDA by default. You can specify device as `torch.device(‘cpu’).
    • +
    • seed: Set to an int to ensure reprodubibility. Default=None.
    • +
    • verbose: controls the verbosity when fitting and predicting.
    • +
    • exclude_head: indicates whether the head of the pretrained model needs to be removed or not. Default=True.
    • +
    • cut: indicates the position where the pretrained model head needs to be cut. Defaults=-1.
    • +
    • init: allows you to set to None (no initialization applied), set to True (in which case nn.init.kaiming_normal_ will be applied) or pass an initialization. Default=None.
    • +
    • splitter: To do transfer learning, you need to pass a splitter to Learner. This should be a function taking the model and returning a collection of parameter groups, e.g. a list of list of parameters. Default=trainable_params. If the model has a backbone and a head, it will then be split in those 2 groups.
    • +
    • path and model_dir: are used to save and/or load models. Often path will be inferred from dls, but you can override it or pass a Path object to model_dir.
    • +
    • wd_bn_bias: controls if weight decay is applied to BatchNorm layers and bias. Default=False. train_bn=True
    • +
    • moms: the default momentums used in Learner.fit_one_cycle. Default=(0.95, 0.85, 0.95).
    • +
    +
    +

    source

    +
    +

    TSClassifier

    +
    +
     TSClassifier (X, y=None, splits=None, tfms=None, inplace=True,
    +               sel_vars=None, sel_steps=None, s_cat_idxs=None,
    +               s_cat_embeddings=None, s_cat_embedding_dims=None,
    +               s_cont_idxs=None, o_cat_idxs=None, o_cat_embeddings=None,
    +               o_cat_embedding_dims=None, o_cont_idxs=None,
    +               patch_len=None, patch_stride=None, fusion_layers=128,
    +               fusion_act='relu', fusion_dropout=0.0, fusion_use_bn=True,
    +               weights=None, partial_n=None, vocab=None,
    +               train_metrics=False, valid_metrics=True, bs=[64, 128],
    +               batch_size=None, batch_tfms=None, pipelines=None,
    +               shuffle_train=True, drop_last=True, num_workers=0,
    +               do_setup=True, device=None, seed=None, arch=None,
    +               arch_config={}, pretrained=False, weights_path=None,
    +               exclude_head=True, cut=-1, init=None, loss_func=None,
    +               opt_func=<function Adam>, lr=0.001, metrics=<function
    +               accuracy>, cbs=None, wd=None, wd_bn_bias=False,
    +               train_bn=True, moms=(0.95, 0.85, 0.95), path='.',
    +               model_dir='models', splitter=<function trainable_params>,
    +               verbose=False)
    +
    +

    Group together a model, some dls and a loss_func to handle training

    +
    +
    from tsai.data.external import *
    +from tsai.data.preprocessing import *
    +from tsai.models.InceptionTimePlus import *
    +
    +
    +
    # With validation split
    +X, y, splits = get_classification_data('OliveOil', split_data=False)
    +tfms = [None, TSClassification()]
    +batch_tfms = [TSStandardize(by_sample=True)]
    +learn = TSClassifier(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, metrics=accuracy, arch=InceptionTimePlus, arch_config=dict(fc_dropout=.5),
    +                     train_metrics=True)
    +learn.fit_one_cycle(1)
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    epochtrain_losstrain_accuracyvalid_lossvalid_accuracytime
    01.4462550.2666671.4033590.30000000:00
    +
    +
    +
    +
    # Without validation split
    +X, y, splits = get_classification_data('OliveOil', split_data=False)
    +splits = (splits[0], None)
    +tfms = [None, TSClassification()]
    +batch_tfms = [TSStandardize(by_sample=True)]
    +learn = TSClassifier(X, y, splits=splits, tfms=tfms, batch_tfms=batch_tfms, metrics=accuracy, arch=InceptionTimePlus, arch_config=dict(fc_dropout=.5),
    +                     train_metrics=True)
    +learn.fit_one_cycle(1)
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + +
    epochtrain_lossaccuracytime
    01.2860230.40000000:00
    +
    +
    +
    +
    num_classes = 5
    +X = torch.rand(8, 2, 50)
    +y = torch.randint(0, num_classes, (len(X), 3, 50))
    +splits = TimeSplitter(show_plot=False)(y)
    +vocab = np.arange(num_classes)
    +
    +fail_test = []
    +for arch in all_arch_names:
    +    if not "plus" in arch.lower(): continue
    +    try:
    +        learn = TSClassifier(X, y, splits=splits, arch=arch, metrics=accuracy, vocab=vocab, device=default_device())
    +        with ContextManagers([learn.no_bar(), learn.no_logging()]):
    +            learn.fit_one_cycle(1, 1e-3)
    +        del learn
    +        gc.collect()
    +    except Exception as e:
    +        fail_test.append(arch)
    +        print(arch, e)
    +
    +test_eq(fail_test, [])
    +
    +
    +
    +
    +

    TSRegressor API

    +
    +

    Commonly used arguments:

    +
      +
    • X: array-like of shape (n_samples, n_steps) or (n_samples, n_features, n_steps) with the input time series samples. Internally, they will be converted to torch tensors.
    • +
    • y: array-like of shape (n_samples), (n_samples, n_outputs) or (n_samples, n_features, n_outputs) with the target. Internally, they will be converted to torch tensors. Default=None. None is used for unlabeled datasets.
    • +
    • splits: lists of indices used to split data between train and validation. Default=None. If no splits are passed, data will be split 100:0 between train and test without shuffling.
    • +
    • tfms: item transforms that will be applied to each sample individually. Default=None.
    • +
    • batch_tfms: transforms applied to each batch. Default=None.
    • +
    • pipelines: store sklearn-type pipelines that can then be applied to pandas dataframes with transform or inverse_transform methods. Default=None.
    • +
    • bs: batch size (if batch_size is provided then batch_size will override bs). An int or a list of ints can be passed. Default=[64, 128]. If a list of ints, the first one will be used for training, and the second for the valid (batch size can be larger as it doesn’t require backpropagation which consumes more memory).
    • +
    • arch: indicates which architecture will be used. Alternatively, you can pass an instantiated model. Default: InceptionTimePlus.
    • +
    • arch_config: keyword arguments passed to the selected architecture. Default={}.
    • +
    • pretrained: indicates if pretrained model weights will be used. Default=False.
    • +
    • weights_path: indicates the path to the pretrained weights in case they are used.
    • +
    • loss_func: allows you to pass any loss function. Default=None (in which case CrossEntropyLossFlat() is applied).
    • +
    • opt_func: allows you to pass an optimizer. Default=Adam.
    • +
    • lr: learning rate. Default=0.001.
    • +
    • metrics: list of metrics passed to the Learner. Default=None.
    • +
    • cbs: list of callbacks passed to the Learner. Default=None.
    • +
    • wd: is the default weight decay used when training the model. Default=None.
    • +
    +

    Less frequently used arguments:

    +
      +
    • sel_vars: used to select which of the features in multivariate datasets are used. Default=None means all features are used. If necessary a list-like of indices can be used (eg.[0,3,5]).
    • +
    • sel_steps: used to select the steps used. Default=None means all steps are used. If necessary a list-like of indices can be used (eg. slice(-50, None) will select the last 50 steps from each time series).
    • +
    • s_cat_idxs: list of indices for static categorical variables
    • +
    • s_cat_embeddings: list of num_embeddings for each static categorical variable
    • +
    • s_cat_embedding_dims: list of embedding dimensions for each static categorical variable
    • +
    • s_cont_idxs: list of indices for static continuous variables
    • +
    • o_cat_idxs: list of indices for observed categorical variables
    • +
    • o_cat_embeddings: list of num_embeddings for each observed categorical variable
    • +
    • o_cat_embedding_dims: list of embedding dimensions for each observed categorical variable
    • +
    • o_cont_idxs: list of indices for observed continuous variables
    • +
    • patch_len: Number of time steps in each patch.
    • +
    • patch_stride: Stride of the patch.
    • +
    • fusion_layers: list of layer dimensions for the fusion MLP
    • +
    • fusion_act: activation function for the fusion MLP
    • +
    • fusion_dropout: dropout probability for the fusion MLP
    • +
    • fusion_use_bn: boolean indicating whether to use batch normalization in the fusion MLP
    • +
    • weights: indicates a sample weight per instance. Used to pass pass a probability to the train dataloader sampler. Samples with more weight will be selected more often during training.
    • +
    • partial_n: select randomly partial quantity of data at each epoch. Used to reduce the training size (for example for testing purposes). int or float can be used.
    • +
    • train_metrics: flag used to display metrics in the training set. Defaults to False.
    • +
    • valid_metrics: flag used to display metrics in the validtion set. Defaults to True.
    • +
    • inplace: indicates whether tfms are applied during instantiation or on-the-fly. Default=True, which means that tfms will be applied during instantiation. This results in a faster training, but it can only be used when data fits in memory. Otherwise set it to False.
    • +
    • shuffle_train: indicates whether to shuffle the training set every time the dataloader is fully read/iterated or not. This doesn’t have an impact on the validation set which is never shuffled. Default=True.
    • +
    • drop_last: if True the last incomplete training batch is dropped (thus ensuring training batches of equal size). This doesn’t have an impact on the validation set where samples are never dropped. Default=True.
    • +
    • num_workers: num_workers (int): how many subprocesses to use for data loading. 0 means that the data will be loaded in the main process. Default=0.
    • +
    • do_setup: ndicates if the Pipeline.setup method should be called during initialization. Default=True.
    • +
    • device: Defaults to default_device() which is CUDA by default. You can specify device as `torch.device(‘cpu’).
    • +
    • seed: Set to an int to ensure reprodubibility. Default=None.
    • +
    • verbose: controls the verbosity when fitting and predicting.
    • +
    • exclude_head: indicates whether the head of the pretrained model needs to be removed or not. Default=True.
    • +
    • cut: indicates the position where the pretrained model head needs to be cut. Defaults=-1.
    • +
    • init: allows you to set to None (no initialization applied), set to True (in which case nn.init.kaiming_normal_ will be applied) or pass an initialization. Default=None.
    • +
    • splitter: To do transfer learning, you need to pass a splitter to Learner. This should be a function taking the model and returning a collection of parameter groups, e.g. a list of list of parameters. Default=trainable_params. If the model has a backbone and a head, it will then be split in those 2 groups.
    • +
    • path and model_dir: are used to save and/or load models. Often path will be inferred from dls, but you can override it or pass a Path object to model_dir.
    • +
    • wd_bn_bias: controls if weight decay is applied to BatchNorm layers and bias. Default=False. train_bn=True
    • +
    • moms: the default momentums used in Learner.fit_one_cycle. Default=(0.95, 0.85, 0.95).
    • +
    +
    +

    source

    +
    +

    TSRegressor

    +
    +
     TSRegressor (X, y=None, splits=None, tfms=None, inplace=True,
    +              sel_vars=None, sel_steps=None, s_cat_idxs=None,
    +              s_cat_embeddings=None, s_cat_embedding_dims=None,
    +              s_cont_idxs=None, o_cat_idxs=None, o_cat_embeddings=None,
    +              o_cat_embedding_dims=None, o_cont_idxs=None, patch_len=None,
    +              patch_stride=None, fusion_layers=128, fusion_act='relu',
    +              fusion_dropout=0.0, fusion_use_bn=True, weights=None,
    +              partial_n=None, train_metrics=False, valid_metrics=True,
    +              bs=[64, 128], batch_size=None, batch_tfms=None,
    +              pipelines=None, shuffle_train=True, drop_last=True,
    +              num_workers=0, do_setup=True, device=None, seed=None,
    +              arch=None, arch_config={}, pretrained=False,
    +              weights_path=None, exclude_head=True, cut=-1, init=None,
    +              loss_func=None, opt_func=<function Adam>, lr=0.001,
    +              metrics=None, cbs=None, wd=None, wd_bn_bias=False,
    +              train_bn=True, moms=(0.95, 0.85, 0.95), path='.',
    +              model_dir='models', splitter=<function trainable_params>,
    +              verbose=False)
    +
    +

    Group together a model, some dls and a loss_func to handle training

    +
    +
    X, y, splits = get_regression_data('AppliancesEnergy', split_data=False)
    +if X is not None: # This is to prevent a test fail when the data server is not available
    +    X = X.astype('float32')
    +    y = y.astype('float32')
    +    batch_tfms = [TSStandardize()]
    +    learn = TSRegressor(X, y, splits=splits, batch_tfms=batch_tfms, arch=None, metrics=mae, bs=512, train_metrics=True, device=default_device())
    +    learn.fit_one_cycle(1, 1e-4)
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    epochtrain_losstrain_maevalid_lossvalid_maetime
    0221.23957814.241582208.78723114.03432800:00
    +
    +
    +
    +
    +
    +

    TSForecaster API

    +
    +

    Commonly used arguments:

    +
      +
    • X: array-like of shape (n_samples, n_steps) or (n_samples, n_features, n_steps) with the input time series samples. Internally, they will be converted to torch tensors.
    • +
    • y: array-like of shape (n_samples), (n_samples, n_outputs) or (n_samples, n_features, n_outputs) with the target. Internally, they will be converted to torch tensors. Default=None. None is used for unlabeled datasets.
    • +
    • splits: lists of indices used to split data between train and validation. Default=None. If no splits are passed, data will be split 100:0 between train and test without shuffling.
    • +
    • tfms: item transforms that will be applied to each sample individually. Default=None.
    • +
    • batch_tfms: transforms applied to each batch. Default=None.
    • +
    • pipelines: store sklearn-type pipelines that can then be applied to pandas dataframes with transform or inverse_transform methods. Default=None.
    • +
    • bs: batch size (if batch_size is provided then batch_size will override bs). An int or a list of ints can be passed. Default=[64, 128]. If a list of ints, the first one will be used for training, and the second for the valid (batch size can be larger as it doesn’t require backpropagation which consumes more memory).
    • +
    • arch: indicates which architecture will be used. Alternatively, you can pass an instantiated model. Default: InceptionTimePlus.
    • +
    • arch_config: keyword arguments passed to the selected architecture. Default={}.
    • +
    • pretrained: indicates if pretrained model weights will be used. Default=False.
    • +
    • weights_path: indicates the path to the pretrained weights in case they are used.
    • +
    • loss_func: allows you to pass any loss function. Default=None (in which case CrossEntropyLossFlat() is applied).
    • +
    • opt_func: allows you to pass an optimizer. Default=Adam.
    • +
    • lr: learning rate. Default=0.001.
    • +
    • metrics: list of metrics passed to the Learner. Default=None.
    • +
    • cbs: list of callbacks passed to the Learner. Default=None.
    • +
    • wd: is the default weight decay used when training the model. Default=None.
    • +
    +

    Less frequently used arguments:

    +
      +
    • sel_vars: used to select which of the features in multivariate datasets are used. Default=None means all features are used. If necessary a list-like of indices can be used (eg.[0,3,5]).
    • +
    • sel_steps: used to select the steps used. Default=None means all steps are used. If necessary a list-like of indices can be used (eg. slice(-50, None) will select the last 50 steps from each time series).
    • +
    • s_cat_idxs: list of indices for static categorical variables
    • +
    • s_cat_embeddings: list of num_embeddings for each static categorical variable
    • +
    • s_cat_embedding_dims: list of embedding dimensions for each static categorical variable
    • +
    • s_cont_idxs: list of indices for static continuous variables
    • +
    • o_cat_idxs: list of indices for observed categorical variables
    • +
    • o_cat_embeddings: list of num_embeddings for each observed categorical variable
    • +
    • o_cat_embedding_dims: list of embedding dimensions for each observed categorical variable
    • +
    • o_cont_idxs: list of indices for observed continuous variables
    • +
    • patch_len: Number of time steps in each patch.
    • +
    • patch_stride: Stride of the patch.
    • +
    • fusion_layers: list of layer dimensions for the fusion MLP
    • +
    • fusion_act: activation function for the fusion MLP
    • +
    • fusion_dropout: dropout probability for the fusion MLP
    • +
    • fusion_use_bn: boolean indicating whether to use batch normalization in the fusion MLP
    • +
    • weights: indicates a sample weight per instance. Used to pass pass a probability to the train dataloader sampler. Samples with more weight will be selected more often during training.
    • +
    • partial_n: select randomly partial quantity of data at each epoch. Used to reduce the training size (for example for testing purposes). int or float can be used.
    • +
    • train_metrics: flag used to display metrics in the training set. Defaults to False.
    • +
    • valid_metrics: flag used to display metrics in the validtion set. Defaults to True.
    • +
    • inplace: indicates whether tfms are applied during instantiation or on-the-fly. Default=True, which means that tfms will be applied during instantiation. This results in a faster training, but it can only be used when data fits in memory. Otherwise set it to False.
    • +
    • shuffle_train: indicates whether to shuffle the training set every time the dataloader is fully read/iterated or not. This doesn’t have an impact on the validation set which is never shuffled. Default=True.
    • +
    • drop_last: if True the last incomplete training batch is dropped (thus ensuring training batches of equal size). This doesn’t have an impact on the validation set where samples are never dropped. Default=True.
    • +
    • num_workers: num_workers (int): how many subprocesses to use for data loading. 0 means that the data will be loaded in the main process. Default=None.
    • +
    • do_setup: ndicates if the Pipeline.setup method should be called during initialization. Default=True.
    • +
    • device: Defaults to default_device() which is CUDA by default. You can specify device as `torch.device(‘cpu’).
    • +
    • seed: Set to an int to ensure reprodubibility. Default=None.
    • +
    • verbose: controls the verbosity when fitting and predicting.
    • +
    • exclude_head: indicates whether the head of the pretrained model needs to be removed or not. Default=True.
    • +
    • cut: indicates the position where the pretrained model head needs to be cut. Defaults=-1.
    • +
    • init: allows you to set to None (no initialization applied), set to True (in which case nn.init.kaiming_normal_ will be applied) or pass an initialization. Default=None.
    • +
    • splitter: To do transfer learning, you need to pass a splitter to Learner. This should be a function taking the model and returning a collection of parameter groups, e.g. a list of list of parameters. Default=trainable_params. If the model has a backbone and a head, it will then be split in those 2 groups.
    • +
    • path and model_dir: are used to save and/or load models. Often path will be inferred from dls, but you can override it or pass a Path object to model_dir.
    • +
    • wd_bn_bias: controls if weight decay is applied to BatchNorm layers and bias. Default=False. train_bn=True
    • +
    • moms: the default momentums used in Learner.fit_one_cycle. Default=(0.95, 0.85, 0.95).
    • +
    +
    +

    source

    +
    +

    TSForecaster

    +
    +
     TSForecaster (X, y=None, splits=None, tfms=None, inplace=True,
    +               sel_vars=None, sel_steps=None, s_cat_idxs=None,
    +               s_cat_embeddings=None, s_cat_embedding_dims=None,
    +               s_cont_idxs=None, o_cat_idxs=None, o_cat_embeddings=None,
    +               o_cat_embedding_dims=None, o_cont_idxs=None,
    +               patch_len=None, patch_stride=None, fusion_layers=128,
    +               fusion_act='relu', fusion_dropout=0.0, fusion_use_bn=True,
    +               weights=None, partial_n=None, train_metrics=False,
    +               valid_metrics=True, bs=[64, 128], batch_size=None,
    +               batch_tfms=None, pipelines=None, shuffle_train=True,
    +               drop_last=True, num_workers=0, do_setup=True, device=None,
    +               seed=None, arch=None, arch_config={}, pretrained=False,
    +               weights_path=None, exclude_head=True, cut=-1, init=None,
    +               loss_func=None, opt_func=<function Adam>, lr=0.001,
    +               metrics=None, cbs=None, wd=None, wd_bn_bias=False,
    +               train_bn=True, moms=(0.95, 0.85, 0.95), path='.',
    +               model_dir='models', splitter=<function trainable_params>,
    +               verbose=False)
    +
    +

    Group together a model, some dls and a loss_func to handle training

    +
    +
    from tsai.data.preparation import *
    +
    +
    +
    ts = get_forecasting_time_series('Sunspots')
    +if ts is not None: # This is to prevent a test fail when the data server is not available
    +    X, y = SlidingWindowSplitter(60, horizon=1)(ts)
    +    X, y = X.astype('float32'), y.astype('float32')
    +    splits = TSSplitter(235)(y)
    +    batch_tfms = [TSStandardize(by_var=True)]
    +    learn = TSForecaster(X, y, splits=splits, batch_tfms=batch_tfms, arch=None, arch_config=dict(fc_dropout=.5), metrics=mae, bs=512,
    +                         partial_n=.1, train_metrics=True, device=default_device())
    +    learn.fit_one_cycle(1)
    +
    +
    Dataset: Sunspots
    +downloading data...
    +...done. Path = data/forecasting/Sunspots.csv
    +
    +
    +
    +
    +

    +
    +
    +
    +
    + + +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    epochtrain_losstrain_maevalid_lossvalid_maetime
    04616.22509853.3405237969.31787174.67025800:00
    +
    +
    +
    +
    X=torch.rand(8,2,50)
    +y=torch.rand(8,1)
    +splits = TimeSplitter(show_plot=False)(y)
    +
    +fail_test = []
    +for arch in all_arch_names:
    +    if not "plus" in arch.lower(): continue
    +    try:
    +        fcst = TSForecaster(X, y, splits=splits, arch=arch, metrics=mse, device=default_device())
    +        with ContextManagers([fcst.no_bar(), fcst.no_logging()]):
    +            fcst.fit_one_cycle(1, 1e-3)
    +    except Exception as e:
    +        fail_test.append(arch)
    +        print(arch, e)
    +
    +test_eq(fail_test, [])
    +
    + + +
    +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/tutorials.html b/tutorials.html new file mode 100644 index 000000000..2243d5bac --- /dev/null +++ b/tutorials.html @@ -0,0 +1,1278 @@ + + + + + + + + + +tsai - Tutorial notebooks + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Tutorial notebooks

    +
    + + + +
    + + + + +
    + + + +
    + + + +

    A number of tutorials have been created to help you get started to use tsai with time series data. Please, feel free to open the notebooks (you can open them in Colab if you want) and tweak them to do your own experiments.

    +
    +

    Time series classification (using raw data)

    +

    I’d recommend you to start with:

    + +
    +

    Data preparation:

    +

    If you need help preparing your data you may find the following tutorials useful:

    + +

    These last 2 provide more details in case you need them. They explain how datasets and dataloaders are created.

    +
    +
    +

    Types of architectures:

    +

    Once you feel comfortable, you can start exploring different types of architectures:

    +
      +
    • You can use the Time Series data preparation notebook and replace the InceptionTime architecture by any other of your choice: +
        +
      • MLPs
      • +
      • RNNs (LSTM, GRU)
      • +
      • CNNs (FCN, ResNet, XResNet)
      • +
      • Wavelet-based architectures
      • +
      • Transformers (like TST - 2020)
      • +
      • They all (except ROCKET) work in the same way, for univariate or multivariate time series.
      • +
    • +
    • How to use Transformers with Time Series? may also help you understand how to successfully apply this new type of architecture to time series.
    • +
    • You can also use Time Series Classification Benchmark to perform bechmarks with different architectures and/ or configurations.
    • +
    +

    ROCKET (2019) is a new technique used to generate 10-20k features from time series. These features are used in a different classifier. This is the only implementation I’m aware of that uses GPU and allows both univariate and multivariate time series. To explain this method that works very well in many cases you can use the following notebook:

    + +

    There are many types of classifiers as you can see, and it’s very difficult to know in advance which one will perform well in our task. However, the ones that have consistently deliver the best results in recent benchmark studies are Inceptiontime (Fawaz, 2019) and ROCKET (Dempster, 2019). Transformers, like TST (Zerveas, 2020), also show a lot of promise, but the application to time series data is so new that they have not been benchmarked against other architectures. But I’d say these are 3 architectures you should know well.

    +
    +
    +
    +

    Time series classification (using time series images)

    +

    In these tutorials, I’ve also included a section on how to transform time series into images. This will allow you to then use DL vision models like ResNet50 for example. This approach works very well in some cases, even if you have limited data. You can learn about this technique in this notebook:

    + +
    +
    +

    Time series regression

    +

    I’ve also included an example of how you can perform time series regression with your time series using tsai. In this case, the label will be continuous, instead of a category. But as you will see, the use is almost identical to time series classification. You can learn more about this here:

    + +
    +
    +

    Visualization

    +

    I’ve also created PredictionDynamics callback that allows you to visualize the model’s predictions while it’s training. It can provide you some additional insights that may be useful to improve your model. Here’s the notebook:

    + +

    I hope you will find these tutorial useful. I’m planning to add more tutorials to demonstrate new techniques, models, etc when they become available. So stay tuned!

    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/utils.html b/utils.html new file mode 100644 index 000000000..1004be99a --- /dev/null +++ b/utils.html @@ -0,0 +1,4894 @@ + + + + + + + + + +tsai - Utilities + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Utilities

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    General helper functions used throughout the library

    +
    +
    +

    source

    +
    +

    random_rand

    +
    +
     random_rand (*d, dtype=None, out=None, seed=None)
    +
    +

    Same as np.random.rand but with a faster random generator, dtype and seed

    +
    +

    source

    +
    +
    +

    random_randint

    +
    +
     random_randint (low, high=None, size=None, dtype=<class 'int'>,
    +                 endpoint=False, seed=None)
    +
    +

    Same as np.random.randint but with a faster random generator and seed

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    lowint, lower endpoint of interval (inclusive)
    highNoneTypeNoneint, upper endpoint of interval (exclusive), or None for a single-argument form of low.
    sizeNoneTypeNoneint or tuple of ints, optional. Output shape.
    dtypetypeintdata type of the output.
    endpointboolFalsebool, optional. If True, high is an inclusive endpoint. If False, the range is open on the right.
    seedNoneTypeNoneint or None, optional. Seed for the random number generator.
    +
    +

    source

    +
    +
    +

    random_choice

    +
    +
     random_choice (a, size=None, replace=True, p=None, axis=0, shuffle=True,
    +                dtype=None, seed=None)
    +
    +

    Same as np.random.choice but with a faster random generator, dtype and seed

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    a1-D array-like or int. The values from which to draw the samples.
    sizeNoneTypeNoneint or tuple of ints, optional. The shape of the output.
    replaceboolTruebool, optional. Whether or not to allow the same value to be drawn multiple times.
    pNoneTypeNone1-D array-like, optional. The probabilities associated with each entry in a.
    axisint0int, optional. The axis along which the samples are drawn.
    shuffleboolTruebool, optional. Whether or not to shuffle the samples before returning them.
    dtypeNoneTypeNonedata type of the output.
    seedNoneTypeNoneint or None, optional. Seed for the random number generator.
    +
    +
    a = random_choice(10, size=(2,3,4), replace=True, p=None, seed=1)
    +b = random_choice(10, size=(2,3,4), replace=True, p=None, seed=1)
    +test_eq(a, b)
    +c = random_choice(10, size=(2,3,4), replace=True, p=None, seed=2)
    +test_ne(a, c)
    +
    +assert random_choice(10, size=3, replace=True, p=None).shape == (3,)
    +assert random_choice(10, size=(2,3,4), replace=True, p=None).shape == (2,3,4)
    +
    +print(random_choice(10, size=3, replace=True, p=None))
    +print(random_choice(10, size=3, replace=False, p=None))
    +a = [2, 5, 4, 9, 13, 25, 56, 83, 99, 100]
    +print(random_choice(a, size=3, replace=False, p=None))
    +
    +
    [5 7 5]
    +[0 1 6]
    +[  4  83 100]
    +
    +
    +
    +
    a = random_randint(10, 20, 100, seed=1)
    +b = random_randint(10, 20, 100, seed=1)
    +test_eq(a, b)
    +c = random_randint(10, 20, 100, seed=2)
    +test_ne(a, c)
    +assert (a >= 10).all() and (a < 20).all()
    +
    +
    +
    a = random_rand(2, 3, 4, seed=123)
    +b = random_rand(2, 3, 4, seed=123)
    +test_eq(a, b)
    +c = random_rand(2, 3, 4, seed=124)
    +test_ne(a, c)
    +assert (a >= 0).all() and (a < 1).all()
    +
    +a = random_rand(2, 3, 4)
    +a_copy = a.copy()
    +random_rand(2, 3, 4, out=a)
    +test_ne(a, a_copy)
    +
    +
    +

    source

    +
    +
    +

    is_slice

    +
    +
     is_slice (o)
    +
    +
    +

    source

    +
    +
    +

    is_memmap

    +
    +
     is_memmap (o)
    +
    +
    +

    source

    +
    +
    +

    is_dask

    +
    +
     is_dask (o)
    +
    +
    +

    source

    +
    +
    +

    is_zarr

    +
    +
     is_zarr (o)
    +
    +
    +

    source

    +
    +
    +

    is_tensor

    +
    +
     is_tensor (o)
    +
    +
    +

    source

    +
    +
    +

    is_nparray

    +
    +
     is_nparray (o)
    +
    +
    +
    # ensure these folders exist for testing purposes
    +fns = ['data', 'export', 'models']
    +for fn in fns:
    +    path = Path('.')/fn
    +    if not os.path.exists(path): os.makedirs(path)
    +
    +
    +

    source

    +
    +
    +

    todtype

    +
    +
     todtype (dtype)
    +
    +
    +

    source

    +
    +
    +

    to3dPlusArray

    +
    +
     to3dPlusArray (o)
    +
    +
    +

    source

    +
    +
    +

    to3dPlusTensor

    +
    +
     to3dPlusTensor (o)
    +
    +
    +

    source

    +
    +
    +

    to2dPlusArray

    +
    +
     to2dPlusArray (o)
    +
    +
    +

    source

    +
    +
    +

    to2dPlusTensor

    +
    +
     to2dPlusTensor (o)
    +
    +
    +

    source

    +
    +
    +

    to3dPlus

    +
    +
     to3dPlus (o)
    +
    +
    +

    source

    +
    +
    +

    to2dPlus

    +
    +
     to2dPlus (o)
    +
    +
    +

    source

    +
    +
    +

    to1d

    +
    +
     to1d (o)
    +
    +
    +

    source

    +
    +
    +

    to2d

    +
    +
     to2d (o)
    +
    +
    +

    source

    +
    +
    +

    to3d

    +
    +
     to3d (o)
    +
    +
    +

    source

    +
    +
    +

    to1darray

    +
    +
     to1darray (o)
    +
    +
    +

    source

    +
    +
    +

    to2darray

    +
    +
     to2darray (o)
    +
    +
    +

    source

    +
    +
    +

    to3darray

    +
    +
     to3darray (o)
    +
    +
    +

    source

    +
    +
    +

    to1dtensor

    +
    +
     to1dtensor (o)
    +
    +
    +

    source

    +
    +
    +

    to2dtensor

    +
    +
     to2dtensor (o)
    +
    +
    +

    source

    +
    +
    +

    to3dtensor

    +
    +
     to3dtensor (o)
    +
    +
    +

    source

    +
    +
    +

    toL

    +
    +
     toL (o)
    +
    +
    +

    source

    +
    +
    +

    toarray

    +
    +
     toarray (o)
    +
    +
    +

    source

    +
    +
    +

    totensor

    +
    +
     totensor (o)
    +
    +
    +
    a = np.random.rand(100).astype(np.float32)
    +b = torch.from_numpy(a).float()
    +test_eq(totensor(a), b)
    +test_eq(a, toarray(b))
    +test_eq(to3dtensor(a).ndim, 3)
    +test_eq(to2dtensor(a).ndim, 2)
    +test_eq(to1dtensor(a).ndim, 1)
    +test_eq(to3darray(b).ndim, 3)
    +test_eq(to2darray(b).ndim, 2)
    +test_eq(to1darray(b).ndim, 1)
    +
    +
    +
    data = np.random.rand(10, 20)
    +df = pd.DataFrame(data)
    +df['target'] = np.random.randint(0, 3, len(df))
    +X = df[df.columns[:-1]]
    +y = df['target']
    +test_eq(to3darray(X).shape, (10, 1, 20))
    +test_eq(toarray(y).shape, (10,))
    +
    +
    +

    source

    +
    +
    +

    get_file_size

    +
    +
     get_file_size (file_path:str, return_str:bool=True, decimals:int=2)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    file_pathstrpath to file
    return_strboolTrueTrue returns size in human-readable format (KB, MB, GB, …). False in bytes.
    decimalsint2Number of decimals in the output
    +
    +

    source

    +
    +
    +

    get_dir_size

    +
    +
     get_dir_size (dir_path:str, return_str:bool=True, decimals:int=2,
    +               verbose:bool=False)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    dir_pathstrpath to directory
    return_strboolTrueTrue returns size in human-readable format (KB, MB, GB, …). False in bytes.
    decimalsint2Number of decimals in the output
    verboseboolFalseControls verbosity
    +
    +

    source

    +
    +
    +

    get_size

    +
    +
     get_size (o, return_str=False, decimals=2)
    +
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    oAny python object
    return_strboolFalseTrue returns size in human-readable format (KB, MB, GB, …). False in bytes.
    decimalsint2Number of decimals in the output
    +
    +

    source

    +
    +
    +

    bytes2str

    +
    +
     bytes2str (size_bytes:int, decimals=2)
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    size_bytesintNumber of bytes
    decimalsint2Number of decimals in the output
    Returnsstr
    +
    +
    a = np.random.rand(10, 5, 3)
    +test_eq(get_size(a, True, 1), '1.2 KB')
    +
    +
    +

    source

    +
    +
    +

    is_np_view

    +
    +
     is_np_view (o)
    +
    + + + + + + + + + + + + + +
    Details
    oa numpy array
    +
    +
    a = np.array([1., 2., 3.])
    +test_eq(is_np_view(a), False)
    +test_eq(is_np_view(a[1:]), True)
    +
    +
    +

    source

    +
    +
    +

    is_dir

    +
    +
     is_dir (path)
    +
    +
    +

    source

    +
    +
    +

    is_file

    +
    +
     is_file (path)
    +
    +
    +
    test_eq(is_file("002_utils.ipynb"), True)
    +test_eq(is_file("utils.ipynb"), False)
    +
    +
    +

    source

    +
    +
    +

    delete_all_in_dir

    +
    +
     delete_all_in_dir (tgt_dir, exception=None)
    +
    +
    +

    source

    +
    +
    +

    reverse_dict

    +
    +
     reverse_dict (dictionary)
    +
    +
    +

    source

    +
    +
    +

    is_tuple

    +
    +
     is_tuple (o)
    +
    +
    +

    source

    +
    +
    +

    itemify

    +
    +
     itemify (*o, tup_id=None)
    +
    +
    +
    a = [1, 2, 3]
    +b = [4, 5, 6]
    +print(itemify(a, b))
    +test_eq(len(itemify(a, b)), len(a))
    +a = [1, 2, 3]
    +b = None
    +print(itemify(a, b))
    +test_eq(len(itemify(a, b)), len(a))
    +a = [1, 2, 3]
    +b = [4, 5, 6]
    +c = None
    +print(itemify(a, b, c))
    +test_eq(len(itemify(a, b, c)), len(a))
    +
    +
    [(1, 4), (2, 5), (3, 6)]
    +[(1,), (2,), (3,)]
    +[(1, 4), (2, 5), (3, 6)]
    +
    +
    +
    +

    source

    +
    +
    +

    ifelse

    +
    +
     ifelse (a, b, c)
    +
    +

    b if a is True else c

    +
    +

    source

    +
    +
    +

    exists

    +
    +
     exists (o)
    +
    +
    +

    source

    +
    +
    +

    isnone

    +
    +
     isnone (o)
    +
    +
    +
    a = np.array(3)
    +test_eq(isnone(a), False)
    +test_eq(exists(a), True)
    +b = None
    +test_eq(isnone(b), True)
    +test_eq(exists(b), False)
    +
    +
    +

    source

    +
    +
    +

    test_eq_nan

    +
    +
     test_eq_nan (a, b)
    +
    +

    test that a==b excluding nan values (valid for torch.Tensor and np.ndarray)

    +
    +

    source

    +
    +
    +

    test_error

    +
    +
     test_error (error, f, *args, **kwargs)
    +
    +
    +

    source

    +
    +
    +

    test_not_ok

    +
    +
     test_not_ok (f, *args, **kwargs)
    +
    +
    +

    source

    +
    +
    +

    test_ok

    +
    +
     test_ok (f, *args, **kwargs)
    +
    +
    +

    source

    +
    +
    +

    test_type

    +
    +
     test_type (a, b)
    +
    +
    +

    source

    +
    +
    +

    test_not_close

    +
    +
     test_not_close (a, b, eps=1e-05)
    +
    +

    test that a is within eps of b

    +
    +

    source

    +
    +
    +

    is_not_close

    +
    +
     is_not_close (a, b, eps=1e-05)
    +
    +

    Is a within eps of b

    +
    +

    source

    +
    +
    +

    assert_fn

    +
    +
     assert_fn (*args, **kwargs)
    +
    +
    +

    source

    +
    +
    +

    test_le

    +
    +
     test_le (a, b)
    +
    +

    test that a>b

    +
    +

    source

    +
    +
    +

    test_lt

    +
    +
     test_lt (a, b)
    +
    +

    test that a>b

    +
    +

    source

    +
    +
    +

    test_ge

    +
    +
     test_ge (a, b)
    +
    +

    test that a>=b

    +
    +

    source

    +
    +
    +

    test_gt

    +
    +
     test_gt (a, b)
    +
    +

    test that a>b

    +
    +
    test_ok(test_gt, 5, 4)
    +test_not_ok(test_gt, 4, 4)
    +test_ok(test_ge, 4, 4)
    +test_not_ok(test_ge, 3, 4)
    +
    +test_ok(test_lt, 3, 4)
    +test_not_ok(test_lt, 4, 4)
    +test_ok(test_le, 4, 4)
    +test_not_ok(test_le, 5, 4)
    +
    +
    +
    t = torch.rand(100)
    +test_eq(t, t)
    +test_eq_nan(t, t)
    +
    +
    +

    source

    +
    +
    +

    stack_pad

    +
    +
     stack_pad (o, padding_value=nan)
    +
    +

    Converts a an iterable into a numpy array using padding if necessary

    +
    +

    source

    +
    +
    +

    stack

    +
    +
     stack (o, axis=0, retain=True)
    +
    +
    +
    o = [[0,1,2], [4,5,6,7]]
    +test_eq(stack_pad(o).shape, (1, 2, 4))
    +test_eq(type(stack_pad(o)), np.ndarray)
    +test_eq(np.isnan(stack_pad(o)).sum(), 1)
    +
    +
    +
    o = 3
    +print(stack_pad(o))
    +test_eq(stack_pad(o), np.array([[3.]]))
    +o = [4,5]
    +print(stack_pad(o))
    +test_eq(stack_pad(o), np.array([[4., 5.]]))
    +o = [[0,1,2], [4,5,6,7]]
    +print(stack_pad(o))
    +o = np.array([0, [1,2]], dtype=object)
    +print(stack_pad(o))
    +o = np.array([[[0], [10, 20], [100, 200, 300]], [[0, 1, 2, 3], [10, 20], [100]]], dtype=object)
    +print(stack_pad(o))
    +o = np.array([0, [10, 20]], dtype=object)
    +print(stack_pad(o))
    +
    +
    [[3.]]
    +[[4. 5.]]
    +[[[ 0.  1.  2. nan]
    +  [ 4.  5.  6.  7.]]]
    +[[ 0. nan]
    + [ 1.  2.]]
    +[[[  0.  nan  nan  nan]
    +  [ 10.  20.  nan  nan]
    +  [100. 200. 300.  nan]]
    +
    + [[  0.   1.   2.   3.]
    +  [ 10.  20.  nan  nan]
    +  [100.  nan  nan  nan]]]
    +[[ 0. nan]
    + [10. 20.]]
    +
    +
    +
    +
    a = np.random.rand(2, 3, 4)
    +t = torch.from_numpy(a)
    +test_eq_type(stack(itemify(a, tup_id=0)), a)
    +test_eq_type(stack(itemify(t, tup_id=0)), t)
    +
    +
    +

    source

    +
    +
    +

    pad_sequences

    +
    +
     pad_sequences (o, maxlen:int=None,
    +                dtype:(<class'str'>,<class'type'>)=<class
    +                'numpy.float64'>, padding:str='pre', truncating:str='pre',
    +                padding_value:float=nan)
    +
    +

    Transforms an iterable with sequences into a 3d numpy array using padding or truncating sequences if necessary

    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    oIterable object
    maxlenintNoneOptional max length of the output. If None, max length of the longest individual sequence.
    dtype(<class ‘str’>, <class ‘type’>)float64Type of the output sequences. To pad sequences with variable length strings, you can use object.
    paddingstrpre‘pre’ or ‘post’ pad either before or after each sequence.
    truncatingstrpre‘pre’ or ‘post’ remove values from sequences larger than maxlen, either at the beginning or at the end of the sequences.
    padding_valuefloatnanValue used for padding.
    +

    This function transforms a list (of length n_samples) of sequences into a 3d numpy array of shape:

    +
                              [n_samples x n_vars x seq_len]
    +

    seq_len is either the maxlen argument if provided, or the length of the longest sequence in the list.

    +

    Sequences that are shorter than seq_len are padded with value until they are seq_len long.

    +

    Sequences longer than seq_len are truncated so that they fit the desired length.

    +

    The position where padding or truncation happens is determined by the arguments padding and truncating, respectively. Pre-padding or removing values from the beginning of the sequence is the default.

    +

    Input sequences to pad_sequences may be have 1, 2 or 3 dimensions:

    +
    +
    # 1 dim
    +a1 = np.arange(6)
    +a2 = np.arange(3) * 10
    +a3 = np.arange(2) * 100
    +o  = [a1, a2, a3]
    +padded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)
    +test_eq(padded_o.shape, (3, 1, 4))
    +padded_o
    +
    +
    array([[[  2.,   3.,   4.,   5.]],
    +
    +       [[  0.,  10.,  20.,  nan]],
    +
    +       [[  0., 100.,  nan,  nan]]])
    +
    +
    +
    +
    # 2 dim
    +a1 = np.arange(12).reshape(2, 6)
    +a2 = np.arange(6).reshape(2, 3) * 10
    +a3 = np.arange(4).reshape(2, 2) * 100
    +o  = [a1, a2, a3]
    +padded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)
    +test_eq(padded_o.shape, (3, 2, 4))
    +padded_o
    +
    +
    array([[[  2.,   3.,   4.,   5.],
    +        [  8.,   9.,  10.,  11.]],
    +
    +       [[  0.,  10.,  20.,  nan],
    +        [ 30.,  40.,  50.,  nan]],
    +
    +       [[  0., 100.,  nan,  nan],
    +        [200., 300.,  nan,  nan]]])
    +
    +
    +
    +
    # 3 dim
    +a1 = np.arange(10).reshape(1, 2, 5)
    +a2 = np.arange(6).reshape(1, 2, 3) * 10
    +a3 = np.arange(4).reshape(1, 2, 2) * 100
    +o  = [a1, a2, a3]
    +padded_o = pad_sequences(o, maxlen=None, dtype=np.float64, padding='pre', truncating='pre', padding_value=np.nan)
    +test_eq(padded_o.shape, (3, 2, 5))
    +padded_o
    +
    +
    array([[[  0.,   1.,   2.,   3.,   4.],
    +        [  5.,   6.,   7.,   8.,   9.]],
    +
    +       [[ nan,  nan,   0.,  10.,  20.],
    +        [ nan,  nan,  30.,  40.,  50.]],
    +
    +       [[ nan,  nan,  nan,   0., 100.],
    +        [ nan,  nan,  nan, 200., 300.]]])
    +
    +
    +
    +
    # 3 dim
    +a1 = np.arange(10).reshape(1, 2, 5)
    +a2 = np.arange(6).reshape(1, 2, 3) * 10
    +a3 = np.arange(4).reshape(1, 2, 2) * 100
    +o  = [a1, a2, a3]
    +padded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='pre', truncating='pre', padding_value=np.nan)
    +test_eq(padded_o.shape, (3, 2, 4))
    +padded_o
    +
    +
    array([[[  1.,   2.,   3.,   4.],
    +        [  6.,   7.,   8.,   9.]],
    +
    +       [[ nan,   0.,  10.,  20.],
    +        [ nan,  30.,  40.,  50.]],
    +
    +       [[ nan,  nan,   0., 100.],
    +        [ nan,  nan, 200., 300.]]])
    +
    +
    +
    +
    # 3 dim
    +a1 = np.arange(10).reshape(1, 2, 5)
    +a2 = np.arange(6).reshape(1, 2, 3) * 10
    +a3 = np.arange(4).reshape(1, 2, 2) * 100
    +o  = [a1, a2, a3]
    +padded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)
    +test_eq(padded_o.shape, (3, 2, 4))
    +padded_o
    +
    +
    array([[[  1.,   2.,   3.,   4.],
    +        [  6.,   7.,   8.,   9.]],
    +
    +       [[  0.,  10.,  20.,  nan],
    +        [ 30.,  40.,  50.,  nan]],
    +
    +       [[  0., 100.,  nan,  nan],
    +        [200., 300.,  nan,  nan]]])
    +
    +
    +
    +
    # 3 dim
    +a1 = np.arange(10).reshape(1, 2, 5)
    +a2 = np.arange(6).reshape(1, 2, 3) * 10
    +a3 = np.arange(4).reshape(1, 2, 2) * 100
    +o  = [a1, a2, a3]
    +padded_o = pad_sequences(o, maxlen=4, dtype=np.float64, padding='post', truncating='post', padding_value=np.nan)
    +test_eq(padded_o.shape, (3, 2, 4))
    +padded_o
    +
    +
    array([[[  0.,   1.,   2.,   3.],
    +        [  5.,   6.,   7.,   8.]],
    +
    +       [[  0.,  10.,  20.,  nan],
    +        [ 30.,  40.,  50.,  nan]],
    +
    +       [[  0., 100.,  nan,  nan],
    +        [200., 300.,  nan,  nan]]])
    +
    +
    +
    +
    # iterable is a list of lists
    +a1 = np.arange(12).reshape(1, 2, 6).tolist()
    +a2 = (np.arange(6).reshape(1, 2, 3) * 10).tolist()
    +a3 = (np.arange(4).reshape(1, 2, 2) * 100).tolist()
    +o  = [a1, a2, a3]
    +padded_o = pad_sequences(o, maxlen=None, dtype=np.float64, padding='post', truncating='pre', padding_value=np.nan)
    +test_eq(padded_o.shape, (3, 2, 6))
    +padded_o
    +
    +
    array([[[  0.,   1.,   2.,   3.,   4.,   5.],
    +        [  6.,   7.,   8.,   9.,  10.,  11.]],
    +
    +       [[  0.,  10.,  20.,  nan,  nan,  nan],
    +        [ 30.,  40.,  50.,  nan,  nan,  nan]],
    +
    +       [[  0., 100.,  nan,  nan,  nan,  nan],
    +        [200., 300.,  nan,  nan,  nan,  nan]]])
    +
    +
    +
    +

    source

    +
    +
    +

    match_seq_len

    +
    +
     match_seq_len (*arrays)
    +
    +
    +
    a = np.random.rand(10, 5, 8)
    +b = np.random.rand(3, 5, 10)
    +c, d = match_seq_len(a, b)
    +test_eq(c.shape[-1], d.shape[-1])
    +
    +
    +

    source

    +
    +
    +

    random_shuffle

    +
    +
     random_shuffle (o, random_state=None)
    +
    +
    +
    a = np.arange(10)
    +test_eq_type(random_shuffle(a, 1), np.array([2, 9, 6, 4, 0, 3, 1, 7, 8, 5]))
    +t = torch.arange(10)
    +test_eq_type(random_shuffle(t, 1), tensor([2, 9, 6, 4, 0, 3, 1, 7, 8, 5]))
    +l = list(a)
    +test_eq(random_shuffle(l, 1), [2, 9, 6, 4, 0, 3, 1, 7, 8, 5])
    +l2 = L(l)
    +test_eq_type(random_shuffle(l2, 1), L([2, 9, 6, 4, 0, 3, 1, 7, 8, 5]))
    +
    +
    +

    source

    +
    +
    +

    cat2int

    +
    +
     cat2int (o)
    +
    +
    +
    a = np.array(['b', 'a', 'a', 'b', 'a', 'b', 'a'])
    +test_eq_type(cat2int(a), TensorCategory([1, 0, 0, 1, 0, 1, 0]))
    +
    +
    +
    TensorBase([1,2,3])
    +
    +
    TensorBase([1, 2, 3])
    +
    +
    +
    +

    source

    +
    +
    +

    cycle_dl_estimate

    +
    +
     cycle_dl_estimate (dl, iters=10)
    +
    +
    +

    source

    +
    +
    +

    cycle_dl_to_device

    +
    +
     cycle_dl_to_device (dl, show_progress_bar=True)
    +
    +
    +

    source

    +
    +
    +

    cycle_dl

    +
    +
     cycle_dl (dl, show_progress_bar=True)
    +
    +
    +

    source

    +
    +
    +

    cache_data

    +
    +
     cache_data (o, slice_len=10000, verbose=False)
    +
    +
    +

    source

    +
    +
    +

    get_func_defaults

    +
    +
     get_func_defaults (f)
    +
    +
    +

    source

    +
    +
    +

    get_idx_from_df_col_vals

    +
    +
     get_idx_from_df_col_vals (df, col, val_list)
    +
    +
    +

    source

    +
    +
    +

    get_sublist_idxs

    +
    +
     get_sublist_idxs (aList, bList)
    +
    +

    Get idxs that when applied to aList will return bList. aList must contain all values in bList

    +
    +
    x = np.array([3, 5, 7, 1, 9, 8, 6, 2])
    +y = np.array([6, 1, 5, 7])
    +idx = get_sublist_idxs(x, y)
    +test_eq(x[idx], y)
    +x = np.array([3, 5, 7, 1, 9, 8, 6, 6, 2])
    +y = np.array([6, 1, 5, 7, 5])
    +idx = get_sublist_idxs(x, y)
    +test_eq(x[idx], y)
    +
    +
    +

    source

    +
    +
    +

    flatten_list

    +
    +
     flatten_list (l)
    +
    +
    +

    source

    +
    +
    +

    display_pd_df

    +
    +
     display_pd_df (df, max_rows:Union[bool,int]=False,
    +                max_columns:Union[bool,int]=False)
    +
    +
    +
    old_max_rows, old_max_columns = pd.get_option('display.max_rows'), pd.get_option('display.max_columns')
    +df = pd.DataFrame(np.random.rand(70, 25))
    +display_pd_df(df, max_rows=2, max_columns=3)
    +test_eq(old_max_rows, pd.get_option('display.max_rows'))
    +test_eq(old_max_columns, pd.get_option('display.max_columns'))
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    0...24
    00.436034...0.231616
    ............
    690.633051...0.051762
    + +

    70 rows × 25 columns

    +
    +
    +
    +
    +

    source

    +
    +
    +

    tscore

    +
    +
     tscore (o)
    +
    +
    +

    source

    +
    +
    +

    kstest

    +
    +
     kstest (data1, data2, alternative='two-sided', mode='auto', by_axis=None)
    +
    +

    Performs the two-sample Kolmogorov-Smirnov test for goodness of fit.

    +

    Parameters data1, data2: Two arrays of sample observations assumed to be drawn from a continuous distributions. Sample sizes can be different. alternative: {‘two-sided’, ‘less’, ‘greater’}, optional. Defines the null and alternative hypotheses. Default is ‘two-sided’. mode: {‘auto’, ‘exact’, ‘asymp’}, optional. Defines the method used for calculating the p-value. by_axis (optional, int): for arrays with more than 1 dimension, the test will be run for each variable in that axis if by_axis is not None.

    +
    +

    source

    +
    +
    +

    ttest

    +
    +
     ttest (data1, data2, equal_var=False)
    +
    +

    Calculates t-statistic and p-value based on 2 sample distributions

    +
    +
    a = np.random.normal(0.5, 1, 100)
    +b = np.random.normal(0.15, .5, 50)
    +plt.hist(a, 50)
    +plt.hist(b, 50)
    +plt.show()
    +ttest(a,b)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    a = np.random.normal(0.5, 1, (100,3))
    +b = np.random.normal(0.5, 1, (50,))
    +kstest(a,b)
    +
    +
    (0.22333333333333333, 0.02452803315700394)
    +
    +
    +
    +
    a = np.random.normal(0.5, 1, (100,3))
    +b = np.random.normal(0.15, .5, (50,))
    +kstest(a,b)
    +
    +
    (0.31, 0.0004061333917852463)
    +
    +
    +
    +
    data1 = np.random.normal(0,1,(100, 5, 3))
    +data2 = np.random.normal(0,2,(100, 5, 3))
    +kstest(data1, data2, by_axis=1)
    +
    +
    ([0.22,
    +  0.16333333333333333,
    +  0.16333333333333333,
    +  0.18666666666666668,
    +  0.21666666666666667],
    + [8.994053173844458e-07,
    +  0.0006538374533623971,
    +  0.0006538374533623971,
    +  5.522790313356146e-05,
    +  1.4007759411179028e-06])
    +
    +
    +
    +
    a = np.random.normal(0.5, 1, 100)
    +t = torch.normal(0.5, 1, (100, ))
    +tscore(a), tscore(t)
    +
    +
    (4.33309224863388, tensor(5.7798))
    +
    +
    +
    +

    source

    +
    +
    +

    scc

    +
    +
     scc (a, b)
    +
    +
    +

    source

    +
    +
    +

    pcc

    +
    +
     pcc (a, b)
    +
    +
    +

    source

    +
    +
    +

    remove_fn

    +
    +
     remove_fn (fn, verbose=False)
    +
    +

    Removes a file (fn) if exists

    +
    +

    source

    +
    +
    +

    npsave

    +
    +
     npsave (array_fn, array, verbose=True)
    +
    +
    +
    fn = 'data/remove_fn_test.npy'
    +a = np.zeros(1)
    +npsave(fn, a)
    +del a
    +np.load(fn, mmap_mode='r+')
    +remove_fn(fn, True)
    +remove_fn(fn, True)
    +
    +
    data/remove_fn_test.npy does not exist
    +saving data/remove_fn_test.npy...
    +...data/remove_fn_test.npy saved
    +data/remove_fn_test.npy file removed
    +data/remove_fn_test.npy does not exist
    +
    +
    +
    +

    source

    +
    +
    +

    permute_2D

    +
    +
     permute_2D (array, axis=None)
    +
    +

    Permute rows or columns in an array. This can be used, for example, in feature permutation

    +
    +
    s = np.arange(100 * 50).reshape(100, 50)
    +test_eq(permute_2D(s, axis=0).mean(0), s.mean(0))
    +test_ne(permute_2D(s, axis=0), s)
    +test_eq(permute_2D(s, axis=1).mean(1), s.mean(1))
    +test_ne(permute_2D(s, axis=1), s)
    +test_ne(permute_2D(s), s)
    +
    +
    +

    source

    +
    +
    +

    random_half_normal_tensor

    +
    +
     random_half_normal_tensor (shape=1, device=None)
    +
    +

    Returns a tensor of a predefined shape between 0 and 1 with a half-normal distribution

    +
    +

    source

    +
    +
    +

    random_normal_tensor

    +
    +
     random_normal_tensor (shape=1, device=None)
    +
    +

    Returns a tensor of a predefined shape between -1 and 1 with a normal distribution

    +
    +

    source

    +
    +
    +

    random_half_normal

    +
    +
     random_half_normal ()
    +
    +

    Returns a number between 0 and 1 with a half-normal distribution

    +
    +

    source

    +
    +
    +

    random_normal

    +
    +
     random_normal ()
    +
    +

    Returns a number between -1 and 1 with a normal distribution

    +
    +

    source

    +
    +
    +

    fig2buf

    +
    +
     fig2buf (fig)
    +
    +
    +

    source

    +
    +
    +

    get_plot_fig

    +
    +
     get_plot_fig (size=None, dpi=100)
    +
    +
    +

    source

    +
    +
    +

    default_dpi

    +
    +
     default_dpi ()
    +
    +
    +
    default_dpi()
    +
    +
    100
    +
    +
    +
    +

    source

    +
    +
    +

    plot_scatter

    +
    +
     plot_scatter (x, y, deg=1)
    +
    +
    +
    a = np.random.rand(100)
    +b = np.random.rand(100)**2
    +plot_scatter(a, b)
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    get_idxs

    +
    +
     get_idxs (o, aList)
    +
    +
    +
    a = random_shuffle(np.arange(100, 200))
    +b = np.random.choice(a, 10, False)
    +idxs = get_idxs(a, b)
    +test_eq(a[idxs], b)
    +
    +
    +

    source

    +
    +
    +

    apply_cmap

    +
    +
     apply_cmap (o, cmap)
    +
    +
    +
    a = np.random.rand(16, 1, 40, 50)
    +s = L(a.shape)
    +s[1] = 3
    +test_eq(L(apply_cmap(a, 'viridis').shape), s)
    +
    +s[0] = 1
    +a = np.random.rand(1, 40, 50)
    +test_eq(L(apply_cmap(a, 'viridis').shape), s)
    +
    +
    +

    source

    +
    +
    +

    torch_tile

    +
    +
     torch_tile (a, n_tile, dim=0)
    +
    +
    +
    test_eq(torch_tile(torch.arange(2), 3), tensor([0, 1, 0, 1, 0, 1]))
    +
    +
    +

    source

    +
    +
    +

    to_tsfresh_df

    +
    +
     to_tsfresh_df (ts)
    +
    +

    Prepares a time series (Tensor/ np.ndarray) to be used as a tsfresh dataset to allow feature extraction

    +
    +
    ts = torch.rand(16, 3, 20)
    +a = to_tsfresh_df(ts)
    +ts = ts.numpy()
    +b = to_tsfresh_df(ts)
    +
    +
    +

    source

    +
    +
    +

    scorr

    +
    +
     scorr (a, b)
    +
    +
    +

    source

    +
    +
    +

    pcorr

    +
    +
     pcorr (a, b)
    +
    +
    +

    source

    +
    +
    +

    torch_diff

    +
    +
     torch_diff (t, lag=1, pad=True, append=0)
    +
    +
    +
    t = torch.arange(24).reshape(2,3,4)
    +test_eq(torch_diff(t, 1)[..., 1:].float().mean(), 1.)
    +test_eq(torch_diff(t, 2)[..., 2:].float().mean(), 2.)
    +
    +
    +

    source

    +
    +
    +

    torch_clamp

    +
    +
     torch_clamp (o, min=None, max=None)
    +
    +

    Clamp torch.Tensor using 1 or multiple dimensions

    +
    +

    source

    +
    +
    +

    get_percentile

    +
    +
     get_percentile (o, percentile, axis=None)
    +
    +
    +

    source

    +
    +
    +

    clip_outliers

    +
    +
     clip_outliers (o, axis=None)
    +
    +
    +

    source

    +
    +
    +

    get_outliers_IQR

    +
    +
     get_outliers_IQR (o, axis=None, quantile_range=(25.0, 75.0))
    +
    +
    +
    t = torch.randn(2,3,100)
    +test_eq(type(get_outliers_IQR(t, -1)[0]), torch.Tensor)
    +a = t.numpy()
    +test_eq(type(get_outliers_IQR(a, -1)[0]), np.ndarray)
    +test_close(get_percentile(t, 25).numpy(), get_percentile(a, 25))
    +
    +
    +

    source

    +
    +
    +

    get_robustscale_params

    +
    +
     get_robustscale_params (o, sel_vars=None, not_sel_vars=None, by_var=True,
    +                         percentiles=(25, 75), eps=1e-06)
    +
    +

    Calculates median and inter-quartile range required to robust scaler inputs

    +
    +
    a = np.random.rand(16, 3, 100)
    +a[a>.8] = np.nan
    +median, IQR = get_robustscale_params(a, by_var=True, percentiles=(25, 75))
    +a_scaled = (a - median) / IQR
    +test_eq(a.shape, a_scaled.shape)
    +test_eq(np.isnan(median).sum(),0)
    +test_eq(np.isnan(IQR).sum(),0)
    +test_eq(np.isnan(a), np.isnan(a_scaled))
    +
    +
    +

    source

    +
    +
    +

    torch_slice_by_dim

    +
    +
     torch_slice_by_dim (t, index, dim=-1, **kwargs)
    +
    +
    +
    t = torch.rand(5, 3)
    +index = torch.randint(0, 3, (5, 1))
    +# index = [[0, 2], [0, 1], [1, 2], [0, 2], [0, 1]]
    +torch_slice_by_dim(t, index)
    +
    +
    tensor([[0.5341],
    +        [0.4543],
    +        [0.0942],
    +        [0.9645],
    +        [0.0405]])
    +
    +
    +
    +

    source

    +
    +
    +

    torch_nanstd

    +
    +
     torch_nanstd (o, dim=None, keepdim=False)
    +
    +

    There’s currently no torch.nanstd function

    +
    +

    source

    +
    +
    +

    torch_nanmean

    +
    +
     torch_nanmean (o, dim=None, keepdim=False)
    +
    +

    There’s currently no torch.nanmean function

    +
    +
    t = torch.rand(1000)
    +t[:100] = float('nan')
    +assert torch_nanmean(t).item() > 0
    +
    +
    +

    source

    +
    +
    +

    concat

    +
    +
     concat (*ls, dim=0)
    +
    +

    Concatenate tensors, arrays, lists, or tuples by a dimension

    +
    +

    source

    +
    +
    +

    reduce_memory_usage

    +
    +
     reduce_memory_usage (df)
    +
    +
    +

    source

    +
    +
    +

    cls_name

    +
    +
     cls_name (o)
    +
    +
    +
    test_eq(cls_name(timer), 'Timer')
    +
    +
    +

    source

    +
    +
    +

    rotate_axis2

    +
    +
     rotate_axis2 (o, steps=1)
    +
    +
    +

    source

    +
    +
    +

    rotate_axis1

    +
    +
     rotate_axis1 (o, steps=1)
    +
    +
    +

    source

    +
    +
    +

    rotate_axis0

    +
    +
     rotate_axis0 (o, steps=1)
    +
    +
    +

    source

    +
    +
    +

    random_roll3d

    +
    +
     random_roll3d (o, axis=(), replace=False)
    +
    +

    Randomly rolls a 3D object along the indicated axes This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently

    +
    +

    source

    +
    +
    +

    random_roll2d

    +
    +
     random_roll2d (o, axis=(), replace=False)
    +
    +

    Rolls a 2D object on the indicated axis This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently

    +
    +

    source

    +
    +
    +

    roll3d

    +
    +
     roll3d (o, roll1:Union[NoneType,list,int]=None,
    +         roll2:Union[NoneType,list,int]=None,
    +         roll3:Union[NoneType,list,int]=None)
    +
    +

    Rolls a 3D object on the indicated axis This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently

    +
    +

    source

    +
    +
    +

    roll2d

    +
    +
     roll2d (o, roll1:Union[NoneType,list,int]=None,
    +         roll2:Union[NoneType,list,int]=None)
    +
    +

    Rolls a 2D object on the indicated axis This solution is based on https://stackoverflow.com/questions/20360675/roll-rows-of-a-matrix-independently

    +
    +
    a = np.tile(np.arange(10), 3).reshape(3, 10) * np.array([1, 10, 100]).reshape(-1, 1)
    +a
    +
    +
    array([[  0,   1,   2,   3,   4,   5,   6,   7,   8,   9],
    +       [  0,  10,  20,  30,  40,  50,  60,  70,  80,  90],
    +       [  0, 100, 200, 300, 400, 500, 600, 700, 800, 900]])
    +
    +
    +
    +
    roll2d(a, roll1=[2, 1, 0])
    +
    +
    array([[  0, 100, 200, 300, 400, 500, 600, 700, 800, 900],
    +       [  0,  10,  20,  30,  40,  50,  60,  70,  80,  90],
    +       [  0,   1,   2,   3,   4,   5,   6,   7,   8,   9]])
    +
    +
    +
    +
    roll2d(a, roll2=3)
    +
    +
    array([[  7,   8,   9,   0,   1,   2,   3,   4,   5,   6],
    +       [ 70,  80,  90,   0,  10,  20,  30,  40,  50,  60],
    +       [700, 800, 900,   0, 100, 200, 300, 400, 500, 600]])
    +
    +
    +
    +
    o = torch.arange(24).reshape(2,3,4)
    +test_eq(rotate_axis0(o)[1], o[0])
    +test_eq(rotate_axis1(o)[:,1], o[:,0])
    +test_eq(rotate_axis2(o)[...,1], o[...,0])
    +
    +
    +

    source

    +
    +
    +

    chunks_calculator

    +
    +
     chunks_calculator (shape, dtype='float32', n_bytes=1073741824)
    +
    +

    Function to calculate chunks for a given size of n_bytes (default = 1024**3 == 1GB). It guarantees > 50% of the chunk will be filled

    +
    +
    shape = (1_000, 10, 1000)
    +dtype = 'float32'
    +test_eq(chunks_calculator(shape, dtype), False)
    +
    +shape = (54684, 10, 1000)
    +dtype = 'float32'
    +test_eq(chunks_calculator(shape, dtype), (27342, -1, -1))
    +
    +
    +

    source

    +
    +
    +

    is_memory_shared

    +
    +
     is_memory_shared (a, b)
    +
    +

    Check if 2 array-like objects share memory

    +
    +
    a = np.random.rand(2,3,4)
    +t1 = torch.from_numpy(a)
    +test_eq(is_memory_shared(a, t1), True)
    +a = np.random.rand(2,3,4)
    +t2 = torch.as_tensor(a)
    +test_eq(is_memory_shared(a, t2), True)
    +a = np.random.rand(2,3,4)
    +t3 = torch.tensor(a)
    +test_eq(is_memory_shared(a, t3), False)
    +
    +
    +

    source

    +
    +
    +

    assign_in_chunks

    +
    +
     assign_in_chunks (a, b, chunksize='auto', inplace=True, verbose=True)
    +
    +

    Assigns values in b to an array-like object a using chunks to avoid memory overload. The resulting a retains it’s dtype and share it’s memory. a: array-like object b: may be an integer, float, str, ‘rand’ (for random data), or another array like object. chunksize: is the size of chunks. If ‘auto’ chunks will have around 1GB each.

    +
    +
    a = np.random.rand(10,3,4).astype('float32')
    +a_dtype = a.dtype
    +a_id = id(a)
    +b = np.random.rand(10,3,4).astype('float64')
    +assign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)
    +test_close(a, b)
    +test_eq(a.dtype, a_dtype)
    +test_eq(id(a), a_id)
    +
    +a = np.random.rand(10,3,4).astype('float32')
    +a_dtype = a.dtype
    +a_id = id(a)
    +b = 1
    +assign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)
    +test_eq(a, np.ones_like(a).astype(a.dtype))
    +test_eq(a.dtype, a_dtype)
    +test_eq(id(a), a_id)
    +
    +a = np.random.rand(10,3,4).astype('float32')
    +a_dtype = a.dtype
    +a_id = id(a)
    +b = 0.5
    +assign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)
    +test_eq(a.dtype, a_dtype)
    +test_eq(id(a), a_id)
    +
    +a = np.random.rand(10,3,4).astype('float32')
    +a_dtype = a.dtype
    +a_id = id(a)
    +b = 'rand'
    +assign_in_chunks(a, b, chunksize=2, inplace=True, verbose=True)
    +test_eq(a.dtype, a_dtype)
    +test_eq(id(a), a_id)
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    a = np.random.rand(10,3,4).astype('float32')
    +b = np.random.rand(10,3,4).astype('float64')
    +c = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)
    +test_close(c, b)
    +test_eq(a.dtype, c.dtype)
    +test_eq(is_memory_shared(a, c), True)
    +
    +a = np.random.rand(10,3,4).astype('float32')
    +b = 1
    +c = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)
    +test_eq(a, np.ones_like(a).astype(a.dtype))
    +test_eq(a.dtype, c.dtype)
    +test_eq(is_memory_shared(a, c), True)
    +
    +a = np.random.rand(10,3,4).astype('float32')
    +b = 0.5
    +c = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)
    +test_eq(a.dtype, c.dtype)
    +test_eq(is_memory_shared(a, c), True)
    +
    +a = np.random.rand(10,3,4).astype('float32')
    +b = 'rand'
    +c = assign_in_chunks(a, b, chunksize=2, inplace=False, verbose=True)
    +test_eq(a.dtype, c.dtype)
    +test_eq(is_memory_shared(a, c), True)
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +

    source

    +
    +
    +

    create_array

    +
    +
     create_array (shape, fname=None, path='./data', on_disk=True,
    +               dtype='float32', mode='r+', fill_value='rand',
    +               chunksize='auto', verbose=True, **kwargs)
    +
    +

    mode: ‘r’: Open existing file for reading only. ‘r+’: Open existing file for reading and writing. ‘w+’: Create or overwrite existing file for reading and writing. ‘c’: Copy-on-write: assignments affect data in memory, but changes are not saved to disk. The file on disk is read-only. fill_value: ‘rand’ (for random numbers), int or float chunksize = ‘auto’ to calculate chunks of 1GB, or any integer (for a given number of samples)

    +
    +
    fname = 'X_on_disk'
    +shape = (100, 10, 10)
    +X = create_array(shape, fname, on_disk=True, mode='r+')
    +test_ne(abs(X).sum(), 0)
    +os.remove(X.filename)
    +del X
    +
    +
    auto chunksize: 100
    +
    +
    + + +
    +
    + +
    +
    +
    +
    fname = 'X_on_disk'
    +shape = (100, 10, 10)
    +X = create_empty_array(shape, fname, on_disk=True, mode='r+')
    +test_eq(abs(X).sum(), 0)
    +
    +chunksize = 10
    +pbar = progress_bar(range(math.ceil(len(X) / chunksize)), leave=False)
    +start = 0
    +for i in pbar:
    +    end = min(start + chunksize, len(X))
    +    partial_data = np.random.rand(end - start, X.shape[1] , X.shape[2])
    +    X[start:end] = partial_data
    +    start = end
    +    del partial_data
    +    gc.collect()
    +filename = X.filename
    +del X
    +X = np.load(filename, mmap_mode='r+')
    +test_eq((X == 0).sum(), 0)
    +test_eq(X.shape, shape)
    +os.remove(X.filename)
    +del X
    +
    + + +
    +
    + +
    +
    +
    +

    source

    +
    +
    +

    np_load_compressed

    +
    +
     np_load_compressed (fname=None, path='./data', **kwargs)
    +
    +
    +

    source

    +
    +
    +

    np_save_compressed

    +
    +
     np_save_compressed (arr, fname=None, path='./data', verbose=False,
    +                     **kwargs)
    +
    +
    +
    X1 = np.random.rand(10)
    +np_save_compressed(X1, 'X_comp', path='./data')
    +X2 = np_load_compressed('X_comp')
    +test_eq(X1, X2)
    +
    +
    +

    source

    +
    +
    +

    np2memmap

    +
    +
     np2memmap (arr, fname=None, path='./data', dtype='float32', mode='c',
    +            **kwargs)
    +
    +

    Function that turns an ndarray into a memmap ndarray mode: ‘r’: Open existing file for reading only. ‘r+’: Open existing file for reading and writing. ‘w+’: Create or overwrite existing file for reading and writing. ‘c’: Copy-on-write: assignments affect data in memory, but changes are not saved to disk. The file on disk is read-only.

    +
    +
    X1 = np.random.rand(10)
    +X2 = np2memmap(X1, 'X1_test')
    +test_eq(X1, X2)
    +test_ne(type(X1), type(X2))
    +
    +
    +

    source

    +
    +
    +

    torch_mean_groupby

    +
    +
     torch_mean_groupby (o, idxs)
    +
    +

    Computes torch mean along axis 0 grouped by the idxs. Need to ensure that idxs have the same order as o

    +
    +
    o = torch.arange(6*2*3).reshape(6, 2, 3).float()
    +idxs = np.array([[0,1,2,3], [2,3]], dtype=object)
    +output = torch_mean_groupby(o, idxs)
    +test_eq(o[:2], output[:2])
    +test_eq(o[2:4].mean(0), output[2])
    +test_eq(o[4:6].mean(0), output[3])
    +
    +
    +

    source

    +
    +
    +

    torch_flip

    +
    +
     torch_flip (t, dims=-1)
    +
    +
    +
    t = torch.randn(2, 3, 4)
    +test_eq(torch.flip(t, (2,)), torch_flip(t, dims=-1))
    +
    +
    +

    source

    +
    +
    +

    torch_masked_to_num

    +
    +
     torch_masked_to_num (o, mask, num=0, inplace=False)
    +
    +
    +

    source

    +
    +
    +

    torch_nan_to_num

    +
    +
     torch_nan_to_num (o, num=0, inplace=False)
    +
    +
    +
    x = torch.rand(2, 4, 6)
    +x[:, :3][x[:, :3] < .5] = np.nan
    +nan_values = torch.isnan(x).sum()
    +y = torch_nan_to_num(x[:, :3], inplace=False)
    +test_eq(torch.isnan(y).sum(), 0)
    +test_eq(torch.isnan(x).sum(), nan_values)
    +torch_nan_to_num(x[:, :3], inplace=True)
    +test_eq(torch.isnan(x).sum(), 0)
    +
    +
    +
    x = torch.rand(2, 4, 6)
    +mask = x[:, :3] > .5
    +x[:, :3] = torch_masked_to_num(x[:, :3], mask, num=0, inplace=False)
    +test_eq(x[:, :3][mask].sum(), 0)
    +
    +
    +
    x = torch.rand(2, 4, 6)
    +mask = x[:, :3] > .5
    +torch_masked_to_num(x[:, :3], mask, num=0, inplace=True)
    +test_eq(x[:, :3][mask].sum(), 0)
    +
    +
    +

    source

    +
    +
    +

    mpl_trend

    +
    +
     mpl_trend (x, y, deg=1)
    +
    +
    +
    x = np.sort(np.random.randint(0, 100, 100)/10)
    +y = np.random.rand(100) + np.linspace(0, 10, 100)
    +trend = mpl_trend(x, y)
    +plt.scatter(x, y)
    +plt.plot(x, trend, 'r')
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    array2digits

    +
    +
     array2digits (o, n_digits=None, normalize=True)
    +
    +
    +

    source

    +
    +
    +

    int2digits

    +
    +
     int2digits (o, n_digits=None, normalize=True)
    +
    +
    +
    o = -9645
    +test_eq(int2digits(o, 6), np.array([ 0,  0, -.9, -.6, -.4, -.5]))
    +
    +a = np.random.randint(-1000, 1000, 10)
    +test_eq(array2digits(a,5).shape, (10,5))
    +
    +
    +

    source

    +
    +
    +

    sincos_encoding

    +
    +
     sincos_encoding (seq_len, device=None, to_np=False)
    +
    +
    +
    sin, cos = sincos_encoding(100)
    +plt.plot(sin.cpu().numpy())
    +plt.plot(cos.cpu().numpy())
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    linear_encoding

    +
    +
     linear_encoding (seq_len, device=None, to_np=False, lin_range=(-1, 1))
    +
    +
    +
    lin = linear_encoding(100)
    +plt.plot(lin.cpu().numpy())
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    encode_positions

    +
    +
     encode_positions (pos_arr, min_val=None, max_val=None, linear=False,
    +                   lin_range=(-1, 1))
    +
    +

    Encodes an array with positions using a linear or sincos methods

    +
    +
    n_samples = 10
    +length = 500
    +_a = []
    +for i in range(n_samples):
    +    a = np.arange(-4000, 4000, 10)
    +    mask = np.random.rand(len(a)) > .5
    +    a = a[mask]
    +    a = np.concatenate([a, np.array([np.nan] * (length - len(a)))])
    +    _a.append(a.reshape(-1,1))
    +a = np.concatenate(_a, -1).transpose(1,0)
    +sin, cos = encode_positions(a, linear=False)
    +test_eq(a.shape, (n_samples, length))
    +test_eq(sin.shape, (n_samples, length))
    +test_eq(cos.shape, (n_samples, length))
    +plt.plot(sin.T)
    +plt.plot(cos.T)
    +plt.xlim(0, 500)
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    n_samples = 10
    +length = 500
    +_a = []
    +for i in range(n_samples):
    +    a = np.arange(-4000, 4000, 10)
    +    mask = np.random.rand(len(a)) > .5
    +    a = a[mask]
    +    a = np.concatenate([a, np.array([np.nan] * (length - len(a)))])
    +    _a.append(a.reshape(-1,1))
    +a = np.concatenate(_a, -1).transpose(1,0)
    +lin = encode_positions(a, linear=True)
    +test_eq(a.shape, (n_samples, length))
    +test_eq(lin.shape, (n_samples, length))
    +plt.plot(lin.T)
    +plt.xlim(0, 500)
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    sort_generator

    +
    +
     sort_generator (generator, bs)
    +
    +
    +
    generator = (i for i in np.random.permutation(np.arange(1000000)).tolist())
    +l = list(sort_generator(generator, 512))
    +test_eq(l[:512], sorted(l[:512]))
    +
    +
    +

    source

    +
    +
    +

    get_subset_dict

    +
    +
     get_subset_dict (d, keys)
    +
    +
    +
    keys = string.ascii_lowercase
    +values = np.arange(len(keys))
    +d = {k:v for k,v in zip(keys,values)}
    +test_eq(get_subset_dict(d, ['a', 'k', 'j', 'e']), {'a': 0, 'k': 10, 'j': 9, 'e': 4})
    +
    +
    +

    source

    +
    +
    +

    remove_dir

    +
    +
     remove_dir (directory, verbose=True)
    +
    +
    +

    source

    +
    +
    +

    create_dir

    +
    +
     create_dir (directory, verbose=True)
    +
    +
    +
    path = "wandb3/wandb2/wandb"
    +create_dir(path)
    +assert Path(path).exists()
    +
    +paths = ["wandb3/wandb2/wandb", "wandb3/wandb2", "wandb"]
    +remove_dir(paths)
    +for p in paths:
    +    assert not Path(p).exists()
    +
    +path = "wandb3"
    +assert Path(path).exists()
    +remove_dir(path)
    +assert not Path(path).exists()
    +
    +
    wandb3/wandb2/wandb directory created.
    +wandb3/wandb2/wandb directory removed.
    +wandb3/wandb2 directory removed.
    +wandb directory doesn't exist.
    +wandb3 directory removed.
    +
    +
    +
    +
    create_dir('./test')
    +
    +
    test directory created.
    +
    +
    +
    +
    a = 5
    +def fn(b): return a + b
    +
    +
    Writing ./test/mod_dev.py
    +
    +
    +
    +
    fname = "./test/mod_dev.py"
    +while True:
    +    if fname[0] in "/ .": fname = fname.split(fname[0], 1)[1]
    +    else: break
    +if '/' in fname and fname.rsplit('/', 1)[0] not in sys.path: sys.path.append(fname.rsplit('/', 1)[0])
    +mod = import_file_as_module(fname)
    +test_eq(mod.fn(3), 8)
    +sys.path = sys.path[:-1]
    +remove_dir('./test/')
    +
    +
    test directory removed.
    +
    +
    +
    +

    source

    +
    +
    +

    named_partial

    +
    +
     named_partial (name, func, *args, **kwargs)
    +
    +

    Create a partial function with a name

    +
    +
    def add_1(x, add=1): return x+add
    +test_eq(add_1(1), 2)
    +add_2 = partial(add_1, add=2)
    +test_eq(add_2(2), 4)
    +test_ne(str(add_2), "add_2")
    +add_2 = named_partial('add_2', add_1, add=2)
    +test_eq(add_2(2), 4)
    +test_eq(str(add_2), "add_2")
    +
    +class _A():
    +    def __init__(self, add=1): self.add = add
    +    def __call__(self, x): return x + self.add
    +
    +test_eq(_A()(1), 2)
    +_A2 = partial(_A, add=2)
    +test_eq(_A2()(1), 3)
    +test_ne(str(_A2), '_A2')
    +_A2 = named_partial('_A2', _A, add=2)
    +test_eq(_A2()(1), 3)
    +test_eq(str(_A2), '_A2')
    +
    +
    +

    source

    +
    +
    +

    dict2attrdict

    +
    +
     dict2attrdict (d:dict)
    +
    +

    Converts a (nested) dict to an AttrDict.

    + + + + + + + + + + + + + + + +
    TypeDetails
    ddicta dict
    +
    +

    source

    +
    +
    +

    attrdict2dict

    +
    +
     attrdict2dict (d:dict)
    +
    +

    Converts a (nested) AttrDict dict to a dict.

    + + + + + + + + + + + + + + + +
    TypeDetails
    ddicta dict
    +
    +
    # Test attrdict2dict
    +d = AttrDict({'a': 1, 'b': AttrDict({'c': 2, 'd': 3})})
    +test_eq(attrdict2dict(d), {'a': 1, 'b': {'c': 2, 'd': 3}})
    +# Test dict2attrdict
    +d = {'a': 1, 'b': {'c': 2, 'd': 3}}
    +test_eq(dict2attrdict(d), AttrDict({'a': 1, 'b': AttrDict({'c': 2, 'd': 3})}))
    +
    +
    +

    source

    +
    +
    +

    get_config

    +
    +
     get_config (file_path)
    +
    +

    Gets a config from a yaml file.

    +
    +

    source

    +
    +
    +

    yaml2dict

    +
    +
     yaml2dict (file_path, attrdict=True)
    +
    +

    Converts a yaml file to a dict (optionally AttrDict).

    + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    file_patha path to a yaml file
    attrdictboolTrueif True, convert output to AttrDict
    +
    +

    source

    +
    +
    +

    dict2yaml

    +
    +
     dict2yaml (d, file_path, sort_keys=False)
    +
    +

    Converts a dict to a yaml file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    da dict
    file_patha path to a yaml file
    sort_keysboolFalseif True, sort the keys
    +
    +
    program: wandb_scripts/train_script.py          # (required) Path to training script.
    +method: bayes                                   # (required) Specify the search strategy: grid, random or bayes
    +parameters:                                     # (required) Specify parameters bounds to search.
    +   bs:
    +      values: [32, 64, 128]
    +   depth:
    +      values: [3, 6, 9, 12]
    +   fc_dropout:
    +      distribution: uniform
    +      min: 0.
    +      max: 0.5
    +   lr_max:
    +      values: [0.001, 0.003, 0.01, 0.03, 0.1]
    +   n_epoch:
    +      values: [10, 15, 20]
    +   nb_filters:
    +      values: [32, 64, 128]
    +name: LSST_sweep_01
    +metric:
    +   name: accuracy                              # This must match one of the metrics in the training script
    +   goal: maximize
    +early_terminate:
    +   type: hyperband
    +   min_iter: 3
    +project: LSST_wandb_hpo
    +
    +
    Writing sweep_config.yaml
    +
    +
    +
    +
    fname = "sweep_config.yaml"
    +sweep_config = yaml2dict(fname)
    +print(sweep_config)
    +test_eq(sweep_config.method, 'bayes')
    +test_eq(sweep_config['metric'], {'name': 'accuracy', 'goal': 'maximize'})
    +os.remove(fname)
    +
    +
    {'program': 'wandb_scripts/train_script.py', 'method': 'bayes', 'parameters': {'bs': {'values': [32, 64, 128]}, 'depth': {'values': [3, 6, 9, 12]}, 'fc_dropout': {'distribution': 'uniform', 'min': 0.0, 'max': 0.5}, 'lr_max': {'values': [0.001, 0.003, 0.01, 0.03, 0.1]}, 'n_epoch': {'values': [10, 15, 20]}, 'nb_filters': {'values': [32, 64, 128]}}, 'name': 'LSST_sweep_01', 'metric': {'name': 'accuracy', 'goal': 'maximize'}, 'early_terminate': {'type': 'hyperband', 'min_iter': 3}, 'project': 'LSST_wandb_hpo'}
    +
    +
    +
    +

    source

    +
    +
    +

    get_cat_cols

    +
    +
     get_cat_cols (df)
    +
    +
    +

    source

    +
    +
    +

    get_cont_cols

    +
    +
     get_cont_cols (df)
    +
    +
    +

    source

    +
    +
    +

    str2index

    +
    +
     str2index (o)
    +
    +
    +

    source

    +
    +
    +

    str2list

    +
    +
     str2list (o)
    +
    +
    +

    source

    +
    +
    +

    map_array

    +
    +
     map_array (arr, dim=1)
    +
    +
    +

    source

    +
    +
    +

    get_mapping

    +
    +
     get_mapping (arr, dim=1, return_counts=False)
    +
    +
    +
    a = np.asarray(alphabet[np.random.randint(0,15,30)]).reshape(10,3)
    +b = np.asarray(ALPHABET[np.random.randint(6,10,30)]).reshape(10,3)
    +x = concat(a,b,dim=1)
    +maps, counts = get_mapping(x, dim=1, return_counts=True)
    +x, maps, counts
    +
    +
    (array([['d', 'k', 'l', 'I', 'I', 'G'],
    +        ['g', 'i', 'l', 'I', 'J', 'I'],
    +        ['e', 'l', 'n', 'G', 'H', 'I'],
    +        ['e', 'l', 'a', 'I', 'H', 'G'],
    +        ['k', 'l', 'b', 'I', 'I', 'J'],
    +        ['c', 'f', 'k', 'I', 'H', 'I'],
    +        ['e', 'j', 'f', 'I', 'H', 'J'],
    +        ['n', 'd', 'g', 'G', 'J', 'J'],
    +        ['d', 'f', 'a', 'I', 'H', 'H'],
    +        ['i', 'c', 'm', 'J', 'G', 'G']], dtype='<U1'),
    + [(#7) ['c','d','e','g','i','k','n'],
    +  (#7) ['c','d','f','i','j','k','l'],
    +  (#8) ['a','b','f','g','k','l','m','n'],
    +  (#3) ['G','I','J'],
    +  (#4) ['G','H','I','J'],
    +  (#4) ['G','H','I','J']],
    + [7, 7, 8, 3, 4, 4])
    +
    +
    +
    +
    x = np.asarray(alphabet[np.random.randint(0,15,30)]).reshape(10,3)
    +x, map_array(x), map_array(x, 1)
    +
    +
    (array([['i', 'm', 'd'],
    +        ['h', 'm', 'g'],
    +        ['i', 'g', 'd'],
    +        ['k', 'm', 'n'],
    +        ['n', 'j', 'l'],
    +        ['n', 'l', 'i'],
    +        ['f', 'c', 'k'],
    +        ['i', 'm', 'a'],
    +        ['l', 'i', 'f'],
    +        ['k', 'o', 'g']], dtype='<U1'),
    + array([[2, 5, 1],
    +        [1, 5, 3],
    +        [2, 1, 1],
    +        [3, 5, 7],
    +        [5, 3, 6],
    +        [5, 4, 4],
    +        [0, 0, 5],
    +        [2, 5, 0],
    +        [4, 2, 2],
    +        [3, 6, 3]]),
    + array([[2, 5, 1],
    +        [1, 5, 3],
    +        [2, 1, 1],
    +        [3, 5, 7],
    +        [5, 3, 6],
    +        [5, 4, 4],
    +        [0, 0, 5],
    +        [2, 5, 0],
    +        [4, 2, 2],
    +        [3, 6, 3]]))
    +
    +
    +
    +

    source

    +
    +
    +

    log_tfm

    +
    +
     log_tfm (o, inplace=False)
    +
    +

    Log transforms an array-like object with positive and/or negative values

    +
    +
    arr = np.asarray([-1000, -100, -10, -1, 0, 1, 10, 100, 1000]).astype(float)
    +plt.plot(arr, log_tfm(arr, False))
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    t = tensor([-1000, -100, -10, -1, 0, 1, 10, 100, 1000]).float()
    +plt.plot(t, log_tfm(t, False))
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    to_sincos_time

    +
    +
     to_sincos_time (arr, max_value)
    +
    +
    +
    arr = np.sort(np.random.rand(100) * 5)
    +arr_sin, arr_cos = to_sincos_time(arr, 5)
    +plt.scatter(arr, arr_sin)
    +plt.scatter(arr, arr_cos)
    +plt.show()
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    plot_feature_dist

    +
    +
     plot_feature_dist (X, percentiles=[0, 0.1, 0.5, 1, 5, 10, 25, 50, 75, 90,
    +                    95, 99, 99.5, 99.9, 100])
    +
    +
    +
    arr = np.random.rand(10, 3, 100)
    +plot_feature_dist(arr, percentiles=[0,0.1,0.5,1,5,10,25,50,75,90,95,99,99.5,99.9,100])
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    rolling_moving_average

    +
    +
     rolling_moving_average (o, window=2)
    +
    +
    +
    a = np.arange(60).reshape(2,3,10).astype(float)
    +t = torch.arange(60).reshape(2,3,10).float()
    +test_close(rolling_moving_average(a, window=3), rolling_moving_average(t, window=3).numpy())
    +print(t)
    +print(rolling_moving_average(t, window=3))
    +
    +
    tensor([[[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.],
    +         [10., 11., 12., 13., 14., 15., 16., 17., 18., 19.],
    +         [20., 21., 22., 23., 24., 25., 26., 27., 28., 29.]],
    +
    +        [[30., 31., 32., 33., 34., 35., 36., 37., 38., 39.],
    +         [40., 41., 42., 43., 44., 45., 46., 47., 48., 49.],
    +         [50., 51., 52., 53., 54., 55., 56., 57., 58., 59.]]])
    +tensor([[[ 0.0000,  0.5000,  1.0000,  2.0000,  3.0000,  4.0000,  5.0000,
    +           6.0000,  7.0000,  8.0000],
    +         [10.0000, 10.5000, 11.0000, 12.0000, 13.0000, 14.0000, 15.0000,
    +          16.0000, 17.0000, 18.0000],
    +         [20.0000, 20.5000, 21.0000, 22.0000, 23.0000, 24.0000, 25.0000,
    +          26.0000, 27.0000, 28.0000]],
    +
    +        [[30.0000, 30.5000, 31.0000, 32.0000, 33.0000, 34.0000, 35.0000,
    +          36.0000, 37.0000, 38.0000],
    +         [40.0000, 40.5000, 41.0000, 42.0000, 43.0000, 44.0000, 45.0000,
    +          46.0000, 47.0000, 48.0000],
    +         [50.0000, 50.5000, 51.0000, 52.0000, 53.0000, 54.0000, 55.0000,
    +          56.0000, 57.0000, 58.0000]]])
    +
    +
    +
    +

    source

    +
    +
    +

    fbfill_sequence

    +
    +
     fbfill_sequence (o)
    +
    +

    Forward and backward fills an array-like object alongside sequence dimension

    +
    +

    source

    +
    +
    +

    bfill_sequence

    +
    +
     bfill_sequence (o)
    +
    +

    Backward fills an array-like object alongside sequence dimension

    +
    +

    source

    +
    +
    +

    ffill_sequence

    +
    +
     ffill_sequence (o)
    +
    +

    Forward fills an array-like object alongside sequence dimension

    +
    +
    a = np.arange(80).reshape(2, 4, 10).astype(float)
    +mask = np.random.rand(*a.shape)
    +a[mask > .8] = np.nan
    +t = torch.from_numpy(a)
    +t
    +
    +
    tensor([[[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8., nan],
    +         [10., 11., nan, nan, 14., 15., nan, 17., nan, 19.],
    +         [20., 21., 22., 23., nan, 25., 26., 27., 28., 29.],
    +         [30., 31., 32., 33., nan, 35., 36., 37., 38., 39.]],
    +
    +        [[40., 41., 42., 43., 44., 45., 46., 47., nan, 49.],
    +         [nan, 51., nan, 53., 54., 55., nan, 57., 58., 59.],
    +         [60., 61., 62., 63., 64., nan, nan, 67., 68., 69.],
    +         [70., nan, 72., 73., 74., 75., 76., nan, 78., 79.]]],
    +       dtype=torch.float64)
    +
    +
    +
    +
    # forward fill
    +filled_a = ffill_sequence(a)
    +print(filled_a)
    +m = np.isnan(filled_a)
    +test_eq(filled_a[~m], ffill_sequence(t).numpy()[~m])
    +
    +
    [[[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  8.]
    +  [10. 11. 11. 11. 14. 15. 15. 17. 17. 19.]
    +  [20. 21. 22. 23. 23. 25. 26. 27. 28. 29.]
    +  [30. 31. 32. 33. 33. 35. 36. 37. 38. 39.]]
    +
    + [[40. 41. 42. 43. 44. 45. 46. 47. 47. 49.]
    +  [nan 51. 51. 53. 54. 55. 55. 57. 58. 59.]
    +  [60. 61. 62. 63. 64. 64. 64. 67. 68. 69.]
    +  [70. 70. 72. 73. 74. 75. 76. 76. 78. 79.]]]
    +
    +
    +
    +
    # backward fill
    +filled_a = bfill_sequence(a)
    +print(filled_a)
    +m = np.isnan(filled_a)
    +test_eq(filled_a[~m], bfill_sequence(t).numpy()[~m])
    +
    +
    [[[ 0.  1.  2.  3.  4.  5.  6.  7.  8. nan]
    +  [10. 11. 14. 14. 14. 15. 17. 17. 19. 19.]
    +  [20. 21. 22. 23. 25. 25. 26. 27. 28. 29.]
    +  [30. 31. 32. 33. 35. 35. 36. 37. 38. 39.]]
    +
    + [[40. 41. 42. 43. 44. 45. 46. 47. 49. 49.]
    +  [51. 51. 53. 53. 54. 55. 57. 57. 58. 59.]
    +  [60. 61. 62. 63. 64. 67. 67. 67. 68. 69.]
    +  [70. 72. 72. 73. 74. 75. 76. 78. 78. 79.]]]
    +
    +
    +
    +
    # forward & backward fill
    +filled_a = fbfill_sequence(a)
    +print(filled_a)
    +m = np.isnan(filled_a)
    +test_eq(filled_a[~m], fbfill_sequence(t).numpy()[~m])
    +
    +
    [[[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  8.]
    +  [10. 11. 11. 11. 14. 15. 15. 17. 17. 19.]
    +  [20. 21. 22. 23. 23. 25. 26. 27. 28. 29.]
    +  [30. 31. 32. 33. 33. 35. 36. 37. 38. 39.]]
    +
    + [[40. 41. 42. 43. 44. 45. 46. 47. 47. 49.]
    +  [51. 51. 51. 53. 54. 55. 55. 57. 58. 59.]
    +  [60. 61. 62. 63. 64. 64. 64. 67. 68. 69.]
    +  [70. 70. 72. 73. 74. 75. 76. 76. 78. 79.]]]
    +
    +
    +
    +

    source

    +
    +
    +

    dummify

    +
    +
     dummify (o:Union[numpy.ndarray,torch.Tensor], by_var:bool=True,
    +          inplace:bool=False, skip:Optional[list]=None, random_state=None)
    +
    +

    Shuffles an array-like object along all dimensions or dimension 1 (variables) if by_var is True.

    +
    +
    arr = np.random.rand(2,3,10)
    +arr_original = arr.copy()
    +dummy_arr = dummify(arr)
    +test_ne(arr_original, dummy_arr)
    +test_eq(arr_original, arr)
    +dummify(arr, inplace=True)
    +test_ne(arr_original, arr)
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +
    t = torch.rand(2,3,10)
    +t_original = t.clone()
    +dummy_t = dummify(t)
    +test_ne(t_original, dummy_t)
    +test_eq(t_original, t)
    +dummify(t, inplace=True)
    +test_ne(t_original, t)
    +
    + + +
    +
    + +
    +
    + + +
    +
    + +
    +
    +
    +

    source

    +
    +
    +

    shuffle_along_axis

    +
    +
     shuffle_along_axis (o, axis=-1, random_state=None)
    +
    +
    +
    X = np.arange(60).reshape(2,3,10) + 10
    +X_shuffled = shuffle_along_axis(X,(0, -1), random_state=23)
    +test_eq(X_shuffled, np.array([[[13, 15, 41, 14, 40, 49, 18, 42, 47, 46],
    +                               [28, 56, 53, 50, 52, 25, 24, 57, 51, 59],
    +                               [34, 30, 38, 35, 69, 66, 63, 67, 61, 62]],
    +
    +                              [[19, 10, 11, 16, 43, 12, 17, 48, 45, 44],
    +                               [23, 20, 26, 22, 21, 27, 58, 29, 54, 55],
    +                               [36, 31, 39, 60, 33, 68, 37, 32, 65, 64]]]))
    +
    +
    +

    source

    +
    +
    +

    analyze_array

    +
    +
     analyze_array (o, bins=100, density=False, feature_names=None,
    +                clip_outliers_plot=False, quantile_range=(25.0, 75.0),
    +                percentiles=[1, 25, 50, 75, 99], text_len=12, figsize=(10,
    +                6))
    +
    +
    +

    source

    +
    +
    +

    analyze_feature

    +
    +
     analyze_feature (feature, bins=100, density=False, feature_name=None,
    +                  clip_outliers_plot=False, quantile_range=(25.0, 75.0),
    +                  percentiles=[1, 25, 50, 75, 99], text_len=12,
    +                  figsize=(10, 6))
    +
    +
    +
    x = np.random.normal(size=(1000))
    +analyze_array(x)
    +
    +
     array shape: (1000,)
    +       dtype: float64
    +  nan values: 0.0%
    +         max: 3.581094060980321
    +           1: -2.1615590829115185
    +          25: -0.5910961139851849
    +          50: -0.002247946765973052
    +          75: 0.6259274030927355
    +          99: 2.3412961380708084
    +         min: -2.9413736207935037
    + outlier min: -2.416631389602066
    + outlier max: 2.4514626787096163
    +    outliers: 1.3%
    +        mean: 0.0252125277963861
    +         std: 0.946955486669799
    + normal dist: True
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    x1 = np.random.normal(size=(1000,2))
    +x2 = np.random.normal(3, 5, size=(1000,2))
    +x = x1 + x2
    +analyze_array(x)
    +
    +
     array shape: (1000, 2)
    +
    +  0  feature: 0
    +
    +       dtype: float64
    +  nan values: 0.0%
    +         max: 20.323075761234193
    +           1: -8.260661592413742
    +          25: -0.6268118569038604
    +          50: 2.7491159998190335
    +          75: 6.1659732833324234
    +          99: 15.387037197243288
    +         min: -13.122296090020368
    + outlier min: -10.815989567258287
    + outlier max: 16.35515099368685
    +    outliers: 0.9%
    +        mean: 2.9347218553275445
    +         std: 5.134940196769919
    + normal dist: True
    +
    +  1  feature: 1
    +
    +       dtype: float64
    +  nan values: 0.0%
    +         max: 19.86661808715871
    +           1: -8.727124941895372
    +          25: -0.45908489661153007
    +          50: 2.875134866985423
    +          75: 6.288434737224429
    +          99: 14.424046274543118
    +         min: -10.963913297285615
    + outlier min: -10.58036434736547
    + outlier max: 16.409714187978366
    +    outliers: 0.6%
    +        mean: 2.9552584127690014
    +         std: 4.99683092772426
    + normal dist: True
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +
    +

    +
    +
    +
    +
    +
    +

    source

    +
    +
    +

    get_relpath

    +
    +
     get_relpath (path)
    +
    +
    +

    source

    +
    +
    +

    to_root_path

    +
    +
     to_root_path (path)
    +
    +

    Converts a path to an absolute path from the root directory of the repository.

    +
    +

    source

    +
    +
    +

    get_root

    +
    +
     get_root ()
    +
    +

    Returns the root directory of the git repository.

    +
    +

    source

    +
    +
    +

    split_in_chunks

    +
    +
     split_in_chunks (o, chunksize, start=0, shuffle=False, drop_last=False)
    +
    +
    +
    a = np.arange(5, 15)
    +test_eq(split_in_chunks(a, 3, drop_last=False), [array([5, 6, 7]), array([ 8,  9, 10]), array([11, 12, 13]), array([14])])
    +test_eq(split_in_chunks(a, 3, drop_last=True), [array([5, 6, 7]), array([ 8,  9, 10]), array([11, 12, 13])])
    +test_eq(split_in_chunks(a, 3, start=2, drop_last=True), [array([7, 8, 9]), array([10, 11, 12])])
    +
    +
    +

    source

    +
    +
    +

    load_object

    +
    +
     load_object (file_path)
    +
    +
    +

    source

    +
    +
    +

    save_object

    +
    +
     save_object (o, file_path, verbose=True)
    +
    +
    +
    split = np.arange(100)
    +save_object(split, file_path='data/test')
    +split2 = load_object('data/test.pkl')
    +test_eq(split, split2)
    +
    +
    data directory already exists.
    +ndarray saved as data/test.pkl
    +
    +
    +
    +
    splits = L([[[0,1,2,3,4], [5,6,7,8,9]],[[10,11,12,13,14], [15,16,17,18,19]]])
    +save_object(splits, file_path=Path('data/test'))
    +splits2 = load_object('data/test')
    +test_eq(splits, splits2)
    +
    +
    data directory already exists.
    +L saved as data/test.pkl
    +
    +
    +
    +

    source

    +
    +
    +

    get_idxs_to_keep

    +
    +
     get_idxs_to_keep (o, cond, crit='all', invert=False, axis=(1, 2),
    +                   keepdims=False)
    +
    +
    +
    a = np.random.rand(100, 2, 10)
    +a[a > .95] = np.nan
    +idxs_to_keep = get_idxs_to_keep(a, np.isfinite)
    +if idxs_to_keep.size>0:
    +    test_eq(np.isnan(a[idxs_to_keep]).sum(), 0)
    +
    +
    +

    source

    +
    +
    +

    zerofy

    +
    +
     zerofy (a, stride, keep=False)
    +
    +

    Create copies of an array setting individual/ group values to zero

    +
    +
    stride = 3
    +a = np.arange(2*5).reshape(2,5) + 1
    +
    +zerofy(a, stride, keep=False)
    +
    +
    array([[[ 0.,  0.,  3.,  4.,  5.],
    +        [ 6.,  7.,  8.,  9., 10.]],
    +
    +       [[ 1.,  2.,  0.,  0.,  0.],
    +        [ 6.,  7.,  8.,  9., 10.]],
    +
    +       [[ 1.,  2.,  3.,  4.,  5.],
    +        [ 0.,  0.,  8.,  9., 10.]],
    +
    +       [[ 1.,  2.,  3.,  4.,  5.],
    +        [ 6.,  7.,  0.,  0.,  0.]]])
    +
    +
    +
    +

    source

    +
    +
    +

    feat2list

    +
    +
     feat2list (o)
    +
    +
    +
    a = 'a'
    +test_eq(feat2list(a), ['a'])
    +a = ['a', 'b']
    +test_eq(feat2list(a), ['a', 'b'])
    +a = None
    +test_eq(feat2list(a), [])
    +
    +
    +

    source

    +
    +
    +

    smallest_dtype

    +
    +
     smallest_dtype (num, use_unsigned=False)
    +
    +

    Find the smallest dtype that can safely hold num

    +
    +
    test_eq(smallest_dtype(3654), 'int16')
    +test_eq(smallest_dtype(2048.), 'float16')
    +test_eq(smallest_dtype(365454), 'int32')
    +test_eq(smallest_dtype(365454.), 'float32')
    +test_eq(smallest_dtype(3654545134897), 'int64')
    +
    +
    +

    source

    +
    +
    +

    plot_forecast

    +
    +
     plot_forecast (X_true, y_true, y_pred, sel_vars=None, idx=None,
    +                figsize=(8, 4), n_samples=1)
    +
    +
    +

    source

    +
    +
    +

    str2callable

    +
    +
     str2callable (object_path:str=None)
    +
    +

    Transform a string into a callable object without importing it in the script.

    + + + + + + + + + + + + + + + + + +
    TypeDefaultDetails
    object_pathstrNoneThe string representing the object path.
    +
    +
    # test showing you don't need to import the object in the script. The library needs to be installed though.
    +try:
    +    pyts
    +except Exception as e:
    +    print(0, e)
    +try:
    +    pyts.image
    +except Exception as e:
    +    print(1, e)
    +try:
    +    gasf = eval("pyts.image.GramianAngularField(method='summation')")
    +    print(f"2 success: {gasf}")
    +except Exception as e:
    +    print(2, e)
    +try:
    +    gasf = str2callable("pyts.image.GramianAngularField(method='summation')")
    +    print(f"3 success: {gasf}")
    +except Exception as e:
    +    print(3, e)
    +
    +
    0 name 'pyts' is not defined
    +1 name 'pyts' is not defined
    +2 name 'pyts' is not defined
    +3 success: GramianAngularField()
    +
    +
    + + +
    + +
    + +
    + + + + + \ No newline at end of file diff --git a/wandb.html b/wandb.html new file mode 100644 index 000000000..ef7dd191c --- /dev/null +++ b/wandb.html @@ -0,0 +1,1242 @@ + + + + + + + + + +tsai - Weights & Biases Sweeps + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Weights & Biases Sweeps

    +
    + + + +
    + + + + +
    + + + +
    + + + +
    +

    Weights & Biases Sweeps are used to automate hyperparameter optimization and explore the space of possible models.

    +
    +
    +

    source

    +
    +

    wandb_agent

    +
    +
     wandb_agent (script_path, sweep, entity=None, project=None, count=None,
    +              run=True)
    +
    +

    Run wandb agent with sweep and `script_path

    +
    +

    source

    +
    +
    +

    update_run_config

    +
    +
     update_run_config (config, new_config, verbose=False)
    +
    +

    Update config with new_config

    +
    +

    source

    +
    +
    +

    get_sweep_config

    +
    +
     get_sweep_config (config)
    +
    +

    Get sweep config from config

    + + +
    + +
    + +
    + + + + + \ No newline at end of file
    + + +
    + + +

    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 literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-54-output-1.png b/009_data.preprocessing_files/figure-html/cell-54-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..01b45b8e9c5b67a9df232069d0b587fe2b13e0ae GIT binary patch literal 26273 zcmb5W1yI%P+cmmDLRtjrP*NJ{Mi2x1NX%A|VJ!NT=kcyHmQ6?hfhhI`{Vf ze((9t%zMs!hnZ)d!M*w2eP8QZYhAx@ALOO5&`HoC5D1oxw1g4_g2)GfAS6FV0slhz z9*qb5kKaM^lY_F2v4gX|oe@M%-@(?>#=+9;^K&O7J9{%5Yfe^P)>q8WO&uI;?FHD_ ztp588tTuKgY_sT(1HnVkY^BxhArKsW_AX4@2}F zcDG5VMG!Az$lSlZCwd$k75UYYuHIFYGThaWLs0N$p_cPzxqk68CuZAg2?>dIzo|m( z=TuZwO4BM!LExuL(U%(hN+E?D27YrPd&UQTTY>)1AKK(U`qaARV0Zdg5%JNZ(rHW8 zE?ivP2o82kzk&khUl|#tvuq1*m8mh3GNi(v;^7%MVuH_MK5qiC|CH#rg`~hgYH4}h z(jW$Y2y)WZihC3h&{xrN_m*bF9bUN=HcTc3%GB$w`Lm$;SI+fivFC_ep#aQ&XRA@9w^Z zgitduz>eGCtibCy=0!kPM5-qK1<}K?q;6{O8Y~T~7Zp( z^hI|p+dd&9dv9!=K>RB0S>F2Lr9etS`7#gA%6>VN~4s27bZIzVBOEgG)enFEYf}At@;sSro$VY)C z_amXXzxeByNN>elNDt2|1xlk^%jW6hnpymRKy<|sJ#tBxWNm$Lu*A*(FgIZ9oXfI_ zt1GMIBhu5-`geDCD|Jy(Q$zX4l0-Zclyl@2wX{4I?45R}pshRdaqPa$cY8LhJ95<)05^RCk5Z zUb9fLS=UiT&I)p;shzMlG@4JeY?*&tl8}^)NJ!Aw{$y^>2oAwm-bV~JHnxU_hCz3E z6_qjM;+@USz|_U7e0^NpaIV|UvSbq?TRS!~9W1GdmR1SrS@e1@F5YInnqQ(06ew6l zc2*lCG}P5T;jxrU`IUkEkZWNM&B@?ol={)KPpL_**K5iJ zGpU2EQMI=wZHo8h%P;jEZ)+Nrx!T;hX&Gyb@e9WDTE2yco9xfkW`zx;il$y(xP*Lp<8T*xNY)l;KoP3(Wp5nse89?mP|HMoF zTO+Rph7@1x|6ZpmoS_frN3t%`YjRN=Ycs+QA9<|53z-z>=%*P+WwWN_&m?wopYQKY zJZ@v3a^Z`znIzx1k?Z1%NFEAo-Z#-$5!>IH2$CwYcq{S4giwH$T=Hjf@<58PJLK;e z49}+F2xU^&TR1&Eoy&YI2<&tFwQk&Og;eagw)WzN<9BbvDF*y-M7n?bW4P{?cEL~D z-_aZ#J#0MhC0|sRhr5fdi9%AFrYkyKuPa(Xr`=1r#UzYBFB!q*W-G9~WLG{_yUbty zrc6azRp&)i?4HSS*`48fyuV!HwV05HmGZR~u77iQY@bej$y85da+j<3mX0bVAF@ws zb#m)G>B(W`0PECZjsWA(X0pp!^f$7?56R98%axNl)Zkc!kqaJAXxiWs5~^)zG1^KTB zT$^UDyriNAe?TtZL594xLhq1+_ZZG2y$)`^JkY#}1=(RV<5wdOlI87^+E(4sJ+ptnyW#&U|n^P2SWZ_H6@pZe_= zt@I~m+I*&mHpT^KM~n1JI(oeNjLScUeChjWK9S}ELW_qsCD-OOe;xKhGs-zjsXzoR zcGl+cjSN#<~ zO)|&{_*A#USKU%{qb)G|~kWf+l?H&yGvLG0E3%*V;bgNC3W!P!&VhH*6c z-70~e^?XtbdDbcD6C(M`b>uj1eDsq7`3N(WQ0DD$eCDaw3$uS(X5{hbIbtKQvUO^6~pFk__9@F|+9@40j1hU)q*q z_rO;)FH*ndcdY&b=f(jPr!ACCJrTw+Z8_}7hk1qV@o0I8BW?z#Y_vdL6^0&?e0!81 z>QP}S3h~~W3_x?PxX6{S=dB7|8*mp`v8sOMzN+~4z3v-pv54`~-uD12NPmP9wBacH z9#I=uEPlW^^+evKxXj_JBE-BwFb{mwYaBPyr8PDBXzdvR=k{o&NBRC^9VgNUXEjuc zy6f8zgSz^Aa?-;;kF;~wS34rLyNGZ9Fml*o6oh@Gqqx-l86?fEq5{zsMY5oK#Pj#U z+jdXcI3zG9ZxMmw7VQhE*tJNU2VSOCwZOPhPcM^U_Zp4YbV>j?Y!|4`8-s%>!p!$| zs<VM@FjO-KfG^z_vl($!VLg>2G3aPDRwFEE7;1&z-~!ctBdV z>c4+GYR##}=KLlHBbZpk5laSj1nu<1_}Xt?+ElZO`^miaW~XEPnXOQSnAh&RfsHKw z*@7?!nST>5zKOb=_k#VeY|Sxt{-{b}nkf+vAyx6$B(C!A9zH|IJi8t?M&mX5&EUkL zw+{40X2SUfA7L>Oz8+_`IM$Y=J&UMXW{yd+BN{3iA@3wI%?)!}yLj7rgrCgd2i*N7 zV2UOr5F{2h0C%WtR!lfys>oRAVCb8|u#eO~H%~NK0CrR2-j-X`PaJW?n!SK24|70syM zKVKdr@HLG_64fG03UPUI!@@i?B*yet(((__N4hfWM;`3JpIICsNxM;s?4$aRd!yf& zcNzQ5E(FBw|42pSJn$2e`uP^%U6ba8{upZP?eTM?-r*vos~Z(F6xhGJn6;}YRe#H3 z<6e%56qQG<@8h_>sGY0~f&qw1rDrNQ>EC@RwyAr`st zotgXH&_0Os^(5}_{>8)w)VZ>4smN@@O?$Sl8o_!MfJL?Ksqt z)4Fz3a)g6?mG*|C4I0PF?cdtU1I3>*?Howa)aI}UslaV!CttH>lqBy*-!#_}@qM&? z0%K{se#W9b8dcF(`CHjZ2+_j;9ayRgf#9H;k!&{o0mBv)XAje&LYkkOmN}~>F-v@i zx;V}~@4N5__w zDrYJqkw)o0Qs%nekH1K@qW|UB@`hUa`he|xxoXalC9c&{%;dnGBwO1bte7CE5;?2|W;j`eX<{1w36gSe zjz?d9Qiw%ERg^xM`?1Z~PxArG_iVYHHSS@~NP9m}uItimUVoS8a&n#=O{JMMJPWZ4 zIi<0dn}urIR){IpqyA_!8}T@e~d>+NX%)LlcwEJZ`^xR`0lQ*yVZ@F9d@ac z_6TW9-vqP@P1O5ih`)1GqD3BT|AzN1G_+%JF}0?KFEWx<2s-LGsU0|Ad^0dntlJ!E zAAn7Mo!E7AzNh)jCab?F2zvu2QV6-6y_lWyrs`UeprW!ay1;m{fMOSxNIl*AM?l1} z10m*sUj{(pg@znz5eeb)GDOum)5Z+trA=9}t zLxp&6PX=T!J8H!%<)OtA^1%@!_1o`yQziNpRGLJOgm ze!0tp)opuICQy3L#Ebi^ms}$_oet!?_ABjZ!66~vzBA9e;Sv+eynEM6o0=LO-5$fD z>GC%{@E!TVY&F|xj)F<+7v$TM)Ca?!NZL7%lL36fRPXa8G(0+xS8A1Yw709=%6$t8 zs%-E~e-P9wZ;L6`>zX@BapGF#dWf@-ueYWU@+b!BYa zC($oCyoCi~wJi-TTGI(O2j!FaNB1kxaR&m_TvEag@+4_FITlADZtkDCxw#=Cy!7;e z@th_c9+!u*P4c7Ja%dPB216;ro1Sw+L*Z#@X-bJ;fogX;-!JxF$*i-_F+8cOE2Ah^1^!lV$o zj4ZalJk*y@5t0GvKbv4Vcs5$9#)jHQ$d0J5r!0goK6z-dX%VHxpfPb&h-x_R>*p7- z-jdwbb9^GVhi|gw5 zn|cc>)esJk_x8Bbb+L>&&6mVwumk;;mh?C{ImaobB--&Tub(y%i-|Oy4toF8(H1!A zP2MY%r~O$Vl)A`hB`MK?m4__=Ey{kS)IEPr6L#0G#Ca5=0ui@7{z%uXoW!+tVWyfeUoVPMBDa45kQ@?P@L4eu2+^&dW z93*RpzMV@xm2c`=3(Sj z`Q7Ws#hJz2neU!G6TF(d)rJT;I4W;XoEOd!mP{`NZ1&$dj=u2pUf0nD+pJ5@W!ma{ z{h!-6!bVqK@`e^J8QrdX56{k75bJTYF20YOWqxT=cmC>0Z}+%xukSEFv1UW^v%7ft z!V>d{coKy)av15By(G;ZDN2;)hyMDIa}Cgu>sOfN2UxE+QPZpovY?rtk3)j5F1~g!$#;*6LugH@Hro?DF*FVnkJILbcJF$qU zYQp_0fiUT_Wrvg<_fab(q_^scQj9d!X+h2e@fhYJ6ZOdVB05Fhe|8=ar}Sol zbQSWxf`v6GpLWR$pAJ4*PiWf}jWB>xMVNn{b^cLD?C~gl5>GWJ0zIK_1wvnjVTw=E zGOztPZ$pw=sVb^T7!HdMOGA8c6 z6)q}**<0GAxkr`a={GO)N2QVFbgC$&ba3IYQZo?cU`@e%)C@m-?+n-0$EAK|g__J4$+2C@yiv88FolG=At zhsXYYeakJyA0MujV0oD>@qAFK($dn)n;SerLMbJs5#*s{0Y^r#U}GBx2fEv2ZR{@h zSDP^1W|2zsajF+DeCO*e76NZq(O4k%RSK0W(xH`CvV4`4h}&Y5fdyc5bGc57fXfsR zh0=>m%-hc?<{(9GEpxhDVugIxgX_qHgt{KBHPBU;Wq-m?)z;+X0uE^ksUn$KS=xvE zfM+EWbSf|ubUD<6b?JJZeOz$cVWE>tXwUnYpQ~NZ<9U7hf{krx+$KlEOj$H2v6xE} zdS9qY2K#njeb!kVR_U544%mrz6VvVu&KSF@6$?p@XME+)=v|R_b1-8C6rCK^^XEPc%Gp|n{5*-F0Io!`aB!5Zy#j+j8Q{I@)4dmexW6-7 zY!U`gZ1eA*47f5;seq9uCJFQ z0yyBFYyPE5#=9|sn3I;~Q)w{?Xn)&% z11p~U6i>6*am>4NB^UG`sl&hIwE21=_pFoU&UrDh6m2~7Y@1k9g4 z*!6EYl zJ{C+(QCRahrpbCg|E$x>XoG+QBvX)1x{3mwLSB>Py%2lTtm~DU|1*>sd7|raBWFZ7YmJm6TMcnOu#A) zS|&9-C2_14h=`6DU^ibN4Eb-cDqJQS7SuI!PI+nf_!6~kibW%)RZdQ$EEW!`M@we< zDV+`_RMhv)sp*nc!@*UaXd7SkhRWpflPBg@6tEw+zdkSMey&>hUROjcqGNrEJ7z(q z=SOb;+%XZvUCg<^586~p279`QQWHMaqV3_O0--9ylNRAWR=TM?gPt;zfBq5#j?2 z2dD_)xj6WYJ3f77PU>%k+ zashJNfxB|bmn%-HdkQ9=b|_v8P6219KOBz}<{^rE>FlVHA|(Q$T0Z~2ui9Ycv|%|x zy6p`9O=Y;=4}Yq6D4?;6r4y39>(U>c0y-o z>}aC0>cduzs$U%^WUF?;w5+T-P54ASd$n@j<&gu(s&rT2ffIa^E=Cx%XXHo%OOui9 zpGbs5|M#Xo9cGO2^B8U-*8B8Lk0g;n3yc2-EvrLUaNj-G?3Q%p=u?yYh~6%){)$MC zwQngxU=G9aR|^!0$J@-2`y)9~;BZa$~at zrTimnQ*yDLmpIy2^RqZBQi(Tx3rIPmBYa8;=t(3S1G-Kp;kAM;?#tHs89}$I%UkyL zA*Uo5PIuqzq|DS^JsKyHkPdJatQz_A``8b00;1{xCj%Df;a4*ScmFU&>6F#s&OV-{ z;C2Z>U1k9YP;Z~V^27VA|G7-Oe7=09PbQtrk}U`~ z8rD*b(;33$;iM;k!dH|{2(|;1`t4MQ$3AGw=4k+>i>SLk@ey^I>4sr^yLset)w)b$ zzsCh5P+1y#?OoGp$&u1{^iqmLUNhg=if>S?%FPWWUZsmww9hG;_NmO#rUGPg<2WxFT zV#m#pp7C){Ov_Xo)6qu7YnnnyaF3AedC1pIjVXZSN;C`$D7>YZK-9S4yim(!lXpx5 z%NrP|N+fPVBw&OIG&D+@~Pxgtc1l zJ(0W9^A0mvKbgO#hPya;&s&x3)dPIBNpZLiJ%&3oIuVn^;Na>=p7+Di6BRdZmaDoc;wxVHmss?^+DAQ8s|q!1Ew@549r zJvfBIn11;chA9bOUcRZ0*tid_9-x)Z>;;MRHtOWc1oj^v4XA_!qh#zdNEO1YeEj+f z<&~+y#}JCTnO)0UkVk1WiAk*4jTfPkA8=o&HCS22ki0_pY$jo+U<7&#)*4o<>g|gz}zikF7 zfzk`d!4uUsx@yf>;m%clOa0@4wrjA>=AdpPGz;uP>sJ?Q@)bO?SZl|Kn;~pXdUG|< zhQr?&1)9}i*yIAkISP~`BZHzeu0SoGb3bTg)~E<-ZvBK9KD9@pcO*CjD`()Zs$nU18*A^L5;mo~O6~(;;IJL<OX@RWo^WBU>~bO8C7_Ay`eI|+Ai6upAZAqn8&_{hSP5|eZv z!mu9aulD`v7uv8EF?J+7;@T1Qf7HiqscMd$xTnP=KN9#MSB&gqM;7wnH$3{6tgLhZ zeUBY=cS|cN^;V5+a}Ei;ad2>eQNe5$o8G62B!j^m4td{4(aOfy0)Vcp<#CTpP5(ab zwXLmf4*?#Y@)7U)@~vkB(Nju{7OCd_u3^*&m6(S2mq)~LZWuJNdz5@s6zOu_kFAkv z>HB|nX1!C{QB(o`19VQ4!L?bNX27X8ul=9$qIa^a##P``YcJ4Q!H0CW$*B6CQ~no+`~0;3od zx4><2?m(p1vWgHUQ&dOkvC{%bDd*O#q1ZlOLlsNluWO?>z|RDORXu!CaXY)jP&4`T;W`gCg*;8}x;Ak4Ldm}Mdqj|OqPhaMvh*9{!E$-tJJm`Zhtf~Oa#Eyh(#aFsc< z%ih%&aH$uE@Y%dQ85#wt2#@7d%YU<}_PbNHe*_L1FDL-le|vw?oCAhTJG)cdjO_!m zi$or)m8x0m45PjnOiGa?FmET|qm_TWs&aHk~UeBxxtgrY&hbp&~k7K2&nI^y@z( zEYF(}%I!;~CT4 zdQat(@xg5_s)_RHLFV7z_>XiIn<`y}0H~^c34#>}KZsn0TD=USeMvVc&%G)t)iZyO zlpRYuuBnr^m216%AZEOv$Kvq@AP1;kQmkgS9tIwby9Kg?dY)x;_fZ@g4-9L9X*w9D zUKwy&X+g6gHl>((tu5;sRX*$J*w>mG%+G=OiYOs4GRETL{v86sGD2M0txu(XyC>jw z?|1Lnr_ORZ$&J>ZaaauK2PdHv{z5DaTU8gpK~9B8&m*FGRSJYkjp&jyM4`HOAhJ83 zyb3ciFXdzK^D1tOs~lby$&UibUF`<@^pzx6cy8M`3)f7J67pB^K=%RAxO!s88(2#O zM=g~=Tn$}1z95!}jF71#8I(|epp~~}8(#^bL*5T&LU-j+VuEL>p_6gkA#8a+cSW7K z!_?B7jVRT-+scXe;29I$zxCy$c#f4SWjS^aM)porPTB{j+Sy#sk!%Qm;b{Ur1f}4* zWt$7`){IscPm~6lBQT(KSMP*>0^v`~w3nm&Yy+V0-1QwJC<%^}lUMFps(4D<3^N7b zuA}2)=R1cfjF|?b*Kc6HQFIrk2heqq}4K4!bj5wP@j zwe_-Zwl7`F=~)tWol^l;3#w`9GI=YzFj6FP=2yv=Cp&GqA^pbZV^j;Q_<<<|os1#& zwKwJd_Q(@7J$; z62XA{267@1Z8P~tP^WZl7?rk^&p=<&>A@6T{-_H8VM;Gd9xgo_&mRLP8o-JXy@z+5 z21(tlXHP#J45dLyc$^7hd`Sd#tD6rsU=1!Rb$+(s*A1CSajw0&4 zh|~VwO!qb)x3b@$?P|!Arv{Es!$C5{xLXzW2ktZi3?(qHm^+f;)?%96jLt8>5F9OT zGyp6;2HOh#ZKnPLx1nJRp zM%%SAEMd;stz9fB{)l87DCZSSzUfVLD>u6s9Nn6&rl&X zO&^iuew%BOzHLVatD6N=>k7XIcLWwOA#AYh82!q8PahJHclK5&8nmTi68Qb0=8A|R z-gP1XWcJtKQ{Z$krBDn61``m1+iBqssRL)-T27q7j>MzxI1RoEx57LFBr> zzi;p8h=`7M_;X@1kRZ7;Q3%jvj&{9Mf3jfp*ebA*>(iU!zkBT|%Gc0;A$NyEds@+5!_ca*S zpGph01=me-2oP2Q8!2@CH$&)Vx4fDE0mSYXAgJ@(Z$y*rEHny|3pyE&WXcc)h&ecL zDTrLrc;Bv4B6Ron({OM^!jyA3Y?oSOjqUizkWf(p@h9`)!w1?%-*As!~s3NB6gT#>NHjHnOWCJlHcsz)JNN0{M~Es+Hm8OFbaG)6mc)xr@~& zfBlLC9P2|jNx+P*wD}0kP0rfw-OWW*WTet|5>Pc)R#sSD25xUX$grhga#~C@EwQtL z@yg8#!lUVmb1G0=4=*;$OUz(&I4c?*ui4GJ69!=~$Wg^|)|BFH;q~_M3@MaX+N-T- z;fJmub#!z{ynP!ZK=B`a-Zd38WcTM}=$?6q`+vur=@-=NoV)!$jzHkGy;Lcx)X!XT z8sx4{y~hj?2(8a&o1lTapC%N2!LvkISNQnY>1lSHb4Dmq&)i#xa(_ zy2JB>NL}p-7g1 zdf}^`+~yij_#XxM6A^kw#_eC5sdwrr7S~r-xcK-g=23Z2r_IyFc2nr7uJ+KGNscbS1yZ8NV3s{`7)b1TxLbTEHR!^=zn*L^Gaex6{7(GHXTaECcdGRE?!epRe0SP%p&=en z)=$XE2Ye77Y27(xChaJXdHh7%_tb4dRBE8=lAnw1o)ugGSxUV zlY^@s;kSmESj_a5?qDAfH-s zs^>W|rN*=-)1W;j0;D8+McvIb~eWq4Dj2Opo`Z1Q>BVCW7={TZWdtZK}IYMYOREy`7t z!QK0g3#+)zvGDgR%y$9#@3@_uOkHA8TW5y=mGi>CLtaE?Y}ht@!Vzg|x5NfFbFV}| zt}+8rDzATfTG^zKU&5&=;Jccp)Wq*)nv$D1SjwZR3R=Tx; zsbfg3w^MsYGzexNH?}wQL8Ef2Ubwo2e+)y$C#EM7nGSqfx`9thcw@` z39HVvZ48BSE}t@h-g1K8_D=2b1SD^TaIzddmp2LBS=6~R%4&(R>Ax$_;A-DX>ScIN z%ZWqDM(S6`TP6@zqh!ez)bJGDUVok*kRhrdB>k*g%?m)fb}t9^1z9KZYJsrZVs7OY z^~YHCVt#}0Wz5r@jm=Wf9h%H=dxD$0#VMo#d$CHH5VDF6&`91VD^Z*MtxszNuP@*{Z0tavb%tl#lY9f|kEYIqW9a_>NY1z6N{ zZG613Z>s}a`nqO>sFXysDG}>=$+WClBbgX&+ett;_6FYJ|3J4$ycb4zE;nyB^;H3m zJ4O!Q6=M63!0 z3aD<`DN7y-q0wMY;iKo09U9Do9K<~(24S_7IfETk)=b&?{MV&5kO?nKN0L533iZuR zyh<3JX(H?48vuSfK-bnriXgS2$rbr_Gl9FFDt6V9X>dC{Ew^QcnE(K?n4|w7HX6fi zOUsBaWS@8k=0tA-6(#1>X74}Hqn9b`&pNB-lmfU>ItEzjqpDeHfggi0)bZfit~`TZ z8{X%VVzAtNN`5QB8e3h={|jAjy?*0y51fMf#K_UzZ201}+^vak_M}*K#IQZ{RHaTt zkknre%!b>gzixcdhM?nMoPEjU9QVM?pJ}wNo|GK`o5Zws-J7G)r&_r;4~(a#YPIZu zrGqtG7wG&tTnp6(?obhJuq6PsRd^FG;y7!PNKI?;93VLs%pGEkmhV4NdzhHvcp|7i zq~SLiu^Hb$L?rhQfSL$^tyB^eozUB(UwW-7{)b)K4+j^l9H-R#31Ifj)HpmZvxSson2sRo?00~A*#{Btd; z79f7WKY95MZ+Y22?Eb3b27*0IH9=}@dFH<||3bJ`n8liAYS$P;eg=g z@TW{!Rz<2Nf#RIB+#2JvTS8nIkp9xWqyQJjtz00l3`did4(>T9|0@%iNq}bpxEIFd z$rc^zcQ5eQH4}5tK_+J21ALvW&`?NRgJo)mnS_MU>sbVF(57J}>lXQ=HA!GxRVZD& zos)fob!(Ut^r_&Y2nupPIroPr$?eXqZ6@EHK_Od8%3zw9-(z%iDjJ%v%WZ*C$;qC7 zP5_~&s8MMyS*THII+lwYE__ZDA0MAJSUzppJZ(IfwAEWpMG*A(bQAEWkoP*-|Jf%e z9}dxc#s+Mc)IblS0Ynhz58SlXD8E zyDwIG+9dNytQVV-fjn5|c4iKUCPX+7Q?nkU$p`4BKY#uh)eRP?m&3J9;IeaZcTY^W z;%T}&pG7C+{%_F_4IMpim^*WO?qc~JsMqT0wn#Y6(VT(j(d~`NQ&M26*`Am4L}&`}E32!JiB%ASJ)8ww{mUFzS_5 zOC1~<>RPsqo&hw3RmYVOLp%^ALPp_k#1ewxvf|q2Ui(-ZTXkOm{KP?NCd^=AVc}~) zKqLU1*%nEB&@Zt%Zd<&%7LAuHAs$!jvHhSHOYoo}N{YhuYxSbn&6mk|c74Rw)>c~0 z_wV0dE&lklajlBWg_SR-suMwXkB1AxoTq%{ZJmPb?>b=&jj$u+8xpzMbrrn2zo;_k zS}%57w&nXfSxgD2-t}VdI}2DBoJVsz-<8RcPj&$ni7wY$Ij(z^ldLX<|F_DXi6i6u zxjHrR(x&(L4jcu*lXKUiT;D#TP)8QISIvQ<9mu9C%|t1P^nk)8HaEB_^ILE*6$?w@ z*wL?FR3oFK;McmpC*@^je}N6v*VotMX0Q74@>1*c7C4TrUTcR8_AAZ*;;)QEyXW0SyEjGN9J0KN3*Ykca;y*=FbaJCjyX}J4F`}2 zpK5Gh0FoMRau69>wuKYtx3{-(!tOlx_pwFHyp~h1=j$9lw!4&QH0jJOHomf9nQH^} zW~(tyiXcej8+-$GDC=b+d{#3R>3}5uPW0+aW+qJxo9AJ*Ew2% zWrLL0)B*y&yQfDVcsT)A2W%E_NxPAthYoI*3KHs>Ec7V!{1D`2Hx|`|xi@ zc-?lPG&j`SgBhf`JY>Ckdt!i)qoN{I-6u#o2JN7LLc4V5gN3O*r~QT#d0<^BjO@a| zz?iPJrw4R71jqtKhF?FPY-9x%?kzT_f&x|#4-ZhNN~IulgcP7Z3>eS<@}?|)S~sOP)`sYmV&!<5dEY zpj05j{1qtpVuG`#b*jrm0sOz-Nl2`DfDkfE40Tk77#H%te{1avKe3qtK=icEkt%nq zfKj$@{r(Jcuqpxhv!ek@y@k~0`IdNQ!9gw@&-hlHEO|(&i+Jeo6M;ht^J7rcvv@>Cuq$1E ziYN4O+3T)0RWG>d+Eq5t8c6VlLZSlnU89GQxhFUoP@E@EB82K<5m zax`M?5Ql`vhH|4Sl%DI=jYIPm>b8t?R)&p@A4qX=;rJ*q1oL?FTpkPJ;@u+xq~X#P z@lRJpwTr8YCGNmaC6P%2XiICGHSUde@004BvICc@4zs-B37Z!uPsXqVu`e_L2*}ic zf2r72;yIcX6+0%-JW0wt{PbInIWZ4Ke7ms~D3t&30`!ggdqXxc zM7LP*y@qNEcx20hKirOH{w8+$Uk+A#{iNC31{su&l?ViP+a%9n=wbyPP*e%X_ygz= zKFnRk3i!7VAJz=Fj~}UaK^xa?5=4vZC=tb3LaCl9tL(1bWx1={AL0utmlcFjA8R7> zm#i~Q31N)P7l&t{lN~(@3IHj$oiD^sB)Zpg|FX8y1$VmE*8wNc)BwKyXGLD%+7Jp3k4?q}7MLr& zEs@~hd3%>tS0jo5IZj|P@V0H=D-d=G{&+KbbX0aUJT3?3&(4hHM%;z8+c`;-q!SCi z0-Pll)Z!L5kx40ib1V#?eW7o7t?EdnYH!|ySSyX3Y}HuXsQd^hnjo8%CZ5_GwkUw7 zKQD!>%#zB$>7&SrDJBGygSZj+P2Z)((43!Me@_KqAW9ObAXv3aBX>p~(%a?t-mh@0 zZP$~Z%ssXXYr9qeS|}ZS0|`H&l(o`jtD>|oahZeyqeW9DP8vJmubDUH3-B!@P`~ZD z$n?vUK&J~>4cC{}4T@Y*OIBE3vX=2E5W|OnPqx(N2>^?W%^#hRQLXG-OKG^GboO<6 zOJQzsSs7FyuPQ>`YUfOlLf<5#ym?JzNRw!>{LvmXZ-8|$j<3rm2+Hr&D-SZqp^W>N z@+Gcfrpl(Xi*Rq}Y?#2|Mb&7&E72Zl0EpU|w;qquZrVVR!qJ{;PAyI1GA=oOF9^V( zlmV2;(*X}4;M)kVPpT8+OBv(g)nYw|eEF*?T4Jn*WM6}LROuu7e#C1^cWxn)Oy*lT z;ztDYCxar3^c3#G9{>QTVuZO=1QuHb01~|z2<*!r0zj_@d0%&gqCUnxRD@FR7pevs zb;!Ab>nfZ8kECTUnFMk;_*)o`9wYMLJ92?~k{i_j=vL*F?d7(?D^`>MCmGabL8245 zSQ(C@xAGbI%7Vs_02F>p6I;P;P)IsVlB&8>kiQGyr7QpTr*p-Wj2DT8n^y07~S4T0RKJ4-JVv z^aGT4c{-}FHC0N@yXe8m)_D39k6u1AEv@CFjg(OPD%>eqJVCMXp$;zU3;pav2MnHs zxVZS=ku2~k1wiZVItjuFqQCY)!WIJ(shW-}Exi7O_hJrJ5kNXX0#d_$nef*ofR|BN z&exqaO!oa3c*`{2p5u!KyG3!03z#B7=MC&Xsgx;gK>=;;9f6I_i4Xz8SfK9$|& za7k(M?qCJw<<*_|Wb*$8*CZEXTzpE=SPi`LNDvo8oysz36~=zi0(mo@dxx zc5BjbvbEl6j|eOW+$9QBWTS(H;Nr)^Ubilw&_cEf5V;>OHCFBgc#HbLT!ZP5tcP>J zRIE$d3-m%)Yf+fw0;j(=xvXZQb8}ygjEuY^XJcff0(%CC_8iSRT1mC9S3oJf=|llB zupt8f=1&27ZtiDGUnb8^PTGcsiu;QhQfw^6F=F-w1}AsI*f*{Txbg_~{-Fj5&~0GG zM8m;pUUNM}-`)-<5S{c3qyLc99kFAgBg*1-2rc`g}il;acX?+5#MTAfUp*BBgnLZiFuR#xn%dM6fmJw0IJ;2uVcqS^r9czk3F z3R?bDS!wP!KX~z2&vh$^-nHxA9}|N20~D%~FvND@X+RDKuBpj{;tk*@4)&fk8Px>P zdllC63ETykyYT1@8@5C$z5HqSL6h9)M$CP_Ex|vFNRP zOa@->u+bmy2UK7%J)npv4)B79fQ_#^E(}5ymlkf9LmD{R&JF;1EHKsVlcNI~cXNaHJ_camZHcP;cI_C`sLrwszU@55K zANAV$7IWl6{I&33k-TjkHO6t&=6zb=p;C?Tott?v11>nb0Fag*!D|Ga_XZT*Z2A|~ zx!E+LaY7!<_I2-QE|FCScHU(Pr2HI;HbRBC9B0RX5lx^xjd%(QlzpJQ36%29mI?;i z#|)FrO9|nvP$I;P^gi3k=9HTD`j87-Kz)NZfXq$t9FHhGiC_d29+D}zOa+U9kzq%) zw&oeVD5;m{{9H45J;9Ol-p)5!IFIxFXAeZkQJKk-r*a`kg&s6D=u+T}0au=<+#^99 zN6o&!s@#{P)eqHZ4kR91Cs`V9JF)Zl_<~ytT+t~5J3t7MxDP~6>Qz^HHy#xHQ`n`^#TSXx)UDt^IQec-~QTPTPL-l;I=M*Xio^u3_>*KgXO zWEL(i3)^{enqRq;E`LA)qXmex*P>(gM=aX1)l#n@6EM}&-kpy;ovLNrTLtr5`1Hjp zPN_lU5fg)#H$F+6Yqw|AberFTtprhvJM*!#)i)c5uYy^Zv+~8O6@C=Y;qOY1e%V)* zcW?v|W`Pqu&FM-5pEW8>eR-SuLYK5SRbv$rmq9~o7@>VbRx5E4V9fCFgm}2oR;A5R z*1BTYEyf(jayUVFW+j8hx(!uR&bb|k32_3>mF6Nfoy6M{eRRVcWGxhpyAY;u=UStk zUgic>aA&W;_eD~jx)b@~;l}iE*q0qr@N5w>&9Entb_(#&bht2Y^hBUNpa9j>aJNm5;69{BVsEXH_ zk?*_W=f=Ds24=L7ezGsWw`0o}aMax6mVS+tLPhcFHssYPcFovDU2Kkz*>XP=+5I{_o7d@_v_Js^~jF>nh^%8HE5-9g5J8T|8^*BpuX{O9c?zB7Q=JiW$(T zx6pnh$S;Y}7>{vA0_lE`TswyJCCEcn=xVkq{W-ccj2PAXzG;Jn*M-ph!3*qw9C9Ny z4>&nVkgu(T00YWs5xuzm`Gq%t%AZ*kQzG#)JRFWGfH%1!3*}(ynQtiq zo}pxMwxezw+{cH<96V%bVwnI>Qzku3wk5cKGYsd^=ua_X9o%#5S3R-kp7lA-d!l>i z=nG!JJAL(ITlsdW!&9FZI~T%hz6@*rc?kuAkSo&2%%4?qCCXgsf?5`P88Wb@K_{M* zrA|0!-%?9dr|&HnwEdF<88O2kEeR0&J3^tvZU^M8q^CryA5wX|oz(ng!_7Zz?jcM= z)7(m`?&~WRe1wYg!iDf>&rSeTrS7>Af+t7(m}04mbt3>VsrE`^aUkw;pEjbo=rAu{ z>~+R_dvdRKz-O|8=l9IF!8RZRw^Mi3bGns`is=K8HOX>8vLPWM;Qow+y0tQ7oteJ5 zo1A5Xk)o89m8HtM0})i!JA_&Q#W+>;9R}SLXF%ChRgZ!%GS?I{lKSbBCSWLC?oo)bIPVs- zFC>r6ZGj}RgGzk#>eZ`6atFI2F)}OULqkI{8-wQf`rgMBv|A(CeccjqPFGzNH^%4v zXbd|Qm6Q=o+Y0=zM)`h&V5HI{nPW%_)ljo~rfiROW`O7Tw^V$FUoeV6IK0WLM!Ai$hP zJx3fYecw(Jt~fJRPDNt0F5^)YlhA_2eL5gYf)=oP<>V#rUM=}q5Boeu=h4d@HM)cbisNZNB) z$p>5Qa$7j|gCBoXa*B@CS)Vz}2>C4UO`({;&N%VK$Jq*$qX1+57^@Wr%oIT|E605c zr+&g|!G5gb=;&C0zx7-=B$SHT75cNinG{)BStN<=e1s%S&=@7OM2-`aYRC4r)r2%;+`Z$4*hx`2DxvB z+MIZt`+Ki!%=f&&8;FSK3AC9k;O?Z&@0&X;+Wv>iOvl9~L+AFeT<*16V<6=0E|*6V z$`N;Ry9tXialCIzx=CyKoyzwDL86;GyR7exbcb{Cj zGok5A$km{yi2;KiWcOf#h`&@cCsAL$-O&F;MlUeYCnjR`W$Ud^)0MQhbhS}tLIMZH z={+}ueSE*=Meqx7CgJsGY}it(Gor$T0s3zQwBiE^SQj7m9BIs?+&|;&&bqs1T}bQ0 z-6Dvum8@ol2I-)7roM;^?20#8-05UdVlxi6K9dzifU5&ZkC~MuHKt+xP%2)D;ClKH ztWryEW3fR>tiN~0KE=|3O(S8A*nSV(h0X)ouiR!;xVsC@Z<2r9d&@^e8#vlLcW4&9 z&m=nbxLO*bb*{Z=6knp6i-hQ0LW+pCLrD<)4_vtGs*3w6&0!VnX*Odu^W(W0{9^<;r@-)aH$-r6`zIG^;33bA1z1x zWK#1Rhsm2-2E=e}6|qQpL!H4Jr8==zHD z@V}Rlbvq=jRZ331hFjc`nq174bKn$BR~yJW$zc1H)zOD)Mus?I|M+@JGulf(y{rE9 zKDlnaH32J2!CCZbg}l-ud}g`87&>?^&QFb9rdZm#6`Ut%$(|NfrmF-?&&xg~e?iZ( z`EB~z582_-1IJS=D02rkuXlKc{B+wc(LtYp0 z#FNK~qu8*Wb~**;n7$MMn39SMI=aZq*MrmkA=xiqWI zi?-7+6r&ERN#x9Leh~c`!bqxNDdnWxeu$&koofmZd8wXIoz_wrR4jFSJt2ugB+#kC zwcmkc)Bosrpl*JgE24@c%j1eg>nT7wlh1VT#-Mi2(~bkphq#N6nBUiDrm9g^d9yK8 zYCk(9LI^cy=6JzInL=7VZ;-Cqb&-!JrkVZCchKRbg!az_?}%!Zgr{XH-S&w)qSuUL z{(9+WEXF_4UtbPg{ZUKd>=s_6gbR=zC8fJ}gwjsHLst`B$oCvo?8` z-{5>=xVGD`r>ZhqW^DdfSUfR8*8UBCHPxX>%!cpgy*o+b;Ek6VuT_ki)lQ8yY6{lU zODzoE@mU1`%uvC$mxHGIaygv6(=9nW*Aqi5AXi#tGt@q(P3P&*?cBzl91uFbYbhR- zUQcIDrJp7OnM<`;4GR<3BM`2YELO)1rr`>yM2NzGZ?W!_JuX6cY|h*){)xrl+mvmg zmI*zyXM>Lu5sEWp$mltUM6{|y>R^re*I!x1Uf9u?N{CE+O1XlA(6ut{ZjcQGTkm@$ z9OL1Cy!}zWm!dFUyFrW0OqIQ~ih?}&rQ2vj)wYxTcXOZBjA&3kV#d7_!t#pFRKDn# z(?>gY$KDJ)7(W_qk(LKtaD#7E*i&Yji{jwM>3QD>Awn%X1MerxfpC`DNo)!mkpG1O z!9Ml=;m@pZ)OBWm0W)%g+WjTOYpHp$;-kIvoF^2b`%5m}`r~ZOL-yBG7V5-$3S>g_ zliv5PA9@{qj?+<@RQ*=pBJ_H9*C?0L%?$^dpgE)DgD8dNOb6kyO$IYf0Y|FY=?tvV z&!B&+zPT=303oT4z(=#UvJK|Z+kW{wlZgY(?bu=CX>=wjr04->-{{41cyFKD-?nY{ zLP4~QQb0|jM<*kZjHkRCo5uYoNn`al^ch31nUzeI>_sT#eD7M_e$&Vy8XNSi`nc8- z1H=ieXC?>eeeu*!f4va>I+)r?FoL<3dd=_9FOAnityIZxSVeBMiEuRt5g~LLET;Ha zqq{Eey1@mnJqi|34GdW&mwa0!nkd(K)?$Nnrex+17-r^kmC(t6$?DBRO0ix+gW+5a41H3^nFG4ad?{;^d~W8`mrd# z>n_Ax0YnD`BDc)YuW#N41hfcBpE$6ltm`8c^S7lJ?{Rueb8OPf2}y&KzQYpv%bl;X zZk-3RQUfLs8uWf2H15*8Nb-%bnKU(LJ;8LrSy ze$G*$MaW~YG$V-Z@}_v0AQl3J04a_H6f6^ZJ!tQg2Hu)%FO+`lO1oux8y#zwyoaLK zcrf+Bt^MrCwJ^VlF03A^P+jTWkZswlTIuStL675u`TeQH!Uwg7^81>Ik|_Ctw&Ke% zBPoxd`LSaMFE*s?To*YRq1>udC@TT^vX-F1OX78=Y~hfSNSl zZAv(Ej8r=11LuvT5%HVU5D9`10U3^tv&-HDKhSgGf~Je-TR^ROcim!eomS#l4^B+_ z@()U&2V3}OK29X7#aIbbmS!(ciaL9XvZxB*a7mwDq<-W0uuAS~Hi6&Ih=iHi(it1Z zV}liZtR8j!$7$N@`AQxX)OEWQ8^EU^oB(7?URUFTY2Ue9R$^y!2}#R^2Oeh*7$2en zPEPKCeq80|P0*+2Ocju|VRmcnrz(@|+v~$m472$`Im9GM6I%iRyfstfgc1?6dTHgrq>4@I_MA zBiB<$)y5ZmHd7G}T^ z5)z&Szjal#r-@bjLyQy|*ob0dV{@Z#fS^?-@h>?;dwqR91r-&aB;KFtb2SU=teyP&36RqD|*U!7+_4gtVBFJJmFxX=nse9J08X0zPBm<5Xr`z>VkcT|*1thGl zy!Tl@sMrw${-sOL{A$EVICzSl1+=?$NSGiQ2>Gr@CD2C7e5L{seNV#^OyKPQG5G0T zP}bHyMFe>QUyFj?;%p)37bMNRlIIZt#Ol+hPn9(^1b`vg+TNbT=TmDXtrl2TbcGuo zTibjoe>1#a2*y-3_|oNN1XnjXnFHZuz=)LGZGIH@sBO}@7}kJN6cg!He}5Tp#3RAZ zz3Dv$o(%lP;eE4Q{QSM=s*$Acy()XQw5cfzuqj=2brlA^F@W$7VKhugDb4ek|AvSz z9#l7tgG+FG2Yb-FFjP8J=OY5s=^1!+hz}hh`UDgAuZ_iS#F?+EdT)DWI+9T&^x+}0 zM4!WGBrRMv$wL^z1n|$r91J^`AmM}L?&mB;W3Mp}qJ`1wcnk*fU;O)M%)>*1=53TP zcFHe}*O!bej{4x!5t;d0UuGnLJhY4+4Kh&RypACgo2}RXkxGt4{QTF*^1uFQT%j%R z;pw?z71mfPsiNsNYm_{N>ESaU^XP#D{QF1YU&yQpXorGKG~^jx z{$IvauEMj`^$_v)2^9H|;tmeWyG;*>;dzyQmGtrPi3HdNBFJv%tFt0%lRH{ke5wnQ zD4%IM7_=ZBf=@Ef&%`I1Me_Ybb8vxP5gP=!WPwKk(6GEImw(80@iIytyh6vounJ*h zNSQ#)3#C>)-oVnRzOl^lGZ9it;-7{%<8yG|piu-GO>ge!yU~HQHTNS_ObVKsCqQ(C zxaJlX7P=_zE9WLly5&vI&)eO6F5Eg;<54Jd?*sW+F0K!d3|B6dVl>~EAM^8PJ3BKZ z2MWRJzdP#M&8Gz3!ASUmI5)PyEwi)S+->^BcORC3cstu~lK}kB72cbR`yk?p1o=!h zfFo_V7&(-y@n(%Hpf}7>%;I7YduaRGu)J%q(kb(2pN1Tx-^Rj4NjzE)B?P9tsHKLT z-oYxDY?l#-O2%6$mxTaWaxin zC*nmg#)0#+^e3Qxryu-Wti&ez*70tZgXTyHWc!h59zCYU{a=NjLCS*z?a-S9f56RE zKx-BWva_UJl(Dfro$h%&b33y zr<9YE!+`|7=xI1xHjut;5UH&{H^}NWYDUR)xkHe0Y`$xykyPD)Fb_QdWs`oruScgO zsQa?bN{1prCuQu(9iXTK%DbZoKL?)QbL~LR{^|WSOvbE2nI<{G#B>yK24Cdm<@Hzs z2Kp8}Irk-=`)fZw1ASfe^$IDR=Ca?0JqZ8an|O^WDkvO=t>=3SwH&XHKLqN4{WGCv z;Lkcbi%QahXA94o7)Vr-yO0RaYg7@L>eRsasooO}tL$%Nu_Rmxh^%zq7A$bWzeU8m7{B+ugF9zk{>tkT@xsNVrNt&b82 z4)DAY$2MTF2Qxx&&81FQSw#1Rm|8RU*Usw}p?b_?u7tuzsb!Y0cJ9ewv8Tr7SCDXj z2+W5f#snxWarb%0_7J@Nw&aX8?QK??9JHum#zqc|Kl@i#>m_=<9XjoY6c~NzP5}phCor$TbMy|cE z)a@bYz611)FOeaaIW^{3wv8;DD152R6jY6 T%Hii?h*T8S72aOI`{;iFPD3$# literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-56-output-1.png b/009_data.preprocessing_files/figure-html/cell-56-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..94a1d10ae57edc9a84137f13c4bf8ad66dcbee19 GIT binary patch literal 20005 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 literal 0 HcmV?d00001 diff --git a/009_data.preprocessing_files/figure-html/cell-57-output-1.png b/009_data.preprocessing_files/figure-html/cell-57-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5780af94c2ae0c1581b529175933b93fb92614d6 GIT binary patch literal 14757 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 S85)Rb1nQcGa_-fiAN&VXAA^hl literal 0 HcmV?d00001 diff --git a/012_data.image_files/figure-html/cell-15-output-2.png b/012_data.image_files/figure-html/cell-15-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..c8433b96248e47d8c7947041d3e6cd3dc36b065b GIT binary patch literal 10148 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 JPWegre*s|VPJI9X literal 0 HcmV?d00001 diff --git a/012_data.image_files/figure-html/cell-18-output-2.png b/012_data.image_files/figure-html/cell-18-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..900f7bdc11e7476cca5d11e487d521596db07ff8 GIT binary patch literal 23406 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 VVnrfk$HxEw002ovPDHLkV1k8_g6aSO literal 0 HcmV?d00001 diff --git a/012_data.image_files/figure-html/cell-18-output-3.png b/012_data.image_files/figure-html/cell-18-output-3.png new file mode 100644 index 0000000000000000000000000000000000000000..73474f0ebf0096aa49bbbb645ef51e96f9d6c2c3 GIT binary patch literal 11797 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 DT!i@! literal 0 HcmV?d00001 diff --git a/012_data.image_files/figure-html/cell-18-output-4.png b/012_data.image_files/figure-html/cell-18-output-4.png new file mode 100644 index 0000000000000000000000000000000000000000..69eca06d4493aae00f6cb0124b96016b2c95607b GIT binary patch literal 3869 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 literal 0 HcmV?d00001 diff --git a/012_data.image_files/figure-html/cell-18-output-5.png b/012_data.image_files/figure-html/cell-18-output-5.png new file mode 100644 index 0000000000000000000000000000000000000000..6545aca98531610b883e9a792ac34985848ec1af GIT binary patch literal 3216 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 CqLfzv literal 0 HcmV?d00001 diff --git a/012_data.image_files/figure-html/cell-18-output-7.png b/012_data.image_files/figure-html/cell-18-output-7.png new file mode 100644 index 0000000000000000000000000000000000000000..9647a7c232123d921b358f11575fe27ecfe479fb GIT binary patch literal 5757 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 IR<}d^4{DT?SpWb4 literal 0 HcmV?d00001 diff --git a/012_data.image_files/figure-html/cell-9-output-2.png b/012_data.image_files/figure-html/cell-9-output-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b9fb11781a80a438e6f9a954a673cd49eaae0c19 GIT binary patch literal 4745 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 KW>}%`67wHg6WE{t literal 0 HcmV?d00001 diff --git a/018_learner_files/figure-html/cell-20-output-1.png b/018_learner_files/figure-html/cell-20-output-1.png new file mode 100644 index 0000000000000000000000000000000000000000..cfb85d28ebd72f56e4feaa0ed056dab9c5097068 GIT binary patch literal 176502 zcmb@uc|6qZ`!_t4Ttsyh6=kVLmTXy)U0E^)!8I_j~T=c|HH!uiNXoUPYfdKj(Rz$9Wv@}7{Cxa{rW>hA68bVbnD z&g+_!yPK?}g5*hYK}T1U#nVK-0@(Kj^qN*?j$J#yqY z)7gJcDxj;G&VIkde6X7{^-5#a7s)=cWLKY()yL0zCnq*NzdcAxdZw>v;`?nbq;9_E znXm8CSYTi9;)-g+v`uQh6SC63UyTpGi7ssWukTQ(w*su8|NWf?%gD&?|NgEJb$A_S z`=2lFuv_Z?^>@t=PQi8@uk3jeS-LWK>25k!Pu%NbPA zb~B;el)c6xOdnrR9CfK*rI#`gV|nubgF;=}^)Q(kwv?}uD-3^>vG2ckp%69rzwLs; z|LJ!9KSuoDe53I^gEbX%H2y|DN?d$l#@{)Znwg8t zZ~W$8`}WcBcEK}#zsE2>zP`z;Ct>izEiruEU1ThF;~>x0TE_4EeKu|D*1gW@er!DJy5L+Dhj9e}{Hx5s{OZH@?J#3M-dRxsp{#MxivS|JumvcqMJ{ zAL9QwvGlS3V<-Oqv&#Rq6GM3Ty3VF%b69}ZE1-^NoCD8Dy|ycphwhW@uVEdUTSSWm zyGl=-4iTgF2t`V=63US#n*cV&ty&LZHU0MuXRia zC^;^W3(4#^5l^QYSvCGxpKCPByNyFeTv`skGuJs9Z^o7l2k6o-wpIK&6B_>4=+-O7 zX7kdC12sGJmeI&qxDP43xq-jlc>L#K3Y!s@doOb02@k(S7S46z{1#GXF!1QNtQ)h0 zE3aZ~ZjpobATtxGlhT$LS3`E7@a*e-l!M_LLyv^6?}dM>c5qao7x(*IDg4irI1K)0 z*m>rnSUz|G${f=$>*ws4`=4j>mdJ*?!(m=YTL+kG6nKNKzF+c70zCR&^_G*uX3bp+ zcmt|DK1+)(`|4%(01~Hi*g5ZZ?b_6-o&~>%i+&k7f2$!*zgzrEH}W}&$!(LW$2g3u zqyL&J@P_>U$P--ADKk#+&);ISUePXD&>T)Dr^;3Cf|;k0m&nb>Jfp)Y#3SG+mK=t=~7Ttr|~Y7{_ywm~$-hwxVdH-q)W0%%|bT#P;xp8Tqfz>AY?|6zXK0y)lJ^wzm;hSo!T6 z)LF}`Ngm=C+s=Xarpn&Yq@byHa&RQMf1{Ir$BXUyJI#-_d1p1HiI<|oolL>1wpZkS zHd}v~NJ59(MB>%J=^7tg?!|M;htNM&5)v)i4F1kk=eT@PDjrP!R)^7SO-*Lk-f|(C zlayq=eBs;QvDHyqj-elTgE;D-#|P^@bgUyWaCHxNC7eHv<5Tstyc^zb>;HM~y>9LK;~_e zzy5Cas9e!awPX?G38$`?0wxT2!aVJTRGI~K&z57i>HCbv3bnzH(>$Fin6k;gyAR8Z zmRF-MV{jtdw+^4oF%tvRztea-W)Wr24f8&wbDY!IJXrKj;o$fQ1UrO%<>j=*CLT)N zny$raVok4&?$In{gG~%+!fT|RceV_1zq?qkcDBV925FqSGJE@YuBi?6$aj-hazdDR zv$Oe5ZPNGgYW(nuzC�+a^tE4$dtCm5D(StJ@)Wq~}4YfXy^vCDd8+mTI2 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 z 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%0A0>!iKsCUBk5Dv^ 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