modssc 0.2.5__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.5 → modssc-0.3}/.gitignore +3 -0
  2. {modssc-0.2.5 → modssc-0.3}/CHANGELOG.md +3 -0
  3. {modssc-0.2.5 → modssc-0.3}/PKG-INFO +1 -1
  4. {modssc-0.2.5 → modssc-0.3}/docs/how-to/views.md +1 -1
  5. {modssc-0.2.5 → modssc-0.3}/docs/index.md +1 -1
  6. {modssc-0.2.5 → modssc-0.3}/docs/reference/configuration.md +1 -1
  7. {modssc-0.2.5 → modssc-0.3}/src/modssc/__about__.py +1 -1
  8. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/ops/audio.py +7 -16
  9. modssc-0.3/src/modssc/data_augmentation/ops/common.py +30 -0
  10. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/ops/tabular.py +7 -16
  11. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/ops/text.py +12 -12
  12. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/utils.py +2 -13
  13. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/cache.py +2 -10
  14. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/errors.py +3 -8
  15. modssc-0.3/src/modssc/data_loader/json_utils.py +39 -0
  16. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/manifest.py +1 -30
  17. modssc-0.3/src/modssc/data_loader/providers/common.py +75 -0
  18. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/providers/hf.py +20 -49
  19. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/providers/openml.py +9 -34
  20. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/providers/pyg.py +1 -8
  21. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/providers/torchaudio.py +21 -47
  22. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/providers/torchvision.py +21 -47
  23. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/storage/files.py +6 -32
  24. modssc-0.3/src/modssc/dependency_errors.py +23 -0
  25. {modssc-0.2.5 → modssc-0.3}/src/modssc/evaluation/metrics.py +1 -11
  26. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/cache.py +17 -24
  27. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/schemes/anchor.py +2 -12
  28. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/featurization/views/struct.py +2 -10
  29. modssc-0.3/src/modssc/import_utils.py +16 -0
  30. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/adapters/torch.py +2 -4
  31. modssc-0.3/src/modssc/inductive/backends/torch_backend.py +21 -0
  32. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/deep/bundles.py +2 -4
  33. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/errors.py +3 -5
  34. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/adamatch.py +9 -73
  35. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/adsh.py +2 -5
  36. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/co_training.py +4 -6
  37. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/comatch.py +4 -61
  38. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/daso.py +2 -56
  39. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/deep_co_training.py +2 -5
  40. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/deep_utils.py +105 -4
  41. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/defixmatch.py +4 -66
  42. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/fixmatch.py +4 -66
  43. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/flexmatch.py +4 -66
  44. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/free_match.py +4 -66
  45. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/mean_teacher.py +2 -56
  46. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/meta_pseudo_labels.py +2 -5
  47. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/mixmatch.py +4 -66
  48. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/noisy_student.py +2 -56
  49. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/pi_model.py +2 -56
  50. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/setred.py +5 -6
  51. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/simclr_v2.py +2 -5
  52. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/softmatch.py +9 -73
  53. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/temporal_ensembling.py +2 -56
  54. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/trinet.py +4 -10
  55. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/uda.py +2 -56
  56. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/utils.py +8 -3
  57. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/vat.py +2 -56
  58. modssc-0.3/src/modssc/inductive/optional.py +13 -0
  59. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/registry.py +29 -53
  60. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/validation.py +2 -13
  61. modssc-0.3/src/modssc/io_utils.py +17 -0
  62. modssc-0.3/src/modssc/numpy_utils.py +17 -0
  63. modssc-0.3/src/modssc/optional_import_utils.py +16 -0
  64. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/api.py +3 -17
  65. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/errors.py +3 -8
  66. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/models.py +1 -13
  67. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/registry.py +1 -13
  68. modssc-0.3/src/modssc/preprocess/steps/audio/wav2vec2.py +19 -0
  69. modssc-0.3/src/modssc/preprocess/steps/embeddings/common.py +60 -0
  70. modssc-0.3/src/modssc/preprocess/steps/text/sentence_transformer.py +22 -0
  71. modssc-0.3/src/modssc/preprocess/steps/vision/openclip.py +19 -0
  72. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/store.py +1 -1
  73. modssc-0.3/src/modssc/registry_utils.py +126 -0
  74. modssc-0.3/src/modssc/sampling/common.py +18 -0
  75. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/labeling.py +1 -15
  76. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/splitters.py +1 -14
  77. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/stats.py +1 -14
  78. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/storage.py +1 -14
  79. modssc-0.3/src/modssc/seed_utils.py +12 -0
  80. modssc-0.3/src/modssc/shape_utils.py +13 -0
  81. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/api.py +1 -10
  82. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/numpy/knn.py +8 -5
  83. modssc-0.3/src/modssc/supervised/backends/sklearn/common.py +70 -0
  84. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/sklearn/extra_trees.py +3 -25
  85. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/sklearn/gradient_boosting.py +3 -25
  86. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/sklearn/knn.py +3 -25
  87. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/sklearn/linear_svm.py +3 -25
  88. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/sklearn/logreg.py +11 -31
  89. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/sklearn/naive_bayes.py +5 -69
  90. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/sklearn/random_forest.py +3 -25
  91. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/sklearn/ridge.py +3 -25
  92. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/sklearn/svm_rbf.py +13 -19
  93. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/audio_cnn.py +7 -27
  94. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/audio_cnn_scratch.py +5 -13
  95. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/audio_pretrained.py +3 -19
  96. modssc-0.3/src/modssc/supervised/backends/torch/common.py +138 -0
  97. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/graphsage_inductive.py +3 -6
  98. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/image_cnn.py +9 -38
  99. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/image_pretrained.py +7 -30
  100. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/knn.py +3 -6
  101. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/logreg.py +3 -19
  102. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/lstm_scratch.py +5 -13
  103. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/mlp.py +7 -27
  104. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/text_cnn.py +7 -27
  105. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/base.py +11 -0
  106. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/errors.py +1 -2
  107. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/utils.py +1 -13
  108. modssc-0.3/src/modssc/torch_backend_common.py +56 -0
  109. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/backends/torch_backend.py +10 -38
  110. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/errors.py +3 -5
  111. modssc-0.3/src/modssc/transductive/methods/classic/common.py +21 -0
  112. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/classic/dynamic_label_propagation.py +4 -18
  113. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/classic/laplace_learning.py +1 -6
  114. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/classic/lazy_random_walk.py +3 -12
  115. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/appnp.py +10 -18
  116. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/chebnet.py +9 -7
  117. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/common.py +26 -13
  118. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/grand.py +1 -17
  119. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/graphsage.py +9 -7
  120. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/utils.py +3 -10
  121. modssc-0.3/src/modssc/transductive/optional.py +7 -0
  122. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/registry.py +29 -55
  123. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/validation.py +2 -13
  124. {modssc-0.2.5 → modssc-0.3}/src/modssc/views/api.py +2 -24
  125. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/ops/test_text.py +7 -0
  126. modssc-0.3/tests/data_loader/providers/test_common.py +62 -0
  127. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/adapters}/test_validation_adapters.py +1 -1
  128. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/backends}/test_backends_deep_utils.py +96 -1
  129. modssc-0.3/tests/inductive/methods/test_adsh_guards.py +49 -0
  130. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_comatch.py +1 -1
  131. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_daso.py +1 -1
  132. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_deep_co_training.py +1 -1
  133. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_meta_pseudo_labels.py +1 -1
  134. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_methods_classic.py +1 -1
  135. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_methods_deep.py +1 -1
  136. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_self_training.py +1 -1
  137. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_setred.py +1 -1
  138. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_simclr_v2.py +1 -1
  139. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_trinet.py +1 -1
  140. modssc-0.3/tests/supervised/backends/numpy/__init__.py +0 -0
  141. modssc-0.3/tests/supervised/backends/sklearn/__init__.py +0 -0
  142. modssc-0.3/tests/supervised/backends/torch/__init__.py +0 -0
  143. modssc-0.3/tests/supervised/backends/torch/test_common.py +83 -0
  144. {modssc-0.2.5 → modssc-0.3}/tests/supervised/test_base.py +21 -1
  145. modssc-0.3/tests/transductive/__init__.py +0 -0
  146. modssc-0.3/tests/transductive/adapters/__init__.py +0 -0
  147. modssc-0.3/tests/transductive/backends/__init__.py +0 -0
  148. modssc-0.3/tests/transductive/methods/__init__.py +0 -0
  149. modssc-0.3/tests/transductive/methods/classic/__init__.py +0 -0
  150. modssc-0.3/tests/transductive/methods/gnn/__init__.py +0 -0
  151. modssc-0.3/tests/transductive/methods/pde/__init__.py +0 -0
  152. modssc-0.3/tests/transductive/operators/__init__.py +0 -0
  153. modssc-0.3/tests/transductive/solvers/__init__.py +0 -0
  154. modssc-0.3/tests/views/__init__.py +0 -0
  155. modssc-0.2.5/src/modssc/inductive/backends/torch_backend.py +0 -47
  156. modssc-0.2.5/src/modssc/inductive/optional.py +0 -15
  157. modssc-0.2.5/src/modssc/preprocess/steps/audio/wav2vec2.py +0 -35
  158. modssc-0.2.5/src/modssc/preprocess/steps/text/sentence_transformer.py +0 -36
  159. modssc-0.2.5/src/modssc/preprocess/steps/vision/openclip.py +0 -35
  160. modssc-0.2.5/src/modssc/transductive/optional.py +0 -15
  161. modssc-0.2.5/tests/test_bench_seed_sweep.py +0 -154
  162. modssc-0.2.5/tests/transductive/methods/advanced/__init__.py +0 -1
  163. {modssc-0.2.5 → modssc-0.3}/.editorconfig +0 -0
  164. {modssc-0.2.5 → modssc-0.3}/.github/CODEOWNERS +0 -0
  165. {modssc-0.2.5 → modssc-0.3}/.github/CODE_OF_CONDUCT.md +0 -0
  166. {modssc-0.2.5 → modssc-0.3}/.github/CONTRIBUTING.md +0 -0
  167. {modssc-0.2.5 → modssc-0.3}/.github/GOVERNANCE.md +0 -0
  168. {modssc-0.2.5 → modssc-0.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  169. {modssc-0.2.5 → modssc-0.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  170. {modssc-0.2.5 → modssc-0.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  171. {modssc-0.2.5 → modssc-0.3}/.github/ISSUE_TEMPLATE/new_method.yml +0 -0
  172. {modssc-0.2.5 → modssc-0.3}/.github/SECURITY.md +0 -0
  173. {modssc-0.2.5 → modssc-0.3}/.github/dependabot.yml +0 -0
  174. {modssc-0.2.5 → modssc-0.3}/.github/pull_request_template.md +0 -0
  175. {modssc-0.2.5 → modssc-0.3}/.github/workflows/ci.yml +0 -0
  176. {modssc-0.2.5 → modssc-0.3}/.github/workflows/docs.yml +0 -0
  177. {modssc-0.2.5 → modssc-0.3}/.github/workflows/release.yml +0 -0
  178. {modssc-0.2.5 → modssc-0.3}/.pre-commit-config.yaml +0 -0
  179. {modssc-0.2.5 → modssc-0.3}/CITATION.bib +0 -0
  180. {modssc-0.2.5 → modssc-0.3}/CITATION.cff +0 -0
  181. {modssc-0.2.5 → modssc-0.3}/LICENSE +0 -0
  182. {modssc-0.2.5 → modssc-0.3}/Makefile +0 -0
  183. {modssc-0.2.5 → modssc-0.3}/README.md +0 -0
  184. {modssc-0.2.5 → modssc-0.3}/codecov.yml +0 -0
  185. {modssc-0.2.5 → modssc-0.3}/docs/assets/logo.jpeg +0 -0
  186. {modssc-0.2.5 → modssc-0.3}/docs/development/contributing.md +0 -0
  187. {modssc-0.2.5 → modssc-0.3}/docs/development/release-process.md +0 -0
  188. {modssc-0.2.5 → modssc-0.3}/docs/getting-started/concepts.md +0 -0
  189. {modssc-0.2.5 → modssc-0.3}/docs/getting-started/installation.md +0 -0
  190. {modssc-0.2.5 → modssc-0.3}/docs/getting-started/quickstart.md +0 -0
  191. {modssc-0.2.5 → modssc-0.3}/docs/how-to/augmentation.md +0 -0
  192. {modssc-0.2.5 → modssc-0.3}/docs/how-to/datasets.md +0 -0
  193. {modssc-0.2.5 → modssc-0.3}/docs/how-to/evaluation.md +0 -0
  194. {modssc-0.2.5 → modssc-0.3}/docs/how-to/graph.md +0 -0
  195. {modssc-0.2.5 → modssc-0.3}/docs/how-to/hpo.md +0 -0
  196. {modssc-0.2.5 → modssc-0.3}/docs/how-to/preprocess.md +0 -0
  197. {modssc-0.2.5 → modssc-0.3}/docs/how-to/sampling.md +0 -0
  198. {modssc-0.2.5 → modssc-0.3}/docs/javascripts/sidebar-toggle.js +0 -0
  199. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/data-augmentation.md +0 -0
  200. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/data-loader.md +0 -0
  201. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/device.md +0 -0
  202. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/evaluation.md +0 -0
  203. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/graph.md +0 -0
  204. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/hpo.md +0 -0
  205. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/index.md +0 -0
  206. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/inductive.md +0 -0
  207. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/logging.md +0 -0
  208. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/preprocess.md +0 -0
  209. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/sampling.md +0 -0
  210. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/supervised.md +0 -0
  211. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/transductive.md +0 -0
  212. {modssc-0.2.5 → modssc-0.3}/docs/reference/api/views.md +0 -0
  213. {modssc-0.2.5 → modssc-0.3}/docs/reference/benchmarks.md +0 -0
  214. {modssc-0.2.5 → modssc-0.3}/docs/reference/catalogs.md +0 -0
  215. {modssc-0.2.5 → modssc-0.3}/docs/reference/cli.md +0 -0
  216. {modssc-0.2.5 → modssc-0.3}/docs/stylesheets/extra.css +0 -0
  217. {modssc-0.2.5 → modssc-0.3}/docs/tutorials/inductive-toy.md +0 -0
  218. {modssc-0.2.5 → modssc-0.3}/docs/tutorials/transductive-toy.md +0 -0
  219. {modssc-0.2.5 → modssc-0.3}/examples/00_inductive_toy_pseudo_label.py +0 -0
  220. {modssc-0.2.5 → modssc-0.3}/examples/01_evaluation_quickstart.py +0 -0
  221. {modssc-0.2.5 → modssc-0.3}/examples/01_transductive_toy_label_propagation.py +0 -0
  222. {modssc-0.2.5 → modssc-0.3}/examples/02_hpo_primitives_quickstart.py +0 -0
  223. {modssc-0.2.5 → modssc-0.3}/examples/02_sampling_toy_holdout.py +0 -0
  224. {modssc-0.2.5 → modssc-0.3}/examples/03_cli_smoke.py +0 -0
  225. {modssc-0.2.5 → modssc-0.3}/examples/04_inductive_cotraining_two_views.py +0 -0
  226. {modssc-0.2.5 → modssc-0.3}/mkdocs.yml +0 -0
  227. {modssc-0.2.5 → modssc-0.3}/notebooks/00_cli_tour.ipynb +0 -0
  228. {modssc-0.2.5 → modssc-0.3}/notebooks/01_data_loader_end_to_end.ipynb +0 -0
  229. {modssc-0.2.5 → modssc-0.3}/notebooks/02_sampling_quickstart.ipynb +0 -0
  230. {modssc-0.2.5 → modssc-0.3}/notebooks/03_preprocess_quickstart.ipynb +0 -0
  231. {modssc-0.2.5 → modssc-0.3}/notebooks/04_data_augmentation_quickstart.ipynb +0 -0
  232. {modssc-0.2.5 → modssc-0.3}/notebooks/05_views_quickstart.ipynb +0 -0
  233. {modssc-0.2.5 → modssc-0.3}/notebooks/06_graph_quickstart.ipynb +0 -0
  234. {modssc-0.2.5 → modssc-0.3}/notebooks/07_supervised_quickstart.ipynb +0 -0
  235. {modssc-0.2.5 → modssc-0.3}/notebooks/08_inductive_quickstart.ipynb +0 -0
  236. {modssc-0.2.5 → modssc-0.3}/notebooks/09_transductive_quickstart.ipynb +0 -0
  237. {modssc-0.2.5 → modssc-0.3}/notebooks/10_hpo_bench_smoke.ipynb +0 -0
  238. {modssc-0.2.5 → modssc-0.3}/pyproject.toml +0 -0
  239. {modssc-0.2.5 → modssc-0.3}/src/modssc/__init__.py +0 -0
  240. {modssc-0.2.5 → modssc-0.3}/src/modssc/__main__.py +0 -0
  241. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/__init__.py +0 -0
  242. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/_utils.py +0 -0
  243. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/app.py +0 -0
  244. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/augmentation.py +0 -0
  245. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/datasets.py +0 -0
  246. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/evaluation.py +0 -0
  247. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/graph.py +0 -0
  248. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/inductive.py +0 -0
  249. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/logging.py +0 -0
  250. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/preprocess.py +0 -0
  251. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/sampling.py +0 -0
  252. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/supervised.py +0 -0
  253. {modssc-0.2.5 → modssc-0.3}/src/modssc/cli/transductive.py +0 -0
  254. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/__init__.py +0 -0
  255. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/api.py +0 -0
  256. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/errors.py +0 -0
  257. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/ops/__init__.py +0 -0
  258. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/ops/base.py +0 -0
  259. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/ops/core.py +0 -0
  260. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/ops/graph.py +0 -0
  261. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/ops/vision.py +0 -0
  262. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/optional.py +0 -0
  263. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/plan.py +0 -0
  264. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/registry.py +0 -0
  265. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_augmentation/types.py +0 -0
  266. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/__init__.py +0 -0
  267. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/api.py +0 -0
  268. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/catalog/__init__.py +0 -0
  269. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/catalog/audio.py +0 -0
  270. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/catalog/graph.py +0 -0
  271. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/catalog/tabular.py +0 -0
  272. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/catalog/text.py +0 -0
  273. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/catalog/toy.py +0 -0
  274. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/catalog/vision.py +0 -0
  275. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/formats.py +0 -0
  276. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/numpy_adapter.py +0 -0
  277. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/optional.py +0 -0
  278. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/providers/__init__.py +0 -0
  279. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/providers/base.py +0 -0
  280. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/providers/tfds.py +0 -0
  281. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/providers/toy.py +0 -0
  282. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/storage/__init__.py +0 -0
  283. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/types.py +0 -0
  284. {modssc-0.2.5 → modssc-0.3}/src/modssc/data_loader/uri.py +0 -0
  285. {modssc-0.2.5 → modssc-0.3}/src/modssc/device.py +0 -0
  286. {modssc-0.2.5 → modssc-0.3}/src/modssc/evaluation/__init__.py +0 -0
  287. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/__init__.py +0 -0
  288. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/adapters/__init__.py +0 -0
  289. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/adapters/pyg.py +0 -0
  290. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/artifacts.py +0 -0
  291. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/__init__.py +0 -0
  292. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/api.py +0 -0
  293. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/backends/__init__.py +0 -0
  294. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/backends/faiss_backend.py +0 -0
  295. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/backends/numpy_backend.py +0 -0
  296. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/backends/sklearn_backend.py +0 -0
  297. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/builder.py +0 -0
  298. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/ops/__init__.py +0 -0
  299. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/ops/normalize.py +0 -0
  300. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/ops/self_loops.py +0 -0
  301. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/ops/symmetrize.py +0 -0
  302. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/ops/weights.py +0 -0
  303. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/construction/schemes/__init__.py +0 -0
  304. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/errors.py +0 -0
  305. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/featurization/__init__.py +0 -0
  306. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/featurization/api.py +0 -0
  307. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/featurization/node2vec.py +0 -0
  308. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/featurization/ops/__init__.py +0 -0
  309. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/featurization/ops/adjacency.py +0 -0
  310. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/featurization/views/__init__.py +0 -0
  311. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/featurization/views/attr.py +0 -0
  312. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/featurization/views/diffusion.py +0 -0
  313. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/fingerprint.py +0 -0
  314. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/masks.py +0 -0
  315. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/optional.py +0 -0
  316. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/specs.py +0 -0
  317. {modssc-0.2.5 → modssc-0.3}/src/modssc/graph/validation.py +0 -0
  318. {modssc-0.2.5 → modssc-0.3}/src/modssc/hpo/__init__.py +0 -0
  319. {modssc-0.2.5 → modssc-0.3}/src/modssc/hpo/patching.py +0 -0
  320. {modssc-0.2.5 → modssc-0.3}/src/modssc/hpo/samplers.py +0 -0
  321. {modssc-0.2.5 → modssc-0.3}/src/modssc/hpo/space.py +0 -0
  322. {modssc-0.2.5 → modssc-0.3}/src/modssc/hpo/types.py +0 -0
  323. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/__init__.py +0 -0
  324. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/adapters/__init__.py +0 -0
  325. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/adapters/numpy.py +0 -0
  326. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/backends/__init__.py +0 -0
  327. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/base.py +0 -0
  328. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/deep/__init__.py +0 -0
  329. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/deep/types.py +0 -0
  330. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/deep/validation.py +0 -0
  331. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/__init__.py +0 -0
  332. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/democratic_co_learning.py +0 -0
  333. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/pseudo_label.py +0 -0
  334. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/s4vm.py +0 -0
  335. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/self_training.py +0 -0
  336. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/methods/tri_training.py +0 -0
  337. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/seed.py +0 -0
  338. {modssc-0.2.5 → modssc-0.3}/src/modssc/inductive/types.py +0 -0
  339. {modssc-0.2.5 → modssc-0.3}/src/modssc/logging.py +0 -0
  340. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/__init__.py +0 -0
  341. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/cache.py +0 -0
  342. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/catalog.py +0 -0
  343. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/fingerprint.py +0 -0
  344. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/models_backends/__init__.py +0 -0
  345. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/models_backends/base.py +0 -0
  346. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/models_backends/open_clip.py +0 -0
  347. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/models_backends/sentence_transformers.py +0 -0
  348. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/models_backends/stub.py +0 -0
  349. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/models_backends/torchaudio_wav2vec2.py +0 -0
  350. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/numpy_adapter.py +0 -0
  351. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/optional.py +0 -0
  352. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/plan.py +0 -0
  353. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/__init__.py +0 -0
  354. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/audio/__init__.py +0 -0
  355. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/audio/load_waveform.py +0 -0
  356. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/audio/spectrogram.py +0 -0
  357. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/base.py +0 -0
  358. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/core/__init__.py +0 -0
  359. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/core/cast_dtype.py +0 -0
  360. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/core/cast_fp16.py +0 -0
  361. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/core/copy_raw.py +0 -0
  362. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/core/ensure_2d.py +0 -0
  363. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/core/pca.py +0 -0
  364. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/core/random_projection.py +0 -0
  365. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/core/to_numpy.py +0 -0
  366. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/core/to_torch.py +0 -0
  367. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/embeddings/__init__.py +0 -0
  368. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/embeddings/auto.py +0 -0
  369. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/graph/__init__.py +0 -0
  370. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/graph/attach_edge_weight.py +0 -0
  371. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/graph/dgi.py +0 -0
  372. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/graph/edge_sparsify.py +0 -0
  373. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/graph/node2vec.py +0 -0
  374. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/graph/sparse_adjacency.py +0 -0
  375. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/labels/__init__.py +0 -0
  376. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/labels/encode.py +0 -0
  377. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/labels/ensure_onehot.py +0 -0
  378. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/labels/to_numpy.py +0 -0
  379. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/labels/to_torch.py +0 -0
  380. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/tabular/__init__.py +0 -0
  381. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/tabular/impute.py +0 -0
  382. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/tabular/one_hot.py +0 -0
  383. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/tabular/standard_scaler.py +0 -0
  384. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/text/__init__.py +0 -0
  385. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/text/ensure_strings.py +0 -0
  386. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/text/hash_tokenizer.py +0 -0
  387. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/text/tfidf.py +0 -0
  388. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/text/vocab_tokenizer.py +0 -0
  389. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/vision/__init__.py +0 -0
  390. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/vision/channels_order.py +0 -0
  391. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/vision/ensure_num_channels.py +0 -0
  392. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/vision/layout.py +0 -0
  393. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/vision/normalize.py +0 -0
  394. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/vision/resize.py +0 -0
  395. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/vision/squeeze.py +0 -0
  396. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/steps/vision/zca_whitening.py +0 -0
  397. {modssc-0.2.5 → modssc-0.3}/src/modssc/preprocess/types.py +0 -0
  398. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/__init__.py +0 -0
  399. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/api.py +0 -0
  400. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/errors.py +0 -0
  401. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/fingerprint.py +0 -0
  402. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/imbalance.py +0 -0
  403. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/plan.py +0 -0
  404. {modssc-0.2.5 → modssc-0.3}/src/modssc/sampling/result.py +0 -0
  405. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/__init__.py +0 -0
  406. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/__init__.py +0 -0
  407. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/numpy/__init__.py +0 -0
  408. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/sklearn/__init__.py +0 -0
  409. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/backends/torch/__init__.py +0 -0
  410. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/optional.py +0 -0
  411. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/registry.py +0 -0
  412. {modssc-0.2.5 → modssc-0.3}/src/modssc/supervised/types.py +0 -0
  413. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/__init__.py +0 -0
  414. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/adapters/__init__.py +0 -0
  415. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/adapters/pyg.py +0 -0
  416. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/backends/__init__.py +0 -0
  417. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/backends/numpy_backend.py +0 -0
  418. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/base.py +0 -0
  419. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/__init__.py +0 -0
  420. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/classic/__init__.py +0 -0
  421. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/classic/graph_mincuts.py +0 -0
  422. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/classic/label_propagation.py +0 -0
  423. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/classic/label_spreading.py +0 -0
  424. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/classic/tsvm.py +0 -0
  425. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/__init__.py +0 -0
  426. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/gat.py +0 -0
  427. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/gcn.py +0 -0
  428. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/gcnii.py +0 -0
  429. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/grafn.py +0 -0
  430. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/graphhop.py +0 -0
  431. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/h_gcn.py +0 -0
  432. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/n_gcn.py +0 -0
  433. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/planetoid.py +0 -0
  434. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/gnn/sgc.py +0 -0
  435. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/pde/__init__.py +0 -0
  436. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/pde/p_laplace_learning.py +0 -0
  437. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/pde/poisson_learning.py +0 -0
  438. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/methods/pde/poisson_mbo.py +0 -0
  439. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/operators/__init__.py +0 -0
  440. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/operators/clamp.py +0 -0
  441. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/operators/laplacian.py +0 -0
  442. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/operators/normalize.py +0 -0
  443. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/operators/spmm.py +0 -0
  444. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/solvers/__init__.py +0 -0
  445. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/solvers/cg.py +0 -0
  446. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/solvers/fixed_point.py +0 -0
  447. {modssc-0.2.5 → modssc-0.3}/src/modssc/transductive/types.py +0 -0
  448. {modssc-0.2.5 → modssc-0.3}/src/modssc/views/__init__.py +0 -0
  449. {modssc-0.2.5 → modssc-0.3}/src/modssc/views/errors.py +0 -0
  450. {modssc-0.2.5 → modssc-0.3}/src/modssc/views/plan.py +0 -0
  451. {modssc-0.2.5 → modssc-0.3}/src/modssc/views/types.py +0 -0
  452. {modssc-0.2.5 → modssc-0.3}/tests/__init__.py +0 -0
  453. {modssc-0.2.5 → modssc-0.3}/tests/cli/__init__.py +0 -0
  454. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_app.py +0 -0
  455. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_augmentation.py +0 -0
  456. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_augmentation_module.py +0 -0
  457. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_cache_commands.py +0 -0
  458. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_datasets.py +0 -0
  459. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_datasets_app.py +0 -0
  460. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_evaluation.py +0 -0
  461. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_graph.py +0 -0
  462. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_inductive_cli.py +0 -0
  463. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_log_level_option.py +0 -0
  464. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_main.py +0 -0
  465. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_main_datasets.py +0 -0
  466. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_preprocess.py +0 -0
  467. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_sampling.py +0 -0
  468. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_supervised.py +0 -0
  469. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_utils.py +0 -0
  470. {modssc-0.2.5 → modssc-0.3}/tests/cli/test_version.py +0 -0
  471. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/__init__.py +0 -0
  472. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/ops/__init__.py +0 -0
  473. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/ops/test_audio.py +0 -0
  474. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/ops/test_core.py +0 -0
  475. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/ops/test_graph.py +0 -0
  476. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/ops/test_tabular.py +0 -0
  477. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/ops/test_torch_mock.py +0 -0
  478. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/ops/test_vision.py +0 -0
  479. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/ops/test_vision_numpy.py +0 -0
  480. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/test_api_registry.py +0 -0
  481. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/test_optional.py +0 -0
  482. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/test_pipeline.py +0 -0
  483. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/test_registry.py +0 -0
  484. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/test_types.py +0 -0
  485. {modssc-0.2.5 → modssc-0.3}/tests/data_augmentation/test_utils.py +0 -0
  486. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/__init__.py +0 -0
  487. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/catalog/__init__.py +0 -0
  488. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/catalog/test_catalog.py +0 -0
  489. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/providers/__init__.py +0 -0
  490. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/providers/test_hf.py +0 -0
  491. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/providers/test_openml.py +0 -0
  492. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/providers/test_pyg.py +0 -0
  493. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/providers/test_registry.py +0 -0
  494. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/providers/test_stubs.py +0 -0
  495. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/providers/test_tfds.py +0 -0
  496. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/providers/test_torchaudio.py +0 -0
  497. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/providers/test_torchvision.py +0 -0
  498. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/storage/__init__.py +0 -0
  499. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/storage/test_edges_masks.py +0 -0
  500. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/storage/test_files.py +0 -0
  501. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/storage/test_roundtrip.py +0 -0
  502. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_api.py +0 -0
  503. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_api_end_to_end.py +0 -0
  504. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_api_meta.py +0 -0
  505. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_cache.py +0 -0
  506. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_errors.py +0 -0
  507. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_fingerprint.py +0 -0
  508. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_formats.py +0 -0
  509. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_import_light.py +0 -0
  510. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_manifest.py +0 -0
  511. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_numpy_adapter.py +0 -0
  512. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_optional.py +0 -0
  513. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_types.py +0 -0
  514. {modssc-0.2.5 → modssc-0.3}/tests/data_loader/test_uri.py +0 -0
  515. {modssc-0.2.5 → modssc-0.3}/tests/evaluation/__init__.py +0 -0
  516. {modssc-0.2.5 → modssc-0.3}/tests/evaluation/test_metrics.py +0 -0
  517. {modssc-0.2.5 → modssc-0.3}/tests/graph/__init__.py +0 -0
  518. {modssc-0.2.5 → modssc-0.3}/tests/graph/adapters/__init__.py +0 -0
  519. {modssc-0.2.5 → modssc-0.3}/tests/graph/adapters/test_pyg.py +0 -0
  520. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/__init__.py +0 -0
  521. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/backends/__init__.py +0 -0
  522. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/backends/test_backends.py +0 -0
  523. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/backends/test_faiss_backend.py +0 -0
  524. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/backends/test_numpy_backend.py +0 -0
  525. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/ops/__init__.py +0 -0
  526. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/ops/test_ops.py +0 -0
  527. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/schemes/__init__.py +0 -0
  528. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/schemes/test_anchor.py +0 -0
  529. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/test_api.py +0 -0
  530. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/test_build_graph.py +0 -0
  531. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/test_builder.py +0 -0
  532. {modssc-0.2.5 → modssc-0.3}/tests/graph/construction/test_construction.py +0 -0
  533. {modssc-0.2.5 → modssc-0.3}/tests/graph/featurization/__init__.py +0 -0
  534. {modssc-0.2.5 → modssc-0.3}/tests/graph/featurization/ops/__init__.py +0 -0
  535. {modssc-0.2.5 → modssc-0.3}/tests/graph/featurization/ops/test_adjacency.py +0 -0
  536. {modssc-0.2.5 → modssc-0.3}/tests/graph/featurization/test_featurization.py +0 -0
  537. {modssc-0.2.5 → modssc-0.3}/tests/graph/featurization/test_node2vec.py +0 -0
  538. {modssc-0.2.5 → modssc-0.3}/tests/graph/featurization/test_views.py +0 -0
  539. {modssc-0.2.5 → modssc-0.3}/tests/graph/featurization/views/__init__.py +0 -0
  540. {modssc-0.2.5 → modssc-0.3}/tests/graph/featurization/views/test_struct.py +0 -0
  541. {modssc-0.2.5 → modssc-0.3}/tests/graph/test_artifacts.py +0 -0
  542. {modssc-0.2.5 → modssc-0.3}/tests/graph/test_cache.py +0 -0
  543. {modssc-0.2.5 → modssc-0.3}/tests/graph/test_masks.py +0 -0
  544. {modssc-0.2.5 → modssc-0.3}/tests/graph/test_optional.py +0 -0
  545. {modssc-0.2.5 → modssc-0.3}/tests/graph/test_specs.py +0 -0
  546. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/hpo}/__init__.py +0 -0
  547. {modssc-0.2.5 → modssc-0.3}/tests/hpo/test_patching.py +0 -0
  548. {modssc-0.2.5 → modssc-0.3}/tests/hpo/test_random.py +0 -0
  549. {modssc-0.2.5 → modssc-0.3}/tests/hpo/test_space.py +0 -0
  550. {modssc-0.2.5/tests/preprocess → modssc-0.3/tests/inductive}/__init__.py +0 -0
  551. {modssc-0.2.5/tests/preprocess/models_backends → modssc-0.3/tests/inductive/adapters}/__init__.py +0 -0
  552. {modssc-0.2.5/tests/preprocess/steps → modssc-0.3/tests/inductive/backends}/__init__.py +0 -0
  553. {modssc-0.2.5 → modssc-0.3}/tests/inductive/conftest.py +0 -0
  554. {modssc-0.2.5/tests/preprocess/steps/labels → modssc-0.3/tests/inductive/deep}/__init__.py +0 -0
  555. {modssc-0.2.5 → modssc-0.3}/tests/inductive/deep/test_bundles.py +0 -0
  556. {modssc-0.2.5 → modssc-0.3}/tests/inductive/dummy_registry_module.py +0 -0
  557. {modssc-0.2.5/tests/sampling → modssc-0.3/tests/inductive/methods}/__init__.py +0 -0
  558. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_adsh_predict_proba.py +0 -0
  559. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_co_training_device_validation.py +0 -0
  560. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_co_training_helpers.py +0 -0
  561. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_graph_dict_helpers.py +0 -0
  562. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_methods_utils.py +0 -0
  563. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_s4vm.py +0 -0
  564. {modssc-0.2.5/tests/inductive → modssc-0.3/tests/inductive/methods}/test_tri_training.py +0 -0
  565. {modssc-0.2.5 → modssc-0.3}/tests/inductive/test_errors_registry_seed.py +0 -0
  566. {modssc-0.2.5/tests/supervised → modssc-0.3/tests/preprocess}/__init__.py +0 -0
  567. {modssc-0.2.5/tests/supervised/backends → modssc-0.3/tests/preprocess/models_backends}/__init__.py +0 -0
  568. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/models_backends/test_backends.py +0 -0
  569. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/models_backends/test_stub.py +0 -0
  570. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/models_backends/test_torchaudio_wav2vec2.py +0 -0
  571. {modssc-0.2.5/tests/supervised/backends/numpy → modssc-0.3/tests/preprocess/steps}/__init__.py +0 -0
  572. {modssc-0.2.5/tests/supervised/backends/sklearn → modssc-0.3/tests/preprocess/steps/audio}/__init__.py +0 -0
  573. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/audio/test_load_waveform_fallback.py +0 -0
  574. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/audio/test_load_waveform_transform.py +0 -0
  575. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/audio/test_spectrogram.py +0 -0
  576. {modssc-0.2.5/tests/transductive → modssc-0.3/tests/preprocess/steps/core}/__init__.py +0 -0
  577. {modssc-0.2.5/tests/transductive/adapters → modssc-0.3/tests/preprocess/steps/embeddings}/__init__.py +0 -0
  578. {modssc-0.2.5/tests/transductive/backends → modssc-0.3/tests/preprocess/steps/graph}/__init__.py +0 -0
  579. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/graph/test_sparse_adjacency.py +0 -0
  580. {modssc-0.2.5/tests/transductive/methods → modssc-0.3/tests/preprocess/steps/labels}/__init__.py +0 -0
  581. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/labels/test_encode.py +0 -0
  582. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/labels/test_ensure_onehot.py +0 -0
  583. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/labels/test_to_numpy_torch.py +0 -0
  584. {modssc-0.2.5/tests/transductive/methods/classic → modssc-0.3/tests/preprocess/steps/tabular}/__init__.py +0 -0
  585. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/tabular/test_impute.py +0 -0
  586. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/tabular/test_standard_scaler.py +0 -0
  587. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/test_audio_core.py +0 -0
  588. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/test_base_core.py +0 -0
  589. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/test_embeddings_graph.py +0 -0
  590. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/test_layout.py +0 -0
  591. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/test_tabular_one_hot.py +0 -0
  592. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/test_text_steps.py +0 -0
  593. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/test_to_numpy_torch.py +0 -0
  594. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/test_vision_steps.py +0 -0
  595. {modssc-0.2.5/tests/transductive/methods/gnn → modssc-0.3/tests/preprocess/steps/text}/__init__.py +0 -0
  596. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/text/test_vocab_tokenizer.py +0 -0
  597. {modssc-0.2.5/tests/transductive/methods/pde → modssc-0.3/tests/preprocess/steps/vision}/__init__.py +0 -0
  598. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/steps/vision/test_squeeze.py +0 -0
  599. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/test_api.py +0 -0
  600. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/test_cache.py +0 -0
  601. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/test_errors.py +0 -0
  602. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/test_fingerprint.py +0 -0
  603. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/test_models.py +0 -0
  604. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/test_plan.py +0 -0
  605. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/test_plan_and_pipeline.py +0 -0
  606. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/test_registry.py +0 -0
  607. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/test_store.py +0 -0
  608. {modssc-0.2.5 → modssc-0.3}/tests/preprocess/test_utils.py +0 -0
  609. {modssc-0.2.5/tests/transductive/operators → modssc-0.3/tests/sampling}/__init__.py +0 -0
  610. {modssc-0.2.5 → modssc-0.3}/tests/sampling/_stubs.py +0 -0
  611. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_api.py +0 -0
  612. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_api_cache_heuristic.py +0 -0
  613. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_api_complex.py +0 -0
  614. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_api_graph.py +0 -0
  615. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_api_inductive.py +0 -0
  616. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_fingerprint.py +0 -0
  617. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_imbalance.py +0 -0
  618. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_labeling.py +0 -0
  619. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_plan.py +0 -0
  620. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_result.py +0 -0
  621. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_result_properties.py +0 -0
  622. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_splitters.py +0 -0
  623. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_splitters_holdout.py +0 -0
  624. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_splitters_kfold.py +0 -0
  625. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_stats.py +0 -0
  626. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_storage.py +0 -0
  627. {modssc-0.2.5 → modssc-0.3}/tests/sampling/test_storage_roundtrip.py +0 -0
  628. {modssc-0.2.5/tests/transductive/solvers → modssc-0.3/tests/supervised}/__init__.py +0 -0
  629. {modssc-0.2.5/tests/views → modssc-0.3/tests/supervised/backends}/__init__.py +0 -0
  630. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/numpy/test_knn.py +0 -0
  631. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/sklearn/test_wrappers.py +0 -0
  632. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_audio_cnn.py +0 -0
  633. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_audio_cnn_scratch.py +0 -0
  634. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_audio_pretrained.py +0 -0
  635. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_graphsage_inductive.py +0 -0
  636. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_image_cnn.py +0 -0
  637. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_image_pretrained.py +0 -0
  638. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_knn.py +0 -0
  639. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_logreg.py +0 -0
  640. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_lstm_scratch.py +0 -0
  641. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_mlp.py +0 -0
  642. {modssc-0.2.5 → modssc-0.3}/tests/supervised/backends/torch/test_text_cnn.py +0 -0
  643. {modssc-0.2.5 → modssc-0.3}/tests/supervised/test_optional.py +0 -0
  644. {modssc-0.2.5 → modssc-0.3}/tests/supervised/test_registry_api.py +0 -0
  645. {modssc-0.2.5 → modssc-0.3}/tests/supervised/test_utils.py +0 -0
  646. {modssc-0.2.5 → modssc-0.3}/tests/test_device.py +0 -0
  647. {modssc-0.2.5 → modssc-0.3}/tests/test_imports.py +0 -0
  648. {modssc-0.2.5 → modssc-0.3}/tests/test_logging_config.py +0 -0
  649. {modssc-0.2.5 → modssc-0.3}/tests/transductive/adapters/test_pyg.py +0 -0
  650. {modssc-0.2.5 → modssc-0.3}/tests/transductive/backends/test_numpy_backend.py +0 -0
  651. {modssc-0.2.5 → modssc-0.3}/tests/transductive/backends/test_torch_backend.py +0 -0
  652. {modssc-0.2.5 → modssc-0.3}/tests/transductive/methods/classic/test_graph_mincuts.py +0 -0
  653. {modssc-0.2.5 → modssc-0.3}/tests/transductive/methods/classic/test_label_methods.py +0 -0
  654. {modssc-0.2.5 → modssc-0.3}/tests/transductive/methods/gnn/test_common.py +0 -0
  655. {modssc-0.2.5 → modssc-0.3}/tests/transductive/methods/gnn/test_gnn_components.py +0 -0
  656. {modssc-0.2.5 → modssc-0.3}/tests/transductive/methods/gnn/test_methods.py +0 -0
  657. {modssc-0.2.5 → modssc-0.3}/tests/transductive/methods/pde/test_p_laplace_learning.py +0 -0
  658. {modssc-0.2.5 → modssc-0.3}/tests/transductive/methods/pde/test_poisson_learning.py +0 -0
  659. {modssc-0.2.5 → modssc-0.3}/tests/transductive/methods/pde/test_poisson_mbo.py +0 -0
  660. {modssc-0.2.5 → modssc-0.3}/tests/transductive/methods/test_tsvm.py +0 -0
  661. {modssc-0.2.5 → modssc-0.3}/tests/transductive/methods/test_utils.py +0 -0
  662. {modssc-0.2.5 → modssc-0.3}/tests/transductive/operators/test_clamp.py +0 -0
  663. {modssc-0.2.5 → modssc-0.3}/tests/transductive/operators/test_laplacian.py +0 -0
  664. {modssc-0.2.5 → modssc-0.3}/tests/transductive/operators/test_torch_wrappers.py +0 -0
  665. {modssc-0.2.5 → modssc-0.3}/tests/transductive/solvers/test_cg.py +0 -0
  666. {modssc-0.2.5 → modssc-0.3}/tests/transductive/solvers/test_fixed_point.py +0 -0
  667. {modssc-0.2.5 → modssc-0.3}/tests/transductive/test_cli_transductive.py +0 -0
  668. {modssc-0.2.5 → modssc-0.3}/tests/transductive/test_errors.py +0 -0
  669. {modssc-0.2.5 → modssc-0.3}/tests/transductive/test_registry.py +0 -0
  670. {modssc-0.2.5 → modssc-0.3}/tests/transductive/test_validation.py +0 -0
  671. {modssc-0.2.5 → modssc-0.3}/tests/views/test_api.py +0 -0
  672. {modssc-0.2.5 → 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,9 @@ 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
+
7
10
  ## 0.2.5
8
11
  - Added env var passthrough for dataset, preprocess, and runs cache directories in benchmarks.
9
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: modssc
3
- Version: 0.2.5
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
@@ -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.5`, 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
@@ -421,6 +421,6 @@ evaluation:
421
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>
422
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>
423
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>
424
- <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>
425
425
  </ol>
426
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.5"
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,6 +14,7 @@ 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
20
  CACHE_ROOT_ENV = "MODSSC_CACHE_ROOT"
@@ -123,15 +123,7 @@ def read_cached_manifest(layout: CacheLayout, fingerprint: str) -> Manifest:
123
123
 
124
124
 
125
125
  def atomic_write_text(path: Path, text: str) -> None:
126
- path.parent.mkdir(parents=True, exist_ok=True)
127
- with tempfile.NamedTemporaryFile(
128
- "w", delete=False, dir=str(path.parent), encoding="utf-8"
129
- ) as tmp:
130
- tmp.write(text)
131
- tmp.flush()
132
- os.fsync(tmp.fileno())
133
- tmp_path = Path(tmp.name)
134
- tmp_path.replace(path)
126
+ _atomic_write_text(path, text)
135
127
 
136
128
 
137
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:
@@ -0,0 +1,75 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ import numpy as np
6
+
7
+ from modssc.data_loader.types import Split
8
+
9
+
10
+ def normalize_filter(values: Any) -> list[Any] | None:
11
+ if values is None:
12
+ return None
13
+ if isinstance(values, (list, tuple, set, np.ndarray)):
14
+ return list(values)
15
+ return [values]
16
+
17
+
18
+ def apply_class_filter(
19
+ X: np.ndarray, y: np.ndarray, *, class_filter: list[Any] | None
20
+ ) -> tuple[np.ndarray, np.ndarray]:
21
+ if class_filter is None:
22
+ return X, y
23
+ mask = np.isin(y, np.asarray(class_filter))
24
+ return X[mask], y[mask]
25
+
26
+
27
+ def limit_samples(
28
+ X: np.ndarray, y: np.ndarray, *, max_samples: int | None, seed: int | None
29
+ ) -> tuple[np.ndarray, np.ndarray]:
30
+ if max_samples is None:
31
+ return X, y
32
+ n = int(y.shape[0])
33
+ max_n = int(max_samples)
34
+ if max_n <= 0 or n == 0:
35
+ return X[:0], y[:0]
36
+ take = min(n, max_n)
37
+ idx = np.arange(n, dtype=np.int64)
38
+ if seed is not None:
39
+ rng = np.random.default_rng(int(seed))
40
+ rng.shuffle(idx)
41
+ return X[idx[:take]], y[idx[:take]]
42
+
43
+
44
+ def apply_limits(
45
+ X: np.ndarray,
46
+ y: np.ndarray,
47
+ *,
48
+ class_filter: list[Any] | None,
49
+ max_samples: int | None,
50
+ seed: int | None,
51
+ ) -> tuple[np.ndarray, np.ndarray]:
52
+ X, y = apply_class_filter(X, y, class_filter=class_filter)
53
+ X, y = limit_samples(X, y, max_samples=max_samples, seed=seed)
54
+ return X, y
55
+
56
+
57
+ def apply_limits_to_split(
58
+ split: Split | None,
59
+ *,
60
+ class_filter: list[Any] | None,
61
+ max_samples: int | None,
62
+ seed: int | None,
63
+ ) -> Split | None:
64
+ if split is None:
65
+ return None
66
+ X = np.asarray(split.X)
67
+ y = np.asarray(split.y)
68
+ X, y = apply_limits(
69
+ X,
70
+ y,
71
+ class_filter=class_filter,
72
+ max_samples=max_samples,
73
+ seed=seed,
74
+ )
75
+ return Split(X=X, y=y)
@@ -8,68 +8,39 @@ import numpy as np
8
8
 
9
9
  from modssc.data_loader.optional import optional_import
10
10
  from modssc.data_loader.providers.base import BaseProvider
11
+ from modssc.data_loader.providers.common import (
12
+ apply_class_filter,
13
+ apply_limits_to_split,
14
+ limit_samples,
15
+ normalize_filter,
16
+ )
11
17
  from modssc.data_loader.types import DatasetIdentity, LoadedDataset, Split
12
18
  from modssc.data_loader.uri import ParsedURI
13
19
 
14
-
15
- def _split_ref(ref: str) -> tuple[str, str | None]:
16
- ref = ref.strip()
17
- if "/" in ref:
18
- name, cfg = ref.split("/", 1)
19
- name = name.strip()
20
- cfg = cfg.strip() or None
21
- return name, cfg
22
- return ref, None
23
-
24
-
25
- def _normalize_filter(values: Any) -> list[Any] | None:
26
- if values is None:
27
- return None
28
- if isinstance(values, (list, tuple, set, np.ndarray)):
29
- return list(values)
30
- return [values]
20
+ _apply_limits = apply_limits_to_split
21
+ _normalize_filter = normalize_filter
31
22
 
32
23
 
33
24
  def _apply_class_filter(
34
25
  X: np.ndarray, y: np.ndarray, *, class_filter: list[Any] | None
35
26
  ) -> tuple[np.ndarray, np.ndarray]:
36
- if class_filter is None:
37
- return X, y
38
- mask = np.isin(y, np.asarray(class_filter))
39
- return X[mask], y[mask]
27
+ return apply_class_filter(X, y, class_filter=class_filter)
40
28
 
41
29
 
42
30
  def _limit_samples(
43
31
  X: np.ndarray, y: np.ndarray, *, max_samples: int | None, seed: int | None
44
32
  ) -> tuple[np.ndarray, np.ndarray]:
45
- if max_samples is None:
46
- return X, y
47
- n = int(y.shape[0])
48
- max_n = int(max_samples)
49
- if max_n <= 0 or n == 0:
50
- return X[:0], y[:0]
51
- take = min(n, max_n)
52
- idx = np.arange(n, dtype=np.int64)
53
- if seed is not None:
54
- rng = np.random.default_rng(int(seed))
55
- rng.shuffle(idx)
56
- return X[idx[:take]], y[idx[:take]]
57
-
58
-
59
- def _apply_limits(
60
- split: Split | None,
61
- *,
62
- class_filter: list[Any] | None,
63
- max_samples: int | None,
64
- seed: int | None,
65
- ) -> Split | None:
66
- if split is None:
67
- return None
68
- X = np.asarray(split.X)
69
- y = np.asarray(split.y)
70
- X, y = _apply_class_filter(X, y, class_filter=class_filter)
71
- X, y = _limit_samples(X, y, max_samples=max_samples, seed=seed)
72
- return Split(X=X, y=y)
33
+ return limit_samples(X, y, max_samples=max_samples, seed=seed)
34
+
35
+
36
+ def _split_ref(ref: str) -> tuple[str, str | None]:
37
+ ref = ref.strip()
38
+ if "/" in ref:
39
+ name, cfg = ref.split("/", 1)
40
+ name = name.strip()
41
+ cfg = cfg.strip() or None
42
+ return name, cfg
43
+ return ref, None
73
44
 
74
45
 
75
46
  class HuggingFaceDatasetsProvider(BaseProvider):
@@ -8,9 +8,18 @@ import numpy as np
8
8
 
9
9
  from modssc.data_loader.optional import optional_import
10
10
  from modssc.data_loader.providers.base import BaseProvider
11
+ from modssc.data_loader.providers.common import (
12
+ apply_class_filter,
13
+ limit_samples,
14
+ normalize_filter,
15
+ )
11
16
  from modssc.data_loader.types import DatasetIdentity, LoadedDataset, Split
12
17
  from modssc.data_loader.uri import ParsedURI
13
18
 
19
+ _apply_class_filter = apply_class_filter
20
+ _limit_samples = limit_samples
21
+ _normalize_filter = normalize_filter
22
+
14
23
 
15
24
  def _parse_openml_ref(ref: str) -> dict[str, Any]:
16
25
  ref = ref.strip()
@@ -34,40 +43,6 @@ def _parse_openml_ref(ref: str) -> dict[str, Any]:
34
43
  return out
35
44
 
36
45
 
37
- def _normalize_filter(values: Any) -> list[Any] | None:
38
- if values is None:
39
- return None
40
- if isinstance(values, (list, tuple, set, np.ndarray)):
41
- return list(values)
42
- return [values]
43
-
44
-
45
- def _apply_class_filter(
46
- X: np.ndarray, y: np.ndarray, *, class_filter: list[Any] | None
47
- ) -> tuple[np.ndarray, np.ndarray]:
48
- if class_filter is None:
49
- return X, y
50
- mask = np.isin(y, np.asarray(class_filter))
51
- return X[mask], y[mask]
52
-
53
-
54
- def _limit_samples(
55
- X: np.ndarray, y: np.ndarray, *, max_samples: int | None, seed: int | None
56
- ) -> tuple[np.ndarray, np.ndarray]:
57
- if max_samples is None:
58
- return X, y
59
- n = int(y.shape[0])
60
- max_n = int(max_samples)
61
- if max_n <= 0 or n == 0:
62
- return X[:0], y[:0]
63
- take = min(n, max_n)
64
- idx = np.arange(n, dtype=np.int64)
65
- if seed is not None:
66
- rng = np.random.default_rng(int(seed))
67
- rng.shuffle(idx)
68
- return X[idx[:take]], y[idx[:take]]
69
-
70
-
71
46
  class OpenMLProvider(BaseProvider):
72
47
  name = "openml"
73
48
  required_extra = "openml"
@@ -9,6 +9,7 @@ import numpy as np
9
9
 
10
10
  from modssc.data_loader.optional import optional_import
11
11
  from modssc.data_loader.providers.base import BaseProvider
12
+ from modssc.data_loader.providers.common import normalize_filter as _normalize_filter
12
13
  from modssc.data_loader.types import DatasetIdentity, LoadedDataset, Split
13
14
  from modssc.data_loader.uri import ParsedURI
14
15
 
@@ -163,14 +164,6 @@ def _to_numpy(x: Any) -> np.ndarray:
163
164
  return np.asarray(obj)
164
165
 
165
166
 
166
- def _normalize_filter(values: Any) -> list[Any] | None:
167
- if values is None:
168
- return None
169
- if isinstance(values, (list, tuple, set, np.ndarray)):
170
- return list(values)
171
- return [values]
172
-
173
-
174
167
  def _pad_labels(y: np.ndarray, n_nodes: int) -> np.ndarray:
175
168
  if int(y.shape[0]) >= n_nodes:
176
169
  return y