mtlearn 1.2.2__tar.gz → 1.3.0__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 (507) hide show
  1. {mtlearn-1.2.2 → mtlearn-1.3.0}/.github/workflows/ci.yml +5 -1
  2. {mtlearn-1.2.2 → mtlearn-1.3.0}/PKG-INFO +1 -1
  3. mtlearn-1.3.0/docs/source/guides/datasets.md +482 -0
  4. mtlearn-1.3.0/docs/source/guides/patch-training-cache.md +411 -0
  5. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/__init__.py +3 -1
  6. mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_dataset_contracts.py +160 -0
  7. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/_explicit_pairs.py +34 -2
  8. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/_image_ops.py +18 -2
  9. mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_manifest_dataset.py +34 -0
  10. mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_pair_audit.py +135 -0
  11. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/_paired_image.py +94 -0
  12. mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_sample_ids.py +37 -0
  13. mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_split_ids.py +184 -0
  14. mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_split_manifest.py +293 -0
  15. mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_suffix_pairs.py +64 -0
  16. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_version.py +3 -3
  17. mtlearn-1.3.0/mtlearn/python/mtlearn/datasets.py +42 -0
  18. mtlearn-1.3.0/mtlearn/python/mtlearn/patches/__init__.py +19 -0
  19. mtlearn-1.3.0/mtlearn/python/mtlearn/patches/_geometry.py +229 -0
  20. mtlearn-1.3.0/mtlearn/python/mtlearn/patches/_reconstruction.py +62 -0
  21. mtlearn-1.3.0/mtlearn/python/mtlearn/training/__init__.py +5 -0
  22. mtlearn-1.3.0/mtlearn/python/mtlearn/training/_patch_backward.py +294 -0
  23. mtlearn-1.3.0/mtlearn/python/mtlearn/training/_patch_diagnostics.py +76 -0
  24. mtlearn-1.3.0/mtlearn/tests/python/test_dataset_pair_audit.py +176 -0
  25. mtlearn-1.3.0/mtlearn/tests/python/test_dataset_split_ids.py +121 -0
  26. mtlearn-1.3.0/mtlearn/tests/python/test_dataset_split_manifest.py +297 -0
  27. mtlearn-1.3.0/mtlearn/tests/python/test_patch_backward.py +325 -0
  28. mtlearn-1.3.0/mtlearn/tests/python/test_patch_cfp_integration.py +119 -0
  29. mtlearn-1.3.0/mtlearn/tests/python/test_patch_geometry.py +85 -0
  30. mtlearn-1.3.0/mtlearn/tests/python/test_patch_reconstruction.py +63 -0
  31. mtlearn-1.3.0/mtlearn/tests/python/test_suffix_paired_dataset.py +90 -0
  32. mtlearn-1.3.0/scripts/benchmarks/patch_backward.py +129 -0
  33. mtlearn-1.2.2/mtlearn/python/mtlearn/datasets.py +0 -21
  34. {mtlearn-1.2.2 → mtlearn-1.3.0}/.github/workflows/docs.yml +0 -0
  35. {mtlearn-1.2.2 → mtlearn-1.3.0}/.github/workflows/notebooks.yml +0 -0
  36. {mtlearn-1.2.2 → mtlearn-1.3.0}/.github/workflows/package.yml +0 -0
  37. {mtlearn-1.2.2 → mtlearn-1.3.0}/.github/workflows/release.yml +0 -0
  38. {mtlearn-1.2.2 → mtlearn-1.3.0}/CMakeLists.txt +0 -0
  39. {mtlearn-1.2.2 → mtlearn-1.3.0}/LICENSE +0 -0
  40. {mtlearn-1.2.2 → mtlearn-1.3.0}/Pipfile +0 -0
  41. {mtlearn-1.2.2 → mtlearn-1.3.0}/README.md +0 -0
  42. {mtlearn-1.2.2 → mtlearn-1.3.0}/cmake/mtlearnConfig.cmake.in +0 -0
  43. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/assets/cfp-class-architecture.svg +0 -0
  44. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/cfp-architecture.md +0 -0
  45. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/cfp-loss-design.md +0 -0
  46. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/cfp-regularization-design.md +0 -0
  47. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/cfp-score-constraint-design.md +0 -0
  48. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/cfp-scoring-design.md +0 -0
  49. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/development.md +0 -0
  50. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/installation.md +0 -0
  51. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/_static/.gitkeep +0 -0
  52. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/_templates/.gitkeep +0 -0
  53. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/cfp_preparation.rst +0 -0
  54. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/data.rst +0 -0
  55. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/datasets.rst +0 -0
  56. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/index.rst +0 -0
  57. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/layers.rst +0 -0
  58. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/morphology.rst +0 -0
  59. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/native.rst +0 -0
  60. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/concepts/attributes.md +0 -0
  61. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/concepts/morphology.md +0 -0
  62. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/conf.py +0 -0
  63. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/guides/custom-attributes-filter-specs.md +0 -0
  64. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/guides/getting-started.md +0 -0
  65. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/guides/index.md +0 -0
  66. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/guides/morphology.md +0 -0
  67. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/guides/pytorch-integration.md +0 -0
  68. {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/index.md +0 -0
  69. {mtlearn-1.2.2 → mtlearn-1.3.0}/environment.yml +0 -0
  70. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/.clang-format +0 -0
  71. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/.editorconfig +0 -0
  72. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/.gitattributes +0 -0
  73. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/CMakeLists.txt +0 -0
  74. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/LICENSE +0 -0
  75. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/README.md +0 -0
  76. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/CMakeLists.txt +0 -0
  77. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/README.md +0 -0
  78. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/adjacency_iteration_benchmark.cpp +0 -0
  79. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/analyze_scientific_experiment.py +0 -0
  80. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/analyze_tree_construction_comparison.py +0 -0
  81. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/ApiBenchmark.hpp +0 -0
  82. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/AttributeScenarios.cpp +0 -0
  83. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/CasfScenarios.cpp +0 -0
  84. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/ConstructionScenarios.cpp +0 -0
  85. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/EditingScenarios.cpp +0 -0
  86. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/FilterScenarios.cpp +0 -0
  87. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/InteroperabilityScenarios.cpp +0 -0
  88. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/PipelineScenarios.cpp +0 -0
  89. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/WorkloadManifest.cpp +0 -0
  90. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/api_benchmark.cpp +0 -0
  91. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/build_tree_construction_report.py +0 -0
  92. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/compare_validation_modes.py +0 -0
  93. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/distance_transform_sensitivity.py +0 -0
  94. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/distance_transform_timing.py +0 -0
  95. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/min_max_residual_tree_benchmark.cpp +0 -0
  96. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/python_api_benchmark.py +0 -0
  97. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/scientific_pipeline_benchmark.cpp +0 -0
  98. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/analyze_results.py +0 -0
  99. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/bitquad_benchmark.cpp +0 -0
  100. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/bitquad_exactness_validation.cpp +0 -0
  101. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/correctness.csv +0 -0
  102. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/dataset-manifest.csv +0 -0
  103. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/experiment.json +0 -0
  104. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/raw-1080p.csv +0 -0
  105. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/raw-480p.csv +0 -0
  106. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/raw-720p.csv +0 -0
  107. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/run-1080p.log +0 -0
  108. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/run-480p.log +0 -0
  109. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/run-720p.log +0 -0
  110. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/speedups.csv +0 -0
  111. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/summary.csv +0 -0
  112. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/table.tex +0 -0
  113. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/run_experiment.py +0 -0
  114. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/summarize_scientific_campaign.py +0 -0
  115. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/support/ScientificBenchmark.hpp +0 -0
  116. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/support/stb_image_read.cpp +0 -0
  117. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/tree_construction_comparison_benchmark.cpp +0 -0
  118. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/tree_validation_benchmark.cpp +0 -0
  119. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/validation-sensitive.md +0 -0
  120. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/validation_sensitive_algorithms_benchmark.cpp +0 -0
  121. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/workloads/distance-transform-contract.ini +0 -0
  122. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/workloads/scientific-api.ini +0 -0
  123. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/cmake/mmcfiltersConfig.cmake.in +0 -0
  124. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/cmake/mmcfiltersPublicHeaders.cmake +0 -0
  125. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/CMakeLists.txt +0 -0
  126. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/AttributeComputation.hpp +0 -0
  127. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/AttributeNames.hpp +0 -0
  128. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/AttributeRegistry.hpp +0 -0
  129. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/AttributeResultTypes.hpp +0 -0
  130. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/AttributeTypes.hpp +0 -0
  131. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/Attributes.hpp +0 -0
  132. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/AreaComputer.hpp +0 -0
  133. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/AttributeComputerDomain.hpp +0 -0
  134. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/AttributeComputerFamily.hpp +0 -0
  135. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/AttributeComputerRegistry.hpp +0 -0
  136. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/BitquadAttributeComputer.hpp +0 -0
  137. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/BoundingBoxComputer.hpp +0 -0
  138. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/ContourSideAttributeComputer.hpp +0 -0
  139. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/FilledShapeAttributeComputer.hpp +0 -0
  140. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/GrayLevelStatsComputer.hpp +0 -0
  141. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/MaxDistComputer.hpp +0 -0
  142. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/MaxDistExactComputer.hpp +0 -0
  143. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/MomentBasedAttributeComputer.hpp +0 -0
  144. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/TreeTopologyComputer.hpp +0 -0
  145. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/VolumeComputer.hpp +0 -0
  146. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/BitquadAttributeData.hpp +0 -0
  147. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/BitquadAttributeProjection.hpp +0 -0
  148. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/BitquadConnectivityPolicy.hpp +0 -0
  149. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/BitquadFiniteWindowComputation.hpp +0 -0
  150. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/ContourSideAttributeData.hpp +0 -0
  151. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/ContourSideAttributeMaterialization.hpp +0 -0
  152. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/ContourSideFiniteWindowComputation.hpp +0 -0
  153. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/DistanceFieldHistogram.hpp +0 -0
  154. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/DistanceFieldMoments.hpp +0 -0
  155. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/DistanceWeightedSpatialMoments.hpp +0 -0
  156. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/ExactSquaredEuclideanDistanceTransform2D.hpp +0 -0
  157. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/MorphologicalTreeDistanceTransform.hpp +0 -0
  158. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/NodeContourSchedule.hpp +0 -0
  159. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/NodeDistanceFieldProvider.hpp +0 -0
  160. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/NodeSupportBoxIndex.hpp +0 -0
  161. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/AdaptiveSquaredEuclideanDIFT2D.hpp +0 -0
  162. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/DynamicDistanceFieldMoments2D.hpp +0 -0
  163. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/DynamicDistanceFieldStatistics2D.hpp +0 -0
  164. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/MorphologicalTreeApproximateDistanceTransform.hpp +0 -0
  165. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/MorphologicalTreePropagationEdgeIndex.hpp +0 -0
  166. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/MorphologicalTreeTopologicalLevelIndex.hpp +0 -0
  167. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/SquaredDistanceBucketQueue.hpp +0 -0
  168. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeCapabilityValidation.hpp +0 -0
  169. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeDependencyCache.hpp +0 -0
  170. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeFamilyScheduler.hpp +0 -0
  171. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeKernelSupport.hpp +0 -0
  172. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeNumericPolicy.hpp +0 -0
  173. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributePipeline.hpp +0 -0
  174. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeProjection.hpp +0 -0
  175. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeRequestUtils.hpp +0 -0
  176. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/NodeAttributeSampleMaterialization.hpp +0 -0
  177. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/TopologyAttributeBackend.hpp +0 -0
  178. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/ContourComputation.hpp +0 -0
  179. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/ContourTrace.hpp +0 -0
  180. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/ContourTraceComputation.hpp +0 -0
  181. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/ContourBoundaryTracer.hpp +0 -0
  182. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/ContourEdgeDeltaStore.hpp +0 -0
  183. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/ContourLifetimeIndex.hpp +0 -0
  184. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/ContourTraceTraversal.hpp +0 -0
  185. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/ContourTraversal.hpp +0 -0
  186. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/NodeSupportIndex.hpp +0 -0
  187. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/dataStructure/FastQueue.hpp +0 -0
  188. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/dataStructure/FastStack.hpp +0 -0
  189. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/AttributeFilters.hpp +0 -0
  190. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/AttributeReconstructionFilters.hpp +0 -0
  191. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/DepthStableRegionComputer.hpp +0 -0
  192. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/ExtinctionValues.hpp +0 -0
  193. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/MSERComputer.hpp +0 -0
  194. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/NodeDecisionMasks.hpp +0 -0
  195. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/NodePreservationStability.hpp +0 -0
  196. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/UltimateAttributeOpening.hpp +0 -0
  197. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/detail/VariationMeasure.hpp +0 -0
  198. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/detail/ViterbiDecision.hpp +0 -0
  199. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/localAttributes/ConnectedSubsetTreeLocalizer.hpp +0 -0
  200. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/localAttributes/FiniteWindowLocalAttributeComputer.hpp +0 -0
  201. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/localAttributes/FiniteWindowLocalEventCompiler.hpp +0 -0
  202. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/localAttributes/LocalEventModel.hpp +0 -0
  203. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/MorphologicalTree.hpp +0 -0
  204. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/MorphologicalTreeFactory.hpp +0 -0
  205. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/MorphologicalTreeSemantics.hpp +0 -0
  206. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/NativeHierarchy.hpp +0 -0
  207. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/ProperPartDomain.hpp +0 -0
  208. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/TreeAltitudeAlgorithms.hpp +0 -0
  209. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/TreeEditor.hpp +0 -0
  210. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/TreeOfShapesProducer.hpp +0 -0
  211. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/ValuedMorphologicalTree.hpp +0 -0
  212. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/ValuedMorphologicalTreeView.hpp +0 -0
  213. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/adjust/CasfComponentTrees.hpp +0 -0
  214. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/adjust/DualMinMaxTreeIncrementalFilter.hpp +0 -0
  215. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/adjust/DualMinMaxTreeIncrementalFilterLeaf.hpp +0 -0
  216. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/adjust/DynamicTreeAttributeComputer.hpp +0 -0
  217. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/CommittedTreeAccess.hpp +0 -0
  218. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/ComponentTreeProducerDetail.hpp +0 -0
  219. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/ComponentTreeUnionFind.hpp +0 -0
  220. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/HierarchyCapabilityValidation.hpp +0 -0
  221. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/HigraExportLayoutDetail.hpp +0 -0
  222. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/HigraHierarchyAdapterDetail.hpp +0 -0
  223. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/HigraImportLayoutDetail.hpp +0 -0
  224. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/MorphologicalTreeConstructionContextQueries.hpp +0 -0
  225. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/MorphologicalTreeConstructionTag.hpp +0 -0
  226. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/NativeHierarchyValidationDetail.hpp +0 -0
  227. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/TreeAttributeSamplingNeighborhood.hpp +0 -0
  228. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/TreeStabilityNeighborhood.hpp +0 -0
  229. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/TreeTraversalDetail.hpp +0 -0
  230. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/saliency/HierarchicalWatershedSaliency.hpp +0 -0
  231. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/saliency/HierarchySaliencyMap.hpp +0 -0
  232. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/saliency/HierarchySaliencyMapProjection.hpp +0 -0
  233. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/saliency/HierarchySaliencyMapValidation.hpp +0 -0
  234. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/saliency/ShapeSpaceSaliency.hpp +0 -0
  235. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/ResidualEvolution.hpp +0 -0
  236. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/ResidualTreeBuildStatistics.hpp +0 -0
  237. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/ResidualTreePolicies.hpp +0 -0
  238. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/SaturatedResidualTreeBuilder.hpp +0 -0
  239. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/UnrestrictedResidualTreeBuilder.hpp +0 -0
  240. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/FlatZonePartition.hpp +0 -0
  241. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeCandidateAgenda.hpp +0 -0
  242. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeCandidateContext.hpp +0 -0
  243. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeCandidatePreparation.hpp +0 -0
  244. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeCandidateTypes.hpp +0 -0
  245. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeEventAssembler.hpp +0 -0
  246. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeMaterialization.hpp +0 -0
  247. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeRegionTypes.hpp +0 -0
  248. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/SaturatedDynamicLca.hpp +0 -0
  249. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/SaturatedResidualEligibility.hpp +0 -0
  250. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/SynchronizedResidualTreeEvolution.hpp +0 -0
  251. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/Altitude.hpp +0 -0
  252. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/Assert.hpp +0 -0
  253. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/CommittedGridAccess.hpp +0 -0
  254. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/CommittedImageAccess.hpp +0 -0
  255. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/Common.hpp +0 -0
  256. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/Contract.hpp +0 -0
  257. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/GenerationStampSet.hpp +0 -0
  258. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/Image.hpp +0 -0
  259. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/RegularGridAdjacency2D.hpp +0 -0
  260. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/AdjustBindings.cpp +0 -0
  261. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/AttributeBindings.cpp +0 -0
  262. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/AttributeComputationBindings.hpp +0 -0
  263. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/AttributeFiltersPybind.hpp +0 -0
  264. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/AttributeReconstructionFiltersPybind.hpp +0 -0
  265. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/ContourBindings.cpp +0 -0
  266. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/ContourTraceBindings.cpp +0 -0
  267. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/DepthStableRegionComputerPybind.hpp +0 -0
  268. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/ExtinctionValuesPybind.hpp +0 -0
  269. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/FilterBindings.cpp +0 -0
  270. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/ModuleBindings.hpp +0 -0
  271. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/PybindConversions.hpp +0 -0
  272. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/PythonValuedMorphologicalTree.hpp +0 -0
  273. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/TreeBindings.cpp +0 -0
  274. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/UltimateAttributeOpeningPybind.hpp +0 -0
  275. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/UtilityBindings.cpp +0 -0
  276. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/scripts/execute_notebooks.py +0 -0
  277. {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/scripts/validate_notebooks.py +0 -0
  278. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/CMakeLists.txt +0 -0
  279. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/MtlearnModule.cpp +0 -0
  280. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/cfp/TreeTensorsBinding.hpp +0 -0
  281. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/cfp/TreeTraversalBinding.hpp +0 -0
  282. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/morphology/AttributeBinding.hpp +0 -0
  283. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/morphology/AttributeFiltersBinding.hpp +0 -0
  284. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/morphology/BindingSupport.hpp +0 -0
  285. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/morphology/WeightedTreeBinding.hpp +0 -0
  286. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/include/mtlearn/detail/morphology_backend.hpp +0 -0
  287. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/include/mtlearn/morphology.hpp +0 -0
  288. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_backends/__init__.py +0 -0
  289. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_backends/_mtlearn.py +0 -0
  290. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/__init__.py +0 -0
  291. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/_generated_target.py +0 -0
  292. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/_split.py +0 -0
  293. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_native.py +0 -0
  294. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/data.py +0 -0
  295. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/__init__.py +0 -0
  296. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/_helpers.py +0 -0
  297. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/__init__.py +0 -0
  298. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/component_registries.py +0 -0
  299. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/connected_filter_preprocessing_layer.py +0 -0
  300. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/constraints/__init__.py +0 -0
  301. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/constraints/base.py +0 -0
  302. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/constraints/preserve_root.py +0 -0
  303. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/normalization/__init__.py +0 -0
  304. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/normalization/attribute_normalizer.py +0 -0
  305. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/normalization/attribute_statistics.py +0 -0
  306. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/normalization/statistics_snapshot.py +0 -0
  307. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/normalization/stats_serializer.py +0 -0
  308. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/__init__.py +0 -0
  309. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_calibration_measurement.py +0 -0
  310. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_disk_preparation.py +0 -0
  311. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_identity.py +0 -0
  312. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_loader_memory.py +0 -0
  313. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_parallel_preparation.py +0 -0
  314. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_persistent_preparation.py +0 -0
  315. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_preparation_progress.py +0 -0
  316. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_prepared_reader.py +0 -0
  317. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_process_reader.py +0 -0
  318. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_read_diagnostics.py +0 -0
  319. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_reader_process.py +0 -0
  320. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_shared_batch.py +0 -0
  321. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_statistics_fitter.py +0 -0
  322. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_threaded_reader.py +0 -0
  323. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/calibration.py +0 -0
  324. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/cfp_preprocessor.py +0 -0
  325. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/dataset_cache.py +0 -0
  326. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/dataset_diagnostics.py +0 -0
  327. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/dataset_source.py +0 -0
  328. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/preparation_result.py +0 -0
  329. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/prepared_batch.py +0 -0
  330. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/prepared_dataloader.py +0 -0
  331. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/prepared_dataset.py +0 -0
  332. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/prepared_morphology.py +0 -0
  333. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/__init__.py +0 -0
  334. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/_tree_info.py +0 -0
  335. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/attribute_order_score_monotonicity.py +0 -0
  336. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/base.py +0 -0
  337. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/edge_score_monotonicity.py +0 -0
  338. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/path_score_monotonicity.py +0 -0
  339. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/__init__.py +0 -0
  340. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/_prepared_lifetime.py +0 -0
  341. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/batch_input.py +0 -0
  342. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/cache_input_contract.py +0 -0
  343. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/cached_dataloader_builder.py +0 -0
  344. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/context.py +0 -0
  345. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/forward_executor.py +0 -0
  346. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/implicit_jacobian_function.py +0 -0
  347. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/training_sample_inspector.py +0 -0
  348. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/tree_payload_cache.py +0 -0
  349. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/tree_payload_provider.py +0 -0
  350. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/tree_reconstructor.py +0 -0
  351. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/scoring/__init__.py +0 -0
  352. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/scoring/_layer_owned_linear_parameter_initializer.py +0 -0
  353. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/scoring/base.py +0 -0
  354. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/scoring/linear_sigmoid.py +0 -0
  355. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/scoring/mlp.py +0 -0
  356. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/serialization/__init__.py +0 -0
  357. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/serialization/config_deserializer.py +0 -0
  358. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/serialization/config_serializer.py +0 -0
  359. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/serialization/persistent_state_manager.py +0 -0
  360. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/__init__.py +0 -0
  361. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/feature_spec.py +0 -0
  362. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/filter_spec.py +0 -0
  363. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/filter_spec_normalizer.py +0 -0
  364. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/normalized_filter_spec.py +0 -0
  365. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/spec_registry.py +0 -0
  366. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/tree_spec.py +0 -0
  367. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/__init__.py +0 -0
  368. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_disk_format.py +0 -0
  369. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_manifest.py +0 -0
  370. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_manifest_inspection.py +0 -0
  371. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_read_validation.py +0 -0
  372. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_storages.py +0 -0
  373. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_writer_lock.py +0 -0
  374. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/disk_store.py +0 -0
  375. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/memory_store.py +0 -0
  376. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/null_store.py +0 -0
  377. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/checkpoint.py +0 -0
  378. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/morphology.py +0 -0
  379. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/src/CMakeLists.txt +0 -0
  380. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/src/mtlearn/cfp/tree_tensors.hpp +0 -0
  381. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/src/mtlearn/cfp/tree_traversal.hpp +0 -0
  382. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/src/mtlearn/morphology.cpp +0 -0
  383. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/CMakeLists.txt +0 -0
  384. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/cmake/installed_consumer_test.cmake +0 -0
  385. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/cpp/public_morphology.cpp +0 -0
  386. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/cpp/test_interpreter.cpp +0 -0
  387. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/_paired_dataset_reference.py +0 -0
  388. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/cfp_reference_names.py +0 -0
  389. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/README.md +0 -0
  390. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/baseline.pt +0 -0
  391. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/manifest.json +0 -0
  392. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_clipped_zscore01.pt +0 -0
  393. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_clipped_zscore01.stats.pt +0 -0
  394. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_minmax01.pt +0 -0
  395. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_minmax01.stats.pt +0 -0
  396. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_zscore.pt +0 -0
  397. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_zscore.stats.pt +0 -0
  398. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_none.pt +0 -0
  399. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_none.stats.pt +0 -0
  400. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_clipped_zscore01.pt +0 -0
  401. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_clipped_zscore01.stats.pt +0 -0
  402. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_minmax01.pt +0 -0
  403. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_minmax01.stats.pt +0 -0
  404. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_zscore.pt +0 -0
  405. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_zscore.stats.pt +0 -0
  406. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_none.pt +0 -0
  407. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_none.stats.pt +0 -0
  408. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/min-tree_linear_dataset_clipped_zscore01.pt +0 -0
  409. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/min-tree_linear_dataset_clipped_zscore01.stats.pt +0 -0
  410. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/min-tree_mlp_dataset_clipped_zscore01.pt +0 -0
  411. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/min-tree_mlp_dataset_clipped_zscore01.stats.pt +0 -0
  412. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/tree-of-shapes_linear_dataset_clipped_zscore01.pt +0 -0
  413. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/tree-of-shapes_linear_dataset_clipped_zscore01.stats.pt +0 -0
  414. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/tree-of-shapes_mlp_dataset_clipped_zscore01.pt +0 -0
  415. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/tree-of-shapes_mlp_dataset_clipped_zscore01.stats.pt +0 -0
  416. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/baseline.pt +0 -0
  417. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/manifest.json +0 -0
  418. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_linear_dataset_clipped_zscore01.pt +0 -0
  419. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_linear_dataset_clipped_zscore01.stats.pt +0 -0
  420. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_linear_dataset_minmax01.pt +0 -0
  421. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_linear_dataset_minmax01.stats.pt +0 -0
  422. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_linear_dataset_zscore.pt +0 -0
  423. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_linear_dataset_zscore.stats.pt +0 -0
  424. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_linear_none.pt +0 -0
  425. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_linear_none.stats.pt +0 -0
  426. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_mlp_dataset_clipped_zscore01.pt +0 -0
  427. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_mlp_dataset_clipped_zscore01.stats.pt +0 -0
  428. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_mlp_dataset_minmax01.pt +0 -0
  429. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_mlp_dataset_minmax01.stats.pt +0 -0
  430. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_mlp_dataset_zscore.pt +0 -0
  431. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_mlp_dataset_zscore.stats.pt +0 -0
  432. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_mlp_none.pt +0 -0
  433. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/max-tree_mlp_none.stats.pt +0 -0
  434. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/min-tree_linear_dataset_clipped_zscore01.pt +0 -0
  435. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/min-tree_linear_dataset_clipped_zscore01.stats.pt +0 -0
  436. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/min-tree_mlp_dataset_clipped_zscore01.pt +0 -0
  437. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/min-tree_mlp_dataset_clipped_zscore01.stats.pt +0 -0
  438. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/tree-of-shapes_linear_dataset_clipped_zscore01.pt +0 -0
  439. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/tree-of-shapes_linear_dataset_clipped_zscore01.stats.pt +0 -0
  440. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/tree-of-shapes_mlp_dataset_clipped_zscore01.pt +0 -0
  441. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/tree-of-shapes_mlp_dataset_clipped_zscore01.stats.pt +0 -0
  442. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p1/statistics.json +0 -0
  443. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p5/notebook_before_p5.json +0 -0
  444. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_linear_sigmoid_max-tree.pt +0 -0
  445. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_linear_sigmoid_min-tree.pt +0 -0
  446. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_linear_sigmoid_tree-of-shapes.pt +0 -0
  447. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_mlp_max-tree.pt +0 -0
  448. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_mlp_min-tree.pt +0 -0
  449. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_mlp_tree-of-shapes.pt +0 -0
  450. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/manifest.json +0 -0
  451. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_linear_sigmoid_max-tree.pt +0 -0
  452. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_linear_sigmoid_min-tree.pt +0 -0
  453. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_linear_sigmoid_tree-of-shapes.pt +0 -0
  454. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_mlp_max-tree.pt +0 -0
  455. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_mlp_min-tree.pt +0 -0
  456. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_mlp_tree-of-shapes.pt +0 -0
  457. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_bindings.py +0 -0
  458. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_cache.py +0 -0
  459. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_cache_baseline.py +0 -0
  460. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_cache_calibration.py +0 -0
  461. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_cache_compatibility.py +0 -0
  462. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_checkpoint_independence.py +0 -0
  463. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_components.py +0 -0
  464. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_dataset_cache.py +0 -0
  465. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_dataset_diagnostics.py +0 -0
  466. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_dataset_source.py +0 -0
  467. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_deterministic.py +0 -0
  468. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_disk_cache.py +0 -0
  469. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_disk_cache_e0.py +0 -0
  470. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_disk_cache_validation.py +0 -0
  471. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_disk_preparation_flow.py +0 -0
  472. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_jacobian_intervals.py +0 -0
  473. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_mps_reconstruction.py +0 -0
  474. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_notebook_cache_budget.py +0 -0
  475. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_notebook_streaming.py +0 -0
  476. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_parallel_preparation.py +0 -0
  477. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_preparation.py +0 -0
  478. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_prepared_dataloader.py +0 -0
  479. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_prepared_runtime.py +0 -0
  480. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_process_dataloader.py +0 -0
  481. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_uint32_pixel_map.py +0 -0
  482. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_validation.py +0 -0
  483. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_data.py +0 -0
  484. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_gradchecks.py +0 -0
  485. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_morphology_api.py +0 -0
  486. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_morphology_attribute_groups.py +0 -0
  487. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_morphology_bounding_box_width.py +0 -0
  488. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_morphology_gray_level.py +0 -0
  489. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_paired_dataset_characterization.py +0 -0
  490. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_reusable_paired_dataset.py +0 -0
  491. {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_version.py +0 -0
  492. {mtlearn-1.2.2 → mtlearn-1.3.0}/pyproject.toml +0 -0
  493. {mtlearn-1.2.2 → mtlearn-1.3.0}/requirements.txt +0 -0
  494. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p0.py +0 -0
  495. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p1.py +0 -0
  496. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p2.py +0 -0
  497. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p3.py +0 -0
  498. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p4.py +0 -0
  499. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p5.py +0 -0
  500. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p6.py +0 -0
  501. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p6_finalize.py +0 -0
  502. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_jacobian_intervals.py +0 -0
  503. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/download_data.py +0 -0
  504. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/install_release_dependencies.py +0 -0
  505. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/resolve_package_version.py +0 -0
  506. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/smoke_test_release.py +0 -0
  507. {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/validate_notebooks.py +0 -0
@@ -164,7 +164,11 @@ jobs:
164
164
  cd /tmp
165
165
  "${GITHUB_WORKSPACE}/${venv_python}" -m pytest -q \
166
166
  "${GITHUB_WORKSPACE}/mtlearn/tests/python/test_bindings.py" \
167
- "${GITHUB_WORKSPACE}/mtlearn/tests/python/test_cfp_deterministic.py"
167
+ "${GITHUB_WORKSPACE}/mtlearn/tests/python/test_cfp_deterministic.py" \
168
+ "${GITHUB_WORKSPACE}/mtlearn/tests/python/test_patch_geometry.py" \
169
+ "${GITHUB_WORKSPACE}/mtlearn/tests/python/test_patch_reconstruction.py" \
170
+ "${GITHUB_WORKSPACE}/mtlearn/tests/python/test_patch_backward.py" \
171
+ "${GITHUB_WORKSPACE}/mtlearn/tests/python/test_patch_cfp_integration.py"
168
172
  )
169
173
  tested_torch_versions+=("${torch_version}")
170
174
  echo "::endgroup::"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mtlearn
3
- Version: 1.2.2
3
+ Version: 1.3.0
4
4
  Summary: Morphological tree learning utilities with a stable morphology facade
5
5
  Author-Email: Wonder Alexandre Luz Alves <worderalexandre@gmail.com>
6
6
  License-Expression: GPL-3.0-only
@@ -0,0 +1,482 @@
1
+ ---
2
+ orphan: true
3
+ ---
4
+
5
+ # Image Datasets, Splits and Manifests
6
+
7
+ This guide uses `mtlearn.datasets` to pair images, define reproducible splits,
8
+ audit original files and reopen a saved selection. It also shows ordinary
9
+ PyTorch loading and integration with the prepared CFP cache. Run the Python
10
+ blocks in order with a build of MTLearn that includes `SplitManifest` and
11
+ `PairedImageDataset.from_suffixes`. The example uses CPU and creates six
12
+ synthetic image pairs under `artifacts/datasets-example`.
13
+
14
+ ## Choose a Dataset
15
+
16
+ | Entry point | Input organization | Sample identity |
17
+ | --- | --- | --- |
18
+ | `PairedImageDataset.from_suffixes` | One directory with literal prefixes and suffixes | Text between the declared filename parts |
19
+ | `PairedImageDataset.from_folders` | Separate input and target directories | Matching filename stems |
20
+ | `PairedImageDataset.from_pairs` | Explicit `(sample_id, input_path, target_path)` records | Supplied strings |
21
+ | `PairedImageDataset.from_manifest` | Saved `SplitManifest` and current root directories | Saved strings and order |
22
+ | `GeneratedTargetImageDataset` | Input images and a target-generating callable | Returned filename; supply IDs explicitly for split helpers |
23
+
24
+ The historical `PairedImageDataset(...)` constructor remains available. The
25
+ factories above provide explicit pair records, IDs and reconstructible reader
26
+ configuration. Import public APIs from `mtlearn.datasets`; internal modules are
27
+ implementation details.
28
+
29
+ Sample IDs identify dataset records. They are unrelated to tree node IDs or
30
+ pixel IDs. Groups identify acquisitions, subjects or other units that your
31
+ protocol must keep together. The library validates the supplied mapping and
32
+ does not infer the correct scientific grouping from filenames or pixels.
33
+
34
+ ## Create and Read Paired Images
35
+
36
+ ```python
37
+ from pathlib import Path
38
+ import shutil
39
+
40
+ import cv2
41
+ import numpy as np
42
+ import torch
43
+ from torch.utils.data import DataLoader
44
+
45
+ from mtlearn.datasets import (
46
+ GeneratedTargetImageDataset,
47
+ PairedImageDataset,
48
+ SplitManifest,
49
+ audit_image_pairs,
50
+ split_ids_by_group,
51
+ subsets_from_ids,
52
+ validate_split_ids,
53
+ )
54
+
55
+ run_path = Path("artifacts/datasets-example").resolve()
56
+ image_root = run_path / "pairs"
57
+ image_root.mkdir(parents=True, exist_ok=True)
58
+ groups = {
59
+ "01": "scene-a",
60
+ "1": "scene-a",
61
+ "scene-b-0": "scene-b",
62
+ "scene-b-1": "scene-b",
63
+ "scene-c-0": "scene-c",
64
+ "scene-c-1": "scene-c",
65
+ }
66
+ for index, sample_id in enumerate(groups):
67
+ grid = np.arange(16 * 20, dtype=np.uint16).reshape(16, 20)
68
+ image = ((grid + 19 * index) % 256).astype(np.uint8)
69
+ target = np.where(image >= 128, 255, 0).astype(np.uint8)
70
+ for suffix, array in (("_in", image), ("_target", target)):
71
+ if not cv2.imwrite(str(image_root / f"{sample_id}{suffix}.png"), array):
72
+ raise RuntimeError(f"Could not write {sample_id}{suffix}.png")
73
+
74
+ reader_options = {
75
+ "strict_grayscale_uint8": True,
76
+ "binary_target": True,
77
+ "dtype": torch.float32,
78
+ "scale_in": True,
79
+ "scale_out": True,
80
+ }
81
+ dataset = PairedImageDataset.from_suffixes(
82
+ image_root,
83
+ suffix_in="_in",
84
+ suffix_target="_target",
85
+ extensions=(".png",),
86
+ ordering="textual",
87
+ unmatched="error",
88
+ **reader_options,
89
+ )
90
+ image, target, sample_id = dataset[0]
91
+ assert image.shape == target.shape == (1, 16, 20)
92
+ assert image.dtype == target.dtype == torch.float32
93
+ assert set(torch.unique(target).tolist()) <= {0.0, 1.0}
94
+ print(dataset.sample_ids)
95
+ ```
96
+
97
+ IDs are nonempty, case-sensitive strings: `"01"` and `"1"` remain distinct.
98
+ The suffix factory scans direct files in textual order without reading pixels.
99
+ Prefixes and suffixes are literal filename fragments. Duplicate IDs within a
100
+ role and files matching both roles always fail. `unmatched="warn"` or
101
+ `"ignore"` can exclude incomplete pairs; inspect `missing_input_ids` and
102
+ `missing_target_ids`. Neither option resolves ambiguous pairs.
103
+
104
+ Items contain `(input_tensor, target_tensor, sample_id)`. Tensors have shapes
105
+ `(C, H, W)` and `(C_target, H, W)` on CPU. Indexing performs decoding and
106
+ transformation; it does not repeat the file audit. `records` exposes immutable
107
+ records with `sample_id`, `input_path` and `target_path`; `pairs` contains only
108
+ the two paths, without an ID field.
109
+
110
+ ### Select the Reading Policy
111
+
112
+ | Option | Effective behavior |
113
+ | --- | --- |
114
+ | `grayscale_in=True`, `grayscale_target=True` | Ordinary OpenCV grayscale decoding; False selects RGB decoding |
115
+ | `strict_grayscale_uint8=True` | Require native 2D uint8 arrays for both roles; grayscale flags must be True |
116
+ | `binary_target=True` | Require a native 2D uint8 target with values in either `{0, 1}` or `{0, 255}`; return zero/one values and bypass `scale_out` |
117
+ | `invert_in`, `invert_target` | Apply `255 - image` before resizing; default False |
118
+ | `num_rows`, `num_cols` | Supply both to resize; area interpolation for inputs and nearest interpolation for targets |
119
+ | `dtype` | Convert both tensors to this Torch dtype before scaling; default `torch.float32` |
120
+ | `scale_in`, `scale_out` | Divide converted values by 255; default True; integer tensors can promote to the default floating dtype |
121
+
122
+ Strict reading and binary targets are opt-in; the example enables both because
123
+ it generates uint8 binary masks. `binary_target=True` rejects
124
+ `invert_target=True`. For inverted 0/255 masks, use `binary_target=False`,
125
+ `invert_target=True` and `scale_out=True`, and validate binary values explicitly
126
+ in an audit callback. A 0/1 mask with ordinary reading and `scale_out=True`
127
+ would become zero and 1/255, so choose its scaling policy deliberately.
128
+
129
+ For RGB inputs, use `grayscale_in=False` and `strict_grayscale_uint8=False`.
130
+ Ordinary color decoding returns RGB and drops alpha channels. Ordinary
131
+ OpenCV reading converts images to uint8; setting the tensor dtype to float64
132
+ or uint16 does not restore precision discarded during decoding. For example,
133
+ a native uint16 PNG can be recorded as uint16 by an audit while the ordinary
134
+ reader decodes it to uint8. Input and target spatial sizes must match before
135
+ resizing in the explicit factories.
136
+
137
+ `dataset.get_preprocessing_contract()` describes actual reader operations for
138
+ both roles, including decoding, channel order, inversion, interpolation,
139
+ scaling, conversion `dtype` and effective `output_dtype`. Keep reader settings
140
+ fixed during an execution. The current factories describe deterministic image
141
+ reading; they do not serialize arbitrary augmentation callables.
142
+
143
+ ### Use Separate Folders or Explicit Records
144
+
145
+ The following creates a second organization of the same synthetic files and
146
+ reconstructs the same tensors using the other factories.
147
+
148
+ ```python
149
+ input_root = run_path / "inputs"
150
+ target_root = run_path / "targets"
151
+ input_root.mkdir(exist_ok=True)
152
+ target_root.mkdir(exist_ok=True)
153
+ for record in dataset.records:
154
+ shutil.copy2(record.input_path, input_root / f"{record.sample_id}.png")
155
+ shutil.copy2(record.target_path, target_root / f"{record.sample_id}.png")
156
+
157
+ folder_dataset = PairedImageDataset.from_folders(
158
+ input_root, target_root, extensions=(".png",),
159
+ ordering="textual", unmatched="error", **reader_options,
160
+ )
161
+ explicit_dataset = PairedImageDataset.from_pairs(
162
+ [(record.sample_id, record.input_path, record.target_path)
163
+ for record in dataset.records],
164
+ ordering="provided", **reader_options,
165
+ )
166
+ assert folder_dataset.sample_ids == explicit_dataset.sample_ids == dataset.sample_ids
167
+ ```
168
+
169
+ `from_pairs` preserves supplied order by default. Both it and `from_folders`
170
+ retain their historical `ordering="numeric"` option, which normalizes decimal
171
+ IDs: `"01"` and `"1"` then collide. Use textual or provided order when the
172
+ strings themselves define identity. The new suffix factory accepts only
173
+ textual order.
174
+
175
+ ## Split by IDs and Groups
176
+
177
+ Define splits before extracting patches. Images from one acquisition must not
178
+ cross splits when that acquisition is the unit of independence. Here all six
179
+ images belong to three groups, and each split receives one complete group.
180
+
181
+ ```python
182
+ split_ids = split_ids_by_group(
183
+ dataset.sample_ids,
184
+ groups,
185
+ group_counts={"train": 1, "validation": 1, "test": 1},
186
+ seed=42,
187
+ )
188
+ report = validate_split_ids(
189
+ dataset.sample_ids, split_ids, groups=groups, require_complete=True,
190
+ )
191
+ subsets = subsets_from_ids(
192
+ dataset, split_ids, groups=groups, require_complete=True,
193
+ )
194
+ assert report.sample_counts == {"train": 2, "validation": 2, "test": 2}
195
+ assert report.group_counts == {"train": 1, "validation": 1, "test": 1}
196
+ print(report.to_dict())
197
+
198
+ train_loader = DataLoader(subsets["train"], batch_size=2, shuffle=False, num_workers=0)
199
+ images, targets, batch_ids = next(iter(train_loader))
200
+ assert images.shape == targets.shape == (2, 1, 16, 20)
201
+ assert list(batch_ids) == split_ids["train"]
202
+ ```
203
+
204
+ You can supply your own `split_ids` mapping instead of generating it. Split
205
+ names are arbitrary nonempty strings. The validators preserve the supplied
206
+ order, reject duplicate or unknown IDs and reject groups that cross splits.
207
+ They use metadata without reading dataset items. Subsets retain the original
208
+ dataset and item type; nested subsets are supported.
209
+
210
+ `group_counts` counts groups, not images or percentages, and must assign all
211
+ available groups using positive integers. Group names are sorted textually
212
+ before a local `numpy.random.RandomState(seed)` permutation; mapping key order
213
+ assigns the groups to splits, and source order is retained within each group.
214
+ Global Python, NumPy and Torch RNG states are unchanged. Persist the resulting
215
+ IDs: the seed alone is insufficient to identify a selection.
216
+
217
+ | Validation policy | Default for split helpers | Meaning |
218
+ | --- | --- | --- |
219
+ | `require_complete` | False | When True, assign every source ID |
220
+ | `require_complete_groups` | True | Include every member of each selected group, relative to the supplied source universe |
221
+ | `allow_empty` | False | When True, individual splits can be empty; at least one must contain samples |
222
+ | `groups=None` | Grouping disabled | A supplied mapping must cover exactly the source IDs; `{}` does not disable grouping |
223
+
224
+ For a reduced execution that intentionally cuts a group, create a separate view
225
+ with an explicit partial-group policy. Keep the full selection for provenance.
226
+ Repeated source positions are invalid for partitioning by unique IDs; repeated
227
+ positions in a training sampler remain valid.
228
+
229
+ ```python
230
+ small_train = subsets_from_ids(
231
+ dataset,
232
+ {"quick_check": split_ids["train"][:1]},
233
+ groups=groups,
234
+ require_complete=False,
235
+ require_complete_groups=False,
236
+ )["quick_check"]
237
+ assert len(small_train) == 1
238
+ ```
239
+
240
+ ## Audit Original Files
241
+
242
+ An audit records streamed SHA-256 file hashes, native shapes and dtypes, and
243
+ optional consumer metadata. It decodes one pair at a time with
244
+ `cv2.IMREAD_UNCHANGED`. Callback arrays are read-only and precede inversion,
245
+ resize, tensor conversion and scaling. Native color arrays use BGR/BGRA;
246
+ ordinary reader tensors use RGB. The default audit verifies readability and
247
+ spatial agreement without imposing binary masks, uint8 or equal channel counts.
248
+
249
+ ```python
250
+ def validate_sample(record, input_array, target_array):
251
+ if target_array.ndim != 2 or target_array.dtype != np.uint8:
252
+ raise ValueError(f"Expected a 2D uint8 mask for {record.sample_id}")
253
+ values = np.unique(target_array)
254
+ if not set(values.tolist()) <= {0, 255}:
255
+ raise ValueError(f"Nonbinary mask for {record.sample_id}")
256
+ return {
257
+ "mask_values": [int(value) for value in values],
258
+ "original_zero_fraction": float(np.mean(target_array == 0)),
259
+ }
260
+
261
+ roots = {"input": image_root, "target": image_root}
262
+ audit = audit_image_pairs(dataset, roots=roots, validate_sample=validate_sample)
263
+ assert audit.sources["01"]["input"]["dtype"] == "uint8"
264
+ assert audit.sources["01"]["metadata"]["mask_values"] == [0, 255]
265
+ assert audit.preprocessing == dataset.get_preprocessing_contract()
266
+ ```
267
+
268
+ Return None or a JSON dictionary with string keys and finite numeric values.
269
+ Convert NumPy scalars to Python values, as above. Raise an exception to reject
270
+ a sample. Do not mutate files or reader settings, retain arrays, or use the
271
+ callback to transform samples. Metadata is stored under `sources[id]["metadata"]`
272
+ and does not overwrite required fields.
273
+
274
+ For separate input and target directories, pass their respective roots. Every
275
+ source must resolve within its named root, including through symbolic links.
276
+ The audit detects ordinary file changes during inspection and rechecks file
277
+ signatures when used to create a manifest. It does not lock the source directory;
278
+ repeat validation when files may have changed.
279
+
280
+ ## Save, Verify and Relocate a Manifest
281
+
282
+ ```python
283
+ manifest = SplitManifest.from_audit(
284
+ audit, split_ids, groups=groups,
285
+ provenance={"split_seed": 42, "split_algorithm": "numpy.RandomState"},
286
+ )
287
+ manifest_path = run_path / "selection.json"
288
+ manifest.save(manifest_path)
289
+
290
+ restored = SplitManifest.load(manifest_path)
291
+ assert restored.to_dict() == manifest.to_dict()
292
+ assert restored.validate_files(roots=roots)["valid"]
293
+ assert restored.validate_preprocessing(dataset)["valid"]
294
+
295
+ relocated_root = run_path / "relocated-pairs"
296
+ shutil.copytree(image_root, relocated_root, dirs_exist_ok=True)
297
+ relocated_roots = {"input": relocated_root, "target": relocated_root}
298
+ assert restored.validate_files(roots=relocated_roots)["valid"]
299
+ train_dataset = PairedImageDataset.from_manifest(
300
+ manifest_path,
301
+ roots=relocated_roots,
302
+ split="train",
303
+ expected_fingerprint=restored.fingerprint(),
304
+ )
305
+ assert list(train_dataset.sample_ids) == split_ids["train"]
306
+ assert restored.validate_preprocessing(train_dataset)["valid"]
307
+ ```
308
+
309
+ `SplitManifest` uses `format="mtlearn.dataset-manifest"` and `schema_version=1`.
310
+ Construction and loading validate IDs, splits, groups, policies and reader
311
+ contracts. Properties and `to_dict()` return defensive copies. `from_audit`
312
+ requires complete coverage by default and derives preprocessing from the audited
313
+ reader; an optional `preprocessing=` mapping must match that contract exactly.
314
+ The parent directory must exist for `save`, which uses a unique temporary file
315
+ and atomic replacement.
316
+
317
+ File references are relative POSIX paths under named roots. Absolute paths,
318
+ Windows drive paths, `.` or `..` components and backslashes are rejected.
319
+ Resolving a reference rejects symbolic links that escape its root. Root
320
+ locations are supplied at execution time and can change without changing the
321
+ saved document or content fingerprints.
322
+
323
+ Loading a manifest does not read images. `validate_files` explicitly checks
324
+ existence and hashes; `raise_on_error=False` returns issues with sample IDs and
325
+ roles. `validate_preprocessing` compares an explicit reader, its subset, or a
326
+ contract mapping. File hashes alone cannot detect a changed inversion or resize
327
+ policy. Readers that scale integer tensors also depend on Torch's default
328
+ floating dtype, which must agree with the saved effective dtype.
329
+
330
+ `from_manifest` resolves only the saved records, uses the saved reader settings
331
+ and checks the expected manifest fingerprint when supplied. It checks file
332
+ existence and containment, without rehashing images. New unrelated files in the
333
+ directory do not enter the selection. A selected split must be nonempty; use
334
+ `subsets_from_ids(..., allow_empty=True)` for empty views. The manifest and source
335
+ files must remain available and unchanged while workers use them.
336
+
337
+ ## Distinguish Content, Selection and Preprocessing
338
+
339
+ ```python
340
+ identities = restored.fingerprints()
341
+ train_identities = restored.fingerprints(split="train")
342
+ print(train_identities)
343
+ ```
344
+
345
+ | Fingerprint kind | Recorded meaning |
346
+ | --- | --- |
347
+ | `input` | Sorted `(sample_id, original input file SHA-256)` pairs |
348
+ | `target` | Sorted `(sample_id, original target file SHA-256)` pairs |
349
+ | `splits` | Ordered split membership, groups and policies |
350
+ | `preprocessing_input` | Effective input reader operations |
351
+ | `preprocessing_target` | Effective target reader operations |
352
+ | `manifest` | Full validated document excluding provenance, including relative paths and audit metadata |
353
+
354
+ A split-scoped fingerprint excludes sources and groups from other splits.
355
+ Preprocessing is shared by all splits. Reordering a split changes its selection
356
+ identity without changing its input content fingerprint. JSON map order and
357
+ formatting do not affect fingerprints; list order does. Provenance is excluded.
358
+
359
+ These file hashes differ from `DatasetSource.target_fingerprint()`, which reads
360
+ and hashes the effective target tensors, and from the cache's identity of input
361
+ pixels and morphological preparation. Recoding a file can change its byte hash
362
+ without changing its decoded pixels. A label-only change affects target
363
+ identity; it need not invalidate input morphology. Keep these components
364
+ separate when identifying experiments and caches.
365
+
366
+ ## Prepare and Read a CFP Cache
367
+
368
+ Use `DatasetSource.from_paired_dataset` to adapt paired items to `(input, target)`
369
+ while retaining IDs separately. Creating the source directly from a named
370
+ manifest split gives workers a compact manifest reference; arbitrary large
371
+ Subset index lists or explicit pair lists can exceed the descriptor budget.
372
+ Audit and verify files before opening the cache.
373
+
374
+ ```python
375
+ from mtlearn import morphology
376
+ from mtlearn.layers import ConnectedFilterPreprocessingLayer
377
+ from mtlearn.layers.cfp import (
378
+ CFPPreprocessor,
379
+ DatasetCacheConfig,
380
+ DatasetSource,
381
+ open_dataset_cache,
382
+ prepare_dataset_cache,
383
+ )
384
+
385
+ source = DatasetSource.from_paired_dataset(train_dataset)
386
+ cfp = ConnectedFilterPreprocessingLayer(
387
+ in_channels=1,
388
+ filter_specs=[{
389
+ "tree_type": "max-tree",
390
+ "attributes": [morphology.AttributeType.AREA],
391
+ }],
392
+ scale_mode="dataset_clipped_zscore01",
393
+ device="cpu",
394
+ )
395
+ cache_name = "train-" + "-".join(
396
+ train_identities[kind][:12]
397
+ for kind in ("splits", "input", "preprocessing_input")
398
+ )
399
+ cache_config = DatasetCacheConfig.from_preprocessor(
400
+ CFPPreprocessor.from_layer(cfp),
401
+ path=run_path / "cache",
402
+ manifest=cache_name,
403
+ source_version=train_identities["input"],
404
+ preprocessing_version=train_identities["preprocessing_input"],
405
+ split="train",
406
+ )
407
+ preparation = prepare_dataset_cache(
408
+ cache_config, source,
409
+ max_disk_bytes=32 * 1024**2,
410
+ collect_stats=cfp.get_statistics_contract(),
411
+ )
412
+ if preparation.status != "complete" or preparation.statistics is None:
413
+ raise RuntimeError(f"Preparation incomplete: {preparation.status}")
414
+
415
+ with open_dataset_cache(
416
+ cache_config, source, layer=cfp, statistics=preparation.statistics,
417
+ batch_size=1, num_workers=0,
418
+ ) as loader:
419
+ for prepared, target in loader:
420
+ response = cfp.forward_prepared(prepared)
421
+ assert response.shape == target.shape
422
+ ```
423
+
424
+ The CFP cache stores CPU morphological trees and raw node attributes. A max-tree
425
+ represents upper-level connected components; `AREA` measures each node's full
426
+ support in pixels. CFP computes learned scores and reconstructs responses during
427
+ forward execution. Targets continue to come from the source dataset.
428
+
429
+ Fit normalization statistics on the training selection and reuse them for
430
+ validation and test. Prepare evaluation caches with `split="evaluation"` and
431
+ without `collect_stats`; open them using the training statistics. Changing only
432
+ evaluation files does not change the training fingerprints used above.
433
+
434
+ The example's cache manifest name includes selection order, input content and
435
+ input preprocessing. It excludes target hashes and target preprocessing.
436
+ Keep the library's existing pixel/preparation identity for individual cache
437
+ entries: do not substitute the full dataset-manifest fingerprint as a tree key.
438
+ If tree or attribute requirements change incompatibly, choose a new cache
439
+ manifest or preparation path as well.
440
+
441
+ To enable prepared-reader processes, pass `num_workers=1` or `2` together with
442
+ explicit `worker_memory_bytes`, `max_prefetch_bytes`, `max_batch_bytes`,
443
+ `source_memory_bytes` and `read_workspace_bytes` budgets appropriate to the
444
+ images and trees. Check `loader.num_workers` and `loader.prefetch` to confirm the
445
+ requested mode is active. The manifest path and root locations must be accessible
446
+ from each process. In a script, place process-starting code under
447
+ `if __name__ == "__main__":`. Configuration serialization itself neither audits
448
+ files nor decodes images.
449
+
450
+ ## Generate Targets with a Callable
451
+
452
+ Use `GeneratedTargetImageDataset` when targets are deterministic computations
453
+ from source images. Its callback receives a copy of the decoded image after
454
+ input inversion and resize, before tensor conversion and scaling. It must
455
+ return a NumPy image of the same spatial size. Color input is RGB here, unlike
456
+ the native audit callback's BGR/BGRA arrays.
457
+
458
+ ```python
459
+ def threshold_target(image_array):
460
+ return np.where(image_array >= 128, 255, 0).astype(np.uint8)
461
+
462
+ generated = GeneratedTargetImageDataset(
463
+ input_root, target_fn=threshold_target,
464
+ extensions=(".png",), grayscale=True,
465
+ dtype=torch.float32, scale_in=True, scale_out=True,
466
+ )
467
+ generated_ids = [path.stem for path in sorted(input_root.glob("*.png"))]
468
+ generated_subsets = subsets_from_ids(
469
+ generated, split_ids, sample_ids=generated_ids,
470
+ groups=groups, require_complete=True,
471
+ )
472
+ image, target, filename = generated_subsets["train"][0]
473
+ assert image.shape == target.shape == (1, 16, 20)
474
+ assert filename.endswith(".png")
475
+ ```
476
+
477
+ Generated-target items return filenames and do not expose the explicit paired
478
+ reader's `sample_ids` contract; supply ordered IDs without iterating items to
479
+ infer them. Audit and manifest reconstruction in this guide require actual
480
+ input/target files and an explicit paired reader. To persist generated targets
481
+ in that format, materialize them as files and build explicit pairs. The caller
482
+ owns the target-generation configuration and its reproducibility.