matchlab 0.1.0.dev4__tar.gz → 0.1.0.dev5__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.
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/PKG-INFO +1 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/linkers/splinklinker.py +5 -2
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab.egg-info/PKG-INFO +1 -1
- matchlab-0.1.0.dev5/test/models/test_linkers_splink.py +65 -0
- matchlab-0.1.0.dev4/test/models/test_linkers_splink.py +0 -42
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.github/actions/setup-toolchain/action.yml +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.github/dependabot.yml +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.github/pull_request_template.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.github/skills/lucid-docs/README.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.github/skills/lucid-docs/SKILL.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.github/skills/lucid-docs/readability.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.github/workflows/cd.yml +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.github/workflows/ci.yml +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.github/workflows/codeql.yml +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.gitignore +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.pre-commit-config.yaml +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.vscode/launch.json +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/.vscode/settings.json +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/CODEOWNERS +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/LICENSE +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/README.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/README.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/__main__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/cases.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/data.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/measure.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/measurements.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/report.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/results/.gitkeep +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/runner.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/benchmarks/topologies.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/adapters.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/core/exceptions.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/core/hash.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/core/resolver_output.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/core/schemas.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/core/transform.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/document.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/eval-judgements.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/eval-metrics.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/eval-sampling.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/eval-tui.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/lineage.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/locations.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/models.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/progress.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/recordstep.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/resolvers.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/resources.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/sources.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/specs.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/steps.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/testkit.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/api/transformers.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/assets/matchbox-icon-dark.png +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/assets/matchbox-icon.svg +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/assets/matchbox-logo-dark.svg +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/assets/matchbox-logo-light.svg +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/contributing.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/glossary.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/guide/build-a-plan.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/guide/evaluate.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/guide/install.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/guide/query.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/guide/serialise.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/index.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/migration/matchbox-to-matchlab.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/stylesheets/extra.css +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/use-cases.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/docs/why-matchlab.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/justfile +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/mkdocs.yml +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/personal-data-exclusions.txt +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/pyproject.toml +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/scripts/test_eval.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/setup.cfg +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/adapters/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/adapters/base.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/adapters/duckdb.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/cli.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/core/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/core/dataframes.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/core/dsu.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/core/exceptions.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/core/hash.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/core/kinds.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/core/logging.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/core/resolver_output.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/core/schemas.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/core/sql.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/document.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/judgements.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/metrics.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/samples.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/tui/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/tui/app.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/tui/modals.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/tui/styles.tcss +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/tui/widgets/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/tui/widgets/assignment.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/tui/widgets/styling.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/eval/tui/widgets/table.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/lineage.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/comparison.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/dedupers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/dedupers/base.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/dedupers/naive.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/linkers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/linkers/base.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/linkers/deterministic.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/linkers/weighteddeterministic.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/models.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/progress.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/recordstep.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/resolvers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/resolvers/base.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/resolvers/components.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/resolvers/resolvers.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/resources.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/sources/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/sources/base.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/sources/dataframe.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/sources/relational.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/sources/sources.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/specs.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/steps.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/testkit/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/testkit/_generate.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/testkit/compare.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/testkit/entities.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/testkit/features.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/testkit/linked.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/testkit/matchers.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/testkit/models.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/testkit/sources.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/transformers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/transformers/base.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/transformers/clean.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/transformers/explode.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/transformers/group.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/transformers/select.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/transformers/transform.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab.egg-info/SOURCES.txt +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab.egg-info/dependency_links.txt +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab.egg-info/entry_points.txt +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab.egg-info/requires.txt +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab.egg-info/scm_file_list.json +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab.egg-info/scm_version.json +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab.egg-info/top_level.txt +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/README.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/adapters/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/adapters/conftest.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/adapters/test_base.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/adapters/test_contract.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/adapters/test_duckdb.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/conftest.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/core/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/core/test_dsu.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/core/test_eval.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/core/test_hash.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/core/test_resolver_output.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/eval/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/eval/test_samples.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/eval/tui/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/eval/tui/test_app.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/eval/tui/test_widgets.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/models/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/models/test_comparison.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/models/test_dedupers_deterministic.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/models/test_linkers_deterministic.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/models/test_linkers_probabilistic.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/models/test_models.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/plan/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/plan/test_ground_truth.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/plan/test_plan.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/plan/test_steps.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/resolvers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/resolvers/test_components.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/resolvers/test_resolvers.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/sources/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/sources/conftest.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/sources/test_locations.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/test_benchmarks.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/test_cli.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/test_document.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/test_lineage.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/test_progress.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/test_resources.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/testkit/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/testkit/test_entities.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/testkit/test_linked.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/testkit/test_models.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/testkit/test_scores.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/testkit/test_sources.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/transformers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/transformers/test_clean.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/transformers/test_explode.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/transformers/test_group.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/transformers/test_select.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/test/transformers/test_transform.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/trufflehog-exclude.txt +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: matchlab
|
|
3
|
-
Version: 0.1.0.
|
|
3
|
+
Version: 0.1.0.dev5
|
|
4
4
|
Summary: A local-first library for building, running and evaluating entity resolution pipelines.
|
|
5
5
|
Author: Department for Business and Trade
|
|
6
6
|
Project-URL: Documentation, https://uktrade.github.io/matchlab/
|
|
@@ -217,9 +217,12 @@ class SplinkLinker(Linker):
|
|
|
217
217
|
self._id_dtype_l = left[self.left_id].dtype
|
|
218
218
|
self._id_dtype_r = right[self.right_id].dtype
|
|
219
219
|
|
|
220
|
-
if
|
|
220
|
+
if set(left.columns) != set(right.columns):
|
|
221
|
+
raise self._conformancy_error(left, right)
|
|
222
|
+
if left.columns != right.columns:
|
|
223
|
+
right = right.select(left.columns)
|
|
224
|
+
if left.dtypes != right.dtypes:
|
|
221
225
|
raise self._conformancy_error(left, right)
|
|
222
|
-
|
|
223
226
|
# Convert to pandas for Splink compatibility
|
|
224
227
|
left_pd = left.with_columns(pl.col(self.left_id).cast(pl.String)).to_pandas()
|
|
225
228
|
right_pd = right.with_columns(pl.col(self.right_id).cast(pl.String)).to_pandas()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: matchlab
|
|
3
|
-
Version: 0.1.0.
|
|
3
|
+
Version: 0.1.0.dev5
|
|
4
4
|
Summary: A local-first library for building, running and evaluating entity resolution pipelines.
|
|
5
5
|
Author: Department for Business and Trade
|
|
6
6
|
Project-URL: Documentation, https://uktrade.github.io/matchlab/
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""Direct unit tests for `SplinkLinker` behavior.
|
|
2
|
+
|
|
3
|
+
These tests cover Splink-specific schema handling and diagnostics, rather than the
|
|
4
|
+
shared match/no-match behavior exercised in the other linker suites.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from datetime import date
|
|
8
|
+
from unittest.mock import Mock, patch
|
|
9
|
+
|
|
10
|
+
import polars as pl
|
|
11
|
+
from splink import SettingsCreator
|
|
12
|
+
from splink import blocking_rule_library as brl
|
|
13
|
+
from splink import comparison_library as cl
|
|
14
|
+
|
|
15
|
+
from matchlab.models.linkers.splinklinker import SplinkLinker
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def test_splink_schema_order() -> None:
|
|
19
|
+
"""Splink accepts matching schemas even when the incoming column order differs."""
|
|
20
|
+
linker = SplinkLinker(
|
|
21
|
+
left_id="id",
|
|
22
|
+
right_id="id",
|
|
23
|
+
linker_training_functions=[],
|
|
24
|
+
linker_settings=SettingsCreator(
|
|
25
|
+
link_type="link_only",
|
|
26
|
+
blocking_rules_to_generate_predictions=[brl.block_on("company_name")],
|
|
27
|
+
comparisons=[cl.ExactMatch("company_name")],
|
|
28
|
+
),
|
|
29
|
+
threshold=None,
|
|
30
|
+
)
|
|
31
|
+
left = pl.DataFrame(
|
|
32
|
+
{
|
|
33
|
+
"id": [1],
|
|
34
|
+
"postcode": ["SW1A 1AA"],
|
|
35
|
+
"duns_number": ["123456789"],
|
|
36
|
+
"company_name": ["left"],
|
|
37
|
+
"incorporation_date": [date(2024, 1, 1)],
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
right = pl.DataFrame(
|
|
41
|
+
{
|
|
42
|
+
"id": [2],
|
|
43
|
+
"company_name": ["right"],
|
|
44
|
+
"postcode": ["SW1A 1AA"],
|
|
45
|
+
"incorporation_date": [date(2024, 1, 1)],
|
|
46
|
+
"duns_number": ["123456789"],
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
fake_linker = Mock()
|
|
51
|
+
with patch(
|
|
52
|
+
"matchlab.models.linkers.splinklinker.SplinkLibLinkerClass",
|
|
53
|
+
return_value=fake_linker,
|
|
54
|
+
) as splink_linker:
|
|
55
|
+
linker.prepare(left, right)
|
|
56
|
+
|
|
57
|
+
left_pd, right_pd = splink_linker.call_args.kwargs["input_table_or_tables"]
|
|
58
|
+
assert list(left_pd.columns) == list(right_pd.columns)
|
|
59
|
+
assert list(left_pd.columns) == [
|
|
60
|
+
"id",
|
|
61
|
+
"postcode",
|
|
62
|
+
"duns_number",
|
|
63
|
+
"company_name",
|
|
64
|
+
"incorporation_date",
|
|
65
|
+
]
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"""Direct unit tests for `SplinkLinker` behavior.
|
|
2
|
-
|
|
3
|
-
These tests cover Splink-specific schema handling and diagnostics, rather than the
|
|
4
|
-
shared match/no-match behavior exercised in the other linker suites.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import polars as pl
|
|
8
|
-
import pytest
|
|
9
|
-
from splink import SettingsCreator
|
|
10
|
-
from splink import blocking_rule_library as brl
|
|
11
|
-
from splink import comparison_library as cl
|
|
12
|
-
|
|
13
|
-
from matchlab.models.linkers.splinklinker import SplinkLinker
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def test_splink_conformancy_error() -> None:
|
|
17
|
-
"""Splink surfaces the concrete schema mismatch from the real prepare path."""
|
|
18
|
-
linker = SplinkLinker(
|
|
19
|
-
left_id="id",
|
|
20
|
-
right_id="id",
|
|
21
|
-
linker_training_functions=[],
|
|
22
|
-
linker_settings=SettingsCreator(
|
|
23
|
-
link_type="link_only",
|
|
24
|
-
blocking_rules_to_generate_predictions=[brl.block_on("id")],
|
|
25
|
-
comparisons=[cl.ExactMatch("id")],
|
|
26
|
-
),
|
|
27
|
-
threshold=None,
|
|
28
|
-
)
|
|
29
|
-
left = pl.DataFrame({"id": [1], "company_name": ["left"]})
|
|
30
|
-
right = pl.DataFrame({"id": [2], "postcode": ["SW1A 1AA"]})
|
|
31
|
-
|
|
32
|
-
with pytest.raises(
|
|
33
|
-
ValueError,
|
|
34
|
-
match="SplinkLinker requires input data to be conformant",
|
|
35
|
-
) as exc_info:
|
|
36
|
-
linker.prepare(left, right)
|
|
37
|
-
|
|
38
|
-
message = str(exc_info.value)
|
|
39
|
-
assert "Left schema: id=Int64, company_name=String" in message
|
|
40
|
-
assert "Right schema: id=Int64, postcode=String" in message
|
|
41
|
-
assert "Columns only on left: ['company_name']" in message
|
|
42
|
-
assert "Columns only on right: ['postcode']" in message
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{matchlab-0.1.0.dev4 → matchlab-0.1.0.dev5}/src/matchlab/models/linkers/weighteddeterministic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|