dataerai-sdk 0.2.0b84__tar.gz → 0.2.0.dev2__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 (335) hide show
  1. dataerai_sdk-0.2.0.dev2/PKG-INFO +676 -0
  2. dataerai_sdk-0.2.0.dev2/README.md +214 -0
  3. dataerai_sdk-0.2.0.dev2/dataerai/__init__.py +35 -0
  4. dataerai_sdk-0.2.0.dev2/dataerai/_daemon.py +57 -0
  5. dataerai_sdk-0.2.0.dev2/dataerai/_errors.py +17 -0
  6. dataerai_sdk-0.2.0.dev2/dataerai/_types.py +165 -0
  7. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/_version.py +1 -1
  8. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/bambu/__init__.py +0 -3
  9. dataerai_sdk-0.2.0.dev2/dataerai/bambu/cli.py +93 -0
  10. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/bambu/fleet_hub.py +5 -22
  11. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/bambu/integration.py +2 -27
  12. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/bambu/recorder.py +0 -5
  13. dataerai_sdk-0.2.0.dev2/dataerai/client.py +866 -0
  14. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/__init__.py +0 -32
  15. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/api.py +3 -107
  16. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/bases.py +0 -98
  17. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/netcdf.py +6 -9
  18. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/core.py +4 -33
  19. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/data_type_definitions.py +0 -102
  20. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/AFM/bruker/nanoscope.py +0 -25
  21. dataerai_sdk-0.2.0.dev2/dataerai/metaextract/instruments/AFM/oxfordAFM/ibw.py +55 -0
  22. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/registry.py +5 -195
  23. dataerai_sdk-0.2.0.dev2/dataerai/metaextract/spectroscopy/jcamp.py +267 -0
  24. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/metadata.py +57 -218
  25. dataerai_sdk-0.2.0.dev2/dataerai/metaextract/viz/metadata_schemas/__init__.py +12 -0
  26. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/metadata_schemas/afm.py +2 -75
  27. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/access.py +9 -103
  28. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/attribution/client.py +1 -2
  29. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/croissant.py +1 -1
  30. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/lineage.py +6 -11
  31. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/staging.py +2 -2
  32. dataerai_sdk-0.2.0.dev2/dataerai/runner/__init__.py +18 -0
  33. dataerai_sdk-0.2.0.dev2/dataerai/runner/agent.py +320 -0
  34. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/api.py +10 -65
  35. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/artifacts.py +12 -44
  36. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/capabilities.py +4 -122
  37. dataerai_sdk-0.2.0.dev2/dataerai/runner/cli.py +225 -0
  38. dataerai_sdk-0.2.0.dev2/dataerai/runner/config.py +41 -0
  39. dataerai_sdk-0.2.0.dev2/dataerai/runner/device_auth.py +119 -0
  40. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/executor.py +1 -5
  41. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/handlers/__init__.py +0 -6
  42. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/heartbeat.py +2 -4
  43. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/telemetry.py +4 -44
  44. dataerai_sdk-0.2.0.dev2/dataerai_sdk.egg-info/PKG-INFO +676 -0
  45. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai_sdk.egg-info/SOURCES.txt +1 -99
  46. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai_sdk.egg-info/requires.txt +0 -45
  47. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/pyproject.toml +4 -66
  48. dataerai_sdk-0.2.0.dev2/tests/test_client.py +1188 -0
  49. dataerai_sdk-0.2.0.dev2/tests/test_sdk_demos.py +34 -0
  50. dataerai_sdk-0.2.0b84/PKG-INFO +0 -1630
  51. dataerai_sdk-0.2.0b84/README.md +0 -1131
  52. dataerai_sdk-0.2.0b84/dataerai/__init__.py +0 -128
  53. dataerai_sdk-0.2.0b84/dataerai/_daemon.py +0 -67
  54. dataerai_sdk-0.2.0b84/dataerai/_darwin_acl_probe.py +0 -56
  55. dataerai_sdk-0.2.0b84/dataerai/_endpoint.py +0 -237
  56. dataerai_sdk-0.2.0b84/dataerai/_errors.py +0 -78
  57. dataerai_sdk-0.2.0b84/dataerai/_events.py +0 -318
  58. dataerai_sdk-0.2.0b84/dataerai/_hello.py +0 -66
  59. dataerai_sdk-0.2.0b84/dataerai/_hello_connection.py +0 -34
  60. dataerai_sdk-0.2.0b84/dataerai/_hello_exchange.py +0 -167
  61. dataerai_sdk-0.2.0b84/dataerai/_hello_key.py +0 -152
  62. dataerai_sdk-0.2.0b84/dataerai/_hello_key_location.py +0 -81
  63. dataerai_sdk-0.2.0b84/dataerai/_transport.py +0 -318
  64. dataerai_sdk-0.2.0b84/dataerai/_types.py +0 -731
  65. dataerai_sdk-0.2.0b84/dataerai/_windows_identity.py +0 -149
  66. dataerai_sdk-0.2.0b84/dataerai/_windows_key.py +0 -407
  67. dataerai_sdk-0.2.0b84/dataerai/_windows_key_acl.py +0 -76
  68. dataerai_sdk-0.2.0b84/dataerai/bambu/cli.py +0 -171
  69. dataerai_sdk-0.2.0b84/dataerai/bambu/feature_access.py +0 -44
  70. dataerai_sdk-0.2.0b84/dataerai/client.py +0 -2854
  71. dataerai_sdk-0.2.0b84/dataerai/envelope.py +0 -843
  72. dataerai_sdk-0.2.0b84/dataerai/magics.py +0 -134
  73. dataerai_sdk-0.2.0b84/dataerai/metaextract/containers/_netcdf_reader.py +0 -130
  74. dataerai_sdk-0.2.0b84/dataerai/metaextract/feature_access.py +0 -48
  75. dataerai_sdk-0.2.0b84/dataerai/metaextract/instruments/AFM/oxfordAFM/ibw.py +0 -79
  76. dataerai_sdk-0.2.0b84/dataerai/metaextract/instruments/MS/__init__.py +0 -1
  77. dataerai_sdk-0.2.0b84/dataerai/metaextract/instruments/MS/hiden/__init__.py +0 -1
  78. dataerai_sdk-0.2.0b84/dataerai/metaextract/instruments/MS/hiden/massoft_csv.py +0 -302
  79. dataerai_sdk-0.2.0b84/dataerai/metaextract/massspec/andi_ms.py +0 -392
  80. dataerai_sdk-0.2.0b84/dataerai/metaextract/spectroscopy/jcamp.py +0 -445
  81. dataerai_sdk-0.2.0b84/dataerai/metaextract/text_metadata.py +0 -1121
  82. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/__init__.py +0 -182
  83. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/_common.py +0 -147
  84. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/bio.py +0 -165
  85. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/chemistry.py +0 -90
  86. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/clinical.py +0 -111
  87. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/containers.py +0 -132
  88. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/generic.py +0 -131
  89. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/imaging.py +0 -196
  90. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/microscopy.py +0 -123
  91. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/spectroscopy.py +0 -70
  92. dataerai_sdk-0.2.0b84/dataerai/metaextract/viz/metadata_schemas/xrd.py +0 -106
  93. dataerai_sdk-0.2.0b84/dataerai/ml/serve/__init__.py +0 -26
  94. dataerai_sdk-0.2.0b84/dataerai/ml/serve/__main__.py +0 -49
  95. dataerai_sdk-0.2.0b84/dataerai/ml/serve/inputs.py +0 -99
  96. dataerai_sdk-0.2.0b84/dataerai/ml/serve/loader.py +0 -309
  97. dataerai_sdk-0.2.0b84/dataerai/ml/serve/runtime.py +0 -412
  98. dataerai_sdk-0.2.0b84/dataerai/nn/__init__.py +0 -22
  99. dataerai_sdk-0.2.0b84/dataerai/nn/_provenance.py +0 -191
  100. dataerai_sdk-0.2.0b84/dataerai/nn/pytorch.py +0 -631
  101. dataerai_sdk-0.2.0b84/dataerai/nn/system.py +0 -269
  102. dataerai_sdk-0.2.0b84/dataerai/nn/tensorflow.py +0 -567
  103. dataerai_sdk-0.2.0b84/dataerai/notebook.py +0 -284
  104. dataerai_sdk-0.2.0b84/dataerai/notebook_trace.py +0 -965
  105. dataerai_sdk-0.2.0b84/dataerai/pycroscopy/__init__.py +0 -13
  106. dataerai_sdk-0.2.0b84/dataerai/pycroscopy/feature_control.py +0 -120
  107. dataerai_sdk-0.2.0b84/dataerai/qick/__init__.py +0 -19
  108. dataerai_sdk-0.2.0b84/dataerai/qick/feature_control.py +0 -144
  109. dataerai_sdk-0.2.0b84/dataerai/rest/__init__.py +0 -40
  110. dataerai_sdk-0.2.0b84/dataerai/rest/_config.py +0 -95
  111. dataerai_sdk-0.2.0b84/dataerai/rest/auth.py +0 -433
  112. dataerai_sdk-0.2.0b84/dataerai/rest/client.py +0 -441
  113. dataerai_sdk-0.2.0b84/dataerai/runner/__init__.py +0 -37
  114. dataerai_sdk-0.2.0b84/dataerai/runner/agent.py +0 -648
  115. dataerai_sdk-0.2.0b84/dataerai/runner/cli.py +0 -395
  116. dataerai_sdk-0.2.0b84/dataerai/runner/config.py +0 -76
  117. dataerai_sdk-0.2.0b84/dataerai/runner/cpu_profile.py +0 -78
  118. dataerai_sdk-0.2.0b84/dataerai/runner/csv_extract.py +0 -137
  119. dataerai_sdk-0.2.0b84/dataerai/runner/device_auth.py +0 -208
  120. dataerai_sdk-0.2.0b84/dataerai/runner/handlers/_harness.py +0 -106
  121. dataerai_sdk-0.2.0b84/dataerai/runner/handlers/extract_csv.py +0 -31
  122. dataerai_sdk-0.2.0b84/dataerai/runner/handlers/infer.py +0 -19
  123. dataerai_sdk-0.2.0b84/dataerai/runner/handlers/serve.py +0 -29
  124. dataerai_sdk-0.2.0b84/dataerai/runner/image_ref.py +0 -76
  125. dataerai_sdk-0.2.0b84/dataerai/watermark.py +0 -741
  126. dataerai_sdk-0.2.0b84/dataerai_sdk.egg-info/PKG-INFO +0 -1630
  127. dataerai_sdk-0.2.0b84/tests/test_attribution_feature_control.py +0 -44
  128. dataerai_sdk-0.2.0b84/tests/test_client.py +0 -3408
  129. dataerai_sdk-0.2.0b84/tests/test_collection_sync.py +0 -498
  130. dataerai_sdk-0.2.0b84/tests/test_collections.py +0 -195
  131. dataerai_sdk-0.2.0b84/tests/test_daemon_startup_security.py +0 -77
  132. dataerai_sdk-0.2.0b84/tests/test_envelope.py +0 -234
  133. dataerai_sdk-0.2.0b84/tests/test_events.py +0 -783
  134. dataerai_sdk-0.2.0b84/tests/test_hello_client_security.py +0 -245
  135. dataerai_sdk-0.2.0b84/tests/test_hello_exchange_security.py +0 -330
  136. dataerai_sdk-0.2.0b84/tests/test_hello_key_location_security.py +0 -66
  137. dataerai_sdk-0.2.0b84/tests/test_hello_key_security.py +0 -218
  138. dataerai_sdk-0.2.0b84/tests/test_hello_proof_security.py +0 -101
  139. dataerai_sdk-0.2.0b84/tests/test_infer_handler.py +0 -101
  140. dataerai_sdk-0.2.0b84/tests/test_ipc_endpoint_security.py +0 -252
  141. dataerai_sdk-0.2.0b84/tests/test_nn_pytorch.py +0 -759
  142. dataerai_sdk-0.2.0b84/tests/test_nn_tensorflow.py +0 -323
  143. dataerai_sdk-0.2.0b84/tests/test_notebook.py +0 -248
  144. dataerai_sdk-0.2.0b84/tests/test_notebook_trace.py +0 -615
  145. dataerai_sdk-0.2.0b84/tests/test_notebook_trace_feature_control.py +0 -376
  146. dataerai_sdk-0.2.0b84/tests/test_provenance_tokens_feature_control.py +0 -32
  147. dataerai_sdk-0.2.0b84/tests/test_rest_auth.py +0 -391
  148. dataerai_sdk-0.2.0b84/tests/test_rest_client.py +0 -361
  149. dataerai_sdk-0.2.0b84/tests/test_serve_inputs.py +0 -57
  150. dataerai_sdk-0.2.0b84/tests/test_serve_loader.py +0 -243
  151. dataerai_sdk-0.2.0b84/tests/test_serve_loader_device.py +0 -161
  152. dataerai_sdk-0.2.0b84/tests/test_serve_packaging.py +0 -65
  153. dataerai_sdk-0.2.0b84/tests/test_serve_runtime.py +0 -267
  154. dataerai_sdk-0.2.0b84/tests/test_serve_runtime_hardening.py +0 -254
  155. dataerai_sdk-0.2.0b84/tests/test_serve_session.py +0 -151
  156. dataerai_sdk-0.2.0b84/tests/test_terms_gate.py +0 -218
  157. dataerai_sdk-0.2.0b84/tests/test_transport.py +0 -378
  158. dataerai_sdk-0.2.0b84/tests/test_tutorial_notebook.py +0 -734
  159. dataerai_sdk-0.2.0b84/tests/test_verifiable_credentials.py +0 -97
  160. dataerai_sdk-0.2.0b84/tests/test_watermark.py +0 -536
  161. dataerai_sdk-0.2.0b84/tests/test_windows_key_acl_security.py +0 -70
  162. dataerai_sdk-0.2.0b84/tests/test_windows_key_native_security.py +0 -335
  163. dataerai_sdk-0.2.0b84/tests/test_windows_key_refusal_boundary.py +0 -54
  164. dataerai_sdk-0.2.0b84/tests/test_windows_key_storage_security.py +0 -234
  165. dataerai_sdk-0.2.0b84/tests/test_windows_pipe_cancellation_security.py +0 -356
  166. dataerai_sdk-0.2.0b84/tests/test_windows_pipe_identity_security.py +0 -363
  167. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/LICENSE +0 -0
  168. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/_agent.py +0 -0
  169. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/_framing.py +0 -0
  170. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/_timeparse.py +0 -0
  171. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/bambu/capture.py +0 -0
  172. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/bambu/journal.py +0 -0
  173. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/bambu/models.py +0 -0
  174. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/bio/__init__.py +0 -0
  175. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/bio/alignment.py +0 -0
  176. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/bio/fcs.py +0 -0
  177. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/bio/gff.py +0 -0
  178. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/bio/sequence.py +0 -0
  179. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/bio/vcf.py +0 -0
  180. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/checksum.py +0 -0
  181. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/compchem/__init__.py +0 -0
  182. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/compchem/molfile.py +0 -0
  183. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/compchem/qchem_output.py +0 -0
  184. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/compchem/structure.py +0 -0
  185. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/compchem/xyz.py +0 -0
  186. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/__init__.py +0 -0
  187. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/fits.py +0 -0
  188. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/hdf5.py +0 -0
  189. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/image.py +0 -0
  190. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/matlab.py +0 -0
  191. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/nexus.py +0 -0
  192. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/numpy_array.py +0 -0
  193. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/parquet.py +0 -0
  194. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/tiff.py +0 -0
  195. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/containers/zarr_store.py +0 -0
  196. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converter.py +0 -0
  197. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converters/AFM/__init__.py +0 -0
  198. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converters/AFM/oxfordAFM/__init__.py +0 -0
  199. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converters/AFM/oxfordAFM/ibw.py +0 -0
  200. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converters/RHEED/__init__.py +0 -0
  201. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converters/RHEED/ksa/__init__.py +0 -0
  202. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converters/RHEED/ksa/imm.py +0 -0
  203. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converters/Xray/__init__.py +0 -0
  204. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converters/Xray/panalytical/__init__.py +0 -0
  205. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converters/Xray/panalytical/xrdml.py +0 -0
  206. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/converters/__init__.py +0 -0
  207. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/crystallography/__init__.py +0 -0
  208. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/crystallography/cif.py +0 -0
  209. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/crystallography/vasp.py +0 -0
  210. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/data_type.py +0 -0
  211. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/AFM/__init__.py +0 -0
  212. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/AFM/bandexcitation/__init__.py +0 -0
  213. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/AFM/bandexcitation/h5.py +0 -0
  214. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/AFM/bruker/__init__.py +0 -0
  215. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/AFM/oxfordAFM/__init__.py +0 -0
  216. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/EM/__init__.py +0 -0
  217. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/EM/dm/__init__.py +0 -0
  218. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/EM/dm/dm3.py +0 -0
  219. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/EM/dm/dm4.py +0 -0
  220. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/RHEED/__init__.py +0 -0
  221. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/RHEED/ksa/__init__.py +0 -0
  222. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/RHEED/ksa/imm.py +0 -0
  223. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/Xray/__init__.py +0 -0
  224. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/Xray/panalytical/__init__.py +0 -0
  225. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/Xray/panalytical/xrdml.py +0 -0
  226. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/instruments/__init__.py +0 -0
  227. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/massspec/__init__.py +0 -0
  228. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/massspec/imzml.py +0 -0
  229. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/massspec/mzml.py +0 -0
  230. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/massspec/mzxml.py +0 -0
  231. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/massspec/thermo_raw.py +0 -0
  232. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/medical/__init__.py +0 -0
  233. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/medical/dicom.py +0 -0
  234. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/medical/edf.py +0 -0
  235. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/medical/nifti.py +0 -0
  236. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/medical/nwb.py +0 -0
  237. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/microscopy/__init__.py +0 -0
  238. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/microscopy/czi.py +0 -0
  239. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/microscopy/leica_lif.py +0 -0
  240. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/microscopy/nd2.py +0 -0
  241. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/microscopy/olympus.py +0 -0
  242. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/spectroscopy/__init__.py +0 -0
  243. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/spectroscopy/bruker_opus.py +0 -0
  244. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/spectroscopy/renishaw_wdf.py +0 -0
  245. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/spectroscopy/thermo_spc.py +0 -0
  246. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/units.py +0 -0
  247. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/utils.py +0 -0
  248. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/__init__.py +0 -0
  249. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/Xray/__init__.py +0 -0
  250. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/Xray/panalytical/__init__.py +0 -0
  251. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/Xray/panalytical/xrd.py +0 -0
  252. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/__init__.py +0 -0
  253. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/oxford/__init__.py +0 -0
  254. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/oxford/afms/__init__.py +0 -0
  255. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/oxford/afms/afm.py +0 -0
  256. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/oxford/afms/dart_pfm.py +0 -0
  257. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/oxford/afms/single_frequency_pfm.py +0 -0
  258. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/oxford/afms/vector_pfm.py +0 -0
  259. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/instruments/oxford/afms/visualize.py +0 -0
  260. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/layout.py +0 -0
  261. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/maps.py +0 -0
  262. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/metaextract/viz/router.py +0 -0
  263. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/__init__.py +0 -0
  264. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/ai_ready_reader.py +0 -0
  265. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/attribution/__init__.py +0 -0
  266. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/attribution/calibration.py +0 -0
  267. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/attribution/codes.py +0 -0
  268. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/attribution/hooks.py +0 -0
  269. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/attribution/inference.py +0 -0
  270. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/attribution/sae.py +0 -0
  271. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/attribution/training.py +0 -0
  272. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/bench.py +0 -0
  273. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/cache.py +0 -0
  274. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/gpu.py +0 -0
  275. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/hls4ml.py +0 -0
  276. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/io.py +0 -0
  277. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/keras_dataset.py +0 -0
  278. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/loader.py +0 -0
  279. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/report.py +0 -0
  280. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/stream/__init__.py +0 -0
  281. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/stream/_docs.py +0 -0
  282. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/stream/errors.py +0 -0
  283. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/stream/live.py +0 -0
  284. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/stream/reader.py +0 -0
  285. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/stream/session.py +0 -0
  286. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/stream/timeseries.py +0 -0
  287. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/stream/video.py +0 -0
  288. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/stream/writer.py +0 -0
  289. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/telemetry.py +0 -0
  290. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/train_reference.py +0 -0
  291. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/ml/zarr_dataset.py +0 -0
  292. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/__main__.py +0 -0
  293. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/handlers/bench.py +0 -0
  294. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/handlers/stage.py +0 -0
  295. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/handlers/train.py +0 -0
  296. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/sigv4.py +0 -0
  297. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai/runner/state.py +0 -0
  298. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai_sdk.egg-info/dependency_links.txt +0 -0
  299. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai_sdk.egg-info/entry_points.txt +0 -0
  300. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/dataerai_sdk.egg-info/top_level.txt +0 -0
  301. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/setup.cfg +0 -0
  302. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_agent.py +0 -0
  303. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ai_ready_croissant_external.py +0 -0
  304. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ai_ready_croissant_external_mlc.py +0 -0
  305. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_attribution_inference.py +0 -0
  306. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_attribution_sae.py +0 -0
  307. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_attribution_training.py +0 -0
  308. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_framing.py +0 -0
  309. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_keras_hls4ml.py +0 -0
  310. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_lineage_client.py +0 -0
  311. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_access_ttl.py +0 -0
  312. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_ai_ready_croissant.py +0 -0
  313. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_ai_ready_reader.py +0 -0
  314. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_bench.py +0 -0
  315. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_cache.py +0 -0
  316. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_content_pinning.py +0 -0
  317. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_cred_lifecycle.py +0 -0
  318. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_distributed.py +0 -0
  319. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_gpu.py +0 -0
  320. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_gpu_path.py +0 -0
  321. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_io.py +0 -0
  322. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_loader.py +0 -0
  323. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_packaging.py +0 -0
  324. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_read_path.py +0 -0
  325. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_review_followups.py +0 -0
  326. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_review_followups_torch.py +0 -0
  327. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_sampler_correctness.py +0 -0
  328. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_staging.py +0 -0
  329. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_ml_telemetry.py +0 -0
  330. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_stream_core.py +0 -0
  331. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_stream_live.py +0 -0
  332. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_stream_timeseries.py +0 -0
  333. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_stream_video.py +0 -0
  334. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_timeparse.py +0 -0
  335. {dataerai_sdk-0.2.0b84 → dataerai_sdk-0.2.0.dev2}/tests/test_zarr_dataset.py +0 -0
@@ -0,0 +1,676 @@
1
+ Metadata-Version: 2.4
2
+ Name: dataerai-sdk
3
+ Version: 0.2.0.dev2
4
+ Summary: Python SDK for the Dataerai transfer daemon
5
+ Author: Dataerai
6
+ License: DATAERAI PROPRIETARY SOFTWARE LICENSE AGREEMENT
7
+
8
+ Version 1.2
9
+
10
+ Copyright (c) 2026 Dataerai, Inc. All Rights Reserved.
11
+
12
+ ================================================================================
13
+ NOTICE: THE SOFTWARE IS PROPRIETARY AND CONFIDENTIAL. NO RIGHTS ARE GRANTED
14
+ EXCEPT AS EXPRESSLY AND NARROWLY SET FORTH BELOW. ALL RIGHTS NOT EXPRESSLY
15
+ GRANTED ARE RESERVED BY DATAERAI, INC. THIS AGREEMENT APPLIES EQUALLY TO USE
16
+ BY HUMANS AND BY ARTIFICIAL INTELLIGENCE AGENTS (SEE SECTION 4). IF YOU DO NOT
17
+ AGREE TO EVERY TERM OF THIS AGREEMENT, YOU HAVE NO LICENSE AND MUST NOT ACCESS,
18
+ INSTALL, COPY, OR USE THE SOFTWARE IN ANY MANNER.
19
+ ================================================================================
20
+
21
+ This Dataerai Proprietary Software License Agreement (this "Agreement") is a
22
+ binding legal agreement between Dataerai, Inc., a corporation organized under
23
+ the laws of the Commonwealth of Pennsylvania ("Licensor"), and the single
24
+ identified individual or legal entity that has been expressly authorized in
25
+ writing by Licensor to receive the Software ("Licensee"). By accessing,
26
+ installing, copying, or using the Software, or by clicking to accept, Licensee
27
+ agrees to be bound by this Agreement.
28
+
29
+ --------------------------------------------------------------------------------
30
+ 1. DEFINITIONS
31
+ --------------------------------------------------------------------------------
32
+
33
+ 1.1 "Software" means the Dataerai software package, in any and all forms,
34
+ including without limitation source code, object code, byte code, binaries,
35
+ scripts, schemas, configuration, models, weights, prompts, embeddings,
36
+ graph taxonomies, registries, metadata, libraries, application programming
37
+ interfaces, command-line tooling, and any associated materials, together
38
+ with all updates, upgrades, patches, modifications, enhancements, and
39
+ Documentation, whether delivered now or in the future.
40
+
41
+ 1.2 "Documentation" means any technical or user materials, in any medium,
42
+ provided or made available by Licensor relating to the Software.
43
+
44
+ 1.3 "Authorized Purpose" means solely the internal, non-production evaluation
45
+ of the Software by Licensee, on systems owned and controlled by Licensee,
46
+ strictly within the scope, seat count, term, and field of use expressly
47
+ stated in a written authorization signed by an officer of Licensor. Absent
48
+ such a written authorization, the Authorized Purpose is null and no use is
49
+ permitted.
50
+
51
+ 1.4 "Confidential Information" means the Software and any non-public information
52
+ disclosed by Licensor, whether or not marked confidential. The Software is
53
+ deemed Confidential Information in its entirety.
54
+
55
+ --------------------------------------------------------------------------------
56
+ 2. GRANT OF LICENSE
57
+ --------------------------------------------------------------------------------
58
+
59
+ 2.1 Subject to Licensee's strict and continuous compliance with every term of
60
+ this Agreement, Licensor grants to Licensee a personal, non-exclusive,
61
+ non-transferable, non-sublicensable, non-assignable, revocable, royalty-
62
+ bearing-or-evaluation-only, and fully revocable license to use the Software
63
+ solely for the Authorized Purpose and solely during the Term.
64
+
65
+ 2.2 The license granted in Section 2.1 is the entirety of the rights granted.
66
+ It conveys no right to copy (except a single archival copy as required for
67
+ backup, retaining all notices), no right to modify, no right to create
68
+ derivative works, no right to distribute, no right to sublicense, no right
69
+ to display or perform publicly, and no right to use in production, in a
70
+ service bureau, or on behalf of any third party.
71
+
72
+ 2.3 No license, immunity, or other right is granted by implication, estoppel,
73
+ exhaustion, or otherwise. No patent, trademark, or other intellectual
74
+ property right is licensed except the limited use right in Section 2.1.
75
+
76
+ --------------------------------------------------------------------------------
77
+ 3. RESTRICTIONS
78
+ --------------------------------------------------------------------------------
79
+
80
+ Licensee shall not, and shall not permit, enable, or assist any third party or
81
+ AI Agent (as defined in Section 4) to:
82
+
83
+ 3.1 copy, reproduce, republish, upload, post, transmit, or otherwise duplicate
84
+ the Software except for the single archival copy permitted in Section 2.2;
85
+
86
+ 3.2 modify, adapt, translate, port, fork, or create derivative works of the
87
+ Software, in whole or in part;
88
+
89
+ 3.3 sell, resell, rent, lease, lend, distribute, transfer, disclose, host,
90
+ sublicense, time-share, or otherwise make the Software available to any
91
+ third party, whether for value or not;
92
+
93
+ 3.4 reverse engineer, decompile, disassemble, decrypt, extract, or otherwise
94
+ attempt to derive or reconstruct the source code, architecture, algorithms,
95
+ model weights, training data, graph taxonomies, or trade secrets embodied
96
+ in the Software, except, and only to the minimum extent, that this
97
+ prohibition is unenforceable under applicable law and only after written
98
+ notice to Licensor;
99
+
100
+ 3.5 use the Software to develop, train, benchmark, or improve any competing,
101
+ similar, or alternative product, model, or service;
102
+
103
+ 3.6 conduct, publish, or disclose any benchmark, performance, security, or
104
+ comparative test or analysis of the Software without Licensor's prior
105
+ written consent;
106
+
107
+ 3.7 remove, alter, obscure, or fail to reproduce any copyright, proprietary,
108
+ confidentiality, or other notice contained in or on the Software;
109
+
110
+ 3.8 circumvent, disable, or interfere with any license-key, telemetry, usage-
111
+ metering, digital-rights-management, or access-control mechanism;
112
+
113
+ 3.9 use the Software in excess of the authorized seat count, scope, field of
114
+ use, or Term, or for any purpose other than the Authorized Purpose; or
115
+
116
+ 3.10 use the Software in violation of any applicable law, regulation, or third-
117
+ party right, including export control and sanctions laws.
118
+
119
+ --------------------------------------------------------------------------------
120
+ 4. ARTIFICIAL INTELLIGENCE, AGENTS, AND AUTOMATED USE
121
+ --------------------------------------------------------------------------------
122
+
123
+ 4.1 Definition. "AI Agent" means any artificial intelligence or machine-
124
+ learning system, model, or software — including any autonomous or semi-
125
+ autonomous agent, large language model, multi-agent system, robotic process
126
+ automation, bot, crawler, scraper, copilot, or other automated process —
127
+ that accesses, operates, invokes, queries, or acts upon the Software,
128
+ whether or not under direct human supervision, and whether operating on
129
+ Licensee's behalf, on Licensee's systems, or using Licensee's credentials,
130
+ tokens, API keys, or sessions.
131
+
132
+ 4.2 Agents Bound by this Agreement. This Agreement applies in full to any access
133
+ to or use of the Software by, through, or on behalf of an AI Agent. Every
134
+ restriction, obligation, and prohibition that binds Licensee binds equally
135
+ any AI Agent that Licensee deploys, authorizes, instructs, integrates, or
136
+ permits to interact with the Software. An AI Agent is not a separate,
137
+ independent, or exempt user, and acquires no rights of its own under this
138
+ Agreement.
139
+
140
+ 4.3 Full Responsibility for Agent Conduct. Licensee is fully and solely
141
+ responsible for all acts and omissions of any AI Agent acting on Licensee's
142
+ behalf, on Licensee's systems, or via Licensee's credentials, as if those
143
+ acts were Licensee's own. The autonomy of the AI Agent, the absence of human
144
+ supervision, or the absence of specific human intent is not a defense to any
145
+ breach. Licensee shall not use an AI Agent to do, attempt, or enable
146
+ anything that Licensee is itself prohibited from doing under this Agreement.
147
+
148
+ 4.4 No Training, Ingestion, or Derivation. Licensee shall not, and shall not
149
+ permit any AI Agent or third party to, use the Software or any portion of it
150
+ — including its source code, object code, structure, schemas, graph
151
+ taxonomies, registries, metadata, model weights, prompts, embeddings,
152
+ Documentation, or Outputs — as input to, as training, fine-tuning, or
153
+ alignment data for, as a retrieval or context corpus for, or as a basis to
154
+ distill, replicate, or derive, any AI Agent, model, dataset, or competing
155
+ system.
156
+
157
+ 4.5 No Automated Extraction. Licensee shall not use any AI Agent to scrape,
158
+ crawl, harvest, index, reverse engineer, or otherwise extract the Software,
159
+ its structure, its parameters, or its Outputs, including by means of
160
+ automated or adversarial querying intended to reconstruct or approximate the
161
+ Software's behavior, weights, taxonomies, or underlying data.
162
+
163
+ 4.6 Outputs. "Outputs" means any data, content, predictions, classifications,
164
+ embeddings, analyses, graphs, or other results generated by the Software or
165
+ by any AI Agent through use of the Software. Outputs constitute Confidential
166
+ Information, are licensed (not assigned) to Licensee solely for the
167
+ Authorized Purpose, and remain subject to every restriction in this
168
+ Agreement. Licensee obtains no right to use Outputs to train, evaluate, or
169
+ improve any AI Agent, model, or competing system.
170
+
171
+ 4.7 Disclosure of Agentic Use. Upon Licensor's request, Licensee shall disclose
172
+ whether, and the manner in which, any AI Agent has accessed or used the
173
+ Software, and shall cooperate with any audit under Section 8 directed at
174
+ such use.
175
+
176
+ --------------------------------------------------------------------------------
177
+ 5. OWNERSHIP
178
+ --------------------------------------------------------------------------------
179
+
180
+ 5.1 The Software is licensed, not sold. Licensor and its licensors retain all
181
+ right, title, and interest in and to the Software and all intellectual
182
+ property rights therein. Licensee acquires no ownership interest of any
183
+ kind. All feedback, suggestions, and ideas provided by Licensee — whether
184
+ authored by a human or generated by an AI Agent — are hereby assigned to
185
+ Licensor without restriction or compensation.
186
+
187
+ --------------------------------------------------------------------------------
188
+ 6. CONFIDENTIALITY
189
+ --------------------------------------------------------------------------------
190
+
191
+ 6.1 Licensee shall hold the Software and all Confidential Information in strict
192
+ confidence, shall not disclose it to any person or AI Agent other than
193
+ Licensee's employees with a need to know who are bound by written
194
+ obligations at least as protective as this Agreement, and shall use it
195
+ solely for the Authorized Purpose. Licensee shall protect it using no less
196
+ than the degree of care it uses for its own most sensitive information, and
197
+ in no event less than a reasonable degree of care. Licensee shall not input,
198
+ expose, or transmit the Software or Confidential Information to any third-
199
+ party AI Agent or service that would acquire rights in, or use for training,
200
+ the material so disclosed.
201
+
202
+ --------------------------------------------------------------------------------
203
+ 7. TERM AND TERMINATION
204
+ --------------------------------------------------------------------------------
205
+
206
+ 7.1 This Agreement and the license commence on the date Licensee first accesses
207
+ the Software and continue only for the period expressly authorized in
208
+ writing by Licensor (the "Term"). If no period is stated, the Term is
209
+ thirty (30) days.
210
+
211
+ 7.2 Licensor may terminate or suspend this Agreement and the license at any
212
+ time, for any reason or no reason, with or without notice, in its sole
213
+ discretion. This license is revocable at will.
214
+
215
+ 7.3 This Agreement terminates automatically and immediately upon any breach by
216
+ Licensee, without notice and without opportunity to cure.
217
+
218
+ 7.4 Upon any expiration or termination, all rights granted cease immediately,
219
+ and Licensee shall, within five (5) days, cease all use, permanently delete
220
+ or destroy all copies of the Software (including the archival copy, all
221
+ Outputs, and all derivatives and extracts), purge the Software and Outputs
222
+ from any AI Agent context, cache, or store, and certify such destruction in
223
+ writing to Licensor upon request. Sections 1, 3, 4, 5, 6, 7.4, and 8
224
+ through 13 survive termination.
225
+
226
+ --------------------------------------------------------------------------------
227
+ 8. AUDIT
228
+ --------------------------------------------------------------------------------
229
+
230
+ 8.1 Licensor may, upon reasonable notice, audit Licensee's use of the Software,
231
+ including by inspecting records and systems and reviewing AI Agent logs and
232
+ access histories, to verify compliance. Licensee shall cooperate. Any
233
+ unauthorized use revealed by an audit constitutes a material breach.
234
+
235
+ --------------------------------------------------------------------------------
236
+ 9. DISCLAIMER OF WARRANTIES
237
+ --------------------------------------------------------------------------------
238
+
239
+ 9.1 THE SOFTWARE IS PROVIDED "AS IS" AND "AS AVAILABLE," WITH ALL FAULTS AND
240
+ WITHOUT WARRANTY OF ANY KIND. TO THE MAXIMUM EXTENT PERMITTED BY LAW,
241
+ LICENSOR DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS, IMPLIED, STATUTORY, OR
242
+ OTHERWISE, INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
243
+ A PARTICULAR PURPOSE, TITLE, ACCURACY, AND NON-INFRINGEMENT, AND ANY
244
+ WARRANTY ARISING FROM COURSE OF DEALING OR USAGE OF TRADE. LICENSOR DOES NOT
245
+ WARRANT THAT THE SOFTWARE WILL BE UNINTERRUPTED, ERROR-FREE, OR SECURE, OR
246
+ THAT ANY OUTPUT GENERATED BY THE SOFTWARE OR BY ANY AI AGENT WILL BE
247
+ ACCURATE, COMPLETE, OR FIT FOR ANY PURPOSE.
248
+
249
+ --------------------------------------------------------------------------------
250
+ 10. LIMITATION OF LIABILITY
251
+ --------------------------------------------------------------------------------
252
+
253
+ 10.1 TO THE MAXIMUM EXTENT PERMITTED BY LAW, LICENSOR SHALL NOT BE LIABLE FOR
254
+ ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE
255
+ DAMAGES, OR FOR ANY LOSS OF PROFITS, REVENUE, DATA, OR GOODWILL, ARISING
256
+ OUT OF OR RELATING TO THIS AGREEMENT, THE SOFTWARE, OR ANY ACTION TAKEN BY
257
+ AN AI AGENT, REGARDLESS OF THE THEORY OF LIABILITY AND EVEN IF ADVISED OF
258
+ THE POSSIBILITY OF SUCH DAMAGES.
259
+
260
+ 10.2 LICENSOR'S TOTAL CUMULATIVE LIABILITY ARISING OUT OF OR RELATING TO THIS
261
+ AGREEMENT SHALL NOT EXCEED THE GREATER OF (A) THE FEES ACTUALLY PAID BY
262
+ LICENSEE TO LICENSOR FOR THE SOFTWARE IN THE THREE (3) MONTHS PRECEDING THE
263
+ CLAIM, OR (B) ONE HUNDRED U.S. DOLLARS (US$100).
264
+
265
+ --------------------------------------------------------------------------------
266
+ 11. INDEMNIFICATION
267
+ --------------------------------------------------------------------------------
268
+
269
+ 11.1 Licensee shall defend, indemnify, and hold harmless Licensor and its
270
+ officers, directors, employees, and agents from and against any and all
271
+ claims, damages, liabilities, costs, and expenses (including reasonable
272
+ attorneys' fees) arising out of or relating to Licensee's use of the
273
+ Software, any use of the Software by any AI Agent acting on Licensee's
274
+ behalf or via Licensee's credentials, or any breach of this Agreement.
275
+
276
+ --------------------------------------------------------------------------------
277
+ 12. EXPORT, SANCTIONS, AND COMPLIANCE
278
+ --------------------------------------------------------------------------------
279
+
280
+ 12.1 Licensee shall comply with all applicable export control, sanctions, and
281
+ anti-corruption laws and shall not export, re-export, or transfer the
282
+ Software to any prohibited destination, entity, or person, or use it for
283
+ any prohibited end use.
284
+
285
+ --------------------------------------------------------------------------------
286
+ 13. GENERAL
287
+ --------------------------------------------------------------------------------
288
+
289
+ 13.1 Governing Law; Venue. This Agreement is governed by the laws of the
290
+ Commonwealth of Pennsylvania, excluding its conflict-of-laws rules. The
291
+ parties submit to the exclusive jurisdiction of the state and federal
292
+ courts located in Pennsylvania.
293
+
294
+ 13.2 Equitable Relief. Licensee acknowledges that any breach of Sections 2, 3,
295
+ 4, or 6 would cause irreparable harm for which monetary damages are
296
+ inadequate, and that Licensor is entitled to injunctive relief without the
297
+ need to post bond.
298
+
299
+ 13.3 Assignment. Licensee may not assign or transfer this Agreement or any
300
+ rights or obligations, by operation of law or otherwise, without
301
+ Licensor's prior written consent. Any attempted assignment in violation is
302
+ void. Licensor may freely assign.
303
+
304
+ 13.4 No Waiver. No failure or delay by Licensor in exercising any right waives
305
+ it. Any waiver must be in a writing signed by Licensor.
306
+
307
+ 13.5 Severability. If any provision is held unenforceable, it shall be modified
308
+ to the minimum extent necessary, and the remaining provisions remain in
309
+ full force.
310
+
311
+ 13.6 Entire Agreement. Subject to Section 13.8, this Agreement, together
312
+ with any written authorization issued by Licensor, is the entire agreement
313
+ between the parties regarding the Software and supersedes all prior or
314
+ contemporaneous understandings. Any conflicting or additional terms
315
+ proposed by Licensee are rejected.
316
+
317
+ 13.7 U.S. Government Rights. If Licensee is a U.S. Government entity, the
318
+ Software is "commercial computer software" and "commercial computer
319
+ software documentation," and any use, duplication, or disclosure is
320
+ subject to the restrictions of this Agreement to the extent permitted by
321
+ applicable Federal Acquisition Regulation and agency supplements.
322
+
323
+ 13.8 Amendments; Updated Versions.
324
+
325
+ (a) Licensor may issue an amended or replacement version of this Agreement
326
+ (an "Updated Agreement"). To be effective as to Licensee, an Updated
327
+ Agreement must: (i) conspicuously identify itself as an updated version of
328
+ this Agreement and state its version number and effective date; (ii) be
329
+ provided to Licensee in full by a method reasonably calculated to give
330
+ Licensee notice; and (iii) be affirmatively accepted by Licensee through
331
+ a click-through acceptance, electronic signature, or other written
332
+ acceptance by a person authorized to bind Licensee. Licensor may condition
333
+ any renewal, extension, update, upgrade, or continued access to the
334
+ Software after the end of the then-current Term upon such acceptance.
335
+
336
+ (b) Upon Licensee's affirmative acceptance, the Updated Agreement
337
+ supersedes and replaces all prior versions of this Agreement between
338
+ Licensor and Licensee with respect to the Software, effective on the later
339
+ of the Updated Agreement's stated effective date or Licensee's acceptance
340
+ date. Unless the Updated Agreement expressly states otherwise, any then-
341
+ effective written authorization issued by Licensor remains in force only to
342
+ the extent it is consistent with the Updated Agreement.
343
+
344
+ (c) Until an Updated Agreement becomes effective under this Section 13.8,
345
+ the version of this Agreement previously accepted by Licensee remains
346
+ controlling, subject to Licensor's termination and suspension rights under
347
+ Section 7. Licensor shall retain a reasonably accessible record of each
348
+ version of this Agreement and the date on which Licensee accepted it.
349
+
350
+ ================================================================================
351
+ For licensing inquiries, contact: legal@dataerai.com
352
+ Dataerai, Inc. — Center Valley, Pennsylvania, USA
353
+ ================================================================================
354
+
355
+ Project-URL: Homepage, https://dataerai.com
356
+ Project-URL: Documentation, https://docs.dataerai.com
357
+ Project-URL: Source, https://github.com/dataerai/dataerai-toolkit
358
+ Keywords: dataerai,data-transfer,sdk,research-data
359
+ Classifier: License :: Other/Proprietary License
360
+ Classifier: Programming Language :: Python :: 3
361
+ Classifier: Programming Language :: Python :: 3.10
362
+ Classifier: Programming Language :: Python :: 3.11
363
+ Classifier: Programming Language :: Python :: 3.12
364
+ Classifier: Programming Language :: Python :: 3.13
365
+ Classifier: Intended Audience :: Science/Research
366
+ Classifier: Operating System :: OS Independent
367
+ Requires-Python: >=3.10
368
+ Description-Content-Type: text/markdown
369
+ License-File: LICENSE
370
+ Provides-Extra: dev
371
+ Requires-Dist: pytest>=8; extra == "dev"
372
+ Requires-Dist: pytest-mock>=3; extra == "dev"
373
+ Provides-Extra: bambu
374
+ Requires-Dist: imageio-ffmpeg>=0.6; extra == "bambu"
375
+ Provides-Extra: ml-io
376
+ Requires-Dist: zarr>=3.2; extra == "ml-io"
377
+ Requires-Dist: obstore>=0.5; extra == "ml-io"
378
+ Requires-Dist: numpy>=1.26; extra == "ml-io"
379
+ Requires-Dist: requests>=2.31; extra == "ml-io"
380
+ Requires-Dist: s3fs>=2024.0; extra == "ml-io"
381
+ Provides-Extra: ml
382
+ Requires-Dist: dataerai-sdk[ml-io]; extra == "ml"
383
+ Requires-Dist: torch>=2.4; extra == "ml"
384
+ Requires-Dist: torchdata>=0.9; extra == "ml"
385
+ Requires-Dist: safetensors>=0.4; extra == "ml"
386
+ Provides-Extra: croissant
387
+ Requires-Dist: mlcroissant>=1.0; extra == "croissant"
388
+ Provides-Extra: ml-gpu-cu12
389
+ Requires-Dist: dataerai-sdk[ml]; extra == "ml-gpu-cu12"
390
+ Requires-Dist: kvikio-cu12>=25.10; extra == "ml-gpu-cu12"
391
+ Requires-Dist: cupy-cuda12x>=13; extra == "ml-gpu-cu12"
392
+ Provides-Extra: ml-gpu
393
+ Requires-Dist: dataerai-sdk[ml-gpu-cu12]; extra == "ml-gpu"
394
+ Provides-Extra: ml-keras
395
+ Requires-Dist: dataerai-sdk[ml-io]; extra == "ml-keras"
396
+ Requires-Dist: numpy>=2; extra == "ml-keras"
397
+ Requires-Dist: keras>=3; extra == "ml-keras"
398
+ Requires-Dist: pillow>=10; extra == "ml-keras"
399
+ Provides-Extra: ml-hls4ml
400
+ Requires-Dist: dataerai-sdk[ml-keras]; extra == "ml-hls4ml"
401
+ Requires-Dist: hls4ml>=1.3; extra == "ml-hls4ml"
402
+ Provides-Extra: ml-stream
403
+ Requires-Dist: numpy>=2; extra == "ml-stream"
404
+ Requires-Dist: zarr>=3; extra == "ml-stream"
405
+ Provides-Extra: ml-stream-video
406
+ Requires-Dist: dataerai-sdk[ml-stream]; extra == "ml-stream-video"
407
+ Requires-Dist: av>=12; extra == "ml-stream-video"
408
+ Provides-Extra: ml-stream-train
409
+ Requires-Dist: dataerai-sdk[ml-stream]; extra == "ml-stream-train"
410
+ Requires-Dist: torch; extra == "ml-stream-train"
411
+ Provides-Extra: runner
412
+ Requires-Dist: requests>=2; extra == "runner"
413
+ Requires-Dist: nvidia-ml-py>=12.535; extra == "runner"
414
+ Provides-Extra: metaextract
415
+ Requires-Dist: numpy>=1.23; extra == "metaextract"
416
+ Requires-Dist: h5py>=3.7; extra == "metaextract"
417
+ Requires-Dist: igor2>=0.5; extra == "metaextract"
418
+ Requires-Dist: lxml>=4.9; extra == "metaextract"
419
+ Requires-Dist: hyperspy>=2.0; extra == "metaextract"
420
+ Provides-Extra: metaextract-converters
421
+ Requires-Dist: dataerai-sdk[metaextract]; extra == "metaextract-converters"
422
+ Requires-Dist: xarray>=0.20; extra == "metaextract-converters"
423
+ Requires-Dist: netCDF4>=1.6; extra == "metaextract-converters"
424
+ Provides-Extra: metaextract-viz
425
+ Requires-Dist: dataerai-sdk[metaextract]; extra == "metaextract-viz"
426
+ Requires-Dist: plotly>=5; extra == "metaextract-viz"
427
+ Requires-Dist: nbformat>=4.2; extra == "metaextract-viz"
428
+ Requires-Dist: matplotlib>=3.5; extra == "metaextract-viz"
429
+ Provides-Extra: metaextract-checksums
430
+ Requires-Dist: dataerai-sdk[metaextract]; extra == "metaextract-checksums"
431
+ Requires-Dist: blake3>=0.3; extra == "metaextract-checksums"
432
+ Provides-Extra: metaextract-utils
433
+ Requires-Dist: dataerai-sdk[metaextract]; extra == "metaextract-utils"
434
+ Requires-Dist: requests>=2.25; extra == "metaextract-utils"
435
+ Provides-Extra: metaextract-containers
436
+ Requires-Dist: dataerai-sdk[metaextract]; extra == "metaextract-containers"
437
+ Requires-Dist: netCDF4>=1.6; extra == "metaextract-containers"
438
+ Requires-Dist: scipy>=1.9; extra == "metaextract-containers"
439
+ Requires-Dist: pyarrow>=10; extra == "metaextract-containers"
440
+ Requires-Dist: tifffile>=2022.5; extra == "metaextract-containers"
441
+ Requires-Dist: pillow>=9; extra == "metaextract-containers"
442
+ Provides-Extra: metaextract-microscopy
443
+ Requires-Dist: dataerai-sdk[metaextract]; extra == "metaextract-microscopy"
444
+ Requires-Dist: nd2>=0.7; extra == "metaextract-microscopy"
445
+ Requires-Dist: czifile>=2019.7; extra == "metaextract-microscopy"
446
+ Requires-Dist: readlif>=0.6; extra == "metaextract-microscopy"
447
+ Requires-Dist: oiffile>=2021.6; extra == "metaextract-microscopy"
448
+ Provides-Extra: metaextract-medical
449
+ Requires-Dist: dataerai-sdk[metaextract]; extra == "metaextract-medical"
450
+ Requires-Dist: pydicom>=2.3; extra == "metaextract-medical"
451
+ Provides-Extra: metaextract-bio
452
+ Requires-Dist: dataerai-sdk[metaextract]; extra == "metaextract-bio"
453
+ Requires-Dist: pysam>=0.21; extra == "metaextract-bio"
454
+ Provides-Extra: metaextract-spectroscopy
455
+ Requires-Dist: dataerai-sdk[metaextract]; extra == "metaextract-spectroscopy"
456
+ Requires-Dist: brukeropus>=1.1; extra == "metaextract-spectroscopy"
457
+ Provides-Extra: metaextract-all
458
+ Requires-Dist: dataerai-sdk[metaextract-checksums,metaextract-converters,metaextract-utils,metaextract-viz]; extra == "metaextract-all"
459
+ Requires-Dist: dataerai-sdk[metaextract-containers,metaextract-medical,metaextract-microscopy]; extra == "metaextract-all"
460
+ Requires-Dist: dataerai-sdk[metaextract-bio,metaextract-spectroscopy]; extra == "metaextract-all"
461
+ Dynamic: license-file
462
+
463
+ # Dataerai Python SDK
464
+
465
+ Python client for the Dataerai transfer daemon.
466
+ Supports authenticated uploads, downloads, and metadata operations.
467
+ The daemon is started automatically if it is not already running.
468
+
469
+ ## Requirements
470
+
471
+ - Python ≥ 3.10
472
+ - The `dataerai` binary must be installed and on `PATH` (or pass `binary_path` explicitly)
473
+ - The user must be logged in via `dataerai auth login` before calling `auth_status()` / `upload()` / `download()`
474
+
475
+ ## Installation
476
+
477
+ ```bash
478
+ pip install --pre "dataerai-sdk>=0.2.0b1,<0.3"
479
+ # or, from source:
480
+ pip install -e sdk/python/
481
+ ```
482
+
483
+ Optional ML adapters are installed separately so the base SDK stays small:
484
+
485
+ ```bash
486
+ pip install --pre "dataerai-sdk[ml]>=0.2.0b1,<0.3" # PyTorch Zarr datasets
487
+ pip install --pre "dataerai-sdk[ml-keras]>=0.2.0b1,<0.3" # Keras batches
488
+ pip install --pre "dataerai-sdk[ml-hls4ml]>=0.2.0b1,<0.3" # HLS4ML conversion
489
+ ```
490
+
491
+ ## Quick start
492
+
493
+ ```python
494
+ from dataerai import DataeraiClient
495
+
496
+ with DataeraiClient(binary_path="/usr/local/bin/dataerai") as client:
497
+ # Check auth
498
+ status = client.auth_status()
499
+ print(f"Logged in as {status.user_email} ({status.user_id}), token expires {status.expires_at}")
500
+ if status.user_id is None:
501
+ raise RuntimeError("Upgrade the dataerai CLI to use user-owned uploads")
502
+
503
+ # Upload a user-owned file. owner_id is a UUID, not an email address.
504
+ result = client.upload(
505
+ "/path/to/data.csv",
506
+ title="My dataset",
507
+ owner_type="user",
508
+ owner_id=status.user_id,
509
+ record_type="dataset",
510
+ on_progress=lambda p: print(f" {p.percent:.0f}% {p.rate_mbps:.1f} MB/s"),
511
+ )
512
+ print(f"Uploaded asset_id={result.asset_id} content_id={result.content_id}")
513
+
514
+ # Download it back
515
+ dl = client.download(result.asset_id, dest_dir="/tmp/downloads")
516
+ for f in dl.files:
517
+ print(f" {f.local_path} ({f.size:,} bytes)")
518
+
519
+ # Read / update metadata
520
+ meta = client.get_metadata(result.asset_id)
521
+ updated = client.set_metadata(
522
+ result.asset_id,
523
+ title="My dataset v2",
524
+ record_type="analysis",
525
+ tags=["csv", "demo"],
526
+ )
527
+
528
+ # Link a derived result to the source asset that produced it
529
+ relationship = client.create_relationship(
530
+ result.asset_id,
531
+ "source-asset-id",
532
+ relationship_type="derived_from",
533
+ analysis_mode="non_destructive",
534
+ qualifiers={"tool": "pycroscopy"},
535
+ )
536
+ related_id = relationship.related_asset["id"] if relationship.related_asset else "source-asset-id"
537
+ print(f"Linked via {relationship.type} to {related_id}")
538
+ ```
539
+
540
+ ## API reference
541
+
542
+ ### `DataeraiClient(*, socket_path, binary_path, auto_start, start_timeout_s, request_timeout_s)`
543
+
544
+ | Parameter | Default | Description |
545
+ |---|---|---|
546
+ | `socket_path` | `$DATAERAI_SOCKET` or `/run/user/<uid>/dataerai-transfer.sock` | Unix socket path |
547
+ | `binary_path` | `None` | Path to the `dataerai` binary (required for `auto_start`) |
548
+ | `auto_start` | `True` | Spawn the daemon if the socket does not exist |
549
+ | `start_timeout_s` | `10.0` | Seconds to wait for the daemon socket to appear |
550
+ | `request_timeout_s` | `30.0` | Per-request timeout in seconds |
551
+
552
+ Use as a context manager (`with DataeraiClient(...) as client:`) for automatic cleanup, or call `client.connect()` / `client.close()` manually.
553
+
554
+ ### Methods
555
+
556
+ | Method | Returns | Description |
557
+ |---|---|---|
558
+ | `auth_status()` | `AuthStatus` | Logged-in user ID, email, and token expiry; `user_id` is `None` with older daemons |
559
+ | `create_project(name, *, description="")` | `Project` | Create a project (+ root collection, owner membership, default allocation); requires write scope |
560
+ | `upload(local_path, *, title, owner_type, owner_id, record_type=None, ...)` | `UploadResult` | Upload a file with an optional server-validated record type; blocks until complete |
561
+ | `download(asset_id, dest_dir, ...)` | `DownloadResult` | Download latest asset content; blocks until complete |
562
+ | `get_metadata(asset_id)` | `AssetMetadata` | Retrieve asset metadata |
563
+ | `set_metadata(asset_id, **fields)` | `AssetMetadata` | Update metadata fields, including `record_type` |
564
+ | `create_relationship(from_asset_id, to_asset_id, rel_type=None, *, relationship_type=None, ...)` | `Relationship` | Create a directed provenance link between two assets |
565
+
566
+ For headless notebooks, pass `record_type` to `upload()` or `set_metadata()`.
567
+ Both operations use the authenticated transfer daemon, so integrations do not
568
+ need to read the CLI credential store or expose access tokens to Python.
569
+
570
+ ### ML adapters
571
+
572
+ The `dataerai.ml` package reads Dataerai-hosted Zarr image stores directly from
573
+ the short-lived `/zarr-access/` bundle. PyTorch users can keep using
574
+ `ZarrAssetDataset` / `ZarrOriginalsDataset`; Keras users get matching batch
575
+ datasets:
576
+
577
+ ```python
578
+ from dataerai.ml import access
579
+ from dataerai.ml.keras_dataset import ZarrOriginalsSequence
580
+
581
+ creds = access.load_credentials()
582
+ train = ZarrOriginalsSequence(
583
+ creds,
584
+ asset_id="dataset-asset-id",
585
+ size=64,
586
+ batch_size=32,
587
+ shuffle=True,
588
+ label_mode="categorical",
589
+ )
590
+
591
+ model.fit(train, epochs=5)
592
+ ```
593
+
594
+ For HLS4ML conversion, keep inputs in Keras' channels-last layout:
595
+
596
+ ```python
597
+ from dataerai.ml.hls4ml import convert_keras_model
598
+
599
+ hls_model = convert_keras_model(
600
+ model,
601
+ output_dir="hls-project",
602
+ project_name="dataerai_model",
603
+ data=train, # writes input/output .npy testbench arrays
604
+ testbench_batches=2,
605
+ )
606
+ ```
607
+
608
+ ### `create_relationship()` arguments
609
+
610
+ Authors a directed provenance edge `from_asset_id` → `to_asset_id`. You need
611
+ write access to the source and read access to the target. `rel_type` is a
612
+ free-form verb describing the source's role, e.g. `"analysis_of"` or
613
+ `"acquired_with"`. Notebook integrations can pass the same value with the
614
+ keyword-only alias `relationship_type`.
615
+
616
+ | Argument | Type | Description |
617
+ |---|---|---|
618
+ | `from_asset_id` | `str` | Source (dependent) asset — the edge starts here (required) |
619
+ | `to_asset_id` | `str` | Target (origin) asset — the edge points here (required) |
620
+ | `rel_type` | `str \| None` | Free-form relationship type, ≤255 chars (required unless `relationship_type` is provided) |
621
+ | `relationship_type` | `str \| None` | Keyword-only alias for `rel_type` |
622
+ | `analysis_mode` | `str \| None` | `non_destructive`, `altering`, `destructive`, `in_situ`, `ex_situ`, `invasive`, `non_invasive` |
623
+ | `qualifier_note` | `str \| None` | Free-text note on the relationship |
624
+ | `qualifier_time` | `str \| None` | ISO-8601 timestamp |
625
+ | `qualifiers` | `dict \| None` | JSON-serializable extra qualifiers |
626
+
627
+ ```python
628
+ # Link a processed result back to the raw data it came from.
629
+ client.create_relationship(analysis.asset_id, raw.asset_id, "analysis_of",
630
+ analysis_mode="non_destructive")
631
+ ```
632
+
633
+ ### `upload()` keyword arguments
634
+
635
+ | Argument | Type | Description |
636
+ |---|---|---|
637
+ | `title` | `str` | Asset title (required) |
638
+ | `owner_type` | `str` | `"project"` or `"user"` (required) |
639
+ | `owner_id` | `str` | Owner entity ID (required) |
640
+ | `description` | `str \| None` | Free-text description |
641
+ | `alias` | `str \| None` | Short identifier |
642
+ | `tags` | `list[str] \| None` | Tag list |
643
+ | `metadata` | `dict \| None` | Arbitrary key-value metadata |
644
+ | `collection_id` | `str \| None` | Collection to add the asset to |
645
+ | `chunk_size_mb` | `int \| None` | Override default 64 MiB chunk size |
646
+ | `on_progress` | `Callable[[ProgressEvent], None] \| None` | Progress callback |
647
+ | `transfer_timeout_s` | `float` | Max seconds to wait for completion (default 3600) |
648
+
649
+ ### Progress events
650
+
651
+ ```python
652
+ @dataclass
653
+ class ProgressEvent:
654
+ transfer_id: str
655
+ bytes_done: int
656
+ bytes_total: int
657
+ chunk_index: int
658
+ chunk_count: int
659
+ rate_bps: float
660
+ file_index: int
661
+ file_name: str
662
+
663
+ @property
664
+ def percent(self) -> float: ... # 0–100
665
+
666
+ @property
667
+ def rate_mbps(self) -> float: ...
668
+ ```
669
+
670
+ ### Error types
671
+
672
+ | Exception | When raised |
673
+ |---|---|
674
+ | `DaemonError(code, message)` | Daemon returned a coded error (see `code` attribute) |
675
+ | `DaemonTimeoutError` | Request or transfer exceeded the configured timeout |
676
+ | `ConnectionError` | Daemon disconnected unexpectedly |