tabalyst 0.6.2__tar.gz → 0.7.1__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.1/MANIFEST.in +14 -0
- tabalyst-0.7.1/PKG-INFO +382 -0
- tabalyst-0.7.1/README.md +342 -0
- tabalyst-0.7.1/examples/README.md +232 -0
- tabalyst-0.7.1/examples/config.json +89 -0
- tabalyst-0.7.1/examples/generate/README.md +28 -0
- tabalyst-0.7.1/examples/generate/cohorts-anomalies/catalog.yaml +1 -0
- tabalyst-0.7.1/examples/generate/cohorts-anomalies/dataset.yaml +45 -0
- tabalyst-0.7.1/examples/generate/cohorts-anomalies/schemas/accounts.yaml +6 -0
- tabalyst-0.7.1/examples/generate/cohorts-anomalies/schemas/contacts.yaml +22 -0
- tabalyst-0.7.1/examples/generate/common-references/catalog.yaml +1 -0
- tabalyst-0.7.1/examples/generate/common-references/dataset.yaml +14 -0
- tabalyst-0.7.1/examples/generate/common-references/schemas/contacts.yaml +113 -0
- tabalyst-0.7.1/examples/generate/generate_examples.py +86 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/pyproject.toml +16 -2
- tabalyst-0.7.1/src/tabalyst/__init__.py +201 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/cli/app.py +2 -0
- tabalyst-0.7.1/src/tabalyst/cli/confirm.py +59 -0
- tabalyst-0.7.1/src/tabalyst/cli/dedup.py +410 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/cli/generate.py +43 -4
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/cli/report.py +78 -5
- tabalyst-0.7.1/src/tabalyst/cli/sample.py +336 -0
- tabalyst-0.7.1/src/tabalyst/cli/scan.py +607 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/cli/terminal.py +24 -1
- tabalyst-0.7.1/src/tabalyst/config.py +879 -0
- tabalyst-0.7.1/src/tabalyst/csv_records.py +287 -0
- tabalyst-0.7.1/src/tabalyst/dedup/__init__.py +9 -0
- tabalyst-0.7.1/src/tabalyst/dedup/analysis.py +244 -0
- tabalyst-0.7.1/src/tabalyst/dedup/batch_report.py +252 -0
- tabalyst-0.7.1/src/tabalyst/dedup/cache.py +268 -0
- tabalyst-0.7.1/src/tabalyst/dedup/discovery.py +251 -0
- tabalyst-0.7.1/src/tabalyst/dedup/diskstore.py +291 -0
- tabalyst-0.7.1/src/tabalyst/dedup/failures.py +79 -0
- tabalyst-0.7.1/src/tabalyst/dedup/groups.py +260 -0
- tabalyst-0.7.1/src/tabalyst/dedup/identity.py +49 -0
- tabalyst-0.7.1/src/tabalyst/dedup/pipeline.py +209 -0
- tabalyst-0.7.1/src/tabalyst/dedup/publish.py +120 -0
- tabalyst-0.7.1/src/tabalyst/dedup/report.py +599 -0
- tabalyst-0.7.1/src/tabalyst/dedup/settings.py +113 -0
- tabalyst-0.7.1/src/tabalyst/dedup/store.py +124 -0
- tabalyst-0.7.1/src/tabalyst/dedup/tiered.py +121 -0
- tabalyst-0.7.1/src/tabalyst/dedup/writer.py +249 -0
- tabalyst-0.7.1/src/tabalyst/dedup_service.py +487 -0
- tabalyst-0.7.1/src/tabalyst/deep_service.py +326 -0
- tabalyst-0.7.1/src/tabalyst/deep_store.py +71 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/execution_log.py +3 -3
- tabalyst-0.7.1/src/tabalyst/generate_anomalies.py +516 -0
- tabalyst-0.7.1/src/tabalyst/generate_columns_package.py +106 -0
- tabalyst-0.7.1/src/tabalyst/generate_computer.py +315 -0
- tabalyst-0.7.1/src/tabalyst/generate_computer_output.py +294 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_definition.py +28 -43
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/SOURCES.md +88 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/catalog.yaml +50 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/brand.csv +23 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/color.csv +16 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/computer_type.csv +7 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/computer_type_form_factor.csv +16 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/computer_type_product_segment.csv +44 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/cpu.csv +18 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/cpu_memory_weight.csv +74 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/cpu_operating_system.csv +89 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/display.csv +36 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/extended_specs.csv +105 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/form_factor.csv +14 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/generation_color.csv +98 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/generation_cpu.csv +93 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/generation_display.csv +91 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/generation_gpu.csv +100 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/generation_memory.csv +106 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/generation_operating_system.csv +100 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/generation_profile.csv +10 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/generation_profile_computer_type.csv +25 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/generation_profile_segment.csv +27 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/generation_storage.csv +117 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/gpu.csv +48 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/gpu_display.csv +212 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/gpu_memory_weight.csv +222 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/gpu_storage_weight.csv +156 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/memory.csv +47 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/model_form_factor.csv +70 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/model_generation.csv +75 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/operating_system.csv +13 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_category.csv +9 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_family.csv +58 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_family_computer_type.csv +74 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_family_product_segment.csv +148 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_model.csv +70 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_segment.csv +11 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_segment_brand.csv +102 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_segment_display_weight.csv +202 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_segment_memory_weight.csv +185 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_segment_storage_weight.csv +73 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/product_subcategory.csv +20 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/profile_exclusions.csv +110 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/promotion_status.csv +6 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/promotion_type.csv +12 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/seller.csv +52 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/seller_type.csv +7 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/shipping_availability.csv +6 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/standard_specs.csv +105 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/storage.csv +35 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/data/warehouse.csv +9 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/dataset.yaml +255 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/computer_type.yaml +6 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/computer_type_form_factor.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/computer_type_product_segment.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/computers.yaml +15 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/cpu.yaml +15 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/cpu_memory_weight.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/cpu_operating_system.yaml +4 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/display.yaml +15 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/extended_specs.yaml +22 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/generation_color.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/generation_cpu.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/generation_display.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/generation_gpu.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/generation_memory.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/generation_operating_system.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/generation_profile.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/generation_profile_computer_type.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/generation_profile_segment.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/generation_storage.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/gpu.yaml +10 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/gpu_display.yaml +4 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/gpu_memory_weight.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/gpu_storage_weight.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/localized.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/memory.yaml +7 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/model_form_factor.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/model_generation.yaml +7 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/operating_system.yaml +6 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/product_family.yaml +6 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/product_family_computer_type.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/product_family_product_segment.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/product_model.yaml +6 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/product_segment.yaml +6 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/product_segment_brand.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/product_segment_display_weight.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/product_segment_memory_weight.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/product_segment_storage_weight.yaml +5 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/product_subcategory.yaml +6 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/profile_exclusions.yaml +8 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/seller.yaml +7 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/standard_specs.yaml +15 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/storage.yaml +7 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/computer/schemas/warehouse.yaml +6 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/crm/catalog.yaml +1 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/crm/dataset.yaml +76 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/crm/schemas/accounts.yaml +63 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/crm/schemas/contacts.yaml +219 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/catalog.yaml +29 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/dataset.yaml +605 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/schemas/agencies.yaml +21 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/schemas/branch_contract_weights.yaml +14 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/schemas/claim_statuses.yaml +19 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/schemas/contract_statuses.yaml +15 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/schemas/contract_types.yaml +34 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/schemas/customers.yaml +232 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/schemas/payment_frequencies.yaml +17 -0
- tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/schemas/payment_methods.yaml +12 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_insurance.py +16 -16
- tabalyst-0.7.1/src/tabalyst/generate_package.py +600 -0
- tabalyst-0.7.1/src/tabalyst/generate_selection.py +337 -0
- tabalyst-0.7.1/src/tabalyst/generate_service.py +772 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_values.py +13 -10
- tabalyst-0.7.1/src/tabalyst/json_text.py +132 -0
- tabalyst-0.7.1/src/tabalyst/models.py +388 -0
- tabalyst-0.7.1/src/tabalyst/plan_service.py +180 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/progress.py +9 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_validation.py +8 -0
- tabalyst-0.7.1/src/tabalyst/report_chain.py +243 -0
- tabalyst-0.7.1/src/tabalyst/report_classification.py +155 -0
- tabalyst-0.7.1/src/tabalyst/report_column_page.py +181 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/report_config.py +38 -8
- tabalyst-0.7.1/src/tabalyst/report_deep.py +549 -0
- tabalyst-0.7.1/src/tabalyst/report_details.py +252 -0
- tabalyst-0.7.1/src/tabalyst/report_finding_details.py +502 -0
- tabalyst-0.7.1/src/tabalyst/report_findings.py +1039 -0
- tabalyst-0.7.1/src/tabalyst/report_insights.py +1565 -0
- tabalyst-0.7.1/src/tabalyst/report_labels.py +931 -0
- tabalyst-0.7.1/src/tabalyst/report_measures.py +217 -0
- tabalyst-0.7.1/src/tabalyst/report_overview.py +397 -0
- tabalyst-0.7.1/src/tabalyst/report_plan.py +72 -0
- tabalyst-0.7.1/src/tabalyst/report_preview.py +279 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/report_profile.py +330 -374
- tabalyst-0.7.1/src/tabalyst/report_relations.py +320 -0
- tabalyst-0.7.1/src/tabalyst/report_schema.py +36 -0
- tabalyst-0.7.1/src/tabalyst/report_sections.py +621 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/report_service.py +116 -45
- tabalyst-0.7.1/src/tabalyst/report_signals.py +193 -0
- tabalyst-0.7.1/src/tabalyst/report_summary.py +137 -0
- tabalyst-0.7.1/src/tabalyst/report_table.py +788 -0
- tabalyst-0.7.1/src/tabalyst/report_views.py +750 -0
- tabalyst-0.7.1/src/tabalyst/reporting.py +501 -0
- tabalyst-0.7.1/src/tabalyst/result_model.py +13 -0
- tabalyst-0.7.1/src/tabalyst/sample_page.py +54 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/sampling.py +169 -131
- tabalyst-0.7.1/src/tabalyst/sampling_service.py +237 -0
- tabalyst-0.7.1/src/tabalyst/scan_document.py +195 -0
- tabalyst-0.7.1/src/tabalyst/scan_page.py +68 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scan_reuse.py +58 -15
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scan_service.py +78 -13
- tabalyst-0.7.1/src/tabalyst/scanner/__init__.py +43 -0
- tabalyst-0.7.1/src/tabalyst/scanner/api.py +370 -0
- tabalyst-0.7.1/src/tabalyst/scanner/bottomk.py +591 -0
- tabalyst-0.7.1/src/tabalyst/scanner/cases.py +357 -0
- tabalyst-0.7.1/src/tabalyst/scanner/charactermap.py +292 -0
- tabalyst-0.7.1/src/tabalyst/scanner/characters.py +432 -0
- tabalyst-0.7.1/src/tabalyst/scanner/classify/__init__.py +28 -0
- tabalyst-0.7.1/src/tabalyst/scanner/classify/candidates.py +192 -0
- tabalyst-0.7.1/src/tabalyst/scanner/classify/catalog.py +357 -0
- tabalyst-0.7.1/src/tabalyst/scanner/classify/identifiers.py +242 -0
- tabalyst-0.7.1/src/tabalyst/scanner/classify/models.py +90 -0
- tabalyst-0.7.1/src/tabalyst/scanner/classify/names.py +707 -0
- tabalyst-0.7.1/src/tabalyst/scanner/classify/rules.py +483 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/config.py +199 -7
- tabalyst-0.7.1/src/tabalyst/scanner/convention_rule.py +122 -0
- tabalyst-0.7.1/src/tabalyst/scanner/correlation_ratio.py +112 -0
- tabalyst-0.7.1/src/tabalyst/scanner/crosstab.py +197 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/amount.py +4 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/base.py +4 -3
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/currency.py +19 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/email.py +38 -5
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/ip.py +90 -0
- tabalyst-0.7.1/src/tabalyst/scanner/detectors/keys.py +130 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/percentage.py +13 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/phone.py +53 -3
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/postal.py +19 -2
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/quantity.py +18 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/registry.py +91 -5
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/temporal.py +34 -3
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/diagnostics.py +15 -2
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/engine.py +71 -32
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/exposure.py +11 -2
- tabalyst-0.7.1/src/tabalyst/scanner/features.py +368 -0
- tabalyst-0.7.1/src/tabalyst/scanner/identity.py +133 -0
- tabalyst-0.7.1/src/tabalyst/scanner/lengthsample.py +326 -0
- tabalyst-0.7.1/src/tabalyst/scanner/longtext.py +189 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/measures.py +190 -5
- tabalyst-0.7.1/src/tabalyst/scanner/memory.py +194 -0
- tabalyst-0.7.1/src/tabalyst/scanner/models.py +1763 -0
- tabalyst-0.7.1/src/tabalyst/scanner/pattern_eligibility.py +186 -0
- tabalyst-0.7.1/src/tabalyst/scanner/patternfacets.py +399 -0
- tabalyst-0.7.1/src/tabalyst/scanner/patterninfer.py +1379 -0
- tabalyst-0.7.1/src/tabalyst/scanner/patterntree.py +307 -0
- tabalyst-0.7.1/src/tabalyst/scanner/pearson.py +168 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/__init__.py +56 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzer.py +267 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/__init__.py +56 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/characters.py +76 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/common.py +66 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/crosstab.py +220 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/date_order.py +152 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/distinct.py +117 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/drift.py +98 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/duplicates.py +259 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/forms.py +83 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/frequencies.py +91 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/histogram.py +110 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/lengths.py +66 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/matrix.py +59 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/measures.py +149 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/parts.py +106 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/patterns.py +135 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/pearson.py +195 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/residuals.py +194 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/shape.py +110 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/stats.py +192 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/structure.py +141 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/temporal.py +129 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/analyzers/texts.py +137 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/categorystats.py +309 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/costmodel.py +440 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/crosstabs.py +493 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/facts.py +705 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/identifiers.py +41 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/models.py +489 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/orders.py +258 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/planner.py +639 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/reasons.py +167 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/registry.py +64 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/relations.py +319 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/render.py +221 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/samplerows.py +52 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/secondpass.py +201 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/stratification.py +374 -0
- tabalyst-0.7.1/src/tabalyst/scanner/planner/stratmodels.py +144 -0
- tabalyst-0.7.1/src/tabalyst/scanner/process.py +54 -0
- tabalyst-0.7.1/src/tabalyst/scanner/quality.py +621 -0
- tabalyst-0.7.1/src/tabalyst/scanner/rankcorr.py +172 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/readers/base.py +8 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/readers/csv_reader.py +47 -6
- tabalyst-0.7.1/src/tabalyst/scanner/readers/factory.py +33 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/records.py +40 -71
- tabalyst-0.7.1/src/tabalyst/scanner/rowsample.py +492 -0
- tabalyst-0.7.1/src/tabalyst/scanner/schema.py +65 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/__init__.py +44 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/accumulators.py +251 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/bins.py +225 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/boundaries.py +116 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/characters.py +50 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/crosstab.py +464 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/document.py +113 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/drift.py +210 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/duplicates.py +446 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/exactset.py +203 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/executor.py +1339 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/forms.py +202 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/frequencies.py +96 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/matrix.py +175 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/measures.py +644 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/models.py +1760 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/orders.py +259 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/parallel.py +333 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/parts.py +276 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/patternreader.py +597 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/patterns.py +436 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/pearson.py +230 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/periods.py +106 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/ranks.py +87 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/replay.py +427 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/residuals.py +454 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/routing.py +650 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/schema.py +38 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/shape.py +485 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/stats.py +306 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/structure.py +246 -0
- tabalyst-0.7.1/src/tabalyst/scanner/secondpass/texts.py +291 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/__init__.py +22 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/bins.py +35 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/estimate.py +139 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/evaluate.py +879 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/execute.py +148 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/models.py +314 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/near.py +122 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/plan.py +356 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/reasons.py +88 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/render.py +123 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/result.py +440 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/select.py +368 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/targets.py +1049 -0
- tabalyst-0.7.1/src/tabalyst/scanner/smart/weights.py +62 -0
- tabalyst-0.7.1/src/tabalyst/scanner/stratify.py +80 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/structure.py +64 -28
- tabalyst-0.7.1/src/tabalyst/scanner/validation.py +1479 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/values.py +489 -85
- tabalyst-0.7.1/src/tabalyst/scanner/valuesample.py +619 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/workers.py +76 -19
- tabalyst-0.7.1/src/tabalyst/schemas/tabalyst.dedup.batch.schema.json +393 -0
- tabalyst-0.7.1/src/tabalyst/schemas/tabalyst.dedup.schema.json +714 -0
- tabalyst-0.7.1/src/tabalyst/schemas/tabalyst.report.schema.json +18549 -0
- tabalyst-0.7.1/src/tabalyst/schemas/tabalyst.sample.schema.json +2097 -0
- tabalyst-0.7.1/src/tabalyst/schemas/tabalyst.scan.deep.schema.json +8632 -0
- tabalyst-0.7.1/src/tabalyst/schemas/tabalyst.scan.schema.json +7602 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/service.py +215 -69
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/shared_scan_service.py +48 -6
- tabalyst-0.7.1/src/tabalyst/smart_service.py +352 -0
- tabalyst-0.7.1/src/tabalyst/source_guard.py +126 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/static/report.js +164 -19
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/static/theme.css +479 -6
- tabalyst-0.7.1/src/tabalyst/summary_models.py +622 -0
- tabalyst-0.7.1/src/tabalyst/templates/characters.html +20 -0
- tabalyst-0.7.1/src/tabalyst/templates/column.html +180 -0
- tabalyst-0.7.1/src/tabalyst/templates/insights.html +9 -0
- tabalyst-0.7.1/src/tabalyst/templates/patterns.html +17 -0
- tabalyst-0.7.1/src/tabalyst/templates/report.html +167 -0
- tabalyst-0.7.1/src/tabalyst/templates/sample.html +83 -0
- tabalyst-0.7.1/src/tabalyst.egg-info/PKG-INFO +382 -0
- tabalyst-0.7.1/src/tabalyst.egg-info/SOURCES.txt +523 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst.egg-info/requires.txt +1 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_all_collections.py +2 -2
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_cli.py +29 -14
- tabalyst-0.7.1/tests/test_csv_records.py +218 -0
- tabalyst-0.7.1/tests/test_examples_index.py +99 -0
- tabalyst-0.7.1/tests/test_examples_layout.py +165 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_generate.py +24 -45
- tabalyst-0.7.1/tests/test_generate_anomalies.py +492 -0
- tabalyst-0.7.1/tests/test_generate_anomalies_regression.py +179 -0
- tabalyst-0.7.1/tests/test_generate_computer_catalog.py +148 -0
- tabalyst-0.7.1/tests/test_generate_computer_components.py +168 -0
- tabalyst-0.7.1/tests/test_generate_computer_derivations.py +254 -0
- tabalyst-0.7.1/tests/test_generate_computer_hierarchy.py +146 -0
- tabalyst-0.7.1/tests/test_generate_computer_output.py +302 -0
- tabalyst-0.7.1/tests/test_generate_computer_service.py +491 -0
- tabalyst-0.7.1/tests/test_generate_crm_package.py +81 -0
- tabalyst-0.7.1/tests/test_generate_insurance.py +146 -0
- tabalyst-0.7.1/tests/test_generate_insurance_stress.py +183 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_generate_lot4.py +6 -8
- tabalyst-0.7.1/tests/test_generate_package.py +337 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_generate_references.py +16 -10
- tabalyst-0.7.1/tests/test_generate_selection.py +264 -0
- tabalyst-0.7.1/tests/test_json_text.py +139 -0
- tabalyst-0.7.1/tests/test_make_datasets.py +116 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_database.py +2 -2
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_index.py +4 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_queries.py +1 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_scan.py +1 -2
- tabalyst-0.7.1/tests/test_project_scan_model.py +97 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_public_api.py +69 -3
- tabalyst-0.7.1/tests/test_report_contrast.py +132 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_reporting.py +29 -18
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_sampling.py +93 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scan_command.py +26 -7
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scanner_config.py +43 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scanner_csv.py +34 -1
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scanner_email_url.py +1 -1
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scanner_exposure.py +44 -7
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scanner_phone.py +4 -4
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scanner_postal.py +5 -5
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_shared_scan_cli.py +1 -1
- tabalyst-0.6.2/MANIFEST.in +0 -6
- tabalyst-0.6.2/PKG-INFO +0 -572
- tabalyst-0.6.2/README.md +0 -533
- tabalyst-0.6.2/examples/README.md +0 -144
- tabalyst-0.6.2/examples/config.json +0 -60
- tabalyst-0.6.2/src/tabalyst/__init__.py +0 -52
- tabalyst-0.6.2/src/tabalyst/cli/sample.py +0 -136
- tabalyst-0.6.2/src/tabalyst/cli/scan.py +0 -214
- tabalyst-0.6.2/src/tabalyst/config.py +0 -266
- tabalyst-0.6.2/src/tabalyst/generate_anomalies.py +0 -126
- tabalyst-0.6.2/src/tabalyst/generate_examples/crm.yaml +0 -70
- tabalyst-0.6.2/src/tabalyst/generate_examples/insurance.yaml +0 -71
- tabalyst-0.6.2/src/tabalyst/generate_service.py +0 -367
- tabalyst-0.6.2/src/tabalyst/models.py +0 -429
- tabalyst-0.6.2/src/tabalyst/reporting.py +0 -199
- tabalyst-0.6.2/src/tabalyst/sampling_service.py +0 -137
- tabalyst-0.6.2/src/tabalyst/scanner/__init__.py +0 -16
- tabalyst-0.6.2/src/tabalyst/scanner/api.py +0 -211
- tabalyst-0.6.2/src/tabalyst/scanner/identity.py +0 -63
- tabalyst-0.6.2/src/tabalyst/scanner/models.py +0 -564
- tabalyst-0.6.2/src/tabalyst/templates/column.html +0 -66
- tabalyst-0.6.2/src/tabalyst/templates/report.html +0 -114
- tabalyst-0.6.2/src/tabalyst.egg-info/PKG-INFO +0 -572
- tabalyst-0.6.2/src/tabalyst.egg-info/SOURCES.txt +0 -202
- tabalyst-0.6.2/tests/test_generate_insurance.py +0 -73
- {tabalyst-0.6.2 → tabalyst-0.7.1}/LICENSE +0 -0
- {tabalyst-0.6.2/examples/input → tabalyst-0.7.1/examples/datasets}/basic.csv +0 -0
- {tabalyst-0.6.2/examples/input → tabalyst-0.7.1/examples/datasets}/insurance-customers.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/setup.cfg +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/__main__.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/_version.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/batch.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/cache_service.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/cli/__init__.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/cli/cache.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/cli/inspect.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/errors.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_csv.py +0 -0
- {tabalyst-0.6.2/src/tabalyst/generate_resources → tabalyst-0.7.1/src/tabalyst/generate_examples}/insurance/SOURCES.md +0 -0
- {tabalyst-0.6.2/src/tabalyst/generate_resources/insurance → tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/data}/agencies.csv +0 -0
- {tabalyst-0.6.2/src/tabalyst/generate_resources/insurance → tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/data}/branch_contract_weights.csv +0 -0
- {tabalyst-0.6.2/src/tabalyst/generate_resources/insurance → tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/data}/claim_statuses.csv +0 -0
- {tabalyst-0.6.2/src/tabalyst/generate_resources/insurance → tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/data}/contract_statuses.csv +0 -0
- {tabalyst-0.6.2/src/tabalyst/generate_resources/insurance → tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/data}/contract_types.csv +0 -0
- {tabalyst-0.6.2/src/tabalyst/generate_resources/insurance → tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/data}/payment_frequencies.csv +0 -0
- {tabalyst-0.6.2/src/tabalyst/generate_resources/insurance → tabalyst-0.7.1/src/tabalyst/generate_examples/insurance/data}/payment_methods.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_references.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/SOURCES.md +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/addresses/street_directions_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/addresses/street_names_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/addresses/street_types_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/addresses/unit_types_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/contact/email_patterns.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/contact/email_providers_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/contact/phone_area_codes_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/geography/cities_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/geography/postal_prefixes_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/geography/provinces_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/people/family_names_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/people/first_names_en_ca.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/generate_resources/people/first_names_fr_qc.csv +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspect_service.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/__init__.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/choices.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/excel_inspect/__init__.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/excel_inspect/build.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/excel_inspect/detect.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/excel_inspect/parameters.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/json_inspect/__init__.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/json_inspect/build.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/json_inspect/detect.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/json_inspect/parameters.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/models.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/persistence.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/inspector/resolution.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/option_notices.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/project_open_service.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/project_scan_service.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/__init__.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_bounded_values.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_cache.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_codec.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_generation.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_locks.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_publication.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_queries.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_query_budget.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_recovery.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_retention.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_schema.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_session.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_staging.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/_sync.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/catalog.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/freshness.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/identity.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/index.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/location.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/models.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/projects/store.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/__init__.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/boolean.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/enumeration.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/names.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/number.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/pattern.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/shape.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/url.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/detectors/uuid.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/field.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/normalization.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/observations.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/paths.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/readers/__init__.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/readers/excel_common.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/readers/excel_reader.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/readers/excel_table.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/readers/json_common.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/readers/json_reader.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/readers/jsonl_reader.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst/scanner/technical.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst.egg-info/dependency_links.txt +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst.egg-info/entry_points.txt +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/src/tabalyst.egg-info/top_level.txt +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_generate_crm.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_license_headers.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_option_notices.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_cache.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_generations.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_identity.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_location.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_open_service.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_rescan.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_sessions.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_project_store.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scanner_amounts.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scanner_batches.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scanner_paths.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_scanner_uuid_ip.py +0 -0
- {tabalyst-0.6.2 → tabalyst-0.7.1}/tests/test_source_freshness.py +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
include LICENSE
|
|
2
|
+
include README.md
|
|
3
|
+
include examples/README.md
|
|
4
|
+
include examples/config.json
|
|
5
|
+
recursive-include examples/datasets *.csv
|
|
6
|
+
include examples/generate/README.md
|
|
7
|
+
include examples/generate/generate_examples.py
|
|
8
|
+
recursive-include src/tabalyst/generate_examples/crm *.yaml
|
|
9
|
+
recursive-include src/tabalyst/generate_examples/insurance *.yaml *.csv *.md
|
|
10
|
+
recursive-include src/tabalyst/generate_examples/computer *.yaml *.csv *.md
|
|
11
|
+
exclude src/tabalyst/generate_examples/computer/data/csv_files.md
|
|
12
|
+
recursive-include examples/generate/common-references *.yaml
|
|
13
|
+
recursive-include examples/generate/cohorts-anomalies *.yaml
|
|
14
|
+
recursive-include src/tabalyst/generate_resources *.csv *.md
|
tabalyst-0.7.1/PKG-INFO
ADDED
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tabalyst
|
|
3
|
+
Version: 0.7.1
|
|
4
|
+
Summary: Open-source toolkit for understanding and working with unfamiliar data.
|
|
5
|
+
Author: Gregory Borelli
|
|
6
|
+
License-Expression: MPL-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/loribel-labs/tabalyst
|
|
8
|
+
Project-URL: Repository, https://github.com/loribel-labs/tabalyst.git
|
|
9
|
+
Project-URL: Issues, https://github.com/loribel-labs/tabalyst/issues
|
|
10
|
+
Keywords: csv,data-analysis,data-profiling,data-quality,eda,html-report,json
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: duckdb==1.5.5
|
|
25
|
+
Requires-Dist: ijson>=3.3
|
|
26
|
+
Requires-Dist: jinja2>=3.1
|
|
27
|
+
Requires-Dist: platformdirs>=4
|
|
28
|
+
Requires-Dist: pydantic>=2.11
|
|
29
|
+
Requires-Dist: python-calamine>=0.8
|
|
30
|
+
Requires-Dist: PyYAML>=6.0
|
|
31
|
+
Requires-Dist: typer>=0.12
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
34
|
+
Requires-Dist: jsonschema>=4; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-cov>=6; extra == "dev"
|
|
37
|
+
Requires-Dist: ruff>=0.11; extra == "dev"
|
|
38
|
+
Requires-Dist: xlsxwriter>=3; extra == "dev"
|
|
39
|
+
Dynamic: license-file
|
|
40
|
+
|
|
41
|
+
# Tabalyst
|
|
42
|
+
|
|
43
|
+
**Open-source Python toolkit for data profiling and data quality analysis.**
|
|
44
|
+
|
|
45
|
+
*Tools for unfamiliar data.*
|
|
46
|
+
|
|
47
|
+
Tabalyst helps you understand CSV, Excel, JSON and JSONL datasets with minimal
|
|
48
|
+
configuration. Detect missing values, duplicates, mixed types, data formats and
|
|
49
|
+
quality issues. Generate interactive HTML reports and structured JSON profiles,
|
|
50
|
+
entirely on your computer.
|
|
51
|
+
|
|
52
|
+
**Simple. Clear. Smart.**
|
|
53
|
+
|
|
54
|
+
## Quick start
|
|
55
|
+
|
|
56
|
+
Tabalyst supports Python 3.11, 3.12, 3.13, and 3.14.
|
|
57
|
+
|
|
58
|
+
```console
|
|
59
|
+
pip install --upgrade tabalyst
|
|
60
|
+
tabalyst report insurance-customers.csv
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Save [`insurance-customers.csv`](https://github.com/loribel-labs/tabalyst/blob/main/examples/datasets/insurance-customers.csv),
|
|
64
|
+
a synthetic example, in your working folder, or use your own file. Explore the
|
|
65
|
+
interactive HTML report or use the generated JSON profile in your own
|
|
66
|
+
workflows. The same `pip` command installs Tabalyst or updates it.
|
|
67
|
+
|
|
68
|
+
Tabalyst is in beta. Commands and interfaces may change between releases.
|
|
69
|
+
Update before each new test.
|
|
70
|
+
|
|
71
|
+
## Tabalyst Websites
|
|
72
|
+
|
|
73
|
+
- [tabalyst.com](https://tabalyst.com/): the official website, with an interactive demo.
|
|
74
|
+
- [docs.tabalyst.com](https://docs.tabalyst.com/): the documentation, for people and for AI assistants.
|
|
75
|
+
- [Interactive report](https://tabalyst.com/examples/report.html): a real Tabalyst report you can explore in your browser.
|
|
76
|
+
|
|
77
|
+
## What can Tabalyst do?
|
|
78
|
+
|
|
79
|
+
| Tool | Purpose |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| [**Tabalyst Report**](https://docs.tabalyst.com/report/) | Generate interactive HTML profiling reports and JSON profiles |
|
|
82
|
+
| [**Tabalyst Scan**](https://docs.tabalyst.com/scan/) | Profile datasets and generate JSON and HTML scan summaries |
|
|
83
|
+
| [**Tabalyst Inspect**](https://docs.tabalyst.com/inspect/) | Discover and configure JSON collections and Excel tables |
|
|
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 |
|
|
86
|
+
| [**Tabalyst Generate**](https://docs.tabalyst.com/generate/) | Generate synthetic CSV datasets for testing and demos |
|
|
87
|
+
|
|
88
|
+
## Tabalyst Report
|
|
89
|
+
|
|
90
|
+
| Use case | Command | Destination |
|
|
91
|
+
| --- | --- | --- |
|
|
92
|
+
| One file, automatic name | `tabalyst report data.csv` | `data.html` beside the source |
|
|
93
|
+
| One file, custom name | `tabalyst report data.csv -o report.html` | The file `report.html` |
|
|
94
|
+
| Several files, automatic names | `tabalyst report *.csv` | Beside each source |
|
|
95
|
+
| Several files, one directory | `tabalyst report *.csv -d reports/` | The directory `reports/` |
|
|
96
|
+
| One JSON file | `tabalyst report data.json` | `data.report.html` beside the source |
|
|
97
|
+
| One JSONL file | `tabalyst report events.jsonl` | `events.report.html` beside the source |
|
|
98
|
+
| One Excel workbook | `tabalyst report sales.xlsx` | `sales.report.html` beside the source |
|
|
99
|
+
| Every table of a workbook | `tabalyst report shop.xlsx --all-collections` | `shop.costs.html`, `shop.sales.html`, ... beside the source |
|
|
100
|
+
| From a scan document | `tabalyst report --scan data.scan.json` | `data.html` beside the scan |
|
|
101
|
+
|
|
102
|
+
The simplest command keeps the source filename:
|
|
103
|
+
|
|
104
|
+
```console
|
|
105
|
+
tabalyst report customers.csv
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
It creates these files beside the source:
|
|
109
|
+
|
|
110
|
+
```text
|
|
111
|
+
customers.csv
|
|
112
|
+
customers.html
|
|
113
|
+
customers.json
|
|
114
|
+
executions.json
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Add `--details` to generate one self-contained HTML page per column, and `-o`
|
|
118
|
+
to choose another HTML filename for one source:
|
|
119
|
+
|
|
120
|
+
```console
|
|
121
|
+
tabalyst report customers.csv --details
|
|
122
|
+
tabalyst report customers.csv -o customer-analysis.html
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Existing outputs are never replaced silently: add `--force` when replacement is
|
|
126
|
+
intentional. A batch is checked for name collisions before any file is
|
|
127
|
+
processed, and a malformed file does not stop the others.
|
|
128
|
+
|
|
129
|
+
JSON, JSONL and Excel sources work the same way. When a JSON file or a workbook
|
|
130
|
+
holds several equally plausible collections, Tabalyst stops and prints one
|
|
131
|
+
command per candidate to copy, such as
|
|
132
|
+
`tabalyst report shop.xlsx --collection Costs`.
|
|
133
|
+
|
|
134
|
+
Useful options: `--delimiter`, `--encoding`, `--config`, `--workers`,
|
|
135
|
+
`--verbose`, `--quiet` and `--help`. `python -m tabalyst` accepts the same
|
|
136
|
+
commands.
|
|
137
|
+
|
|
138
|
+
Details: [Tabalyst Report](https://docs.tabalyst.com/report/),
|
|
139
|
+
[JSON and JSONL](https://docs.tabalyst.com/report/json/),
|
|
140
|
+
[Excel](https://docs.tabalyst.com/report/excel/),
|
|
141
|
+
[CSV batches and options](https://docs.tabalyst.com/report/csv/) and the
|
|
142
|
+
[`report` command reference](https://docs.tabalyst.com/reference/cli/report/).
|
|
143
|
+
|
|
144
|
+
### What the report analyzes
|
|
145
|
+
|
|
146
|
+
- Dataset dimensions, missing cells, duplicates, and quality observations.
|
|
147
|
+
- A family and a type for each column (identifier, text, date, boolean...),
|
|
148
|
+
with the evidence behind them, and the technical type with its error rates.
|
|
149
|
+
- A summary table with one row per column: its type, a sentence about its
|
|
150
|
+
values, the missing share, its Errors and Issues with a preview of each, and
|
|
151
|
+
its details; above it, the Column quality and Signals cards.
|
|
152
|
+
- Numeric, date, string-length, normalization, and value distributions.
|
|
153
|
+
- Distinct values, representative examples, date formats, and semantic types
|
|
154
|
+
such as enumerations, email addresses, phone numbers, and postal codes.
|
|
155
|
+
- CSV record widths, quoting, encoding, and delimiter configuration.
|
|
156
|
+
- A bounded raw-data preview while every record is analyzed.
|
|
157
|
+
|
|
158
|
+
The report is built on Tabalyst Scan; values of sensitive columns can be masked
|
|
159
|
+
or hidden. Ambiguous dates stay
|
|
160
|
+
ambiguous; the report shows the evidence of the column without applying it. The
|
|
161
|
+
HTML report is self-contained and works without a CDN or network connection.
|
|
162
|
+
The JSON profile contains the same canonical analysis result for scripts and
|
|
163
|
+
future Tabalyst tools. See
|
|
164
|
+
[how to read the report](https://docs.tabalyst.com/report/read-report/).
|
|
165
|
+
|
|
166
|
+
## Tabalyst Scan
|
|
167
|
+
|
|
168
|
+
Describe every field of a CSV, JSON, JSONL or Excel file in one JSON document:
|
|
169
|
+
|
|
170
|
+
```console
|
|
171
|
+
tabalyst scan customers.csv
|
|
172
|
+
tabalyst scan orders.json --collection "$.customers[]"
|
|
173
|
+
tabalyst scan sales.xlsx --collection Orders
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Scan reads a text file once as a stream, with bounded memory. An Excel sheet is
|
|
177
|
+
loaded into memory. It records for each
|
|
178
|
+
field its types, missing values, frequencies, statistics and the result of every
|
|
179
|
+
detector (dates, numbers with decimal commas, emails, URLs, phone numbers,
|
|
180
|
+
postal codes, currencies, UUIDs, IP addresses and more). It also writes
|
|
181
|
+
`customers.scan.html`, a page that shows the scan (`--no-html` skips it).
|
|
182
|
+
|
|
183
|
+
A second reading can provide exact distinct counts, frequencies, histograms,
|
|
184
|
+
medians, patterns, correlations and more, within the limits of your data. `--plan` shows what it would add and
|
|
185
|
+
cost without running it, and `--deep` runs it:
|
|
186
|
+
|
|
187
|
+
```console
|
|
188
|
+
tabalyst scan customers.csv --plan
|
|
189
|
+
tabalyst scan customers.csv --deep
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
`tabalyst report` decides by itself whether that second reading is worth its
|
|
193
|
+
cost, and says what it added. `tabalyst report` also reuses a stored scan
|
|
194
|
+
while the source is unchanged.
|
|
195
|
+
|
|
196
|
+
Details: [Scan CSV and JSON files](https://docs.tabalyst.com/scan/files/),
|
|
197
|
+
[the second reading](https://docs.tabalyst.com/scan/deep/),
|
|
198
|
+
[reading exact, estimated and limited results](https://docs.tabalyst.com/scan/reading-results/),
|
|
199
|
+
[scan storage and cache](https://docs.tabalyst.com/scan/cache/) and the
|
|
200
|
+
[scan format](https://docs.tabalyst.com/scan/format/).
|
|
201
|
+
|
|
202
|
+
## Tabalyst Inspect
|
|
203
|
+
|
|
204
|
+
A JSON file can hold several arrays, and an Excel workbook several sheets.
|
|
205
|
+
**Tabalyst Inspect** finds which array, sheet or table holds the records and
|
|
206
|
+
writes its answer in `<source>-inspect.json` beside the source:
|
|
207
|
+
|
|
208
|
+
```console
|
|
209
|
+
tabalyst inspect orders.json
|
|
210
|
+
tabalyst inspect sales.xlsx
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
The `config` section of that file holds the rules that `tabalyst scan` and
|
|
214
|
+
`tabalyst report` apply (collection, flatten settings, header row). Inspect is
|
|
215
|
+
optional: both commands inspect a source themselves, and stop with exit code
|
|
216
|
+
`2` and a list of candidates when the choice is ambiguous. Pass
|
|
217
|
+
`--collection` to choose.
|
|
218
|
+
|
|
219
|
+
Details: [Inspect JSON and JSONL files](https://docs.tabalyst.com/inspect/json/),
|
|
220
|
+
[Inspect Excel workbooks](https://docs.tabalyst.com/inspect/excel/) and the
|
|
221
|
+
[Inspect format](https://docs.tabalyst.com/inspect/format/).
|
|
222
|
+
|
|
223
|
+
## Tabalyst Sample
|
|
224
|
+
|
|
225
|
+
Create a smaller CSV without modifying the source:
|
|
226
|
+
|
|
227
|
+
```console
|
|
228
|
+
tabalyst sample customers.csv --sample-method random --rows 1000 --seed 42
|
|
229
|
+
tabalyst sample customers.csv --smart --rows 1000
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Methods are `first`, `last`, `random`, `stratified` and `smart`. A smart sample
|
|
233
|
+
keeps the diversity of the file (rare values, extremes, formats, odd cases)
|
|
234
|
+
instead of its proportions, and writes a report of what it covers, so never
|
|
235
|
+
estimate the population from it. Sampling reads records as a stream.
|
|
236
|
+
|
|
237
|
+
Details: [Tabalyst Sample](https://docs.tabalyst.com/sample/).
|
|
238
|
+
|
|
239
|
+
## Tabalyst Dedup
|
|
240
|
+
|
|
241
|
+
Find the rows that occur more than once in a CSV file, without modifying it:
|
|
242
|
+
|
|
243
|
+
```console
|
|
244
|
+
tabalyst dedup customers.csv
|
|
245
|
+
tabalyst dedup "*.csv" -d deduped
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Two rows are the same only when every cell is identical (case, spaces and
|
|
249
|
+
leading zeros count). Dedup writes, beside the source or in `-d`,
|
|
250
|
+
`customers.unique.csv` (every distinct row once, at its first place),
|
|
251
|
+
`customers.duplicates.csv` (each repeated row once) and, when a row occurs three
|
|
252
|
+
times or more, `customers.duplicates_all.csv` (every occurrence of the repeated
|
|
253
|
+
rows), plus `customers.dedup.json`, a report whose counts always add up. A file
|
|
254
|
+
without duplicate gets its report only. A batch also writes
|
|
255
|
+
`dedup.summary.json`; a file that is already processed and unchanged is skipped.
|
|
256
|
+
|
|
257
|
+
A result is exact or the file fails with a reason: the rows are kept in memory up
|
|
258
|
+
to a budget (`--memory-budget-mb`, 512 by default) and then on disk, a file may
|
|
259
|
+
hold 10,000,000 records by default (`--max-rows`), and nothing is ever
|
|
260
|
+
approximated. Dedup reads CSV files only and asks no question.
|
|
261
|
+
|
|
262
|
+
Details: [Tabalyst Dedup](https://docs.tabalyst.com/dedup/),
|
|
263
|
+
[batches and already processed files](https://docs.tabalyst.com/dedup/batch/),
|
|
264
|
+
[exactness, memory and limits](https://docs.tabalyst.com/dedup/limits/) and the
|
|
265
|
+
[`dedup` command reference](https://docs.tabalyst.com/reference/cli/dedup/).
|
|
266
|
+
|
|
267
|
+
## Tabalyst Generate
|
|
268
|
+
|
|
269
|
+
Generate synthetic CSV data from a packaged example (`crm`, `insurance` or
|
|
270
|
+
`computer`) or from a Generate package:
|
|
271
|
+
|
|
272
|
+
```console
|
|
273
|
+
tabalyst generate --example crm -o crm-contacts.csv
|
|
274
|
+
tabalyst generate --example insurance --rows 3000 -d insurance-output/
|
|
275
|
+
tabalyst generate --example computer --rows 10000 -d computer-output/
|
|
276
|
+
tabalyst generate --example insurance --rows 3000 --anomaly-profile dirty_realistic -d insurance-dirty/
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
An anomaly profile writes an altered CSV, a cell change log and a summary
|
|
280
|
+
beside the untouched clean CSV.
|
|
281
|
+
|
|
282
|
+
Details: [Tabalyst Generate](https://docs.tabalyst.com/generate/),
|
|
283
|
+
[`examples/generate/README.md`](examples/generate/README.md) and the
|
|
284
|
+
[Computer package contract](docs/dev/generate/computer.md).
|
|
285
|
+
|
|
286
|
+
## Python API
|
|
287
|
+
|
|
288
|
+
The same operations are available without the CLI:
|
|
289
|
+
|
|
290
|
+
```python
|
|
291
|
+
import tabalyst
|
|
292
|
+
|
|
293
|
+
result = tabalyst.analyze("customers.csv", "customers.html")
|
|
294
|
+
batch = tabalyst.generate_reports(["*.csv"], output_dir="reports")
|
|
295
|
+
sample = tabalyst.sample_csv("customers.csv", method="random", rows=1000, seed=42)
|
|
296
|
+
dedup = tabalyst.dedup_csv("customers.csv")
|
|
297
|
+
scan = tabalyst.scan("orders.json")
|
|
298
|
+
inspection = tabalyst.inspect("orders.json")
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Existing artifacts are never replaced silently: pass `force=True` when
|
|
302
|
+
replacement is intentional. Expected failures derive from
|
|
303
|
+
`tabalyst.TabalystError`. See the
|
|
304
|
+
[Python API reference](https://docs.tabalyst.com/reference/python-api/).
|
|
305
|
+
|
|
306
|
+
## Configuration
|
|
307
|
+
|
|
308
|
+
Configuration files are strict JSON, loaded only with `--config`:
|
|
309
|
+
|
|
310
|
+
```json
|
|
311
|
+
{
|
|
312
|
+
"scan": {
|
|
313
|
+
"csv": {"delimiter": ";", "encoding": "cp1252"},
|
|
314
|
+
"values": {"null_markers": ["N/A"]}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
Explicit CLI or Python arguments override the configuration file, which
|
|
320
|
+
overrides Tabalyst defaults. See the
|
|
321
|
+
[configuration reference](https://docs.tabalyst.com/reference/configuration/).
|
|
322
|
+
|
|
323
|
+
## Local-first behavior and current limits
|
|
324
|
+
|
|
325
|
+
Tabalyst performs analysis locally and adds no telemetry or remote processing.
|
|
326
|
+
Generated JSON and HTML may contain source values and should be shared
|
|
327
|
+
accordingly.
|
|
328
|
+
|
|
329
|
+
Reports, samples, and scans read CSV, JSON and JSONL files as a stream, with
|
|
330
|
+
memory bounded by configurable limits; Dedup keeps the rows it has seen in memory
|
|
331
|
+
up to a budget, then on disk. An Excel workbook is read by sheet into
|
|
332
|
+
memory, and a sheet above 1 GiB of XML is refused. See
|
|
333
|
+
[limitations](https://docs.tabalyst.com/about/limitations/).
|
|
334
|
+
|
|
335
|
+
## Examples and development
|
|
336
|
+
|
|
337
|
+
The repository includes small and synthetic public examples under `examples/`.
|
|
338
|
+
See the [examples README](https://github.com/loribel-labs/tabalyst/blob/main/examples/README.md)
|
|
339
|
+
for regeneration commands.
|
|
340
|
+
|
|
341
|
+
```console
|
|
342
|
+
python -m pytest
|
|
343
|
+
python -m ruff check .
|
|
344
|
+
python -m build
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Additional documentation:
|
|
348
|
+
|
|
349
|
+
- [Documentation site](https://docs.tabalyst.com/)
|
|
350
|
+
- [Architecture](https://github.com/loribel-labs/tabalyst/blob/main/docs/dev/architecture.md)
|
|
351
|
+
- [Release procedure](https://github.com/loribel-labs/tabalyst/blob/main/RELEASING.md)
|
|
352
|
+
|
|
353
|
+
Please report defects and feature requests through the
|
|
354
|
+
[GitHub issue tracker](https://github.com/loribel-labs/tabalyst/issues).
|
|
355
|
+
|
|
356
|
+
## For AI assistants
|
|
357
|
+
|
|
358
|
+
To get help from an AI assistant, paste this prompt into a chat that can read
|
|
359
|
+
web pages:
|
|
360
|
+
|
|
361
|
+
```text
|
|
362
|
+
Read the complete Tabalyst documentation at
|
|
363
|
+
https://docs.tabalyst.com/llms-full.txt, then help me use Tabalyst well.
|
|
364
|
+
Ask me what my data looks like and what I want to learn from it, then suggest
|
|
365
|
+
the right commands and options. Base your answers only on that documentation.
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
If the assistant cannot open links, paste the content of the file instead.
|
|
369
|
+
|
|
370
|
+
The documentation site publishes plain-text versions of its pages:
|
|
371
|
+
[llms.txt](https://docs.tabalyst.com/llms.txt) lists every page with a
|
|
372
|
+
one-line description, and
|
|
373
|
+
[llms-full.txt](https://docs.tabalyst.com/llms-full.txt) holds the whole
|
|
374
|
+
documentation in one file. Every page is also available as Markdown by adding
|
|
375
|
+
`.md` to its URL, for example
|
|
376
|
+
[report.md](https://docs.tabalyst.com/report.md).
|
|
377
|
+
|
|
378
|
+
## License
|
|
379
|
+
|
|
380
|
+
Tabalyst is released under the [Mozilla Public License 2.0](LICENSE).
|
|
381
|
+
|
|
382
|
+
Created by Gregory Borelli. Open source project by Loribel Labs.
|