sl-shared-assets 1.0.0rc27__tar.gz → 1.0.1__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.

Potentially problematic release.


This version of sl-shared-assets might be problematic. Click here for more details.

Files changed (45) hide show
  1. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/PKG-INFO +10 -7
  2. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/README.md +9 -6
  3. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/docs/source/welcome.rst +2 -2
  4. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/envs/slsa_dev_lin.yml +31 -31
  5. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/envs/slsa_dev_lin_spec.txt +428 -0
  6. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/pyproject.toml +1 -1
  7. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/cli.py +13 -5
  8. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/cli.pyi +3 -1
  9. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/data_classes/configuration_data.py +3 -3
  10. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/data_classes/configuration_data.pyi +3 -3
  11. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/data_classes/session_data.py +6 -0
  12. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/data_classes/session_data.pyi +1 -0
  13. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/server/server.py +3 -2
  14. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/server/server.pyi +1 -1
  15. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/tools/packaging_tools.py +1 -0
  16. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/tools/project_management_tools.py +22 -15
  17. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/tools/project_management_tools.pyi +3 -6
  18. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/.gitignore +0 -0
  19. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/LICENSE +0 -0
  20. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/docs/Makefile +0 -0
  21. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/docs/make.bat +0 -0
  22. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/docs/source/api.rst +0 -0
  23. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/docs/source/conf.py +0 -0
  24. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/docs/source/index.rst +0 -0
  25. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/__init__.py +0 -0
  26. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/__init__.pyi +0 -0
  27. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/data_classes/__init__.py +0 -0
  28. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/data_classes/__init__.pyi +0 -0
  29. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/data_classes/runtime_data.py +0 -0
  30. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/data_classes/runtime_data.pyi +0 -0
  31. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/data_classes/surgery_data.py +0 -0
  32. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/data_classes/surgery_data.pyi +0 -0
  33. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/py.typed +0 -0
  34. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/server/__init__.py +0 -0
  35. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/server/__init__.pyi +0 -0
  36. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/server/job.py +0 -0
  37. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/server/job.pyi +0 -0
  38. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/tools/__init__.py +0 -0
  39. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/tools/__init__.pyi +0 -0
  40. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/tools/ascension_tools.py +0 -0
  41. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/tools/ascension_tools.pyi +0 -0
  42. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/tools/packaging_tools.pyi +0 -0
  43. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/tools/transfer_tools.py +0 -0
  44. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/src/sl_shared_assets/tools/transfer_tools.pyi +0 -0
  45. {sl_shared_assets-1.0.0rc27 → sl_shared_assets-1.0.1}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sl-shared-assets
3
- Version: 1.0.0rc27
3
+ Version: 1.0.1
4
4
  Summary: Stores assets shared between multiple Sun (NeuroAI) lab data pipelines.
5
5
  Project-URL: Homepage, https://github.com/Sun-Lab-NBB/sl-shared-assets
6
6
  Project-URL: Documentation, https://sl-shared-assets-api-docs.netlify.app/
@@ -768,16 +768,16 @@ ___
768
768
 
769
769
  ## Detailed Description
770
770
 
771
- Primarily, this library is designed to make the two main Sun lab libraries used in data acquisition
771
+ Primarily, this library is designed to make the two main Sun lab libraries used for data acquisition
772
772
  ([sl-experiment](https://github.com/Sun-Lab-NBB/sl-experiment)) and processing
773
773
  ([sl-forgery](https://github.com/Sun-Lab-NBB/sl-forgery)) independent of each other. This is beneficial, as both
774
- libraries feature an extensive and potentially incompatible set of runtime dependencies. Moreover, having a shared
774
+ libraries feature an extensive and largely incompatible set of runtime dependencies. Moreover, having a shared
775
775
  repository of classes and tools reused across Sun lab pipelines streamlines the maintenance of these tools.
776
776
 
777
777
  The library broadly stores two types of assets. First, it stores various dataclasses used to save the data acquired
778
- during experiments in the lab. Moreover, it also stores the dataclasses used to configure data acquisition and
779
- processing runtimes. Secondly, it stores the tools used to safely move the data between the computers used in the data
780
- acquisition and processing and provides the API for accessing the lab’s main computation server.
778
+ during experiments in the lab and the dataclasses used to configure data acquisition and processing runtimes. Secondly,
779
+ it stores the tools used to safely move the data between the machines (computers) used in the data acquisition and
780
+ processing, and provides the API for running various data processing jobs on remote compute servers.
781
781
 
782
782
  ---
783
783
 
@@ -819,7 +819,10 @@ Use the following command to install the library using pip: ```pip install sl-sh
819
819
  ## Usage
820
820
 
821
821
  All library components are intended to be used via other Sun lab libraries. Developers should study the API and CLI
822
- documentation below to learn how to use library components in other Sun lab libraries.
822
+ documentation below to learn how to use library components in other Sun lab libraries. For notes on using shared
823
+ assets for data acquisition, see the [sl-experiment](https://github.com/Sun-Lab-NBB/sl-experiment) library ReadMe.
824
+ For notes on using shared assets for data processing, see the [sl-forgery](https://github.com/Sun-Lab-NBB/sl-forgery)
825
+ library ReadMe.
823
826
 
824
827
  ---
825
828
 
@@ -13,16 +13,16 @@ ___
13
13
 
14
14
  ## Detailed Description
15
15
 
16
- Primarily, this library is designed to make the two main Sun lab libraries used in data acquisition
16
+ Primarily, this library is designed to make the two main Sun lab libraries used for data acquisition
17
17
  ([sl-experiment](https://github.com/Sun-Lab-NBB/sl-experiment)) and processing
18
18
  ([sl-forgery](https://github.com/Sun-Lab-NBB/sl-forgery)) independent of each other. This is beneficial, as both
19
- libraries feature an extensive and potentially incompatible set of runtime dependencies. Moreover, having a shared
19
+ libraries feature an extensive and largely incompatible set of runtime dependencies. Moreover, having a shared
20
20
  repository of classes and tools reused across Sun lab pipelines streamlines the maintenance of these tools.
21
21
 
22
22
  The library broadly stores two types of assets. First, it stores various dataclasses used to save the data acquired
23
- during experiments in the lab. Moreover, it also stores the dataclasses used to configure data acquisition and
24
- processing runtimes. Secondly, it stores the tools used to safely move the data between the computers used in the data
25
- acquisition and processing and provides the API for accessing the lab’s main computation server.
23
+ during experiments in the lab and the dataclasses used to configure data acquisition and processing runtimes. Secondly,
24
+ it stores the tools used to safely move the data between the machines (computers) used in the data acquisition and
25
+ processing, and provides the API for running various data processing jobs on remote compute servers.
26
26
 
27
27
  ---
28
28
 
@@ -64,7 +64,10 @@ Use the following command to install the library using pip: ```pip install sl-sh
64
64
  ## Usage
65
65
 
66
66
  All library components are intended to be used via other Sun lab libraries. Developers should study the API and CLI
67
- documentation below to learn how to use library components in other Sun lab libraries.
67
+ documentation below to learn how to use library components in other Sun lab libraries. For notes on using shared
68
+ assets for data acquisition, see the [sl-experiment](https://github.com/Sun-Lab-NBB/sl-experiment) library ReadMe.
69
+ For notes on using shared assets for data processing, see the [sl-forgery](https://github.com/Sun-Lab-NBB/sl-forgery)
70
+ library ReadMe.
68
71
 
69
72
  ---
70
73
 
@@ -4,8 +4,8 @@ Welcome to sl-shared-assets API documentation page
4
4
  sl-shared-assets is a Python library that stores assets shared between multiple Sun (NeuroAI) lab data pipelines.
5
5
 
6
6
  This library is developed in the `Sun lab <https://neuroai.github.io/sunlab/>`_ at Cornell University. The main purpose
7
- of this library is to provide the tools used by multiple other data acquisition and processing libraries in the lab to
8
- avoid circular or hierarchical cross-dependencies.
7
+ of this library is to provide the tools adn assets used by multiple other data acquisition and processing libraries in
8
+ the lab to avoid cross-dependency issues.
9
9
 
10
10
  This website only contains the API documentation for the classes and methods offered by this library. See the project
11
11
  GitHub repository for installation instructions and library usage examples:
@@ -7,19 +7,19 @@ dependencies:
7
7
  - _python_abi3_support=1.0=hd8ed1ab_2
8
8
  - alabaster=1.0.0=pyhd8ed1ab_1
9
9
  - appdirs=1.4.4=pyhd8ed1ab_1
10
- - aws-c-auth=0.9.0=h59ae206_7
11
- - aws-c-cal=0.9.0=h5e3027f_1
10
+ - aws-c-auth=0.9.0=h3318fae_10
11
+ - aws-c-cal=0.9.1=h5e3027f_0
12
12
  - aws-c-common=0.12.3=hb9d3cd8_0
13
13
  - aws-c-compression=0.3.1=hafb2847_5
14
- - aws-c-event-stream=0.5.4=h2dcaabb_9
15
- - aws-c-http=0.10.1=hb50fa74_1
16
- - aws-c-io=0.19.0=h7962f60_2
17
- - aws-c-mqtt=0.13.0=h35de22e_3
18
- - aws-c-s3=0.7.17=h50d7d24_2
19
- - aws-c-sdkutils=0.2.3=hafb2847_5
14
+ - aws-c-event-stream=0.5.4=haaa725d_10
15
+ - aws-c-http=0.10.1=hd7992d4_3
16
+ - aws-c-io=0.19.1=h93b6419_1
17
+ - aws-c-mqtt=0.13.0=h7b3935a_4
18
+ - aws-c-s3=0.8.0=h365f71b_1
19
+ - aws-c-sdkutils=0.2.4=hafb2847_0
20
20
  - aws-checksums=0.2.7=hafb2847_1
21
- - aws-crt-cpp=0.32.5=h2811929_3
22
- - aws-sdk-cpp=1.11.510=hffe9a0f_8
21
+ - aws-crt-cpp=0.32.6=h96107e3_3
22
+ - aws-sdk-cpp=1.11.510=hf282fd2_9
23
23
  - azure-core-cpp=1.14.0=h5cfcd09_0
24
24
  - azure-identity-cpp=1.10.0=h113e628_0
25
25
  - azure-storage-blobs-cpp=12.13.0=h3cf044e_1
@@ -34,7 +34,7 @@ dependencies:
34
34
  - bzip2=1.0.8=h4bc722e_7
35
35
  - c-ares=1.34.5=hb9d3cd8_0
36
36
  - ca-certificates=2025.4.26=hbd8a1cb_0
37
- - cachetools=5.5.2=pyhd8ed1ab_0
37
+ - cachetools=6.0.0=pyhd8ed1ab_0
38
38
  - certifi=2025.4.26=pyhd8ed1ab_0
39
39
  - cffi=1.17.1=py313hfab6e84_0
40
40
  - chardet=5.2.0=pyhd8ed1ab_3
@@ -44,7 +44,7 @@ dependencies:
44
44
  - colorama=0.4.6=pyhd8ed1ab_1
45
45
  - conda-souschef=2.2.3=pyhd8ed1ab_0
46
46
  - cpython=3.13.3=py313hd8ed1ab_101
47
- - cryptography=45.0.2=py313h6556f6e_0
47
+ - cryptography=45.0.3=py313h6556f6e_0
48
48
  - dbus=1.16.2=h3c4dab8_0
49
49
  - distlib=0.3.9=pyhd8ed1ab_1
50
50
  - docutils=0.21.2=pyhd8ed1ab_1
@@ -61,8 +61,8 @@ dependencies:
61
61
  - id=1.5.0=pyh29332c3_0
62
62
  - idna=3.10=pyhd8ed1ab_1
63
63
  - imagesize=1.4.1=pyhd8ed1ab_0
64
- - importlib-metadata=8.7.0=pyhe01879c_0
65
- - importlib_metadata=8.7.0=he374078_0
64
+ - importlib-metadata=8.7.0=pyhe01879c_1
65
+ - importlib_metadata=8.7.0=h40b2b14_1
66
66
  - importlib_resources=6.5.2=pyhd8ed1ab_0
67
67
  - jaraco.classes=3.4.0=pyhd8ed1ab_2
68
68
  - jaraco.context=6.0.1=pyhd8ed1ab_0
@@ -74,17 +74,17 @@ dependencies:
74
74
  - krb5=1.21.3=h659f571_0
75
75
  - ld_impl_linux-64=2.43=h712a8e2_4
76
76
  - libabseil=20250127.1=cxx17_hbbce691_0
77
- - libarrow=20.0.0=hebdba27_3_cpu
78
- - libarrow-acero=20.0.0=hcb10f89_3_cpu
79
- - libarrow-dataset=20.0.0=hcb10f89_3_cpu
80
- - libarrow-substrait=20.0.0=h1bed206_3_cpu
77
+ - libarrow=20.0.0=h9b1bdb9_4_cpu
78
+ - libarrow-acero=20.0.0=hcb10f89_4_cpu
79
+ - libarrow-dataset=20.0.0=hcb10f89_4_cpu
80
+ - libarrow-substrait=20.0.0=h1bed206_4_cpu
81
81
  - libblas=3.9.0=31_h59b9bed_openblas
82
82
  - libbrotlicommon=1.1.0=hb9d3cd8_2
83
83
  - libbrotlidec=1.1.0=hb9d3cd8_2
84
84
  - libbrotlienc=1.1.0=hb9d3cd8_2
85
85
  - libcblas=3.9.0=31_he106b2a_openblas
86
86
  - libcrc32c=1.1.2=h9c3ff4c_0
87
- - libcurl=8.13.0=h332b0f4_0
87
+ - libcurl=8.14.0=h332b0f4_0
88
88
  - libedit=3.1.20250104=pl5321h7949ede_0
89
89
  - libev=4.33=hd590300_2
90
90
  - libevent=2.1.12=hf998b51_1
@@ -102,21 +102,21 @@ dependencies:
102
102
  - libiconv=1.18=h4ce23a2_1
103
103
  - liblapack=3.9.0=31_h7ac8fdf_openblas
104
104
  - liblzma=5.8.1=hb9d3cd8_1
105
- - libmpdec=4.0.0=h4bc722e_0
105
+ - libmpdec=4.0.0=hb9d3cd8_0
106
106
  - libnghttp2=1.64.0=h161d5f1_0
107
107
  - libopenblas=0.3.29=pthreads_h94d23a6_0
108
108
  - libopentelemetry-cpp=1.20.0=hd1b1c89_0
109
109
  - libopentelemetry-cpp-headers=1.20.0=ha770c72_0
110
- - libparquet=20.0.0=h081d1f1_3_cpu
110
+ - libparquet=20.0.0=h081d1f1_4_cpu
111
111
  - libprotobuf=5.29.3=h501fc15_1
112
112
  - libre2-11=2024.07.02=hba17884_3
113
113
  - libsodium=1.0.20=h4ab18f5_0
114
- - libsqlite=3.49.2=hee588c1_0
114
+ - libsqlite=3.50.0=hee588c1_0
115
115
  - libssh2=1.11.1=hcf80075_0
116
116
  - libstdcxx=15.1.0=h8f9b012_2
117
117
  - libstdcxx-ng=15.1.0=h4852527_2
118
118
  - libthrift=0.21.0=h0e7cc3e_0
119
- - libutf8proc=2.10.0=h4c51ac1_0
119
+ - libutf8proc=2.10.0=h202a827_0
120
120
  - libuuid=2.38.1=h0b41bf4_0
121
121
  - libxml2=2.13.8=h4bc477f_0
122
122
  - libzlib=1.3.1=hb9d3cd8_2
@@ -125,7 +125,7 @@ dependencies:
125
125
  - markupsafe=3.0.2=py313h8060acc_1
126
126
  - mdurl=0.1.2=pyhd8ed1ab_1
127
127
  - more-itertools=10.7.0=pyhd8ed1ab_0
128
- - mypy=1.15.0=py313h536fd9c_0
128
+ - mypy=1.16.0=py313h536fd9c_0
129
129
  - mypy_extensions=1.1.0=pyha770c72_0
130
130
  - natsort=8.4.0=pyh29332c3_1
131
131
  - ncurses=6.5=h2d0b736_3
@@ -142,6 +142,7 @@ dependencies:
142
142
  - pkginfo=1.12.1.2=pyhd8ed1ab_0
143
143
  - platformdirs=4.3.8=pyhe01879c_0
144
144
  - pluggy=1.6.0=pyhd8ed1ab_0
145
+ - polars=1.30.0=default_h1443d73_0
145
146
  - polars-default=1.30.0=py39hfac2b71_0
146
147
  - progressbar2=4.5.0=pyhd8ed1ab_1
147
148
  - prometheus-cpp=1.3.0=ha5d0236_0
@@ -166,11 +167,11 @@ dependencies:
166
167
  - rfc3986=2.0.0=pyhd8ed1ab_1
167
168
  - rich=14.0.0=pyh29332c3_0
168
169
  - roman-numerals-py=3.1.0=pyhd8ed1ab_0
169
- - ruamel.yaml=0.18.10=py313h536fd9c_0
170
+ - ruamel.yaml=0.18.11=py313h536fd9c_0
170
171
  - ruamel.yaml.clib=0.2.8=py313h536fd9c_1
171
172
  - ruamel.yaml.jinja2=0.2.7=pyhd8ed1ab_1
172
- - ruff=0.11.10=py313h67f39b2_1
173
- - s2n=1.5.18=h763c568_1
173
+ - ruff=0.11.12=py313h67f39b2_0
174
+ - s2n=1.5.19=h763c568_0
174
175
  - secretstorage=3.3.3=py313h78bf25f_3
175
176
  - setuptools=80.8.0=pyhff2d567_0
176
177
  - six=1.17.0=pyhd8ed1ab_0
@@ -190,7 +191,7 @@ dependencies:
190
191
  - sphinxcontrib-qthelp=2.0.0=pyhd8ed1ab_1
191
192
  - sphinxcontrib-serializinghtml=1.1.10=pyhd8ed1ab_1
192
193
  - stdlib-list=0.11.1=pyhd8ed1ab_0
193
- - tk=8.6.13=noxft_h4845f30_101
194
+ - tk=8.6.13=noxft_hd72426e_102
194
195
  - tomli=2.2.1=pyhd8ed1ab_1
195
196
  - tomli-w=1.2.0=pyhd8ed1ab_0
196
197
  - tox=4.26.0=pyhe01879c_0
@@ -206,7 +207,7 @@ dependencies:
206
207
  - tzdata=2025b=h78e105d_0
207
208
  - urllib3=2.4.0=pyhd8ed1ab_0
208
209
  - virtualenv=20.31.2=pyhd8ed1ab_0
209
- - zipp=3.21.0=pyhd8ed1ab_1
210
+ - zipp=3.22.0=pyhd8ed1ab_0
210
211
  - zlib=1.3.1=hb9d3cd8_2
211
212
  - zstandard=0.23.0=py313h536fd9c_2
212
213
  - zstd=1.5.7=hb8e6e7a_2
@@ -218,12 +219,11 @@ dependencies:
218
219
  - build==1.2.2.post1
219
220
  - dacite==1.9.2
220
221
  - loguru==0.7.3
221
- - polars==1.29.0
222
222
  - pyarrow==20.0.0
223
223
  - pyproject-hooks==1.2.0
224
224
  - pyyaml==6.0.2
225
225
  - simple-slurm==0.3.5
226
- - sl-shared-assets==1.0.0
226
+ - sl-shared-assets==1.0.0rc28
227
227
  - sphinx-rtd-dark-mode==1.3.0
228
228
  - tox-uv==1.25.0
229
229
  - uv==0.6.14
@@ -1381,3 +1381,431 @@
1381
1381
  +zstandard-0.23.0 (conda-forge/linux-64)
1382
1382
  +zstd-1.5.7 (conda-forge/linux-64)
1383
1383
 
1384
+ 2025-05-30 12:58:07 (rev 14)
1385
+ -_libgcc_mutex-0.1 (conda-forge/linux-64)
1386
+ -_openmp_mutex-4.5 (conda-forge/linux-64)
1387
+ -_python_abi3_support-1.0 (conda-forge/noarch)
1388
+ -alabaster-1.0.0 (conda-forge/noarch)
1389
+ -appdirs-1.4.4 (conda-forge/noarch)
1390
+ -aws-c-auth-0.9.0 (conda-forge/linux-64)
1391
+ -aws-c-cal-0.9.0 (conda-forge/linux-64)
1392
+ -aws-c-common-0.12.3 (conda-forge/linux-64)
1393
+ -aws-c-compression-0.3.1 (conda-forge/linux-64)
1394
+ -aws-c-event-stream-0.5.4 (conda-forge/linux-64)
1395
+ -aws-c-http-0.10.1 (conda-forge/linux-64)
1396
+ -aws-c-io-0.19.0 (conda-forge/linux-64)
1397
+ -aws-c-mqtt-0.13.0 (conda-forge/linux-64)
1398
+ -aws-c-s3-0.7.17 (conda-forge/linux-64)
1399
+ -aws-c-sdkutils-0.2.3 (conda-forge/linux-64)
1400
+ -aws-checksums-0.2.7 (conda-forge/linux-64)
1401
+ -aws-crt-cpp-0.32.5 (conda-forge/linux-64)
1402
+ -aws-sdk-cpp-1.11.510 (conda-forge/linux-64)
1403
+ -azure-core-cpp-1.14.0 (conda-forge/linux-64)
1404
+ -azure-identity-cpp-1.10.0 (conda-forge/linux-64)
1405
+ -azure-storage-blobs-cpp-12.13.0 (conda-forge/linux-64)
1406
+ -azure-storage-common-cpp-12.8.0 (conda-forge/linux-64)
1407
+ -azure-storage-files-datalake-cpp-12.12.0 (conda-forge/linux-64)
1408
+ -babel-2.17.0 (conda-forge/noarch)
1409
+ -backports-1.0 (conda-forge/noarch)
1410
+ -backports.tarfile-1.2.0 (conda-forge/noarch)
1411
+ -bcrypt-4.3.0 (conda-forge/linux-64)
1412
+ -beautifulsoup4-4.13.4 (conda-forge/noarch)
1413
+ -brotli-python-1.1.0 (conda-forge/linux-64)
1414
+ -bzip2-1.0.8 (conda-forge/linux-64)
1415
+ -c-ares-1.34.5 (conda-forge/linux-64)
1416
+ -ca-certificates-2025.4.26 (conda-forge/noarch)
1417
+ -cachetools-5.5.2 (conda-forge/noarch)
1418
+ -certifi-2025.4.26 (conda-forge/noarch)
1419
+ -cffi-1.17.1 (conda-forge/linux-64)
1420
+ -chardet-5.2.0 (conda-forge/noarch)
1421
+ -charset-normalizer-3.4.2 (conda-forge/noarch)
1422
+ -click-8.2.1 (conda-forge/noarch)
1423
+ -cmarkgfm-2024.11.20 (conda-forge/linux-64)
1424
+ -colorama-0.4.6 (conda-forge/noarch)
1425
+ -conda-souschef-2.2.3 (conda-forge/noarch)
1426
+ -cpython-3.13.3 (conda-forge/noarch)
1427
+ -cryptography-45.0.2 (conda-forge/linux-64)
1428
+ -dbus-1.16.2 (conda-forge/linux-64)
1429
+ -distlib-0.3.9 (conda-forge/noarch)
1430
+ -docutils-0.21.2 (conda-forge/noarch)
1431
+ -editables-0.5 (conda-forge/noarch)
1432
+ -filelock-3.18.0 (conda-forge/noarch)
1433
+ -gflags-2.2.2 (conda-forge/linux-64)
1434
+ -glog-0.7.1 (conda-forge/linux-64)
1435
+ -grayskull-2.9.1 (conda-forge/noarch)
1436
+ -h2-4.2.0 (conda-forge/noarch)
1437
+ -hatchling-1.27.0 (conda-forge/noarch)
1438
+ -hpack-4.1.0 (conda-forge/noarch)
1439
+ -hyperframe-6.1.0 (conda-forge/noarch)
1440
+ -icu-75.1 (conda-forge/linux-64)
1441
+ -id-1.5.0 (conda-forge/noarch)
1442
+ -idna-3.10 (conda-forge/noarch)
1443
+ -imagesize-1.4.1 (conda-forge/noarch)
1444
+ -importlib-metadata-8.7.0 (conda-forge/noarch)
1445
+ -importlib_metadata-8.7.0 (conda-forge/noarch)
1446
+ -importlib_resources-6.5.2 (conda-forge/noarch)
1447
+ -jaraco.classes-3.4.0 (conda-forge/noarch)
1448
+ -jaraco.context-6.0.1 (conda-forge/noarch)
1449
+ -jaraco.functools-4.1.0 (conda-forge/noarch)
1450
+ -jeepney-0.9.0 (conda-forge/noarch)
1451
+ -jinja2-3.1.6 (conda-forge/noarch)
1452
+ -keyring-25.6.0 (conda-forge/noarch)
1453
+ -keyutils-1.6.1 (conda-forge/linux-64)
1454
+ -krb5-1.21.3 (conda-forge/linux-64)
1455
+ -ld_impl_linux-64-2.43 (conda-forge/linux-64)
1456
+ -libabseil-20250127.1 (conda-forge/linux-64)
1457
+ -libarrow-20.0.0 (conda-forge/linux-64)
1458
+ -libarrow-acero-20.0.0 (conda-forge/linux-64)
1459
+ -libarrow-dataset-20.0.0 (conda-forge/linux-64)
1460
+ -libarrow-substrait-20.0.0 (conda-forge/linux-64)
1461
+ -libblas-3.9.0 (conda-forge/linux-64)
1462
+ -libbrotlicommon-1.1.0 (conda-forge/linux-64)
1463
+ -libbrotlidec-1.1.0 (conda-forge/linux-64)
1464
+ -libbrotlienc-1.1.0 (conda-forge/linux-64)
1465
+ -libcblas-3.9.0 (conda-forge/linux-64)
1466
+ -libcrc32c-1.1.2 (conda-forge/linux-64)
1467
+ -libcurl-8.13.0 (conda-forge/linux-64)
1468
+ -libedit-3.1.20250104 (conda-forge/linux-64)
1469
+ -libev-4.33 (conda-forge/linux-64)
1470
+ -libevent-2.1.12 (conda-forge/linux-64)
1471
+ -libexpat-2.7.0 (conda-forge/linux-64)
1472
+ -libffi-3.4.6 (conda-forge/linux-64)
1473
+ -libgcc-15.1.0 (conda-forge/linux-64)
1474
+ -libgcc-ng-15.1.0 (conda-forge/linux-64)
1475
+ -libgfortran-15.1.0 (conda-forge/linux-64)
1476
+ -libgfortran5-15.1.0 (conda-forge/linux-64)
1477
+ -libglib-2.84.2 (conda-forge/linux-64)
1478
+ -libgomp-15.1.0 (conda-forge/linux-64)
1479
+ -libgoogle-cloud-2.36.0 (conda-forge/linux-64)
1480
+ -libgoogle-cloud-storage-2.36.0 (conda-forge/linux-64)
1481
+ -libgrpc-1.71.0 (conda-forge/linux-64)
1482
+ -libiconv-1.18 (conda-forge/linux-64)
1483
+ -liblapack-3.9.0 (conda-forge/linux-64)
1484
+ -liblzma-5.8.1 (conda-forge/linux-64)
1485
+ -libmpdec-4.0.0 (conda-forge/linux-64)
1486
+ -libnghttp2-1.64.0 (conda-forge/linux-64)
1487
+ -libopenblas-0.3.29 (conda-forge/linux-64)
1488
+ -libopentelemetry-cpp-1.20.0 (conda-forge/linux-64)
1489
+ -libopentelemetry-cpp-headers-1.20.0 (conda-forge/linux-64)
1490
+ -libparquet-20.0.0 (conda-forge/linux-64)
1491
+ -libprotobuf-5.29.3 (conda-forge/linux-64)
1492
+ -libre2-11-2024.07.02 (conda-forge/linux-64)
1493
+ -libsodium-1.0.20 (conda-forge/linux-64)
1494
+ -libsqlite-3.49.2 (conda-forge/linux-64)
1495
+ -libssh2-1.11.1 (conda-forge/linux-64)
1496
+ -libstdcxx-15.1.0 (conda-forge/linux-64)
1497
+ -libstdcxx-ng-15.1.0 (conda-forge/linux-64)
1498
+ -libthrift-0.21.0 (conda-forge/linux-64)
1499
+ -libutf8proc-2.10.0 (conda-forge/linux-64)
1500
+ -libuuid-2.38.1 (conda-forge/linux-64)
1501
+ -libxml2-2.13.8 (conda-forge/linux-64)
1502
+ -libzlib-1.3.1 (conda-forge/linux-64)
1503
+ -lz4-c-1.10.0 (conda-forge/linux-64)
1504
+ -markdown-it-py-3.0.0 (conda-forge/noarch)
1505
+ -markupsafe-3.0.2 (conda-forge/linux-64)
1506
+ -mdurl-0.1.2 (conda-forge/noarch)
1507
+ -more-itertools-10.7.0 (conda-forge/noarch)
1508
+ -mypy-1.15.0 (conda-forge/linux-64)
1509
+ -mypy_extensions-1.1.0 (conda-forge/noarch)
1510
+ -natsort-8.4.0 (conda-forge/noarch)
1511
+ -ncurses-6.5 (conda-forge/linux-64)
1512
+ -nh3-0.2.21 (conda-forge/linux-64)
1513
+ -nlohmann_json-3.12.0 (conda-forge/linux-64)
1514
+ -numpy-2.2.6 (conda-forge/linux-64)
1515
+ -openssl-3.5.0 (conda-forge/linux-64)
1516
+ -orc-2.1.2 (conda-forge/linux-64)
1517
+ -packaging-25.0 (conda-forge/noarch)
1518
+ -paramiko-3.5.1 (conda-forge/noarch)
1519
+ -pathspec-0.12.1 (conda-forge/noarch)
1520
+ -pcre2-10.45 (conda-forge/linux-64)
1521
+ -pip-25.1.1 (conda-forge/noarch)
1522
+ -pkginfo-1.12.1.2 (conda-forge/noarch)
1523
+ -platformdirs-4.3.8 (conda-forge/noarch)
1524
+ -pluggy-1.6.0 (conda-forge/noarch)
1525
+ -polars-1.30.0 (conda-forge/linux-64)
1526
+ -polars-default-1.30.0 (conda-forge/linux-64)
1527
+ -progressbar2-4.5.0 (conda-forge/noarch)
1528
+ -prometheus-cpp-1.3.0 (conda-forge/linux-64)
1529
+ -psutil-7.0.0 (conda-forge/linux-64)
1530
+ -pyarrow-20.0.0 (conda-forge/linux-64)
1531
+ -pyarrow-core-20.0.0 (conda-forge/linux-64)
1532
+ -pycparser-2.22 (conda-forge/noarch)
1533
+ -pygments-2.19.1 (conda-forge/noarch)
1534
+ -pynacl-1.5.0 (conda-forge/linux-64)
1535
+ -pyproject-api-1.9.1 (conda-forge/noarch)
1536
+ -pysocks-1.7.1 (conda-forge/noarch)
1537
+ -python-3.13.3 (conda-forge/linux-64)
1538
+ -python-gil-3.13.3 (conda-forge/noarch)
1539
+ -python-utils-3.9.1 (conda-forge/noarch)
1540
+ -python_abi-3.13 (conda-forge/noarch)
1541
+ -pytz-2025.2 (conda-forge/noarch)
1542
+ -rapidfuzz-3.13.0 (conda-forge/linux-64)
1543
+ -re2-2024.07.02 (conda-forge/linux-64)
1544
+ -readline-8.2 (conda-forge/linux-64)
1545
+ -readme_renderer-44.0 (conda-forge/noarch)
1546
+ -requests-2.32.3 (conda-forge/noarch)
1547
+ -requests-toolbelt-1.0.0 (conda-forge/noarch)
1548
+ -rfc3986-2.0.0 (conda-forge/noarch)
1549
+ -rich-14.0.0 (conda-forge/noarch)
1550
+ -roman-numerals-py-3.1.0 (conda-forge/noarch)
1551
+ -ruamel.yaml-0.18.10 (conda-forge/linux-64)
1552
+ -ruamel.yaml.clib-0.2.8 (conda-forge/linux-64)
1553
+ -ruamel.yaml.jinja2-0.2.7 (conda-forge/noarch)
1554
+ -ruff-0.11.10 (conda-forge/linux-64)
1555
+ -s2n-1.5.18 (conda-forge/linux-64)
1556
+ -secretstorage-3.3.3 (conda-forge/linux-64)
1557
+ -setuptools-80.8.0 (conda-forge/noarch)
1558
+ -six-1.17.0 (conda-forge/noarch)
1559
+ -snappy-1.2.1 (conda-forge/linux-64)
1560
+ -snowballstemmer-3.0.1 (conda-forge/noarch)
1561
+ -soupsieve-2.7 (conda-forge/noarch)
1562
+ -sphinx-8.2.3 (conda-forge/noarch)
1563
+ -sphinx-autodoc-typehints-3.2.0 (conda-forge/noarch)
1564
+ -sphinx-click-6.0.0 (conda-forge/noarch)
1565
+ -sphinx-rtd-theme-3.0.1 (conda-forge/noarch)
1566
+ -sphinx_rtd_theme-3.0.1 (conda-forge/noarch)
1567
+ -sphinxcontrib-applehelp-2.0.0 (conda-forge/noarch)
1568
+ -sphinxcontrib-devhelp-2.0.0 (conda-forge/noarch)
1569
+ -sphinxcontrib-htmlhelp-2.1.0 (conda-forge/noarch)
1570
+ -sphinxcontrib-jquery-4.1 (conda-forge/noarch)
1571
+ -sphinxcontrib-jsmath-1.0.1 (conda-forge/noarch)
1572
+ -sphinxcontrib-qthelp-2.0.0 (conda-forge/noarch)
1573
+ -sphinxcontrib-serializinghtml-1.1.10 (conda-forge/noarch)
1574
+ -stdlib-list-0.11.1 (conda-forge/noarch)
1575
+ -tk-8.6.13 (conda-forge/linux-64)
1576
+ -tomli-2.2.1 (conda-forge/noarch)
1577
+ -tomli-w-1.2.0 (conda-forge/noarch)
1578
+ -tox-4.26.0 (conda-forge/noarch)
1579
+ -tqdm-4.67.1 (conda-forge/noarch)
1580
+ -trove-classifiers-2025.5.9.12 (conda-forge/noarch)
1581
+ -twine-6.1.0 (conda-forge/noarch)
1582
+ -types-appdirs-1.4.3.5 (conda-forge/noarch)
1583
+ -types-paramiko-3.5.0.20250516 (conda-forge/noarch)
1584
+ -types-requests-2.32.0.20250515 (conda-forge/noarch)
1585
+ -types-tqdm-4.67.0.20250516 (conda-forge/noarch)
1586
+ -typing-extensions-4.13.2 (conda-forge/noarch)
1587
+ -typing_extensions-4.13.2 (conda-forge/noarch)
1588
+ -tzdata-2025b (conda-forge/noarch)
1589
+ -urllib3-2.4.0 (conda-forge/noarch)
1590
+ -uv-0.7.6 (conda-forge/linux-64)
1591
+ -virtualenv-20.31.2 (conda-forge/noarch)
1592
+ -zipp-3.21.0 (conda-forge/noarch)
1593
+ -zlib-1.3.1 (conda-forge/linux-64)
1594
+ -zstandard-0.23.0 (conda-forge/linux-64)
1595
+ -zstd-1.5.7 (conda-forge/linux-64)
1596
+
1597
+ 2025-05-30 12:58:18 (rev 15)
1598
+ +_libgcc_mutex-0.1 (conda-forge/linux-64)
1599
+ +_openmp_mutex-4.5 (conda-forge/linux-64)
1600
+ +bzip2-1.0.8 (conda-forge/linux-64)
1601
+ +ca-certificates-2025.4.26 (conda-forge/noarch)
1602
+ +cachetools-6.0.0 (conda-forge/noarch)
1603
+ +chardet-5.2.0 (conda-forge/noarch)
1604
+ +colorama-0.4.6 (conda-forge/noarch)
1605
+ +distlib-0.3.9 (conda-forge/noarch)
1606
+ +filelock-3.18.0 (conda-forge/noarch)
1607
+ +ld_impl_linux-64-2.43 (conda-forge/linux-64)
1608
+ +libexpat-2.7.0 (conda-forge/linux-64)
1609
+ +libffi-3.4.6 (conda-forge/linux-64)
1610
+ +libgcc-15.1.0 (conda-forge/linux-64)
1611
+ +libgcc-ng-15.1.0 (conda-forge/linux-64)
1612
+ +libgomp-15.1.0 (conda-forge/linux-64)
1613
+ +liblzma-5.8.1 (conda-forge/linux-64)
1614
+ +libmpdec-4.0.0 (conda-forge/linux-64)
1615
+ +libsqlite-3.50.0 (conda-forge/linux-64)
1616
+ +libstdcxx-15.1.0 (conda-forge/linux-64)
1617
+ +libuuid-2.38.1 (conda-forge/linux-64)
1618
+ +libzlib-1.3.1 (conda-forge/linux-64)
1619
+ +ncurses-6.5 (conda-forge/linux-64)
1620
+ +openssl-3.5.0 (conda-forge/linux-64)
1621
+ +packaging-25.0 (conda-forge/noarch)
1622
+ +pip-25.1.1 (conda-forge/noarch)
1623
+ +platformdirs-4.3.8 (conda-forge/noarch)
1624
+ +pluggy-1.6.0 (conda-forge/noarch)
1625
+ +pyproject-api-1.9.1 (conda-forge/noarch)
1626
+ +python-3.13.3 (conda-forge/linux-64)
1627
+ +python_abi-3.13 (conda-forge/noarch)
1628
+ +readline-8.2 (conda-forge/linux-64)
1629
+ +tk-8.6.13 (conda-forge/linux-64)
1630
+ +tomli-2.2.1 (conda-forge/noarch)
1631
+ +tox-4.26.0 (conda-forge/noarch)
1632
+ +typing_extensions-4.13.2 (conda-forge/noarch)
1633
+ +tzdata-2025b (conda-forge/noarch)
1634
+ +uv-0.7.8 (conda-forge/linux-64)
1635
+ +virtualenv-20.31.2 (conda-forge/noarch)
1636
+
1637
+ 2025-05-30 12:58:26 (rev 16)
1638
+ +_python_abi3_support-1.0 (conda-forge/noarch)
1639
+ +alabaster-1.0.0 (conda-forge/noarch)
1640
+ +appdirs-1.4.4 (conda-forge/noarch)
1641
+ +aws-c-auth-0.9.0 (conda-forge/linux-64)
1642
+ +aws-c-cal-0.9.1 (conda-forge/linux-64)
1643
+ +aws-c-common-0.12.3 (conda-forge/linux-64)
1644
+ +aws-c-compression-0.3.1 (conda-forge/linux-64)
1645
+ +aws-c-event-stream-0.5.4 (conda-forge/linux-64)
1646
+ +aws-c-http-0.10.1 (conda-forge/linux-64)
1647
+ +aws-c-io-0.19.1 (conda-forge/linux-64)
1648
+ +aws-c-mqtt-0.13.0 (conda-forge/linux-64)
1649
+ +aws-c-s3-0.8.0 (conda-forge/linux-64)
1650
+ +aws-c-sdkutils-0.2.4 (conda-forge/linux-64)
1651
+ +aws-checksums-0.2.7 (conda-forge/linux-64)
1652
+ +aws-crt-cpp-0.32.6 (conda-forge/linux-64)
1653
+ +aws-sdk-cpp-1.11.510 (conda-forge/linux-64)
1654
+ +azure-core-cpp-1.14.0 (conda-forge/linux-64)
1655
+ +azure-identity-cpp-1.10.0 (conda-forge/linux-64)
1656
+ +azure-storage-blobs-cpp-12.13.0 (conda-forge/linux-64)
1657
+ +azure-storage-common-cpp-12.8.0 (conda-forge/linux-64)
1658
+ +azure-storage-files-datalake-cpp-12.12.0 (conda-forge/linux-64)
1659
+ +babel-2.17.0 (conda-forge/noarch)
1660
+ +backports-1.0 (conda-forge/noarch)
1661
+ +backports.tarfile-1.2.0 (conda-forge/noarch)
1662
+ +bcrypt-4.3.0 (conda-forge/linux-64)
1663
+ +beautifulsoup4-4.13.4 (conda-forge/noarch)
1664
+ +brotli-python-1.1.0 (conda-forge/linux-64)
1665
+ +c-ares-1.34.5 (conda-forge/linux-64)
1666
+ +certifi-2025.4.26 (conda-forge/noarch)
1667
+ +cffi-1.17.1 (conda-forge/linux-64)
1668
+ +charset-normalizer-3.4.2 (conda-forge/noarch)
1669
+ +click-8.2.1 (conda-forge/noarch)
1670
+ +cmarkgfm-2024.11.20 (conda-forge/linux-64)
1671
+ +conda-souschef-2.2.3 (conda-forge/noarch)
1672
+ +cpython-3.13.3 (conda-forge/noarch)
1673
+ +cryptography-45.0.3 (conda-forge/linux-64)
1674
+ +dbus-1.16.2 (conda-forge/linux-64)
1675
+ +docutils-0.21.2 (conda-forge/noarch)
1676
+ +editables-0.5 (conda-forge/noarch)
1677
+ +gflags-2.2.2 (conda-forge/linux-64)
1678
+ +glog-0.7.1 (conda-forge/linux-64)
1679
+ +grayskull-2.9.1 (conda-forge/noarch)
1680
+ +h2-4.2.0 (conda-forge/noarch)
1681
+ +hatchling-1.27.0 (conda-forge/noarch)
1682
+ +hpack-4.1.0 (conda-forge/noarch)
1683
+ +hyperframe-6.1.0 (conda-forge/noarch)
1684
+ +icu-75.1 (conda-forge/linux-64)
1685
+ +id-1.5.0 (conda-forge/noarch)
1686
+ +idna-3.10 (conda-forge/noarch)
1687
+ +imagesize-1.4.1 (conda-forge/noarch)
1688
+ +importlib-metadata-8.7.0 (conda-forge/noarch)
1689
+ +importlib_metadata-8.7.0 (conda-forge/noarch)
1690
+ +importlib_resources-6.5.2 (conda-forge/noarch)
1691
+ +jaraco.classes-3.4.0 (conda-forge/noarch)
1692
+ +jaraco.context-6.0.1 (conda-forge/noarch)
1693
+ +jaraco.functools-4.1.0 (conda-forge/noarch)
1694
+ +jeepney-0.9.0 (conda-forge/noarch)
1695
+ +jinja2-3.1.6 (conda-forge/noarch)
1696
+ +keyring-25.6.0 (conda-forge/noarch)
1697
+ +keyutils-1.6.1 (conda-forge/linux-64)
1698
+ +krb5-1.21.3 (conda-forge/linux-64)
1699
+ +libabseil-20250127.1 (conda-forge/linux-64)
1700
+ +libarrow-20.0.0 (conda-forge/linux-64)
1701
+ +libarrow-acero-20.0.0 (conda-forge/linux-64)
1702
+ +libarrow-dataset-20.0.0 (conda-forge/linux-64)
1703
+ +libarrow-substrait-20.0.0 (conda-forge/linux-64)
1704
+ +libblas-3.9.0 (conda-forge/linux-64)
1705
+ +libbrotlicommon-1.1.0 (conda-forge/linux-64)
1706
+ +libbrotlidec-1.1.0 (conda-forge/linux-64)
1707
+ +libbrotlienc-1.1.0 (conda-forge/linux-64)
1708
+ +libcblas-3.9.0 (conda-forge/linux-64)
1709
+ +libcrc32c-1.1.2 (conda-forge/linux-64)
1710
+ +libcurl-8.14.0 (conda-forge/linux-64)
1711
+ +libedit-3.1.20250104 (conda-forge/linux-64)
1712
+ +libev-4.33 (conda-forge/linux-64)
1713
+ +libevent-2.1.12 (conda-forge/linux-64)
1714
+ +libgfortran-15.1.0 (conda-forge/linux-64)
1715
+ +libgfortran5-15.1.0 (conda-forge/linux-64)
1716
+ +libglib-2.84.2 (conda-forge/linux-64)
1717
+ +libgoogle-cloud-2.36.0 (conda-forge/linux-64)
1718
+ +libgoogle-cloud-storage-2.36.0 (conda-forge/linux-64)
1719
+ +libgrpc-1.71.0 (conda-forge/linux-64)
1720
+ +libiconv-1.18 (conda-forge/linux-64)
1721
+ +liblapack-3.9.0 (conda-forge/linux-64)
1722
+ +libnghttp2-1.64.0 (conda-forge/linux-64)
1723
+ +libopenblas-0.3.29 (conda-forge/linux-64)
1724
+ +libopentelemetry-cpp-1.20.0 (conda-forge/linux-64)
1725
+ +libopentelemetry-cpp-headers-1.20.0 (conda-forge/linux-64)
1726
+ +libparquet-20.0.0 (conda-forge/linux-64)
1727
+ +libprotobuf-5.29.3 (conda-forge/linux-64)
1728
+ +libre2-11-2024.07.02 (conda-forge/linux-64)
1729
+ +libsodium-1.0.20 (conda-forge/linux-64)
1730
+ +libssh2-1.11.1 (conda-forge/linux-64)
1731
+ +libstdcxx-ng-15.1.0 (conda-forge/linux-64)
1732
+ +libthrift-0.21.0 (conda-forge/linux-64)
1733
+ +libutf8proc-2.10.0 (conda-forge/linux-64)
1734
+ +libxml2-2.13.8 (conda-forge/linux-64)
1735
+ +lz4-c-1.10.0 (conda-forge/linux-64)
1736
+ +markdown-it-py-3.0.0 (conda-forge/noarch)
1737
+ +markupsafe-3.0.2 (conda-forge/linux-64)
1738
+ +mdurl-0.1.2 (conda-forge/noarch)
1739
+ +more-itertools-10.7.0 (conda-forge/noarch)
1740
+ +mypy-1.16.0 (conda-forge/linux-64)
1741
+ +mypy_extensions-1.1.0 (conda-forge/noarch)
1742
+ +natsort-8.4.0 (conda-forge/noarch)
1743
+ +nh3-0.2.21 (conda-forge/linux-64)
1744
+ +nlohmann_json-3.12.0 (conda-forge/linux-64)
1745
+ +numpy-2.2.6 (conda-forge/linux-64)
1746
+ +orc-2.1.2 (conda-forge/linux-64)
1747
+ +paramiko-3.5.1 (conda-forge/noarch)
1748
+ +pathspec-0.12.1 (conda-forge/noarch)
1749
+ +pcre2-10.45 (conda-forge/linux-64)
1750
+ +pkginfo-1.12.1.2 (conda-forge/noarch)
1751
+ +polars-1.30.0 (conda-forge/linux-64)
1752
+ +polars-default-1.30.0 (conda-forge/linux-64)
1753
+ +progressbar2-4.5.0 (conda-forge/noarch)
1754
+ +prometheus-cpp-1.3.0 (conda-forge/linux-64)
1755
+ +psutil-7.0.0 (conda-forge/linux-64)
1756
+ +pyarrow-20.0.0 (conda-forge/linux-64)
1757
+ +pyarrow-core-20.0.0 (conda-forge/linux-64)
1758
+ +pycparser-2.22 (conda-forge/noarch)
1759
+ +pygments-2.19.1 (conda-forge/noarch)
1760
+ +pynacl-1.5.0 (conda-forge/linux-64)
1761
+ +pysocks-1.7.1 (conda-forge/noarch)
1762
+ +python-gil-3.13.3 (conda-forge/noarch)
1763
+ +python-utils-3.9.1 (conda-forge/noarch)
1764
+ +pytz-2025.2 (conda-forge/noarch)
1765
+ +rapidfuzz-3.13.0 (conda-forge/linux-64)
1766
+ +re2-2024.07.02 (conda-forge/linux-64)
1767
+ +readme_renderer-44.0 (conda-forge/noarch)
1768
+ +requests-2.32.3 (conda-forge/noarch)
1769
+ +requests-toolbelt-1.0.0 (conda-forge/noarch)
1770
+ +rfc3986-2.0.0 (conda-forge/noarch)
1771
+ +rich-14.0.0 (conda-forge/noarch)
1772
+ +roman-numerals-py-3.1.0 (conda-forge/noarch)
1773
+ +ruamel.yaml-0.18.11 (conda-forge/linux-64)
1774
+ +ruamel.yaml.clib-0.2.8 (conda-forge/linux-64)
1775
+ +ruamel.yaml.jinja2-0.2.7 (conda-forge/noarch)
1776
+ +ruff-0.11.12 (conda-forge/linux-64)
1777
+ +s2n-1.5.19 (conda-forge/linux-64)
1778
+ +secretstorage-3.3.3 (conda-forge/linux-64)
1779
+ +setuptools-80.8.0 (conda-forge/noarch)
1780
+ +six-1.17.0 (conda-forge/noarch)
1781
+ +snappy-1.2.1 (conda-forge/linux-64)
1782
+ +snowballstemmer-3.0.1 (conda-forge/noarch)
1783
+ +soupsieve-2.7 (conda-forge/noarch)
1784
+ +sphinx-8.2.3 (conda-forge/noarch)
1785
+ +sphinx-autodoc-typehints-3.2.0 (conda-forge/noarch)
1786
+ +sphinx-click-6.0.0 (conda-forge/noarch)
1787
+ +sphinx-rtd-theme-3.0.1 (conda-forge/noarch)
1788
+ +sphinx_rtd_theme-3.0.1 (conda-forge/noarch)
1789
+ +sphinxcontrib-applehelp-2.0.0 (conda-forge/noarch)
1790
+ +sphinxcontrib-devhelp-2.0.0 (conda-forge/noarch)
1791
+ +sphinxcontrib-htmlhelp-2.1.0 (conda-forge/noarch)
1792
+ +sphinxcontrib-jquery-4.1 (conda-forge/noarch)
1793
+ +sphinxcontrib-jsmath-1.0.1 (conda-forge/noarch)
1794
+ +sphinxcontrib-qthelp-2.0.0 (conda-forge/noarch)
1795
+ +sphinxcontrib-serializinghtml-1.1.10 (conda-forge/noarch)
1796
+ +stdlib-list-0.11.1 (conda-forge/noarch)
1797
+ +tomli-w-1.2.0 (conda-forge/noarch)
1798
+ +tqdm-4.67.1 (conda-forge/noarch)
1799
+ +trove-classifiers-2025.5.9.12 (conda-forge/noarch)
1800
+ +twine-6.1.0 (conda-forge/noarch)
1801
+ +types-appdirs-1.4.3.5 (conda-forge/noarch)
1802
+ +types-paramiko-3.5.0.20250516 (conda-forge/noarch)
1803
+ +types-requests-2.32.0.20250515 (conda-forge/noarch)
1804
+ +types-tqdm-4.67.0.20250516 (conda-forge/noarch)
1805
+ +typing-extensions-4.13.2 (conda-forge/noarch)
1806
+ +urllib3-2.4.0 (conda-forge/noarch)
1807
+ +zipp-3.22.0 (conda-forge/noarch)
1808
+ +zlib-1.3.1 (conda-forge/linux-64)
1809
+ +zstandard-0.23.0 (conda-forge/linux-64)
1810
+ +zstd-1.5.7 (conda-forge/linux-64)
1811
+
@@ -8,7 +8,7 @@ build-backend = "hatchling.build"
8
8
  # Project metdata section. Provides the genral ID information about the project.
9
9
  [project]
10
10
  name = "sl-shared-assets"
11
- version = "1.0.0rc27"
11
+ version = "1.0.1"
12
12
  description = "Stores assets shared between multiple Sun (NeuroAI) lab data pipelines."
13
13
  readme = "README.md"
14
14
  license = { file = "LICENSE" }
@@ -8,6 +8,7 @@ from ataraxis_base_utilities import LogLevel, console, ensure_directory_exists
8
8
  from .tools import ascend_tyche_data, verify_session_checksum, generate_project_manifest
9
9
  from .server import generate_server_credentials
10
10
  from .data_classes import (
11
+ SessionData,
11
12
  ExperimentState,
12
13
  ProjectConfiguration,
13
14
  MesoscopeSystemConfiguration,
@@ -57,18 +58,25 @@ def verify_session_integrity(session_path: str, create_processed_directories: bo
57
58
  that stores the data checksum generated before transferring the data to long-term storage destination. This function
58
59
  always verified the integrity of the 'raw_data' directory. It does not work with 'processed_data' or any other
59
60
  directories. If the session data was corrupted, the command removes the 'telomere.bin' file, marking the session as
60
- 'incomplete' and automatically excluding it from all further automated processing runtimes.
61
+ 'incomplete' and automatically excluding it from all further automated processing runtimes. if the session data
62
+ is intact, generates a 'verified.bin' marker file inside the session's raw_data folder.
61
63
 
62
64
  The command is also used by Sun lab data acquisition systems to generate the processed data hierarchy for each
63
65
  processed session. This use case is fully automated and should not be triggered manually by the user.
64
66
  """
65
67
  session = Path(session_path)
66
- if verify_session_checksum(
68
+
69
+ # Runs the verification process
70
+ verify_session_checksum(
67
71
  session, create_processed_data_directory=create_processed_directories, processed_data_root=processed_data_root
68
- ):
69
- console.echo(message=f"Session {session.stem} raw data integrity: verified.", level=LogLevel.SUCCESS)
72
+ )
73
+
74
+ # Checks the outcome of the verification process
75
+ session_data = SessionData.load(session_path=session)
76
+ if session_data.raw_data.verified_bin_path.exists():
77
+ console.echo(message=f"Session {session.stem} raw data integrity: Verified.", level=LogLevel.SUCCESS)
70
78
  else:
71
- console.echo(message=f"Session {session.stem} raw data integrity: compromised!", level=LogLevel.ERROR)
79
+ console.echo(message=f"Session {session.stem} raw data integrity: Compromised!", level=LogLevel.ERROR)
72
80
 
73
81
 
74
82
  @click.command()
@@ -7,6 +7,7 @@ from .tools import (
7
7
  )
8
8
  from .server import generate_server_credentials as generate_server_credentials
9
9
  from .data_classes import (
10
+ SessionData as SessionData,
10
11
  ExperimentState as ExperimentState,
11
12
  ProjectConfiguration as ProjectConfiguration,
12
13
  MesoscopeSystemConfiguration as MesoscopeSystemConfiguration,
@@ -22,7 +23,8 @@ def verify_session_integrity(session_path: str, create_processed_directories: bo
22
23
  that stores the data checksum generated before transferring the data to long-term storage destination. This function
23
24
  always verified the integrity of the 'raw_data' directory. It does not work with 'processed_data' or any other
24
25
  directories. If the session data was corrupted, the command removes the 'telomere.bin' file, marking the session as
25
- 'incomplete' and automatically excluding it from all further automated processing runtimes.
26
+ 'incomplete' and automatically excluding it from all further automated processing runtimes. if the session data
27
+ is intact, generates a 'verified.bin' marker file inside the session's raw_data folder.
26
28
 
27
29
  The command is also used by Sun lab data acquisition systems to generate the processed data hierarchy for each
28
30
  processed session. This use case is fully automated and should not be triggered manually by the user.
@@ -207,7 +207,7 @@ class MesoscopeMicroControllers:
207
207
  PC, conserving communication bandwidth."""
208
208
  torque_averaging_pool_size: int = 10
209
209
  """The number of torque sensor readouts to average together to produce the final torque sensor readout value."""
210
- wheel_encoder_ppr = 8192
210
+ wheel_encoder_ppr: int = 8192
211
211
  """The resolution of the managed quadrature encoder, in Pulses Per Revolution (PPR). This is the number of
212
212
  quadrature pulses the encoder emits per full 360-degree rotation."""
213
213
  wheel_encoder_report_cw: bool = False
@@ -219,9 +219,9 @@ class MesoscopeMicroControllers:
219
219
  wheel_encoder_delta_threshold_pulse: int = 15
220
220
  """The minimum difference, in encoder pulse counts, between two encoder readouts for the change to be reported to
221
221
  the PC. This is used to prevent reporting idle readouts and filter out sub-threshold noise."""
222
- wheel_encoder_polling_delay_us = 500
222
+ wheel_encoder_polling_delay_us: int = 500
223
223
  """The delay, in microseconds, between any two successive encoder state readouts."""
224
- cm_per_unity_unit = 10.0
224
+ cm_per_unity_unit: float = 10.0
225
225
  """The length of each Unity 'unit' in real-world centimeters recorded by the running wheel encoder."""
226
226
  screen_trigger_pulse_duration_ms: int = 500
227
227
  """The duration of the HIGH phase of the TTL pulse used to toggle the VR screens between ON and OFF states."""
@@ -97,12 +97,12 @@ class MesoscopeMicroControllers:
97
97
  torque_signal_threshold_adc: int = ...
98
98
  torque_delta_threshold_adc: int = ...
99
99
  torque_averaging_pool_size: int = ...
100
- wheel_encoder_ppr = ...
100
+ wheel_encoder_ppr: int = ...
101
101
  wheel_encoder_report_cw: bool = ...
102
102
  wheel_encoder_report_ccw: bool = ...
103
103
  wheel_encoder_delta_threshold_pulse: int = ...
104
- wheel_encoder_polling_delay_us = ...
105
- cm_per_unity_unit = ...
104
+ wheel_encoder_polling_delay_us: int = ...
105
+ cm_per_unity_unit: float = ...
106
106
  screen_trigger_pulse_duration_ms: int = ...
107
107
  auditory_tone_duration_ms: int = ...
108
108
  valve_calibration_pulse_count: int = ...
@@ -217,6 +217,11 @@ class RawData:
217
217
  the long-term storage destinations (NAS and Server) and the integrity of the moved data is verified on at least one
218
218
  destination. During 'purge' sl-experiment runtimes, the library discovers and removes all session data marked with
219
219
  'ubiquitin.bin' files from the machine that runs the code."""
220
+ verified_bin_path: Path = Path()
221
+ """Stores the path to the verified.bin file. This marker file is created (or removed) by the sl-shared-assets
222
+ 'verify-session' CLI command to indicate whether the session data inside the folder marked by the file has been
223
+ verified for integrity. Primarily, this is used when the data is moved to the long-term storage destination (BioHPC
224
+ server) to ensure it is safe to remove any local copies of the data stored on the acquisition system machine(s)."""
220
225
 
221
226
  def resolve_paths(self, root_directory_path: Path) -> None:
222
227
  """Resolves all paths managed by the class instance based on the input root directory path.
@@ -248,6 +253,7 @@ class RawData:
248
253
  self.system_configuration_path = self.raw_data_path.joinpath("system_configuration.yaml")
249
254
  self.telomere_path = self.raw_data_path.joinpath("telomere.bin")
250
255
  self.ubiquitin_path = self.raw_data_path.joinpath("ubiquitin.bin")
256
+ self.verified_bin_path = self.raw_data_path.joinpath("verified.bin")
251
257
 
252
258
  def make_directories(self) -> None:
253
259
  """Ensures that all major subdirectories and the root directory exist, creating any missing directories."""
@@ -96,6 +96,7 @@ class RawData:
96
96
  checksum_path: Path = ...
97
97
  telomere_path: Path = ...
98
98
  ubiquitin_path: Path = ...
99
+ verified_bin_path: Path = ...
99
100
  def resolve_paths(self, root_directory_path: Path) -> None:
100
101
  """Resolves all paths managed by the class instance based on the input root directory path.
101
102
 
@@ -75,7 +75,7 @@ class Server:
75
75
  """
76
76
 
77
77
  def __init__(self, credentials_path: Path) -> None:
78
- # Tracker used to prevent __del__ from classing stop() for a partially initialized class.
78
+ # Tracker used to prevent __del__ from calling stop() for a partially initialized class.
79
79
  self._open: bool = False
80
80
 
81
81
  # Loads the credentials from the provided .yaml file
@@ -95,6 +95,7 @@ class Server:
95
95
  self._credentials.host, username=self._credentials.username, password=self._credentials.password
96
96
  )
97
97
  console.echo(f"Connected to {self._credentials.host}", level=LogLevel.SUCCESS)
98
+ self._open = True
98
99
  break
99
100
  except paramiko.AuthenticationException:
100
101
  message = (
@@ -131,7 +132,7 @@ class Server:
131
132
  job: The Job object that contains all job data.
132
133
 
133
134
  Returns:
134
- The job object whose 'job_id' attribute had been modified with the job ID, if the job was successfully
135
+ The job object whose 'job_id' attribute had been modified with the job ID if the job was successfully
135
136
  submitted.
136
137
 
137
138
  Raises:
@@ -69,7 +69,7 @@ class Server:
69
69
  job: The Job object that contains all job data.
70
70
 
71
71
  Returns:
72
- The job object whose 'job_id' attribute had been modified with the job ID, if the job was successfully
72
+ The job object whose 'job_id' attribute had been modified with the job ID if the job was successfully
73
73
  submitted.
74
74
 
75
75
  Raises:
@@ -21,6 +21,7 @@ _excluded_files = {
21
21
  "multi_day_suite2p.bin",
22
22
  "behavior.bin",
23
23
  "dlc.bin",
24
+ "verified.bin",
24
25
  }
25
26
 
26
27
 
@@ -61,6 +61,7 @@ def generate_project_manifest(
61
61
  "raw_data": [], # Server-side raw_data folder path.
62
62
  "processed_data": [], # Server-side processed_data folder path.
63
63
  "complete": [], # Determines if the session data is complete. Incomplete sessions are excluded from processing.
64
+ "verified": [], # Determines if the session data integrity has been verified upon transfer to storage machine.
64
65
  "single_day_suite2p": [], # Determines whether the session has been processed with the single-day s2p pipeline.
65
66
  "multi_day_suite2p": [], # Determines whether the session has been processed with the multi-day s2p pipeline.
66
67
  "behavior": [], # Determines whether the session has been processed with the behavior extraction pipeline.
@@ -87,9 +88,13 @@ def generate_project_manifest(
87
88
  # If the session raw_data folder contains the telomere.bin file, marks the session as complete.
88
89
  manifest["complete"].append(session_data.raw_data.telomere_path.exists())
89
90
 
90
- # If the session is incomplete, marks all processing steps as FALSE, as automatic processing is disabled for
91
- # incomplete sessions.
92
- if not manifest["complete"][-1]:
91
+ # If the session raw_data folder contains the verified.bin file, marks the session as verified.
92
+ manifest["verified"].append(session_data.raw_data.verified_bin_path.exists())
93
+
94
+ # If the session is incomplete or unverified, marks all processing steps as FALSE, as automatic processing is
95
+ # disabled for incomplete sessions. If the session unverified, the case is even more severe, as its data may be
96
+ # corrupted.
97
+ if not manifest["complete"][-1] or not not manifest["verified"][-1]:
93
98
  manifest["single_day_suite2p"].append(False)
94
99
  manifest["multi_day_suite2p"].append(False)
95
100
  manifest["behavior"].append(False)
@@ -120,6 +125,7 @@ def generate_project_manifest(
120
125
  "processed_data": pl.String,
121
126
  "type": pl.String,
122
127
  "complete": pl.Boolean,
128
+ "verified": pl.Boolean,
123
129
  "single_day_suite2p": pl.Boolean,
124
130
  "multi_day_suite2p": pl.Boolean,
125
131
  "behavior": pl.Boolean,
@@ -139,13 +145,13 @@ def generate_project_manifest(
139
145
 
140
146
  def verify_session_checksum(
141
147
  session_path: Path, create_processed_data_directory: bool = True, processed_data_root: None | Path = None
142
- ) -> bool:
148
+ ) -> None:
143
149
  """Verifies the integrity of the session's raw data by generating the checksum of the raw_data directory and
144
150
  comparing it against the checksum stored in the ax_checksum.txt file.
145
151
 
146
152
  Primarily, this function is used to verify data integrity after transferring it from a local PC to the remote
147
- server for long-term storage. This function is designed to do nothing if the checksum matches and to remove the
148
- 'telomere.bin' marker file if it does not.
153
+ server for long-term storage. This function is designed to create the 'verified.bin' marker file if the checksum
154
+ matches and to remove the 'telomere.bin' and 'verified.bin' marker files if it does not.
149
155
 
150
156
  Notes:
151
157
  Removing the telomere.bin marker file from session's raw_data folder marks the session as incomplete, excluding
@@ -161,9 +167,6 @@ def verify_session_checksum(
161
167
  processed_data_root: The root directory where to store the processed data hierarchy. This path has to point to
162
168
  the root directory where to store the processed data from all projects, and it will be automatically
163
169
  modified to include the project name, the animal name, and the session ID.
164
-
165
- Returns:
166
- True if the checksum matches, False otherwise.
167
170
  """
168
171
 
169
172
  # Loads session data layout. If configured to do so, also creates the processed data hierarchy
@@ -173,6 +176,11 @@ def verify_session_checksum(
173
176
  make_processed_data_directory=create_processed_data_directory,
174
177
  )
175
178
 
179
+ # Unlinks the verified.bin marker if it exists. The presence or absence of the marker is used as the
180
+ # primary heuristic for determining if the session data passed verification. Unlinking it early helps in the case
181
+ # the verification procedure aborts unexpectedly for any reason.
182
+ session_data.raw_data.verified_bin_path.unlink(missing_ok=True)
183
+
176
184
  # Re-calculates the checksum for the raw_data directory
177
185
  calculated_checksum = calculate_directory_checksum(
178
186
  directory=session_data.raw_data.raw_data_path, batch=False, save_checksum=False
@@ -185,10 +193,9 @@ def verify_session_checksum(
185
193
  # If the two checksums do not match, this likely indicates data corruption.
186
194
  if stored_checksum != calculated_checksum:
187
195
  # If the telomere.bin file exists, removes this file. This automatically marks the session as incomplete for
188
- # all other Sun lab runtimes. The presence of the telomere.bin file after integrity verification is used as a
189
- # heuristic for determining whether the session has passed the verification process.
190
- if session_data.raw_data.telomere_path.exists():
191
- session_data.raw_data.telomere_path.unlink()
192
- return False
196
+ # all other Sun lab runtimes.
197
+ session_data.raw_data.telomere_path.unlink(missing_ok=True)
193
198
 
194
- return True
199
+ # Otherwise, ensures that the session is marked with the verified.bin marker file.
200
+ else:
201
+ session_data.raw_data.verified_bin_path.touch(exist_ok=True)
@@ -29,13 +29,13 @@ def generate_project_manifest(
29
29
 
30
30
  def verify_session_checksum(
31
31
  session_path: Path, create_processed_data_directory: bool = True, processed_data_root: None | Path = None
32
- ) -> bool:
32
+ ) -> None:
33
33
  """Verifies the integrity of the session's raw data by generating the checksum of the raw_data directory and
34
34
  comparing it against the checksum stored in the ax_checksum.txt file.
35
35
 
36
36
  Primarily, this function is used to verify data integrity after transferring it from a local PC to the remote
37
- server for long-term storage. This function is designed to do nothing if the checksum matches and to remove the
38
- 'telomere.bin' marker file if it does not.
37
+ server for long-term storage. This function is designed to create the 'verified.bin' marker file if the checksum
38
+ matches and to remove the 'telomere.bin' and 'verified.bin' marker files if it does not.
39
39
 
40
40
  Notes:
41
41
  Removing the telomere.bin marker file from session's raw_data folder marks the session as incomplete, excluding
@@ -51,7 +51,4 @@ def verify_session_checksum(
51
51
  processed_data_root: The root directory where to store the processed data hierarchy. This path has to point to
52
52
  the root directory where to store the processed data from all projects, and it will be automatically
53
53
  modified to include the project name, the animal name, and the session ID.
54
-
55
- Returns:
56
- True if the checksum matches, False otherwise.
57
54
  """