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.
- {mtlearn-1.2.2 → mtlearn-1.3.0}/.github/workflows/ci.yml +5 -1
- {mtlearn-1.2.2 → mtlearn-1.3.0}/PKG-INFO +1 -1
- mtlearn-1.3.0/docs/source/guides/datasets.md +482 -0
- mtlearn-1.3.0/docs/source/guides/patch-training-cache.md +411 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/__init__.py +3 -1
- mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_dataset_contracts.py +160 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/_explicit_pairs.py +34 -2
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/_image_ops.py +18 -2
- mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_manifest_dataset.py +34 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_pair_audit.py +135 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/_paired_image.py +94 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_sample_ids.py +37 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_split_ids.py +184 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_split_manifest.py +293 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/_datasets/_suffix_pairs.py +64 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_version.py +3 -3
- mtlearn-1.3.0/mtlearn/python/mtlearn/datasets.py +42 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/patches/__init__.py +19 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/patches/_geometry.py +229 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/patches/_reconstruction.py +62 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/training/__init__.py +5 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/training/_patch_backward.py +294 -0
- mtlearn-1.3.0/mtlearn/python/mtlearn/training/_patch_diagnostics.py +76 -0
- mtlearn-1.3.0/mtlearn/tests/python/test_dataset_pair_audit.py +176 -0
- mtlearn-1.3.0/mtlearn/tests/python/test_dataset_split_ids.py +121 -0
- mtlearn-1.3.0/mtlearn/tests/python/test_dataset_split_manifest.py +297 -0
- mtlearn-1.3.0/mtlearn/tests/python/test_patch_backward.py +325 -0
- mtlearn-1.3.0/mtlearn/tests/python/test_patch_cfp_integration.py +119 -0
- mtlearn-1.3.0/mtlearn/tests/python/test_patch_geometry.py +85 -0
- mtlearn-1.3.0/mtlearn/tests/python/test_patch_reconstruction.py +63 -0
- mtlearn-1.3.0/mtlearn/tests/python/test_suffix_paired_dataset.py +90 -0
- mtlearn-1.3.0/scripts/benchmarks/patch_backward.py +129 -0
- mtlearn-1.2.2/mtlearn/python/mtlearn/datasets.py +0 -21
- {mtlearn-1.2.2 → mtlearn-1.3.0}/.github/workflows/docs.yml +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/.github/workflows/notebooks.yml +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/.github/workflows/package.yml +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/.github/workflows/release.yml +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/CMakeLists.txt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/LICENSE +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/Pipfile +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/README.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/cmake/mtlearnConfig.cmake.in +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/assets/cfp-class-architecture.svg +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/cfp-architecture.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/cfp-loss-design.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/cfp-regularization-design.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/cfp-score-constraint-design.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/cfp-scoring-design.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/development.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/installation.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/_static/.gitkeep +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/_templates/.gitkeep +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/cfp_preparation.rst +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/data.rst +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/datasets.rst +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/index.rst +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/layers.rst +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/morphology.rst +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/api/python/native.rst +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/concepts/attributes.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/concepts/morphology.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/conf.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/guides/custom-attributes-filter-specs.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/guides/getting-started.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/guides/index.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/guides/morphology.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/guides/pytorch-integration.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/docs/source/index.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/environment.yml +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/.clang-format +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/.editorconfig +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/.gitattributes +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/CMakeLists.txt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/LICENSE +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/README.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/CMakeLists.txt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/README.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/adjacency_iteration_benchmark.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/analyze_scientific_experiment.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/analyze_tree_construction_comparison.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/ApiBenchmark.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/AttributeScenarios.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/CasfScenarios.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/ConstructionScenarios.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/EditingScenarios.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/FilterScenarios.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/InteroperabilityScenarios.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/PipelineScenarios.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/WorkloadManifest.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/api/api_benchmark.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/build_tree_construction_report.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/compare_validation_modes.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/distance_transform_sensitivity.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/distance_transform_timing.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/min_max_residual_tree_benchmark.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/python_api_benchmark.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/scientific_pipeline_benchmark.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/analyze_results.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/bitquad_benchmark.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/bitquad_exactness_validation.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/correctness.csv +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/dataset-manifest.csv +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/experiment.json +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/raw-1080p.csv +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/raw-480p.csv +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/raw-720p.csv +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/run-1080p.log +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/run-480p.log +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/run-720p.log +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/speedups.csv +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/summary.csv +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/reference-results/table.tex +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/sibgrapi2026/run_experiment.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/summarize_scientific_campaign.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/support/ScientificBenchmark.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/support/stb_image_read.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/tree_construction_comparison_benchmark.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/tree_validation_benchmark.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/validation-sensitive.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/validation_sensitive_algorithms_benchmark.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/workloads/distance-transform-contract.ini +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/benchmarks/workloads/scientific-api.ini +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/cmake/mmcfiltersConfig.cmake.in +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/cmake/mmcfiltersPublicHeaders.cmake +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/CMakeLists.txt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/AttributeComputation.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/AttributeNames.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/AttributeRegistry.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/AttributeResultTypes.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/AttributeTypes.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/Attributes.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/AreaComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/AttributeComputerDomain.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/AttributeComputerFamily.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/AttributeComputerRegistry.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/BitquadAttributeComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/BoundingBoxComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/ContourSideAttributeComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/FilledShapeAttributeComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/GrayLevelStatsComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/MaxDistComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/MaxDistExactComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/MomentBasedAttributeComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/TreeTopologyComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/VolumeComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/BitquadAttributeData.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/BitquadAttributeProjection.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/BitquadConnectivityPolicy.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/BitquadFiniteWindowComputation.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/ContourSideAttributeData.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/ContourSideAttributeMaterialization.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/ContourSideFiniteWindowComputation.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/DistanceFieldHistogram.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/DistanceFieldMoments.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/DistanceWeightedSpatialMoments.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/ExactSquaredEuclideanDistanceTransform2D.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/MorphologicalTreeDistanceTransform.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/NodeContourSchedule.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/NodeDistanceFieldProvider.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform/NodeSupportBoxIndex.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/AdaptiveSquaredEuclideanDIFT2D.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/DynamicDistanceFieldMoments2D.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/DynamicDistanceFieldStatistics2D.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/MorphologicalTreeApproximateDistanceTransform.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/MorphologicalTreePropagationEdgeIndex.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/MorphologicalTreeTopologicalLevelIndex.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/computers/detail/distance_transform_approx/SquaredDistanceBucketQueue.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeCapabilityValidation.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeDependencyCache.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeFamilyScheduler.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeKernelSupport.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeNumericPolicy.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributePipeline.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeProjection.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/AttributeRequestUtils.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/NodeAttributeSampleMaterialization.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/attributes/detail/TopologyAttributeBackend.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/ContourComputation.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/ContourTrace.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/ContourTraceComputation.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/ContourBoundaryTracer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/ContourEdgeDeltaStore.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/ContourLifetimeIndex.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/ContourTraceTraversal.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/ContourTraversal.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/contours/detail/NodeSupportIndex.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/dataStructure/FastQueue.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/dataStructure/FastStack.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/AttributeFilters.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/AttributeReconstructionFilters.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/DepthStableRegionComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/ExtinctionValues.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/MSERComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/NodeDecisionMasks.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/NodePreservationStability.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/UltimateAttributeOpening.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/detail/VariationMeasure.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/filters/detail/ViterbiDecision.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/localAttributes/ConnectedSubsetTreeLocalizer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/localAttributes/FiniteWindowLocalAttributeComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/localAttributes/FiniteWindowLocalEventCompiler.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/localAttributes/LocalEventModel.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/MorphologicalTree.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/MorphologicalTreeFactory.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/MorphologicalTreeSemantics.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/NativeHierarchy.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/ProperPartDomain.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/TreeAltitudeAlgorithms.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/TreeEditor.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/TreeOfShapesProducer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/ValuedMorphologicalTree.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/ValuedMorphologicalTreeView.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/adjust/CasfComponentTrees.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/adjust/DualMinMaxTreeIncrementalFilter.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/adjust/DualMinMaxTreeIncrementalFilterLeaf.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/adjust/DynamicTreeAttributeComputer.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/CommittedTreeAccess.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/ComponentTreeProducerDetail.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/ComponentTreeUnionFind.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/HierarchyCapabilityValidation.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/HigraExportLayoutDetail.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/HigraHierarchyAdapterDetail.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/HigraImportLayoutDetail.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/MorphologicalTreeConstructionContextQueries.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/MorphologicalTreeConstructionTag.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/NativeHierarchyValidationDetail.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/TreeAttributeSamplingNeighborhood.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/TreeStabilityNeighborhood.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/detail/TreeTraversalDetail.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/saliency/HierarchicalWatershedSaliency.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/saliency/HierarchySaliencyMap.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/saliency/HierarchySaliencyMapProjection.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/saliency/HierarchySaliencyMapValidation.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/saliency/ShapeSpaceSaliency.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/ResidualEvolution.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/ResidualTreeBuildStatistics.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/ResidualTreePolicies.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/SaturatedResidualTreeBuilder.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/UnrestrictedResidualTreeBuilder.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/FlatZonePartition.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeCandidateAgenda.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeCandidateContext.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeCandidatePreparation.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeCandidateTypes.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeEventAssembler.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeMaterialization.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/ResidualTreeRegionTypes.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/SaturatedDynamicLca.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/SaturatedResidualEligibility.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/trees/sdrt/detail/SynchronizedResidualTreeEvolution.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/Altitude.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/Assert.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/CommittedGridAccess.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/CommittedImageAccess.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/Common.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/Contract.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/GenerationStampSet.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/Image.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/mmcfilters/utils/RegularGridAdjacency2D.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/AdjustBindings.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/AttributeBindings.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/AttributeComputationBindings.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/AttributeFiltersPybind.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/AttributeReconstructionFiltersPybind.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/ContourBindings.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/ContourTraceBindings.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/DepthStableRegionComputerPybind.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/ExtinctionValuesPybind.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/FilterBindings.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/ModuleBindings.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/PybindConversions.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/PythonValuedMorphologicalTree.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/TreeBindings.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/UltimateAttributeOpeningPybind.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/pybinds/UtilityBindings.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/scripts/execute_notebooks.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/external/mmcfilters/scripts/validate_notebooks.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/CMakeLists.txt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/MtlearnModule.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/cfp/TreeTensorsBinding.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/cfp/TreeTraversalBinding.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/morphology/AttributeBinding.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/morphology/AttributeFiltersBinding.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/morphology/BindingSupport.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/bindings/morphology/WeightedTreeBinding.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/include/mtlearn/detail/morphology_backend.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/include/mtlearn/morphology.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_backends/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_backends/_mtlearn.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/_generated_target.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_datasets/_split.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/_native.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/data.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/_helpers.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/component_registries.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/connected_filter_preprocessing_layer.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/constraints/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/constraints/base.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/constraints/preserve_root.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/normalization/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/normalization/attribute_normalizer.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/normalization/attribute_statistics.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/normalization/statistics_snapshot.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/normalization/stats_serializer.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_calibration_measurement.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_disk_preparation.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_identity.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_loader_memory.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_parallel_preparation.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_persistent_preparation.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_preparation_progress.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_prepared_reader.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_process_reader.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_read_diagnostics.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_reader_process.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_shared_batch.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_statistics_fitter.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/_threaded_reader.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/calibration.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/cfp_preprocessor.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/dataset_cache.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/dataset_diagnostics.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/dataset_source.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/preparation_result.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/prepared_batch.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/prepared_dataloader.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/prepared_dataset.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/preparation/prepared_morphology.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/_tree_info.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/attribute_order_score_monotonicity.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/base.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/edge_score_monotonicity.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/regularization/path_score_monotonicity.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/_prepared_lifetime.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/batch_input.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/cache_input_contract.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/cached_dataloader_builder.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/context.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/forward_executor.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/implicit_jacobian_function.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/training_sample_inspector.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/tree_payload_cache.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/tree_payload_provider.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/runtime/tree_reconstructor.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/scoring/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/scoring/_layer_owned_linear_parameter_initializer.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/scoring/base.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/scoring/linear_sigmoid.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/scoring/mlp.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/serialization/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/serialization/config_deserializer.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/serialization/config_serializer.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/serialization/persistent_state_manager.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/feature_spec.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/filter_spec.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/filter_spec_normalizer.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/normalized_filter_spec.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/spec_registry.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/specs/tree_spec.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/__init__.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_disk_format.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_manifest.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_manifest_inspection.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_read_validation.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_storages.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/_writer_lock.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/disk_store.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/memory_store.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/cfp/storage/null_store.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/layers/checkpoint.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/python/mtlearn/morphology.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/src/CMakeLists.txt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/src/mtlearn/cfp/tree_tensors.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/src/mtlearn/cfp/tree_traversal.hpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/src/mtlearn/morphology.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/CMakeLists.txt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/cmake/installed_consumer_test.cmake +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/cpp/public_morphology.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/cpp/test_interpreter.cpp +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/_paired_dataset_reference.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/cfp_reference_names.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/README.md +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/baseline.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/manifest.json +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_clipped_zscore01.pt +0 -0
- {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
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_minmax01.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_minmax01.stats.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_zscore.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_dataset_zscore.stats.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_none.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_linear_none.stats.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_clipped_zscore01.pt +0 -0
- {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
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_minmax01.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_minmax01.stats.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_zscore.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_dataset_zscore.stats.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_none.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/max-tree_mlp_none.stats.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/min-tree_linear_dataset_clipped_zscore01.pt +0 -0
- {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
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0/min-tree_mlp_dataset_clipped_zscore01.pt +0 -0
- {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
- {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
- {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
- {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
- {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
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/baseline.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p0_mmcfilters_v5_2_0/manifest.json +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p1/statistics.json +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_cache_p5/notebook_before_p5.json +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_linear_sigmoid_max-tree.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_linear_sigmoid_min-tree.pt +0 -0
- {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
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_mlp_max-tree.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_mlp_min-tree.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/legacy_mlp_tree-of-shapes.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/manifest.json +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_linear_sigmoid_max-tree.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_linear_sigmoid_min-tree.pt +0 -0
- {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
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_mlp_max-tree.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_mlp_min-tree.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/fixtures/cfp_disk_cache_e0/memory_mlp_tree-of-shapes.pt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_bindings.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_cache.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_cache_baseline.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_cache_calibration.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_cache_compatibility.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_checkpoint_independence.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_components.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_dataset_cache.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_dataset_diagnostics.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_dataset_source.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_deterministic.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_disk_cache.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_disk_cache_e0.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_disk_cache_validation.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_disk_preparation_flow.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_jacobian_intervals.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_mps_reconstruction.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_notebook_cache_budget.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_notebook_streaming.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_parallel_preparation.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_preparation.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_prepared_dataloader.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_prepared_runtime.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_process_dataloader.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_uint32_pixel_map.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_cfp_validation.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_data.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_gradchecks.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_morphology_api.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_morphology_attribute_groups.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_morphology_bounding_box_width.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_morphology_gray_level.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_paired_dataset_characterization.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_reusable_paired_dataset.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/mtlearn/tests/python/test_version.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/pyproject.toml +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/requirements.txt +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p0.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p1.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p2.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p3.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p4.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p5.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p6.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_cache_p6_finalize.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/benchmarks/cfp_jacobian_intervals.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/download_data.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/install_release_dependencies.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/resolve_package_version.py +0 -0
- {mtlearn-1.2.2 → mtlearn-1.3.0}/scripts/smoke_test_release.py +0 -0
- {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::"
|
|
@@ -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.
|