tabalyst 0.7.0__tar.gz → 0.7.2__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.
- {tabalyst-0.7.0/src/tabalyst.egg-info → tabalyst-0.7.2}/PKG-INFO +39 -2
- {tabalyst-0.7.0 → tabalyst-0.7.2}/README.md +38 -1
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/README.md +5 -5
- {tabalyst-0.7.0 → tabalyst-0.7.2}/pyproject.toml +6 -2
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/__init__.py +12 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cli/app.py +2 -0
- tabalyst-0.7.2/src/tabalyst/cli/dedup.py +410 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cli/report.py +13 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cli/terminal.py +8 -3
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/config.py +51 -5
- tabalyst-0.7.2/src/tabalyst/csv_records.py +287 -0
- tabalyst-0.7.2/src/tabalyst/dedup/__init__.py +9 -0
- tabalyst-0.7.2/src/tabalyst/dedup/analysis.py +244 -0
- tabalyst-0.7.2/src/tabalyst/dedup/batch_report.py +252 -0
- tabalyst-0.7.2/src/tabalyst/dedup/cache.py +268 -0
- tabalyst-0.7.2/src/tabalyst/dedup/calculation.py +14 -0
- tabalyst-0.7.2/src/tabalyst/dedup/count_only.py +321 -0
- tabalyst-0.7.2/src/tabalyst/dedup/discovery.py +251 -0
- tabalyst-0.7.2/src/tabalyst/dedup/diskstore.py +291 -0
- tabalyst-0.7.2/src/tabalyst/dedup/failures.py +79 -0
- tabalyst-0.7.2/src/tabalyst/dedup/groups.py +260 -0
- tabalyst-0.7.2/src/tabalyst/dedup/identity.py +49 -0
- tabalyst-0.7.2/src/tabalyst/dedup/pipeline.py +209 -0
- tabalyst-0.7.2/src/tabalyst/dedup/publish.py +120 -0
- tabalyst-0.7.2/src/tabalyst/dedup/report.py +599 -0
- tabalyst-0.7.2/src/tabalyst/dedup/settings.py +113 -0
- tabalyst-0.7.2/src/tabalyst/dedup/store.py +124 -0
- tabalyst-0.7.2/src/tabalyst/dedup/tiered.py +121 -0
- tabalyst-0.7.2/src/tabalyst/dedup/writer.py +249 -0
- tabalyst-0.7.2/src/tabalyst/dedup_service.py +487 -0
- tabalyst-0.7.2/src/tabalyst/identifier_uniqueness/__init__.py +33 -0
- tabalyst-0.7.2/src/tabalyst/identifier_uniqueness/facts.py +462 -0
- tabalyst-0.7.2/src/tabalyst/identifier_uniqueness/models.py +278 -0
- tabalyst-0.7.2/src/tabalyst/identifier_uniqueness/near_unique.py +59 -0
- tabalyst-0.7.2/src/tabalyst/identifier_uniqueness/proof.py +130 -0
- tabalyst-0.7.2/src/tabalyst/identifier_uniqueness/rule.py +396 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/models.py +2 -2
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_chain.py +5 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_classification.py +4 -4
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_column_page.py +12 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_deep.py +36 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_labels.py +99 -5
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_profile.py +15 -3
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_relations.py +3 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_service.py +17 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_summary.py +25 -5
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_table.py +7 -0
- tabalyst-0.7.2/src/tabalyst/report_uniqueness.py +350 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_views.py +6 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/reporting.py +4 -4
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/sampling.py +23 -81
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/classify/identifiers.py +3 -2
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/temporal.py +31 -1
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzer.py +30 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/__init__.py +6 -0
- tabalyst-0.7.2/src/tabalyst/scanner/planner/analyzers/analytical.py +91 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/common.py +4 -0
- tabalyst-0.7.2/src/tabalyst/scanner/planner/analyzers/copies.py +108 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/distinct.py +12 -2
- tabalyst-0.7.2/src/tabalyst/scanner/planner/analyzers/missing_copies.py +114 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/costmodel.py +29 -1
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/facts.py +161 -48
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/planner.py +50 -5
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/reasons.py +13 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/secondpass.py +6 -3
- tabalyst-0.7.2/src/tabalyst/scanner/secondpass/analytical.py +90 -0
- tabalyst-0.7.2/src/tabalyst/scanner/secondpass/copies.py +115 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/executor.py +110 -13
- tabalyst-0.7.2/src/tabalyst/scanner/secondpass/missing_copies.py +140 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/models.py +86 -1
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/routing.py +14 -0
- tabalyst-0.7.2/src/tabalyst/schemas/tabalyst.dedup.batch.schema.json +393 -0
- tabalyst-0.7.2/src/tabalyst/schemas/tabalyst.dedup.schema.json +714 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/schemas/tabalyst.report.schema.json +957 -4
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/schemas/tabalyst.scan.deep.schema.json +277 -2
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/service.py +48 -5
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/static/theme.css +19 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/summary_models.py +4 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/templates/column.html +26 -16
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/templates/report.html +20 -20
- {tabalyst-0.7.0 → tabalyst-0.7.2/src/tabalyst.egg-info}/PKG-INFO +39 -2
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst.egg-info/SOURCES.txt +37 -0
- tabalyst-0.7.2/tests/test_csv_records.py +218 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_public_api.py +27 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_sampling.py +60 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/LICENSE +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/MANIFEST.in +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/config.json +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/datasets/basic.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/datasets/insurance-customers.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/generate/README.md +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/generate/cohorts-anomalies/catalog.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/generate/cohorts-anomalies/dataset.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/generate/cohorts-anomalies/schemas/accounts.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/generate/cohorts-anomalies/schemas/contacts.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/generate/common-references/catalog.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/generate/common-references/dataset.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/generate/common-references/schemas/contacts.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/examples/generate/generate_examples.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/setup.cfg +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/__main__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/_version.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/batch.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cache_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cli/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cli/cache.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cli/confirm.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cli/generate.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cli/inspect.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cli/sample.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/cli/scan.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/deep_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/deep_store.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/errors.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/execution_log.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_anomalies.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_columns_package.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_computer.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_computer_output.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_csv.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_definition.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/SOURCES.md +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/catalog.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/brand.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/color.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/computer_type.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/computer_type_form_factor.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/computer_type_product_segment.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/cpu.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/cpu_memory_weight.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/cpu_operating_system.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/display.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/extended_specs.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/form_factor.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/generation_color.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/generation_cpu.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/generation_display.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/generation_gpu.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/generation_memory.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/generation_operating_system.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/generation_profile.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/generation_profile_computer_type.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/generation_profile_segment.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/generation_storage.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/gpu.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/gpu_display.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/gpu_memory_weight.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/gpu_storage_weight.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/memory.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/model_form_factor.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/model_generation.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/operating_system.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_category.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_family.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_family_computer_type.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_family_product_segment.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_model.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_segment.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_segment_brand.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_segment_display_weight.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_segment_memory_weight.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_segment_storage_weight.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/product_subcategory.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/profile_exclusions.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/promotion_status.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/promotion_type.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/seller.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/seller_type.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/shipping_availability.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/standard_specs.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/storage.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/data/warehouse.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/dataset.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/computer_type.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/computer_type_form_factor.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/computer_type_product_segment.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/computers.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/cpu.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/cpu_memory_weight.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/cpu_operating_system.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/display.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/extended_specs.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/generation_color.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/generation_cpu.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/generation_display.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/generation_gpu.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/generation_memory.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/generation_operating_system.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/generation_profile.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/generation_profile_computer_type.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/generation_profile_segment.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/generation_storage.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/gpu.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/gpu_display.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/gpu_memory_weight.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/gpu_storage_weight.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/localized.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/memory.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/model_form_factor.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/model_generation.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/operating_system.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/product_family.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/product_family_computer_type.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/product_family_product_segment.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/product_model.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/product_segment.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/product_segment_brand.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/product_segment_display_weight.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/product_segment_memory_weight.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/product_segment_storage_weight.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/product_subcategory.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/profile_exclusions.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/seller.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/standard_specs.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/storage.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/computer/schemas/warehouse.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/crm/catalog.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/crm/dataset.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/crm/schemas/accounts.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/crm/schemas/contacts.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/SOURCES.md +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/catalog.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/data/agencies.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/data/branch_contract_weights.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/data/claim_statuses.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/data/contract_statuses.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/data/contract_types.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/data/payment_frequencies.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/data/payment_methods.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/dataset.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/schemas/agencies.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/schemas/branch_contract_weights.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/schemas/claim_statuses.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/schemas/contract_statuses.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/schemas/contract_types.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/schemas/customers.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/schemas/payment_frequencies.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_examples/insurance/schemas/payment_methods.yaml +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_insurance.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_package.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_references.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/SOURCES.md +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/addresses/street_directions_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/addresses/street_names_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/addresses/street_types_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/addresses/unit_types_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/contact/email_patterns.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/contact/email_providers_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/contact/phone_area_codes_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/geography/cities_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/geography/postal_prefixes_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/geography/provinces_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/people/family_names_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/people/first_names_en_ca.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_resources/people/first_names_fr_qc.csv +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_selection.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/generate_values.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspect_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/choices.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/excel_inspect/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/excel_inspect/build.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/excel_inspect/detect.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/excel_inspect/parameters.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/json_inspect/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/json_inspect/build.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/json_inspect/detect.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/json_inspect/parameters.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/models.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/persistence.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/inspector/resolution.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/json_text.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/option_notices.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/plan_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/progress.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/project_open_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/project_scan_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_bounded_values.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_cache.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_codec.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_generation.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_locks.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_publication.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_queries.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_query_budget.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_recovery.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_retention.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_schema.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_session.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_staging.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_sync.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/_validation.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/catalog.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/freshness.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/identity.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/index.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/location.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/models.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/projects/store.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_config.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_details.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_finding_details.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_findings.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_insights.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_measures.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_overview.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_plan.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_preview.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_schema.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_sections.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/report_signals.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/result_model.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/sample_page.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/sampling_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scan_document.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scan_page.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scan_reuse.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scan_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/api.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/bottomk.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/cases.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/charactermap.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/characters.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/classify/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/classify/candidates.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/classify/catalog.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/classify/models.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/classify/names.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/classify/rules.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/config.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/convention_rule.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/correlation_ratio.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/crosstab.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/amount.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/base.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/boolean.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/currency.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/email.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/enumeration.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/ip.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/keys.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/names.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/number.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/pattern.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/percentage.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/phone.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/postal.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/quantity.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/registry.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/shape.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/url.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/detectors/uuid.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/diagnostics.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/engine.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/exposure.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/features.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/field.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/identity.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/lengthsample.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/longtext.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/measures.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/memory.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/models.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/normalization.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/observations.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/paths.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/pattern_eligibility.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/patternfacets.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/patterninfer.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/patterntree.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/pearson.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/characters.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/crosstab.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/date_order.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/drift.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/duplicates.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/forms.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/frequencies.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/histogram.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/lengths.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/matrix.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/measures.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/parts.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/patterns.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/pearson.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/residuals.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/shape.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/stats.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/structure.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/temporal.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/analyzers/texts.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/categorystats.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/crosstabs.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/identifiers.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/models.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/orders.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/registry.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/relations.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/render.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/samplerows.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/stratification.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/planner/stratmodels.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/process.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/quality.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/rankcorr.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/readers/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/readers/base.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/readers/csv_reader.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/readers/excel_common.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/readers/excel_reader.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/readers/excel_table.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/readers/factory.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/readers/json_common.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/readers/json_reader.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/readers/jsonl_reader.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/records.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/rowsample.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/schema.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/accumulators.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/bins.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/boundaries.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/characters.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/crosstab.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/document.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/drift.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/duplicates.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/exactset.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/forms.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/frequencies.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/matrix.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/measures.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/orders.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/parallel.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/parts.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/patternreader.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/patterns.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/pearson.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/periods.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/ranks.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/replay.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/residuals.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/schema.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/shape.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/stats.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/structure.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/secondpass/texts.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/__init__.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/bins.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/estimate.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/evaluate.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/execute.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/models.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/near.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/plan.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/reasons.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/render.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/result.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/select.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/targets.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/smart/weights.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/stratify.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/structure.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/technical.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/validation.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/values.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/valuesample.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/scanner/workers.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/schemas/tabalyst.sample.schema.json +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/schemas/tabalyst.scan.schema.json +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/shared_scan_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/smart_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/source_guard.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/static/report.js +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/templates/characters.html +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/templates/insights.html +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/templates/patterns.html +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst/templates/sample.html +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst.egg-info/dependency_links.txt +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst.egg-info/entry_points.txt +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst.egg-info/requires.txt +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/src/tabalyst.egg-info/top_level.txt +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_all_collections.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_cli.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_examples_index.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_examples_layout.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_anomalies.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_anomalies_regression.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_computer_catalog.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_computer_components.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_computer_derivations.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_computer_hierarchy.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_computer_output.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_computer_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_crm.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_crm_package.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_insurance.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_insurance_stress.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_lot4.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_package.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_references.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_generate_selection.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_json_text.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_license_headers.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_make_datasets.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_option_notices.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_cache.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_database.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_generations.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_identity.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_index.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_location.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_open_service.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_queries.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_rescan.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_scan.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_scan_model.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_sessions.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_project_store.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_report_contrast.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_reporting.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scan_command.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scanner_amounts.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scanner_batches.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scanner_config.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scanner_csv.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scanner_email_url.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scanner_exposure.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scanner_paths.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scanner_phone.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scanner_postal.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_scanner_uuid_ip.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_shared_scan_cli.py +0 -0
- {tabalyst-0.7.0 → tabalyst-0.7.2}/tests/test_source_freshness.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tabalyst
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.2
|
|
4
4
|
Summary: Open-source toolkit for understanding and working with unfamiliar data.
|
|
5
5
|
Author: Gregory Borelli
|
|
6
6
|
License-Expression: MPL-2.0
|
|
@@ -82,6 +82,7 @@ Update before each new test.
|
|
|
82
82
|
| [**Tabalyst Scan**](https://docs.tabalyst.com/scan/) | Profile datasets and generate JSON and HTML scan summaries |
|
|
83
83
|
| [**Tabalyst Inspect**](https://docs.tabalyst.com/inspect/) | Discover and configure JSON collections and Excel tables |
|
|
84
84
|
| [**Tabalyst Sample**](https://docs.tabalyst.com/sample/) | Create random, stratified and smart CSV samples |
|
|
85
|
+
| [**Tabalyst Dedup**](https://docs.tabalyst.com/dedup/) | Find the exact duplicate rows of CSV files and write the unique and repeated rows |
|
|
85
86
|
| [**Tabalyst Generate**](https://docs.tabalyst.com/generate/) | Generate synthetic CSV datasets for testing and demos |
|
|
86
87
|
|
|
87
88
|
## Tabalyst Report
|
|
@@ -145,6 +146,12 @@ Details: [Tabalyst Report](https://docs.tabalyst.com/report/),
|
|
|
145
146
|
- Dataset dimensions, missing cells, duplicates, and quality observations.
|
|
146
147
|
- A family and a type for each column (identifier, text, date, boolean...),
|
|
147
148
|
with the evidence behind them, and the technical type with its error rates.
|
|
149
|
+
- For an identifier column, whether the ID is unique across all rows and after
|
|
150
|
+
row deduplication: the repetitions that exact copies of whole rows explain
|
|
151
|
+
are told apart from those between distinct records, with the evidence (the
|
|
152
|
+
Scan, the second pass or a [Dedup](https://docs.tabalyst.com/dedup/) report),
|
|
153
|
+
the case of missing IDs, and a non-binding near-unique reading of the few
|
|
154
|
+
repetitions that remain.
|
|
148
155
|
- A summary table with one row per column: its type, a sentence about its
|
|
149
156
|
values, the missing share, its Errors and Issues with a preview of each, and
|
|
150
157
|
its details; above it, the Column quality and Signals cards.
|
|
@@ -235,6 +242,34 @@ estimate the population from it. Sampling reads records as a stream.
|
|
|
235
242
|
|
|
236
243
|
Details: [Tabalyst Sample](https://docs.tabalyst.com/sample/).
|
|
237
244
|
|
|
245
|
+
## Tabalyst Dedup
|
|
246
|
+
|
|
247
|
+
Find the rows that occur more than once in a CSV file, without modifying it:
|
|
248
|
+
|
|
249
|
+
```console
|
|
250
|
+
tabalyst dedup customers.csv
|
|
251
|
+
tabalyst dedup "*.csv" -d deduped
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Two rows are the same only when every cell is identical (case, spaces and
|
|
255
|
+
leading zeros count). Dedup writes, beside the source or in `-d`,
|
|
256
|
+
`customers.unique.csv` (every distinct row once, at its first place),
|
|
257
|
+
`customers.duplicates.csv` (each repeated row once) and, when a row occurs three
|
|
258
|
+
times or more, `customers.duplicates_all.csv` (every occurrence of the repeated
|
|
259
|
+
rows), plus `customers.dedup.json`, a report whose counts always add up. A file
|
|
260
|
+
without duplicate gets its report only. A batch also writes
|
|
261
|
+
`dedup.summary.json`; a file that is already processed and unchanged is skipped.
|
|
262
|
+
|
|
263
|
+
A result is exact or the file fails with a reason: the rows are kept in memory up
|
|
264
|
+
to a budget (`--memory-budget-mb`, 512 by default) and then on disk, a file may
|
|
265
|
+
hold 10,000,000 records by default (`--max-rows`), and nothing is ever
|
|
266
|
+
approximated. Dedup reads CSV files only and asks no question.
|
|
267
|
+
|
|
268
|
+
Details: [Tabalyst Dedup](https://docs.tabalyst.com/dedup/),
|
|
269
|
+
[batches and already processed files](https://docs.tabalyst.com/dedup/batch/),
|
|
270
|
+
[exactness, memory and limits](https://docs.tabalyst.com/dedup/limits/) and the
|
|
271
|
+
[`dedup` command reference](https://docs.tabalyst.com/reference/cli/dedup/).
|
|
272
|
+
|
|
238
273
|
## Tabalyst Generate
|
|
239
274
|
|
|
240
275
|
Generate synthetic CSV data from a packaged example (`crm`, `insurance` or
|
|
@@ -264,6 +299,7 @@ import tabalyst
|
|
|
264
299
|
result = tabalyst.analyze("customers.csv", "customers.html")
|
|
265
300
|
batch = tabalyst.generate_reports(["*.csv"], output_dir="reports")
|
|
266
301
|
sample = tabalyst.sample_csv("customers.csv", method="random", rows=1000, seed=42)
|
|
302
|
+
dedup = tabalyst.dedup_csv("customers.csv")
|
|
267
303
|
scan = tabalyst.scan("orders.json")
|
|
268
304
|
inspection = tabalyst.inspect("orders.json")
|
|
269
305
|
```
|
|
@@ -297,7 +333,8 @@ Generated JSON and HTML may contain source values and should be shared
|
|
|
297
333
|
accordingly.
|
|
298
334
|
|
|
299
335
|
Reports, samples, and scans read CSV, JSON and JSONL files as a stream, with
|
|
300
|
-
memory bounded by configurable limits
|
|
336
|
+
memory bounded by configurable limits; Dedup keeps the rows it has seen in memory
|
|
337
|
+
up to a budget, then on disk. An Excel workbook is read by sheet into
|
|
301
338
|
memory, and a sheet above 1 GiB of XML is refused. See
|
|
302
339
|
[limitations](https://docs.tabalyst.com/about/limitations/).
|
|
303
340
|
|
|
@@ -42,6 +42,7 @@ Update before each new test.
|
|
|
42
42
|
| [**Tabalyst Scan**](https://docs.tabalyst.com/scan/) | Profile datasets and generate JSON and HTML scan summaries |
|
|
43
43
|
| [**Tabalyst Inspect**](https://docs.tabalyst.com/inspect/) | Discover and configure JSON collections and Excel tables |
|
|
44
44
|
| [**Tabalyst Sample**](https://docs.tabalyst.com/sample/) | Create random, stratified and smart CSV samples |
|
|
45
|
+
| [**Tabalyst Dedup**](https://docs.tabalyst.com/dedup/) | Find the exact duplicate rows of CSV files and write the unique and repeated rows |
|
|
45
46
|
| [**Tabalyst Generate**](https://docs.tabalyst.com/generate/) | Generate synthetic CSV datasets for testing and demos |
|
|
46
47
|
|
|
47
48
|
## Tabalyst Report
|
|
@@ -105,6 +106,12 @@ Details: [Tabalyst Report](https://docs.tabalyst.com/report/),
|
|
|
105
106
|
- Dataset dimensions, missing cells, duplicates, and quality observations.
|
|
106
107
|
- A family and a type for each column (identifier, text, date, boolean...),
|
|
107
108
|
with the evidence behind them, and the technical type with its error rates.
|
|
109
|
+
- For an identifier column, whether the ID is unique across all rows and after
|
|
110
|
+
row deduplication: the repetitions that exact copies of whole rows explain
|
|
111
|
+
are told apart from those between distinct records, with the evidence (the
|
|
112
|
+
Scan, the second pass or a [Dedup](https://docs.tabalyst.com/dedup/) report),
|
|
113
|
+
the case of missing IDs, and a non-binding near-unique reading of the few
|
|
114
|
+
repetitions that remain.
|
|
108
115
|
- A summary table with one row per column: its type, a sentence about its
|
|
109
116
|
values, the missing share, its Errors and Issues with a preview of each, and
|
|
110
117
|
its details; above it, the Column quality and Signals cards.
|
|
@@ -195,6 +202,34 @@ estimate the population from it. Sampling reads records as a stream.
|
|
|
195
202
|
|
|
196
203
|
Details: [Tabalyst Sample](https://docs.tabalyst.com/sample/).
|
|
197
204
|
|
|
205
|
+
## Tabalyst Dedup
|
|
206
|
+
|
|
207
|
+
Find the rows that occur more than once in a CSV file, without modifying it:
|
|
208
|
+
|
|
209
|
+
```console
|
|
210
|
+
tabalyst dedup customers.csv
|
|
211
|
+
tabalyst dedup "*.csv" -d deduped
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Two rows are the same only when every cell is identical (case, spaces and
|
|
215
|
+
leading zeros count). Dedup writes, beside the source or in `-d`,
|
|
216
|
+
`customers.unique.csv` (every distinct row once, at its first place),
|
|
217
|
+
`customers.duplicates.csv` (each repeated row once) and, when a row occurs three
|
|
218
|
+
times or more, `customers.duplicates_all.csv` (every occurrence of the repeated
|
|
219
|
+
rows), plus `customers.dedup.json`, a report whose counts always add up. A file
|
|
220
|
+
without duplicate gets its report only. A batch also writes
|
|
221
|
+
`dedup.summary.json`; a file that is already processed and unchanged is skipped.
|
|
222
|
+
|
|
223
|
+
A result is exact or the file fails with a reason: the rows are kept in memory up
|
|
224
|
+
to a budget (`--memory-budget-mb`, 512 by default) and then on disk, a file may
|
|
225
|
+
hold 10,000,000 records by default (`--max-rows`), and nothing is ever
|
|
226
|
+
approximated. Dedup reads CSV files only and asks no question.
|
|
227
|
+
|
|
228
|
+
Details: [Tabalyst Dedup](https://docs.tabalyst.com/dedup/),
|
|
229
|
+
[batches and already processed files](https://docs.tabalyst.com/dedup/batch/),
|
|
230
|
+
[exactness, memory and limits](https://docs.tabalyst.com/dedup/limits/) and the
|
|
231
|
+
[`dedup` command reference](https://docs.tabalyst.com/reference/cli/dedup/).
|
|
232
|
+
|
|
198
233
|
## Tabalyst Generate
|
|
199
234
|
|
|
200
235
|
Generate synthetic CSV data from a packaged example (`crm`, `insurance` or
|
|
@@ -224,6 +259,7 @@ import tabalyst
|
|
|
224
259
|
result = tabalyst.analyze("customers.csv", "customers.html")
|
|
225
260
|
batch = tabalyst.generate_reports(["*.csv"], output_dir="reports")
|
|
226
261
|
sample = tabalyst.sample_csv("customers.csv", method="random", rows=1000, seed=42)
|
|
262
|
+
dedup = tabalyst.dedup_csv("customers.csv")
|
|
227
263
|
scan = tabalyst.scan("orders.json")
|
|
228
264
|
inspection = tabalyst.inspect("orders.json")
|
|
229
265
|
```
|
|
@@ -257,7 +293,8 @@ Generated JSON and HTML may contain source values and should be shared
|
|
|
257
293
|
accordingly.
|
|
258
294
|
|
|
259
295
|
Reports, samples, and scans read CSV, JSON and JSONL files as a stream, with
|
|
260
|
-
memory bounded by configurable limits
|
|
296
|
+
memory bounded by configurable limits; Dedup keeps the rows it has seen in memory
|
|
297
|
+
up to a budget, then on disk. An Excel workbook is read by sheet into
|
|
261
298
|
memory, and a sheet above 1 GiB of XML is refused. See
|
|
262
299
|
[limitations](https://docs.tabalyst.com/about/limitations/).
|
|
263
300
|
|
|
@@ -16,7 +16,7 @@ examples/
|
|
|
16
16
|
|-- showcase/ (what the website and the documentation publish, nothing else)
|
|
17
17
|
| |-- basic/
|
|
18
18
|
| |-- insurance-customers/ (report.html, report.json, scan.json; 100,000 rows)
|
|
19
|
-
| |-- insurance-customers
|
|
19
|
+
| |-- insurance-customers.scan/ (scan, second pass, smart plan and sample; 100,000 rows)
|
|
20
20
|
| |-- orders/
|
|
21
21
|
| |-- sales/
|
|
22
22
|
| `-- web-events/
|
|
@@ -67,7 +67,7 @@ fails when it is stale; `regenerate.py` runs it), so it never drifts.
|
|
|
67
67
|
| --- | --- | --- | --- |
|
|
68
68
|
| `showcase/basic/` | `report` | no | `get-started/examples.md`, `reference/history.md` |
|
|
69
69
|
| `showcase/insurance-customers/` | `report` | yes | `get-started/examples.md` |
|
|
70
|
-
| `showcase/insurance-customers
|
|
70
|
+
| `showcase/insurance-customers.scan/` | `scan` | no | `get-started/simple-clear-smart.md` |
|
|
71
71
|
| `showcase/orders/` | `report` | yes | `get-started/examples.md` |
|
|
72
72
|
| `showcase/sales/` | `report` | yes | `get-started/examples.md` |
|
|
73
73
|
| `showcase/web-events/` | `report` | yes | `get-started/examples.md` |
|
|
@@ -96,17 +96,17 @@ tabalyst report examples/datasets/web-events.jsonl -o examples/showcase/web-even
|
|
|
96
96
|
tabalyst report examples/datasets/sales.xlsx -o examples/showcase/sales/report.html
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
-
The folder `insurance-customers
|
|
99
|
+
The folder `insurance-customers.scan/` shows the three steps of Tabalyst Scan on
|
|
100
100
|
`insurance-customers-100k.csv`, the generated base of 100,000 rows (see "Simple, Clear and Smart" in the documentation):
|
|
101
101
|
the scan (Simple, with its web page, Clear), the second pass and the plan of a
|
|
102
102
|
smart sample (Smart), and the smart sample with its report and page. Its four steps
|
|
103
103
|
are in its `demo.json`:
|
|
104
104
|
|
|
105
105
|
```console
|
|
106
|
-
tabalyst scan {datasets}/insurance-customers-100k.csv -o examples/showcase/insurance-customers
|
|
106
|
+
tabalyst scan {datasets}/insurance-customers-100k.csv -o examples/showcase/insurance-customers.scan/insurance-customers.scan.json --config examples/config.json --deep --yes --force
|
|
107
107
|
tabalyst scan {datasets}/insurance-customers-100k.csv --config examples/config.json --deep --yes --force --no-html
|
|
108
108
|
tabalyst scan {datasets}/insurance-customers-100k.csv --plan --smart --sample-size 3000 --config examples/config.json
|
|
109
|
-
tabalyst sample {datasets}/insurance-customers-100k.csv --smart --rows 3000 --seed 42 -o examples/showcase/insurance-customers
|
|
109
|
+
tabalyst sample {datasets}/insurance-customers-100k.csv --smart --rows 3000 --seed 42 -o examples/showcase/insurance-customers.scan/insurance-customers.sample.csv --config examples/config.json --force
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
`make_datasets.py` generates the base (45 seconds, 27 MB, SHA-256 checked) and leaves it outside the
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tabalyst"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.2"
|
|
8
8
|
description = "Open-source toolkit for understanding and working with unfamiliar data."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -77,7 +77,11 @@ markers = [
|
|
|
77
77
|
"scan_json_lot(name): Scan and JSON work lot (plan 2026-10-06) that provides the tested behavior; lot 0 tests describe current behavior",
|
|
78
78
|
"report_lot(name): Report overview lot (plan 2026-10-16) that provides the tested behavior; skipped until the lot is enabled in tests/scan/report_gate.py",
|
|
79
79
|
"inspect_lot(name): Tabalyst Inspect implementation lot that provides the tested behavior",
|
|
80
|
-
"
|
|
80
|
+
"dedup_lot(name): Tabalyst Dedup implementation lot (plan 2026-10-22) that provides the tested behavior; skipped until the lot is enabled in tests/dedup/conftest.py",
|
|
81
|
+
"dedup_t(*ids): requirement tests (T01 to T30 of the Dedup specification) that the test covers",
|
|
82
|
+
"dedup_heavy: Dedup large-scale test, never run by default; select it with -m dedup_heavy",
|
|
83
|
+
"uid_lot(name): Unique ID plan (2026-10-23) lot that provides the tested behavior; skipped until the lot is enabled in tests/report/conftest.py",
|
|
84
|
+
"uid_t(*ids): requirement tests (T01 to T34 of the Unique ID specification) that the test covers",
|
|
81
85
|
"shipped_exposure_default: the test reads the shipped default of scan.exposure.sensitive_values (show), not the masking default the suite runs with",
|
|
82
86
|
]
|
|
83
87
|
|
|
@@ -16,6 +16,10 @@ from tabalyst.errors import ConfigurationError, InputError, ReportError, Tabalys
|
|
|
16
16
|
if TYPE_CHECKING:
|
|
17
17
|
from tabalyst.config import DeepSettings as DeepSettings
|
|
18
18
|
from tabalyst.config import PearsonSettings as PearsonSettings
|
|
19
|
+
from tabalyst.dedup_service import BatchDedupResult as BatchDedupResult
|
|
20
|
+
from tabalyst.dedup_service import DedupResult as DedupResult
|
|
21
|
+
from tabalyst.dedup_service import dedup_csv as dedup_csv
|
|
22
|
+
from tabalyst.dedup_service import generate_dedups as generate_dedups
|
|
19
23
|
from tabalyst.deep_service import execute_deep as execute_deep
|
|
20
24
|
from tabalyst.deep_service import generate_deep as generate_deep
|
|
21
25
|
from tabalyst.deep_service import prepare_deep as prepare_deep
|
|
@@ -76,6 +80,10 @@ _LAZY: dict[str, str] = {
|
|
|
76
80
|
"generate_deep": "tabalyst.deep_service",
|
|
77
81
|
"prepare_deep": "tabalyst.deep_service",
|
|
78
82
|
"ConfirmationRequired": "tabalyst.deep_store",
|
|
83
|
+
"BatchDedupResult": "tabalyst.dedup_service",
|
|
84
|
+
"DedupResult": "tabalyst.dedup_service",
|
|
85
|
+
"dedup_csv": "tabalyst.dedup_service",
|
|
86
|
+
"generate_dedups": "tabalyst.dedup_service",
|
|
79
87
|
"ComputerPlan": "tabalyst.generate_service",
|
|
80
88
|
"GeneratePlan": "tabalyst.generate_service",
|
|
81
89
|
"GenerateResult": "tabalyst.generate_service",
|
|
@@ -140,9 +148,11 @@ def __dir__() -> list[str]:
|
|
|
140
148
|
__all__ = [
|
|
141
149
|
"AnalysisPlan",
|
|
142
150
|
"AnalysisRequest",
|
|
151
|
+
"BatchDedupResult",
|
|
143
152
|
"ComputerPlan",
|
|
144
153
|
"ConfigurationError",
|
|
145
154
|
"ConfirmationRequired",
|
|
155
|
+
"DedupResult",
|
|
146
156
|
"DeepResult",
|
|
147
157
|
"DeepSettings",
|
|
148
158
|
"GeneratePlan",
|
|
@@ -166,9 +176,11 @@ __all__ = [
|
|
|
166
176
|
"__version__",
|
|
167
177
|
"analyze",
|
|
168
178
|
"build_generate_plan",
|
|
179
|
+
"dedup_csv",
|
|
169
180
|
"execute_deep",
|
|
170
181
|
"execute_smart_samples",
|
|
171
182
|
"generate_datasets",
|
|
183
|
+
"generate_dedups",
|
|
172
184
|
"generate_deep",
|
|
173
185
|
"generate_inspections",
|
|
174
186
|
"generate_plans",
|
|
@@ -10,6 +10,7 @@ import typer
|
|
|
10
10
|
|
|
11
11
|
from tabalyst import __version__
|
|
12
12
|
from tabalyst.cli.cache import cache_app
|
|
13
|
+
from tabalyst.cli.dedup import dedup_command
|
|
13
14
|
from tabalyst.cli.generate import generate_command
|
|
14
15
|
from tabalyst.cli.inspect import inspect_command
|
|
15
16
|
from tabalyst.cli.report import report_command
|
|
@@ -45,6 +46,7 @@ def root(
|
|
|
45
46
|
"""Understand, explore, clean, and validate structured data."""
|
|
46
47
|
|
|
47
48
|
|
|
49
|
+
app.command("dedup")(dedup_command)
|
|
48
50
|
app.command("inspect")(inspect_command)
|
|
49
51
|
app.command("generate")(generate_command)
|
|
50
52
|
app.command("report")(report_command)
|