modssc 0.2.4__tar.gz → 0.3__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 (672) hide show
  1. {modssc-0.2.4 → modssc-0.3}/.gitignore +3 -0
  2. {modssc-0.2.4 → modssc-0.3}/CHANGELOG.md +6 -0
  3. {modssc-0.2.4 → modssc-0.3}/PKG-INFO +3 -1
  4. {modssc-0.2.4 → modssc-0.3}/README.md +2 -0
  5. {modssc-0.2.4 → modssc-0.3}/docs/getting-started/quickstart.md +14 -0
  6. {modssc-0.2.4 → modssc-0.3}/docs/how-to/datasets.md +1 -1
  7. {modssc-0.2.4 → modssc-0.3}/docs/how-to/views.md +1 -1
  8. {modssc-0.2.4 → modssc-0.3}/docs/index.md +1 -1
  9. {modssc-0.2.4 → modssc-0.3}/docs/reference/benchmarks.md +79 -0
  10. {modssc-0.2.4 → modssc-0.3}/docs/reference/configuration.md +25 -2
  11. {modssc-0.2.4 → modssc-0.3}/src/modssc/__about__.py +1 -1
  12. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/ops/audio.py +7 -16
  13. modssc-0.3/src/modssc/data_augmentation/ops/common.py +30 -0
  14. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/ops/tabular.py +7 -16
  15. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/ops/text.py +12 -12
  16. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/utils.py +2 -13
  17. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/cache.py +7 -10
  18. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/errors.py +3 -8
  19. modssc-0.3/src/modssc/data_loader/json_utils.py +39 -0
  20. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/manifest.py +1 -30
  21. modssc-0.3/src/modssc/data_loader/providers/common.py +75 -0
  22. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/providers/hf.py +20 -49
  23. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/providers/openml.py +9 -34
  24. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/providers/pyg.py +1 -8
  25. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/providers/torchaudio.py +21 -47
  26. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/providers/torchvision.py +21 -47
  27. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/storage/files.py +6 -32
  28. modssc-0.3/src/modssc/dependency_errors.py +23 -0
  29. {modssc-0.2.4 → modssc-0.3}/src/modssc/evaluation/metrics.py +1 -11
  30. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/cache.py +37 -25
  31. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/schemes/anchor.py +2 -12
  32. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/featurization/views/struct.py +2 -10
  33. modssc-0.3/src/modssc/import_utils.py +16 -0
  34. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/adapters/torch.py +2 -4
  35. modssc-0.3/src/modssc/inductive/backends/torch_backend.py +21 -0
  36. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/deep/bundles.py +2 -4
  37. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/errors.py +3 -5
  38. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/__init__.py +0 -2
  39. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/adamatch.py +9 -73
  40. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/adsh.py +2 -5
  41. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/co_training.py +4 -6
  42. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/comatch.py +4 -61
  43. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/daso.py +2 -56
  44. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/deep_co_training.py +2 -5
  45. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/deep_utils.py +105 -4
  46. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/defixmatch.py +4 -66
  47. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/fixmatch.py +4 -66
  48. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/flexmatch.py +4 -66
  49. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/free_match.py +4 -66
  50. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/mean_teacher.py +2 -56
  51. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/meta_pseudo_labels.py +2 -5
  52. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/mixmatch.py +4 -66
  53. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/noisy_student.py +2 -56
  54. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/pi_model.py +2 -56
  55. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/setred.py +5 -6
  56. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/simclr_v2.py +2 -5
  57. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/softmatch.py +9 -73
  58. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/temporal_ensembling.py +2 -56
  59. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/trinet.py +4 -10
  60. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/uda.py +2 -56
  61. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/utils.py +8 -3
  62. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/vat.py +2 -56
  63. modssc-0.3/src/modssc/inductive/optional.py +13 -0
  64. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/registry.py +29 -54
  65. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/validation.py +2 -13
  66. modssc-0.3/src/modssc/io_utils.py +17 -0
  67. modssc-0.3/src/modssc/numpy_utils.py +17 -0
  68. modssc-0.3/src/modssc/optional_import_utils.py +16 -0
  69. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/api.py +3 -17
  70. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/cache.py +8 -1
  71. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/errors.py +3 -8
  72. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/models.py +1 -13
  73. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/registry.py +1 -13
  74. modssc-0.3/src/modssc/preprocess/steps/audio/wav2vec2.py +19 -0
  75. modssc-0.3/src/modssc/preprocess/steps/embeddings/common.py +60 -0
  76. modssc-0.3/src/modssc/preprocess/steps/text/sentence_transformer.py +22 -0
  77. modssc-0.3/src/modssc/preprocess/steps/vision/openclip.py +19 -0
  78. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/store.py +1 -1
  79. modssc-0.3/src/modssc/registry_utils.py +126 -0
  80. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/api.py +5 -0
  81. modssc-0.3/src/modssc/sampling/common.py +18 -0
  82. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/labeling.py +1 -15
  83. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/splitters.py +1 -14
  84. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/stats.py +1 -14
  85. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/storage.py +1 -14
  86. modssc-0.3/src/modssc/seed_utils.py +12 -0
  87. modssc-0.3/src/modssc/shape_utils.py +13 -0
  88. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/api.py +1 -10
  89. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/numpy/knn.py +8 -5
  90. modssc-0.3/src/modssc/supervised/backends/sklearn/common.py +70 -0
  91. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/sklearn/extra_trees.py +3 -25
  92. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/sklearn/gradient_boosting.py +3 -25
  93. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/sklearn/knn.py +3 -25
  94. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/sklearn/linear_svm.py +3 -25
  95. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/sklearn/logreg.py +11 -31
  96. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/sklearn/naive_bayes.py +5 -69
  97. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/sklearn/random_forest.py +3 -25
  98. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/sklearn/ridge.py +3 -25
  99. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/sklearn/svm_rbf.py +13 -19
  100. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/audio_cnn.py +7 -27
  101. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/audio_cnn_scratch.py +5 -13
  102. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/audio_pretrained.py +3 -19
  103. modssc-0.3/src/modssc/supervised/backends/torch/common.py +138 -0
  104. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/graphsage_inductive.py +3 -6
  105. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/image_cnn.py +9 -38
  106. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/image_pretrained.py +7 -30
  107. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/knn.py +3 -6
  108. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/logreg.py +3 -19
  109. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/lstm_scratch.py +7 -13
  110. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/mlp.py +7 -27
  111. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/text_cnn.py +7 -27
  112. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/base.py +11 -0
  113. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/errors.py +1 -2
  114. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/utils.py +1 -13
  115. modssc-0.3/src/modssc/torch_backend_common.py +56 -0
  116. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/backends/torch_backend.py +10 -38
  117. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/errors.py +3 -5
  118. modssc-0.3/src/modssc/transductive/methods/classic/common.py +21 -0
  119. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/classic/dynamic_label_propagation.py +4 -18
  120. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/classic/laplace_learning.py +1 -6
  121. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/classic/lazy_random_walk.py +3 -12
  122. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/appnp.py +10 -18
  123. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/chebnet.py +9 -7
  124. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/common.py +26 -13
  125. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/grand.py +1 -17
  126. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/graphsage.py +9 -7
  127. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/utils.py +3 -10
  128. modssc-0.3/src/modssc/transductive/optional.py +7 -0
  129. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/registry.py +29 -55
  130. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/validation.py +2 -13
  131. {modssc-0.2.4 → modssc-0.3}/src/modssc/views/api.py +2 -24
  132. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/ops/test_text.py +7 -0
  133. modssc-0.3/tests/data_loader/providers/test_common.py +62 -0
  134. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_cache.py +17 -0
  135. {modssc-0.2.4 → modssc-0.3}/tests/graph/test_cache.py +30 -0
  136. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/adapters}/test_validation_adapters.py +1 -1
  137. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/backends}/test_backends_deep_utils.py +96 -1
  138. modssc-0.3/tests/inductive/methods/test_adsh_guards.py +49 -0
  139. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_comatch.py +1 -1
  140. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_daso.py +1 -1
  141. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_deep_co_training.py +1 -1
  142. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_graph_dict_helpers.py +0 -2
  143. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_meta_pseudo_labels.py +1 -1
  144. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_methods_classic.py +2 -242
  145. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_methods_deep.py +1 -1
  146. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_self_training.py +1 -1
  147. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_setred.py +1 -1
  148. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_simclr_v2.py +1 -1
  149. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_trinet.py +1 -1
  150. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/test_cache.py +19 -0
  151. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_api.py +15 -0
  152. modssc-0.3/tests/supervised/backends/numpy/__init__.py +0 -0
  153. modssc-0.3/tests/supervised/backends/sklearn/__init__.py +0 -0
  154. modssc-0.3/tests/supervised/backends/torch/__init__.py +0 -0
  155. modssc-0.3/tests/supervised/backends/torch/test_common.py +83 -0
  156. {modssc-0.2.4 → modssc-0.3}/tests/supervised/test_base.py +21 -1
  157. modssc-0.3/tests/transductive/__init__.py +0 -0
  158. modssc-0.3/tests/transductive/adapters/__init__.py +0 -0
  159. modssc-0.3/tests/transductive/backends/__init__.py +0 -0
  160. modssc-0.3/tests/transductive/methods/__init__.py +0 -0
  161. modssc-0.3/tests/transductive/methods/classic/__init__.py +0 -0
  162. modssc-0.3/tests/transductive/methods/gnn/__init__.py +0 -0
  163. modssc-0.3/tests/transductive/methods/pde/__init__.py +0 -0
  164. modssc-0.3/tests/transductive/operators/__init__.py +0 -0
  165. modssc-0.3/tests/transductive/solvers/__init__.py +0 -0
  166. modssc-0.3/tests/views/__init__.py +0 -0
  167. modssc-0.2.4/src/modssc/inductive/backends/torch_backend.py +0 -47
  168. modssc-0.2.4/src/modssc/inductive/methods/tsvm.py +0 -372
  169. modssc-0.2.4/src/modssc/inductive/optional.py +0 -15
  170. modssc-0.2.4/src/modssc/preprocess/steps/audio/wav2vec2.py +0 -35
  171. modssc-0.2.4/src/modssc/preprocess/steps/text/sentence_transformer.py +0 -36
  172. modssc-0.2.4/src/modssc/preprocess/steps/vision/openclip.py +0 -35
  173. modssc-0.2.4/src/modssc/transductive/optional.py +0 -15
  174. modssc-0.2.4/tests/transductive/methods/advanced/__init__.py +0 -1
  175. {modssc-0.2.4 → modssc-0.3}/.editorconfig +0 -0
  176. {modssc-0.2.4 → modssc-0.3}/.github/CODEOWNERS +0 -0
  177. {modssc-0.2.4 → modssc-0.3}/.github/CODE_OF_CONDUCT.md +0 -0
  178. {modssc-0.2.4 → modssc-0.3}/.github/CONTRIBUTING.md +0 -0
  179. {modssc-0.2.4 → modssc-0.3}/.github/GOVERNANCE.md +0 -0
  180. {modssc-0.2.4 → modssc-0.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  181. {modssc-0.2.4 → modssc-0.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  182. {modssc-0.2.4 → modssc-0.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  183. {modssc-0.2.4 → modssc-0.3}/.github/ISSUE_TEMPLATE/new_method.yml +0 -0
  184. {modssc-0.2.4 → modssc-0.3}/.github/SECURITY.md +0 -0
  185. {modssc-0.2.4 → modssc-0.3}/.github/dependabot.yml +0 -0
  186. {modssc-0.2.4 → modssc-0.3}/.github/pull_request_template.md +0 -0
  187. {modssc-0.2.4 → modssc-0.3}/.github/workflows/ci.yml +0 -0
  188. {modssc-0.2.4 → modssc-0.3}/.github/workflows/docs.yml +0 -0
  189. {modssc-0.2.4 → modssc-0.3}/.github/workflows/release.yml +0 -0
  190. {modssc-0.2.4 → modssc-0.3}/.pre-commit-config.yaml +0 -0
  191. {modssc-0.2.4 → modssc-0.3}/CITATION.bib +0 -0
  192. {modssc-0.2.4 → modssc-0.3}/CITATION.cff +0 -0
  193. {modssc-0.2.4 → modssc-0.3}/LICENSE +0 -0
  194. {modssc-0.2.4 → modssc-0.3}/Makefile +0 -0
  195. {modssc-0.2.4 → modssc-0.3}/codecov.yml +0 -0
  196. {modssc-0.2.4 → modssc-0.3}/docs/assets/logo.jpeg +0 -0
  197. {modssc-0.2.4 → modssc-0.3}/docs/development/contributing.md +0 -0
  198. {modssc-0.2.4 → modssc-0.3}/docs/development/release-process.md +0 -0
  199. {modssc-0.2.4 → modssc-0.3}/docs/getting-started/concepts.md +0 -0
  200. {modssc-0.2.4 → modssc-0.3}/docs/getting-started/installation.md +0 -0
  201. {modssc-0.2.4 → modssc-0.3}/docs/how-to/augmentation.md +0 -0
  202. {modssc-0.2.4 → modssc-0.3}/docs/how-to/evaluation.md +0 -0
  203. {modssc-0.2.4 → modssc-0.3}/docs/how-to/graph.md +0 -0
  204. {modssc-0.2.4 → modssc-0.3}/docs/how-to/hpo.md +0 -0
  205. {modssc-0.2.4 → modssc-0.3}/docs/how-to/preprocess.md +0 -0
  206. {modssc-0.2.4 → modssc-0.3}/docs/how-to/sampling.md +0 -0
  207. {modssc-0.2.4 → modssc-0.3}/docs/javascripts/sidebar-toggle.js +0 -0
  208. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/data-augmentation.md +0 -0
  209. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/data-loader.md +0 -0
  210. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/device.md +0 -0
  211. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/evaluation.md +0 -0
  212. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/graph.md +0 -0
  213. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/hpo.md +0 -0
  214. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/index.md +0 -0
  215. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/inductive.md +0 -0
  216. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/logging.md +0 -0
  217. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/preprocess.md +0 -0
  218. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/sampling.md +0 -0
  219. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/supervised.md +0 -0
  220. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/transductive.md +0 -0
  221. {modssc-0.2.4 → modssc-0.3}/docs/reference/api/views.md +0 -0
  222. {modssc-0.2.4 → modssc-0.3}/docs/reference/catalogs.md +0 -0
  223. {modssc-0.2.4 → modssc-0.3}/docs/reference/cli.md +0 -0
  224. {modssc-0.2.4 → modssc-0.3}/docs/stylesheets/extra.css +0 -0
  225. {modssc-0.2.4 → modssc-0.3}/docs/tutorials/inductive-toy.md +0 -0
  226. {modssc-0.2.4 → modssc-0.3}/docs/tutorials/transductive-toy.md +0 -0
  227. {modssc-0.2.4 → modssc-0.3}/examples/00_inductive_toy_pseudo_label.py +0 -0
  228. {modssc-0.2.4 → modssc-0.3}/examples/01_evaluation_quickstart.py +0 -0
  229. {modssc-0.2.4 → modssc-0.3}/examples/01_transductive_toy_label_propagation.py +0 -0
  230. {modssc-0.2.4 → modssc-0.3}/examples/02_hpo_primitives_quickstart.py +0 -0
  231. {modssc-0.2.4 → modssc-0.3}/examples/02_sampling_toy_holdout.py +0 -0
  232. {modssc-0.2.4 → modssc-0.3}/examples/03_cli_smoke.py +0 -0
  233. {modssc-0.2.4 → modssc-0.3}/examples/04_inductive_cotraining_two_views.py +0 -0
  234. {modssc-0.2.4 → modssc-0.3}/mkdocs.yml +0 -0
  235. {modssc-0.2.4 → modssc-0.3}/notebooks/00_cli_tour.ipynb +0 -0
  236. {modssc-0.2.4 → modssc-0.3}/notebooks/01_data_loader_end_to_end.ipynb +0 -0
  237. {modssc-0.2.4 → modssc-0.3}/notebooks/02_sampling_quickstart.ipynb +0 -0
  238. {modssc-0.2.4 → modssc-0.3}/notebooks/03_preprocess_quickstart.ipynb +0 -0
  239. {modssc-0.2.4 → modssc-0.3}/notebooks/04_data_augmentation_quickstart.ipynb +0 -0
  240. {modssc-0.2.4 → modssc-0.3}/notebooks/05_views_quickstart.ipynb +0 -0
  241. {modssc-0.2.4 → modssc-0.3}/notebooks/06_graph_quickstart.ipynb +0 -0
  242. {modssc-0.2.4 → modssc-0.3}/notebooks/07_supervised_quickstart.ipynb +0 -0
  243. {modssc-0.2.4 → modssc-0.3}/notebooks/08_inductive_quickstart.ipynb +0 -0
  244. {modssc-0.2.4 → modssc-0.3}/notebooks/09_transductive_quickstart.ipynb +0 -0
  245. {modssc-0.2.4 → modssc-0.3}/notebooks/10_hpo_bench_smoke.ipynb +0 -0
  246. {modssc-0.2.4 → modssc-0.3}/pyproject.toml +0 -0
  247. {modssc-0.2.4 → modssc-0.3}/src/modssc/__init__.py +0 -0
  248. {modssc-0.2.4 → modssc-0.3}/src/modssc/__main__.py +0 -0
  249. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/__init__.py +0 -0
  250. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/_utils.py +0 -0
  251. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/app.py +0 -0
  252. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/augmentation.py +0 -0
  253. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/datasets.py +0 -0
  254. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/evaluation.py +0 -0
  255. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/graph.py +0 -0
  256. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/inductive.py +0 -0
  257. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/logging.py +0 -0
  258. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/preprocess.py +0 -0
  259. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/sampling.py +0 -0
  260. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/supervised.py +0 -0
  261. {modssc-0.2.4 → modssc-0.3}/src/modssc/cli/transductive.py +0 -0
  262. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/__init__.py +0 -0
  263. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/api.py +0 -0
  264. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/errors.py +0 -0
  265. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/ops/__init__.py +0 -0
  266. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/ops/base.py +0 -0
  267. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/ops/core.py +0 -0
  268. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/ops/graph.py +0 -0
  269. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/ops/vision.py +0 -0
  270. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/optional.py +0 -0
  271. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/plan.py +0 -0
  272. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/registry.py +0 -0
  273. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_augmentation/types.py +0 -0
  274. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/__init__.py +0 -0
  275. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/api.py +0 -0
  276. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/catalog/__init__.py +0 -0
  277. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/catalog/audio.py +0 -0
  278. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/catalog/graph.py +0 -0
  279. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/catalog/tabular.py +0 -0
  280. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/catalog/text.py +0 -0
  281. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/catalog/toy.py +0 -0
  282. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/catalog/vision.py +0 -0
  283. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/formats.py +0 -0
  284. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/numpy_adapter.py +0 -0
  285. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/optional.py +0 -0
  286. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/providers/__init__.py +0 -0
  287. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/providers/base.py +0 -0
  288. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/providers/tfds.py +0 -0
  289. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/providers/toy.py +0 -0
  290. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/storage/__init__.py +0 -0
  291. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/types.py +0 -0
  292. {modssc-0.2.4 → modssc-0.3}/src/modssc/data_loader/uri.py +0 -0
  293. {modssc-0.2.4 → modssc-0.3}/src/modssc/device.py +0 -0
  294. {modssc-0.2.4 → modssc-0.3}/src/modssc/evaluation/__init__.py +0 -0
  295. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/__init__.py +0 -0
  296. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/adapters/__init__.py +0 -0
  297. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/adapters/pyg.py +0 -0
  298. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/artifacts.py +0 -0
  299. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/__init__.py +0 -0
  300. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/api.py +0 -0
  301. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/backends/__init__.py +0 -0
  302. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/backends/faiss_backend.py +0 -0
  303. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/backends/numpy_backend.py +0 -0
  304. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/backends/sklearn_backend.py +0 -0
  305. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/builder.py +0 -0
  306. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/ops/__init__.py +0 -0
  307. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/ops/normalize.py +0 -0
  308. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/ops/self_loops.py +0 -0
  309. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/ops/symmetrize.py +0 -0
  310. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/ops/weights.py +0 -0
  311. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/construction/schemes/__init__.py +0 -0
  312. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/errors.py +0 -0
  313. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/featurization/__init__.py +0 -0
  314. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/featurization/api.py +0 -0
  315. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/featurization/node2vec.py +0 -0
  316. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/featurization/ops/__init__.py +0 -0
  317. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/featurization/ops/adjacency.py +0 -0
  318. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/featurization/views/__init__.py +0 -0
  319. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/featurization/views/attr.py +0 -0
  320. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/featurization/views/diffusion.py +0 -0
  321. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/fingerprint.py +0 -0
  322. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/masks.py +0 -0
  323. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/optional.py +0 -0
  324. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/specs.py +0 -0
  325. {modssc-0.2.4 → modssc-0.3}/src/modssc/graph/validation.py +0 -0
  326. {modssc-0.2.4 → modssc-0.3}/src/modssc/hpo/__init__.py +0 -0
  327. {modssc-0.2.4 → modssc-0.3}/src/modssc/hpo/patching.py +0 -0
  328. {modssc-0.2.4 → modssc-0.3}/src/modssc/hpo/samplers.py +0 -0
  329. {modssc-0.2.4 → modssc-0.3}/src/modssc/hpo/space.py +0 -0
  330. {modssc-0.2.4 → modssc-0.3}/src/modssc/hpo/types.py +0 -0
  331. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/__init__.py +0 -0
  332. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/adapters/__init__.py +0 -0
  333. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/adapters/numpy.py +0 -0
  334. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/backends/__init__.py +0 -0
  335. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/base.py +0 -0
  336. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/deep/__init__.py +0 -0
  337. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/deep/types.py +0 -0
  338. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/deep/validation.py +0 -0
  339. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/democratic_co_learning.py +0 -0
  340. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/pseudo_label.py +0 -0
  341. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/s4vm.py +0 -0
  342. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/self_training.py +0 -0
  343. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/methods/tri_training.py +0 -0
  344. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/seed.py +0 -0
  345. {modssc-0.2.4 → modssc-0.3}/src/modssc/inductive/types.py +0 -0
  346. {modssc-0.2.4 → modssc-0.3}/src/modssc/logging.py +0 -0
  347. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/__init__.py +0 -0
  348. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/catalog.py +0 -0
  349. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/fingerprint.py +0 -0
  350. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/models_backends/__init__.py +0 -0
  351. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/models_backends/base.py +0 -0
  352. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/models_backends/open_clip.py +0 -0
  353. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/models_backends/sentence_transformers.py +0 -0
  354. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/models_backends/stub.py +0 -0
  355. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/models_backends/torchaudio_wav2vec2.py +0 -0
  356. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/numpy_adapter.py +0 -0
  357. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/optional.py +0 -0
  358. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/plan.py +0 -0
  359. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/__init__.py +0 -0
  360. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/audio/__init__.py +0 -0
  361. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/audio/load_waveform.py +0 -0
  362. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/audio/spectrogram.py +0 -0
  363. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/base.py +0 -0
  364. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/core/__init__.py +0 -0
  365. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/core/cast_dtype.py +0 -0
  366. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/core/cast_fp16.py +0 -0
  367. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/core/copy_raw.py +0 -0
  368. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/core/ensure_2d.py +0 -0
  369. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/core/pca.py +0 -0
  370. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/core/random_projection.py +0 -0
  371. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/core/to_numpy.py +0 -0
  372. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/core/to_torch.py +0 -0
  373. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/embeddings/__init__.py +0 -0
  374. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/embeddings/auto.py +0 -0
  375. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/graph/__init__.py +0 -0
  376. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/graph/attach_edge_weight.py +0 -0
  377. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/graph/dgi.py +0 -0
  378. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/graph/edge_sparsify.py +0 -0
  379. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/graph/node2vec.py +0 -0
  380. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/graph/sparse_adjacency.py +0 -0
  381. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/labels/__init__.py +0 -0
  382. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/labels/encode.py +0 -0
  383. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/labels/ensure_onehot.py +0 -0
  384. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/labels/to_numpy.py +0 -0
  385. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/labels/to_torch.py +0 -0
  386. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/tabular/__init__.py +0 -0
  387. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/tabular/impute.py +0 -0
  388. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/tabular/one_hot.py +0 -0
  389. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/tabular/standard_scaler.py +0 -0
  390. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/text/__init__.py +0 -0
  391. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/text/ensure_strings.py +0 -0
  392. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/text/hash_tokenizer.py +0 -0
  393. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/text/tfidf.py +0 -0
  394. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/text/vocab_tokenizer.py +0 -0
  395. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/vision/__init__.py +0 -0
  396. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/vision/channels_order.py +0 -0
  397. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/vision/ensure_num_channels.py +0 -0
  398. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/vision/layout.py +0 -0
  399. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/vision/normalize.py +0 -0
  400. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/vision/resize.py +0 -0
  401. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/vision/squeeze.py +0 -0
  402. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/steps/vision/zca_whitening.py +0 -0
  403. {modssc-0.2.4 → modssc-0.3}/src/modssc/preprocess/types.py +0 -0
  404. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/__init__.py +0 -0
  405. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/errors.py +0 -0
  406. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/fingerprint.py +0 -0
  407. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/imbalance.py +0 -0
  408. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/plan.py +0 -0
  409. {modssc-0.2.4 → modssc-0.3}/src/modssc/sampling/result.py +0 -0
  410. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/__init__.py +0 -0
  411. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/__init__.py +0 -0
  412. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/numpy/__init__.py +0 -0
  413. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/sklearn/__init__.py +0 -0
  414. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/backends/torch/__init__.py +0 -0
  415. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/optional.py +0 -0
  416. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/registry.py +0 -0
  417. {modssc-0.2.4 → modssc-0.3}/src/modssc/supervised/types.py +0 -0
  418. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/__init__.py +0 -0
  419. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/adapters/__init__.py +0 -0
  420. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/adapters/pyg.py +0 -0
  421. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/backends/__init__.py +0 -0
  422. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/backends/numpy_backend.py +0 -0
  423. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/base.py +0 -0
  424. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/__init__.py +0 -0
  425. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/classic/__init__.py +0 -0
  426. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/classic/graph_mincuts.py +0 -0
  427. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/classic/label_propagation.py +0 -0
  428. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/classic/label_spreading.py +0 -0
  429. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/classic/tsvm.py +0 -0
  430. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/__init__.py +0 -0
  431. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/gat.py +0 -0
  432. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/gcn.py +0 -0
  433. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/gcnii.py +0 -0
  434. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/grafn.py +0 -0
  435. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/graphhop.py +0 -0
  436. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/h_gcn.py +0 -0
  437. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/n_gcn.py +0 -0
  438. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/planetoid.py +0 -0
  439. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/gnn/sgc.py +0 -0
  440. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/pde/__init__.py +0 -0
  441. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/pde/p_laplace_learning.py +0 -0
  442. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/pde/poisson_learning.py +0 -0
  443. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/methods/pde/poisson_mbo.py +0 -0
  444. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/operators/__init__.py +0 -0
  445. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/operators/clamp.py +0 -0
  446. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/operators/laplacian.py +0 -0
  447. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/operators/normalize.py +0 -0
  448. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/operators/spmm.py +0 -0
  449. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/solvers/__init__.py +0 -0
  450. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/solvers/cg.py +0 -0
  451. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/solvers/fixed_point.py +0 -0
  452. {modssc-0.2.4 → modssc-0.3}/src/modssc/transductive/types.py +0 -0
  453. {modssc-0.2.4 → modssc-0.3}/src/modssc/views/__init__.py +0 -0
  454. {modssc-0.2.4 → modssc-0.3}/src/modssc/views/errors.py +0 -0
  455. {modssc-0.2.4 → modssc-0.3}/src/modssc/views/plan.py +0 -0
  456. {modssc-0.2.4 → modssc-0.3}/src/modssc/views/types.py +0 -0
  457. {modssc-0.2.4 → modssc-0.3}/tests/__init__.py +0 -0
  458. {modssc-0.2.4 → modssc-0.3}/tests/cli/__init__.py +0 -0
  459. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_app.py +0 -0
  460. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_augmentation.py +0 -0
  461. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_augmentation_module.py +0 -0
  462. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_cache_commands.py +0 -0
  463. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_datasets.py +0 -0
  464. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_datasets_app.py +0 -0
  465. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_evaluation.py +0 -0
  466. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_graph.py +0 -0
  467. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_inductive_cli.py +0 -0
  468. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_log_level_option.py +0 -0
  469. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_main.py +0 -0
  470. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_main_datasets.py +0 -0
  471. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_preprocess.py +0 -0
  472. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_sampling.py +0 -0
  473. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_supervised.py +0 -0
  474. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_utils.py +0 -0
  475. {modssc-0.2.4 → modssc-0.3}/tests/cli/test_version.py +0 -0
  476. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/__init__.py +0 -0
  477. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/ops/__init__.py +0 -0
  478. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/ops/test_audio.py +0 -0
  479. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/ops/test_core.py +0 -0
  480. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/ops/test_graph.py +0 -0
  481. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/ops/test_tabular.py +0 -0
  482. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/ops/test_torch_mock.py +0 -0
  483. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/ops/test_vision.py +0 -0
  484. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/ops/test_vision_numpy.py +0 -0
  485. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/test_api_registry.py +0 -0
  486. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/test_optional.py +0 -0
  487. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/test_pipeline.py +0 -0
  488. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/test_registry.py +0 -0
  489. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/test_types.py +0 -0
  490. {modssc-0.2.4 → modssc-0.3}/tests/data_augmentation/test_utils.py +0 -0
  491. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/__init__.py +0 -0
  492. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/catalog/__init__.py +0 -0
  493. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/catalog/test_catalog.py +0 -0
  494. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/providers/__init__.py +0 -0
  495. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/providers/test_hf.py +0 -0
  496. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/providers/test_openml.py +0 -0
  497. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/providers/test_pyg.py +0 -0
  498. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/providers/test_registry.py +0 -0
  499. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/providers/test_stubs.py +0 -0
  500. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/providers/test_tfds.py +0 -0
  501. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/providers/test_torchaudio.py +0 -0
  502. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/providers/test_torchvision.py +0 -0
  503. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/storage/__init__.py +0 -0
  504. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/storage/test_edges_masks.py +0 -0
  505. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/storage/test_files.py +0 -0
  506. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/storage/test_roundtrip.py +0 -0
  507. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_api.py +0 -0
  508. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_api_end_to_end.py +0 -0
  509. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_api_meta.py +0 -0
  510. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_errors.py +0 -0
  511. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_fingerprint.py +0 -0
  512. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_formats.py +0 -0
  513. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_import_light.py +0 -0
  514. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_manifest.py +0 -0
  515. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_numpy_adapter.py +0 -0
  516. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_optional.py +0 -0
  517. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_types.py +0 -0
  518. {modssc-0.2.4 → modssc-0.3}/tests/data_loader/test_uri.py +0 -0
  519. {modssc-0.2.4 → modssc-0.3}/tests/evaluation/__init__.py +0 -0
  520. {modssc-0.2.4 → modssc-0.3}/tests/evaluation/test_metrics.py +0 -0
  521. {modssc-0.2.4 → modssc-0.3}/tests/graph/__init__.py +0 -0
  522. {modssc-0.2.4 → modssc-0.3}/tests/graph/adapters/__init__.py +0 -0
  523. {modssc-0.2.4 → modssc-0.3}/tests/graph/adapters/test_pyg.py +0 -0
  524. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/__init__.py +0 -0
  525. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/backends/__init__.py +0 -0
  526. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/backends/test_backends.py +0 -0
  527. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/backends/test_faiss_backend.py +0 -0
  528. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/backends/test_numpy_backend.py +0 -0
  529. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/ops/__init__.py +0 -0
  530. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/ops/test_ops.py +0 -0
  531. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/schemes/__init__.py +0 -0
  532. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/schemes/test_anchor.py +0 -0
  533. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/test_api.py +0 -0
  534. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/test_build_graph.py +0 -0
  535. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/test_builder.py +0 -0
  536. {modssc-0.2.4 → modssc-0.3}/tests/graph/construction/test_construction.py +0 -0
  537. {modssc-0.2.4 → modssc-0.3}/tests/graph/featurization/__init__.py +0 -0
  538. {modssc-0.2.4 → modssc-0.3}/tests/graph/featurization/ops/__init__.py +0 -0
  539. {modssc-0.2.4 → modssc-0.3}/tests/graph/featurization/ops/test_adjacency.py +0 -0
  540. {modssc-0.2.4 → modssc-0.3}/tests/graph/featurization/test_featurization.py +0 -0
  541. {modssc-0.2.4 → modssc-0.3}/tests/graph/featurization/test_node2vec.py +0 -0
  542. {modssc-0.2.4 → modssc-0.3}/tests/graph/featurization/test_views.py +0 -0
  543. {modssc-0.2.4 → modssc-0.3}/tests/graph/featurization/views/__init__.py +0 -0
  544. {modssc-0.2.4 → modssc-0.3}/tests/graph/featurization/views/test_struct.py +0 -0
  545. {modssc-0.2.4 → modssc-0.3}/tests/graph/test_artifacts.py +0 -0
  546. {modssc-0.2.4 → modssc-0.3}/tests/graph/test_masks.py +0 -0
  547. {modssc-0.2.4 → modssc-0.3}/tests/graph/test_optional.py +0 -0
  548. {modssc-0.2.4 → modssc-0.3}/tests/graph/test_specs.py +0 -0
  549. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/hpo}/__init__.py +0 -0
  550. {modssc-0.2.4 → modssc-0.3}/tests/hpo/test_patching.py +0 -0
  551. {modssc-0.2.4 → modssc-0.3}/tests/hpo/test_random.py +0 -0
  552. {modssc-0.2.4 → modssc-0.3}/tests/hpo/test_space.py +0 -0
  553. {modssc-0.2.4/tests/preprocess → modssc-0.3/tests/inductive}/__init__.py +0 -0
  554. {modssc-0.2.4/tests/preprocess/models_backends → modssc-0.3/tests/inductive/adapters}/__init__.py +0 -0
  555. {modssc-0.2.4/tests/preprocess/steps → modssc-0.3/tests/inductive/backends}/__init__.py +0 -0
  556. {modssc-0.2.4 → modssc-0.3}/tests/inductive/conftest.py +0 -0
  557. {modssc-0.2.4/tests/preprocess/steps/labels → modssc-0.3/tests/inductive/deep}/__init__.py +0 -0
  558. {modssc-0.2.4 → modssc-0.3}/tests/inductive/deep/test_bundles.py +0 -0
  559. {modssc-0.2.4 → modssc-0.3}/tests/inductive/dummy_registry_module.py +0 -0
  560. {modssc-0.2.4/tests/sampling → modssc-0.3/tests/inductive/methods}/__init__.py +0 -0
  561. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_adsh_predict_proba.py +0 -0
  562. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_co_training_device_validation.py +0 -0
  563. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_co_training_helpers.py +0 -0
  564. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_methods_utils.py +0 -0
  565. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_s4vm.py +0 -0
  566. {modssc-0.2.4/tests/inductive → modssc-0.3/tests/inductive/methods}/test_tri_training.py +0 -0
  567. {modssc-0.2.4 → modssc-0.3}/tests/inductive/test_errors_registry_seed.py +0 -0
  568. {modssc-0.2.4/tests/supervised → modssc-0.3/tests/preprocess}/__init__.py +0 -0
  569. {modssc-0.2.4/tests/supervised/backends → modssc-0.3/tests/preprocess/models_backends}/__init__.py +0 -0
  570. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/models_backends/test_backends.py +0 -0
  571. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/models_backends/test_stub.py +0 -0
  572. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/models_backends/test_torchaudio_wav2vec2.py +0 -0
  573. {modssc-0.2.4/tests/supervised/backends/numpy → modssc-0.3/tests/preprocess/steps}/__init__.py +0 -0
  574. {modssc-0.2.4/tests/supervised/backends/sklearn → modssc-0.3/tests/preprocess/steps/audio}/__init__.py +0 -0
  575. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/audio/test_load_waveform_fallback.py +0 -0
  576. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/audio/test_load_waveform_transform.py +0 -0
  577. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/audio/test_spectrogram.py +0 -0
  578. {modssc-0.2.4/tests/transductive → modssc-0.3/tests/preprocess/steps/core}/__init__.py +0 -0
  579. {modssc-0.2.4/tests/transductive/adapters → modssc-0.3/tests/preprocess/steps/embeddings}/__init__.py +0 -0
  580. {modssc-0.2.4/tests/transductive/backends → modssc-0.3/tests/preprocess/steps/graph}/__init__.py +0 -0
  581. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/graph/test_sparse_adjacency.py +0 -0
  582. {modssc-0.2.4/tests/transductive/methods → modssc-0.3/tests/preprocess/steps/labels}/__init__.py +0 -0
  583. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/labels/test_encode.py +0 -0
  584. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/labels/test_ensure_onehot.py +0 -0
  585. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/labels/test_to_numpy_torch.py +0 -0
  586. {modssc-0.2.4/tests/transductive/methods/classic → modssc-0.3/tests/preprocess/steps/tabular}/__init__.py +0 -0
  587. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/tabular/test_impute.py +0 -0
  588. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/tabular/test_standard_scaler.py +0 -0
  589. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/test_audio_core.py +0 -0
  590. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/test_base_core.py +0 -0
  591. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/test_embeddings_graph.py +0 -0
  592. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/test_layout.py +0 -0
  593. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/test_tabular_one_hot.py +0 -0
  594. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/test_text_steps.py +0 -0
  595. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/test_to_numpy_torch.py +0 -0
  596. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/test_vision_steps.py +0 -0
  597. {modssc-0.2.4/tests/transductive/methods/gnn → modssc-0.3/tests/preprocess/steps/text}/__init__.py +0 -0
  598. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/text/test_vocab_tokenizer.py +0 -0
  599. {modssc-0.2.4/tests/transductive/methods/pde → modssc-0.3/tests/preprocess/steps/vision}/__init__.py +0 -0
  600. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/steps/vision/test_squeeze.py +0 -0
  601. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/test_api.py +0 -0
  602. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/test_errors.py +0 -0
  603. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/test_fingerprint.py +0 -0
  604. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/test_models.py +0 -0
  605. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/test_plan.py +0 -0
  606. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/test_plan_and_pipeline.py +0 -0
  607. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/test_registry.py +0 -0
  608. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/test_store.py +0 -0
  609. {modssc-0.2.4 → modssc-0.3}/tests/preprocess/test_utils.py +0 -0
  610. {modssc-0.2.4/tests/transductive/operators → modssc-0.3/tests/sampling}/__init__.py +0 -0
  611. {modssc-0.2.4 → modssc-0.3}/tests/sampling/_stubs.py +0 -0
  612. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_api_cache_heuristic.py +0 -0
  613. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_api_complex.py +0 -0
  614. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_api_graph.py +0 -0
  615. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_api_inductive.py +0 -0
  616. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_fingerprint.py +0 -0
  617. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_imbalance.py +0 -0
  618. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_labeling.py +0 -0
  619. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_plan.py +0 -0
  620. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_result.py +0 -0
  621. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_result_properties.py +0 -0
  622. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_splitters.py +0 -0
  623. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_splitters_holdout.py +0 -0
  624. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_splitters_kfold.py +0 -0
  625. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_stats.py +0 -0
  626. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_storage.py +0 -0
  627. {modssc-0.2.4 → modssc-0.3}/tests/sampling/test_storage_roundtrip.py +0 -0
  628. {modssc-0.2.4/tests/transductive/solvers → modssc-0.3/tests/supervised}/__init__.py +0 -0
  629. {modssc-0.2.4/tests/views → modssc-0.3/tests/supervised/backends}/__init__.py +0 -0
  630. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/numpy/test_knn.py +0 -0
  631. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/sklearn/test_wrappers.py +0 -0
  632. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_audio_cnn.py +0 -0
  633. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_audio_cnn_scratch.py +0 -0
  634. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_audio_pretrained.py +0 -0
  635. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_graphsage_inductive.py +0 -0
  636. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_image_cnn.py +0 -0
  637. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_image_pretrained.py +0 -0
  638. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_knn.py +0 -0
  639. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_logreg.py +0 -0
  640. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_lstm_scratch.py +0 -0
  641. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_mlp.py +0 -0
  642. {modssc-0.2.4 → modssc-0.3}/tests/supervised/backends/torch/test_text_cnn.py +0 -0
  643. {modssc-0.2.4 → modssc-0.3}/tests/supervised/test_optional.py +0 -0
  644. {modssc-0.2.4 → modssc-0.3}/tests/supervised/test_registry_api.py +0 -0
  645. {modssc-0.2.4 → modssc-0.3}/tests/supervised/test_utils.py +0 -0
  646. {modssc-0.2.4 → modssc-0.3}/tests/test_device.py +0 -0
  647. {modssc-0.2.4 → modssc-0.3}/tests/test_imports.py +0 -0
  648. {modssc-0.2.4 → modssc-0.3}/tests/test_logging_config.py +0 -0
  649. {modssc-0.2.4 → modssc-0.3}/tests/transductive/adapters/test_pyg.py +0 -0
  650. {modssc-0.2.4 → modssc-0.3}/tests/transductive/backends/test_numpy_backend.py +0 -0
  651. {modssc-0.2.4 → modssc-0.3}/tests/transductive/backends/test_torch_backend.py +0 -0
  652. {modssc-0.2.4 → modssc-0.3}/tests/transductive/methods/classic/test_graph_mincuts.py +0 -0
  653. {modssc-0.2.4 → modssc-0.3}/tests/transductive/methods/classic/test_label_methods.py +0 -0
  654. {modssc-0.2.4 → modssc-0.3}/tests/transductive/methods/gnn/test_common.py +0 -0
  655. {modssc-0.2.4 → modssc-0.3}/tests/transductive/methods/gnn/test_gnn_components.py +0 -0
  656. {modssc-0.2.4 → modssc-0.3}/tests/transductive/methods/gnn/test_methods.py +0 -0
  657. {modssc-0.2.4 → modssc-0.3}/tests/transductive/methods/pde/test_p_laplace_learning.py +0 -0
  658. {modssc-0.2.4 → modssc-0.3}/tests/transductive/methods/pde/test_poisson_learning.py +0 -0
  659. {modssc-0.2.4 → modssc-0.3}/tests/transductive/methods/pde/test_poisson_mbo.py +0 -0
  660. {modssc-0.2.4 → modssc-0.3}/tests/transductive/methods/test_tsvm.py +0 -0
  661. {modssc-0.2.4 → modssc-0.3}/tests/transductive/methods/test_utils.py +0 -0
  662. {modssc-0.2.4 → modssc-0.3}/tests/transductive/operators/test_clamp.py +0 -0
  663. {modssc-0.2.4 → modssc-0.3}/tests/transductive/operators/test_laplacian.py +0 -0
  664. {modssc-0.2.4 → modssc-0.3}/tests/transductive/operators/test_torch_wrappers.py +0 -0
  665. {modssc-0.2.4 → modssc-0.3}/tests/transductive/solvers/test_cg.py +0 -0
  666. {modssc-0.2.4 → modssc-0.3}/tests/transductive/solvers/test_fixed_point.py +0 -0
  667. {modssc-0.2.4 → modssc-0.3}/tests/transductive/test_cli_transductive.py +0 -0
  668. {modssc-0.2.4 → modssc-0.3}/tests/transductive/test_errors.py +0 -0
  669. {modssc-0.2.4 → modssc-0.3}/tests/transductive/test_registry.py +0 -0
  670. {modssc-0.2.4 → modssc-0.3}/tests/transductive/test_validation.py +0 -0
  671. {modssc-0.2.4 → modssc-0.3}/tests/views/test_api.py +0 -0
  672. {modssc-0.2.4 → modssc-0.3}/tests/views/test_plan.py +0 -0
@@ -44,3 +44,6 @@ log/
44
44
  coverage.xml
45
45
  analysis/
46
46
  dev_wip/
47
+ bench/configs/experiments/article/README.md
48
+ bench/configs/experiments/best/
49
+ bench/configs/experiments/smoke/
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
4
4
 
5
5
  The format is based on "Keep a Changelog", and this project adheres to Semantic Versioning.
6
6
 
7
+ ## 0.3
8
+ - Refactored modules to reduce redundancy, centralize shared functions, and improve maintainability and test coverage.
9
+
10
+ ## 0.2.5
11
+ - Added env var passthrough for dataset, preprocess, and runs cache directories in benchmarks.
12
+
7
13
  ## 0.2.4
8
14
  - Improved torch container and device handling in inductive benchmarks.
9
15
  - Added LSTM embedding support and hidden_size alias in inductive bundles.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modssc
3
- Version: 0.2.4
3
+ Version: 0.3
4
4
  Summary: ModSSC: a modular framework for semi-supervised classification on heterogeneous data
5
5
  Project-URL: Homepage, https://github.com/ModSSC/ModSSC
6
6
  Project-URL: Repository, https://github.com/ModSSC/ModSSC
@@ -188,6 +188,8 @@ Pick the path that fits your goal: learn the concepts, run examples, or dive int
188
188
  - **Getting started**: [install and first run](https://modssc.github.io/ModSSC/getting-started/installation).
189
189
  - **CLI and API reference**: [full command and API list](https://modssc.github.io/ModSSC/reference/cli).
190
190
 
191
+ If you use benchmark configs with environment placeholders, set `MODSSC_OUTPUT_DIR`, `MODSSC_DATASET_CACHE_DIR`, and `MODSSC_PREPROCESS_CACHE_DIR` before running. See the [Configuration reference](https://modssc.github.io/ModSSC/reference/configuration) for examples.
192
+
191
193
  ### Examples
192
194
 
193
195
  - **Examples**: small scripts in [examples/](examples/).
@@ -22,6 +22,8 @@ Pick the path that fits your goal: learn the concepts, run examples, or dive int
22
22
  - **Getting started**: [install and first run](https://modssc.github.io/ModSSC/getting-started/installation).
23
23
  - **CLI and API reference**: [full command and API list](https://modssc.github.io/ModSSC/reference/cli).
24
24
 
25
+ If you use benchmark configs with environment placeholders, set `MODSSC_OUTPUT_DIR`, `MODSSC_DATASET_CACHE_DIR`, and `MODSSC_PREPROCESS_CACHE_DIR` before running. See the [Configuration reference](https://modssc.github.io/ModSSC/reference/configuration) for examples.
26
+
25
27
  ### Examples
26
28
 
27
29
  - **Examples**: small scripts in [examples/](examples/).
@@ -12,6 +12,20 @@ Run the benchmark runner with the toy inductive config:
12
12
  python -m bench.main --config bench/configs/experiments/toy_inductive.yaml
13
13
  ```
14
14
 
15
+ If your config uses environment placeholders (like `${MODSSC_OUTPUT_DIR}`), export them first:
16
+
17
+ ```bash
18
+ export MODSSC_OUTPUT_DIR=/tmp/modssc_runs
19
+ export MODSSC_DATASET_CACHE_DIR=/tmp/modssc_cache/datasets
20
+ export MODSSC_PREPROCESS_CACHE_DIR=/tmp/modssc_cache/preprocess
21
+ ```
22
+
23
+ Or set one global cache root for all runtime caches:
24
+
25
+ ```bash
26
+ export MODSSC_CACHE_ROOT=/tmp/modssc_cache
27
+ ```
28
+
15
29
  Run a quick Python API pass with the dataset loader and sampling plan:
16
30
 
17
31
  ```python
@@ -54,7 +54,7 @@ _ = download_dataset("toy")
54
54
 
55
55
 
56
56
  !!! tip
57
- Override the dataset cache directory with `MODSSC_CACHE_DIR` if you want to store datasets outside the repo or default user cache. <sup class="cite"><a href="#source-3">[3]</a></sup>
57
+ Override the dataset cache directory with `MODSSC_CACHE_DIR` if you want to store datasets outside the repo or default user cache. For a single root across caches, you can set `MODSSC_CACHE_ROOT`. For bench YAML configs, you can also set `MODSSC_DATASET_CACHE_DIR` and reference it in `dataset.cache_dir`. <sup class="cite"><a href="#source-3">[3]</a></sup>
58
58
 
59
59
 
60
60
  ## Related links
@@ -78,7 +78,7 @@ The view plan schema is defined in [`src/modssc/views/plan.py`](https://github.c
78
78
  <li id="source-3"><a href="https://github.com/ModSSC/ModSSC/blob/main/src/modssc/inductive/methods/co_training.py"><code>src/modssc/inductive/methods/co_training.py</code></a></li>
79
79
  <li id="source-4"><a href="https://github.com/ModSSC/ModSSC/blob/main/src/modssc/inductive/types.py"><code>src/modssc/inductive/types.py</code></a></li>
80
80
  <li id="source-5"><a href="https://github.com/ModSSC/ModSSC/blob/main/src/modssc/preprocess/plan.py"><code>src/modssc/preprocess/plan.py</code></a></li>
81
- <li id="source-6"><a href="https://github.com/ModSSC/ModSSC/blob/main/bench/configs/experiments/best/inductive/co_training/text/imdb.yaml"><code>bench/configs/experiments/best/inductive/co_training/text/imdb.yaml</code></a></li>
81
+ <li id="source-6"><a href="https://github.com/ModSSC/ModSSC/blob/main/bench/configs/experiments/minimal/inductive/co_training/text/imdb.yaml"><code>bench/configs/experiments/minimal/inductive/co_training/text/imdb.yaml</code></a></li>
82
82
  <li id="source-7"><a href="https://github.com/ModSSC/ModSSC/blob/main/bench/schema.py"><code>bench/schema.py</code></a></li>
83
83
  </ol>
84
84
  </details>
@@ -33,7 +33,7 @@ ModSSC is a modular framework for semi-supervised classification across heteroge
33
33
  - [Transductive tutorial](tutorials/transductive-toy.md)
34
34
 
35
35
  ## Version
36
- Current version is `0.2.4`, sourced from [`src/modssc/__about__.py`](https://github.com/ModSSC/ModSSC/blob/main/src/modssc/__about__.py) and referenced by the Hatch version config in [`pyproject.toml`](https://github.com/ModSSC/ModSSC/blob/main/pyproject.toml). <sup class="cite"><a href="#source-18">[18]</a><a href="#source-2">[2]</a></sup>
36
+ Current version is `0.3`, sourced from [`src/modssc/__about__.py`](https://github.com/ModSSC/ModSSC/blob/main/src/modssc/__about__.py) and referenced by the Hatch version config in [`pyproject.toml`](https://github.com/ModSSC/ModSSC/blob/main/pyproject.toml). <sup class="cite"><a href="#source-18">[18]</a><a href="#source-2">[2]</a></sup>
37
37
 
38
38
 
39
39
  ## Project status and support
@@ -13,18 +13,97 @@ python -m bench.main --config bench/configs/experiments/toy_inductive.yaml
13
13
  python -m bench.main --config bench/configs/experiments/toy_transductive.yaml
14
14
  ```
15
15
 
16
+ If you are using environment variable placeholders in configs (like `${MODSSC_OUTPUT_DIR}`), set them once before running:
17
+
18
+ ```bash
19
+ export MODSSC_OUTPUT_DIR=/tmp/modssc_runs
20
+ export MODSSC_DATASET_CACHE_DIR=/tmp/modssc_cache/datasets
21
+ export MODSSC_PREPROCESS_CACHE_DIR=/tmp/modssc_cache/preprocess
22
+ ```
23
+
24
+ If one of these placeholders is missing at runtime, config loading fails fast with an explicit error.
25
+
26
+ You can also set one global cache root for runtime caches (dataset, preprocess, split, graph):
27
+
28
+ ```bash
29
+ export MODSSC_CACHE_ROOT=/tmp/modssc_cache
30
+ ```
31
+
32
+ Optional graph-specific overrides:
33
+
34
+ ```bash
35
+ export MODSSC_GRAPH_CACHE_DIR=/tmp/modssc_cache/graphs
36
+ export MODSSC_GRAPH_VIEWS_CACHE_DIR=/tmp/modssc_cache/graph_views
37
+ ```
38
+
16
39
  Enable verbose logging for a run:
17
40
 
18
41
  ```bash
19
42
  python -m bench.main --config bench/configs/experiments/toy_inductive.yaml --log-level detailed
20
43
  ```
21
44
 
45
+ Run the same config on multiple seeds:
46
+
47
+ ```yaml
48
+ run:
49
+ name: toy_pseudo_label
50
+ seed: 0
51
+ seeds: [1, 2, 3, 4, 5]
52
+ ```
53
+
54
+ In sweep mode, the runner executes one run per seed and auto-suffixes `run.name` with `-seed<N>`. For each run, `run.seed` and section seeds (`sampling`, `preprocess`, `views`, `graph`, `augmentation`, `search`) are aligned to that seed.
55
+
56
+ Or sweep by run count from the CLI:
57
+
58
+ ```bash
59
+ # Uses run.seed as base and runs seeds [seed, seed+1, ..., seed+N-1]
60
+ python -m bench.main --config bench/configs/experiments/toy_inductive.yaml --num-runs 5
61
+ ```
62
+
63
+ `--num-runs` follows the same seed-sweep logic and overrides `run.seeds` when both are present.
64
+
22
65
  The `--log-level` flag is defined on the bench CLI entry point. <sup class="cite"><a href="#source-1">[1]</a></sup>
23
66
 
24
67
 
25
68
  The bench entry point and example configs are in [`bench/main.py`](https://github.com/ModSSC/ModSSC/blob/main/bench/main.py) and [`bench/configs/experiments/`](https://github.com/ModSSC/ModSSC/tree/main/bench/configs/experiments). <sup class="cite"><a href="#source-1">[1]</a><a href="#source-2">[2]</a></sup>
26
69
 
27
70
 
71
+ ## Cache behavior in multi-seed runs
72
+ For multi-seed sweeps, keep one shared cache root and let fingerprints isolate seed-dependent artifacts:
73
+
74
+ ```bash
75
+ export MODSSC_CACHE_ROOT=/tmp/modssc_cache
76
+ ```
77
+
78
+ Use separate `MODSSC_CACHE_ROOT` values only when you explicitly need hard isolation (for example strict clean-room comparisons across branches/commits).
79
+
80
+ When you run 5 seeds, you should expect 5 distinct split/preprocess/graph fingerprints (one per seed), while dataset artifacts are shared.
81
+
82
+ - Dataset cache (`datasets/`):
83
+ Reused across seeds when dataset identity is unchanged (provider, dataset id, version, resolved options). Usually do not recompute.
84
+
85
+ - Sampling split cache (`splits/`):
86
+ Conceptually seed-dependent (different split fingerprint per seed), so each seed maps to a different split entry.
87
+ Current bench orchestration computes sampling in-memory (`save=False`) and does not persist split cache entries.
88
+
89
+ - Preprocess cache (`preprocess/`):
90
+ Seed-dependent. Fingerprint includes dataset fingerprint, resolved plan fingerprint, fit fingerprint, and seed.
91
+ In a 5-seed sweep, expect 5 preprocess entries. Reuse only happens when rerunning the same seed + same plan + same fit inputs.
92
+
93
+ - Graph cache (`graphs/`):
94
+ Seed-dependent. Fingerprint includes dataset fingerprint, preprocess fingerprint, graph spec, and seed.
95
+ In a 5-seed sweep, expect 5 graph entries (unless graph is dataset-provided and not rebuilt).
96
+
97
+ - Method training/inference:
98
+ Not cached by the benchmark runner. Model fit/eval is recomputed every run.
99
+
100
+ Practical rules:
101
+ - Keep the same cache root for speed when rerunning identical experiments.
102
+ - Do not reuse cache for "strict from-scratch" comparisons; use a new cache root.
103
+ - If you change dataset options, preprocessing steps/params, `fit_on`, graph spec, or seeds, expect recomputation for impacted stages.
104
+ - If preprocessing or graph implementation changes in code while config stays the same, clear impacted cache folders to avoid stale artifacts.
105
+
106
+
28
107
  ## How outputs are stored
29
108
  Each run writes a timestamped directory under [`runs/`](https://github.com/ModSSC/ModSSC/tree/main/runs) with:
30
109
  - `config.yaml` (copied config)
@@ -14,6 +14,12 @@ Start with where files live, then how they are loaded, then the schema blocks yo
14
14
  ## How configs are loaded
15
15
  - Bench configs are read from YAML with `bench.utils.io.load_yaml` and validated via `ExperimentConfig.from_dict`. <sup class="cite"><a href="#source-3">[3]</a><a href="#source-2">[2]</a></sup>
16
16
 
17
+ - Bench configs support environment variable expansion in string values (for example `${MODSSC_OUTPUT_DIR}` or `$MODSSC_OUTPUT_DIR`). This is useful for `run.output_dir`, `dataset.cache_dir`, and `preprocess.cache_dir` placeholders in YAML. <sup class="cite"><a href="#source-3">[3]</a></sup>
18
+
19
+ - Unresolved placeholders now fail fast with an explicit error (key path + missing variable names) instead of being kept as literal strings.
20
+
21
+ - Runtime cache env vars (outside YAML placeholders): `MODSSC_CACHE_ROOT` (global root), `MODSSC_CACHE_DIR` (dataset cache), `MODSSC_PREPROCESS_CACHE_DIR` (preprocess cache), `MODSSC_SPLIT_CACHE_DIR` (sampling split cache), `MODSSC_GRAPH_CACHE_DIR` (graph cache), `MODSSC_GRAPH_VIEWS_CACHE_DIR` (graph views cache).
22
+
17
23
  - CLI plan/spec files use `load_yaml_or_json` and are validated with their respective `from_dict` methods. <sup class="cite"><a href="#source-4">[4]</a><a href="#source-5">[5]</a><a href="#source-6">[6]</a></sup>
18
24
 
19
25
  - Preprocess plans are loaded from YAML with `modssc.preprocess.plan.load_plan`. <sup class="cite"><a href="#source-7">[7]</a></sup>
@@ -28,6 +34,23 @@ Run a bench config:
28
34
  python -m bench.main --config bench/configs/experiments/toy_inductive.yaml
29
35
  ```
30
36
 
37
+ Run a bench config with environment variable placeholders:
38
+
39
+ ```bash
40
+ MODSSC_OUTPUT_DIR=/tmp/modssc_runs \
41
+ MODSSC_DATASET_CACHE_DIR=/tmp/modssc_cache/datasets \
42
+ MODSSC_PREPROCESS_CACHE_DIR=/tmp/modssc_cache/preprocess \
43
+ python -m bench.main --config bench/configs/experiments/toy_inductive.yaml
44
+ ```
45
+
46
+ Or export them once per shell session:
47
+
48
+ ```bash
49
+ export MODSSC_OUTPUT_DIR=/tmp/modssc_runs
50
+ export MODSSC_DATASET_CACHE_DIR=/tmp/modssc_cache/datasets
51
+ export MODSSC_PREPROCESS_CACHE_DIR=/tmp/modssc_cache/preprocess
52
+ ```
53
+
31
54
  Load and inspect a config in Python:
32
55
 
33
56
  ```python
@@ -44,7 +67,7 @@ The bench entry point, schema, and YAML loader are in [`bench/main.py`](https://
44
67
  ## Experiment config schema (bench)
45
68
  Top-level keys and their required fields are defined in [`bench/schema.py`](https://github.com/ModSSC/ModSSC/blob/main/bench/schema.py):
46
69
 
47
- - `run`: `name`, `seed`, `output_dir`, `fail_fast`, optional `log_level`. <sup class="cite"><a href="#source-2">[2]</a></sup>
70
+ - `run`: `name`, `seed`, `output_dir`, `fail_fast`, optional `log_level`, optional `seeds` (list of run seeds for a sweep). <sup class="cite"><a href="#source-2">[2]</a></sup>
48
71
 
49
72
  - `dataset`: `id`, optional `options`, `download`, `cache_dir`. <sup class="cite"><a href="#source-2">[2]</a></sup>
50
73
 
@@ -398,6 +421,6 @@ evaluation:
398
421
  <li id="source-23"><a href="https://github.com/ModSSC/ModSSC/blob/main/src/modssc/hpo/samplers.py"><code>src/modssc/hpo/samplers.py</code></a></li>
399
422
  <li id="source-24"><a href="https://github.com/ModSSC/ModSSC/blob/main/bench/configs/experiments/toy_inductive.yaml"><code>bench/configs/experiments/toy_inductive.yaml</code></a></li>
400
423
  <li id="source-25"><a href="https://github.com/ModSSC/ModSSC/blob/main/bench/configs/experiments/toy_transductive.yaml"><code>bench/configs/experiments/toy_transductive.yaml</code></a></li>
401
- <li id="source-26"><a href="https://github.com/ModSSC/ModSSC/blob/main/bench/configs/experiments/best/inductive/softmatch/text/ag_news.yaml"><code>bench/configs/experiments/best/inductive/softmatch/text/ag_news.yaml</code></a></li>
424
+ <li id="source-26"><a href="https://github.com/ModSSC/ModSSC/blob/main/bench/configs/experiments/minimal/inductive/pseudo_label/text/imdb.yaml"><code>bench/configs/experiments/minimal/inductive/pseudo_label/text/imdb.yaml</code></a></li>
402
425
  </ol>
403
426
  </details>
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2024-present ModSSC contributors
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
- __version__ = "0.2.4"
4
+ __version__ = "0.3"
@@ -9,6 +9,7 @@ from ..registry import register_op
9
9
  from ..types import AugmentationContext, Modality
10
10
  from ..utils import is_torch_tensor
11
11
  from .base import AugmentationOp
12
+ from .common import apply_gaussian_noise
12
13
 
13
14
 
14
15
  @register_op("audio.add_noise")
@@ -21,22 +22,12 @@ class AddNoise(AugmentationOp):
21
22
  std: float = 0.005
22
23
 
23
24
  def apply(self, x: Any, *, rng: np.random.Generator, ctx: AugmentationContext) -> Any: # noqa: ARG002
24
- std = float(self.std)
25
- if std < 0:
26
- raise ValueError("std must be >= 0")
27
- if std == 0:
28
- return x
29
- if is_torch_tensor(x):
30
- import importlib
31
-
32
- torch = importlib.import_module("torch")
33
- seed = int(rng.integers(0, 1 << 31))
34
- gen = torch.Generator(device=x.device).manual_seed(seed)
35
- noise = torch.randn(x.shape, generator=gen, device=x.device, dtype=x.dtype) * std
36
- return x + noise
37
- arr = np.asarray(x)
38
- noise = rng.normal(0.0, std, size=arr.shape).astype(arr.dtype, copy=False)
39
- return arr + noise
25
+ return apply_gaussian_noise(
26
+ x,
27
+ std=float(self.std),
28
+ rng=rng,
29
+ is_torch_tensor_fn=is_torch_tensor,
30
+ )
40
31
 
41
32
 
42
33
  @register_op("audio.time_shift")
@@ -0,0 +1,30 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ import numpy as np
6
+
7
+
8
+ def apply_gaussian_noise(
9
+ x: Any,
10
+ *,
11
+ std: float,
12
+ rng: np.random.Generator,
13
+ is_torch_tensor_fn: Any,
14
+ ) -> Any:
15
+ std = float(std)
16
+ if std < 0:
17
+ raise ValueError("std must be >= 0")
18
+ if std == 0:
19
+ return x
20
+ if is_torch_tensor_fn(x):
21
+ import importlib
22
+
23
+ torch = importlib.import_module("torch")
24
+ seed = int(rng.integers(0, 1 << 31))
25
+ gen = torch.Generator(device=x.device).manual_seed(seed)
26
+ noise = torch.randn(x.shape, generator=gen, device=x.device, dtype=x.dtype) * std
27
+ return x + noise
28
+ arr = np.asarray(x)
29
+ noise = rng.normal(0.0, std, size=arr.shape).astype(arr.dtype, copy=False)
30
+ return arr + noise
@@ -9,6 +9,7 @@ from ..registry import register_op
9
9
  from ..types import AugmentationContext, Modality
10
10
  from ..utils import is_torch_tensor
11
11
  from .base import AugmentationOp
12
+ from .common import apply_gaussian_noise
12
13
 
13
14
 
14
15
  @register_op("tabular.gaussian_noise")
@@ -21,22 +22,12 @@ class GaussianNoise(AugmentationOp):
21
22
  std: float = 0.1
22
23
 
23
24
  def apply(self, x: Any, *, rng: np.random.Generator, ctx: AugmentationContext) -> Any: # noqa: ARG002
24
- std = float(self.std)
25
- if std < 0:
26
- raise ValueError("std must be >= 0")
27
- if std == 0:
28
- return x
29
- if is_torch_tensor(x):
30
- import importlib
31
-
32
- torch = importlib.import_module("torch")
33
- seed = int(rng.integers(0, 1 << 31))
34
- gen = torch.Generator(device=x.device).manual_seed(seed)
35
- noise = torch.randn(x.shape, generator=gen, device=x.device, dtype=x.dtype) * std
36
- return x + noise
37
- arr = np.asarray(x)
38
- noise = rng.normal(0.0, std, size=arr.shape).astype(arr.dtype, copy=False)
39
- return arr + noise
25
+ return apply_gaussian_noise(
26
+ x,
27
+ std=self.std,
28
+ rng=rng,
29
+ is_torch_tensor_fn=is_torch_tensor,
30
+ )
40
31
 
41
32
 
42
33
  @register_op("tabular.feature_dropout")
@@ -32,9 +32,19 @@ class Lowercase(AugmentationOp):
32
32
  return out if many else out[0]
33
33
 
34
34
 
35
+ class _PerItemTextOp(AugmentationOp):
36
+ def _apply_one(self, s: str, *, rng: np.random.Generator) -> str:
37
+ raise NotImplementedError
38
+
39
+ def apply(self, x: Any, *, rng: np.random.Generator, ctx: AugmentationContext) -> Any: # noqa: ARG002
40
+ items, many = _as_list(x)
41
+ out = [self._apply_one(s, rng=rng) for s in items]
42
+ return out if many else out[0]
43
+
44
+
35
45
  @register_op("text.word_dropout")
36
46
  @dataclass
37
- class WordDropout(AugmentationOp):
47
+ class WordDropout(_PerItemTextOp):
38
48
  """Randomly drop words from whitespace-tokenized text."""
39
49
 
40
50
  op_id: str = "text.word_dropout"
@@ -53,15 +63,10 @@ class WordDropout(AugmentationOp):
53
63
  keep = [tokens[int(rng.integers(0, len(tokens)))]]
54
64
  return " ".join(keep)
55
65
 
56
- def apply(self, x: Any, *, rng: np.random.Generator, ctx: AugmentationContext) -> Any: # noqa: ARG002
57
- items, many = _as_list(x)
58
- out = [self._apply_one(s, rng=rng) for s in items]
59
- return out if many else out[0]
60
-
61
66
 
62
67
  @register_op("text.random_swap")
63
68
  @dataclass
64
- class RandomSwap(AugmentationOp):
69
+ class RandomSwap(_PerItemTextOp):
65
70
  """Randomly swap two words N times."""
66
71
 
67
72
  op_id: str = "text.random_swap"
@@ -79,8 +84,3 @@ class RandomSwap(AugmentationOp):
79
84
  j = int(j)
80
85
  tokens[i], tokens[j] = tokens[j], tokens[i]
81
86
  return " ".join(tokens)
82
-
83
- def apply(self, x: Any, *, rng: np.random.Generator, ctx: AugmentationContext) -> Any: # noqa: ARG002
84
- items, many = _as_list(x)
85
- out = [self._apply_one(s, rng=rng) for s in items]
86
- return out if many else out[0]
@@ -5,6 +5,8 @@ from typing import Any
5
5
 
6
6
  import numpy as np
7
7
 
8
+ from modssc.numpy_utils import to_numpy
9
+
8
10
  from .types import Backend
9
11
 
10
12
 
@@ -20,19 +22,6 @@ def is_torch_tensor(x: Any) -> bool:
20
22
  return hasattr(x, "shape") and hasattr(x, "dtype") and hasattr(x, "device")
21
23
 
22
24
 
23
- def to_numpy(x: Any) -> np.ndarray:
24
- """Best-effort conversion to numpy (detaches torch tensors)."""
25
- if isinstance(x, np.ndarray):
26
- return x
27
- if hasattr(x, "detach"):
28
- x = x.detach()
29
- if hasattr(x, "cpu"):
30
- x = x.cpu()
31
- if hasattr(x, "numpy"):
32
- return x.numpy()
33
- return np.asarray(x)
34
-
35
-
36
25
  def _u64_from_bytes(b: bytes) -> int:
37
26
  return int.from_bytes(b[:8], "little", signed=False)
38
27
 
@@ -4,7 +4,6 @@ import contextlib
4
4
  import os
5
5
  import shutil
6
6
  import sqlite3
7
- import tempfile
8
7
  from collections.abc import Iterable, Iterator
9
8
  from contextlib import contextmanager
10
9
  from dataclasses import dataclass
@@ -15,8 +14,10 @@ from platformdirs import user_cache_dir
15
14
 
16
15
  from modssc.data_loader.errors import ManifestError
17
16
  from modssc.data_loader.manifest import Manifest, read_manifest
17
+ from modssc.io_utils import atomic_write_text as _atomic_write_text
18
18
 
19
19
  CACHE_ENV = "MODSSC_CACHE_DIR"
20
+ CACHE_ROOT_ENV = "MODSSC_CACHE_ROOT"
20
21
 
21
22
 
22
23
  def default_cache_dir() -> Path:
@@ -24,6 +25,10 @@ def default_cache_dir() -> Path:
24
25
  if override:
25
26
  return Path(override).expanduser().resolve()
26
27
 
28
+ root_override = os.environ.get(CACHE_ROOT_ENV)
29
+ if root_override:
30
+ return Path(root_override).expanduser().resolve() / "datasets"
31
+
27
32
  # Heuristic: if running in a dev repo (pyproject.toml exists in parents),
28
33
  # default to a local "cache" folder at the repo root.
29
34
  current = Path.cwd()
@@ -118,15 +123,7 @@ def read_cached_manifest(layout: CacheLayout, fingerprint: str) -> Manifest:
118
123
 
119
124
 
120
125
  def atomic_write_text(path: Path, text: str) -> None:
121
- path.parent.mkdir(parents=True, exist_ok=True)
122
- with tempfile.NamedTemporaryFile(
123
- "w", delete=False, dir=str(path.parent), encoding="utf-8"
124
- ) as tmp:
125
- tmp.write(text)
126
- tmp.flush()
127
- os.fsync(tmp.fileno())
128
- tmp_path = Path(tmp.name)
129
- tmp_path.replace(path)
126
+ _atomic_write_text(path, text)
130
127
 
131
128
 
132
129
  def dir_size_bytes(path: Path) -> int:
@@ -2,6 +2,8 @@ from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
4
 
5
+ from modssc.dependency_errors import MissingExtraErrorMessageMixin
6
+
5
7
 
6
8
  class DataLoaderError(RuntimeError):
7
9
  """Base error for modssc.data_loader."""
@@ -23,19 +25,12 @@ class ProviderNotFoundError(DataLoaderError):
23
25
 
24
26
 
25
27
  @dataclass(frozen=True)
26
- class OptionalDependencyError(DataLoaderError):
28
+ class OptionalDependencyError(MissingExtraErrorMessageMixin, DataLoaderError):
27
29
  """Raised when an optional dependency (extra) required by a provider is missing."""
28
30
 
29
31
  extra: str
30
32
  purpose: str | None = None
31
33
 
32
- def __str__(self) -> str:
33
- msg = f"Missing optional dependency extra: {self.extra!r}."
34
- if self.purpose:
35
- msg += f" Required for: {self.purpose}."
36
- msg += f' Install with: pip install "modssc[{self.extra}]"'
37
- return msg
38
-
39
34
 
40
35
  class DatasetNotCachedError(DataLoaderError):
41
36
  def __init__(self, dataset_id: str) -> None:
@@ -0,0 +1,39 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from pathlib import Path
5
+ from typing import Any
6
+
7
+ import numpy as np
8
+
9
+
10
+ def to_jsonable(obj: Any) -> Any:
11
+ if obj is None:
12
+ return None
13
+ if isinstance(obj, (bool, int, float, str)):
14
+ return obj
15
+ if isinstance(obj, Path):
16
+ return str(obj)
17
+ if isinstance(obj, np.ndarray):
18
+ return {"__type__": "ndarray", "shape": list(obj.shape), "dtype": str(obj.dtype)}
19
+ if hasattr(obj, "shape") and hasattr(obj, "dtype"):
20
+ try:
21
+ shape = list(obj.shape)
22
+ except Exception:
23
+ shape = None
24
+ return {
25
+ "__type__": type(obj).__name__,
26
+ "shape": shape,
27
+ "dtype": str(getattr(obj, "dtype", "")),
28
+ }
29
+ if isinstance(obj, Mapping):
30
+ return {str(k): to_jsonable(v) for k, v in obj.items()}
31
+ if isinstance(obj, (list, tuple)):
32
+ if len(obj) > 50:
33
+ return {"__type__": type(obj).__name__, "len": len(obj)}
34
+ return [to_jsonable(v) for v in obj]
35
+ return {"__type__": type(obj).__name__}
36
+
37
+
38
+ def mapping_to_jsonable(meta: Mapping[str, Any]) -> dict[str, Any]:
39
+ return {str(k): to_jsonable(v) for k, v in meta.items()}
@@ -9,8 +9,7 @@ from datetime import datetime, timezone
9
9
  from pathlib import Path
10
10
  from typing import Any
11
11
 
12
- import numpy as np
13
-
12
+ from modssc.data_loader.json_utils import to_jsonable as _jsonable
14
13
  from modssc.data_loader.types import DatasetIdentity, LoadedDataset
15
14
 
16
15
 
@@ -22,34 +21,6 @@ def python_version() -> str:
22
21
  return sys.version.split()[0]
23
22
 
24
23
 
25
- def _jsonable(obj: Any) -> Any:
26
- if obj is None:
27
- return None
28
- if isinstance(obj, (bool, int, float, str)):
29
- return obj
30
- if isinstance(obj, Path):
31
- return str(obj)
32
- if isinstance(obj, np.ndarray):
33
- return {"__type__": "ndarray", "shape": list(obj.shape), "dtype": str(obj.dtype)}
34
- if hasattr(obj, "shape") and hasattr(obj, "dtype"):
35
- try:
36
- shape = list(obj.shape)
37
- except Exception:
38
- shape = None
39
- return {
40
- "__type__": type(obj).__name__,
41
- "shape": shape,
42
- "dtype": str(getattr(obj, "dtype", "")),
43
- }
44
- if isinstance(obj, Mapping):
45
- return {str(k): _jsonable(v) for k, v in obj.items()}
46
- if isinstance(obj, (list, tuple)):
47
- if len(obj) > 50:
48
- return {"__type__": type(obj).__name__, "len": len(obj)}
49
- return [_jsonable(v) for v in obj]
50
- return {"__type__": type(obj).__name__}
51
-
52
-
53
24
  def dataset_summary(ds: LoadedDataset) -> dict[str, Any]:
54
25
  def shape_dtype(x: Any) -> dict[str, Any]:
55
26
  if x is None: