finpanel 0.1.0a2__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.
- finpanel-0.1.0a2/.gitattributes +4 -0
- finpanel-0.1.0a2/CHANGELOG.md +40 -0
- finpanel-0.1.0a2/LICENSE +21 -0
- finpanel-0.1.0a2/MANIFEST.in +16 -0
- finpanel-0.1.0a2/PKG-INFO +195 -0
- finpanel-0.1.0a2/README.md +168 -0
- finpanel-0.1.0a2/THIRD_PARTY_NOTICES.md +50 -0
- finpanel-0.1.0a2/docs/api-stability.md +103 -0
- finpanel-0.1.0a2/docs/broad-benchmark-receipt.json +650 -0
- finpanel-0.1.0a2/docs/broad-classifier-regression.json +9 -0
- finpanel-0.1.0a2/docs/broad-evidence-manifest.json +5085 -0
- finpanel-0.1.0a2/docs/broad-golden-validation.json +3897 -0
- finpanel-0.1.0a2/docs/broad-performance.json +590 -0
- finpanel-0.1.0a2/docs/broad-validation.json +74 -0
- finpanel-0.1.0a2/docs/broad-validation.md +261 -0
- finpanel-0.1.0a2/docs/canonical-validation.json +15 -0
- finpanel-0.1.0a2/docs/derived-quarter-validation.json +20 -0
- finpanel-0.1.0a2/docs/historical-audit.md +87 -0
- finpanel-0.1.0a2/docs/panel-validation.json +321 -0
- finpanel-0.1.0a2/docs/publishing.md +137 -0
- finpanel-0.1.0a2/docs/release-a2-notes.md +26 -0
- finpanel-0.1.0a2/docs/release-candidate-gate.md +93 -0
- finpanel-0.1.0a2/docs/release-checklist.md +52 -0
- finpanel-0.1.0a2/docs/release-gate-ci.json +42 -0
- finpanel-0.1.0a2/docs/release-golden-inventory.json +39 -0
- finpanel-0.1.0a2/docs/release-notes-draft.md +33 -0
- finpanel-0.1.0a2/docs/release-resume-verification.json +18 -0
- finpanel-0.1.0a2/docs/release-scale-validation.json +5157 -0
- finpanel-0.1.0a2/docs/release-status.md +69 -0
- finpanel-0.1.0a2/docs/release-temporal-audit.json +1611 -0
- finpanel-0.1.0a2/docs/release-universe-audit.json +1007 -0
- finpanel-0.1.0a2/docs/release-validation.md +203 -0
- finpanel-0.1.0a2/docs/research-panels.md +230 -0
- finpanel-0.1.0a2/docs/researcher-guide.md +176 -0
- finpanel-0.1.0a2/docs/resumable-validation.md +49 -0
- finpanel-0.1.0a2/docs/snapshot-validation.json +14 -0
- finpanel-0.1.0a2/docs/technical-reference.md +1674 -0
- finpanel-0.1.0a2/docs/wp7-completion-report.md +172 -0
- finpanel-0.1.0a2/docs/xbrl-evidence-validation.json +338 -0
- finpanel-0.1.0a2/examples/audit_release_temporal.py +96 -0
- finpanel-0.1.0a2/examples/build_broad_panel.py +45 -0
- finpanel-0.1.0a2/examples/build_research_panel.py +234 -0
- finpanel-0.1.0a2/examples/freeze_filing_header.py +53 -0
- finpanel-0.1.0a2/examples/freeze_history_snapshots.py +67 -0
- finpanel-0.1.0a2/examples/freeze_sec_snapshots.py +55 -0
- finpanel-0.1.0a2/examples/inspect_company.py +12 -0
- finpanel-0.1.0a2/examples/inspect_provenance.py +54 -0
- finpanel-0.1.0a2/examples/inspect_timeline.py +35 -0
- finpanel-0.1.0a2/examples/summarize_broad_runs.py +213 -0
- finpanel-0.1.0a2/examples/validate_canonical.py +158 -0
- finpanel-0.1.0a2/examples/validate_derived_quarters.py +253 -0
- finpanel-0.1.0a2/examples/validate_snapshots.py +190 -0
- finpanel-0.1.0a2/examples/validate_xbrl.py +142 -0
- finpanel-0.1.0a2/pyproject.toml +48 -0
- finpanel-0.1.0a2/scripts/validate_install.py +91 -0
- finpanel-0.1.0a2/setup.cfg +4 -0
- finpanel-0.1.0a2/src/finpanel/__init__.py +3 -0
- finpanel-0.1.0a2/src/finpanel/_reuse.py +52 -0
- finpanel-0.1.0a2/src/finpanel/asof.py +321 -0
- finpanel-0.1.0a2/src/finpanel/availability.py +228 -0
- finpanel-0.1.0a2/src/finpanel/cache/__init__.py +3 -0
- finpanel-0.1.0a2/src/finpanel/cache/file.py +88 -0
- finpanel-0.1.0a2/src/finpanel/cli.py +745 -0
- finpanel-0.1.0a2/src/finpanel/errors.py +29 -0
- finpanel-0.1.0a2/src/finpanel/example.py +70 -0
- finpanel-0.1.0a2/src/finpanel/example_data/0000012659_companyfacts_06e056b0473f.gz +0 -0
- finpanel-0.1.0a2/src/finpanel/example_data/0000012659_historical_submissions_19f80cc024c7.gz +0 -0
- finpanel-0.1.0a2/src/finpanel/example_data/0000012659_submissions_b19e8cc45986.gz +0 -0
- finpanel-0.1.0a2/src/finpanel/example_data/manifest.json +84 -0
- finpanel-0.1.0a2/src/finpanel/facts.py +234 -0
- finpanel-0.1.0a2/src/finpanel/filings.py +331 -0
- finpanel-0.1.0a2/src/finpanel/metrics/__init__.py +40 -0
- finpanel-0.1.0a2/src/finpanel/metrics/derivation.py +343 -0
- finpanel-0.1.0a2/src/finpanel/metrics/derivation_models.py +99 -0
- finpanel-0.1.0a2/src/finpanel/metrics/engine.py +267 -0
- finpanel-0.1.0a2/src/finpanel/metrics/quarters.py +247 -0
- finpanel-0.1.0a2/src/finpanel/metrics/registry.py +155 -0
- finpanel-0.1.0a2/src/finpanel/metrics/resolver.py +290 -0
- finpanel-0.1.0a2/src/finpanel/models/__init__.py +5 -0
- finpanel-0.1.0a2/src/finpanel/models/asof.py +63 -0
- finpanel-0.1.0a2/src/finpanel/models/context.py +15 -0
- finpanel-0.1.0a2/src/finpanel/models/evidence.py +42 -0
- finpanel-0.1.0a2/src/finpanel/models/fact.py +66 -0
- finpanel-0.1.0a2/src/finpanel/models/filing.py +20 -0
- finpanel-0.1.0a2/src/finpanel/models/period.py +72 -0
- finpanel-0.1.0a2/src/finpanel/models/source.py +68 -0
- finpanel-0.1.0a2/src/finpanel/models/timeline.py +85 -0
- finpanel-0.1.0a2/src/finpanel/panel/__init__.py +18 -0
- finpanel-0.1.0a2/src/finpanel/panel/cli.py +45 -0
- finpanel-0.1.0a2/src/finpanel/panel/engine.py +580 -0
- finpanel-0.1.0a2/src/finpanel/panel/export.py +253 -0
- finpanel-0.1.0a2/src/finpanel/panel/models.py +173 -0
- finpanel-0.1.0a2/src/finpanel/periods.py +447 -0
- finpanel-0.1.0a2/src/finpanel/revisions.py +209 -0
- finpanel-0.1.0a2/src/finpanel/sec/__init__.py +5 -0
- finpanel-0.1.0a2/src/finpanel/sec/client.py +253 -0
- finpanel-0.1.0a2/src/finpanel/sec/common.py +58 -0
- finpanel-0.1.0a2/src/finpanel/sec/companyfacts.py +89 -0
- finpanel-0.1.0a2/src/finpanel/sec/headers.py +150 -0
- finpanel-0.1.0a2/src/finpanel/sec/submissions.py +160 -0
- finpanel-0.1.0a2/src/finpanel/serialization.py +51 -0
- finpanel-0.1.0a2/src/finpanel/snapshots/__init__.py +25 -0
- finpanel-0.1.0a2/src/finpanel/snapshots/cli.py +107 -0
- finpanel-0.1.0a2/src/finpanel/snapshots/pipeline.py +367 -0
- finpanel-0.1.0a2/src/finpanel/snapshots/store.py +378 -0
- finpanel-0.1.0a2/src/finpanel/validation/__init__.py +6 -0
- finpanel-0.1.0a2/src/finpanel/validation/acquisition.py +199 -0
- finpanel-0.1.0a2/src/finpanel/validation/checkpoints.py +132 -0
- finpanel-0.1.0a2/src/finpanel/validation/cli.py +96 -0
- finpanel-0.1.0a2/src/finpanel/validation/fixtures.py +46 -0
- finpanel-0.1.0a2/src/finpanel/validation/goldens.py +166 -0
- finpanel-0.1.0a2/src/finpanel/validation/historical.py +171 -0
- finpanel-0.1.0a2/src/finpanel/validation/invariants.py +103 -0
- finpanel-0.1.0a2/src/finpanel/validation/release-universe.json +1976 -0
- finpanel-0.1.0a2/src/finpanel/validation/runner.py +482 -0
- finpanel-0.1.0a2/src/finpanel/validation/taxonomy.py +81 -0
- finpanel-0.1.0a2/src/finpanel/validation/universe.json +675 -0
- finpanel-0.1.0a2/src/finpanel/validation/universe.py +49 -0
- finpanel-0.1.0a2/src/finpanel/xbrl/__init__.py +41 -0
- finpanel-0.1.0a2/src/finpanel/xbrl/cli.py +145 -0
- finpanel-0.1.0a2/src/finpanel/xbrl/discovery.py +164 -0
- finpanel-0.1.0a2/src/finpanel/xbrl/integration.py +157 -0
- finpanel-0.1.0a2/src/finpanel/xbrl/models.py +82 -0
- finpanel-0.1.0a2/src/finpanel/xbrl/parser.py +320 -0
- finpanel-0.1.0a2/src/finpanel/xbrl/verification.py +238 -0
- finpanel-0.1.0a2/src/finpanel.egg-info/PKG-INFO +195 -0
- finpanel-0.1.0a2/src/finpanel.egg-info/SOURCES.txt +324 -0
- finpanel-0.1.0a2/src/finpanel.egg-info/dependency_links.txt +1 -0
- finpanel-0.1.0a2/src/finpanel.egg-info/entry_points.txt +2 -0
- finpanel-0.1.0a2/src/finpanel.egg-info/requires.txt +10 -0
- finpanel-0.1.0a2/src/finpanel.egg-info/top_level.txt +1 -0
- finpanel-0.1.0a2/tests/conftest.py +82 -0
- finpanel-0.1.0a2/tests/fixtures/aapl_companyfacts.json +93 -0
- finpanel-0.1.0a2/tests/fixtures/aapl_submissions.json +53 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000012927_companyfacts_0c63f1ae7cc1.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000012927_filing_directory_81d319342528.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000012927_filing_directory_c4405d92b0ff.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000012927_historical_submissions_c203898f0665.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000012927_historical_submissions_c30620b96c29.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000012927_submissions_6772e8d08a03.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000012927_xbrl_instance_2887397ac7ec.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000027419_companyfacts_eb15a2cd524e.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000027419_filing_directory_ab627a0c36c6.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000027419_filing_directory_ccad5045562e.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000027419_historical_submissions_3c7e5adca75c.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000027419_submissions_3d133aa9e678.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000027419_xbrl_instance_0dd83275bbe1.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000034088_companyfacts_9b95535419e5.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000034088_filing_directory_5c4e431bf02f.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000034088_filing_directory_cab8c07c1936.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000034088_historical_submissions_14a22c25d87b.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000034088_historical_submissions_e806a24ea2b1.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000034088_submissions_c86c3d1c16e5.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000034088_xbrl_instance_7213f85b0da5.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000050863_companyfacts_70056711b8b0.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000050863_filing_directory_93b9fd63664d.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000050863_filing_directory_ea3b1d755f44.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000050863_historical_submissions_78c7faef4a09.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000050863_historical_submissions_fbd1edb817f0.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000050863_submissions_f04f1a2215ca.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000050863_xbrl_instance_b77e5ce22889.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000078003_companyfacts_bd072131f9dc.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000078003_filing_directory_246532809708.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000078003_filing_directory_76c6384825ac.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000078003_historical_submissions_130d25baac4e.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000078003_historical_submissions_3f999f06ad4a.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000078003_historical_submissions_503225981fca.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000078003_submissions_f91e9e227323.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000078003_xbrl_instance_6df3a97b0eb2.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000320187_companyfacts_d7aeceae21e6.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000320187_filing_directory_9b8660811e2c.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000320187_filing_directory_cde80cc31dfa.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000320187_historical_submissions_20eb7fac33c0.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000320187_historical_submissions_350846c62298.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000320187_submissions_f2aed6a3da2b.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000320187_xbrl_instance_7f2089977244.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000796343_companyfacts_86a5689aa9aa.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000796343_filing_directory_5dbfba283fc9.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000796343_filing_directory_f932c1268837.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000796343_historical_submissions_569d7d5d3302.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000796343_submissions_804c48e9b37e.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000796343_xbrl_instance_f409e7b81cbd.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000909832_companyfacts_b675ced201b2.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000909832_filing_directory_a7dbbd2210b1.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000909832_filing_directory_f94858e3c7fc.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000909832_historical_submissions_757da598a805.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000909832_submissions_82217bd906db.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0000909832_xbrl_instance_08fc6b7c58a6.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001018724_companyfacts_7549fb68446e.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001018724_filing_directory_12aec7b222c8.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001018724_filing_directory_939f2fdd7015.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001018724_historical_submissions_2826573f41f8.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001018724_historical_submissions_4d75fbd7d19d.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001018724_submissions_1f5bb6be4033.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001018724_xbrl_instance_9027eeffc488.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001090727_companyfacts_19a5c39708df.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001090727_filing_directory_1b65ed8546ee.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001090727_filing_directory_e7d9bfb64417.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001090727_historical_submissions_a229b8aaa873.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001090727_historical_submissions_abd94e2bb428.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001090727_submissions_b5540a0075af.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001090727_xbrl_instance_70d3a177a922.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001326160_companyfacts_1e94bb53863e.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001326160_filing_directory_8e35967b8122.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001326160_filing_directory_b6ebe920a4c4.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001326160_historical_submissions_c655de1cd114.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001326160_historical_submissions_fd8fb5958ff5.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001326160_submissions_a181db4d9d4e.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001326160_xbrl_instance_c91b0a19ee55.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001341439_companyfacts_65523545f040.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001341439_filing_directory_84546e7617f2.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001341439_filing_directory_d20fb54e1453.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001341439_historical_submissions_73288c48255e.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001341439_submissions_bed0ec89b0d2.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001341439_xbrl_instance_4f8838f04c4c.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001751788_companyfacts_ff212d1e276f.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001751788_filing_directory_1b704ecae66c.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001751788_filing_directory_50016b4813a5.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001751788_submissions_7450bcf9768f.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/0001751788_xbrl_instance_3e581b50fc00.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/broad/manifest.json +2402 -0
- finpanel-0.1.0a2/tests/fixtures/headers/0000320193-24-000123.hdr.sgml +47 -0
- finpanel-0.1.0a2/tests/fixtures/headers/manifest.json +15 -0
- finpanel-0.1.0a2/tests/fixtures/history/CIK0000320193-submissions-001.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/history/manifest.json +18 -0
- finpanel-0.1.0a2/tests/fixtures/manifest.json +54 -0
- finpanel-0.1.0a2/tests/fixtures/msft_companyfacts.json +93 -0
- finpanel-0.1.0a2/tests/fixtures/msft_submissions.json +53 -0
- finpanel-0.1.0a2/tests/fixtures/nvda_companyfacts.json +93 -0
- finpanel-0.1.0a2/tests/fixtures/nvda_submissions.json +53 -0
- finpanel-0.1.0a2/tests/fixtures/release/0000012659_companyfacts_06e056b0473f.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/release/0000012659_filing_text_1edcd3bade44.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/release/0000012659_historical_submissions_19f80cc024c7.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/release/0000012659_submissions_b19e8cc45986.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/release/0000063276_companyfacts_b5b67c2c769d.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/release/0000063276_filing_text_39effbac53b7.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/release/0000063276_historical_submissions_ca44cf06e2c5.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/release/0000063276_submissions_6196a56fba14.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/release/0001637459_companyfacts_8fad66c16e53.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/release/0001637459_submissions_2f168e869f78.gz +0 -0
- finpanel-0.1.0a2/tests/fixtures/release/manifest.json +268 -0
- finpanel-0.1.0a2/tests/fixtures/sec/aapl_companyfacts.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/sec/aapl_submissions.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/sec/manifest.json +85 -0
- finpanel-0.1.0a2/tests/fixtures/sec/msft_companyfacts.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/sec/msft_submissions.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/sec/nvda_companyfacts.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/sec/nvda_submissions.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/sec/wmt_companyfacts.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/sec/wmt_submissions.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/wmt_companyfacts.json +93 -0
- finpanel-0.1.0a2/tests/fixtures/wmt_submissions.json +53 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/aapl-0000320193-24-000006-0000320193-24-000006-index.html +233 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/aapl-0000320193-24-000006-aapl-20231230_htm.xml +2123 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/aapl-0000320193-24-000006-index.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/aapl-0000320193-24-000069-0000320193-24-000069-index.html +233 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/aapl-0000320193-24-000069-aapl-20240330_htm.xml +2834 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/aapl-0000320193-24-000069-index.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/manifest.json +185 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/msft-0000950170-24-048288-0000950170-24-048288-index.html +212 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/msft-0000950170-24-048288-index.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/msft-0000950170-24-048288-msft-20240331_htm.xml +37616 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/nvda-0001045810-24-000264-0001045810-24-000264-index.html +254 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/nvda-0001045810-24-000264-index.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/nvda-0001045810-24-000264-nvda-20240728_htm.xml +4215 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/wmt-0000104169-24-000141-0000104169-24-000141-index.html +247 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/wmt-0000104169-24-000141-index.json +1 -0
- finpanel-0.1.0a2/tests/fixtures/xbrl/wmt-0000104169-24-000141-wmt-20240731_htm.xml +3872 -0
- finpanel-0.1.0a2/tests/golden/broad-edges.json +1076 -0
- finpanel-0.1.0a2/tests/golden/broad.json +5118 -0
- finpanel-0.1.0a2/tests/golden/canonical.json +826 -0
- finpanel-0.1.0a2/tests/golden/derived_quarters.json +1021 -0
- finpanel-0.1.0a2/tests/golden/release-calendar.json +565 -0
- finpanel-0.1.0a2/tests/golden/release-revisions.json +1481 -0
- finpanel-0.1.0a2/tests/golden/xbrl_evidence.json +20 -0
- finpanel-0.1.0a2/tests/test_asof.py +635 -0
- finpanel-0.1.0a2/tests/test_cache.py +38 -0
- finpanel-0.1.0a2/tests/test_cli.py +113 -0
- finpanel-0.1.0a2/tests/test_client.py +193 -0
- finpanel-0.1.0a2/tests/test_derivation_authentic.py +138 -0
- finpanel-0.1.0a2/tests/test_derivation_cli.py +95 -0
- finpanel-0.1.0a2/tests/test_derivation_integration.py +87 -0
- finpanel-0.1.0a2/tests/test_derivation_models.py +55 -0
- finpanel-0.1.0a2/tests/test_derivation_revisions.py +196 -0
- finpanel-0.1.0a2/tests/test_derivation_scope.py +176 -0
- finpanel-0.1.0a2/tests/test_filings.py +313 -0
- finpanel-0.1.0a2/tests/test_filings_cli.py +71 -0
- finpanel-0.1.0a2/tests/test_history_acceptance.py +70 -0
- finpanel-0.1.0a2/tests/test_history_client.py +107 -0
- finpanel-0.1.0a2/tests/test_metric_authentic.py +96 -0
- finpanel-0.1.0a2/tests/test_metric_candidates.py +96 -0
- finpanel-0.1.0a2/tests/test_metric_cli.py +103 -0
- finpanel-0.1.0a2/tests/test_metric_registry.py +54 -0
- finpanel-0.1.0a2/tests/test_metric_resolution.py +166 -0
- finpanel-0.1.0a2/tests/test_panel_authentic.py +49 -0
- finpanel-0.1.0a2/tests/test_panel_cli.py +51 -0
- finpanel-0.1.0a2/tests/test_panel_contract.py +107 -0
- finpanel-0.1.0a2/tests/test_panel_engine.py +145 -0
- finpanel-0.1.0a2/tests/test_panel_exports.py +136 -0
- finpanel-0.1.0a2/tests/test_panel_replay.py +132 -0
- finpanel-0.1.0a2/tests/test_parsers.py +193 -0
- finpanel-0.1.0a2/tests/test_periods.py +485 -0
- finpanel-0.1.0a2/tests/test_provenance.py +569 -0
- finpanel-0.1.0a2/tests/test_release_example.py +60 -0
- finpanel-0.1.0a2/tests/test_release_historical.py +321 -0
- finpanel-0.1.0a2/tests/test_release_portability.py +46 -0
- finpanel-0.1.0a2/tests/test_sec_snapshots.py +59 -0
- finpanel-0.1.0a2/tests/test_snapshot_capture.py +95 -0
- finpanel-0.1.0a2/tests/test_snapshots_authentic.py +124 -0
- finpanel-0.1.0a2/tests/test_snapshots_cli.py +60 -0
- finpanel-0.1.0a2/tests/test_snapshots_pipeline.py +256 -0
- finpanel-0.1.0a2/tests/test_snapshots_store.py +202 -0
- finpanel-0.1.0a2/tests/test_validation_acquisition.py +75 -0
- finpanel-0.1.0a2/tests/test_validation_cli.py +30 -0
- finpanel-0.1.0a2/tests/test_validation_example.py +56 -0
- finpanel-0.1.0a2/tests/test_validation_goldens.py +141 -0
- finpanel-0.1.0a2/tests/test_validation_resume.py +177 -0
- finpanel-0.1.0a2/tests/test_validation_reuse.py +61 -0
- finpanel-0.1.0a2/tests/test_validation_runner.py +101 -0
- finpanel-0.1.0a2/tests/test_validation_universe.py +42 -0
- finpanel-0.1.0a2/tests/test_xbrl_authentic.py +113 -0
- finpanel-0.1.0a2/tests/test_xbrl_cli.py +144 -0
- finpanel-0.1.0a2/tests/test_xbrl_discovery.py +108 -0
- finpanel-0.1.0a2/tests/test_xbrl_integration.py +115 -0
- finpanel-0.1.0a2/tests/test_xbrl_parser.py +238 -0
- finpanel-0.1.0a2/tests/test_xbrl_verification.py +159 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.1.0a2 — preparation, not yet published
|
|
4
|
+
|
|
5
|
+
Intended tag: `v0.1.0-alpha.2`. This is a documentation/packaging synchronization
|
|
6
|
+
update: corrected public GitHub installation instructions, researcher guide and
|
|
7
|
+
release-status documentation now accompany refreshed wheel metadata and embedded
|
|
8
|
+
README. README links are absolute for package-index rendering.
|
|
9
|
+
|
|
10
|
+
No financial/accounting semantics, metric contracts, revision, as-of or provenance
|
|
11
|
+
behavior changed. The versioned software identity changes; old receipts still
|
|
12
|
+
require their original matching software. A1 tags and assets are preserved.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## 0.1.0a1 — GitHub alpha pre-release (2026-10-08)
|
|
16
|
+
|
|
17
|
+
Published [GitHub pre-release v0.1.0-alpha](https://github.com/finleydoudou/FinPanel/releases/tag/v0.1.0-alpha) (first alpha).
|
|
18
|
+
PyPI publication has not occurred. See [current release status](docs/release-status.md). Use `0.1.0a1` in Python
|
|
19
|
+
package metadata and dependency specifications; the label is an explicit mapping.
|
|
20
|
+
|
|
21
|
+
- Preserve frozen evidence bytes during Git checkout on Windows.
|
|
22
|
+
- Make optional example memory telemetry unavailable rather than failing when the
|
|
23
|
+
Unix `resource` module is absent. No accounting or provenance contract changed.
|
|
24
|
+
|
|
25
|
+
- Prepare an alpha package for reproducible point-in-time SEC fundamentals.
|
|
26
|
+
- Add authentic historical fiscal-calendar and revision/restatement audit ledgers,
|
|
27
|
+
with conservative diagnostics and original narrative provenance.
|
|
28
|
+
- Add deterministic validation jobs, verified issuer checkpoints, resume equivalence,
|
|
29
|
+
corruption rejection, writer locking, and batch failure records.
|
|
30
|
+
- Expand the purposive validation universe from 50 to 100 ordinary US-GAAP issuers.
|
|
31
|
+
- Include a small authentic offline panel example in installed artifacts.
|
|
32
|
+
- Document the public/experimental/private API boundary and supported Python 3.12.
|
|
33
|
+
- Add first-party tzdata fallback for systems without an IANA timezone database.
|
|
34
|
+
- Add cross-platform CI configuration and separate clean wheel/sdist install checks.
|
|
35
|
+
- Prepare researcher onboarding, source notices, validation evidence, and release checklist.
|
|
36
|
+
|
|
37
|
+
No new financial metric or unsupported sector ontology was added. Existing reported
|
|
38
|
+
metric defaults and accounting selection rules are unchanged. The package/software
|
|
39
|
+
identity changes intentionally; exact older receipts require matching older software.
|
|
40
|
+
Prior work packages remain the historical baseline, not separate published releases.
|
finpanel-0.1.0a2/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 FinPanel contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
include LICENSE README.md pyproject.toml
|
|
2
|
+
recursive-include tests *.py *.json
|
|
3
|
+
recursive-include tests/fixtures *.sgml
|
|
4
|
+
recursive-include examples *.py
|
|
5
|
+
|
|
6
|
+
recursive-include docs *.json *.md
|
|
7
|
+
recursive-include tests/fixtures/xbrl *.xml *.html
|
|
8
|
+
|
|
9
|
+
recursive-include src/finpanel/validation *.json
|
|
10
|
+
recursive-include tests/fixtures/broad *.gz
|
|
11
|
+
|
|
12
|
+
include CHANGELOG.md THIRD_PARTY_NOTICES.md
|
|
13
|
+
include .gitattributes
|
|
14
|
+
recursive-include tests/fixtures/release *.gz
|
|
15
|
+
|
|
16
|
+
recursive-include scripts *.py
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: finpanel
|
|
3
|
+
Version: 0.1.0a2
|
|
4
|
+
Summary: Research infrastructure for reproducible point-in-time SEC fundamentals
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Project-URL: Repository, https://github.com/finleydoudou/FinPanel
|
|
7
|
+
Project-URL: Issues, https://github.com/finleydoudou/FinPanel/issues
|
|
8
|
+
Project-URL: Documentation, https://github.com/finleydoudou/FinPanel#readme
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
13
|
+
Requires-Python: <3.13,>=3.12
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
License-File: LICENSE
|
|
16
|
+
License-File: THIRD_PARTY_NOTICES.md
|
|
17
|
+
Requires-Dist: httpx<0.29,>=0.28
|
|
18
|
+
Requires-Dist: simplejson<5,>=3.19
|
|
19
|
+
Requires-Dist: pyarrow<24,>=18
|
|
20
|
+
Requires-Dist: duckdb<2,>=1.5
|
|
21
|
+
Requires-Dist: tzdata>=2024.1
|
|
22
|
+
Provides-Extra: dev
|
|
23
|
+
Requires-Dist: pytest<10,>=8; extra == "dev"
|
|
24
|
+
Requires-Dist: ruff<1,>=0.11; extra == "dev"
|
|
25
|
+
Requires-Dist: build<2,>=1; extra == "dev"
|
|
26
|
+
Dynamic: license-file
|
|
27
|
+
|
|
28
|
+
# FinPanel
|
|
29
|
+
|
|
30
|
+
Research infrastructure for reproducible point-in-time SEC fundamentals.
|
|
31
|
+
|
|
32
|
+
FinPanel builds financial research panels from SEC filings and XBRL facts while
|
|
33
|
+
preserving which evidence supports each result. Choose a historical cutoff, pin
|
|
34
|
+
the captured evidence, and replay the result later. Unavailable or conflicting
|
|
35
|
+
facts remain explicit states instead of silently becoming numbers.
|
|
36
|
+
|
|
37
|
+
The alpha pre-release supports six metrics for ordinary US-GAAP operating companies:
|
|
38
|
+
revenue, net income, assets, liabilities, cash and cash equivalents, and operating
|
|
39
|
+
cash flow. It supports reported periods and conservative Q2/Q3/Q4 derivations.
|
|
40
|
+
Banks, insurers, IFRS normalization, segment aggregation, FX normalization, prices,
|
|
41
|
+
and returns are outside scope. Historical/original-XBRL evidence is incomplete for
|
|
42
|
+
some issuers; extension-heavy or dimension-heavy disclosures may remain unresolved.
|
|
43
|
+
|
|
44
|
+
**Alpha.2:** this source tree builds package **0.1.0a2**, with Git label
|
|
45
|
+
`v0.1.0-alpha.2`. Python **3.12** is required. Check the
|
|
46
|
+
[release list](https://github.com/finleydoudou/FinPanel/releases) and
|
|
47
|
+
[PyPI project](https://pypi.org/project/finpanel/) for publication availability;
|
|
48
|
+
source preparation alone does not imply that a release has been published.
|
|
49
|
+
The existing [a1 GitHub pre-release](https://github.com/finleydoudou/FinPanel/releases/tag/v0.1.0-alpha)
|
|
50
|
+
(package `0.1.0a1`) remains unchanged.
|
|
51
|
+
See [validation evidence](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-validation.md)
|
|
52
|
+
and [release notes](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-a2-notes.md).
|
|
53
|
+
This is experimental research software, not a stable production release.
|
|
54
|
+
|
|
55
|
+
## Installation
|
|
56
|
+
|
|
57
|
+
Once version `0.1.0a2` is available on production PyPI, install that exact version
|
|
58
|
+
in a clean Python 3.12 environment with `python -m pip install finpanel==0.1.0a2`.
|
|
59
|
+
Before publication, use only a verified candidate wheel supplied with its
|
|
60
|
+
`SHA256SUMS.txt`. Do not substitute an a1 artifact or rename its wheel.
|
|
61
|
+
For published a1 users, follow the
|
|
62
|
+
[a1 installation instructions](https://github.com/finleydoudou/FinPanel/blob/07f3e16fcf18019b16e5ac25d575e646d126c570/README.md#installation).
|
|
63
|
+
|
|
64
|
+
The verified-wheel workflow below also works for a2 GitHub release assets when
|
|
65
|
+
available. Maintainers build fresh artifacts from the exact authorized source;
|
|
66
|
+
the a2 wheel is named `finpanel-0.1.0a2-py3-none-any.whl`.
|
|
67
|
+
|
|
68
|
+
In the artifact folder, print the wheel hash:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# macOS
|
|
72
|
+
shasum -a 256 finpanel-0.1.0a2-py3-none-any.whl
|
|
73
|
+
# Linux
|
|
74
|
+
sha256sum finpanel-0.1.0a2-py3-none-any.whl
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```powershell
|
|
78
|
+
# Windows PowerShell
|
|
79
|
+
Get-FileHash finpanel-0.1.0a2-py3-none-any.whl -Algorithm SHA256
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Manually compare the printed hash with the wheel's row in the supplied checksum
|
|
83
|
+
file (case-insensitively); stop on a mismatch. Comparison is not automatic.
|
|
84
|
+
|
|
85
|
+
Create and activate a clean Python 3.12 environment:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# macOS/Linux
|
|
89
|
+
python3.12 -m venv .venv
|
|
90
|
+
source .venv/bin/activate
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
```powershell
|
|
94
|
+
# Windows PowerShell
|
|
95
|
+
py -3.12 -m venv .venv
|
|
96
|
+
.\.venv\Scripts\Activate.ps1
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Then install the candidate and verify:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
python -m pip install ./finpanel-0.1.0a2-py3-none-any.whl
|
|
103
|
+
python -c "import finpanel; print(finpanel.__version__)"
|
|
104
|
+
python -m finpanel.cli --help
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Expected candidate version: `0.1.0a2`. Dependencies may download from PyPI; the
|
|
108
|
+
FinPanel package comes from the supplied wheel. The example below is offline.
|
|
109
|
+
If PowerShell activation is unavailable, invoke `.\.venv\Scripts\python.exe`
|
|
110
|
+
in place of `python` without changing execution policy.
|
|
111
|
+
|
|
112
|
+
For an intentional source clone, see the
|
|
113
|
+
[developer/source workflow](https://github.com/finleydoudou/FinPanel/blob/main/docs/researcher-guide.md#developer-source-user).
|
|
114
|
+
|
|
115
|
+
## Quick Start — no SEC credentials
|
|
116
|
+
|
|
117
|
+
After installation, run this from your own working directory. Choose a fresh
|
|
118
|
+
output directory each time:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
python -m finpanel.example output/quickstart
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
This uses bundled, hash-verified H&R Block SEC captures. It creates six FY2022
|
|
125
|
+
cells, CSV/Parquet/DuckDB exports, provenance sidecars, and a replay receipt. Three
|
|
126
|
+
cells resolve under the example's cutoff and conservative contracts; three remain
|
|
127
|
+
unresolved. That is **coverage**, not an accuracy percentage. No network access or
|
|
128
|
+
large corpus download is needed. Choose a fresh output directory each time.
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
from finpanel import panel
|
|
132
|
+
|
|
133
|
+
rows = panel.read_export("output/quickstart/panel.parquet")
|
|
134
|
+
for row in rows:
|
|
135
|
+
print(row["metric"], row["state"], row["value"])
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
See the [researcher guide](https://github.com/finleydoudou/FinPanel/blob/main/docs/researcher-guide.md) for a custom panel, historical
|
|
139
|
+
cutoffs, original XBRL verification, pinned replay, and troubleshooting.
|
|
140
|
+
|
|
141
|
+
## What reproducibility means here
|
|
142
|
+
|
|
143
|
+
- A filing-availability proxy limits facts, filings, and calendar anchors before
|
|
144
|
+
interpretation. Today's fiscal-year-end cannot explain all historical years.
|
|
145
|
+
- `first_reported` and `latest_available` choose temporal candidates within exact
|
|
146
|
+
source identities. Different concepts or incompatible scopes are not merged.
|
|
147
|
+
- Derived quarters retain both cumulative operands. Incompatible revision states
|
|
148
|
+
produce a conflict rather than plausible arithmetic.
|
|
149
|
+
- CompanyFacts is a captured aggregate feed. Filing-time eligibility does **not**
|
|
150
|
+
establish when that aggregate feed first delivered a fact. Snapshot capture time
|
|
151
|
+
and historical information cutoff are different dimensions.
|
|
152
|
+
- Exact replay requires the original snapshot and matching software/contracts.
|
|
153
|
+
CSV semantic rows are deterministic; container bytes and performance timing are
|
|
154
|
+
not cross-platform reproducibility promises.
|
|
155
|
+
|
|
156
|
+
## Validation and release status
|
|
157
|
+
|
|
158
|
+
- Alpha.2 package: **0.1.0a2**, Git label **v0.1.0-alpha.2**. Check the release list for publication availability.
|
|
159
|
+
- Existing public GitHub release: [a1](https://github.com/finleydoudou/FinPanel/releases/tag/v0.1.0-alpha), package **0.1.0a1**, unchanged.
|
|
160
|
+
- Production PyPI: **not published**. TestPyPI rehearsal is conditional on gates and account setup; it is not a production release.
|
|
161
|
+
- Supported Python: **3.12**. [A2 software CI](https://github.com/finleydoudou/FinPanel/actions/runs/37799312175) passed macOS/Linux/Windows with **814 tests / 0 skipped** each on the TestPyPI-tested software candidate. Final release-only documentation/workflow changes additionally require successful CI on the exact final commit before publication.
|
|
162
|
+
|
|
163
|
+
The audited population contains 100 ordinary US-GAAP operating companies and
|
|
164
|
+
24,000 financial cells. **69.61% scalar coverage is not accuracy**. All 255
|
|
165
|
+
independently audited golden expectations, 2,435,238 invariant checks and 500
|
|
166
|
+
future-evidence mutation checks passed, with zero unexpected mismatches **within
|
|
167
|
+
that specified audited population**. This is not a universal accuracy or
|
|
168
|
+
market-wide support claim.
|
|
169
|
+
|
|
170
|
+
Read the [validation evidence](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-validation.md),
|
|
171
|
+
[API/support policy](https://github.com/finleydoudou/FinPanel/blob/main/docs/api-stability.md), and [current release status](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-status.md).
|
|
172
|
+
The [earlier gate](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-candidate-gate.md) and
|
|
173
|
+
[earlier checklist](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-checklist.md) are explicitly historical records;
|
|
174
|
+
their original Windows failures are preserved, not current release blockers.
|
|
175
|
+
|
|
176
|
+
## Development
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
python -m pip install -e '.[dev]'
|
|
180
|
+
pytest
|
|
181
|
+
ruff check .
|
|
182
|
+
ruff format --check .
|
|
183
|
+
python -m build
|
|
184
|
+
python scripts/validate_install.py dist
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Routine tests and the clean-install example use frozen evidence. Live SEC
|
|
188
|
+
acquisition is a separate, explicitly configured operation. Never commit an SEC
|
|
189
|
+
contact identity, credentials, or the local Tier B corpus.
|
|
190
|
+
|
|
191
|
+
Detailed references: [accounting/API workflows](https://github.com/finleydoudou/FinPanel/blob/main/docs/technical-reference.md),
|
|
192
|
+
[panels](https://github.com/finleydoudou/FinPanel/blob/main/docs/research-panels.md), [broad validation](https://github.com/finleydoudou/FinPanel/blob/main/docs/broad-validation.md),
|
|
193
|
+
[historical/revision audit](https://github.com/finleydoudou/FinPanel/blob/main/docs/historical-audit.md),
|
|
194
|
+
[resume](https://github.com/finleydoudou/FinPanel/blob/main/docs/resumable-validation.md), [changelog](https://github.com/finleydoudou/FinPanel/blob/main/CHANGELOG.md),
|
|
195
|
+
[third-party notices](https://github.com/finleydoudou/FinPanel/blob/main/THIRD_PARTY_NOTICES.md), and [MIT license](https://github.com/finleydoudou/FinPanel/blob/main/LICENSE).
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# FinPanel
|
|
2
|
+
|
|
3
|
+
Research infrastructure for reproducible point-in-time SEC fundamentals.
|
|
4
|
+
|
|
5
|
+
FinPanel builds financial research panels from SEC filings and XBRL facts while
|
|
6
|
+
preserving which evidence supports each result. Choose a historical cutoff, pin
|
|
7
|
+
the captured evidence, and replay the result later. Unavailable or conflicting
|
|
8
|
+
facts remain explicit states instead of silently becoming numbers.
|
|
9
|
+
|
|
10
|
+
The alpha pre-release supports six metrics for ordinary US-GAAP operating companies:
|
|
11
|
+
revenue, net income, assets, liabilities, cash and cash equivalents, and operating
|
|
12
|
+
cash flow. It supports reported periods and conservative Q2/Q3/Q4 derivations.
|
|
13
|
+
Banks, insurers, IFRS normalization, segment aggregation, FX normalization, prices,
|
|
14
|
+
and returns are outside scope. Historical/original-XBRL evidence is incomplete for
|
|
15
|
+
some issuers; extension-heavy or dimension-heavy disclosures may remain unresolved.
|
|
16
|
+
|
|
17
|
+
**Alpha.2:** this source tree builds package **0.1.0a2**, with Git label
|
|
18
|
+
`v0.1.0-alpha.2`. Python **3.12** is required. Check the
|
|
19
|
+
[release list](https://github.com/finleydoudou/FinPanel/releases) and
|
|
20
|
+
[PyPI project](https://pypi.org/project/finpanel/) for publication availability;
|
|
21
|
+
source preparation alone does not imply that a release has been published.
|
|
22
|
+
The existing [a1 GitHub pre-release](https://github.com/finleydoudou/FinPanel/releases/tag/v0.1.0-alpha)
|
|
23
|
+
(package `0.1.0a1`) remains unchanged.
|
|
24
|
+
See [validation evidence](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-validation.md)
|
|
25
|
+
and [release notes](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-a2-notes.md).
|
|
26
|
+
This is experimental research software, not a stable production release.
|
|
27
|
+
|
|
28
|
+
## Installation
|
|
29
|
+
|
|
30
|
+
Once version `0.1.0a2` is available on production PyPI, install that exact version
|
|
31
|
+
in a clean Python 3.12 environment with `python -m pip install finpanel==0.1.0a2`.
|
|
32
|
+
Before publication, use only a verified candidate wheel supplied with its
|
|
33
|
+
`SHA256SUMS.txt`. Do not substitute an a1 artifact or rename its wheel.
|
|
34
|
+
For published a1 users, follow the
|
|
35
|
+
[a1 installation instructions](https://github.com/finleydoudou/FinPanel/blob/07f3e16fcf18019b16e5ac25d575e646d126c570/README.md#installation).
|
|
36
|
+
|
|
37
|
+
The verified-wheel workflow below also works for a2 GitHub release assets when
|
|
38
|
+
available. Maintainers build fresh artifacts from the exact authorized source;
|
|
39
|
+
the a2 wheel is named `finpanel-0.1.0a2-py3-none-any.whl`.
|
|
40
|
+
|
|
41
|
+
In the artifact folder, print the wheel hash:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# macOS
|
|
45
|
+
shasum -a 256 finpanel-0.1.0a2-py3-none-any.whl
|
|
46
|
+
# Linux
|
|
47
|
+
sha256sum finpanel-0.1.0a2-py3-none-any.whl
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
```powershell
|
|
51
|
+
# Windows PowerShell
|
|
52
|
+
Get-FileHash finpanel-0.1.0a2-py3-none-any.whl -Algorithm SHA256
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Manually compare the printed hash with the wheel's row in the supplied checksum
|
|
56
|
+
file (case-insensitively); stop on a mismatch. Comparison is not automatic.
|
|
57
|
+
|
|
58
|
+
Create and activate a clean Python 3.12 environment:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# macOS/Linux
|
|
62
|
+
python3.12 -m venv .venv
|
|
63
|
+
source .venv/bin/activate
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```powershell
|
|
67
|
+
# Windows PowerShell
|
|
68
|
+
py -3.12 -m venv .venv
|
|
69
|
+
.\.venv\Scripts\Activate.ps1
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Then install the candidate and verify:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
python -m pip install ./finpanel-0.1.0a2-py3-none-any.whl
|
|
76
|
+
python -c "import finpanel; print(finpanel.__version__)"
|
|
77
|
+
python -m finpanel.cli --help
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Expected candidate version: `0.1.0a2`. Dependencies may download from PyPI; the
|
|
81
|
+
FinPanel package comes from the supplied wheel. The example below is offline.
|
|
82
|
+
If PowerShell activation is unavailable, invoke `.\.venv\Scripts\python.exe`
|
|
83
|
+
in place of `python` without changing execution policy.
|
|
84
|
+
|
|
85
|
+
For an intentional source clone, see the
|
|
86
|
+
[developer/source workflow](https://github.com/finleydoudou/FinPanel/blob/main/docs/researcher-guide.md#developer-source-user).
|
|
87
|
+
|
|
88
|
+
## Quick Start — no SEC credentials
|
|
89
|
+
|
|
90
|
+
After installation, run this from your own working directory. Choose a fresh
|
|
91
|
+
output directory each time:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
python -m finpanel.example output/quickstart
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
This uses bundled, hash-verified H&R Block SEC captures. It creates six FY2022
|
|
98
|
+
cells, CSV/Parquet/DuckDB exports, provenance sidecars, and a replay receipt. Three
|
|
99
|
+
cells resolve under the example's cutoff and conservative contracts; three remain
|
|
100
|
+
unresolved. That is **coverage**, not an accuracy percentage. No network access or
|
|
101
|
+
large corpus download is needed. Choose a fresh output directory each time.
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
from finpanel import panel
|
|
105
|
+
|
|
106
|
+
rows = panel.read_export("output/quickstart/panel.parquet")
|
|
107
|
+
for row in rows:
|
|
108
|
+
print(row["metric"], row["state"], row["value"])
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
See the [researcher guide](https://github.com/finleydoudou/FinPanel/blob/main/docs/researcher-guide.md) for a custom panel, historical
|
|
112
|
+
cutoffs, original XBRL verification, pinned replay, and troubleshooting.
|
|
113
|
+
|
|
114
|
+
## What reproducibility means here
|
|
115
|
+
|
|
116
|
+
- A filing-availability proxy limits facts, filings, and calendar anchors before
|
|
117
|
+
interpretation. Today's fiscal-year-end cannot explain all historical years.
|
|
118
|
+
- `first_reported` and `latest_available` choose temporal candidates within exact
|
|
119
|
+
source identities. Different concepts or incompatible scopes are not merged.
|
|
120
|
+
- Derived quarters retain both cumulative operands. Incompatible revision states
|
|
121
|
+
produce a conflict rather than plausible arithmetic.
|
|
122
|
+
- CompanyFacts is a captured aggregate feed. Filing-time eligibility does **not**
|
|
123
|
+
establish when that aggregate feed first delivered a fact. Snapshot capture time
|
|
124
|
+
and historical information cutoff are different dimensions.
|
|
125
|
+
- Exact replay requires the original snapshot and matching software/contracts.
|
|
126
|
+
CSV semantic rows are deterministic; container bytes and performance timing are
|
|
127
|
+
not cross-platform reproducibility promises.
|
|
128
|
+
|
|
129
|
+
## Validation and release status
|
|
130
|
+
|
|
131
|
+
- Alpha.2 package: **0.1.0a2**, Git label **v0.1.0-alpha.2**. Check the release list for publication availability.
|
|
132
|
+
- Existing public GitHub release: [a1](https://github.com/finleydoudou/FinPanel/releases/tag/v0.1.0-alpha), package **0.1.0a1**, unchanged.
|
|
133
|
+
- Production PyPI: **not published**. TestPyPI rehearsal is conditional on gates and account setup; it is not a production release.
|
|
134
|
+
- Supported Python: **3.12**. [A2 software CI](https://github.com/finleydoudou/FinPanel/actions/runs/37799312175) passed macOS/Linux/Windows with **814 tests / 0 skipped** each on the TestPyPI-tested software candidate. Final release-only documentation/workflow changes additionally require successful CI on the exact final commit before publication.
|
|
135
|
+
|
|
136
|
+
The audited population contains 100 ordinary US-GAAP operating companies and
|
|
137
|
+
24,000 financial cells. **69.61% scalar coverage is not accuracy**. All 255
|
|
138
|
+
independently audited golden expectations, 2,435,238 invariant checks and 500
|
|
139
|
+
future-evidence mutation checks passed, with zero unexpected mismatches **within
|
|
140
|
+
that specified audited population**. This is not a universal accuracy or
|
|
141
|
+
market-wide support claim.
|
|
142
|
+
|
|
143
|
+
Read the [validation evidence](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-validation.md),
|
|
144
|
+
[API/support policy](https://github.com/finleydoudou/FinPanel/blob/main/docs/api-stability.md), and [current release status](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-status.md).
|
|
145
|
+
The [earlier gate](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-candidate-gate.md) and
|
|
146
|
+
[earlier checklist](https://github.com/finleydoudou/FinPanel/blob/main/docs/release-checklist.md) are explicitly historical records;
|
|
147
|
+
their original Windows failures are preserved, not current release blockers.
|
|
148
|
+
|
|
149
|
+
## Development
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
python -m pip install -e '.[dev]'
|
|
153
|
+
pytest
|
|
154
|
+
ruff check .
|
|
155
|
+
ruff format --check .
|
|
156
|
+
python -m build
|
|
157
|
+
python scripts/validate_install.py dist
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Routine tests and the clean-install example use frozen evidence. Live SEC
|
|
161
|
+
acquisition is a separate, explicitly configured operation. Never commit an SEC
|
|
162
|
+
contact identity, credentials, or the local Tier B corpus.
|
|
163
|
+
|
|
164
|
+
Detailed references: [accounting/API workflows](https://github.com/finleydoudou/FinPanel/blob/main/docs/technical-reference.md),
|
|
165
|
+
[panels](https://github.com/finleydoudou/FinPanel/blob/main/docs/research-panels.md), [broad validation](https://github.com/finleydoudou/FinPanel/blob/main/docs/broad-validation.md),
|
|
166
|
+
[historical/revision audit](https://github.com/finleydoudou/FinPanel/blob/main/docs/historical-audit.md),
|
|
167
|
+
[resume](https://github.com/finleydoudou/FinPanel/blob/main/docs/resumable-validation.md), [changelog](https://github.com/finleydoudou/FinPanel/blob/main/CHANGELOG.md),
|
|
168
|
+
[third-party notices](https://github.com/finleydoudou/FinPanel/blob/main/THIRD_PARTY_NOTICES.md), and [MIT license](https://github.com/finleydoudou/FinPanel/blob/main/LICENSE).
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Third-party notices and evidence provenance
|
|
2
|
+
|
|
3
|
+
FinPanel's own source is distributed under the repository's MIT license. That
|
|
4
|
+
license does not purport to relicense third-party dependencies or issuer filings.
|
|
5
|
+
|
|
6
|
+
## Dependencies
|
|
7
|
+
|
|
8
|
+
Dependencies are installed separately; FinPanel does not vendor their source.
|
|
9
|
+
Their installed distributions carry their own license files and notices.
|
|
10
|
+
|
|
11
|
+
| Component | Use | Declared runtime range | License reference |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| HTTPX | SEC HTTP transport, timeouts, response handling | `>=0.28,<0.29` | [BSD-3-Clause](https://github.com/encode/httpx/blob/master/LICENSE.md) |
|
|
14
|
+
| simplejson | Exact decimal JSON reading/writing | `>=3.19,<5` | [MIT or AFL-2.1](https://github.com/simplejson/simplejson/blob/main/LICENSE.txt) |
|
|
15
|
+
| PyArrow | Typed Parquet and Arrow interchange | `>=18,<24` | [Apache-2.0 and bundled-component notices](https://github.com/apache/arrow/blob/main/LICENSE.txt) |
|
|
16
|
+
| tzdata | IANA timezone fallback on systems without zone data | `>=2024.1` | [Apache-2.0 package metadata](https://pypi.org/project/tzdata/) |
|
|
17
|
+
| DuckDB | Local analytical export and read-back | `>=1.5,<2` | [MIT](https://duckdb.org/faq) |
|
|
18
|
+
|
|
19
|
+
Development-only pytest, Ruff, build, and build-backend setuptools identify MIT
|
|
20
|
+
licenses in their installed metadata. These are not added as runtime dependencies.
|
|
21
|
+
No dependency was removed: all existing runtime dependencies have exercised uses. The added first-party tzdata
|
|
22
|
+
fallback supplies the SEC local timezone on platforms without a system IANA database.
|
|
23
|
+
No assertion is made that every allowed dependency combination was tested; see
|
|
24
|
+
[the support audit](docs/api-stability.md) for actual versions.
|
|
25
|
+
|
|
26
|
+
This inventory records upstream licensing information, not a legal opinion about
|
|
27
|
+
all downstream redistribution arrangements. If dependencies are bundled into a
|
|
28
|
+
standalone binary, preserve their complete distributed notices, including transitive
|
|
29
|
+
components; the short table above does not replace them.
|
|
30
|
+
|
|
31
|
+
## Authentic SEC evidence
|
|
32
|
+
|
|
33
|
+
Frozen evidence comes from the official SEC hosts `data.sec.gov` and `www.sec.gov`.
|
|
34
|
+
Each fixture manifest records its source URL, accession where applicable, retrieval
|
|
35
|
+
time, original byte hash, and the lossless compressed-transport hash. Small regression
|
|
36
|
+
captures and the packaged HRB example are source material for reproducible research;
|
|
37
|
+
they are not authored by FinPanel. Public availability through EDGAR is not a blanket
|
|
38
|
+
claim that every issuer-authored narrative, attachment, image, or trademark is public
|
|
39
|
+
domain. FinPanel claims no ownership or endorsement over that material.
|
|
40
|
+
|
|
41
|
+
WP7 includes HRB, Mattel, and Kraft Heinz aggregates and two issuer narrative filings.
|
|
42
|
+
The full source URLs and hashes live in `tests/fixtures/release/manifest.json`.
|
|
43
|
+
The installed onboarding example contains HRB JSON responses only, with its separate
|
|
44
|
+
`finpanel/example_data/manifest.json`. Lossless gzip is transport, not altered evidence.
|
|
45
|
+
Synthetic test mutations are identified as synthetic and do not replace raw captures.
|
|
46
|
+
|
|
47
|
+
The broader Tier B SEC corpus remains local and ignored; it is excluded from wheel,
|
|
48
|
+
source distribution, and Git. Before an actual public release, review the specific
|
|
49
|
+
bundled issuer-authored narrative fixtures and the intended distribution context.
|
|
50
|
+
This preparation does not grant rights beyond those held by the original sources.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# API and package stability policy
|
|
2
|
+
|
|
3
|
+
This is a pre-release compatibility commitment within the existing research scope,
|
|
4
|
+
not a v1 promise that all importable Python names are public. Existing WP1–WP6
|
|
5
|
+
calls and default behavior are retained. No namespace was removed or renamed.
|
|
6
|
+
|
|
7
|
+
## Intended supported research surface
|
|
8
|
+
|
|
9
|
+
| Surface | Entry points / return models | Contract |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Raw SEC | `SECClient`, `submissions`, `companyfacts`, raw response/parse models | Explicit CIK; online identity required; offline cache misses fail |
|
|
12
|
+
| Filing/fact inspection | `filings.timeline`, `filings.available_as_of`, `facts.for_concept`, typed filing/fact records | Original raw fields and precision retained |
|
|
13
|
+
| Bounded interpretation | `asof.view`, `asof.revisions`, `periods.for_concept`, `revisions.analyze` | Explicit as-of versus retrospective mode; exact concept groups |
|
|
14
|
+
| Canonical metrics | Exports in `metrics.__all__`, especially `candidates`, `resolve`, `derive_quarter`, `resolve_quarter`, `compare_quarter` | Six declared metrics; reported-only `resolve`; explicit quarter policies |
|
|
15
|
+
| Snapshots | `EvidenceStore`, `Artifact`, `Snapshot`, `Integrity`, `run`, `reproduce`, `read_receipt`, `export_bundle` | Immutable byte captures; explicit version selection; fail-closed replay |
|
|
16
|
+
| Panels | `PanelRequest`, `PeriodEnd`, `PanelRow`, `PanelResult`, `PanelReceipt`, `build`, `export`, `read_export`, `reproduce` | Complete explicit grid, state/provenance per row, lossless semantic exports |
|
|
17
|
+
| Original XBRL | `xbrl.__all__`, including `inspect_filing`, `verify_fact`, `verify_metric`, `verify_derivation` | Supported XML only; retrieval-bounded verification; no fabricated dimensions |
|
|
18
|
+
|
|
19
|
+
Dataclass return models distinguish absence, ambiguity, unsupported scope, conflict,
|
|
20
|
+
and usable scalar results. `PanelRequest` normalizes query dimensions and validates
|
|
21
|
+
policies. Monetary values remain `int`/`Decimal`; portable exports carry exact decimal
|
|
22
|
+
text and number kind. JSON serialization uses `finpanel.serialization.dumps/loads`;
|
|
23
|
+
plain `json.dumps` is not a replacement for exact Decimal/model serialization.
|
|
24
|
+
|
|
25
|
+
Public metric entry points and models already carry type annotations. WP7 adds
|
|
26
|
+
annotations to panel build/replay/export/read-back arguments and returns and a
|
|
27
|
+
reported-only resolver docstring. Dynamic provenance dictionaries are intentional;
|
|
28
|
+
the whole package is not advertised as fully statically type-checked. Named states
|
|
29
|
+
remain strings validated by contracts rather than a new breaking enum conversion.
|
|
30
|
+
|
|
31
|
+
### Errors
|
|
32
|
+
|
|
33
|
+
`FinPanelError` is the shared expected-operation base. `ValidationError` also inherits
|
|
34
|
+
`ValueError`; cache failures use `CacheError`/`CacheMissError`, transport failures use
|
|
35
|
+
`SECRequestError`/`SECTimeoutError`, snapshot/replay uses `SnapshotError`, and strict
|
|
36
|
+
panel builds use `PanelBuildError`. Transport errors expose URL, attempt count, and
|
|
37
|
+
status where available, not credentials. Parse issues and unresolved financial
|
|
38
|
+
states normally appear in returned evidence/results; they are not automatically
|
|
39
|
+
exceptions. `errors="raise"` is the explicit strict panel option.
|
|
40
|
+
|
|
41
|
+
### Experimental and private
|
|
42
|
+
|
|
43
|
+
`validation.*` (universe, acquisition, historical diagnostics, benchmark reports,
|
|
44
|
+
checkpoints, and goldens), the `validate` CLI namespace, and `finpanel.example` are
|
|
45
|
+
experimental research tooling. Their formats are versioned and incompatible resumes
|
|
46
|
+
fail explicitly. Model/candidate construction helpers are advanced inspection APIs,
|
|
47
|
+
not permission to bypass cutoff or scope validation.
|
|
48
|
+
|
|
49
|
+
Leading-underscore helpers, `_reuse`, `_PinnedCache`, `_publish`, parser internals,
|
|
50
|
+
CLI dispatch implementation, fixture transport details, and benchmark aggregation
|
|
51
|
+
internals are private. Importability alone gives no stability guarantee. Keep raw
|
|
52
|
+
artifacts and receipts rather than depending on those implementation details.
|
|
53
|
+
|
|
54
|
+
## Version and replay
|
|
55
|
+
|
|
56
|
+
The prepared PEP 440 version is `0.1.0a2`, mapped to intended tag
|
|
57
|
+
`v0.1.0-alpha.2`. This is a documentation/packaging refresh, not a new financial
|
|
58
|
+
contract. The published a1 tag/package remain unchanged. Production publication
|
|
59
|
+
requires separate authorization. Receipt identity
|
|
60
|
+
includes the package version, source hash, Python patch version, and exact relevant
|
|
61
|
+
JSON/transport dependency versions. An older WP6 receipt intentionally requires its
|
|
62
|
+
original matching software for exact replay. Updating the package does not silently
|
|
63
|
+
upgrade an old receipt or rewrite its evidence.
|
|
64
|
+
|
|
65
|
+
## Dependencies and platforms
|
|
66
|
+
|
|
67
|
+
| Dependency | Kind | Declared minimum | Version used in local validation |
|
|
68
|
+
|---|---|---:|---:|
|
|
69
|
+
| httpx | Runtime HTTP transport | 0.28 | 0.28.1 |
|
|
70
|
+
| simplejson | Runtime exact JSON | 3.19 | 4.2.0 |
|
|
71
|
+
| pyarrow | Runtime Parquet/Arrow | 18 | 23.0.1 |
|
|
72
|
+
| duckdb | Runtime analytical export | 1.5 | 1.5.6 |
|
|
73
|
+
| tzdata | Runtime IANA timezone fallback | 2024.1 | 2026.5 |
|
|
74
|
+
| setuptools | Build backend only | 77 | 84.0.0 |
|
|
75
|
+
| build | Development build tool | 1 | 1.6.1 |
|
|
76
|
+
| pytest | Development tests | 8 | 9.1.1 |
|
|
77
|
+
| Ruff | Development lint/format | 0.11 | 0.16.10 |
|
|
78
|
+
|
|
79
|
+
These ranges are dependency constraints, not a claim that minimum-version matrices
|
|
80
|
+
were executed. HTTPX/simplejson are used by core ingestion/serialization; Arrow and
|
|
81
|
+
DuckDB support promised export formats, so none is an unused dependency. WP7 adds first-party `tzdata` for Windows and other
|
|
82
|
+
installations without an IANA system database. Clean-install checks disable system
|
|
83
|
+
timezone lookup and exercise winter/summer SEC offsets and the full example. Binary
|
|
84
|
+
wheels and architecture availability matter for Arrow and DuckDB.
|
|
85
|
+
|
|
86
|
+
Python **3.12 only** is declared for this alpha (`>=3.12,<3.13`); local validation uses
|
|
87
|
+
3.12.14 on macOS arm64. Other Python minors are not claimed. The CI matrix defines
|
|
88
|
+
Python 3.12 on macOS, Linux, and Windows with permanent offline tests, builds, and
|
|
89
|
+
clean artifact installs. The final published release commit
|
|
90
|
+
`30ffbbe658fbc517ec838ba499859ec05093283b` passed all three platforms with
|
|
91
|
+
814 tests and 0 skipped per platform, including builds and clean installations.
|
|
92
|
+
See [current release status](release-status.md) and its exact-commit CI link.
|
|
93
|
+
The [earlier failed gate](release-candidate-gate.md) remains a historical record;
|
|
94
|
+
its Windows failures were resolved before publication. There is no
|
|
95
|
+
platform-specific accounting fork.
|
|
96
|
+
|
|
97
|
+
`scripts/validate_install.py` installs wheel and sdist into separate new virtual
|
|
98
|
+
environments, runs outside the checkout with isolated Python imports, checks the
|
|
99
|
+
installed CLI/module, executes the bundled offline example, verifies replay, and
|
|
100
|
+
compares all three export round trips. It cannot fall back to the developer editable
|
|
101
|
+
installation. Dependency downloads may use PyPI; SEC access remains disabled.
|
|
102
|
+
|
|
103
|
+
The timezone-data fallback follows the [Python zoneinfo recommendation](https://docs.python.org/3.12/library/zoneinfo.html#data-sources). Local broad validation used the host database; clean installs also verify the packaged fallback. Receipts fail closed on semantic differences; the OS timezone database itself is not yet a separately pinned receipt component.
|