matchlab 0.1.0.dev4__tar.gz → 0.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- matchlab-0.1.1/.github/CODEOWNERS +1 -0
- matchlab-0.1.1/.github/SECURITY_CHECKLIST.md +33 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.github/pull_request_template.md +1 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.github/skills/lucid-docs/readability.py +1 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.github/workflows/cd.yml +1 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.github/workflows/ci.yml +1 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.github/workflows/codeql.yml +1 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.gitignore +1 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.pre-commit-config.yaml +6 -6
- {matchlab-0.1.0.dev4/src/matchlab.egg-info → matchlab-0.1.1}/PKG-INFO +9 -3
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/README.md +8 -2
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/__main__.py +1 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/measure.py +2 -2
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/report.py +1 -1
- matchlab-0.1.0.dev4/docs/api/steps.md → matchlab-0.1.1/docs/api/plan/steps/index.md +4 -0
- matchlab-0.1.1/docs/api/plan/steps/models/dedupers/index.md +16 -0
- matchlab-0.1.1/docs/api/plan/steps/models/dedupers/naive.md +12 -0
- matchlab-0.1.0.dev4/docs/api/models.md → matchlab-0.1.1/docs/api/plan/steps/models/index.md +3 -20
- matchlab-0.1.1/docs/api/plan/steps/models/linkers/deterministic.md +12 -0
- matchlab-0.1.1/docs/api/plan/steps/models/linkers/index.md +16 -0
- matchlab-0.1.1/docs/api/plan/steps/models/linkers/splink.md +12 -0
- matchlab-0.1.1/docs/api/plan/steps/models/linkers/weighted-deterministic.md +12 -0
- matchlab-0.1.1/docs/api/plan/steps/resolvers/components.md +12 -0
- matchlab-0.1.0.dev4/docs/api/sources.md → matchlab-0.1.1/docs/api/plan/steps/resolvers/index.md +3 -3
- matchlab-0.1.1/docs/api/plan/steps/sources/dataframe.md +12 -0
- matchlab-0.1.1/docs/api/plan/steps/sources/index.md +29 -0
- matchlab-0.1.1/docs/api/plan/steps/sources/relational.md +12 -0
- matchlab-0.1.1/docs/api/plan/steps/transformers/clean.md +12 -0
- matchlab-0.1.1/docs/api/plan/steps/transformers/explode.md +12 -0
- matchlab-0.1.1/docs/api/plan/steps/transformers/group.md +12 -0
- matchlab-0.1.1/docs/api/plan/steps/transformers/index.md +29 -0
- matchlab-0.1.1/docs/api/plan/steps/transformers/select.md +12 -0
- matchlab-0.1.0.dev4/docs/api/adapters.md → matchlab-0.1.1/docs/api/stores/duckdb.md +1 -1
- matchlab-0.1.1/docs/api/stores/index.md +29 -0
- matchlab-0.1.1/docs/assets/matchlab-logo-dark.svg +1 -0
- matchlab-0.1.1/docs/assets/matchlab-logo-light.svg +1 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/contributing.md +8 -14
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/glossary.md +71 -69
- matchlab-0.1.1/docs/guide/build-a-plan.md +446 -0
- matchlab-0.1.1/docs/guide/custom-methodologies.md +120 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/guide/evaluate.md +7 -13
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/guide/install.md +0 -4
- {matchlab-0.1.0.dev4/docs/migration → matchlab-0.1.1/docs/guide}/matchbox-to-matchlab.md +1 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/guide/query.md +0 -6
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/guide/serialise.md +4 -14
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/index.md +10 -4
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/justfile +2 -8
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/pyproject.toml +7 -8
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/__init__.py +6 -5
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/cli.py +5 -5
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/core/logging.py +85 -12
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/core/schemas.py +5 -5
- matchlab-0.1.1/src/matchlab/core/versioning.py +62 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/document.py +5 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/samples.py +23 -25
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/tui/__init__.py +7 -7
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/tui/app.py +9 -9
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/lineage.py +15 -5
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/dedupers/base.py +6 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/dedupers/naive.py +4 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/linkers/base.py +6 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/linkers/deterministic.py +3 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/linkers/splinklinker.py +15 -8
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/linkers/weighteddeterministic.py +4 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/models.py +12 -8
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/progress.py +27 -17
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/recordstep.py +10 -10
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/resolvers/base.py +5 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/resolvers/components.py +2 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/resolvers/resolvers.py +20 -16
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/resources.py +2 -2
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/sources/base.py +4 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/sources/sources.py +12 -8
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/steps.py +117 -69
- matchlab-0.1.1/src/matchlab/stores/__init__.py +24 -0
- {matchlab-0.1.0.dev4/src/matchlab/adapters → matchlab-0.1.1/src/matchlab/stores}/base.py +19 -21
- matchlab-0.1.1/src/matchlab/stores/default.py +25 -0
- {matchlab-0.1.0.dev4/src/matchlab/adapters → matchlab-0.1.1/src/matchlab/stores}/duckdb.py +16 -14
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/testkit/matchers.py +5 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/transformers/base.py +6 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/transformers/clean.py +4 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/transformers/explode.py +3 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/transformers/group.py +4 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/transformers/select.py +4 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/transformers/transform.py +12 -8
- {matchlab-0.1.0.dev4 → matchlab-0.1.1/src/matchlab.egg-info}/PKG-INFO +9 -3
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab.egg-info/SOURCES.txt +46 -31
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab.egg-info/scm_file_list.json +48 -32
- matchlab-0.1.1/src/matchlab.egg-info/scm_version.json +8 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab.egg-info/top_level.txt +0 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/README.md +1 -1
- matchlab-0.1.1/test/adapters/__init__.py +1 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/adapters/conftest.py +12 -12
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/adapters/test_base.py +2 -2
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/adapters/test_contract.py +41 -31
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/adapters/test_duckdb.py +10 -10
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/conftest.py +9 -8
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/core/test_resolver_output.py +2 -2
- matchlab-0.1.1/test/core/test_versioning.py +80 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/eval/test_samples.py +8 -8
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/eval/tui/test_app.py +13 -13
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/models/test_linkers_probabilistic.py +61 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/plan/test_ground_truth.py +1 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/plan/test_plan.py +195 -43
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/plan/test_steps.py +44 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/resolvers/test_resolvers.py +3 -3
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/test_benchmarks.py +2 -2
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/test_cli.py +2 -2
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/test_document.py +6 -6
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/test_lineage.py +7 -3
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/test_progress.py +217 -76
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/transformers/test_transform.py +38 -5
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/uv.lock +118 -217
- matchlab-0.1.1/zensical.toml +158 -0
- matchlab-0.1.0.dev4/CODEOWNERS +0 -1
- matchlab-0.1.0.dev4/docs/api/locations.md +0 -46
- matchlab-0.1.0.dev4/docs/api/resolvers.md +0 -12
- matchlab-0.1.0.dev4/docs/api/transformers.md +0 -12
- matchlab-0.1.0.dev4/docs/assets/matchbox-logo-dark.svg +0 -17
- matchlab-0.1.0.dev4/docs/assets/matchbox-logo-light.svg +0 -17
- matchlab-0.1.0.dev4/docs/guide/build-a-plan.md +0 -487
- matchlab-0.1.0.dev4/docs/stylesheets/extra.css +0 -30
- matchlab-0.1.0.dev4/mkdocs.yml +0 -153
- matchlab-0.1.0.dev4/personal-data-exclusions.txt +0 -3
- matchlab-0.1.0.dev4/src/matchlab/adapters/__init__.py +0 -24
- matchlab-0.1.0.dev4/src/matchlab.egg-info/scm_version.json +0 -8
- matchlab-0.1.0.dev4/test/adapters/__init__.py +0 -1
- matchlab-0.1.0.dev4/trufflehog-exclude.txt +0 -1
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.github/actions/setup-toolchain/action.yml +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.github/dependabot.yml +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.github/skills/lucid-docs/README.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.github/skills/lucid-docs/SKILL.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.vscode/launch.json +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/.vscode/settings.json +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/LICENSE +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/README.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/cases.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/data.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/measurements.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/results/.gitkeep +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/runner.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/benchmarks/topologies.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/api/core/exceptions.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/api/core/hash.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/api/core/resolver_output.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/api/core/schemas.md +0 -0
- {matchlab-0.1.0.dev4/docs/api → matchlab-0.1.1/docs/api/core}/testkit.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/api/core/transform.md +0 -0
- /matchlab-0.1.0.dev4/docs/api/eval-judgements.md → /matchlab-0.1.1/docs/api/evaluation/judgements.md +0 -0
- /matchlab-0.1.0.dev4/docs/api/eval-metrics.md → /matchlab-0.1.1/docs/api/evaluation/metrics.md +0 -0
- /matchlab-0.1.0.dev4/docs/api/eval-sampling.md → /matchlab-0.1.1/docs/api/evaluation/sampling.md +0 -0
- /matchlab-0.1.0.dev4/docs/api/eval-tui.md → /matchlab-0.1.1/docs/api/evaluation/tui.md +0 -0
- {matchlab-0.1.0.dev4/docs/api → matchlab-0.1.1/docs/api/plan}/document.md +0 -0
- {matchlab-0.1.0.dev4/docs/api → matchlab-0.1.1/docs/api/plan}/lineage.md +0 -0
- {matchlab-0.1.0.dev4/docs/api → matchlab-0.1.1/docs/api/plan}/progress.md +0 -0
- {matchlab-0.1.0.dev4/docs/api → matchlab-0.1.1/docs/api/plan}/resources.md +0 -0
- {matchlab-0.1.0.dev4/docs/api → matchlab-0.1.1/docs/api/plan}/specs.md +0 -0
- {matchlab-0.1.0.dev4/docs/api → matchlab-0.1.1/docs/api/plan/steps}/recordstep.md +0 -0
- /matchlab-0.1.0.dev4/docs/assets/matchbox-icon-dark.png → /matchlab-0.1.1/docs/assets/matchlab-icon-dark.png +0 -0
- /matchlab-0.1.0.dev4/docs/assets/matchbox-icon.svg → /matchlab-0.1.1/docs/assets/matchlab-icon-light.svg +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/use-cases.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/docs/why-matchlab.md +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/scripts/test_eval.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/setup.cfg +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/core/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/core/dataframes.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/core/dsu.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/core/exceptions.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/core/hash.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/core/kinds.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/core/resolver_output.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/core/sql.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/judgements.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/metrics.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/tui/modals.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/tui/styles.tcss +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/tui/widgets/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/tui/widgets/assignment.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/tui/widgets/styling.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/eval/tui/widgets/table.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/comparison.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/dedupers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/models/linkers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/resolvers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/sources/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/sources/dataframe.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/sources/relational.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/specs.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/testkit/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/testkit/_generate.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/testkit/compare.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/testkit/entities.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/testkit/features.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/testkit/linked.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/testkit/models.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/testkit/sources.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab/transformers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab.egg-info/dependency_links.txt +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab.egg-info/entry_points.txt +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/src/matchlab.egg-info/requires.txt +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/core/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/core/test_dsu.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/core/test_eval.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/core/test_hash.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/eval/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/eval/tui/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/eval/tui/test_widgets.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/models/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/models/test_comparison.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/models/test_dedupers_deterministic.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/models/test_linkers_deterministic.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/models/test_linkers_splink.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/models/test_models.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/plan/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/resolvers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/resolvers/test_components.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/sources/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/sources/conftest.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/sources/test_locations.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/test_resources.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/testkit/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/testkit/test_entities.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/testkit/test_linked.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/testkit/test_models.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/testkit/test_scores.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/testkit/test_sources.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/transformers/__init__.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/transformers/test_clean.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/transformers/test_explode.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/transformers/test_group.py +0 -0
- {matchlab-0.1.0.dev4 → matchlab-0.1.1}/test/transformers/test_select.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* @uktrade/data-matching-service
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Security Checklist
|
|
2
|
+
|
|
3
|
+
Work through this checklist from top to bottom, ticking each item once you have confirmed it is true. Each item links to detailed guidance in the [DBT GitHub Security Policy](https://github.com/uktrade/.github/blob/main/SECURITY.md).
|
|
4
|
+
|
|
5
|
+
Last checked against the policy: _add date_
|
|
6
|
+
|
|
7
|
+
## 1. Contributor controls
|
|
8
|
+
|
|
9
|
+
Actions each contributor takes for themselves, so everyone knows what the controls are and why they exist.
|
|
10
|
+
|
|
11
|
+
- [X] [All internal contributors have read the DBT GitHub Security Policy](https://github.com/uktrade/.github/blob/main/SECURITY.md)
|
|
12
|
+
- [X] [All internal contributors have completed code security training in the last year](https://github.com/uktrade/.github/blob/main/SECURITY.md#security-training)
|
|
13
|
+
- [X] [All internal contributors have reviewed the GitHub Safety Tips on coding in the open](https://github.com/uktrade/.github/blob/main/SECURITY.md#github-safety-tips)
|
|
14
|
+
|
|
15
|
+
## 2. Repository-level controls
|
|
16
|
+
|
|
17
|
+
Defences set up within the repository itself.
|
|
18
|
+
|
|
19
|
+
- [X] [A `.pre-commit-config.yaml` file exists so the organisation-approved hooks run before commits](https://github.com/uktrade/.github/blob/main/SECURITY.md#pre-commit-hooks)
|
|
20
|
+
- [X] [Repository access has been reviewed](https://github.com/uktrade/.github/blob/main/SECURITY.md#repository-access)
|
|
21
|
+
- [X] [A `CODEOWNERS` file exists so the right people review changes](https://github.com/uktrade/.github/blob/main/SECURITY.md#codeowners)
|
|
22
|
+
- [X] [The pull request template reminds reviewers to check for secrets](https://github.com/uktrade/.github/blob/main/SECURITY.md#pull-request-template)
|
|
23
|
+
- [X] [The mandatory custom GitHub properties are set](https://github.com/uktrade/.github/blob/main/SECURITY.md#custom-github-properties)
|
|
24
|
+
- [X] [Advanced CodeQL is set up if the repository accepts PRs from forks (optional)](https://github.com/uktrade/.github/blob/main/SECURITY.md#codeql-for-fork-based-prs-optional)
|
|
25
|
+
|
|
26
|
+
## 3. Organisation-applied controls
|
|
27
|
+
|
|
28
|
+
Controls applied by an organisation administrator and verified by a repository administrator.
|
|
29
|
+
|
|
30
|
+
- [X] [The DBT GitHub security configuration is applied to the repository](https://github.com/uktrade/.github/blob/main/SECURITY.md#github-security-configuration)
|
|
31
|
+
- [X] [The default branch protection ruleset is applied to the default branch](https://github.com/uktrade/.github/blob/main/SECURITY.md#branch-protection-rules)
|
|
32
|
+
- [X] [GitHub Secret Protection is enabled and blocking secrets](https://github.com/uktrade/.github/blob/main/SECURITY.md#github-secret-protection)
|
|
33
|
+
- [X] [The relevant vulnerability scans are active](https://github.com/uktrade/.github/blob/main/SECURITY.md#vulnerability-scanning)
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
- [ ] This is the smallest, simplest solution to the problem
|
|
20
20
|
- [ ] I've read [our code standards](https://uktrade.github.io/matchlab/contributing/) and this code follows them
|
|
21
21
|
- [ ] All new code is tested
|
|
22
|
+
- [ ] I've ensured no secret values are present
|
|
22
23
|
- I've updated all relevant documentation (select all that apply)
|
|
23
24
|
- [ ] API documentation (docstrings and indexes)
|
|
24
25
|
- [ ] Tutorials
|
|
@@ -168,7 +168,7 @@ def blocks_from_md(path: Path) -> Iterator[tuple[str, str]]:
|
|
|
168
168
|
text = re.sub(r"^#{1,6}\s*", "", text, flags=re.MULTILINE) # headings
|
|
169
169
|
text = re.sub(r"\*\*([^*]+)\*\*", r"\1", text) # bold
|
|
170
170
|
text = re.sub(r"\*([^*]+)\*", r"\1", text) # italic
|
|
171
|
-
# admonition marker lines (
|
|
171
|
+
# admonition marker lines (zensical-style), e.g. !!! warning "title"
|
|
172
172
|
text = re.sub(r'^!!!\s+\S+(\s+".*?")?\s*$', "", text, flags=re.MULTILINE)
|
|
173
173
|
|
|
174
174
|
table_row = re.compile(r"^\s*\|.*\|\s*$")
|
|
@@ -11,18 +11,18 @@ repos:
|
|
|
11
11
|
pass_filenames: false
|
|
12
12
|
stages: [pre-commit]
|
|
13
13
|
|
|
14
|
-
# Verify
|
|
15
|
-
- id:
|
|
16
|
-
name:
|
|
17
|
-
description: "Verify
|
|
18
|
-
entry: uv run
|
|
14
|
+
# Verify documentation build
|
|
15
|
+
- id: docs
|
|
16
|
+
name: docs
|
|
17
|
+
description: "Verify documentation builds without errors"
|
|
18
|
+
entry: uv run zensical build --strict
|
|
19
19
|
language: system
|
|
20
20
|
pass_filenames: false
|
|
21
21
|
stages: [pre-commit]
|
|
22
22
|
|
|
23
23
|
# Mandatory internal hooks
|
|
24
24
|
- repo: https://github.com/uktrade/github-standards
|
|
25
|
-
rev: v1.3
|
|
25
|
+
rev: v1.4.3 # update periodically with pre-commit autoupdate
|
|
26
26
|
hooks:
|
|
27
27
|
- id: run-security-scan
|
|
28
28
|
verbose: false
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: matchlab
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
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/
|
|
@@ -33,7 +33,13 @@ Requires-Dist: sqlglot[c]>=30.0.3
|
|
|
33
33
|
Requires-Dist: textual>=0.80
|
|
34
34
|
Dynamic: license-file
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
<p align="center">
|
|
37
|
+
<picture>
|
|
38
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/uktrade/matchbox/refs/heads/matchlab/docs/assets/matchlab-logo-dark.svg">
|
|
39
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/uktrade/matchbox/refs/heads/matchlab/docs/assets/matchlab-logo-light.svg">
|
|
40
|
+
<img alt="Shows the matchlab logo in light or dark color mode." src="https://raw.githubusercontent.com/uktrade/matchbox/refs/heads/matchlab/docs/assets/matchlab-logo-light.svg">
|
|
41
|
+
</picture>
|
|
42
|
+
</p>
|
|
37
43
|
|
|
38
44
|
**A local-first library for building, running and evaluating entity resolution pipelines.**
|
|
39
45
|
|
|
@@ -83,7 +89,7 @@ pip install matchlab
|
|
|
83
89
|
|
|
84
90
|
## Coming from Matchbox?
|
|
85
91
|
|
|
86
|
-
matchlab is the successor to `matchbox-db`, with the server removed and the client API rebuilt. It's a hard break — see the [migration guide](https://uktrade.github.io/matchlab/
|
|
92
|
+
matchlab is the successor to `matchbox-db`, with the server removed and the client API rebuilt. It's a hard break — see the [migration guide](https://uktrade.github.io/matchlab/guide/matchbox-to-matchlab/).
|
|
87
93
|
|
|
88
94
|
## Development
|
|
89
95
|
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/uktrade/matchbox/refs/heads/matchlab/docs/assets/matchlab-logo-dark.svg">
|
|
4
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/uktrade/matchbox/refs/heads/matchlab/docs/assets/matchlab-logo-light.svg">
|
|
5
|
+
<img alt="Shows the matchlab logo in light or dark color mode." src="https://raw.githubusercontent.com/uktrade/matchbox/refs/heads/matchlab/docs/assets/matchlab-logo-light.svg">
|
|
6
|
+
</picture>
|
|
7
|
+
</p>
|
|
2
8
|
|
|
3
9
|
**A local-first library for building, running and evaluating entity resolution pipelines.**
|
|
4
10
|
|
|
@@ -48,7 +54,7 @@ pip install matchlab
|
|
|
48
54
|
|
|
49
55
|
## Coming from Matchbox?
|
|
50
56
|
|
|
51
|
-
matchlab is the successor to `matchbox-db`, with the server removed and the client API rebuilt. It's a hard break — see the [migration guide](https://uktrade.github.io/matchlab/
|
|
57
|
+
matchlab is the successor to `matchbox-db`, with the server removed and the client API rebuilt. It's a hard break — see the [migration guide](https://uktrade.github.io/matchlab/guide/matchbox-to-matchlab/).
|
|
52
58
|
|
|
53
59
|
## Development
|
|
54
60
|
|
|
@@ -24,7 +24,7 @@ from benchmarks.data import Warehouse
|
|
|
24
24
|
from benchmarks.measurements import Environment, Run, SweepResult
|
|
25
25
|
from benchmarks.runner import CaseFailed
|
|
26
26
|
from benchmarks.topologies import Topology
|
|
27
|
-
from matchlab.
|
|
27
|
+
from matchlab.stores.base import format_bytes
|
|
28
28
|
|
|
29
29
|
RESULTS = "benchmarks/results"
|
|
30
30
|
|
|
@@ -18,7 +18,7 @@ from pathlib import Path
|
|
|
18
18
|
from benchmarks.cases import Case, Store
|
|
19
19
|
from benchmarks.measurements import Measurement
|
|
20
20
|
from benchmarks.topologies import build, declare
|
|
21
|
-
from matchlab.
|
|
21
|
+
from matchlab.stores import DuckDBStore
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
def peak_rss() -> int:
|
|
@@ -58,7 +58,7 @@ def measure(case: Case, path: Path, warehouse_rows: int) -> Measurement:
|
|
|
58
58
|
if case.store is Store.MEMORY
|
|
59
59
|
else str(Path(directory) / "store.duckdb")
|
|
60
60
|
)
|
|
61
|
-
store =
|
|
61
|
+
store = DuckDBStore(location)
|
|
62
62
|
try:
|
|
63
63
|
plan = build(case.topology, declare(path, case.warehouse.sources))
|
|
64
64
|
|
|
@@ -13,7 +13,7 @@ from rich.text import Text
|
|
|
13
13
|
|
|
14
14
|
from benchmarks.measurements import Result, Run, SweepResult
|
|
15
15
|
from benchmarks.topologies import Topology
|
|
16
|
-
from matchlab.
|
|
16
|
+
from matchlab.stores.base import format_bytes
|
|
17
17
|
|
|
18
18
|
# The narrowest a run may be rendered. The sweep tables carry eleven columns
|
|
19
19
|
# because eleven things are worth comparing side by side, and wrapping them into
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Dedupers
|
|
2
|
+
|
|
3
|
+
Model methodologies that deduplicate a [`RecordStep`][matchlab.recordstep].
|
|
4
|
+
|
|
5
|
+
::: matchlab.models.dedupers.base
|
|
6
|
+
options:
|
|
7
|
+
show_root_heading: true
|
|
8
|
+
show_root_full_path: true
|
|
9
|
+
members_order: source
|
|
10
|
+
show_if_no_docstring: true
|
|
11
|
+
docstring_style: google
|
|
12
|
+
show_signature_annotations: true
|
|
13
|
+
separate_signature: true
|
|
14
|
+
filters:
|
|
15
|
+
- "!^[A-Z]$"
|
|
16
|
+
- "!^_"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.models.dedupers.naive
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Models
|
|
2
2
|
|
|
3
|
-
The `Model` step, and the methodologies it runs.
|
|
3
|
+
The `Model` step, and the methodologies it runs. Methodologies are either [dedupers](./dedupers) or [linkers](./linkers).
|
|
4
4
|
|
|
5
|
-
::: matchlab.models
|
|
5
|
+
::: matchlab.models.models
|
|
6
6
|
options:
|
|
7
7
|
show_root_heading: true
|
|
8
8
|
show_root_full_path: true
|
|
@@ -15,24 +15,7 @@ The `Model` step, and the methodologies it runs. A model wraps exactly one [dedu
|
|
|
15
15
|
- "!^[A-Z]$"
|
|
16
16
|
- "!^_"
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
::: matchlab.models.dedupers
|
|
21
|
-
options:
|
|
22
|
-
show_root_heading: true
|
|
23
|
-
show_root_full_path: true
|
|
24
|
-
members_order: source
|
|
25
|
-
show_if_no_docstring: true
|
|
26
|
-
docstring_style: google
|
|
27
|
-
show_signature_annotations: true
|
|
28
|
-
separate_signature: true
|
|
29
|
-
filters:
|
|
30
|
-
- "!^[A-Z]$"
|
|
31
|
-
- "!^_"
|
|
32
|
-
|
|
33
|
-
## Linkers
|
|
34
|
-
|
|
35
|
-
::: matchlab.models.linkers
|
|
18
|
+
::: matchlab.models.comparison
|
|
36
19
|
options:
|
|
37
20
|
show_root_heading: true
|
|
38
21
|
show_root_full_path: true
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.models.linkers.deterministic
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Linkers
|
|
2
|
+
|
|
3
|
+
Model methodologies that link two [`RecordStep`s][matchlab.recordstep].
|
|
4
|
+
|
|
5
|
+
::: matchlab.models.linkers.base
|
|
6
|
+
options:
|
|
7
|
+
show_root_heading: true
|
|
8
|
+
show_root_full_path: true
|
|
9
|
+
members_order: source
|
|
10
|
+
show_if_no_docstring: true
|
|
11
|
+
docstring_style: google
|
|
12
|
+
show_signature_annotations: true
|
|
13
|
+
separate_signature: true
|
|
14
|
+
filters:
|
|
15
|
+
- "!^[A-Z]$"
|
|
16
|
+
- "!^_"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.models.linkers.splinklinker
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.models.linkers.weighteddeterministic
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.resolvers.components
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
matchlab-0.1.0.dev4/docs/api/sources.md → matchlab-0.1.1/docs/api/plan/steps/resolvers/index.md
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Resolvers
|
|
2
2
|
|
|
3
|
-
The `
|
|
3
|
+
The `Resolver` step. A resolver's methodology takes the output of a [model][matchlab.models.models] and resolves it into entities. It is a [`RecordStep`][matchlab.recordstep] that can be used in further entity resolution processes, or output as your final lookup.
|
|
4
4
|
|
|
5
|
-
::: matchlab.
|
|
5
|
+
::: matchlab.resolvers.resolvers
|
|
6
6
|
options:
|
|
7
7
|
show_root_heading: true
|
|
8
8
|
show_root_full_path: true
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.sources.dataframe
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Sources
|
|
2
|
+
|
|
3
|
+
The `Source` step, and the shorthands that build one. A source's methodology is a location, which it reads rows through and content-addresses them. It is where data enters a plan.
|
|
4
|
+
|
|
5
|
+
::: matchlab.sources.sources
|
|
6
|
+
options:
|
|
7
|
+
show_root_heading: true
|
|
8
|
+
show_root_full_path: true
|
|
9
|
+
members_order: source
|
|
10
|
+
show_if_no_docstring: true
|
|
11
|
+
docstring_style: google
|
|
12
|
+
show_signature_annotations: true
|
|
13
|
+
separate_signature: true
|
|
14
|
+
filters:
|
|
15
|
+
- "!^[A-Z]$"
|
|
16
|
+
- "!^_"
|
|
17
|
+
|
|
18
|
+
::: matchlab.sources.base
|
|
19
|
+
options:
|
|
20
|
+
show_root_heading: true
|
|
21
|
+
show_root_full_path: true
|
|
22
|
+
members_order: source
|
|
23
|
+
show_if_no_docstring: true
|
|
24
|
+
docstring_style: google
|
|
25
|
+
show_signature_annotations: true
|
|
26
|
+
separate_signature: true
|
|
27
|
+
filters:
|
|
28
|
+
- "!^[A-Z]$"
|
|
29
|
+
- "!^_"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.sources.relational
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.transformers.clean
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.transformers.explode
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.transformers.group
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Transformers
|
|
2
|
+
|
|
3
|
+
The `Transformer` step. A transformer's methodology is a location, which it reads rows through and content-addresses them. It is where data enters a plan.
|
|
4
|
+
|
|
5
|
+
::: matchlab.transformers.transform
|
|
6
|
+
options:
|
|
7
|
+
show_root_heading: true
|
|
8
|
+
show_root_full_path: true
|
|
9
|
+
members_order: source
|
|
10
|
+
show_if_no_docstring: true
|
|
11
|
+
docstring_style: google
|
|
12
|
+
show_signature_annotations: true
|
|
13
|
+
separate_signature: true
|
|
14
|
+
filters:
|
|
15
|
+
- "!^[A-Z]$"
|
|
16
|
+
- "!^_"
|
|
17
|
+
|
|
18
|
+
::: matchlab.transformers.base
|
|
19
|
+
options:
|
|
20
|
+
show_root_heading: true
|
|
21
|
+
show_root_full_path: true
|
|
22
|
+
members_order: source
|
|
23
|
+
show_if_no_docstring: true
|
|
24
|
+
docstring_style: google
|
|
25
|
+
show_signature_annotations: true
|
|
26
|
+
separate_signature: true
|
|
27
|
+
filters:
|
|
28
|
+
- "!^[A-Z]$"
|
|
29
|
+
- "!^_"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
::: matchlab.transformers.select
|
|
2
|
+
options:
|
|
3
|
+
show_root_heading: true
|
|
4
|
+
show_root_full_path: true
|
|
5
|
+
members_order: source
|
|
6
|
+
show_if_no_docstring: true
|
|
7
|
+
docstring_style: google
|
|
8
|
+
show_signature_annotations: true
|
|
9
|
+
separate_signature: true
|
|
10
|
+
filters:
|
|
11
|
+
- "!^[A-Z]$"
|
|
12
|
+
- "!^_"
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Stores
|
|
2
|
+
|
|
3
|
+
Entity resolution is iterative, long-running, and can easily explode in compute and memory. matchlab uses caching for stability and sharing. Stores are how you configure it.
|
|
4
|
+
|
|
5
|
+
::: matchlab.stores.default
|
|
6
|
+
options:
|
|
7
|
+
show_root_heading: true
|
|
8
|
+
show_root_full_path: true
|
|
9
|
+
members_order: source
|
|
10
|
+
show_if_no_docstring: true
|
|
11
|
+
docstring_style: google
|
|
12
|
+
show_signature_annotations: true
|
|
13
|
+
separate_signature: true
|
|
14
|
+
filters:
|
|
15
|
+
- "!^[A-Z]$"
|
|
16
|
+
- "!^_"
|
|
17
|
+
|
|
18
|
+
::: matchlab.stores.base
|
|
19
|
+
options:
|
|
20
|
+
show_root_heading: true
|
|
21
|
+
show_root_full_path: true
|
|
22
|
+
members_order: source
|
|
23
|
+
show_if_no_docstring: true
|
|
24
|
+
docstring_style: google
|
|
25
|
+
show_signature_annotations: true
|
|
26
|
+
separate_signature: true
|
|
27
|
+
filters:
|
|
28
|
+
- "!^[A-Z]$"
|
|
29
|
+
- "!^_"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="1444.3" height="490.16" viewBox="0 0 1444.3 490.16"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#e4a242;}.cls-3{fill:#f64419;}</style></defs><path class="cls-2" d="M345.26,215.05v114h-39v-71.47c2.58-3.65,4-8.48,4-13.53,0-10.45-6.03-20-16-20s-16,9.55-16,20c0,5.05,1.42,9.88,4,13.53v71.47h-42v-71.47c2.58-3.65,4-8.48,4-13.53,0-10.45-6.03-20-16-20s-16,9.55-16,20c0,5.05,1.42,9.88,4,13.53v71.47h-39v-114h-24v138h216v-138h-24Z"/><path class="cls-3" d="M369.25,212.24c0-32.96-19.22-47.45-47.93-47.45h-24c-15.36,0-22.33-5.39-24.06-27.74h-24c-1.73,22.35-8.7,27.74-24.06,27.74h-24c-28.71,0-47.93,14.48-47.93,47.45,0,.6,0,1.12-.01,2.82h24c0-1.51.02-2.23.02-2.82,0-11.58,8.85-20.21,24.01-20.21h23.91c20.38,0,31.3-8.61,36.06-25.67,4.76,17.07,15.68,25.67,36.06,25.67h23.91c15.15,0,24.01,8.63,24.01,20.21,0,.59.02,1.3.02,2.82h24c0-1.7-.01-2.22-.01-2.82Z"/><path class="cls-1" d="M561.52,190.55c-4.81-.47-9.88-.61-14.35,0-9.23,1.26-19,8.38-24.59,14.17-5.23-5.69-15.43-12.99-24.71-14.26-4.47-.61-9.54-.47-14.35,0-22.13,2.16-37.62,16.84-37.62,37.62v98.98h28v-98.98c0-5.31,5.33-8.6,9.62-9.62,4.21-1,11.51-1.06,15.35,0,3.54.98,9.62,4.32,9.62,9.62v98.98h.06v.09h28v-98.98c0-5.31,6.08-8.64,9.62-9.62,3.84-1.06,11.15-1,15.35,0,4.29,1.02,9.62,4.32,9.62,9.62v98.98h28v-98.98c0-20.78-15.5-35.46-37.62-37.62Z"/><path class="cls-1" d="M646.92,329.55c-3.47,0-7.17-.4-11.1-1.2-3.93-.8-7.63-2.23-11.1-4.3-3.47-2.07-6.3-5.07-8.5-9-2.2-3.93-3.3-8.96-3.3-15.1,0-7.33,1.6-13.4,4.8-18.2,3.2-4.8,7.77-8.57,13.7-11.3,5.93-2.73,13.03-4.63,21.3-5.7,8.27-1.07,17.4-1.6,27.4-1.6v-7.8c0-3.07-.5-5.73-1.5-8-1-2.27-2.73-4.07-5.2-5.4-2.47-1.33-5.9-2-10.3-2s-7.97.53-10.7,1.6c-2.73,1.07-4.67,2.43-5.8,4.1-1.13,1.67-1.7,3.5-1.7,5.5v2.4h-27c-.13-.67-.2-1.3-.2-1.9v-2.3c0-6.13,1.87-11.43,5.6-15.9,3.73-4.47,9-7.9,15.8-10.3,6.8-2.4,14.73-3.6,23.8-3.6,9.73,0,17.9,1.27,24.5,3.8,6.6,2.53,11.67,6.27,15.2,11.2,3.53,4.93,5.3,11.13,5.3,18.6v47.8c0,2.4.7,4.17,2.1,5.3,1.4,1.13,2.97,1.7,4.7,1.7h6.6v18.2c-1.33.67-3.4,1.37-6.2,2.1-2.8.73-6.2,1.1-10.2,1.1s-7.3-.57-10.3-1.7c-3-1.13-5.5-2.73-7.5-4.8-2-2.07-3.4-4.57-4.2-7.5h-1.4c-2.27,2.8-5.03,5.27-8.3,7.4-3.27,2.13-7.07,3.8-11.4,5-4.33,1.2-9.3,1.8-14.9,1.8ZM656.32,308.55c3.73,0,7.07-.57,10-1.7,2.93-1.13,5.4-2.67,7.4-4.6,2-1.93,3.57-4.3,4.7-7.1,1.13-2.8,1.7-5.8,1.7-9v-5.8c-7.47,0-14.13.5-20,1.5-5.87,1-10.5,2.7-13.9,5.1-3.4,2.4-5.1,5.73-5.1,10,0,2.4.6,4.47,1.8,6.2,1.2,1.73,2.93,3.07,5.2,4,2.27.93,5,1.4,8.2,1.4Z"/><path class="cls-1" d="M762.52,329.55c-6.67,0-12.07-1.2-16.2-3.6-4.13-2.4-7.13-5.63-9-9.7-1.87-4.07-2.8-8.57-2.8-13.5v-59.4h-13v-21.4h14l5.2-30h21.6v30h19.2v21.4h-19.2v54.8c0,3.2.73,5.63,2.2,7.3,1.47,1.67,3.87,2.5,7.2,2.5h9.8v18.4c-1.6.53-3.47,1.03-5.6,1.5-2.13.46-4.4.87-6.8,1.2-2.4.33-4.6.5-6.6.5Z"/><path class="cls-1" d="M840.71,329.55c-11.2,0-20.6-1.97-28.2-5.9-7.6-3.93-13.37-10-17.3-18.2-3.93-8.2-5.9-18.5-5.9-30.9s1.97-23.03,5.9-31.1c3.93-8.07,9.73-14.1,17.4-18.1,7.67-4,17.03-6,28.1-6,7.2,0,13.7.87,19.5,2.6,5.8,1.73,10.83,4.4,15.1,8,4.27,3.6,7.5,8.03,9.7,13.3,2.2,5.27,3.3,11.5,3.3,18.7h-27.8c0-4.8-.73-8.73-2.2-11.8-1.47-3.07-3.7-5.4-6.7-7-3-1.6-6.77-2.4-11.3-2.4-5.33,0-9.67,1.2-13,3.6-3.33,2.4-5.8,5.93-7.4,10.6-1.6,4.67-2.4,10.47-2.4,17.4v4.6c0,6.8.83,12.53,2.5,17.2,1.67,4.67,4.23,8.17,7.7,10.5,3.47,2.33,8,3.5,13.6,3.5,4.53,0,8.3-.8,11.3-2.4,3-1.6,5.3-4,6.9-7.2,1.6-3.2,2.4-7.07,2.4-11.6h26.4c0,6.8-1.1,12.87-3.3,18.2-2.2,5.33-5.4,9.8-9.6,13.4-4.2,3.6-9.23,6.33-15.1,8.2-5.87,1.87-12.4,2.8-19.6,2.8Z"/><path class="cls-1" d="M901.11,327.15v-144.6h27.8v51h1.4c2.27-2.8,4.97-5.23,8.1-7.3,3.13-2.07,6.67-3.7,10.6-4.9,3.93-1.2,8.23-1.8,12.9-1.8,6.93,0,13,1.27,18.2,3.8,5.2,2.53,9.23,6.53,12.1,12,2.87,5.47,4.3,12.6,4.3,21.4v70.4h-27.8v-66c0-3.33-.4-6.17-1.2-8.5-.8-2.33-1.97-4.27-3.5-5.8-1.53-1.53-3.43-2.63-5.7-3.3-2.27-.67-4.8-1-7.6-1-4.13,0-7.87,1-11.2,3-3.33,2-5.93,4.73-7.8,8.2-1.87,3.47-2.8,7.47-2.8,12v61.4h-27.8Z"/><path class="cls-1" d="M1031.5,327.15c3.19.95,6.88,1.42,11.07,1.42,2,0,4.2-.17,6.6-.5,2.4-.33,4.67-.73,6.8-1.2,2.13-.47,4-.97,5.6-1.5v-18.4h-9.8c-3.33,0-5.73-.83-7.2-2.5-1.47-1.67-2.2-4.1-2.2-7.3v-114.63s-27.8,0-27.8,0v119.22c0,4.93.93,9.43,2.8,13.5,1.87,4.07,4.87,7.3,9,9.7,1.53.89,3.24,1.62,5.13,2.18"/><path class="cls-1" d="M1103.65,329.55c-3.47,0-7.17-.4-11.1-1.2-3.93-.8-7.63-2.23-11.1-4.3-3.47-2.07-6.3-5.07-8.5-9-2.2-3.93-3.3-8.96-3.3-15.1,0-7.33,1.6-13.4,4.8-18.2,3.2-4.8,7.77-8.57,13.7-11.3,5.93-2.73,13.03-4.63,21.3-5.7,8.27-1.07,17.4-1.6,27.4-1.6v-7.8c0-3.07-.5-5.73-1.5-8-1-2.27-2.73-4.07-5.2-5.4-2.47-1.33-5.9-2-10.3-2s-7.97.53-10.7,1.6c-2.73,1.07-4.67,2.43-5.8,4.1-1.13,1.67-1.7,3.5-1.7,5.5v2.4h-27c-.13-.67-.2-1.3-.2-1.9v-2.3c0-6.13,1.87-11.43,5.6-15.9,3.73-4.47,9-7.9,15.8-10.3,6.8-2.4,14.73-3.6,23.8-3.6,9.73,0,17.9,1.27,24.5,3.8,6.6,2.53,11.67,6.27,15.2,11.2,3.53,4.93,5.3,11.13,5.3,18.6v47.8c0,2.4.7,4.17,2.1,5.3,1.4,1.13,2.97,1.7,4.7,1.7h6.6v18.2c-1.33.67-3.4,1.37-6.2,2.1-2.8.73-6.2,1.1-10.2,1.1s-7.3-.57-10.3-1.7c-3-1.13-5.5-2.73-7.5-4.8-2-2.07-3.4-4.57-4.2-7.5h-1.4c-2.27,2.8-5.03,5.27-8.3,7.4-3.27,2.13-7.07,3.8-11.4,5-4.33,1.2-9.3,1.8-14.9,1.8ZM1113.05,308.55c3.73,0,7.07-.57,10-1.7,2.93-1.13,5.4-2.67,7.4-4.6,2-1.93,3.57-4.3,4.7-7.1,1.13-2.8,1.7-5.8,1.7-9v-5.8c-7.47,0-14.13.5-20,1.5-5.87,1-10.5,2.7-13.9,5.1-3.4,2.4-5.1,5.73-5.1,10,0,2.4.6,4.47,1.8,6.2,1.2,1.73,2.93,3.07,5.2,4,2.27.93,5,1.4,8.2,1.4Z"/><path class="cls-1" d="M1248.64,329.55c-6.8,0-13.03-1.37-18.7-4.1-5.67-2.73-10.23-6.9-13.7-12.5h-1.4l-2.2,14.2h-22.8v-144.6h27.8v51h1.2c2.13-3.07,4.73-5.67,7.8-7.8,3.07-2.13,6.53-3.7,10.4-4.7,3.87-1,8.07-1.5,12.6-1.5,8.27,0,15.5,1.93,21.7,5.8,6.2,3.87,11.03,9.83,14.5,17.9,3.47,8.07,5.2,18.43,5.2,31.1s-1.7,23.07-5.1,31.2c-3.4,8.13-8.27,14.17-14.6,18.1-6.33,3.93-13.9,5.9-22.7,5.9ZM1240.04,306.75c5.6,0,10.03-1.1,13.3-3.3,3.27-2.2,5.63-5.5,7.1-9.9,1.46-4.4,2.2-9.93,2.2-16.6v-4.6c0-6.67-.73-12.23-2.2-16.7-1.47-4.47-3.83-7.8-7.1-10-3.27-2.2-7.7-3.3-13.3-3.3-4,0-7.4.7-10.2,2.1s-5.1,3.4-6.9,6c-1.8,2.6-3.17,5.83-4.1,9.7-.93,3.87-1.4,8.13-1.4,12.8v3.6c0,6.27.8,11.67,2.4,16.2,1.6,4.53,4.07,8,7.4,10.4,3.33,2.4,7.6,3.6,12.8,3.6Z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="1444.3" height="490.16" viewBox="0 0 1444.3 490.16"><defs><style>.cls-1{fill:#1b2e46;}.cls-2{fill:#e4a242;}.cls-3{fill:#f64419;}</style></defs><path class="cls-2" d="M345.26,215.05v114h-39v-71.47c2.58-3.65,4-8.48,4-13.53,0-10.45-6.03-20-16-20s-16,9.55-16,20c0,5.05,1.42,9.88,4,13.53v71.47h-42v-71.47c2.58-3.65,4-8.48,4-13.53,0-10.45-6.03-20-16-20s-16,9.55-16,20c0,5.05,1.42,9.88,4,13.53v71.47h-39v-114h-24v138h216v-138h-24Z"/><path class="cls-3" d="M369.25,212.24c0-32.96-19.22-47.45-47.93-47.45h-24c-15.36,0-22.33-5.39-24.06-27.74h-24c-1.73,22.35-8.7,27.74-24.06,27.74h-24c-28.71,0-47.93,14.48-47.93,47.45,0,.6,0,1.12-.01,2.82h24c0-1.51.02-2.23.02-2.82,0-11.58,8.85-20.21,24.01-20.21h23.91c20.38,0,31.3-8.61,36.06-25.67,4.76,17.07,15.68,25.67,36.06,25.67h23.91c15.15,0,24.01,8.63,24.01,20.21,0,.59.02,1.3.02,2.82h24c0-1.7-.01-2.22-.01-2.82Z"/><path class="cls-1" d="M561.52,190.55c-4.81-.47-9.88-.61-14.35,0-9.23,1.26-19,8.38-24.59,14.17-5.23-5.69-15.43-12.99-24.71-14.26-4.47-.61-9.54-.47-14.35,0-22.13,2.16-37.62,16.84-37.62,37.62v98.98h28v-98.98c0-5.31,5.33-8.6,9.62-9.62,4.21-1,11.51-1.06,15.35,0,3.54.98,9.62,4.32,9.62,9.62v98.98h.06v.09h28v-98.98c0-5.31,6.08-8.64,9.62-9.62,3.84-1.06,11.15-1,15.35,0,4.29,1.02,9.62,4.32,9.62,9.62v98.98h28v-98.98c0-20.78-15.5-35.46-37.62-37.62Z"/><path class="cls-1" d="M646.92,329.55c-3.47,0-7.17-.4-11.1-1.2-3.93-.8-7.63-2.23-11.1-4.3-3.47-2.07-6.3-5.07-8.5-9-2.2-3.93-3.3-8.96-3.3-15.1,0-7.33,1.6-13.4,4.8-18.2,3.2-4.8,7.77-8.57,13.7-11.3,5.93-2.73,13.03-4.63,21.3-5.7,8.27-1.07,17.4-1.6,27.4-1.6v-7.8c0-3.07-.5-5.73-1.5-8-1-2.27-2.73-4.07-5.2-5.4-2.47-1.33-5.9-2-10.3-2s-7.97.53-10.7,1.6c-2.73,1.07-4.67,2.43-5.8,4.1-1.13,1.67-1.7,3.5-1.7,5.5v2.4h-27c-.13-.67-.2-1.3-.2-1.9v-2.3c0-6.13,1.87-11.43,5.6-15.9,3.73-4.47,9-7.9,15.8-10.3,6.8-2.4,14.73-3.6,23.8-3.6,9.73,0,17.9,1.27,24.5,3.8,6.6,2.53,11.67,6.27,15.2,11.2,3.53,4.93,5.3,11.13,5.3,18.6v47.8c0,2.4.7,4.17,2.1,5.3,1.4,1.13,2.97,1.7,4.7,1.7h6.6v18.2c-1.33.67-3.4,1.37-6.2,2.1-2.8.73-6.2,1.1-10.2,1.1s-7.3-.57-10.3-1.7c-3-1.13-5.5-2.73-7.5-4.8-2-2.07-3.4-4.57-4.2-7.5h-1.4c-2.27,2.8-5.03,5.27-8.3,7.4-3.27,2.13-7.07,3.8-11.4,5-4.33,1.2-9.3,1.8-14.9,1.8ZM656.32,308.55c3.73,0,7.07-.57,10-1.7,2.93-1.13,5.4-2.67,7.4-4.6,2-1.93,3.57-4.3,4.7-7.1,1.13-2.8,1.7-5.8,1.7-9v-5.8c-7.47,0-14.13.5-20,1.5-5.87,1-10.5,2.7-13.9,5.1-3.4,2.4-5.1,5.73-5.1,10,0,2.4.6,4.47,1.8,6.2,1.2,1.73,2.93,3.07,5.2,4,2.27.93,5,1.4,8.2,1.4Z"/><path class="cls-1" d="M762.52,329.55c-6.67,0-12.07-1.2-16.2-3.6-4.13-2.4-7.13-5.63-9-9.7-1.87-4.07-2.8-8.57-2.8-13.5v-59.4h-13v-21.4h14l5.2-30h21.6v30h19.2v21.4h-19.2v54.8c0,3.2.73,5.63,2.2,7.3,1.47,1.67,3.87,2.5,7.2,2.5h9.8v18.4c-1.6.53-3.47,1.03-5.6,1.5-2.13.46-4.4.87-6.8,1.2-2.4.33-4.6.5-6.6.5Z"/><path class="cls-1" d="M840.71,329.55c-11.2,0-20.6-1.97-28.2-5.9-7.6-3.93-13.37-10-17.3-18.2-3.93-8.2-5.9-18.5-5.9-30.9s1.97-23.03,5.9-31.1c3.93-8.07,9.73-14.1,17.4-18.1,7.67-4,17.03-6,28.1-6,7.2,0,13.7.87,19.5,2.6,5.8,1.73,10.83,4.4,15.1,8,4.27,3.6,7.5,8.03,9.7,13.3,2.2,5.27,3.3,11.5,3.3,18.7h-27.8c0-4.8-.73-8.73-2.2-11.8-1.47-3.07-3.7-5.4-6.7-7-3-1.6-6.77-2.4-11.3-2.4-5.33,0-9.67,1.2-13,3.6-3.33,2.4-5.8,5.93-7.4,10.6-1.6,4.67-2.4,10.47-2.4,17.4v4.6c0,6.8.83,12.53,2.5,17.2,1.67,4.67,4.23,8.17,7.7,10.5,3.47,2.33,8,3.5,13.6,3.5,4.53,0,8.3-.8,11.3-2.4,3-1.6,5.3-4,6.9-7.2,1.6-3.2,2.4-7.07,2.4-11.6h26.4c0,6.8-1.1,12.87-3.3,18.2-2.2,5.33-5.4,9.8-9.6,13.4-4.2,3.6-9.23,6.33-15.1,8.2-5.87,1.87-12.4,2.8-19.6,2.8Z"/><path class="cls-1" d="M901.11,327.15v-144.6h27.8v51h1.4c2.27-2.8,4.97-5.23,8.1-7.3,3.13-2.07,6.67-3.7,10.6-4.9,3.93-1.2,8.23-1.8,12.9-1.8,6.93,0,13,1.27,18.2,3.8,5.2,2.53,9.23,6.53,12.1,12,2.87,5.47,4.3,12.6,4.3,21.4v70.4h-27.8v-66c0-3.33-.4-6.17-1.2-8.5-.8-2.33-1.97-4.27-3.5-5.8-1.53-1.53-3.43-2.63-5.7-3.3-2.27-.67-4.8-1-7.6-1-4.13,0-7.87,1-11.2,3-3.33,2-5.93,4.73-7.8,8.2-1.87,3.47-2.8,7.47-2.8,12v61.4h-27.8Z"/><path class="cls-1" d="M1031.5,327.15c3.19.95,6.88,1.42,11.07,1.42,2,0,4.2-.17,6.6-.5,2.4-.33,4.67-.73,6.8-1.2,2.13-.47,4-.97,5.6-1.5v-18.4h-9.8c-3.33,0-5.73-.83-7.2-2.5-1.47-1.67-2.2-4.1-2.2-7.3v-114.63s-27.8,0-27.8,0v119.22c0,4.93.93,9.43,2.8,13.5,1.87,4.07,4.87,7.3,9,9.7,1.53.89,3.24,1.62,5.13,2.18"/><path class="cls-1" d="M1103.65,329.55c-3.47,0-7.17-.4-11.1-1.2-3.93-.8-7.63-2.23-11.1-4.3-3.47-2.07-6.3-5.07-8.5-9-2.2-3.93-3.3-8.96-3.3-15.1,0-7.33,1.6-13.4,4.8-18.2,3.2-4.8,7.77-8.57,13.7-11.3,5.93-2.73,13.03-4.63,21.3-5.7,8.27-1.07,17.4-1.6,27.4-1.6v-7.8c0-3.07-.5-5.73-1.5-8-1-2.27-2.73-4.07-5.2-5.4-2.47-1.33-5.9-2-10.3-2s-7.97.53-10.7,1.6c-2.73,1.07-4.67,2.43-5.8,4.1-1.13,1.67-1.7,3.5-1.7,5.5v2.4h-27c-.13-.67-.2-1.3-.2-1.9v-2.3c0-6.13,1.87-11.43,5.6-15.9,3.73-4.47,9-7.9,15.8-10.3,6.8-2.4,14.73-3.6,23.8-3.6,9.73,0,17.9,1.27,24.5,3.8,6.6,2.53,11.67,6.27,15.2,11.2,3.53,4.93,5.3,11.13,5.3,18.6v47.8c0,2.4.7,4.17,2.1,5.3,1.4,1.13,2.97,1.7,4.7,1.7h6.6v18.2c-1.33.67-3.4,1.37-6.2,2.1-2.8.73-6.2,1.1-10.2,1.1s-7.3-.57-10.3-1.7c-3-1.13-5.5-2.73-7.5-4.8-2-2.07-3.4-4.57-4.2-7.5h-1.4c-2.27,2.8-5.03,5.27-8.3,7.4-3.27,2.13-7.07,3.8-11.4,5-4.33,1.2-9.3,1.8-14.9,1.8ZM1113.05,308.55c3.73,0,7.07-.57,10-1.7,2.93-1.13,5.4-2.67,7.4-4.6,2-1.93,3.57-4.3,4.7-7.1,1.13-2.8,1.7-5.8,1.7-9v-5.8c-7.47,0-14.13.5-20,1.5-5.87,1-10.5,2.7-13.9,5.1-3.4,2.4-5.1,5.73-5.1,10,0,2.4.6,4.47,1.8,6.2,1.2,1.73,2.93,3.07,5.2,4,2.27.93,5,1.4,8.2,1.4Z"/><path class="cls-1" d="M1248.64,329.55c-6.8,0-13.03-1.37-18.7-4.1-5.67-2.73-10.23-6.9-13.7-12.5h-1.4l-2.2,14.2h-22.8v-144.6h27.8v51h1.2c2.13-3.07,4.73-5.67,7.8-7.8,3.07-2.13,6.53-3.7,10.4-4.7,3.87-1,8.07-1.5,12.6-1.5,8.27,0,15.5,1.93,21.7,5.8,6.2,3.87,11.03,9.83,14.5,17.9,3.47,8.07,5.2,18.43,5.2,31.1s-1.7,23.07-5.1,31.2c-3.4,8.13-8.27,14.17-14.6,18.1-6.33,3.93-13.9,5.9-22.7,5.9ZM1240.04,306.75c5.6,0,10.03-1.1,13.3-3.3,3.27-2.2,5.63-5.5,7.1-9.9,1.46-4.4,2.2-9.93,2.2-16.6v-4.6c0-6.67-.73-12.23-2.2-16.7-1.47-4.47-3.83-7.8-7.1-10-3.27-2.2-7.7-3.3-13.3-3.3-4,0-7.4.7-10.2,2.1s-5.1,3.4-6.9,6c-1.8,2.6-3.17,5.83-4.1,9.7-.93,3.87-1.4,8.13-1.4,12.8v3.6c0,6.27.8,11.67,2.4,16.2,1.6,4.53,4.07,8,7.4,10.4,3.33,2.4,7.6,3.6,12.8,3.6Z"/></svg>
|