resolvekit 0.1.8__tar.gz → 0.1.9__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.
- {resolvekit-0.1.8 → resolvekit-0.1.9}/PKG-INFO +10 -1
- {resolvekit-0.1.8 → resolvekit-0.1.9}/README.md +8 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/pyproject.toml +4 -1
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_polars_integration.py +4 -4
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/bulk.py +63 -28
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/_stages.py +2 -2
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/runner.py +25 -9
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/parse/offsets.py +4 -2
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/store/sqlite.py +9 -8
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/sources/fuzzy_retrieval.py +11 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/sources/symspell.py +9 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/LICENSE +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/NOTICE.md +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_convenience.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/admin1/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/admin2/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/admin3/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/admin4/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/admin5/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/cities/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/continental_unions/entities.sqlite +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/continental_unions/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/continental_unions/symspell.dict +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/continents/entities.sqlite +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/continents/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/continents/symspell.dict +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/countries/entities.sqlite +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/countries/geo_calibrator.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/countries/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/countries/symspell.dict +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/regions/entities.sqlite +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/regions/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/regions/symspell.dict +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/manifest.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/companies/entities.sqlite +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/companies/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/companies/symspell.dict +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/data_sources/entities.sqlite +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/data_sources/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/data_sources/symspell.dict +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/governments/entities.sqlite +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/governments/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/governments/symspell.dict +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/lenders/entities.sqlite +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/lenders/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/lenders/symspell.dict +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/political_parties/entities.sqlite +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/political_parties/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/political_parties/symspell.dict +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/providers/entities.sqlite +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/providers/metadata.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/providers/symspell.dict +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/parse/deny_list.json +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_pandas_integration.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/_outcomes.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/api.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/containment.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/country_geonames_aliases.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/datapack_layout.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/entity_validity.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/formal_names.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/geo_shared.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/groups.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/inspection.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/models.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/module_catalog.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/oecd_dac.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/build_report.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/changelog.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/chunk.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/contribution.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/core.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/discover.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/enrich.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/geo_staging.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/packaging.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/promote.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/qa.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/reconcile.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/stages.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/pipeline/types.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/presets.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/registry.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/adapter.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/base_dc_api.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/bundle.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/canonicalize.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/client.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/constants.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/_admin_walk.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/_chunk_callback.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/_geo_regions.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/_ordered_emitter.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/_progress_context.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/_streaming.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/_type_mappings.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/adapter.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/dc_api.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/discovery.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/fetch.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/mappings.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/profile.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/geo/prominence.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/models.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/node.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/org/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/org/adapter.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/org/dc_api.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/org/discovery.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/org/fetch.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/org/mappings.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/org/profile.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/rows.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/specs.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/datacommons/text.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/discovery_events.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/protocol.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/seed/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/seed/continents.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/seed/m49.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/wikidata/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/wikidata/aliases.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sources/wikidata/sitelinks.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sqlite/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sqlite/constants.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sqlite/context.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sqlite/diff.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sqlite/export.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sqlite/specs.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sqlite/validate.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/sqlite/write.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/state.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/builder/utils.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/adapters/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/adapters/_cldr_source.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/adapters/_latin_filter.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/adapters/_wikidata_client.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/adapters/cldr.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/adapters/geonames.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/adapters/multilingual_names.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/adapters/synthetic.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/adapters/wikidata.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/dataset.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/evaluation.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/fitting.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/models.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/scoring_model.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/train.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/calibration/vectorize.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/_byod.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/_pivot.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/batch.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/cache.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/code_lookup.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/containment_api.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/context_input.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/diagnostics.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/entity_lookup.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/group_api.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/info.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/inspect.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/loading/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/loading/module_catalog.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/loading/pack_loader.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/loading/paths.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/loading/store_builder.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/modules.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/output_spec.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/output_view.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/query_prep.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/resolve_flow.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/resolver.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/snap.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/api/suggest_flow.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/byod/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/byod/build.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/byod/builder.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/byod/cache.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/byod/intake.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/byod/result.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/config.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/datapack.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/download_api.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/config.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/decision.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/enrichment.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/interfaces.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/multi_runner.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/router.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/suggest_rank.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/engine/tier_utils.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/errors.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/errors_base.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/explain/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/explain/events.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/explain/feature_text.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/explain/helpers.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/explain/protocol.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/explain/renderers.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/explain/result_html.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/explain/result_types.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/explain/scorecard.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/explain/sink.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/linking/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/linking/base_linker.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/linking/base_normalizer.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/linking/linker.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/linking/normalizer.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/merge.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/_repr.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/bulk_result.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/candidate.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/crosswalk.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/entity.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/entity_attributes.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/features.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/generation.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/inspection.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/name_grammar.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/query.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/model/result.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/module_registry.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/overlay_loader.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/parse/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/parse/_pivot.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/parse/automaton.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/parse/denylist.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/parse/detect.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/parse/engine.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/parse/link.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/parse/result.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/registry.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/remote.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/store/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/store/composed_sqlite.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/store/composite.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/store/interface.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/store/merging.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/store/sqlite_helpers.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/store/store_view.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/util/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/util/iso_codes.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/util/normalization.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/util/sentinel.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/core/version.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/diagnostics/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/errors/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/extensions.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/_artifacts.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/decision.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/extractor.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/features.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/normalizer.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/pack.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/scoring.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/sources/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/sources/exact_code.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/sources/exact_name.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/sources/fts.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/sources/fuzzy.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/custom/sources/fuzzy_retrieval.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/_specificity.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/build/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/build/builder.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/constraints/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/constraints/containment.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/constraints/membership.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/constraints/temporal.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/constraints/type_constraint.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/data/.gitkeep +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/decision.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/extractor.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/features.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/linker.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/normalizer.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/pack.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/routing.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/scoring.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/sources/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/sources/_short_input.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/sources/exact_code.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/sources/exact_name.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/sources/fts.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/sources/fuzzy.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/geo/sources/query_shapes.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/_acronym.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/build/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/build/builder.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/constraints/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/constraints/country_relevance.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/constraints/parent_org.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/constraints/temporal.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/constraints/type_constraint.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/data/.gitkeep +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/decision.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/feature_extractor.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/features.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/linker.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/normalizer.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/pack.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/routing.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/scoring.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/sources/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/sources/acronym.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/sources/exact_code.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/sources/exact_name.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/sources/fts.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/sources/fuzzy.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/packs/org/sources/symspell.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/pandas/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/polars/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/py.typed +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/build/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/build/base_builder.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/build/schema.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/constraints/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/constraints/temporal_constraint.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/constraints/type_constraint.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/scoring_base.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/sources/__init__.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/sources/code_helpers.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/sources/fts_base.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/sources/fuzzy_base.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/sources/fuzzy_retrieval_base.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/sources/fuzzy_retrieval_brute_base.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/shared/sources/symspell_base.py +0 -0
- {resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/types/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: resolvekit
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
4
4
|
Summary: Entity and place resolution system that maps messy place/entity strings and codes to canonical entities
|
|
5
5
|
Keywords: entity-resolution,geocoding,place-names,data-commons,iso-codes,offline,disambiguation,normalization
|
|
6
6
|
Author: Jorge Rivera
|
|
@@ -14,6 +14,7 @@ Classifier: Operating System :: OS Independent
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.13
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
17
18
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
19
|
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
19
20
|
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
@@ -49,6 +50,14 @@ Description-Content-Type: text/markdown
|
|
|
49
50
|
|
|
50
51
|
# resolvekit
|
|
51
52
|
|
|
53
|
+
[](https://pypi.org/project/resolvekit/)
|
|
54
|
+
[](https://pypi.org/project/resolvekit/)
|
|
55
|
+
[](https://github.com/jm-rivera/resolvekit/blob/main/LICENSE)
|
|
56
|
+
[](https://github.com/jm-rivera/resolvekit/actions/workflows/test.yml)
|
|
57
|
+
[](https://jm-rivera.github.io/resolvekit/)
|
|
58
|
+
[](https://github.com/astral-sh/uv)
|
|
59
|
+
[](https://github.com/astral-sh/ruff)
|
|
60
|
+
|
|
52
61
|
Resolve messy place and entity strings — and codes — to canonical entity IDs, offline and deterministically. Feed it `"Brasil"`, `"Cote dIvoire"`, or `"Republic of Korea"` and get back `country/BRA`, `country/CIV`, `country/KOR`.
|
|
53
62
|
|
|
54
63
|
- **Offline and deterministic.** No network call, no LLM, no external service at resolution time. The same input gives the same output, today and next year.
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# resolvekit
|
|
2
2
|
|
|
3
|
+
[](https://pypi.org/project/resolvekit/)
|
|
4
|
+
[](https://pypi.org/project/resolvekit/)
|
|
5
|
+
[](https://github.com/jm-rivera/resolvekit/blob/main/LICENSE)
|
|
6
|
+
[](https://github.com/jm-rivera/resolvekit/actions/workflows/test.yml)
|
|
7
|
+
[](https://jm-rivera.github.io/resolvekit/)
|
|
8
|
+
[](https://github.com/astral-sh/uv)
|
|
9
|
+
[](https://github.com/astral-sh/ruff)
|
|
10
|
+
|
|
3
11
|
Resolve messy place and entity strings — and codes — to canonical entity IDs, offline and deterministically. Feed it `"Brasil"`, `"Cote dIvoire"`, or `"Republic of Korea"` and get back `country/BRA`, `country/CIV`, `country/KOR`.
|
|
4
12
|
|
|
5
13
|
- **Offline and deterministic.** No network call, no LLM, no external service at resolution time. The same input gives the same output, today and next year.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "resolvekit"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.9"
|
|
4
4
|
description = "Entity and place resolution system that maps messy place/entity strings and codes to canonical entities"
|
|
5
5
|
requires-python = ">=3.12"
|
|
6
6
|
|
|
@@ -19,6 +19,7 @@ classifiers = [
|
|
|
19
19
|
"Programming Language :: Python :: 3",
|
|
20
20
|
"Programming Language :: Python :: 3.12",
|
|
21
21
|
"Programming Language :: Python :: 3.13",
|
|
22
|
+
"Programming Language :: Python :: 3.14",
|
|
22
23
|
"Programming Language :: Python :: 3 :: Only",
|
|
23
24
|
"Topic :: Scientific/Engineering :: GIS",
|
|
24
25
|
"Topic :: Scientific/Engineering :: Information Analysis",
|
|
@@ -158,6 +159,8 @@ dev = [
|
|
|
158
159
|
"ruff>=0.15.12",
|
|
159
160
|
"ty>=0.0.32",
|
|
160
161
|
"pandas-stubs>=3.0.0.260204",
|
|
162
|
+
"pandas>=2.0",
|
|
163
|
+
"polars>=1.40.1",
|
|
161
164
|
]
|
|
162
165
|
test = [
|
|
163
166
|
"pytest>=9.0.3",
|
|
@@ -203,14 +203,14 @@ def register() -> None:
|
|
|
203
203
|
struct_expr = pl.struct([self._expr.alias("__value__"), *ctx_exprs])
|
|
204
204
|
|
|
205
205
|
def _apply_struct(struct_series: pl.Series) -> pl.Series:
|
|
206
|
-
# Unpack struct fields
|
|
207
|
-
|
|
208
|
-
value_list = [
|
|
206
|
+
# Unpack struct fields column-oriented; avoids materialising N dicts.
|
|
207
|
+
unpacked = struct_series.to_frame("__s").unnest("__s")
|
|
208
|
+
value_list = unpacked["__value__"].to_list()
|
|
209
209
|
|
|
210
210
|
# Build a per-row context dict where per-row keys map to lists.
|
|
211
211
|
per_row_ctx: dict[str, object] = dict(_scalar_ctx)
|
|
212
212
|
for k in ctx_field_names:
|
|
213
|
-
per_row_ctx[k] = [
|
|
213
|
+
per_row_ctx[k] = unpacked[f"__ctx_{k}"].to_list()
|
|
214
214
|
|
|
215
215
|
result = _bulk_dispatch(
|
|
216
216
|
resolver=resolver,
|
|
@@ -839,23 +839,23 @@ def _bulk_dispatch(
|
|
|
839
839
|
# Warn only when the column is wholly empty among resolved rows — a partial
|
|
840
840
|
# miss (some resolved rows have a value) is not warned.
|
|
841
841
|
if spec_active and effective_spec is not None:
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
842
|
+
n_resolved = n_missing = 0
|
|
843
|
+
for r, v in zip(out_source, out_values, strict=True):
|
|
844
|
+
if r.status == ResolutionStatus.RESOLVED:
|
|
845
|
+
n_resolved += 1
|
|
846
|
+
if v is None:
|
|
847
|
+
n_missing += 1
|
|
848
|
+
if n_resolved > 0 and n_missing == n_resolved:
|
|
849
|
+
chain_repr = [t.raw for t in effective_spec.chain]
|
|
850
|
+
# stacklevel=4 points at Resolver.bulk for the direct path;
|
|
851
|
+
# the module-level resolvekit.bulk convenience adds one more frame.
|
|
852
|
+
warnings.warn(
|
|
853
|
+
f"default output {chain_repr!r}: {n_missing} resolved value(s) "
|
|
854
|
+
f"had no output (column wholly empty among resolved rows)",
|
|
855
|
+
UserWarning,
|
|
856
|
+
stacklevel=4,
|
|
857
|
+
)
|
|
857
858
|
|
|
858
|
-
# Return a native series (not BulkResult) when pivoting and output="series".
|
|
859
859
|
scalar_to = (has_pivot or spec_active) and output == "series"
|
|
860
860
|
|
|
861
861
|
if scalar_to:
|
|
@@ -886,12 +886,9 @@ def _bulk_dispatch(
|
|
|
886
886
|
return BulkResult(values=native, source=out_source, kind=kind)
|
|
887
887
|
|
|
888
888
|
if output == "frame":
|
|
889
|
-
# Flat DataFrame: one column per record field.
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
for r, v in zip(out_source, out_values, strict=True)
|
|
893
|
-
]
|
|
894
|
-
native = _build_frame_native(records, kind, orig_index=orig_index)
|
|
889
|
+
# Flat DataFrame: one column per record field, built column-oriented.
|
|
890
|
+
frame_cols = _frame_columns_from_output(out_source, out_values)
|
|
891
|
+
native = _build_frame_native(frame_cols, kind, orig_index=orig_index)
|
|
895
892
|
return BulkResult(values=native, source=out_source, kind=kind)
|
|
896
893
|
|
|
897
894
|
# Default: wrap the native series of pivot/result values in BulkResult.
|
|
@@ -964,27 +961,65 @@ def _build_records_native(
|
|
|
964
961
|
return records
|
|
965
962
|
|
|
966
963
|
|
|
964
|
+
def _frame_columns_from_output(
|
|
965
|
+
out_source: list[ResolutionResult],
|
|
966
|
+
out_values: list[Any],
|
|
967
|
+
) -> dict[str, list[Any]]:
|
|
968
|
+
"""Build column-oriented data for ``output='frame'`` without a N-dict intermediate."""
|
|
969
|
+
col_value: list[Any] = []
|
|
970
|
+
col_status: list[Any] = []
|
|
971
|
+
col_entity_id: list[Any] = []
|
|
972
|
+
col_confidence: list[Any] = []
|
|
973
|
+
col_pack_id: list[Any] = []
|
|
974
|
+
col_query_text: list[Any] = []
|
|
975
|
+
for r, v in zip(out_source, out_values, strict=True):
|
|
976
|
+
if isinstance(v, ResolutionResult):
|
|
977
|
+
col_value.append(v.entity_id)
|
|
978
|
+
else:
|
|
979
|
+
col_value.append(v)
|
|
980
|
+
col_status.append(r.status.value)
|
|
981
|
+
col_entity_id.append(r.entity_id)
|
|
982
|
+
col_confidence.append(r.confidence)
|
|
983
|
+
col_pack_id.append(r.pack_id)
|
|
984
|
+
col_query_text.append(r.query_text)
|
|
985
|
+
return {
|
|
986
|
+
"value": col_value,
|
|
987
|
+
"status": col_status,
|
|
988
|
+
"entity_id": col_entity_id,
|
|
989
|
+
"confidence": col_confidence,
|
|
990
|
+
"pack_id": col_pack_id,
|
|
991
|
+
"query_text": col_query_text,
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
|
|
967
995
|
def _build_frame_native(
|
|
968
|
-
|
|
996
|
+
columns: dict[str, list[Any]],
|
|
969
997
|
kind: _InputKind,
|
|
970
998
|
*,
|
|
971
999
|
orig_index: Any,
|
|
972
1000
|
) -> Any:
|
|
973
1001
|
"""DataFrame assembly for ``output='frame'``.
|
|
974
1002
|
|
|
1003
|
+
Accepts column-oriented data (dict of column-name → value list) rather than
|
|
1004
|
+
a list-of-dicts, so no N-dict intermediate is ever allocated.
|
|
1005
|
+
|
|
975
1006
|
For pandas/polars, returns a DataFrame. For non-DataFrame inputs (list,
|
|
976
|
-
tuple, numpy), falls back to
|
|
977
|
-
``output='record'``.
|
|
1007
|
+
tuple, numpy), falls back to a list-of-dicts to preserve existing behaviour.
|
|
978
1008
|
"""
|
|
979
1009
|
if kind == "pandas":
|
|
980
1010
|
import pandas as pd
|
|
981
1011
|
|
|
982
|
-
return pd.DataFrame
|
|
1012
|
+
return pd.DataFrame(columns, index=orig_index)
|
|
983
1013
|
if kind == "polars":
|
|
984
1014
|
import polars as pl
|
|
985
1015
|
|
|
986
|
-
return pl.DataFrame(
|
|
987
|
-
|
|
1016
|
+
return pl.DataFrame(columns)
|
|
1017
|
+
# Non-DataFrame kinds: reconstruct list-of-dicts for backward compatibility.
|
|
1018
|
+
col_names = list(columns)
|
|
1019
|
+
col_lists = [columns[k] for k in col_names]
|
|
1020
|
+
return [
|
|
1021
|
+
dict(zip(col_names, row, strict=True)) for row in zip(*col_lists, strict=True)
|
|
1022
|
+
]
|
|
988
1023
|
|
|
989
1024
|
|
|
990
1025
|
def _build_native(
|
|
@@ -299,7 +299,7 @@ def add_evidence_to_candidates(
|
|
|
299
299
|
if candidate is None:
|
|
300
300
|
continue
|
|
301
301
|
|
|
302
|
-
candidate.sources
|
|
302
|
+
candidate.sources.append(ev)
|
|
303
303
|
merged_signals = {**candidate.retrieval.signals, **ev.signals}
|
|
304
304
|
|
|
305
305
|
# Check if new evidence has better score
|
|
@@ -384,7 +384,7 @@ def should_stop_generation(
|
|
|
384
384
|
Returns:
|
|
385
385
|
True if pipeline should stop generating candidates.
|
|
386
386
|
"""
|
|
387
|
-
if not config:
|
|
387
|
+
if not config or not config.stop_conditions:
|
|
388
388
|
return False
|
|
389
389
|
|
|
390
390
|
candidate_count = len(evidence_by_entity)
|
|
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import logging
|
|
6
6
|
import time
|
|
7
7
|
import traceback
|
|
8
|
-
from collections import defaultdict
|
|
8
|
+
from collections import OrderedDict, defaultdict
|
|
9
9
|
from collections.abc import Callable
|
|
10
10
|
from datetime import date
|
|
11
11
|
from typing import TYPE_CHECKING, Literal
|
|
@@ -46,6 +46,11 @@ from resolvekit.core.store.store_view import StoreView
|
|
|
46
46
|
|
|
47
47
|
logger = logging.getLogger(__name__)
|
|
48
48
|
|
|
49
|
+
# Maximum number of distinct entity_type_prefixes filter keys retained in the
|
|
50
|
+
# per-runner suggest-names LRU cache. Each slot can hold ~1-7 MB of name
|
|
51
|
+
# tuples; 8 slots is well under typical process RSS budgets.
|
|
52
|
+
_SUGGEST_NAMES_CACHE_MAX = 8
|
|
53
|
+
|
|
49
54
|
|
|
50
55
|
class PipelineRunner:
|
|
51
56
|
"""The core resolution pipeline runner.
|
|
@@ -114,11 +119,12 @@ class PipelineRunner:
|
|
|
114
119
|
country_relation_prefixes=country_relation_prefixes,
|
|
115
120
|
)
|
|
116
121
|
self._view = StoreView([(pack_id, store)] if store is not None else [])
|
|
117
|
-
#
|
|
118
|
-
#
|
|
119
|
-
|
|
122
|
+
# Bounded LRU cache for suggest names: maps entity_type_prefixes key →
|
|
123
|
+
# name list. Capped at _SUGGEST_NAMES_CACHE_MAX entries; oldest entry
|
|
124
|
+
# evicted when full. Each entry holds up to ~25k tuples (~1-7 MB).
|
|
125
|
+
self._suggest_names_cache: OrderedDict[
|
|
120
126
|
frozenset[str] | None, list[tuple[str, str, str, bool, str]]
|
|
121
|
-
] =
|
|
127
|
+
] = OrderedDict()
|
|
122
128
|
|
|
123
129
|
def warm(self) -> None:
|
|
124
130
|
"""Eagerly build all lazily-constructed source indexes.
|
|
@@ -486,7 +492,7 @@ class PipelineRunner:
|
|
|
486
492
|
# store's entity_type_exclude_prefixes parameter
|
|
487
493
|
# so the size check reflects only fuzzy-eligible
|
|
488
494
|
# name rows.
|
|
489
|
-
|
|
495
|
+
_names = list(
|
|
490
496
|
store.iter_suggest_names(
|
|
491
497
|
entity_type_exclude_prefixes=FUZZY_DENYLIST_PREFIXES
|
|
492
498
|
)
|
|
@@ -495,20 +501,30 @@ class PipelineRunner:
|
|
|
495
501
|
# Store doesn't support the exclude param — fall
|
|
496
502
|
# back to unfiltered. This means auto-fuzzy will
|
|
497
503
|
# be suppressed on packs with > 20k total names.
|
|
498
|
-
|
|
504
|
+
_names = list(
|
|
499
505
|
store.iter_suggest_names(entity_type_prefixes=None)
|
|
500
506
|
)
|
|
507
|
+
self._suggest_names_cache[names_key] = _names
|
|
508
|
+
if len(self._suggest_names_cache) > _SUGGEST_NAMES_CACHE_MAX:
|
|
509
|
+
self._suggest_names_cache.popitem(last=False)
|
|
510
|
+
else:
|
|
511
|
+
self._suggest_names_cache.move_to_end(names_key)
|
|
501
512
|
else:
|
|
502
513
|
names_key = entity_type_prefixes
|
|
503
514
|
if names_key not in self._suggest_names_cache:
|
|
504
515
|
try:
|
|
505
|
-
|
|
516
|
+
_names = list(
|
|
506
517
|
store.iter_suggest_names(
|
|
507
518
|
entity_type_prefixes=entity_type_prefixes
|
|
508
519
|
)
|
|
509
520
|
)
|
|
510
521
|
except NotImplementedError:
|
|
511
|
-
|
|
522
|
+
_names = []
|
|
523
|
+
self._suggest_names_cache[names_key] = _names
|
|
524
|
+
if len(self._suggest_names_cache) > _SUGGEST_NAMES_CACHE_MAX:
|
|
525
|
+
self._suggest_names_cache.popitem(last=False)
|
|
526
|
+
else:
|
|
527
|
+
self._suggest_names_cache.move_to_end(names_key)
|
|
512
528
|
names_list = self._suggest_names_cache[names_key]
|
|
513
529
|
|
|
514
530
|
run_fuzzy = fuzzy == "always" or (
|
|
@@ -69,6 +69,9 @@ from resolvekit.core.util.normalization import (
|
|
|
69
69
|
_WHITESPACE: re.Pattern[str] = re.compile(r"\s+")
|
|
70
70
|
_PUNCTUATION: re.Pattern[str] = re.compile(r"[^\w\s\-']")
|
|
71
71
|
_DIGITS: re.Pattern[str] = re.compile(r"\d")
|
|
72
|
+
_HTML_ENTITY_RE: re.Pattern[str] = re.compile(
|
|
73
|
+
r"&(?:[a-zA-Z][a-zA-Z0-9]*|#[0-9]+|#x[0-9a-fA-F]+);"
|
|
74
|
+
)
|
|
72
75
|
|
|
73
76
|
|
|
74
77
|
def _assert_supported_profile(profile: NormalizationProfile) -> None:
|
|
@@ -162,12 +165,11 @@ def _apply_html_unescape(text: str, starts: list[int], ends: list[int]) -> _Stat
|
|
|
162
165
|
Each entity (``&``, ``'``, etc.) decodes to one or more chars that
|
|
163
166
|
all carry the raw span of the whole entity token.
|
|
164
167
|
"""
|
|
165
|
-
_entity_re = re.compile(r"&(?:[a-zA-Z][a-zA-Z0-9]*|#[0-9]+|#x[0-9a-fA-F]+);")
|
|
166
168
|
|
|
167
169
|
def _decode(m: re.Match[str]) -> str:
|
|
168
170
|
return html.unescape(m.group(0))
|
|
169
171
|
|
|
170
|
-
return _apply_regex_sub(text, starts, ends,
|
|
172
|
+
return _apply_regex_sub(text, starts, ends, _HTML_ENTITY_RE, _decode)
|
|
171
173
|
|
|
172
174
|
|
|
173
175
|
def _apply_markdown_strip(text: str, starts: list[int], ends: list[int]) -> _State:
|
|
@@ -403,7 +403,9 @@ class SQLiteEntityStore(EntityStore):
|
|
|
403
403
|
return None
|
|
404
404
|
|
|
405
405
|
name_rows = conn.execute(
|
|
406
|
-
"SELECT
|
|
406
|
+
"SELECT value, value_norm, name_kind, lang, is_preferred"
|
|
407
|
+
" FROM names WHERE entity_id = ?",
|
|
408
|
+
(entity_id,),
|
|
407
409
|
).fetchall()
|
|
408
410
|
|
|
409
411
|
names = [
|
|
@@ -451,10 +453,9 @@ class SQLiteEntityStore(EntityStore):
|
|
|
451
453
|
for r in relation_rows
|
|
452
454
|
]
|
|
453
455
|
|
|
454
|
-
# Parse attrs_json if present
|
|
456
|
+
# Parse attrs_json if present (column absent in older stores).
|
|
455
457
|
attrs: dict[str, Any] = {}
|
|
456
|
-
|
|
457
|
-
if attrs_json := row_dict.get("attrs_json"):
|
|
458
|
+
if "attrs_json" in row.keys() and (attrs_json := row["attrs_json"]): # noqa: SIM118 — sqlite3.Row iterates values, not keys
|
|
458
459
|
with contextlib.suppress(json.JSONDecodeError):
|
|
459
460
|
attrs = json.loads(attrs_json)
|
|
460
461
|
|
|
@@ -604,7 +605,8 @@ class SQLiteEntityStore(EntityStore):
|
|
|
604
605
|
).fetchall()
|
|
605
606
|
|
|
606
607
|
name_rows = conn.execute(
|
|
607
|
-
f"SELECT
|
|
608
|
+
f"SELECT entity_id, value, value_norm, name_kind, lang,"
|
|
609
|
+
f" is_preferred FROM names WHERE entity_id IN ({placeholders})",
|
|
608
610
|
chunk,
|
|
609
611
|
).fetchall()
|
|
610
612
|
|
|
@@ -661,10 +663,9 @@ class SQLiteEntityStore(EntityStore):
|
|
|
661
663
|
for r in relations_by_entity.get(eid, [])
|
|
662
664
|
]
|
|
663
665
|
|
|
664
|
-
# Parse attrs_json if present
|
|
666
|
+
# Parse attrs_json if present (column absent in older stores).
|
|
665
667
|
attrs: dict[str, Any] = {}
|
|
666
|
-
|
|
667
|
-
if attrs_json := row_dict.get("attrs_json"):
|
|
668
|
+
if "attrs_json" in row.keys() and (attrs_json := row["attrs_json"]): # noqa: SIM118 — sqlite3.Row iterates values, not keys
|
|
668
669
|
with contextlib.suppress(json.JSONDecodeError):
|
|
669
670
|
attrs = json.loads(attrs_json)
|
|
670
671
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""Fuzzy retrieval source for geo entities."""
|
|
2
2
|
|
|
3
|
+
from typing import override
|
|
4
|
+
|
|
3
5
|
from resolvekit.core.model import CandidateEvidence, GenerationContext, MatchTier
|
|
4
6
|
from resolvekit.packs.geo.sources._short_input import short_input_blocked
|
|
5
7
|
from resolvekit.packs.geo.sources.symspell import _is_small_only_entity_types
|
|
@@ -39,6 +41,15 @@ class GeoFuzzyRetrievalSource(FuzzyRetrievalSource):
|
|
|
39
41
|
)
|
|
40
42
|
self._large_tier = large_tier
|
|
41
43
|
|
|
44
|
+
@override
|
|
45
|
+
def warm(self) -> None:
|
|
46
|
+
# The LARGE tier (admin2-5 / cities) is built lazily on first use; eagerly
|
|
47
|
+
# warming it loads ~800 MB for workloads that never issue a LARGE-tier
|
|
48
|
+
# query. SMALL tier is cheap and warms normally.
|
|
49
|
+
if self._large_tier:
|
|
50
|
+
return
|
|
51
|
+
super().warm()
|
|
52
|
+
|
|
42
53
|
def generate(self, ctx: GenerationContext) -> list[CandidateEvidence]:
|
|
43
54
|
"""Skip retrieval for degenerate inputs that should never match a geo
|
|
44
55
|
entity (single letters, lowercase short alpha, ``#N/A``-style noise).
|
|
@@ -216,6 +216,15 @@ class GeoSymSpellSource(SymSpellSource):
|
|
|
216
216
|
)
|
|
217
217
|
return records
|
|
218
218
|
|
|
219
|
+
@override
|
|
220
|
+
def warm(self) -> None:
|
|
221
|
+
# The LARGE tier (admin2-5 / cities) is built lazily on first use; eagerly
|
|
222
|
+
# warming it loads ~800 MB for workloads that never issue a LARGE-tier
|
|
223
|
+
# query. SMALL tier is cheap and warms normally.
|
|
224
|
+
if self._large_tier:
|
|
225
|
+
return
|
|
226
|
+
super().warm()
|
|
227
|
+
|
|
219
228
|
def generate(self, ctx: GenerationContext) -> list[CandidateEvidence]:
|
|
220
229
|
"""Skip typo correction for obvious code-like inputs and degenerate
|
|
221
230
|
short/noise inputs (single letters, ``#N/A``).
|
|
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
|
{resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/continental_unions/entities.sqlite
RENAMED
|
File without changes
|
{resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/continental_unions/metadata.json
RENAMED
|
File without changes
|
{resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/continental_unions/symspell.dict
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/geo/countries/geo_calibrator.json
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
|
{resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/political_parties/entities.sqlite
RENAMED
|
File without changes
|
{resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/political_parties/metadata.json
RENAMED
|
File without changes
|
{resolvekit-0.1.8 → resolvekit-0.1.9}/src/resolvekit/_data/org/political_parties/symspell.dict
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
|