tabalyst 0.7.5__tar.gz → 0.7.6__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.5/src/tabalyst.egg-info → tabalyst-0.7.6}/PKG-INFO +6 -4
- {tabalyst-0.7.5 → tabalyst-0.7.6}/README.md +5 -3
- {tabalyst-0.7.5 → tabalyst-0.7.6}/pyproject.toml +1 -1
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/report.py +4 -1
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/config.py +7 -3
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/models.py +3 -3
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_chain.py +1 -1
- tabalyst-0.7.6/src/tabalyst/report_charts.py +227 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_deep.py +17 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_insights.py +259 -34
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_labels.py +1 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_service.py +6 -1
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_views.py +16 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/reporting.py +52 -4
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzer.py +3 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/__init__.py +2 -1
- tabalyst-0.7.6/src/tabalyst/scanner/planner/analyzers/matrix.py +113 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/costmodel.py +10 -1
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/facts.py +20 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/planner.py +3 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/reasons.py +2 -1
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/secondpass.py +9 -2
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/executor.py +29 -2
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/matrix.py +149 -17
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/models.py +45 -1
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.report.schema.json +143 -4
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.scan.deep.schema.json +142 -3
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/service.py +84 -18
- tabalyst-0.7.6/src/tabalyst/static/charts.js +197 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/static/theme.css +15 -0
- tabalyst-0.7.6/src/tabalyst/templates/charts.html +89 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/column.html +2 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/insights.html +3 -2
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/report.html +4 -3
- {tabalyst-0.7.5 → tabalyst-0.7.6/src/tabalyst.egg-info}/PKG-INFO +6 -4
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst.egg-info/SOURCES.txt +3 -0
- tabalyst-0.7.5/src/tabalyst/scanner/planner/analyzers/matrix.py +0 -59
- {tabalyst-0.7.5 → tabalyst-0.7.6}/LICENSE +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/MANIFEST.in +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/README.md +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/config.json +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/datasets/basic.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/datasets/insurance-customers.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/README.md +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/cohorts-anomalies/catalog.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/cohorts-anomalies/dataset.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/cohorts-anomalies/schemas/accounts.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/cohorts-anomalies/schemas/contacts.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/common-references/catalog.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/common-references/dataset.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/common-references/schemas/contacts.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/examples/generate/generate_examples.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/setup.cfg +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/__main__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/_version.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/batch.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cache_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/app.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/cache.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/confirm.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/dedup.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/generate.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/inspect.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/sample.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/scan.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/cli/terminal.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/csv_records.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/analysis.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/batch_report.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/cache.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/calculation.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/count_only.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/discovery.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/diskstore.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/failures.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/groups.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/identity.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/pipeline.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/publish.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/report.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/settings.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/store.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/tiered.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup/writer.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/dedup_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/deep_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/deep_store.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/errors.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/execution_log.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_anomalies.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_columns_package.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_computer.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_computer_output.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_computer_parallel.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_csv.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_definition.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_draws.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/SOURCES.md +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/catalog.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/brand.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/color.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/computer_type.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/computer_type_form_factor.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/computer_type_product_segment.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/cpu.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/cpu_memory_weight.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/cpu_operating_system.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/display.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/extended_specs.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/form_factor.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_color.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_cpu.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_display.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_gpu.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_memory.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_operating_system.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_profile.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_profile_computer_type.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_profile_segment.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/generation_storage.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/gpu.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/gpu_display.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/gpu_memory_weight.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/gpu_storage_weight.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/memory.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/model_form_factor.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/model_generation.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/operating_system.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_category.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_family.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_family_computer_type.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_family_product_segment.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_model.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_segment.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_segment_brand.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_segment_display_weight.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_segment_memory_weight.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_segment_storage_weight.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/product_subcategory.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/profile_exclusions.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/promotion_status.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/promotion_type.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/seller.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/seller_type.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/shipping_availability.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/standard_specs.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/storage.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/data/warehouse.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/dataset.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/computer_type.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/computer_type_form_factor.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/computer_type_product_segment.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/computers.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/cpu.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/cpu_memory_weight.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/cpu_operating_system.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/display.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/extended_specs.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_color.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_cpu.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_display.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_gpu.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_memory.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_operating_system.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_profile.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_profile_computer_type.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_profile_segment.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/generation_storage.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/gpu.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/gpu_display.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/gpu_memory_weight.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/gpu_storage_weight.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/localized.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/memory.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/model_form_factor.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/model_generation.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/operating_system.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_family.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_family_computer_type.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_family_product_segment.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_model.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_segment.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_segment_brand.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_segment_display_weight.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_segment_memory_weight.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_segment_storage_weight.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/product_subcategory.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/profile_exclusions.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/seller.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/standard_specs.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/storage.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/computer/schemas/warehouse.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/crm/catalog.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/crm/dataset.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/crm/schemas/accounts.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/crm/schemas/contacts.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/SOURCES.md +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/catalog.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/agencies.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/branch_contract_weights.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/claim_statuses.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/contract_statuses.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/contract_types.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/payment_frequencies.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/data/payment_methods.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/dataset.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/agencies.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/branch_contract_weights.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/claim_statuses.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/contract_statuses.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/contract_types.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/customers.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/payment_frequencies.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_examples/insurance/schemas/payment_methods.yaml +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_insurance.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_package.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_references.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/SOURCES.md +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/addresses/street_directions_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/addresses/street_names_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/addresses/street_types_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/addresses/unit_types_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/contact/email_patterns.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/contact/email_providers_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/contact/phone_area_codes_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/geography/cities_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/geography/postal_prefixes_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/geography/provinces_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/people/family_names_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/people/first_names_en_ca.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_resources/people/first_names_fr_qc.csv +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_selection.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/generate_values.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/facts.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/models.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/near_unique.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/proof.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/identifier_uniqueness/rule.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspect_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/choices.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/excel_inspect/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/excel_inspect/build.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/excel_inspect/detect.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/excel_inspect/parameters.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/json_inspect/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/json_inspect/build.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/json_inspect/detect.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/json_inspect/parameters.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/models.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/persistence.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/inspector/resolution.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/json_text.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/option_notices.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/plan_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/progress.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/project_open_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/project_scan_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_bounded_values.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_cache.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_codec.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_generation.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_locks.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_publication.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_queries.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_query_budget.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_recovery.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_retention.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_schema.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_session.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_staging.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_sync.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/_validation.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/catalog.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/freshness.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/identity.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/index.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/location.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/models.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/projects/store.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_classification.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_column_page.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_config.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_details.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_finding_details.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_findings.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_measures.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_overview.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_plan.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_preview.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_profile.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_relations.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_schema.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_sections.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_signals.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_summary.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_table.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/report_uniqueness.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/result_model.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/sample_page.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/sampling.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/sampling_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scan_document.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scan_page.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scan_reuse.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scan_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/api.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/bottomk.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/cases.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/charactermap.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/characters.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/candidates.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/catalog.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/identifiers.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/models.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/names.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/classify/rules.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/config.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/convention_rule.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/correlation_ratio.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/crosstab.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/amount.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/base.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/boolean.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/currency.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/email.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/enumeration.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/ip.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/keys.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/names.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/number.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/pattern.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/percentage.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/phone.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/postal.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/quantity.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/registry.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/shape.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/temporal.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/url.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/detectors/uuid.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/diagnostics.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/engine.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/exposure.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/features.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/field.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/identity.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/lengthsample.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/longtext.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/measures.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/memory.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/models.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/normalization.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/observations.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/paths.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/pattern_eligibility.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/patternfacets.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/patterninfer.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/patterntree.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/pearson.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/analytical.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/characters.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/common.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/copies.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/crosstab.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/date_order.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/distinct.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/drift.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/duplicates.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/forms.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/frequencies.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/histogram.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/lengths.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/measures.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/missing_copies.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/parts.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/patterns.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/pearson.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/residuals.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/shape.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/stats.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/structure.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/temporal.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/analyzers/texts.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/categorystats.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/crosstabs.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/identifiers.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/models.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/orders.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/registry.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/relations.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/render.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/samplerows.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/stratification.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/planner/stratmodels.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/process.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/quality.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/rankcorr.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/base.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/csv_reader.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/excel_common.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/excel_reader.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/excel_table.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/factory.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/json_common.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/json_reader.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/readers/jsonl_reader.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/records.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/rowsample.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/schema.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/accumulators.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/analytical.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/bins.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/boundaries.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/characters.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/copies.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/crosstab.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/document.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/drift.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/duplicates.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/exactset.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/forms.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/frequencies.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/measures.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/missing_copies.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/orders.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/parallel.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/parts.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/patternreader.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/patterns.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/pearson.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/periods.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/ranks.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/replay.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/residuals.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/routing.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/schema.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/shape.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/stats.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/structure.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/secondpass/texts.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/__init__.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/bins.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/estimate.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/evaluate.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/execute.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/models.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/near.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/plan.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/reasons.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/render.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/result.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/select.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/targets.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/smart/weights.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/stratify.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/structure.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/technical.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/validation.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/values.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/valuesample.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/scanner/workers.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.dedup.batch.schema.json +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.dedup.schema.json +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.sample.schema.json +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/schemas/tabalyst.scan.schema.json +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/shared_scan_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/smart_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/source_guard.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/static/report.js +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/summary_models.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/characters.html +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/patterns.html +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst/templates/sample.html +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst.egg-info/dependency_links.txt +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst.egg-info/entry_points.txt +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst.egg-info/requires.txt +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/src/tabalyst.egg-info/top_level.txt +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_all_collections.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_cli.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_csv_records.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_examples_index.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_examples_layout.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_anomalies.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_anomalies_regression.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_catalog.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_components.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_derivations.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_hierarchy.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_output.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_parallel.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_computer_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_crm.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_crm_package.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_insurance.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_insurance_stress.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_lot4.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_package.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_references.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_generate_selection.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_json_text.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_license_headers.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_make_datasets.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_option_notices.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_cache.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_database.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_generations.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_identity.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_index.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_location.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_open_service.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_queries.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_rescan.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_scan.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_scan_model.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_sessions.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_project_store.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_public_api.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_report_contrast.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_reporting.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_sampling.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_sampling_stratified_balanced.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scan_command.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_amounts.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_batches.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_config.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_csv.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_email_url.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_exposure.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_paths.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_phone.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_postal.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_scanner_uuid_ip.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/tests/test_shared_scan_cli.py +0 -0
- {tabalyst-0.7.5 → tabalyst-0.7.6}/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.6
|
|
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
|
|
@@ -114,8 +114,9 @@ customers.json
|
|
|
114
114
|
executions.json
|
|
115
115
|
```
|
|
116
116
|
|
|
117
|
-
Add `--details` to
|
|
118
|
-
|
|
117
|
+
Add `--details` to write one HTML page per column and the chart pages, such as
|
|
118
|
+
the combinations of missing values (it also runs the second pass), and `-o` to
|
|
119
|
+
choose another HTML filename for one source:
|
|
119
120
|
|
|
120
121
|
```console
|
|
121
122
|
tabalyst report customers.csv --details
|
|
@@ -164,7 +165,8 @@ Details: [Tabalyst Report](https://docs.tabalyst.com/report/),
|
|
|
164
165
|
The report is built on Tabalyst Scan; values of sensitive columns can be masked
|
|
165
166
|
or hidden. Ambiguous dates stay
|
|
166
167
|
ambiguous; the report shows the evidence of the column without applying it. The
|
|
167
|
-
HTML report is self-contained and works without a CDN or network connection
|
|
168
|
+
HTML report is self-contained and works without a CDN or network connection;
|
|
169
|
+
only the chart pages of `--details` load Apache ECharts from a CDN to draw.
|
|
168
170
|
The JSON profile contains the same canonical analysis result for scripts and
|
|
169
171
|
future Tabalyst tools. See
|
|
170
172
|
[how to read the report](https://docs.tabalyst.com/report/read-report/).
|
|
@@ -74,8 +74,9 @@ customers.json
|
|
|
74
74
|
executions.json
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
Add `--details` to
|
|
78
|
-
|
|
77
|
+
Add `--details` to write one HTML page per column and the chart pages, such as
|
|
78
|
+
the combinations of missing values (it also runs the second pass), and `-o` to
|
|
79
|
+
choose another HTML filename for one source:
|
|
79
80
|
|
|
80
81
|
```console
|
|
81
82
|
tabalyst report customers.csv --details
|
|
@@ -124,7 +125,8 @@ Details: [Tabalyst Report](https://docs.tabalyst.com/report/),
|
|
|
124
125
|
The report is built on Tabalyst Scan; values of sensitive columns can be masked
|
|
125
126
|
or hidden. Ambiguous dates stay
|
|
126
127
|
ambiguous; the report shows the evidence of the column without applying it. The
|
|
127
|
-
HTML report is self-contained and works without a CDN or network connection
|
|
128
|
+
HTML report is self-contained and works without a CDN or network connection;
|
|
129
|
+
only the chart pages of `--details` load Apache ECharts from a CDN to draw.
|
|
128
130
|
The JSON profile contains the same canonical analysis result for scripts and
|
|
129
131
|
future Tabalyst tools. See
|
|
130
132
|
[how to read the report](https://docs.tabalyst.com/report/read-report/).
|
|
@@ -210,7 +210,10 @@ def report_command(
|
|
|
210
210
|
bool,
|
|
211
211
|
typer.Option(
|
|
212
212
|
"--details/--no-details",
|
|
213
|
-
help=
|
|
213
|
+
help=(
|
|
214
|
+
"Also write a page for every column and the chart pages, which "
|
|
215
|
+
"load Apache ECharts from a CDN. Forces the second pass, as --deep."
|
|
216
|
+
),
|
|
214
217
|
),
|
|
215
218
|
] = False,
|
|
216
219
|
quiet: Annotated[
|
|
@@ -431,18 +431,22 @@ class DriftSettings(BaseModel):
|
|
|
431
431
|
|
|
432
432
|
|
|
433
433
|
class MissingSettings(BaseModel):
|
|
434
|
-
"""How the values missing together are counted (design 20.31).
|
|
434
|
+
"""How the values missing together are counted (design 20.31 and 20.44).
|
|
435
435
|
|
|
436
436
|
A dataset of more than ``max_columns`` columns is left out (the pairs grow with
|
|
437
437
|
the square of the columns); ``max_listed`` partners at most are listed for a
|
|
438
|
-
column, the ones missing most often with it.
|
|
439
|
-
|
|
438
|
+
column, the ones missing most often with it. The combinations of a dataset
|
|
439
|
+
(``missing_patterns``) are tracked up to ``max_patterns``, each counted exactly
|
|
440
|
+
from its first record, and ``max_patterns_listed`` are listed, the most frequent
|
|
441
|
+
first. Each is part of the key of a result.
|
|
440
442
|
"""
|
|
441
443
|
|
|
442
444
|
model_config = ConfigDict(extra="forbid", frozen=True)
|
|
443
445
|
|
|
444
446
|
max_columns: int = Field(default=100, ge=2, le=1_000)
|
|
445
447
|
max_listed: int = Field(default=10, ge=1, le=1_000)
|
|
448
|
+
max_patterns: int = Field(default=1_000, ge=1, le=100_000)
|
|
449
|
+
max_patterns_listed: int = Field(default=200, ge=1, le=10_000)
|
|
446
450
|
|
|
447
451
|
|
|
448
452
|
class ArraySettings(BaseModel):
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
4
|
|
|
5
|
-
"""Serializable report document (format ``tabalyst.report``,
|
|
5
|
+
"""Serializable report document (format ``tabalyst.report``, ``FORMAT_REVISION``).
|
|
6
6
|
|
|
7
7
|
The document is the Scan base at the same paths, plus a ``report`` block with
|
|
8
8
|
the generation data, the presentation settings and the projections by dataset
|
|
@@ -40,7 +40,7 @@ from tabalyst.summary_models import ColumnSummary, TableSummary
|
|
|
40
40
|
|
|
41
41
|
FORMAT = "tabalyst.report"
|
|
42
42
|
FORMAT_VERSION = "0.2.0"
|
|
43
|
-
FORMAT_REVISION =
|
|
43
|
+
FORMAT_REVISION = 6
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
MeasureStatus = Literal["complete", "limited", "not_applicable", "disabled", "failed"]
|
|
@@ -359,7 +359,7 @@ class ReportProfile(ResultModel):
|
|
|
359
359
|
|
|
360
360
|
format: Literal["tabalyst.report"] = FORMAT
|
|
361
361
|
format_version: Literal["0.2.0"] = FORMAT_VERSION
|
|
362
|
-
format_revision: Literal[
|
|
362
|
+
format_revision: Literal[6] = FORMAT_REVISION
|
|
363
363
|
engine: EngineInfo
|
|
364
364
|
status: Literal["complete", "partial"]
|
|
365
365
|
run: RunInfo
|
|
@@ -134,7 +134,7 @@ def plan_chain(
|
|
|
134
134
|
skip_reading = SOURCE_NOT_READ
|
|
135
135
|
if skip_reading == SOURCE_UNAVAILABLE and mode == "forced":
|
|
136
136
|
raise SourceNotReadable(
|
|
137
|
-
"--deep
|
|
137
|
+
"--deep and --details need to read the source of the scan document, which was not "
|
|
138
138
|
"found beside it. The report was not written. Restore the source "
|
|
139
139
|
"next to the document or report the source itself."
|
|
140
140
|
)
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
2
|
+
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
|
+
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
4
|
+
|
|
5
|
+
"""The chart pages of a Report (``docs/dev/report/chart-pages.md``): what each page
|
|
6
|
+
draws, read from the report JSON alone, and the library the pages load.
|
|
7
|
+
|
|
8
|
+
Pure: no file, no source. ``reporting.render_chart_page`` prints what this module
|
|
9
|
+
builds and ``static/charts.js`` draws it.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from collections.abc import Mapping
|
|
15
|
+
from dataclasses import dataclass, field
|
|
16
|
+
from urllib.parse import quote
|
|
17
|
+
|
|
18
|
+
from tabalyst.models import ReportProfile
|
|
19
|
+
from tabalyst.report_insights import block_line, missing_blocks
|
|
20
|
+
from tabalyst.report_views import InsightLine
|
|
21
|
+
from tabalyst.scanner.secondpass.models import MissingPatternsResult
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@dataclass(frozen=True, slots=True)
|
|
25
|
+
class Library:
|
|
26
|
+
"""A script the detail pages load from a CDN, pinned to one published file:
|
|
27
|
+
``integrity`` is the SRI hash of that file, so it cannot be swapped."""
|
|
28
|
+
|
|
29
|
+
name: str
|
|
30
|
+
version: str
|
|
31
|
+
url: str
|
|
32
|
+
integrity: str
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# Moving to an embedded copy changes this constant and the templates, nothing else
|
|
36
|
+
# (chart-pages.md 5). The hash was computed from the published file.
|
|
37
|
+
ECHARTS = Library(
|
|
38
|
+
name="Apache ECharts",
|
|
39
|
+
version="6.1.0",
|
|
40
|
+
url="https://cdn.jsdelivr.net/npm/echarts@6.1.0/dist/echarts.min.js",
|
|
41
|
+
integrity="sha384-C2iskrW/uPW46KzOjrvJIQo4YkV8lkD+QS0CrDN18IIPIpT/g2USu8bTP3nvmIAD",
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
# The patterns the plot draws; the table lists every pattern the result lists.
|
|
45
|
+
DRAWN = 20
|
|
46
|
+
# The file of each topic, stable once released.
|
|
47
|
+
CHART_FILES = {"missing": "charts-missing.html"}
|
|
48
|
+
TOPIC_TITLES = {"missing": "Missing values"}
|
|
49
|
+
# Why a dataset has no section on a chart page, in words.
|
|
50
|
+
LEFT_OUT_REASONS = {
|
|
51
|
+
"no_missing_values": "fewer than two columns lack a value",
|
|
52
|
+
"too_many_columns": "more columns lack a value than deep.missing.max_columns allows",
|
|
53
|
+
"withheld_columns": "a column that lacks values is withheld by the exposure setting",
|
|
54
|
+
"analysis_failed": "the second pass did not count the combinations",
|
|
55
|
+
}
|
|
56
|
+
_HIDDEN = {"mask", "hide"}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@dataclass(frozen=True, slots=True)
|
|
60
|
+
class ColumnRow:
|
|
61
|
+
"""A column that lacks values: the set size of the plot, with the link to its
|
|
62
|
+
column page."""
|
|
63
|
+
|
|
64
|
+
field: str
|
|
65
|
+
display: str
|
|
66
|
+
position: int
|
|
67
|
+
missing: int
|
|
68
|
+
share: str
|
|
69
|
+
href: str | None
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@dataclass(frozen=True, slots=True)
|
|
73
|
+
class PatternRow:
|
|
74
|
+
"""A listed pattern: the exact set of columns some records lack a value in."""
|
|
75
|
+
|
|
76
|
+
names: tuple[str, ...]
|
|
77
|
+
size: int
|
|
78
|
+
count: int
|
|
79
|
+
share: str
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
@dataclass(frozen=True, slots=True)
|
|
83
|
+
class MissingSection:
|
|
84
|
+
"""The combinations of missing values of one dataset, as its section of
|
|
85
|
+
``charts-missing.html`` prints and draws them. ``data`` is what ``charts.js``
|
|
86
|
+
reads: the columns in document order, their counts, and each listed pattern as
|
|
87
|
+
its count and the positions of its columns."""
|
|
88
|
+
|
|
89
|
+
dataset: str
|
|
90
|
+
result: MissingPatternsResult
|
|
91
|
+
lacking: int
|
|
92
|
+
columns: list[ColumnRow]
|
|
93
|
+
patterns: list[PatternRow]
|
|
94
|
+
lines: list[InsightLine]
|
|
95
|
+
data: dict[str, object] = field(default_factory=dict)
|
|
96
|
+
|
|
97
|
+
@property
|
|
98
|
+
def drawn(self) -> int:
|
|
99
|
+
"""The patterns the plot draws at first."""
|
|
100
|
+
return min(DRAWN, len(self.patterns))
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@dataclass(frozen=True, slots=True)
|
|
104
|
+
class LeftOut:
|
|
105
|
+
"""A dataset without a section on a chart page, and why (a key of ``LEFT_OUT_REASONS``)."""
|
|
106
|
+
|
|
107
|
+
topic: str
|
|
108
|
+
dataset: str
|
|
109
|
+
reason: str
|
|
110
|
+
|
|
111
|
+
@property
|
|
112
|
+
def words(self) -> str:
|
|
113
|
+
"""The reason in words."""
|
|
114
|
+
return LEFT_OUT_REASONS[self.reason]
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def _share(part: int, whole: int) -> str:
|
|
118
|
+
return f"{part / whole:.1%}" if whole else "0%"
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
def _reason(profile: ReportProfile, dataset: str) -> str:
|
|
122
|
+
"""Why a dataset has no combinations, from the plan of the second pass."""
|
|
123
|
+
deep = profile.analyses.deep if profile.analyses is not None else None
|
|
124
|
+
if deep is None:
|
|
125
|
+
return "analysis_failed"
|
|
126
|
+
for candidate in deep.plan.candidates:
|
|
127
|
+
if candidate.analyzer == "missing_patterns" and candidate.dataset == dataset:
|
|
128
|
+
if "too_many_columns" in candidate.applicability.reasons:
|
|
129
|
+
return "too_many_columns"
|
|
130
|
+
return "analysis_failed"
|
|
131
|
+
return "no_missing_values"
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def missing_sections(
|
|
135
|
+
profile: ReportProfile,
|
|
136
|
+
column_links: Mapping[tuple[str, str], str] | None = None,
|
|
137
|
+
) -> tuple[list[MissingSection], list[LeftOut]]:
|
|
138
|
+
"""The sections of ``charts-missing.html``, one per dataset with combinations
|
|
139
|
+
counted, in the order of the report, and the datasets left out with their reason.
|
|
140
|
+
|
|
141
|
+
``column_links`` maps a dataset and a field id to the href of its column page,
|
|
142
|
+
relative to the folder of the detail pages. A result that names a column the
|
|
143
|
+
report withholds is left out whole: its counts would describe that column.
|
|
144
|
+
"""
|
|
145
|
+
links = column_links or {}
|
|
146
|
+
found: dict[str, MissingPatternsResult] = {}
|
|
147
|
+
deep = profile.analyses.deep if profile.analyses is not None else None
|
|
148
|
+
for item in deep.analyses if deep is not None else []:
|
|
149
|
+
if item.analyzer != "missing_patterns" or item.status not in ("complete", "limited"):
|
|
150
|
+
continue
|
|
151
|
+
if isinstance(item.result, MissingPatternsResult):
|
|
152
|
+
found[item.dataset] = item.result
|
|
153
|
+
sections: list[MissingSection] = []
|
|
154
|
+
left: list[LeftOut] = []
|
|
155
|
+
for dataset in profile.datasets:
|
|
156
|
+
exposure = {field.id: field.exposure for field in dataset.fields}
|
|
157
|
+
result = found.get(dataset.id)
|
|
158
|
+
if result is None:
|
|
159
|
+
left.append(LeftOut("missing", dataset.id, _reason(profile, dataset.id)))
|
|
160
|
+
continue
|
|
161
|
+
if any(exposure.get(column.field) in _HIDDEN for column in result.columns):
|
|
162
|
+
left.append(LeftOut("missing", dataset.id, "withheld_columns"))
|
|
163
|
+
continue
|
|
164
|
+
sections.append(_section(dataset.id, result, links))
|
|
165
|
+
return sections, left
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def _section(
|
|
169
|
+
dataset: str, result: MissingPatternsResult, links: Mapping[tuple[str, str], str]
|
|
170
|
+
) -> MissingSection:
|
|
171
|
+
position = {column.field: index for index, column in enumerate(result.columns)}
|
|
172
|
+
names = {column.field: column.display for column in result.columns}
|
|
173
|
+
columns = sorted(
|
|
174
|
+
(
|
|
175
|
+
ColumnRow(
|
|
176
|
+
field=column.field,
|
|
177
|
+
display=column.display,
|
|
178
|
+
position=position[column.field],
|
|
179
|
+
missing=column.missing,
|
|
180
|
+
share=_share(column.missing, result.records),
|
|
181
|
+
href=links.get((dataset, column.field)),
|
|
182
|
+
)
|
|
183
|
+
for column in result.columns
|
|
184
|
+
),
|
|
185
|
+
key=lambda row: (-row.missing, position[row.field]),
|
|
186
|
+
)
|
|
187
|
+
patterns = [
|
|
188
|
+
PatternRow(
|
|
189
|
+
names=tuple(names[name] for name in pattern.columns),
|
|
190
|
+
size=len(pattern.columns),
|
|
191
|
+
count=pattern.count,
|
|
192
|
+
share=_share(pattern.count, result.records),
|
|
193
|
+
)
|
|
194
|
+
for pattern in result.listed
|
|
195
|
+
]
|
|
196
|
+
data: dict[str, object] = {
|
|
197
|
+
"records": result.records,
|
|
198
|
+
"columns": [column.display for column in result.columns],
|
|
199
|
+
"missing": [column.missing for column in result.columns],
|
|
200
|
+
"patterns": [
|
|
201
|
+
[pattern.count, [position[name] for name in pattern.columns]]
|
|
202
|
+
for pattern in result.listed
|
|
203
|
+
],
|
|
204
|
+
"drawn": DRAWN,
|
|
205
|
+
}
|
|
206
|
+
return MissingSection(
|
|
207
|
+
dataset=dataset,
|
|
208
|
+
result=result,
|
|
209
|
+
lacking=result.records - result.complete_records,
|
|
210
|
+
columns=columns,
|
|
211
|
+
patterns=patterns,
|
|
212
|
+
lines=[block_line(block) for block in missing_blocks(result)],
|
|
213
|
+
data=data,
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
def column_charts(
|
|
218
|
+
sections: list[MissingSection], dataset: str, field_id: str
|
|
219
|
+
) -> list[tuple[str, str]]:
|
|
220
|
+
"""The chart pages that name a column, as ``(title, href)`` from a page of the
|
|
221
|
+
same folder: ``charts-missing.html#<dataset>`` for a column that lacks values."""
|
|
222
|
+
return [
|
|
223
|
+
(TOPIC_TITLES["missing"], f"{CHART_FILES['missing']}#{quote(section.dataset, safe='')}")
|
|
224
|
+
for section in sections
|
|
225
|
+
if section.dataset == dataset
|
|
226
|
+
and any(column.field == field_id for column in section.result.columns)
|
|
227
|
+
]
|
|
@@ -56,6 +56,7 @@ from tabalyst.scanner.secondpass.models import (
|
|
|
56
56
|
MeasureResult,
|
|
57
57
|
MissingIdCopiesResult,
|
|
58
58
|
MissingMatrixResult,
|
|
59
|
+
MissingPatternsResult,
|
|
59
60
|
NumberResolution,
|
|
60
61
|
PartsResult,
|
|
61
62
|
PatternCounts,
|
|
@@ -219,6 +220,8 @@ def result_summary(result: AnalysisOutput) -> tuple[str, str]:
|
|
|
219
220
|
return _drift_summary(result), EXACT
|
|
220
221
|
if isinstance(result, MissingMatrixResult):
|
|
221
222
|
return _matrix_summary(result), EXACT
|
|
223
|
+
if isinstance(result, MissingPatternsResult):
|
|
224
|
+
return _patterns_summary(result), _exact_unless_partial(result.complete)
|
|
222
225
|
if isinstance(result, DateOrderResult):
|
|
223
226
|
return _order_summary(result), EXACT
|
|
224
227
|
if isinstance(result, ArrayProfileResult):
|
|
@@ -405,6 +408,20 @@ def _matrix_summary(result: MissingMatrixResult) -> str:
|
|
|
405
408
|
return text
|
|
406
409
|
|
|
407
410
|
|
|
411
|
+
def _patterns_summary(result: MissingPatternsResult) -> str:
|
|
412
|
+
lacking = result.records - result.complete_records
|
|
413
|
+
seen = f"{result.distinct:,}" if result.complete else f"at least {result.distinct:,}"
|
|
414
|
+
text = (
|
|
415
|
+
f"{lacking:,} records lack a value in at least one of {len(result.columns):,} columns, "
|
|
416
|
+
f"in {seen} combinations"
|
|
417
|
+
)
|
|
418
|
+
if result.listed:
|
|
419
|
+
top = result.listed[0]
|
|
420
|
+
names = {column.field: column.display for column in result.columns}
|
|
421
|
+
text += f"; the most frequent, {', '.join(names[field] for field in top.columns)} ({top.count:,})"
|
|
422
|
+
return text
|
|
423
|
+
|
|
424
|
+
|
|
408
425
|
def _order_summary(result: DateOrderResult) -> str:
|
|
409
426
|
text = f"{result.compared:,} records compared, {result.broken:,} with the first date after the second"
|
|
410
427
|
skipped = sum(result.excluded.model_dump().values())
|