pyrregular 0.2.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. {pyrregular-0.2.0 → pyrregular-0.2.2}/.github/workflows/build.yml +10 -5
  2. {pyrregular-0.2.0 → pyrregular-0.2.2}/.github/workflows/python-publish.yml +11 -0
  3. {pyrregular-0.2.0 → pyrregular-0.2.2}/.github/workflows/sphinx.yml +2 -3
  4. {pyrregular-0.2.0 → pyrregular-0.2.2}/PKG-INFO +2 -1
  5. {pyrregular-0.2.0 → pyrregular-0.2.2}/docs/notebooks/dataset_conversion.ipynb +9 -9
  6. {pyrregular-0.2.0 → pyrregular-0.2.2}/docs/notebooks/your_dataset.h5 +0 -0
  7. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyproject.toml +1 -0
  8. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/_version.py +3 -3
  9. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/accessor.py +2 -2
  10. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/conversion_utils.py +7 -1
  11. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/io_utils.py +50 -3
  12. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/ncde.py +1 -29
  13. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/repository.py +5 -2
  14. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular.egg-info/PKG-INFO +2 -1
  15. pyrregular-0.2.2/pyrregular.egg-info/scm_version.json +8 -0
  16. {pyrregular-0.2.0 → pyrregular-0.2.2}/setup.cfg +1 -0
  17. {pyrregular-0.2.0 → pyrregular-0.2.2}/tests/test_dataset_loading.py +2 -0
  18. {pyrregular-0.2.0 → pyrregular-0.2.2}/tests/test_offline.py +52 -0
  19. pyrregular-0.2.0/pyrregular.egg-info/scm_version.json +0 -8
  20. {pyrregular-0.2.0 → pyrregular-0.2.2}/.gitignore +0 -0
  21. {pyrregular-0.2.0 → pyrregular-0.2.2}/.gitmodules +0 -0
  22. {pyrregular-0.2.0 → pyrregular-0.2.2}/.pre-commit-config.yaml +0 -0
  23. {pyrregular-0.2.0 → pyrregular-0.2.2}/README.md +0 -0
  24. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/images/logo_01.png +0 -0
  25. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/accuracy_mean.csv +0 -0
  26. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/accuracy_std.csv +0 -0
  27. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/balanced_accuracy_mean.csv +0 -0
  28. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/balanced_accuracy_std.csv +0 -0
  29. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/f1_mean.csv +0 -0
  30. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/f1_std.csv +0 -0
  31. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/fit_time_mean.csv +0 -0
  32. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/fit_time_std.csv +0 -0
  33. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/jaccard_mean.csv +0 -0
  34. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/jaccard_std.csv +0 -0
  35. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/precision_mean.csv +0 -0
  36. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/precision_std.csv +0 -0
  37. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/predict_time_mean.csv +0 -0
  38. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/predict_time_std.csv +0 -0
  39. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/recall_mean.csv +0 -0
  40. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/recall_std.csv +0 -0
  41. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/roc_auc_mean.csv +0 -0
  42. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/roc_auc_std.csv +0 -0
  43. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/total_time_mean.csv +0 -0
  44. {pyrregular-0.2.0 → pyrregular-0.2.2}/assets/results/total_time_std.csv +0 -0
  45. {pyrregular-0.2.0 → pyrregular-0.2.2}/docs/Makefile +0 -0
  46. {pyrregular-0.2.0 → pyrregular-0.2.2}/docs/api/index.rst +0 -0
  47. {pyrregular-0.2.0 → pyrregular-0.2.2}/docs/conf.py +0 -0
  48. {pyrregular-0.2.0 → pyrregular-0.2.2}/docs/index.rst +0 -0
  49. {pyrregular-0.2.0 → pyrregular-0.2.2}/docs/make.bat +0 -0
  50. {pyrregular-0.2.0 → pyrregular-0.2.2}/docs/notebooks/quick_start.ipynb +0 -0
  51. {pyrregular-0.2.0 → pyrregular-0.2.2}/docs/notebooks/your_original_dataset.csv +0 -0
  52. {pyrregular-0.2.0 → pyrregular-0.2.2}/docs/requirements.txt +0 -0
  53. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Abf.yml +0 -0
  54. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Ais.yml +0 -0
  55. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/AllGestureWiimoteX.yml +0 -0
  56. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/AllGestureWiimoteY.yml +0 -0
  57. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/AllGestureWiimoteZ.yml +0 -0
  58. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Animals.yml +0 -0
  59. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/AsphaltObstaclesCoordinates.yml +0 -0
  60. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/AsphaltPavementTypeCoordinates.yml +0 -0
  61. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/AsphaltRegularityCoordinates.yml +0 -0
  62. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/CharacterTrajectories.yml +0 -0
  63. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/CombinedTrajectories.yml +0 -0
  64. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/DodgerLoopDay.yml +0 -0
  65. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/DodgerLoopGame.yml +0 -0
  66. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/DodgerLoopWeekend.yml +0 -0
  67. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Garment.yml +0 -0
  68. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Geolife.yml +0 -0
  69. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/GeolifeSupervised.yml +0 -0
  70. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/GestureMidAirD1.yml +0 -0
  71. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/GestureMidAirD2.yml +0 -0
  72. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/GestureMidAirD3.yml +0 -0
  73. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/GesturePebbleZ1.yml +0 -0
  74. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/GesturePebbleZ2.yml +0 -0
  75. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/InsectWingbeat.yml +0 -0
  76. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/JapaneseVowels.yml +0 -0
  77. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Ldfpa.yml +0 -0
  78. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/MelbournePedestrian.yml +0 -0
  79. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Mimic3.yml +0 -0
  80. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/PLAID.yml +0 -0
  81. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Pamap2.yml +0 -0
  82. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Physionet2012.yml +0 -0
  83. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Physionet2019.yml +0 -0
  84. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/PickupGestureWiimoteZ.yml +0 -0
  85. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Seabirds.yml +0 -0
  86. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/ShakeGestureWiimoteZ.yml +0 -0
  87. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/SpokenArabicDigits.yml +0 -0
  88. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/TDrive.yml +0 -0
  89. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Taxi.yml +0 -0
  90. {pyrregular-0.2.0 → pyrregular-0.2.2}/metadata/Vehicles.yml +0 -0
  91. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/__init__.py +0 -0
  92. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/backend.py +0 -0
  93. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/data_utils.py +0 -0
  94. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/__init__.py +0 -0
  95. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/abf.py +0 -0
  96. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/ais.py +0 -0
  97. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/animals.py +0 -0
  98. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/combined_trajectories.py +0 -0
  99. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/garment.py +0 -0
  100. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/geolife.py +0 -0
  101. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/geolife_supervised.py +0 -0
  102. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/ldfpa.py +0 -0
  103. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/mimic3.py +0 -0
  104. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/pamap2.py +0 -0
  105. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/physionet2012.py +0 -0
  106. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/physionet2019.py +0 -0
  107. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/seabirds.py +0 -0
  108. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/t_drive.py +0 -0
  109. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/taxi.py +0 -0
  110. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/datasets/vehicles.py +0 -0
  111. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/describe.py +0 -0
  112. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/dev/__init__.py +0 -0
  113. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/dev/repository_dev.py +0 -0
  114. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/__init__.py +0 -0
  115. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/borf.py +0 -0
  116. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/brits.py +0 -0
  117. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/grud.py +0 -0
  118. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/knn.py +0 -0
  119. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/lgbm.py +0 -0
  120. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/nodes.py +0 -0
  121. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/raindrop.py +0 -0
  122. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/ridge_cv.py +0 -0
  123. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/rifc.py +0 -0
  124. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/rocket.py +0 -0
  125. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/saits.py +0 -0
  126. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/svm.py +0 -0
  127. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/timesnet.py +0 -0
  128. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/models/torch_dataloader.py +0 -0
  129. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/reader_interface.py +0 -0
  130. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/registry.txt +0 -0
  131. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/uea_ucr_datasets.py +0 -0
  132. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/wrappers/__init__.py +0 -0
  133. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/wrappers/pypots_wrapper.py +0 -0
  134. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular/wrappers/tslearn_wrapper.py +0 -0
  135. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular.egg-info/SOURCES.txt +0 -0
  136. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular.egg-info/dependency_links.txt +0 -0
  137. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular.egg-info/entry_points.txt +0 -0
  138. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular.egg-info/requires.txt +0 -0
  139. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular.egg-info/scm_file_list.json +0 -0
  140. {pyrregular-0.2.0 → pyrregular-0.2.2}/pyrregular.egg-info/top_level.txt +0 -0
  141. {pyrregular-0.2.0 → pyrregular-0.2.2}/setup.py +0 -0
  142. {pyrregular-0.2.0 → pyrregular-0.2.2}/tests/__init__.py +0 -0
  143. {pyrregular-0.2.0 → pyrregular-0.2.2}/tests/_deprecated/__init__.py +0 -0
  144. {pyrregular-0.2.0 → pyrregular-0.2.2}/tests/_deprecated/test_dataset_conversion.py +0 -0
  145. {pyrregular-0.2.0 → pyrregular-0.2.2}/tests/_deprecated/test_dataset_sanity.py +0 -0
  146. {pyrregular-0.2.0 → pyrregular-0.2.2}/tests/_deprecated/utils.py +0 -0
  147. {pyrregular-0.2.0 → pyrregular-0.2.2}/tests/constants.py +0 -0
@@ -4,15 +4,15 @@ on:
4
4
  pull_request:
5
5
  branches: [ main ]
6
6
  workflow_dispatch:
7
- release:
8
- types: [ published ]
7
+ workflow_call:
9
8
 
10
9
  jobs:
11
10
  build:
12
11
  strategy:
12
+ fail-fast: false
13
13
  matrix:
14
14
  os: [ubuntu-latest]
15
- python-version: ["3.11"]
15
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
16
16
  runs-on: ${{ matrix.os }}
17
17
 
18
18
  steps:
@@ -35,6 +35,11 @@ jobs:
35
35
  run: |
36
36
  pip install ".[test]"
37
37
 
38
- - name: Test with pytest
38
+ - name: Test with pytest (offline)
39
39
  run: |
40
- pytest
40
+ pytest -m "not network"
41
+
42
+ - name: Test with pytest (dataset downloads)
43
+ if: matrix.python-version == '3.11'
44
+ run: |
45
+ pytest -m network
@@ -8,7 +8,11 @@ permissions:
8
8
  contents: read
9
9
 
10
10
  jobs:
11
+ test:
12
+ uses: ./.github/workflows/build.yml
13
+
11
14
  deploy:
15
+ needs: test
12
16
  runs-on: ubuntu-latest
13
17
  steps:
14
18
  - uses: actions/checkout@v4
@@ -33,3 +37,10 @@ jobs:
33
37
  with:
34
38
  user: __token__
35
39
  password: ${{ secrets.PYPI_API_TOKEN }}
40
+
41
+ docs:
42
+ needs: test
43
+ uses: ./.github/workflows/sphinx.yml
44
+ permissions:
45
+ contents: write
46
+ pages: write
@@ -1,9 +1,8 @@
1
1
  name: "docs"
2
2
 
3
3
  on:
4
- release:
5
- types: [published]
6
4
  workflow_dispatch:
5
+ workflow_call:
7
6
 
8
7
  permissions:
9
8
  contents: write
@@ -39,7 +38,7 @@ jobs:
39
38
  make clean html SPHINXOPTS='-a'
40
39
 
41
40
  - name: Deploy to GitHub Pages
42
- if: github.ref == 'refs/heads/main'
41
+ if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')
43
42
  uses: peaceiris/actions-gh-pages@v3
44
43
  with:
45
44
  github_token: ${{ secrets.GITHUB_TOKEN }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyrregular
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Irregular time series made easy
5
5
  Author: Francesco Spinnato, Cristiano Landi
6
6
  Author-email: francesco.spinnato@unipi.it
@@ -8,6 +8,7 @@ Classifier: Programming Language :: Python :: 3
8
8
  Classifier: Programming Language :: Python :: 3.10
9
9
  Classifier: Programming Language :: Python :: 3.11
10
10
  Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
11
12
  Requires-Python: >=3.10
12
13
  Description-Content-Type: text/markdown
13
14
  Requires-Dist: awkward
@@ -242,8 +242,8 @@
242
242
  "name": "stderr",
243
243
  "output_type": "stream",
244
244
  "text": [
245
- "Getting dataset metadata: 100it [00:00, 24153.78it/s]\n",
246
- "Reading dataset: 100%|██████████| 100/100 [00:00<00:00, 33942.74it/s]\n"
245
+ "Getting dataset metadata: 100it [00:00, 25472.51it/s]\n",
246
+ "Reading dataset: 100%|██████████| 100/100 [00:00<00:00, 31818.42it/s]\n"
247
247
  ]
248
248
  },
249
249
  {
@@ -797,7 +797,7 @@
797
797
  " * ts_id (ts_id) &lt;U1 12B &#x27;A&#x27; &#x27;B&#x27; &#x27;C&#x27;\n",
798
798
  " labels (ts_id) int64 24B 0 1 1\n",
799
799
  " * signal_id (signal_id) &lt;U1 12B &#x27;X&#x27; &#x27;Y&#x27; &#x27;Z&#x27;\n",
800
- " * time_id (time_id) datetime64[us] 800B 2023-01-01 ... 2023-01-05T03:00:00</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-obj-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>ts_id</span>: 3</li><li><span class='xr-has-index'>signal_id</span>: 3</li><li><span class='xr-has-index'>time_id</span>: 100</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-4abf8180-cd7b-487b-bc63-83dd4ea933a3' class='xr-array-in' type='checkbox' checked><label for='section-4abf8180-cd7b-487b-bc63-83dd4ea933a3' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>&lt;COO: nnz=100, fill_value=nan&gt;</span></div><div class='xr-array-data'><table><tbody><tr><th style=\"text-align: left\">Format</th><td style=\"text-align: left\">coo</td></tr><tr><th style=\"text-align: left\">Data Type</th><td style=\"text-align: left\">float64</td></tr><tr><th style=\"text-align: left\">Shape</th><td style=\"text-align: left\">(3, 3, 100)</td></tr><tr><th style=\"text-align: left\">nnz</th><td style=\"text-align: left\">100</td></tr><tr><th style=\"text-align: left\">Density</th><td style=\"text-align: left\">0.1111111111111111</td></tr><tr><th style=\"text-align: left\">Read-only</th><td style=\"text-align: left\">True</td></tr><tr><th style=\"text-align: left\">Size</th><td style=\"text-align: left\">3.1K</td></tr><tr><th style=\"text-align: left\">Storage ratio</th><td style=\"text-align: left\">0.44</td></tr></tbody></table></div></div></li><li class='xr-section-item'><input id='section-eae02499-04bf-4dae-b8a0-ddf714891236' class='xr-section-summary-in' type='checkbox' checked /><label for='section-eae02499-04bf-4dae-b8a0-ddf714891236' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>ts_id</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>&lt;U1</div><div class='xr-var-preview xr-preview'>&#x27;A&#x27; &#x27;B&#x27; &#x27;C&#x27;</div><input id='attrs-911d7824-7d8f-40ca-b325-29665373ae51' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-911d7824-7d8f-40ca-b325-29665373ae51' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-449e024f-04f4-4122-8ee7-32b8ec15fe99' class='xr-var-data-in' type='checkbox'><label for='data-449e024f-04f4-4122-8ee7-32b8ec15fe99' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;A&#x27;, &#x27;B&#x27;, &#x27;C&#x27;], dtype=&#x27;&lt;U1&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>labels</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 1</div><input id='attrs-b839ffba-b7da-4325-b8fc-15107f5db415' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-b839ffba-b7da-4325-b8fc-15107f5db415' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8582f68f-f911-487a-94d5-f8c86a8b7018' class='xr-var-data-in' type='checkbox'><label for='data-8582f68f-f911-487a-94d5-f8c86a8b7018' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 1])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>signal_id</span></div><div class='xr-var-dims'>(signal_id)</div><div class='xr-var-dtype'>&lt;U1</div><div class='xr-var-preview xr-preview'>&#x27;X&#x27; &#x27;Y&#x27; &#x27;Z&#x27;</div><input id='attrs-ada5a3e6-3325-45d9-9bd1-bd3df3d7234a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-ada5a3e6-3325-45d9-9bd1-bd3df3d7234a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8d44c691-fddc-4bcb-a205-8f4fca851916' class='xr-var-data-in' type='checkbox'><label for='data-8d44c691-fddc-4bcb-a205-8f4fca851916' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;X&#x27;, &#x27;Y&#x27;, &#x27;Z&#x27;], dtype=&#x27;&lt;U1&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time_id</span></div><div class='xr-var-dims'>(time_id)</div><div class='xr-var-dtype'>datetime64[us]</div><div class='xr-var-preview xr-preview'>2023-01-01 ... 2023-01-05T03:00:00</div><input id='attrs-857daf39-d1bc-43b4-9b46-1495e5314316' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-857daf39-d1bc-43b4-9b46-1495e5314316' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-eb298e55-83d1-4221-8845-fc4d8f7b9b77' class='xr-var-data-in' type='checkbox'><label for='data-eb298e55-83d1-4221-8845-fc4d8f7b9b77' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;2023-01-01T00:00:00.000000&#x27;, &#x27;2023-01-01T01:00:00.000000&#x27;,\n",
800
+ " * time_id (time_id) datetime64[us] 800B 2023-01-01 ... 2023-01-05T03:00:00</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-obj-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>ts_id</span>: 3</li><li><span class='xr-has-index'>signal_id</span>: 3</li><li><span class='xr-has-index'>time_id</span>: 100</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-80ed1c01-b22d-47c9-af4e-a75c9a022079' class='xr-array-in' type='checkbox' checked><label for='section-80ed1c01-b22d-47c9-af4e-a75c9a022079' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>&lt;COO: nnz=100, fill_value=nan&gt;</span></div><div class='xr-array-data'><table><tbody><tr><th style=\"text-align: left\">Format</th><td style=\"text-align: left\">coo</td></tr><tr><th style=\"text-align: left\">Data Type</th><td style=\"text-align: left\">float64</td></tr><tr><th style=\"text-align: left\">Shape</th><td style=\"text-align: left\">(3, 3, 100)</td></tr><tr><th style=\"text-align: left\">nnz</th><td style=\"text-align: left\">100</td></tr><tr><th style=\"text-align: left\">Density</th><td style=\"text-align: left\">0.1111111111111111</td></tr><tr><th style=\"text-align: left\">Read-only</th><td style=\"text-align: left\">True</td></tr><tr><th style=\"text-align: left\">Size</th><td style=\"text-align: left\">3.1K</td></tr><tr><th style=\"text-align: left\">Storage ratio</th><td style=\"text-align: left\">0.44</td></tr></tbody></table></div></div></li><li class='xr-section-item'><input id='section-de45d65c-5d7e-4a81-8c91-ec68d1449b2f' class='xr-section-summary-in' type='checkbox' checked /><label for='section-de45d65c-5d7e-4a81-8c91-ec68d1449b2f' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>ts_id</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>&lt;U1</div><div class='xr-var-preview xr-preview'>&#x27;A&#x27; &#x27;B&#x27; &#x27;C&#x27;</div><input id='attrs-e559913e-d5b2-47ce-8eeb-3134c684a40d' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-e559913e-d5b2-47ce-8eeb-3134c684a40d' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-bc405cb1-0ec2-4733-8421-b9e2a28356fa' class='xr-var-data-in' type='checkbox'><label for='data-bc405cb1-0ec2-4733-8421-b9e2a28356fa' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;A&#x27;, &#x27;B&#x27;, &#x27;C&#x27;], dtype=&#x27;&lt;U1&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>labels</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 1</div><input id='attrs-f416c0ed-07a4-4eca-8e1e-17c10a779380' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-f416c0ed-07a4-4eca-8e1e-17c10a779380' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-99ff9606-9c79-4cdd-8d2c-b3b68944936e' class='xr-var-data-in' type='checkbox'><label for='data-99ff9606-9c79-4cdd-8d2c-b3b68944936e' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 1])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>signal_id</span></div><div class='xr-var-dims'>(signal_id)</div><div class='xr-var-dtype'>&lt;U1</div><div class='xr-var-preview xr-preview'>&#x27;X&#x27; &#x27;Y&#x27; &#x27;Z&#x27;</div><input id='attrs-f279ed0e-01b0-46cf-8fe9-29836d4ef14f' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-f279ed0e-01b0-46cf-8fe9-29836d4ef14f' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-32e31c09-ba4d-47ca-ba7d-51f20ed16e05' class='xr-var-data-in' type='checkbox'><label for='data-32e31c09-ba4d-47ca-ba7d-51f20ed16e05' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;X&#x27;, &#x27;Y&#x27;, &#x27;Z&#x27;], dtype=&#x27;&lt;U1&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time_id</span></div><div class='xr-var-dims'>(time_id)</div><div class='xr-var-dtype'>datetime64[us]</div><div class='xr-var-preview xr-preview'>2023-01-01 ... 2023-01-05T03:00:00</div><input id='attrs-347111b2-549a-4bdc-bb88-eb752cb6d907' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-347111b2-549a-4bdc-bb88-eb752cb6d907' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-9fedf652-6cde-47ed-b4fe-f6b6b06ed435' class='xr-var-data-in' type='checkbox'><label for='data-9fedf652-6cde-47ed-b4fe-f6b6b06ed435' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;2023-01-01T00:00:00.000000&#x27;, &#x27;2023-01-01T01:00:00.000000&#x27;,\n",
801
801
  " &#x27;2023-01-01T02:00:00.000000&#x27;, &#x27;2023-01-01T03:00:00.000000&#x27;,\n",
802
802
  " &#x27;2023-01-01T04:00:00.000000&#x27;, &#x27;2023-01-01T05:00:00.000000&#x27;,\n",
803
803
  " &#x27;2023-01-01T06:00:00.000000&#x27;, &#x27;2023-01-01T07:00:00.000000&#x27;,\n",
@@ -1515,7 +1515,7 @@
1515
1515
  " * signal_id (signal_id) &lt;U1 12B &#x27;X&#x27; &#x27;Y&#x27; &#x27;Z&#x27;\n",
1516
1516
  " * time_id (time_id) datetime64[ns] 800B 2023-01-01 ... 2023-01-05T03:00:00\n",
1517
1517
  "Data variables:\n",
1518
- " data (ts_id, signal_id, time_id) float64 3kB &lt;COO: nnz=100, fill_value=nan&gt;</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-ce85ace2-9a6f-4d49-b7f3-38ec52301e28' class='xr-section-summary-in' type='checkbox' disabled /><label for='section-ce85ace2-9a6f-4d49-b7f3-38ec52301e28' class='xr-section-summary'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>ts_id</span>: 3</li><li><span class='xr-has-index'>signal_id</span>: 3</li><li><span class='xr-has-index'>time_id</span>: 100</li></ul></div></li><li class='xr-section-item'><input id='section-a2324eba-9f96-447e-bded-ab80c4e2cd65' class='xr-section-summary-in' type='checkbox' checked /><label for='section-a2324eba-9f96-447e-bded-ab80c4e2cd65' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>ts_id</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>&lt;U1</div><div class='xr-var-preview xr-preview'>&#x27;A&#x27; &#x27;B&#x27; &#x27;C&#x27;</div><input id='attrs-414651ba-b1bd-4b29-ba60-38e0de775b69' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-414651ba-b1bd-4b29-ba60-38e0de775b69' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a6ea00f4-40cc-40fd-a576-9798a270f767' class='xr-var-data-in' type='checkbox'><label for='data-a6ea00f4-40cc-40fd-a576-9798a270f767' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;A&#x27;, &#x27;B&#x27;, &#x27;C&#x27;], dtype=&#x27;&lt;U1&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>labels</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 1</div><input id='attrs-5b6f691f-9148-42b8-9f51-9aad1fd4e584' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-5b6f691f-9148-42b8-9f51-9aad1fd4e584' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-7dce5765-6e4b-4151-a933-e44c40697128' class='xr-var-data-in' type='checkbox'><label for='data-7dce5765-6e4b-4151-a933-e44c40697128' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 1])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>signal_id</span></div><div class='xr-var-dims'>(signal_id)</div><div class='xr-var-dtype'>&lt;U1</div><div class='xr-var-preview xr-preview'>&#x27;X&#x27; &#x27;Y&#x27; &#x27;Z&#x27;</div><input id='attrs-3443e8f5-7f63-4247-af06-2b684f78d6ca' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-3443e8f5-7f63-4247-af06-2b684f78d6ca' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-0d209e88-c14f-468a-8fc3-213ddc5f85cd' class='xr-var-data-in' type='checkbox'><label for='data-0d209e88-c14f-468a-8fc3-213ddc5f85cd' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;X&#x27;, &#x27;Y&#x27;, &#x27;Z&#x27;], dtype=&#x27;&lt;U1&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time_id</span></div><div class='xr-var-dims'>(time_id)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2023-01-01 ... 2023-01-05T03:00:00</div><input id='attrs-72bb3d5c-a29c-46ce-8446-dda4202d8698' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-72bb3d5c-a29c-46ce-8446-dda4202d8698' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-695507ee-5dba-4d06-9180-401bc8448aec' class='xr-var-data-in' type='checkbox'><label for='data-695507ee-5dba-4d06-9180-401bc8448aec' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;2023-01-01T00:00:00.000000000&#x27;, &#x27;2023-01-01T01:00:00.000000000&#x27;,\n",
1518
+ " data (ts_id, signal_id, time_id) float64 3kB &lt;COO: nnz=100, fill_value=nan&gt;</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.Dataset</div></div><ul class='xr-sections'><li class='xr-section-item'><input id='section-59d96130-93c5-4933-b532-4dbb28dd5998' class='xr-section-summary-in' type='checkbox' disabled /><label for='section-59d96130-93c5-4933-b532-4dbb28dd5998' class='xr-section-summary'>Dimensions:</label><div class='xr-section-inline-details'><ul class='xr-dim-list'><li><span class='xr-has-index'>ts_id</span>: 3</li><li><span class='xr-has-index'>signal_id</span>: 3</li><li><span class='xr-has-index'>time_id</span>: 100</li></ul></div></li><li class='xr-section-item'><input id='section-cbd4d746-929d-4347-aaac-55488de84461' class='xr-section-summary-in' type='checkbox' checked /><label for='section-cbd4d746-929d-4347-aaac-55488de84461' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>ts_id</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>&lt;U1</div><div class='xr-var-preview xr-preview'>&#x27;A&#x27; &#x27;B&#x27; &#x27;C&#x27;</div><input id='attrs-d1659b37-2b09-444f-84f3-f343ee61f60b' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-d1659b37-2b09-444f-84f3-f343ee61f60b' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a8c18b86-82e9-456f-b8aa-368942237936' class='xr-var-data-in' type='checkbox'><label for='data-a8c18b86-82e9-456f-b8aa-368942237936' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;A&#x27;, &#x27;B&#x27;, &#x27;C&#x27;], dtype=&#x27;&lt;U1&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>labels</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 1</div><input id='attrs-77a7d7a4-6ae9-4355-b6d7-ecb6e0700e99' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-77a7d7a4-6ae9-4355-b6d7-ecb6e0700e99' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-10b050f7-7558-428b-be2a-3fce65f7c806' class='xr-var-data-in' type='checkbox'><label for='data-10b050f7-7558-428b-be2a-3fce65f7c806' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 1])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>signal_id</span></div><div class='xr-var-dims'>(signal_id)</div><div class='xr-var-dtype'>&lt;U1</div><div class='xr-var-preview xr-preview'>&#x27;X&#x27; &#x27;Y&#x27; &#x27;Z&#x27;</div><input id='attrs-2ac2bc73-02a3-4b7e-8ff7-2fe67efd36b5' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-2ac2bc73-02a3-4b7e-8ff7-2fe67efd36b5' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b4fe6441-0089-4378-aa78-74cd1b8e236b' class='xr-var-data-in' type='checkbox'><label for='data-b4fe6441-0089-4378-aa78-74cd1b8e236b' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;X&#x27;, &#x27;Y&#x27;, &#x27;Z&#x27;], dtype=&#x27;&lt;U1&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time_id</span></div><div class='xr-var-dims'>(time_id)</div><div class='xr-var-dtype'>datetime64[ns]</div><div class='xr-var-preview xr-preview'>2023-01-01 ... 2023-01-05T03:00:00</div><input id='attrs-20b50e5f-db50-4427-a77d-a68e695133ca' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-20b50e5f-db50-4427-a77d-a68e695133ca' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-932e0893-b37c-48ce-a41c-edb9bd56148c' class='xr-var-data-in' type='checkbox'><label for='data-932e0893-b37c-48ce-a41c-edb9bd56148c' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;2023-01-01T00:00:00.000000000&#x27;, &#x27;2023-01-01T01:00:00.000000000&#x27;,\n",
1519
1519
  " &#x27;2023-01-01T02:00:00.000000000&#x27;, &#x27;2023-01-01T03:00:00.000000000&#x27;,\n",
1520
1520
  " &#x27;2023-01-01T04:00:00.000000000&#x27;, &#x27;2023-01-01T05:00:00.000000000&#x27;,\n",
1521
1521
  " &#x27;2023-01-01T06:00:00.000000000&#x27;, &#x27;2023-01-01T07:00:00.000000000&#x27;,\n",
@@ -1565,7 +1565,7 @@
1565
1565
  " &#x27;2023-01-04T22:00:00.000000000&#x27;, &#x27;2023-01-04T23:00:00.000000000&#x27;,\n",
1566
1566
  " &#x27;2023-01-05T00:00:00.000000000&#x27;, &#x27;2023-01-05T01:00:00.000000000&#x27;,\n",
1567
1567
  " &#x27;2023-01-05T02:00:00.000000000&#x27;, &#x27;2023-01-05T03:00:00.000000000&#x27;],\n",
1568
- " dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-022407ad-76f3-44e8-9a04-10a5804a9f28' class='xr-section-summary-in' type='checkbox' checked /><label for='section-022407ad-76f3-44e8-9a04-10a5804a9f28' class='xr-section-summary' title='Expand/collapse section'>Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>data</span></div><div class='xr-var-dims'>(ts_id, signal_id, time_id)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>&lt;COO: nnz=100, fill_value=nan&gt;</div><input id='attrs-73c93003-d3fe-4488-8187-c0547c7b668a' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-73c93003-d3fe-4488-8187-c0547c7b668a' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-f9b4a224-0af4-458a-8617-c26729da5b5a' class='xr-var-data-in' type='checkbox'><label for='data-f9b4a224-0af4-458a-8617-c26729da5b5a' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table><tbody><tr><th style=\"text-align: left\">Format</th><td style=\"text-align: left\">coo</td></tr><tr><th style=\"text-align: left\">Data Type</th><td style=\"text-align: left\">float64</td></tr><tr><th style=\"text-align: left\">Shape</th><td style=\"text-align: left\">(3, 3, 100)</td></tr><tr><th style=\"text-align: left\">nnz</th><td style=\"text-align: left\">100</td></tr><tr><th style=\"text-align: left\">Density</th><td style=\"text-align: left\">0.1111111111111111</td></tr><tr><th style=\"text-align: left\">Read-only</th><td style=\"text-align: left\">True</td></tr><tr><th style=\"text-align: left\">Size</th><td style=\"text-align: left\">3.1K</td></tr><tr><th style=\"text-align: left\">Storage ratio</th><td style=\"text-align: left\">0.44</td></tr></tbody></table></div></li></ul></div></li></ul></div></div>"
1568
+ " dtype=&#x27;datetime64[ns]&#x27;)</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-124c2966-ad24-4f21-bc41-ee63c08e54ce' class='xr-section-summary-in' type='checkbox' checked /><label for='section-124c2966-ad24-4f21-bc41-ee63c08e54ce' class='xr-section-summary' title='Expand/collapse section'>Data variables: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>data</span></div><div class='xr-var-dims'>(ts_id, signal_id, time_id)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>&lt;COO: nnz=100, fill_value=nan&gt;</div><input id='attrs-2c6e6bb5-9ef8-44cc-b8e8-1956fd37edd2' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-2c6e6bb5-9ef8-44cc-b8e8-1956fd37edd2' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b291b62a-e414-4f12-ac8e-44fd2cb4c998' class='xr-var-data-in' type='checkbox'><label for='data-b291b62a-e414-4f12-ac8e-44fd2cb4c998' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><table><tbody><tr><th style=\"text-align: left\">Format</th><td style=\"text-align: left\">coo</td></tr><tr><th style=\"text-align: left\">Data Type</th><td style=\"text-align: left\">float64</td></tr><tr><th style=\"text-align: left\">Shape</th><td style=\"text-align: left\">(3, 3, 100)</td></tr><tr><th style=\"text-align: left\">nnz</th><td style=\"text-align: left\">100</td></tr><tr><th style=\"text-align: left\">Density</th><td style=\"text-align: left\">0.1111111111111111</td></tr><tr><th style=\"text-align: left\">Read-only</th><td style=\"text-align: left\">True</td></tr><tr><th style=\"text-align: left\">Size</th><td style=\"text-align: left\">3.1K</td></tr><tr><th style=\"text-align: left\">Storage ratio</th><td style=\"text-align: left\">0.44</td></tr></tbody></table></div></li></ul></div></li></ul></div></div>"
1569
1569
  ],
1570
1570
  "text/plain": [
1571
1571
  "<xarray.Dataset> Size: 4kB\n",
@@ -1735,8 +1735,8 @@
1735
1735
  "name": "stderr",
1736
1736
  "output_type": "stream",
1737
1737
  "text": [
1738
- "Getting dataset metadata: 711it [00:00, 304767.52it/s]\n",
1739
- "Reading dataset: 100%|██████████| 711/711 [00:00<00:00, 67285.26it/s]\n"
1738
+ "Getting dataset metadata: 711it [00:00, 298872.53it/s]\n",
1739
+ "Reading dataset: 100%|██████████| 711/711 [00:00<00:00, 66981.50it/s]\n"
1740
1740
  ]
1741
1741
  },
1742
1742
  {
@@ -2292,12 +2292,12 @@
2292
2292
  " * signal_id (signal_id) &lt;U21 168B &#x27;0&#x27; &#x27;1&#x27;\n",
2293
2293
  " * time_id (time_id) int64 800B 0 1 2 3 4 5 6 7 ... 92 93 94 95 96 97 98 99\n",
2294
2294
  "Attributes:\n",
2295
- " authors: Bond, James Bond</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-obj-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>ts_id</span>: 10</li><li><span class='xr-has-index'>signal_id</span>: 2</li><li><span class='xr-has-index'>time_id</span>: 100</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-805f5950-a0be-4535-bdbd-dafc2cc780f3' class='xr-array-in' type='checkbox' checked><label for='section-805f5950-a0be-4535-bdbd-dafc2cc780f3' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>&lt;COO: nnz=711, fill_value=nan&gt;</span></div><div class='xr-array-data'><table><tbody><tr><th style=\"text-align: left\">Format</th><td style=\"text-align: left\">coo</td></tr><tr><th style=\"text-align: left\">Data Type</th><td style=\"text-align: left\">float64</td></tr><tr><th style=\"text-align: left\">Shape</th><td style=\"text-align: left\">(10, 2, 100)</td></tr><tr><th style=\"text-align: left\">nnz</th><td style=\"text-align: left\">711</td></tr><tr><th style=\"text-align: left\">Density</th><td style=\"text-align: left\">0.3555</td></tr><tr><th style=\"text-align: left\">Read-only</th><td style=\"text-align: left\">True</td></tr><tr><th style=\"text-align: left\">Size</th><td style=\"text-align: left\">22.2K</td></tr><tr><th style=\"text-align: left\">Storage ratio</th><td style=\"text-align: left\">1.42</td></tr></tbody></table></div></div></li><li class='xr-section-item'><input id='section-49c0b501-906d-48cd-8ed5-f02addb853ea' class='xr-section-summary-in' type='checkbox' checked /><label for='section-49c0b501-906d-48cd-8ed5-f02addb853ea' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>ts_id</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>&lt;U21</div><div class='xr-var-preview xr-preview'>&#x27;0&#x27; &#x27;1&#x27; &#x27;2&#x27; &#x27;3&#x27; ... &#x27;6&#x27; &#x27;7&#x27; &#x27;8&#x27; &#x27;9&#x27;</div><input id='attrs-ff74a89d-d92e-4a8d-9ac5-be290246ed29' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-ff74a89d-d92e-4a8d-9ac5-be290246ed29' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b2ada202-c170-4780-bbbe-df0eef5e31e8' class='xr-var-data-in' type='checkbox'><label for='data-b2ada202-c170-4780-bbbe-df0eef5e31e8' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;0&#x27;, &#x27;1&#x27;, &#x27;2&#x27;, &#x27;3&#x27;, &#x27;4&#x27;, &#x27;5&#x27;, &#x27;6&#x27;, &#x27;7&#x27;, &#x27;8&#x27;, &#x27;9&#x27;], dtype=&#x27;&lt;U21&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>labels</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 1 0 0 0 1 1 1 0</div><input id='attrs-832c1cda-831b-4162-aa81-c6377c39c112' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-832c1cda-831b-4162-aa81-c6377c39c112' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-a558ddf1-4516-4c62-8b1d-7895bda5343e' class='xr-var-data-in' type='checkbox'><label for='data-a558ddf1-4516-4c62-8b1d-7895bda5343e' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 1, 0, 0, 0, 1, 1, 1, 0])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>signal_id</span></div><div class='xr-var-dims'>(signal_id)</div><div class='xr-var-dtype'>&lt;U21</div><div class='xr-var-preview xr-preview'>&#x27;0&#x27; &#x27;1&#x27;</div><input id='attrs-73d9de49-1e42-49cf-a1f4-aa4a5ea345e4' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-73d9de49-1e42-49cf-a1f4-aa4a5ea345e4' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1a58449c-9475-4d84-ad2e-ae701a5fec59' class='xr-var-data-in' type='checkbox'><label for='data-1a58449c-9475-4d84-ad2e-ae701a5fec59' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;0&#x27;, &#x27;1&#x27;], dtype=&#x27;&lt;U21&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time_id</span></div><div class='xr-var-dims'>(time_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 ... 94 95 96 97 98 99</div><input id='attrs-b3ef19fc-56d6-41da-9ba7-57ce0f2e1d78' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-b3ef19fc-56d6-41da-9ba7-57ce0f2e1d78' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-b815206f-8a27-4eef-bba4-c6616b10f113' class='xr-var-data-in' type='checkbox'><label for='data-b815206f-8a27-4eef-bba4-c6616b10f113' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n",
2295
+ " authors: Bond, James Bond</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-obj-name'></div><ul class='xr-dim-list'><li><span class='xr-has-index'>ts_id</span>: 10</li><li><span class='xr-has-index'>signal_id</span>: 2</li><li><span class='xr-has-index'>time_id</span>: 100</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-ff97e63c-b8c6-492b-8b97-68a6c8b7479c' class='xr-array-in' type='checkbox' checked><label for='section-ff97e63c-b8c6-492b-8b97-68a6c8b7479c' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>&lt;COO: nnz=711, fill_value=nan&gt;</span></div><div class='xr-array-data'><table><tbody><tr><th style=\"text-align: left\">Format</th><td style=\"text-align: left\">coo</td></tr><tr><th style=\"text-align: left\">Data Type</th><td style=\"text-align: left\">float64</td></tr><tr><th style=\"text-align: left\">Shape</th><td style=\"text-align: left\">(10, 2, 100)</td></tr><tr><th style=\"text-align: left\">nnz</th><td style=\"text-align: left\">711</td></tr><tr><th style=\"text-align: left\">Density</th><td style=\"text-align: left\">0.3555</td></tr><tr><th style=\"text-align: left\">Read-only</th><td style=\"text-align: left\">True</td></tr><tr><th style=\"text-align: left\">Size</th><td style=\"text-align: left\">22.2K</td></tr><tr><th style=\"text-align: left\">Storage ratio</th><td style=\"text-align: left\">1.42</td></tr></tbody></table></div></div></li><li class='xr-section-item'><input id='section-b50862aa-95e1-42cf-ab1f-3040e2571596' class='xr-section-summary-in' type='checkbox' checked /><label for='section-b50862aa-95e1-42cf-ab1f-3040e2571596' class='xr-section-summary' title='Expand/collapse section'>Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>ts_id</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>&lt;U21</div><div class='xr-var-preview xr-preview'>&#x27;0&#x27; &#x27;1&#x27; &#x27;2&#x27; &#x27;3&#x27; ... &#x27;6&#x27; &#x27;7&#x27; &#x27;8&#x27; &#x27;9&#x27;</div><input id='attrs-70f9a71e-85a0-4eca-9476-ff1619be7512' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-70f9a71e-85a0-4eca-9476-ff1619be7512' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-52de25cf-65db-4cb1-bd33-9312decd8cf9' class='xr-var-data-in' type='checkbox'><label for='data-52de25cf-65db-4cb1-bd33-9312decd8cf9' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;0&#x27;, &#x27;1&#x27;, &#x27;2&#x27;, &#x27;3&#x27;, &#x27;4&#x27;, &#x27;5&#x27;, &#x27;6&#x27;, &#x27;7&#x27;, &#x27;8&#x27;, &#x27;9&#x27;], dtype=&#x27;&lt;U21&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span>labels</span></div><div class='xr-var-dims'>(ts_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 1 0 0 0 1 1 1 0</div><input id='attrs-52ebbb1c-883f-4d14-9cd3-0b165f2af3ce' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-52ebbb1c-883f-4d14-9cd3-0b165f2af3ce' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-16365a0c-f62c-428e-86a7-02d8bfe98f95' class='xr-var-data-in' type='checkbox'><label for='data-16365a0c-f62c-428e-86a7-02d8bfe98f95' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([0, 1, 1, 0, 0, 0, 1, 1, 1, 0])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>signal_id</span></div><div class='xr-var-dims'>(signal_id)</div><div class='xr-var-dtype'>&lt;U21</div><div class='xr-var-preview xr-preview'>&#x27;0&#x27; &#x27;1&#x27;</div><input id='attrs-450d0260-e6e9-420e-8fd4-bd674dd524e8' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-450d0260-e6e9-420e-8fd4-bd674dd524e8' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-fa23dd6f-0e72-4265-b5ed-893915def147' class='xr-var-data-in' type='checkbox'><label for='data-fa23dd6f-0e72-4265-b5ed-893915def147' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([&#x27;0&#x27;, &#x27;1&#x27;], dtype=&#x27;&lt;U21&#x27;)</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>time_id</span></div><div class='xr-var-dims'>(time_id)</div><div class='xr-var-dtype'>int64</div><div class='xr-var-preview xr-preview'>0 1 2 3 4 5 6 ... 94 95 96 97 98 99</div><input id='attrs-834a3d94-0a9d-43b7-9bb5-a0a725193a59' class='xr-var-attrs-in' type='checkbox' disabled><label for='attrs-834a3d94-0a9d-43b7-9bb5-a0a725193a59' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-692ad537-d9d0-41be-b5e1-512aadffe2db' class='xr-var-data-in' type='checkbox'><label for='data-692ad537-d9d0-41be-b5e1-512aadffe2db' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'></dl></div><div class='xr-var-data'><pre>array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n",
2296
2296
  " 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\n",
2297
2297
  " 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,\n",
2298
2298
  " 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,\n",
2299
2299
  " 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,\n",
2300
- " 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-d2550208-9776-45b9-b4f4-92ad6f00df52' class='xr-section-summary-in' type='checkbox' checked /><label for='section-d2550208-9776-45b9-b4f4-92ad6f00df52' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>authors :</span></dt><dd>Bond, James Bond</dd></dl></div></li></ul></div></div>"
2300
+ " 90, 91, 92, 93, 94, 95, 96, 97, 98, 99])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-836f2e2d-2062-4f47-bde0-7c76ac490ff9' class='xr-section-summary-in' type='checkbox' checked /><label for='section-836f2e2d-2062-4f47-bde0-7c76ac490ff9' class='xr-section-summary' title='Expand/collapse section'>Attributes: <span>(1)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>authors :</span></dt><dd>Bond, James Bond</dd></dl></div></li></ul></div></div>"
2301
2301
  ],
2302
2302
  "text/plain": [
2303
2303
  "<xarray.DataArray (ts_id: 10, signal_id: 2, time_id: 100)> Size: 23kB\n",
@@ -9,3 +9,4 @@ write_to = "pyrregular/_version.py"
9
9
  addopts = "-ra -q"
10
10
  testpaths = ["tests"]
11
11
  norecursedirs = ["tests/_deprecated"]
12
+ markers = ["network: downloads datasets from Hugging Face"]
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.2.0'
22
- __version_tuple__ = version_tuple = (0, 2, 0)
21
+ __version__ = version = '0.2.2'
22
+ __version_tuple__ = version_tuple = (0, 2, 2)
23
23
 
24
- __commit_id__ = commit_id = 'g2f237e1a2'
24
+ __commit_id__ = commit_id = 'ga0f3c03bc'
@@ -2,7 +2,7 @@ import numpy as np
2
2
  import pandas as pd
3
3
  import xarray as xr
4
4
 
5
- from pyrregular.conversion_utils import _ak_dropnan, _fill_time_index, _reset_time_index
5
+ from pyrregular.conversion_utils import _ak_dropnan, _reset_time_index
6
6
  from pyrregular.io_utils import save_to_file
7
7
 
8
8
 
@@ -212,7 +212,7 @@ class IrregularAccessor:
212
212
  columns[name] = _repeat(coord.values, idx[coord.dims[0]])
213
213
  return pd.DataFrame(columns)
214
214
 
215
- def to_hdf5(self, filename, compression="gzip", compression_opts=None):
215
+ def to_hdf5(self, filename, compression="gzip", compression_opts=1):
216
216
  save_to_file(
217
217
  data_array=self._da,
218
218
  filename=filename,
@@ -134,7 +134,7 @@ def _to_tslearn(X):
134
134
  return X.swapaxes(1, 2)
135
135
 
136
136
 
137
- def _fill_time_index(arr):
137
+ def _fill_time_index(arr, nan_delta=1):
138
138
  T = deepcopy(arr)
139
139
 
140
140
  # time delta
@@ -143,6 +143,12 @@ def _fill_time_index(arr):
143
143
  # mean time delta
144
144
  delta_mean = np.nanmean(a_diff, axis=2, keepdims=True)
145
145
 
146
+ nans = np.isnan(delta_mean)
147
+ if np.any(
148
+ nans
149
+ ): # this can happen if there is only 1 valid value in the time series
150
+ delta_mean[nans] = nan_delta
151
+
146
152
  # last timestep
147
153
  last_valid_t = np.nanmax(T, axis=2, keepdims=True)
148
154
 
@@ -111,7 +111,10 @@ def load_yaml(filename: str):
111
111
 
112
112
  def _read_csvs(filenames: list, chunksize=1000, reader_fun=None, **kwargs):
113
113
  for filename in filenames:
114
- for df in pd.read_csv(filename, chunksize=chunksize):
114
+ # round_trip: correctly rounded floats, identical on every platform
115
+ for df in pd.read_csv(
116
+ filename, chunksize=chunksize, float_precision="round_trip"
117
+ ):
115
118
  if reader_fun is None:
116
119
  for row in df.to_dict(orient="records"):
117
120
  yield row
@@ -156,6 +159,30 @@ def _get_metadata(
156
159
  return dates, ids, signals, n_records
157
160
 
158
161
 
162
+ def _check_static(keys, id_name, static_names, hint):
163
+ """Raise if an id has more than one value for a static column.
164
+
165
+ read_csv identifies an id by the tuple (id, *static values), so a column that
166
+ is not really static would silently split the id into several ones.
167
+ """
168
+ first = {}
169
+ for key in keys:
170
+ other = first.setdefault(key[0], key)
171
+ if other != key:
172
+ columns = [
173
+ n
174
+ for n, a, b in zip(static_names, other[1:], key[1:])
175
+ if a is not b and a != b
176
+ ]
177
+ names = ", ".join(repr(c) for c in columns)
178
+ verb = "is" if len(columns) == 1 else "are"
179
+ raise ValueError(
180
+ f"{names} {verb} not static for {id_name} {key[0]!r} (values "
181
+ f"{other[1:]} and {key[1:]}). A static column must have one value "
182
+ f"per id. {hint}"
183
+ )
184
+
185
+
159
186
  def read_csv(
160
187
  filenames: str | list | dict,
161
188
  ts_id: str = "ts_id",
@@ -190,6 +217,27 @@ def read_csv(
190
217
  **kwargs,
191
218
  )
192
219
 
220
+ # a static column must have one value per id, otherwise the id would be split
221
+ _check_static(
222
+ ids,
223
+ ts_id,
224
+ dims["ts_id"],
225
+ hint='If it changes over time, move it to dims["time_id"] or use it as a '
226
+ "signal; if each value should be its own series, include it in the series id.",
227
+ )
228
+ _check_static(
229
+ signals,
230
+ signal_id,
231
+ dims["signal_id"],
232
+ hint="If it differs between series, move it to dims['ts_id'].",
233
+ )
234
+ _check_static(
235
+ dates,
236
+ time_id,
237
+ dims["time_id"],
238
+ hint="If it differs between series, move it to dims['ts_id'] or use it as a signal.",
239
+ )
240
+
193
241
  # date strings are parsed before sorting, so the time axis follows real time
194
242
  parsed_dates = None
195
243
  if time_index_as_datetime and all(isinstance(d[0], str) for d in dates):
@@ -286,6 +334,5 @@ def read_csv(
286
334
 
287
335
  def get_current_aoe_time():
288
336
  aoe_tz = timezone(timedelta(hours=-12))
289
- current_time_utc = datetime.utcnow()
290
- current_time_aoe = current_time_utc.replace(tzinfo=timezone.utc).astimezone(aoe_tz)
337
+ current_time_aoe = datetime.now(timezone.utc).astimezone(aoe_tz)
291
338
  return current_time_aoe.isoformat()
@@ -15,38 +15,10 @@ import optax
15
15
  from sklearn.base import BaseEstimator, ClassifierMixin
16
16
  from sklearn.model_selection import train_test_split
17
17
 
18
+ from pyrregular.conversion_utils import _fill_time_index
18
19
  from pyrregular.models.nodes import _standardize
19
20
 
20
21
 
21
- def _fill_time_index(arr, nan_delta=1):
22
- T = deepcopy(arr)
23
-
24
- # time delta
25
- a_diff = T[:, :, 1:] - T[:, :, :-1]
26
-
27
- # mean time delta
28
- delta_mean = np.nanmean(a_diff, axis=2, keepdims=True)
29
-
30
- nans = np.isnan(delta_mean)
31
- if np.any(
32
- nans
33
- ): # this can happen if there is only 1 valid value in the time series
34
- delta_mean[nans] = nan_delta
35
-
36
- # last timestep
37
- last_valid_t = np.nanmax(T, axis=2, keepdims=True)
38
-
39
- # find where the nans are
40
- nan_mask = np.isnan(T)
41
-
42
- # where nans are there is an increasing value from 1 to the last nan
43
- nan_indices = np.cumsum(nan_mask, axis=2)
44
-
45
- replacement = (last_valid_t + delta_mean * nan_indices)[nan_mask]
46
- T[nan_mask] = replacement
47
- return T
48
-
49
-
50
22
  def _fill_all_nans_signals(X):
51
23
  X_ = deepcopy(X)
52
24
  mask = np.sum(np.isnan(X_), axis=2) >= X_.shape[2] - 2
@@ -25,7 +25,8 @@ def download_dataset_from_huggingface(
25
25
  if api_token is None:
26
26
  raise ValueError("You need to provide an API token to download the dataset")
27
27
  downloader = pooch.HTTPDownloader(
28
- **dict(headers={"Authorization": f"Bearer {api_token}"})
28
+ progressbar=progressbar,
29
+ headers={"Authorization": f"Bearer {api_token}"},
29
30
  )
30
31
  else:
31
32
  downloader = pooch.HTTPDownloader(progressbar=progressbar)
@@ -35,7 +36,9 @@ def download_dataset_from_huggingface(
35
36
  def load_dataset_from_file(name, api_token=None):
36
37
  if ".h5" not in name:
37
38
  name += ".h5"
38
- file = download_dataset_from_huggingface(name, api_token)
39
+ file = download_dataset_from_huggingface(
40
+ name, use_api_token=api_token is not None, api_token=api_token
41
+ )
39
42
  return file
40
43
 
41
44
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyrregular
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: Irregular time series made easy
5
5
  Author: Francesco Spinnato, Cristiano Landi
6
6
  Author-email: francesco.spinnato@unipi.it
@@ -8,6 +8,7 @@ Classifier: Programming Language :: Python :: 3
8
8
  Classifier: Programming Language :: Python :: 3.10
9
9
  Classifier: Programming Language :: Python :: 3.11
10
10
  Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
11
12
  Requires-Python: >=3.10
12
13
  Description-Content-Type: text/markdown
13
14
  Requires-Dist: awkward
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.2.2",
3
+ "distance": 0,
4
+ "node": "ga0f3c03bc664933363e4a80dbd04764d680873f4",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-04"
8
+ }
@@ -10,6 +10,7 @@ classifiers =
10
10
  Programming Language :: Python :: 3.10
11
11
  Programming Language :: Python :: 3.11
12
12
  Programming Language :: Python :: 3.12
13
+ Programming Language :: Python :: 3.13
13
14
 
14
15
  [options]
15
16
  packages = find:
@@ -3,6 +3,8 @@ import pytest
3
3
  from pyrregular import load_dataset
4
4
  from tests.constants import TEST_CASES_FAST as TEST_CASES
5
5
 
6
+ pytestmark = pytest.mark.network
7
+
6
8
 
7
9
  @pytest.fixture(params=TEST_CASES)
8
10
  def loaded_dataset(request):
@@ -355,3 +355,55 @@ def test_version():
355
355
  import pyrregular
356
356
 
357
357
  assert isinstance(pyrregular.__version__, str) and pyrregular.__version__
358
+
359
+
360
+ def test_read_csv_rejects_non_static_columns(tmp_path):
361
+ # label changes inside series a: it is not static, so read_csv must not split a
362
+ rows = [
363
+ ("a", "s", 1, 1.0, "x"),
364
+ ("a", "s", 2, 2.0, "x"),
365
+ ("a", "s", 3, 3.0, "y"),
366
+ ("b", "s", 1, 5.0, "z"),
367
+ ]
368
+ path = tmp_path / "static.csv"
369
+ pd.DataFrame(
370
+ rows, columns=["ts_id", "signal_id", "time_id", "value_id", "label"]
371
+ ).to_csv(path, index=False)
372
+ with pytest.raises(ValueError, match="'label' is not static for ts_id 'a'"):
373
+ read_csv(
374
+ path,
375
+ dims={"ts_id": ["label"], "signal_id": [], "time_id": []},
376
+ time_index_as_datetime=False,
377
+ )
378
+
379
+
380
+ def test_api_token_is_sent(monkeypatch):
381
+ # capture the downloader instead of downloading
382
+ from pyrregular import repository
383
+
384
+ seen = {}
385
+
386
+ def fake_fetch(name, downloader):
387
+ seen["name"], seen["downloader"] = name, downloader
388
+ return "fake/path.h5"
389
+
390
+ monkeypatch.delenv("HF_TOKEN", raising=False)
391
+ monkeypatch.setattr(repository.REPOSITORY, "fetch", fake_fetch)
392
+ assert (
393
+ repository.load_dataset_from_file("Garment", api_token="hf_x") == "fake/path.h5"
394
+ )
395
+ assert seen["name"] == "Garment.h5"
396
+ assert seen["downloader"].kwargs["headers"] == {"Authorization": "Bearer hf_x"}
397
+
398
+
399
+ def test_fill_time_index():
400
+ from pyrregular.conversion_utils import _fill_time_index
401
+
402
+ T = np.array(
403
+ [
404
+ [[0.0, 1.0, 3.0, nan, nan]], # mean step 1.5
405
+ [[5.0, nan, nan, nan, nan]], # one timestamp: no step, use nan_delta
406
+ ]
407
+ )
408
+ assert_equal_nan(_fill_time_index(T)[:, 0, :], [[0, 1, 3, 4.5, 6], [5, 6, 7, 8, 9]])
409
+ assert_equal_nan(_fill_time_index(T, nan_delta=2)[1, 0], [5, 7, 9, 11, 13])
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.2.0",
3
- "distance": 0,
4
- "node": "g2f237e1a2c69ae5f434315af136ae180ca825579",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-03"
8
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes