mostlyright-data 0.13.0__tar.gz → 0.14.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/PKG-INFO +1 -1
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/pyproject.toml +1 -1
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/skills/mr-data-build/SKILL.md +47 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_run_worker.py +3 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_worker.py +411 -19
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/run_execution_v4.py +1 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/v4_recipe.py +153 -6
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/.gitignore +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/README.md +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/scripts/hatch_build.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/skills/mr-data-build/agents/openai.yaml +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/skills/mr-data-build/scripts/write_research_notebook.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/skills/mr-data-build/scripts/write_visual_run.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/LICENSE +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/PROVENANCE.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/__init__.pyi +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/_version.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/cal_rec_boxes/main.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/main.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_cls/utils.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/main.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_det/utils.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/main.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/typings.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/ch_ppocr_rec/utils.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/config.yaml +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/inference_engine/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/inference_engine/base.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/main.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/inference_engine/onnxruntime/provider_config.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/main.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_det_small.onnx +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/models/PP-OCRv6_rec_small.onnx +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/models/ch_ppocr_mobile_v2.0_cls_mobile.onnx +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/py.typed +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/utils/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/utils/load_image.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/utils/log.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/utils/model_resolver.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/utils/output.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/utils/parse_parameters.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/utils/process_img.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/utils/typings.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/_vendor/rapidocr/utils/utils.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/acquisition/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/acquisition/derived_credentials.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/acquisition/http.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/acquisition/parsing.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/acquisition/ranges.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/acquisition/result_download.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/acquisition/retention_admission.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/acquisition/sandbox.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/acquisition/url_policy.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/agent_runtime.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/assets/logo-ink.svg +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/backends/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/backends/pandas_backend.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/backends/polars_backend.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/backends/protocol.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/backends/reference.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/backends/registry.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/backends/restrictions.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/bounded_query.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/canonical.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/catalog_job.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/cli.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/coordinator.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/crosswalks.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/declared_checks.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/deploy.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/deploy_target.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/deployment_evidence.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/_worker_capability.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/agent_request.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/capture.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/lane.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/ocr.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/pdf.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/registry.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/sandbox.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/selections.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/tables.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/documents/vendor_rapidocr.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/events.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/fast_delimited.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/formats.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/governors.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_bootstrap.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_crawler.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_crawler_container_smoke.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_crawler_fetch.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_crawler_job.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_crawler_protocol.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_dataset.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_deploy.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_handoff.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_ingestion_contract.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_ingestion_job.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_ingestion_job_smoke.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_rlimit_as_container_smoke.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_session_container_smoke.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_session_worker.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_session_worker_job_smoke.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_stream_recorder_container_smoke.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_stream_recorder_job.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_stream_subscription_container_smoke.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_stream_subscription_worker.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ingestion/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ingestion/contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ingestion/faults.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ingestion/gcs_store.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ingestion/spool.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ingestion/store.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/inprocess_acquisition.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/key_seam.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/linux_process_boundary.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/local_contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/local_search/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/local_search/build_index.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/local_search/contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/local_search/query_trace.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/local_search/retrieval.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/local_search/sealed.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/local_search/service.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/CONTRACT.md +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/chrome.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/code_body.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/document.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/frame.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/interactive.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/markdown_body.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/mr_components.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/outputs_data.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/outputs_rich.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/outputs_source.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/outputs_stage.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/outputs_text.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/parse.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/status.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/nbrender/tokens.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/notebook.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/offline.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/operation_registry.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/operator_setup.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/pipeline.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/plan_graph.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/preparation/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/preparation/contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/preparation/engine.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/preparation/errors.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/preparation/gates.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/preparation/joins.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/preparation/profile.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/preparation/table.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/preparation/transforms.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/progress_events.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/_openpyxl.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/budgets.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/containers.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/delimited.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/geojson_vector.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/geopackage.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/geoparquet.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/grib2/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/grib2/admission.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/grib2/collection.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/grib2/collection_reader.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/grib2/decode.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/grib2/geometry.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/grib2/portable_math.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/grib_eccodes.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/html_tabular.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/html_web_extract.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/json_tabular.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/parquet_tabular.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/pcaxis_px.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/protobuf_tabular.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/raster/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/raster/_bytes.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/raster/decode.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/raster/family.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/raster/jpeg2000.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/raster/profiles.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/raster/rendered.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/raster/safe.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/raster/sentinel_safe.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/raster/tiff.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/registry.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/README.md +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.0.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/cities.csv.gz +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.gzip/1.1.0/cities_one_stream/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.tar/1.0.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/cities.tar +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.tar/1.1.0/cities_beside_a_directory_entry/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/cities.zip +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.0.0/cities_beside_a_second_member/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.1.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/dwd-station.zip +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/archive.zip/1.2.0/dwd_semicolon_station_member/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/cities.csv +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/an_ordinary_comma_separated_table/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/cities.tsv +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/delimited_text/1.0.0/quoted_fields_holding_the_delimiter/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/delimited_text/1.1.0/an_hourly_observation_table_served_as_plain_text/observations.csv +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/geojson.vector/1.0.0/czech_capital/places.geojson +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/geopackage.vector/1.0.0/epsg_4326_feature/places.gpkg +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/geoparquet.vector/1.0.0/primary_wkb_point/places.parquet +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/html.tabular/1.0.0/sanitized_table/table.html +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/html.web_extract/1.0.0/json_ld_scorecards/scorecards.html +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/image.rendered/1.0.0/tiny_png/tiny-rendered.png +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/json.tabular/1.0.0/nested_hourly_observations/stations.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/json.tabular/1.1.0/an_observation_stream_served_as_plain_text/observations.ndjson +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/eccodes-bufr4.bufr +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/meteorology.bufr/1.0.0/eccodes_bufr4_subset/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/meteorology.grib/1.0.0/eccodes_grib1_origin/regular-ll-surface.grib1 +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/microdata.sas_xpt/1.0.0/two_raw_columns/survey.xpt +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/microdata.spss_sav/1.0.0/two_raw_columns/survey.sav +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/microdata.stata_dta/1.0.0/two_raw_columns/stata.dta +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/official.pcaxis_px/1.0.0/population_by_region_and_year/population.px +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/official.sdmx_json/1.0.0/compact_population_series/population.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/parquet.tabular/1.0.0/two_columns/prices.parquet +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/gtfs-realtime.desc +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/protobuf.tabular/1.0.0/gtfs_realtime_trip_updates/trip-updates.pb +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/raster.geospatial/1.0.0/tiny_geotiff/tiny-geospatial.tif +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.goes_abi_l2/1.0.0/authored_cmi_window/goes-abi-l2-cmi-window.nc +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd/1.0.0/authored_b13_single_bzip2/himawari-b13-0101-bzip2.dat +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.himawari_hsd_complete/1.0.0/authored_b13_three_segment_scan/himawari-hsd-b13-complete.zip +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.msg_seviri_l15/1.0.0/authored_calibrated_complete_visir/msg-seviri-l15.zip +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.sentinel_safe/1.0.0/authored_b02_scl_window/sentinel-safe-b02-scl.zip +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/satellite.xrit_image/1.0.0/authored_complete_raw_counts/xrit-complete-image.zip +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.fits/1.0.0/tiny_primary_window/tiny-primary.fits +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf4/1.0.0/authored_temperature_window/temperature.hdf +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf5/1.0.0/authored_temperature_window/temperature.h5 +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_grid_temperature_window/nasa-hdfeos2-grid.hdf +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.hdf_eos2/1.0.0/authored_swath_temperature_window/nasa-hdfeos2-swath.hdf +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.netcdf/1.0.0/authored_classic_temperature_window/temperature-classic.nc +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/scientific.zarr/1.0.0/authored_v3_temperature_window/temperature-zarr-v3.zip +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/cities.xlsx +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/an_ordinary_table_beside_a_second_sheet/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.0.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/spreadsheet.xlsx/1.1.0/shares_the_workbook_had_already_computed/shares.xlsx +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/README.md +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/gfs_2m_temperature/gfs-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/1.0.0/hrrr_categorical_rain/hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/2.0.0/hrrr_2m_temperature/hrrr-2m-temperature.grib2 +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/weather.grib2/3.0.0/gfs_and_hrrr_categorical_rain/gfs-and-hrrr-categorical-rain.grib2 +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/plain_filing_fact/filing.xml +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/xbrl.facts/1.0.0/xml_inline_fact/filing.xhtml +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/pacer_rss_feed/feed.xml +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/sec_form_d_filing/filing.xml +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/agenda.xml +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples/xml.tabular/1.0.0/unified_agenda_extract/expected.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/samples.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/container.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/goes.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/hdf4_bridge.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/hdf5.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/native.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/netcdf.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/profiles.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/raw.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_arrays/zarr.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_catalog.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_segmented/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_segmented/asset_sets.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_segmented/formats.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_segmented/hsd.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_segmented/native.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_segmented/profiles.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_segmented/reader.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/scientific_segmented/xrit.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/sdmx_json.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/spreadsheet.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/statistical_microdata.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/tabular.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/vector.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/vector_wkb.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/xbrl_facts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/readers/xml_tabular.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/recipe.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/repair/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/repair/adapters.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/repair/contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/repair/coordinator.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/repair/errors.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/review.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/rowset.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/session_probes.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/signing.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/skill_assets.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/source_discovery.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/_adapter_steps.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/adapters.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/authenticated_https.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/authenticated_https_v2.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/authenticated_https_v3.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/cadence.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/cadence_emission.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/cadence_history.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/admission.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/authoring.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/authoring_policy.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/authoring_shards.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/bounded_io.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/channel.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/channel_client.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/coverage.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/delta.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/embedding.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/entry_v2.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/fill.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/fill_partitions.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/fill_staging.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/gating.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/generation_receipt.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/harvest/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/harvest/ckan.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/harvest/datagov_v4.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/harvest/protocol.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/harvest/sdmx.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/harvest/stac.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/health.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/hosted_catalog.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/identity_history.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/neural.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/packed_catalog.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/packed_retrieval.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/packed_writer.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/query_trace.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/recommend.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/retrieval.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/retrieval_manifest.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/rights_decisions.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/sealed.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/search.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/streaming_delta.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/catalog/update.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/collections.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/dataset.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/deletion.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/document_projection.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/fitness.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/governance.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/hosted.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/integration.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/range_reader.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/registry.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/rights_rule.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/source_cadence_vectors.v1.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/sports.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_capture_session.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connector.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.cursor-resume.v3.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-ed25519.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac384.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame-hmac512.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-frame.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header-rsa.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-header.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage-jwt.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-permessage.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-prelude.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-query.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subprotocol.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-subscribe.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/fixture.keyed-urlpath.v2.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_connectors/polymarket.clob-market.v1.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_credential.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_prelude.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_recorder.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_registry.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_rotation.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_segment_recorder.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_series.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_signing.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sources/stream_transport.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/sql_transform_engine.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/stream_subscription_feed.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/stream_subscription_sealer.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/stream_subscription_worker.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/stream_venue.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/stream_venue_staging.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/studio_boundary.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/studio_subscription_control.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/acquire.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/acquire_cancel.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/activity.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/approvals.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/commands.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/download.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/narrative.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/parity.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/probe.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/propose.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/recipe.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/research.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/router.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/runs.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/session.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/stream.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/stream_venue.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/transport.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4_artifacts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4_dataset_covers.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4_datasets.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4_handoff.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4_narrative.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4_query.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4_runs.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4_secrets.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4_stream.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/v4_tables.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/vocabulary.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/thin/workers.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ucum/TABLE-PIN.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ucum/ucum-subset.v1.json +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/unit_flow.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/units.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/approve.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/attendance.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/author_yaml.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/clarification.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/cloud_auth.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/approve.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/auth.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/author.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/catalog_author.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/catalog_fill.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/catalog_harvest.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/catalog_publish.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/catalog_search.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/catalog_update.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/clarify.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/deploy.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/deploy_dataset.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/deploy_plan.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/deploy_status.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/diff.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/document.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/index.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/inventory.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/list_builds.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/login.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/peek.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/plan_check.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/preflight.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/record.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/review_setup.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/search.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/show.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/commands/whoami.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/credential_native.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/credential_store.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/credentials.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/diffing.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/headline.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/hosted_acquisition.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/hosted_run_status.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/inventory.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/local_review.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/login.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/path_kind.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/peek.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/plain_file.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/plan_check.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/preflight.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/readers.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/remediation.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/render.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/ux/workload.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/v4_acquisition.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/v4_check_dialect.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/v4_document_pin.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/v4_reader_pin.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/v4_required_controls.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/v4_snapshot_artifact.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/v4_stream_recording.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/v4_transform.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/visual_run/__init__.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/visual_run/authoring.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/visual_run/contracts.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/visual_run/materialize.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/visual_run/observations.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/visual_run/query.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/visual_run/reducer.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/visual_run/sdk.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/visual_run/store.py +0 -0
- {mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/visual_run/transport.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mostlyright-data
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.14.0
|
|
4
4
|
Summary: Mostly Right CLI for reproducible, reviewed Parquet datasets
|
|
5
5
|
Project-URL: Homepage, https://mostlyright.md/
|
|
6
6
|
Project-URL: Documentation, https://mostlyright.md/docs/guides/cli/
|
|
@@ -525,6 +525,53 @@ which Studio fixes. Do it once per dataset, silently, and do not repeat it for a
|
|
|
525
525
|
subject changed. A dataset presented without a cover is a defect, the same as a one-line
|
|
526
526
|
description.
|
|
527
527
|
|
|
528
|
+
### Say what each column shows
|
|
529
|
+
|
|
530
|
+
Decide, per column, what a reader should see, and write it on the column as `presentation`. This is
|
|
531
|
+
your judgement about the data and nobody else can make it: the Builder can see the values but not
|
|
532
|
+
the question they were gathered to answer.
|
|
533
|
+
|
|
534
|
+
{
|
|
535
|
+
"name": "observed_on",
|
|
536
|
+
"type": "date",
|
|
537
|
+
"description": "The day the readings were taken.",
|
|
538
|
+
"presentation": {
|
|
539
|
+
"chart": "timeline",
|
|
540
|
+
"story": "The archive runs unbroken across three summer months.",
|
|
541
|
+
"bucket": "month"
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
`chart` says what to draw and is one of `histogram`, `timeline`, `top_values`, `share` and `none`.
|
|
546
|
+
Rules of thumb, and they hold most of the time:
|
|
547
|
+
|
|
548
|
+
- Identifiers, free text, notes, anything one row carries its own copy of — `none`. Counting the
|
|
549
|
+
twelve commonest case numbers says only that the sample is a sample.
|
|
550
|
+
- Measurements — `histogram`. Temperatures, prices, durations, counts of things.
|
|
551
|
+
- Event times — `timeline`, with `bucket` matched to the grain the rows arrive at: hourly readings
|
|
552
|
+
get `hour` or `day`, a decade of annual filings gets `year`.
|
|
553
|
+
- Categories — `top_values`. Cities, statuses, publishers, anything a reader would group by.
|
|
554
|
+
- Flags — `share`. One split bar, the true part against the false part.
|
|
555
|
+
|
|
556
|
+
`story` is the sentence a reader should be able to say after looking. Write it about the DATA —
|
|
557
|
+
"rain is concentrated in a handful of days and most days record almost none" — and never about the
|
|
558
|
+
chart, because the reader can see that it is a chart. Leave it out rather than write a caption.
|
|
559
|
+
|
|
560
|
+
Every member is optional, including `presentation` itself. A column that says nothing still gets a
|
|
561
|
+
chart: the Builder picks one from the type you declared and the dataset page says the choice was
|
|
562
|
+
its own rather than yours. Say something anyway wherever you have an opinion — a column you
|
|
563
|
+
thought about reads differently from one nobody did.
|
|
564
|
+
|
|
565
|
+
Three things can make the Builder replace the chart you asked for, and each of them drops your
|
|
566
|
+
`story` with it: a column that turns out to be entirely missing, an event time spanning more than
|
|
567
|
+
twelve years (no grain draws that in twelve buckets), and a build whose sealed output type
|
|
568
|
+
contradicts what the column declared. A `bucket` the span outgrew is not one of them — the grain
|
|
569
|
+
is widened and the chart stays yours. So `none` is the right answer to write for a column you
|
|
570
|
+
already know has no shape, and a wide date range is worth a thought before you promise a timeline.
|
|
571
|
+
|
|
572
|
+
[The recipe document](../../docs/RECIPE-DOCUMENT.md) carries which types each chart admits, what
|
|
573
|
+
the defaults are, and the two members only some charts take.
|
|
574
|
+
|
|
528
575
|
### What the statement must actually return
|
|
529
576
|
|
|
530
577
|
Every acquired source is bound as all-text CSV — `read_csv(header = true, auto_detect = false,
|
|
@@ -1162,6 +1162,9 @@ def v4_artifact_payloads(
|
|
|
1162
1162
|
workspace_id=job.workspace_id,
|
|
1163
1163
|
run_id=job.run_id,
|
|
1164
1164
|
candidate_digest=candidate_digest,
|
|
1165
|
+
# The parsed document, not a second read of the bytes: the recipe is already in hand
|
|
1166
|
+
# here, and a profile that re-read it could disagree with the run that produced it.
|
|
1167
|
+
declared_columns={column.name: column for column in job.recipe.table.columns},
|
|
1165
1168
|
),
|
|
1166
1169
|
"preview": _table_preview(snapshot["data/table.parquet"], candidate_digest),
|
|
1167
1170
|
"receipt": _receipt_document(job, verified, coverage, raw_members, snapshot),
|
{mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/hosted_worker.py
RENAMED
|
@@ -32,11 +32,11 @@ from collections.abc import Callable, Iterator, Mapping, Sequence
|
|
|
32
32
|
from concurrent.futures import Future, ThreadPoolExecutor
|
|
33
33
|
from contextlib import contextmanager
|
|
34
34
|
from dataclasses import asdict, dataclass, replace
|
|
35
|
-
from datetime import UTC, date, datetime
|
|
35
|
+
from datetime import UTC, date, datetime, timedelta
|
|
36
36
|
from decimal import Decimal
|
|
37
37
|
from pathlib import Path, PurePosixPath
|
|
38
38
|
from types import MappingProxyType
|
|
39
|
-
from typing import Any, BinaryIO, ClassVar, NoReturn, Protocol
|
|
39
|
+
from typing import TYPE_CHECKING, Any, BinaryIO, ClassVar, NoReturn, Protocol
|
|
40
40
|
from urllib.parse import parse_qsl, urlsplit
|
|
41
41
|
from uuid import UUID, uuid5
|
|
42
42
|
|
|
@@ -173,6 +173,11 @@ from mostlyright.data_harness.studio_boundary import (
|
|
|
173
173
|
studio_wire_dict,
|
|
174
174
|
)
|
|
175
175
|
|
|
176
|
+
if TYPE_CHECKING:
|
|
177
|
+
# Type-only, and it has to be: ``v4_recipe`` reaches ``run_execution_v4``, which reaches this
|
|
178
|
+
# module, so a runtime import would close a cycle. The v4 caller passes the parsed objects in.
|
|
179
|
+
from mostlyright.data_harness.v4_recipe import V4Column
|
|
180
|
+
|
|
176
181
|
JOB_SCHEMA = "mostlyright-hosted-worker-job.v3"
|
|
177
182
|
AUTHENTICATED_JOB_SCHEMA = "mostlyright-hosted-worker-job.v4"
|
|
178
183
|
GENERIC_AUTHENTICATED_JOB_SCHEMA = "mostlyright-hosted-worker-job.v5"
|
|
@@ -481,6 +486,87 @@ RELEASED_COLUMN_PROFILE_SCHEMA = "mostlyright.released-column-profile.v1"
|
|
|
481
486
|
RELEASED_COLUMN_PROFILE_MEDIA_TYPE = "application/vnd.mostlyright.released-column-profile+json"
|
|
482
487
|
MAX_RELEASED_COLUMN_PROFILE_BYTES = 4 * 1024 * 1024
|
|
483
488
|
MAX_RELEASED_DISTRIBUTION_ITEMS = 12
|
|
489
|
+
|
|
490
|
+
#: The grain one timeline bin covers, FINEST FIRST rather than sorted, because a default reads the
|
|
491
|
+
#: sequence in this direction and picks the first grain the observed span fits inside.
|
|
492
|
+
#:
|
|
493
|
+
#: RESTATED HERE RATHER THAN IMPORTED, and held equal to the recipe's by test -- the same
|
|
494
|
+
#: arrangement ``local_contracts`` already has for the source bindings, and for the same reason: a
|
|
495
|
+
#: module-scope import of ``v4_recipe`` would close a cycle, since it reaches ``run_execution_v4``
|
|
496
|
+
#: which reaches this module.
|
|
497
|
+
TIMELINE_BUCKETS = ("hour", "day", "week", "month", "quarter", "year")
|
|
498
|
+
|
|
499
|
+
#: How many bins a chart gets when the document asked for no particular number. The ceiling is
|
|
500
|
+
#: the item ceiling above, so a chart can never carry more marks than a distribution may hold.
|
|
501
|
+
DEFAULT_DISTRIBUTION_BINS = 8
|
|
502
|
+
|
|
503
|
+
#: Which chart each DECLARED column type is drawn as when the recipe named no chart for it.
|
|
504
|
+
#:
|
|
505
|
+
#: The declared type is the one to read wherever there is one: it is what the agent meant, and the
|
|
506
|
+
#: engine narrows several declarations onto one sealed type. ``json`` is the case that makes the
|
|
507
|
+
#: difference visible -- it seals as text, and counting documents as if they were category labels
|
|
508
|
+
#: is the mistake the recipe parser refuses to let anyone ask for explicitly.
|
|
509
|
+
#:
|
|
510
|
+
#: ``string`` is absent from both maps on purpose: it is the one type whose honest default depends
|
|
511
|
+
#: on the values rather than on the type, because a country name repeated across a million rows is
|
|
512
|
+
#: a category and a case identifier is not, and nothing but the observed spread separates them.
|
|
513
|
+
_DEFAULT_CHART_BY_DECLARED_TYPE = {
|
|
514
|
+
"boolean": "share",
|
|
515
|
+
"date": "timeline",
|
|
516
|
+
"decimal": "histogram",
|
|
517
|
+
"float": "histogram",
|
|
518
|
+
"integer": "histogram",
|
|
519
|
+
"json": "none",
|
|
520
|
+
"timestamp": "timeline",
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
#: The same table against the type the ENGINE sealed, which is what the v3 producer path has: it
|
|
524
|
+
#: carries no recipe, so there is no declaration to read and the sealed type is the whole of what
|
|
525
|
+
#: is known about the column.
|
|
526
|
+
_DEFAULT_CHART_BY_ENGINE_TYPE = {
|
|
527
|
+
"boolean": "share",
|
|
528
|
+
"date": "timeline",
|
|
529
|
+
"decimal": "histogram",
|
|
530
|
+
"float64": "histogram",
|
|
531
|
+
"int64": "histogram",
|
|
532
|
+
"null": "none",
|
|
533
|
+
"timestamp_utc": "timeline",
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
#: The widest a string column's values may spread before counting them stops meaning anything.
|
|
537
|
+
#: Either bound admits the count: at most twelve distinct values is a category list whatever the
|
|
538
|
+
#: row count, and at most half the rows being distinct is a category list however many there are.
|
|
539
|
+
MAX_TOP_VALUES_DISTINCT_COUNT = MAX_RELEASED_DISTRIBUTION_ITEMS
|
|
540
|
+
MAX_TOP_VALUES_DISTINCT_RATE_PPM = 500_000
|
|
541
|
+
|
|
542
|
+
#: Which distribution each chart is drawn from. ``share`` is a PRESENTATION of two counted values
|
|
543
|
+
#: rather than a shape of its own: the frame draws one split bar, and what it draws from is the
|
|
544
|
+
#: same value counts a category list is drawn from.
|
|
545
|
+
_DISTRIBUTION_KIND_BY_CHART = {
|
|
546
|
+
"histogram": "histogram",
|
|
547
|
+
"none": "none",
|
|
548
|
+
"share": "value_counts",
|
|
549
|
+
"timeline": "timeline",
|
|
550
|
+
"top_values": "value_counts",
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
#: Every engine type this profile can describe. ``string`` is missing from the default map above
|
|
554
|
+
#: because its default is decided by the values rather than by its type; it belongs here because
|
|
555
|
+
#: every chart that admits any type at all admits it.
|
|
556
|
+
_PROFILE_ENGINE_TYPES = (*_DEFAULT_CHART_BY_ENGINE_TYPE, "string")
|
|
557
|
+
|
|
558
|
+
#: Which engine types each chart can be drawn from at all. The recipe parser already refuses a
|
|
559
|
+
#: chart the DECLARED type cannot carry; this is the same rule stated against the type the engine
|
|
560
|
+
#: actually sealed, so a declaration that outlived a plan whose output type moved falls back to the
|
|
561
|
+
#: default rather than crashing inside a binning loop.
|
|
562
|
+
_CHART_ENGINE_TYPES = {
|
|
563
|
+
"histogram": ("decimal", "float64", "int64"),
|
|
564
|
+
"none": _PROFILE_ENGINE_TYPES,
|
|
565
|
+
"share": ("boolean",),
|
|
566
|
+
"timeline": ("date", "timestamp_utc"),
|
|
567
|
+
"top_values": _PROFILE_ENGINE_TYPES,
|
|
568
|
+
}
|
|
569
|
+
|
|
484
570
|
MAX_HOSTED_DOWNLOAD_BYTES = (
|
|
485
571
|
pipeline.MAX_CANDIDATE_BYTES + MAX_CANDIDATE_ENVELOPE_BYTES + MAX_TABLE_PREVIEW_BYTES
|
|
486
572
|
)
|
|
@@ -4948,7 +5034,9 @@ def _nearest_rank_summary(values: list[int | float | Decimal]) -> dict[str, str]
|
|
|
4948
5034
|
}
|
|
4949
5035
|
|
|
4950
5036
|
|
|
4951
|
-
def _histogram_distribution(
|
|
5037
|
+
def _histogram_distribution(
|
|
5038
|
+
values: list[int | float | Decimal], distinct_count: int, *, bins: int | None = None
|
|
5039
|
+
) -> dict[str, Any]:
|
|
4952
5040
|
if not values:
|
|
4953
5041
|
return {
|
|
4954
5042
|
"kind": "histogram",
|
|
@@ -4962,7 +5050,7 @@ def _histogram_distribution(values: list[int | float], distinct_count: int) -> d
|
|
|
4962
5050
|
if minimum == maximum:
|
|
4963
5051
|
items = [{"label": _profile_value_text(minimum), "count": len(values)}]
|
|
4964
5052
|
else:
|
|
4965
|
-
bins =
|
|
5053
|
+
bins = DEFAULT_DISTRIBUTION_BINS if bins is None else bins
|
|
4966
5054
|
counts = [0] * bins
|
|
4967
5055
|
items: list[dict[str, Any]] = []
|
|
4968
5056
|
if all(isinstance(value, int) for value in values):
|
|
@@ -5050,6 +5138,203 @@ def _value_count_distribution(values: list[Any]) -> tuple[int, dict[str, Any]]:
|
|
|
5050
5138
|
}
|
|
5051
5139
|
|
|
5052
5140
|
|
|
5141
|
+
def _none_distribution(distinct_count: int, observed_count: int) -> dict[str, Any]:
|
|
5142
|
+
"""The distribution of a column that is drawn as nothing, and says so.
|
|
5143
|
+
|
|
5144
|
+
An identifier or a paragraph of free text has a shape, and every shape a chart could draw over
|
|
5145
|
+
it would be an artefact of which rows arrived rather than a fact about the data. So the frame
|
|
5146
|
+
carries no marks at all and the counts say why: everything distinct is hidden, and nothing is
|
|
5147
|
+
shown.
|
|
5148
|
+
"""
|
|
5149
|
+
|
|
5150
|
+
return {
|
|
5151
|
+
"kind": "none",
|
|
5152
|
+
"status": "exact_all_rows",
|
|
5153
|
+
"items": [],
|
|
5154
|
+
"shown_distinct_count": 0,
|
|
5155
|
+
"hidden_distinct_count": distinct_count,
|
|
5156
|
+
"hidden_value_count": observed_count,
|
|
5157
|
+
}
|
|
5158
|
+
|
|
5159
|
+
|
|
5160
|
+
_EPOCH = datetime(1970, 1, 1, tzinfo=UTC)
|
|
5161
|
+
_ONE_HOUR = timedelta(hours=1)
|
|
5162
|
+
|
|
5163
|
+
|
|
5164
|
+
def _as_utc(value: date | datetime) -> datetime:
|
|
5165
|
+
"""One instant for a value that may be a day or a moment.
|
|
5166
|
+
|
|
5167
|
+
A ``date`` column and a ``timestamp_utc`` column reach this lane as different Python types and
|
|
5168
|
+
are bucketed by the same arithmetic, so a day becomes the instant it starts. A moment that
|
|
5169
|
+
arrives with a zone is converted rather than stripped: dropping a ``+02:00`` would move an
|
|
5170
|
+
event across a bucket boundary twice a year.
|
|
5171
|
+
"""
|
|
5172
|
+
|
|
5173
|
+
if isinstance(value, datetime):
|
|
5174
|
+
return value.astimezone(UTC) if value.tzinfo is not None else value.replace(tzinfo=UTC)
|
|
5175
|
+
return datetime(value.year, value.month, value.day, tzinfo=UTC)
|
|
5176
|
+
|
|
5177
|
+
|
|
5178
|
+
def _bucket_ordinal(moment: datetime, bucket: str) -> int:
|
|
5179
|
+
"""Which bucket one instant falls in, counted so that consecutive buckets are consecutive.
|
|
5180
|
+
|
|
5181
|
+
An ordinal rather than a start time, because what the timeline needs is the ability to walk
|
|
5182
|
+
from the first observed bucket to the last WITHOUT skipping the empty ones -- and calendar
|
|
5183
|
+
months and quarters are not a fixed number of seconds apart, so stepping by a duration would
|
|
5184
|
+
drift.
|
|
5185
|
+
"""
|
|
5186
|
+
|
|
5187
|
+
if bucket == "hour":
|
|
5188
|
+
# Floor division on the timedelta, never `int(total_seconds())`: truncation toward zero
|
|
5189
|
+
# would put the last fractional second before the epoch in the hour after it.
|
|
5190
|
+
return (moment - _EPOCH) // _ONE_HOUR
|
|
5191
|
+
if bucket == "day":
|
|
5192
|
+
return moment.date().toordinal()
|
|
5193
|
+
if bucket == "week":
|
|
5194
|
+
day = moment.date().toordinal()
|
|
5195
|
+
return (day - moment.weekday() - 1) // 7
|
|
5196
|
+
if bucket == "month":
|
|
5197
|
+
return moment.year * 12 + moment.month - 1
|
|
5198
|
+
if bucket == "quarter":
|
|
5199
|
+
return moment.year * 4 + (moment.month - 1) // 3
|
|
5200
|
+
return moment.year
|
|
5201
|
+
|
|
5202
|
+
|
|
5203
|
+
def _bucket_label(ordinal: int, bucket: str) -> str:
|
|
5204
|
+
"""The bucket's START, in ISO-8601, and never a range.
|
|
5205
|
+
|
|
5206
|
+
A label naming only where a bucket begins is what lets a reader put two timelines beside each
|
|
5207
|
+
other: ranges would have to agree about whether the end is inclusive, and one that disagreed
|
|
5208
|
+
would look like a different bucket rather than a different convention.
|
|
5209
|
+
"""
|
|
5210
|
+
|
|
5211
|
+
if bucket == "hour":
|
|
5212
|
+
return (_EPOCH + timedelta(hours=ordinal)).strftime("%Y-%m-%dT%H:00Z")
|
|
5213
|
+
if bucket == "day":
|
|
5214
|
+
return date.fromordinal(ordinal).isoformat()
|
|
5215
|
+
if bucket == "week":
|
|
5216
|
+
return date.fromordinal(ordinal * 7 + 1).isoformat()
|
|
5217
|
+
if bucket == "month":
|
|
5218
|
+
return date(ordinal // 12, ordinal % 12 + 1, 1).isoformat()
|
|
5219
|
+
if bucket == "quarter":
|
|
5220
|
+
return date(ordinal // 4, (ordinal % 4) * 3 + 1, 1).isoformat()
|
|
5221
|
+
return date(ordinal, 1, 1).isoformat()
|
|
5222
|
+
|
|
5223
|
+
|
|
5224
|
+
def _timeline_bucket(
|
|
5225
|
+
earliest: datetime, latest: datetime, declared: str | None, bins: int | None
|
|
5226
|
+
) -> str | None:
|
|
5227
|
+
"""The grain this column is drawn at, or ``None`` when no grain in the vocabulary fits.
|
|
5228
|
+
|
|
5229
|
+
THE DEFAULT IS THE FINEST GRAIN THAT FITS, not the one that reads most naturally: a week of
|
|
5230
|
+
readings drawn per year is one bar, and a bar is not a timeline. A DECLARED grain is used when
|
|
5231
|
+
the observed span fits inside it and widened when it does not -- a document written before the
|
|
5232
|
+
data arrived cannot know how far the values would spread, and a chart with two hundred marks is
|
|
5233
|
+
not the chart it asked for either.
|
|
5234
|
+
|
|
5235
|
+
``bins`` LOWERS THE CEILING AND CANNOT TURN THE CHART OFF. It is a preference for a coarser
|
|
5236
|
+
reading, so a span that fits under it is drawn under it; a span that fits under no grain at
|
|
5237
|
+
that ceiling is drawn at the finest grain that fits under the profile's own twelve. Letting a
|
|
5238
|
+
stated four make a five-year series undrawable would turn a request to read a chart differently
|
|
5239
|
+
into a request not to have one.
|
|
5240
|
+
|
|
5241
|
+
``None`` is therefore reached only by a span twelve buckets of the coarsest grain cannot cover
|
|
5242
|
+
-- more than twelve years -- and the caller draws nothing rather than a timeline whose buckets
|
|
5243
|
+
are a lie about their own width.
|
|
5244
|
+
|
|
5245
|
+
THE TWO ENDS DECIDE, not every value. ``_bucket_ordinal`` rises with the moment, so the
|
|
5246
|
+
earliest and latest values bound the bucket count at every grain; trying six grains over ten
|
|
5247
|
+
million rows would otherwise walk the column six times to learn what two values already say.
|
|
5248
|
+
"""
|
|
5249
|
+
|
|
5250
|
+
start = TIMELINE_BUCKETS.index(declared) if declared else 0
|
|
5251
|
+
ceilings = (
|
|
5252
|
+
(MAX_RELEASED_DISTRIBUTION_ITEMS,)
|
|
5253
|
+
if bins is None
|
|
5254
|
+
else (bins, MAX_RELEASED_DISTRIBUTION_ITEMS)
|
|
5255
|
+
)
|
|
5256
|
+
for ceiling in ceilings:
|
|
5257
|
+
for bucket in TIMELINE_BUCKETS[start:]:
|
|
5258
|
+
width = _bucket_ordinal(latest, bucket) - _bucket_ordinal(earliest, bucket) + 1
|
|
5259
|
+
if width <= ceiling:
|
|
5260
|
+
return bucket
|
|
5261
|
+
return None
|
|
5262
|
+
|
|
5263
|
+
|
|
5264
|
+
def _timeline_distribution(
|
|
5265
|
+
values: list[date | datetime], distinct_count: int, bucket: str
|
|
5266
|
+
) -> dict[str, Any]:
|
|
5267
|
+
"""Contiguous buckets from the first observed one to the last, empty ones included.
|
|
5268
|
+
|
|
5269
|
+
THE EMPTY BUCKETS ARE THE POINT. A distribution that listed only the buckets something landed
|
|
5270
|
+
in would draw a gap as if it were not there, and "nothing arrived for three days" is usually
|
|
5271
|
+
the most interesting thing a timeline has to say.
|
|
5272
|
+
|
|
5273
|
+
The counter is fed from a generator rather than from a list of converted moments: a column may
|
|
5274
|
+
carry ten million rows, and a second full-length list of freshly allocated instants beside the
|
|
5275
|
+
one already in memory is peak memory this lane has no use for.
|
|
5276
|
+
"""
|
|
5277
|
+
|
|
5278
|
+
counts = Counter(_bucket_ordinal(_as_utc(value), bucket) for value in values)
|
|
5279
|
+
items = [
|
|
5280
|
+
{"label": _bucket_label(ordinal, bucket), "count": counts[ordinal]}
|
|
5281
|
+
for ordinal in (range(min(counts), max(counts) + 1) if counts else ())
|
|
5282
|
+
]
|
|
5283
|
+
return {
|
|
5284
|
+
"kind": "timeline",
|
|
5285
|
+
"status": "exact_all_rows",
|
|
5286
|
+
"bucket": bucket,
|
|
5287
|
+
"items": items,
|
|
5288
|
+
"shown_distinct_count": distinct_count,
|
|
5289
|
+
"hidden_distinct_count": 0,
|
|
5290
|
+
"hidden_value_count": 0,
|
|
5291
|
+
}
|
|
5292
|
+
|
|
5293
|
+
|
|
5294
|
+
def _default_chart(
|
|
5295
|
+
engine_type: str, declared_type: str | None, distinct_count: int, distinct_rate_ppm: int
|
|
5296
|
+
) -> str:
|
|
5297
|
+
"""What a column is drawn as when the recipe named no chart for it.
|
|
5298
|
+
|
|
5299
|
+
THE DECLARED TYPE IS READ WHEREVER THERE IS ONE. It is what the agent meant, and the engine
|
|
5300
|
+
narrows several declarations onto one sealed type -- ``json`` most visibly, which seals as text
|
|
5301
|
+
and would otherwise be counted as if its documents were category labels. The v3 producer path
|
|
5302
|
+
carries no recipe, passes ``None``, and reads the sealed type alone.
|
|
5303
|
+
|
|
5304
|
+
A DECLARATION THE SEALED TYPE CONTRADICTS IS NOT FOLLOWED. The engine holds a build to its
|
|
5305
|
+
declared output types, so the two agreeing is the ordinary case; where they do not, what
|
|
5306
|
+
arrived is what can honestly be drawn, and binning text would be a crash rather than a chart.
|
|
5307
|
+
"""
|
|
5308
|
+
|
|
5309
|
+
if declared_type is not None:
|
|
5310
|
+
wanted = _from_type(
|
|
5311
|
+
_DEFAULT_CHART_BY_DECLARED_TYPE, declared_type, distinct_count, distinct_rate_ppm
|
|
5312
|
+
)
|
|
5313
|
+
if engine_type in _CHART_ENGINE_TYPES[wanted]:
|
|
5314
|
+
return wanted
|
|
5315
|
+
return _from_type(_DEFAULT_CHART_BY_ENGINE_TYPE, engine_type, distinct_count, distinct_rate_ppm)
|
|
5316
|
+
|
|
5317
|
+
|
|
5318
|
+
def _from_type(
|
|
5319
|
+
charts: Mapping[str, str], name: str, distinct_count: int, distinct_rate_ppm: int
|
|
5320
|
+
) -> str:
|
|
5321
|
+
"""One type's default, with the one rule that is a measurement rather than a lookup.
|
|
5322
|
+
|
|
5323
|
+
Text is the only type whose honest default depends on the values: a count of the twelve
|
|
5324
|
+
commonest case identifiers says only that the sample is a sample, and a count of the twelve
|
|
5325
|
+
commonest countries is the whole column.
|
|
5326
|
+
"""
|
|
5327
|
+
|
|
5328
|
+
if name != "string":
|
|
5329
|
+
return charts.get(name, "none")
|
|
5330
|
+
if (
|
|
5331
|
+
distinct_count <= MAX_TOP_VALUES_DISTINCT_COUNT
|
|
5332
|
+
or distinct_rate_ppm <= MAX_TOP_VALUES_DISTINCT_RATE_PPM
|
|
5333
|
+
):
|
|
5334
|
+
return "top_values"
|
|
5335
|
+
return "none"
|
|
5336
|
+
|
|
5337
|
+
|
|
5053
5338
|
def _column_lineage(lineage: Any, name: str) -> tuple[list[dict[str, str]], list[str]]:
|
|
5054
5339
|
if not isinstance(lineage, dict):
|
|
5055
5340
|
raise HostedWorkerError("COLUMN_PROFILE_INVALID", "sealed lineage is not an object")
|
|
@@ -5103,6 +5388,92 @@ def _column_lineage(lineage: Any, name: str) -> tuple[list[dict[str, str]], list
|
|
|
5103
5388
|
return source_inputs, list(operations)
|
|
5104
5389
|
|
|
5105
5390
|
|
|
5391
|
+
def _column_presentation(
|
|
5392
|
+
engine_type: str,
|
|
5393
|
+
declared: V4Column | None,
|
|
5394
|
+
*,
|
|
5395
|
+
values: list[Any],
|
|
5396
|
+
distinct_count: int,
|
|
5397
|
+
distinct_rate_ppm: int,
|
|
5398
|
+
) -> tuple[dict[str, Any], dict[str, Any]]:
|
|
5399
|
+
"""Decide what one column is drawn as, and draw it.
|
|
5400
|
+
|
|
5401
|
+
**THE DOCUMENT DECIDES AND THE PRODUCER FALLS BACK.** An agent that wrote the recipe knows
|
|
5402
|
+
what the column is for and says so; nothing here is inferred where a declaration exists. Where
|
|
5403
|
+
none exists, the producer picks the honest chart for the type rather than leaving the column
|
|
5404
|
+
blank, and the echo records which of the two happened -- a reader who cannot tell a decision
|
|
5405
|
+
from a default cannot tell how much the chart is worth.
|
|
5406
|
+
|
|
5407
|
+
A declaration is followed as far as the values allow and no further. A declared grain the
|
|
5408
|
+
observed span outgrew is widened to the finest grain that fits, which leaves the chart the
|
|
5409
|
+
document asked for intact. A chart the sealed type cannot carry, a timeline over a span no
|
|
5410
|
+
grain in the vocabulary covers, and a column where nothing at all was observed are the three
|
|
5411
|
+
ways a declared chart is DISCARDED rather than adjusted.
|
|
5412
|
+
|
|
5413
|
+
``source`` SAYS WHETHER THE CHART THAT WAS DRAWN IS THE ONE THE DOCUMENT ASKED FOR, and it is
|
|
5414
|
+
derived from exactly that comparison rather than assigned by whichever branch got there. A
|
|
5415
|
+
discarded declaration takes its story with it: the sentence was written about a chart nobody
|
|
5416
|
+
is looking at, and a caption under the wrong picture is worse than no caption. What grain a
|
|
5417
|
+
timeline was drawn at is on the DISTRIBUTION, which is the only place a reader reads it from
|
|
5418
|
+
and is why the echo carries no second copy of it.
|
|
5419
|
+
|
|
5420
|
+
**NOTHING OBSERVED IS DRAWN AS NOTHING, WHATEVER THE TYPE.** An all-null column has no shape,
|
|
5421
|
+
and an empty histogram or a timeline of no buckets invites a reader to look for one.
|
|
5422
|
+
"""
|
|
5423
|
+
|
|
5424
|
+
presented = declared.presentation if declared is not None else None
|
|
5425
|
+
# ``wanted`` is the declaration where the drawing can honour it and ``None`` everywhere else,
|
|
5426
|
+
# so the chart, the bins and the grain read one answer rather than three conditions.
|
|
5427
|
+
wanted = (
|
|
5428
|
+
presented
|
|
5429
|
+
if presented is not None and engine_type in _CHART_ENGINE_TYPES[presented.chart]
|
|
5430
|
+
else None
|
|
5431
|
+
)
|
|
5432
|
+
chart = (
|
|
5433
|
+
wanted.chart
|
|
5434
|
+
if wanted is not None
|
|
5435
|
+
else _default_chart(
|
|
5436
|
+
engine_type,
|
|
5437
|
+
declared.type if declared is not None else None,
|
|
5438
|
+
distinct_count,
|
|
5439
|
+
distinct_rate_ppm,
|
|
5440
|
+
)
|
|
5441
|
+
)
|
|
5442
|
+
bins = wanted.bins if wanted is not None else None
|
|
5443
|
+
bucket: str | None = None
|
|
5444
|
+
if not values:
|
|
5445
|
+
chart = "none"
|
|
5446
|
+
elif chart == "timeline":
|
|
5447
|
+
# The two ends, converted, and nothing else held: the grain is a function of the span.
|
|
5448
|
+
bucket = _timeline_bucket(
|
|
5449
|
+
_as_utc(min(values)),
|
|
5450
|
+
_as_utc(max(values)),
|
|
5451
|
+
wanted.bucket if wanted is not None else None,
|
|
5452
|
+
bins,
|
|
5453
|
+
)
|
|
5454
|
+
if bucket is None:
|
|
5455
|
+
chart = "none"
|
|
5456
|
+
|
|
5457
|
+
kind = _DISTRIBUTION_KIND_BY_CHART[chart]
|
|
5458
|
+
if kind == "timeline" and bucket is not None:
|
|
5459
|
+
distribution = _timeline_distribution(values, distinct_count, bucket)
|
|
5460
|
+
elif kind == "histogram":
|
|
5461
|
+
distribution = _histogram_distribution(values, distinct_count, bins=bins)
|
|
5462
|
+
elif kind == "none":
|
|
5463
|
+
distribution = _none_distribution(distinct_count, len(values))
|
|
5464
|
+
else:
|
|
5465
|
+
distribution = _value_count_distribution(values)[1]
|
|
5466
|
+
|
|
5467
|
+
asked_for = presented is not None and presented.chart == chart
|
|
5468
|
+
presentation: dict[str, Any] = {
|
|
5469
|
+
"chart": chart,
|
|
5470
|
+
"source": "declared" if asked_for else "default",
|
|
5471
|
+
}
|
|
5472
|
+
if asked_for and presented is not None and presented.story is not None:
|
|
5473
|
+
presentation["story"] = presented.story
|
|
5474
|
+
return presentation, distribution
|
|
5475
|
+
|
|
5476
|
+
|
|
5106
5477
|
def _released_column_profile(
|
|
5107
5478
|
profile_raw: bytes,
|
|
5108
5479
|
lineage_raw: bytes,
|
|
@@ -5111,9 +5482,18 @@ def _released_column_profile(
|
|
|
5111
5482
|
workspace_id: UUID,
|
|
5112
5483
|
run_id: UUID,
|
|
5113
5484
|
candidate_digest: str,
|
|
5485
|
+
declared_columns: Mapping[str, V4Column] = MappingProxyType({}),
|
|
5114
5486
|
) -> bytes:
|
|
5115
5487
|
"""Build the bounded, all-row notebook-equivalent analytical projection.
|
|
5116
5488
|
|
|
5489
|
+
``declared_columns`` is the recipe's own table plan keyed by column name, passed in by the v4
|
|
5490
|
+
caller that already holds the parsed document rather than read back out of the job here: a
|
|
5491
|
+
second reader of the same document is a second chance for the two to disagree. The parsed
|
|
5492
|
+
column carries both halves the chart needs -- what the agent asked to be shown, and the type it
|
|
5493
|
+
declared, which is the only thing that separates a table of documents from a list of
|
|
5494
|
+
categories once both have been sealed as text. The v3 producer path declares nothing and every
|
|
5495
|
+
column takes the default for the type the engine sealed.
|
|
5496
|
+
|
|
5117
5497
|
**THE ROW CEILING IS THE RELEASE PATH'S OWN, READ BY REFERENCE.** Both bounds below are
|
|
5118
5498
|
:data:`MAX_SEALED_CANDIDATE_ROWS` -- ``plan_graph.HARD_MAX_OUTPUT_ROWS``, the widest table the
|
|
5119
5499
|
graph engine may lawfully seal -- and not the v1 parse ceiling they used to restate. The two
|
|
@@ -5196,7 +5576,29 @@ def _released_column_profile(
|
|
|
5196
5576
|
if value is not None and not (isinstance(value, float) and math.isnan(value))
|
|
5197
5577
|
]
|
|
5198
5578
|
missing_count = declared_nulls + nan_count
|
|
5199
|
-
|
|
5579
|
+
# The distinct key is what refuses a non-finite value, so it is computed for every column
|
|
5580
|
+
# rather than only for the ones whose chart happens to count values.
|
|
5581
|
+
distinct_count = len({_profile_distinct_key(value) for value in observed})
|
|
5582
|
+
distinct_rate_ppm = _rate_ppm(distinct_count, len(observed))
|
|
5583
|
+
numeric_summary = None
|
|
5584
|
+
if engine_type in {"int64", "float64", "decimal"} and observed:
|
|
5585
|
+
numeric = [
|
|
5586
|
+
value
|
|
5587
|
+
for value in observed
|
|
5588
|
+
if isinstance(value, (int, float, Decimal)) and not isinstance(value, bool)
|
|
5589
|
+
]
|
|
5590
|
+
if len(numeric) != len(observed):
|
|
5591
|
+
raise HostedWorkerError(
|
|
5592
|
+
"COLUMN_PROFILE_INVALID", f"numeric values for {name!r} are inconsistent"
|
|
5593
|
+
)
|
|
5594
|
+
numeric_summary = _nearest_rank_summary(numeric)
|
|
5595
|
+
presentation, distribution = _column_presentation(
|
|
5596
|
+
str(engine_type),
|
|
5597
|
+
declared_columns.get(name),
|
|
5598
|
+
values=observed,
|
|
5599
|
+
distinct_count=distinct_count,
|
|
5600
|
+
distinct_rate_ppm=distinct_rate_ppm,
|
|
5601
|
+
)
|
|
5200
5602
|
column: dict[str, Any] = {
|
|
5201
5603
|
"name": name,
|
|
5202
5604
|
"logical_type": logical_type,
|
|
@@ -5208,23 +5610,13 @@ def _released_column_profile(
|
|
|
5208
5610
|
"missing_rate_ppm": _rate_ppm(missing_count, row_count),
|
|
5209
5611
|
"missing_policy": "null_or_nan",
|
|
5210
5612
|
"distinct_count": distinct_count,
|
|
5211
|
-
"distinct_rate_ppm":
|
|
5613
|
+
"distinct_rate_ppm": distinct_rate_ppm,
|
|
5212
5614
|
"distinct_policy": "typed_exact; null_and_nan_excluded; signed_zero_collapsed",
|
|
5213
5615
|
"distribution": distribution,
|
|
5616
|
+
"presentation": presentation,
|
|
5214
5617
|
}
|
|
5215
|
-
if
|
|
5216
|
-
|
|
5217
|
-
value
|
|
5218
|
-
for value in observed
|
|
5219
|
-
if isinstance(value, (int, float, Decimal)) and not isinstance(value, bool)
|
|
5220
|
-
]
|
|
5221
|
-
if len(numeric) != len(observed):
|
|
5222
|
-
raise HostedWorkerError(
|
|
5223
|
-
"COLUMN_PROFILE_INVALID", f"numeric values for {name!r} are inconsistent"
|
|
5224
|
-
)
|
|
5225
|
-
column["numeric_summary"] = _nearest_rank_summary(numeric)
|
|
5226
|
-
if engine_type in {"int64", "float64"}:
|
|
5227
|
-
column["distribution"] = _histogram_distribution(numeric, distinct_count)
|
|
5618
|
+
if numeric_summary is not None:
|
|
5619
|
+
column["numeric_summary"] = numeric_summary
|
|
5228
5620
|
source_inputs, transformations = _column_lineage(lineage, name)
|
|
5229
5621
|
column["source_inputs"] = source_inputs
|
|
5230
5622
|
column["transformations"] = transformations
|
{mostlyright_data-0.13.0 → mostlyright_data-0.14.0}/src/mostlyright/data_harness/run_execution_v4.py
RENAMED
|
@@ -174,6 +174,7 @@ V4_FAILURE_CODES: tuple[str, ...] = (
|
|
|
174
174
|
"CLAIM_KIND_UNKNOWN",
|
|
175
175
|
"CLAMP_EXCEEDED",
|
|
176
176
|
"CLAMP_UNSUPPORTED_FORMAT",
|
|
177
|
+
"COLUMN_PRESENTATION_INCOMPATIBLE",
|
|
177
178
|
"DECLARED_CHECKS_INVALID",
|
|
178
179
|
"DECLARED_CHECK_COLUMN_UNKNOWN",
|
|
179
180
|
"DECLARED_CHECK_DUPLICATE",
|