echr-py 0.2.1__tar.gz → 0.2.2__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.
Files changed (141) hide show
  1. {echr_py-0.2.1 → echr_py-0.2.2}/CITATION.cff +1 -1
  2. {echr_py-0.2.1/echr_py.egg-info → echr_py-0.2.2}/PKG-INFO +27 -42
  3. {echr_py-0.2.1 → echr_py-0.2.2}/README.md +26 -41
  4. {echr_py-0.2.1 → echr_py-0.2.2/echr_py.egg-info}/PKG-INFO +27 -42
  5. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/__init__.py +1 -1
  6. {echr_py-0.2.1 → echr_py-0.2.2}/pyproject.toml +1 -1
  7. {echr_py-0.2.1 → echr_py-0.2.2}/LICENSE +0 -0
  8. {echr_py-0.2.1 → echr_py-0.2.2}/MANIFEST.in +0 -0
  9. {echr_py-0.2.1 → echr_py-0.2.2}/RIGHTS.md +0 -0
  10. {echr_py-0.2.1 → echr_py-0.2.2}/SECURITY.md +0 -0
  11. {echr_py-0.2.1 → echr_py-0.2.2}/echr_py.egg-info/SOURCES.txt +0 -0
  12. {echr_py-0.2.1 → echr_py-0.2.2}/echr_py.egg-info/dependency_links.txt +0 -0
  13. {echr_py-0.2.1 → echr_py-0.2.2}/echr_py.egg-info/entry_points.txt +0 -0
  14. {echr_py-0.2.1 → echr_py-0.2.2}/echr_py.egg-info/requires.txt +0 -0
  15. {echr_py-0.2.1 → echr_py-0.2.2}/echr_py.egg-info/top_level.txt +0 -0
  16. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/_aio.py +0 -0
  17. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/_sync.py +0 -0
  18. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/bilingual/__init__.py +0 -0
  19. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/bilingual/bundle.py +0 -0
  20. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/bilingual/corpus.py +0 -0
  21. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/bilingual/ecli.py +0 -0
  22. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/bilingual/reconcile.py +0 -0
  23. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/bilingual/rescue.py +0 -0
  24. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/cache/__init__.py +0 -0
  25. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/cache/store.py +0 -0
  26. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/__init__.py +0 -0
  27. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/artifacts.py +0 -0
  28. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/authority.py +0 -0
  29. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/benchmarks.py +0 -0
  30. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/catalog.py +0 -0
  31. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/extractor.py +0 -0
  32. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/graph.py +0 -0
  33. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/metrics.py +0 -0
  34. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/models.py +0 -0
  35. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/occurrences.py +0 -0
  36. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/paragraphs.py +0 -0
  37. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/reporter.py +0 -0
  38. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/citations/resolver.py +0 -0
  39. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/cli.py +0 -0
  40. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/config.py +0 -0
  41. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/data/__init__.py +0 -0
  42. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/data/citation_authority.csv +0 -0
  43. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/data/citation_authority.json +0 -0
  44. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/data/citation_authority_eng.csv +0 -0
  45. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/data/citation_authority_eng.json +0 -0
  46. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/data/citation_authority_supplements.json +0 -0
  47. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/data/historical_citation_catalog.json +0 -0
  48. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/data/kpthesaurus_eng.json +0 -0
  49. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/__init__.py +0 -0
  50. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/_sync.py +0 -0
  51. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/aio.py +0 -0
  52. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/bridge.py +0 -0
  53. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/client.py +0 -0
  54. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/collections.py +0 -0
  55. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/downloader.py +0 -0
  56. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/imports.py +0 -0
  57. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/queries.py +0 -0
  58. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/raw_download.py +0 -0
  59. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/related_scraper.py +0 -0
  60. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/execution/textract.py +0 -0
  61. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/extractors/__init__.py +0 -0
  62. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/extractors/base.py +0 -0
  63. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/graphs/__init__.py +0 -0
  64. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/graphs/adapters.py +0 -0
  65. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/graphs/assets/LICENSE-D3.txt +0 -0
  66. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/graphs/assets/d3.v7.min.js +0 -0
  67. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/graphs/export.py +0 -0
  68. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/graphs/models.py +0 -0
  69. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/graphs/template.py +0 -0
  70. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/gui/__init__.py +0 -0
  71. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/gui/app.py +0 -0
  72. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/llm/__init__.py +0 -0
  73. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/llm/base.py +0 -0
  74. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/llm/batch.py +0 -0
  75. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/llm/client.py +0 -0
  76. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/llm/providers.py +0 -0
  77. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/local/__init__.py +0 -0
  78. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/local/browse.py +0 -0
  79. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/local/codebook.py +0 -0
  80. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/local/export.py +0 -0
  81. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/local/paragraphs.py +0 -0
  82. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/local/registry.py +0 -0
  83. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/local/search.py +0 -0
  84. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/main/__init__.py +0 -0
  85. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/main/client.py +0 -0
  86. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/main/downloader.py +0 -0
  87. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/main/dsl.py +0 -0
  88. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/main/queries.py +0 -0
  89. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/main/url.py +0 -0
  90. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/mcp/__init__.py +0 -0
  91. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/mcp/__main__.py +0 -0
  92. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/mcp/install.py +0 -0
  93. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/mcp/server.py +0 -0
  94. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/models/__init__.py +0 -0
  95. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/models/case.py +0 -0
  96. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/models/citation.py +0 -0
  97. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/models/common.py +0 -0
  98. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/models/document.py +0 -0
  99. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/models/exec_case.py +0 -0
  100. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/models/exec_document.py +0 -0
  101. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/models/version.py +0 -0
  102. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/pipeline/__init__.py +0 -0
  103. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/pipeline/runner.py +0 -0
  104. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/pipeline/validation.py +0 -0
  105. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/retrieval/__init__.py +0 -0
  106. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/retrieval/benchmark.py +0 -0
  107. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/retrieval/embeddings.py +0 -0
  108. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/retrieval/hybrid.py +0 -0
  109. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/retrieval/providers.py +0 -0
  110. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/studies/__init__.py +0 -0
  111. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/studies/batch.py +0 -0
  112. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/studies/hooks.py +0 -0
  113. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/studies/jobs.py +0 -0
  114. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/studies/models.py +0 -0
  115. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/studies/runner.py +0 -0
  116. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/studies/schemas/citation-use-minimal.json +0 -0
  117. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/studies/schemas/citation-use-multiaxial.json +0 -0
  118. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/studies/spec.py +0 -0
  119. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/studies/taxonomies.py +0 -0
  120. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/text/__init__.py +0 -0
  121. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/text/composition.py +0 -0
  122. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/text/conversion.py +0 -0
  123. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/text/dispositive.py +0 -0
  124. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/text/judges.py +0 -0
  125. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/text/opinions.py +0 -0
  126. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/text/segmentation.py +0 -0
  127. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/text/spine.py +0 -0
  128. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/thesaurus.py +0 -0
  129. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/utils/__init__.py +0 -0
  130. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/utils/downloads.py +0 -0
  131. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/utils/jsonl.py +0 -0
  132. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/utils/retry.py +0 -0
  133. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/utils/runlog.py +0 -0
  134. {echr_py-0.2.1 → echr_py-0.2.2}/hudoc_py/versions.py +0 -0
  135. {echr_py-0.2.1 → echr_py-0.2.2}/release-requirements.txt +0 -0
  136. {echr_py-0.2.1 → echr_py-0.2.2}/scripts/check_sdist.py +0 -0
  137. {echr_py-0.2.1 → echr_py-0.2.2}/scripts/check_wheel.py +0 -0
  138. {echr_py-0.2.1 → echr_py-0.2.2}/scripts/public_package_files.txt +0 -0
  139. {echr_py-0.2.1 → echr_py-0.2.2}/scripts/public_payload_hashes.json +0 -0
  140. {echr_py-0.2.1 → echr_py-0.2.2}/scripts/verify_release.py +0 -0
  141. {echr_py-0.2.1 → echr_py-0.2.2}/setup.cfg +0 -0
@@ -5,7 +5,7 @@ type: software
5
5
  authors:
6
6
  - family-names: Ridi
7
7
  given-names: Niccolo
8
- version: 0.2.1
8
+ version: 0.2.2
9
9
  date-released: 2026-08-21
10
10
  license: MIT
11
11
  repository-code: "https://github.com/niccoloridi/echr-py"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: echr-py
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Pythonic acquisition of HUDOC and HUDOC-EXEC metadata and source documents for ECtHR research.
5
5
  Author-email: Niccolo Ridi <niccoloridi@gmail.com>
6
6
  License-Expression: MIT
@@ -102,7 +102,7 @@ Dynamic: license-file
102
102
  <a href="https://github.com/niccoloridi/echr-py/actions/workflows/ci.yml"><img src="https://github.com/niccoloridi/echr-py/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
103
103
  <img src="https://img.shields.io/badge/python-3.11%E2%80%933.14-3776AB.svg" alt="Python 3.11–3.14">
104
104
  <a href="https://github.com/niccoloridi/echr-py/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="MIT license"></a>
105
- <img src="https://img.shields.io/badge/version-0.2.1-blue.svg" alt="Version 0.2.1">
105
+ <img src="https://img.shields.io/badge/version-0.2.2-blue.svg" alt="Version 0.2.2">
106
106
  </p>
107
107
 
108
108
  `echr-py` is a research engineering toolkit for the case law of the European
@@ -495,7 +495,7 @@ without cloning the repository:
495
495
 
496
496
  ```bash
497
497
  claude mcp add --scope user --transport stdio echr-py -- \
498
- "$(command -v uvx)" --from 'echr-py[mcp]==0.2.1' echr-py mcp
498
+ "$(command -v uvx)" --from 'echr-py[mcp]==0.2.2' echr-py mcp
499
499
  claude mcp get echr-py
500
500
  ```
501
501
 
@@ -578,48 +578,33 @@ and graphs without mutating external state. Study jobs require an explicit
578
578
  `--enable-jobs` launch configuration with permitted roots, provider and hook
579
579
  allowlists, pricing, and per-job budgets.
580
580
 
581
- ## Which tool fits which job?
581
+ ## See also
582
582
 
583
- The ECtHR research ecosystem now offers several useful but differently scoped
584
- projects:
583
+ Other projects working on ECtHR material:
585
584
 
586
- | If you need… | Start with… |
587
- | --- | --- |
588
- | A multilingual corpus builder with paragraph-, opinion-, footnote-, and exact-citation provenance | **`echr-py`** |
589
- | A hosted search and reading interface over an existing English snapshot | [HUDOC Researcher](https://doi.org/10.5281/zenodo.21319704) |
590
- | A PyPI extractor and SCL network workflow | [`echr-extractor`](https://pypi.org/project/echr-extractor/) |
591
- | A ready processed corpus and hosted API | [ECHR Open Data](https://echr-opendata.eu/) |
592
- | Selective human labels for judicial consideration and Convention provisions | [Mumford et al.](https://doi.org/10.3233/FAIA251584) |
593
- | A prior-case-retrieval dataset | [ECtHR-PCR](https://github.com/TUMLegalTech/ECHR-PCR) |
594
-
595
- At the citation layer, `echr-py` combines exact printed occurrences,
596
- uniquely corroborated procedural-document identity, citation-owned pinpoints, verified
597
- target paragraphs, majority/opinion/footnote provenance, and portable graph
598
- exports in one documented contract.
599
-
600
- Mumford's annotations are useful for studying selected citation treatments;
601
- they are not an exhaustive citation inventory or a target-paragraph graph. The
602
- annotation frame deliberately omits submissions, general-principles material,
603
- facts, procedure, operative text, appendices, individual opinions, and
604
- footnotes. A full `echr-py` run can therefore return citation occurrences from
605
- sections and components outside that annotation frame.
606
-
607
- In the frozen 115-document comparison, `echr-py` aligned 5,319 of 5,425
608
- selected ECHR annotations one-to-one (98.0%): 5,316 by strict source-span
609
- overlap and three by uniquely normalized context, with 86 ambiguous and 20
610
- unmatched annotations. These figures measure recovery of the selected
585
+ - [HUDOC Researcher](https://doi.org/10.5281/zenodo.21319704)
586
+ - [`echr-extractor`](https://pypi.org/project/echr-extractor/)
587
+ - [ECHR Open Data](https://echr-opendata.eu/)
588
+ - [Mumford et al.](https://doi.org/10.3233/FAIA251584)
589
+ - [ECtHR-PCR](https://github.com/TUMLegalTech/ECHR-PCR)
590
+
591
+ ## Benchmark
592
+
593
+ `echr-py` is compared against the curated Mumford annotation set. Those
594
+ annotations are useful for studying selected citation treatments; they are not
595
+ an exhaustive citation inventory or a target-paragraph graph. The annotation
596
+ frame deliberately omits submissions, general-principles material, facts,
597
+ procedure, operative text, appendices, individual opinions, and footnotes, so a
598
+ full `echr-py` run can return citation occurrences from sections and components
599
+ outside that frame. Any recovery figure measures recovery of those selected
611
600
  annotations, not detector precision or completeness over the judgments.
612
- Exact-document resolution covered 4,629 of the 5,319 aligned references;
613
- printed application-number identification covered 2,412 of 2,615 references
614
- that supplied a number, with no conflict among the identifications;
615
- complete target-paragraph mapping covered 3,794 of 4,543 aligned references
616
- that carried local pinpoints. Because the reference does not supply canonical
617
- target item IDs or target-paragraph links, these are coverage measures rather
618
- than independently verified document- or paragraph-resolution accuracy. The
619
- importer and methodological comparison remain available for researchers who
620
- need them, but benchmark mechanics belong in the
621
- [methodology audit](https://github.com/niccoloridi/echr-py/blob/main/docs/mumford-methodology-audit.md), not on the project
622
- homepage.
601
+
602
+ The importer and the methodological comparison remain available for researchers
603
+ who need them, and the measured figures, denominators, hashes and reproduction
604
+ records are kept in the
605
+ [methodology audit](https://github.com/niccoloridi/echr-py/blob/main/docs/mumford-methodology-audit.md)
606
+ and the frozen [benchmark manifest](https://github.com/niccoloridi/echr-py/blob/main/docs/benchmarks/mumford-full-inclusive-audit.json),
607
+ where they can carry their conditions, rather than on the project homepage.
623
608
 
624
609
  The evidence and dates behind external comparisons are maintained in the
625
610
  [claim audit](https://github.com/niccoloridi/echr-py/blob/main/docs/claim-audit.md).
@@ -14,7 +14,7 @@
14
14
  <a href="https://github.com/niccoloridi/echr-py/actions/workflows/ci.yml"><img src="https://github.com/niccoloridi/echr-py/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
15
15
  <img src="https://img.shields.io/badge/python-3.11%E2%80%933.14-3776AB.svg" alt="Python 3.11–3.14">
16
16
  <a href="https://github.com/niccoloridi/echr-py/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="MIT license"></a>
17
- <img src="https://img.shields.io/badge/version-0.2.1-blue.svg" alt="Version 0.2.1">
17
+ <img src="https://img.shields.io/badge/version-0.2.2-blue.svg" alt="Version 0.2.2">
18
18
  </p>
19
19
 
20
20
  `echr-py` is a research engineering toolkit for the case law of the European
@@ -407,7 +407,7 @@ without cloning the repository:
407
407
 
408
408
  ```bash
409
409
  claude mcp add --scope user --transport stdio echr-py -- \
410
- "$(command -v uvx)" --from 'echr-py[mcp]==0.2.1' echr-py mcp
410
+ "$(command -v uvx)" --from 'echr-py[mcp]==0.2.2' echr-py mcp
411
411
  claude mcp get echr-py
412
412
  ```
413
413
 
@@ -490,48 +490,33 @@ and graphs without mutating external state. Study jobs require an explicit
490
490
  `--enable-jobs` launch configuration with permitted roots, provider and hook
491
491
  allowlists, pricing, and per-job budgets.
492
492
 
493
- ## Which tool fits which job?
493
+ ## See also
494
494
 
495
- The ECtHR research ecosystem now offers several useful but differently scoped
496
- projects:
495
+ Other projects working on ECtHR material:
497
496
 
498
- | If you need… | Start with… |
499
- | --- | --- |
500
- | A multilingual corpus builder with paragraph-, opinion-, footnote-, and exact-citation provenance | **`echr-py`** |
501
- | A hosted search and reading interface over an existing English snapshot | [HUDOC Researcher](https://doi.org/10.5281/zenodo.21319704) |
502
- | A PyPI extractor and SCL network workflow | [`echr-extractor`](https://pypi.org/project/echr-extractor/) |
503
- | A ready processed corpus and hosted API | [ECHR Open Data](https://echr-opendata.eu/) |
504
- | Selective human labels for judicial consideration and Convention provisions | [Mumford et al.](https://doi.org/10.3233/FAIA251584) |
505
- | A prior-case-retrieval dataset | [ECtHR-PCR](https://github.com/TUMLegalTech/ECHR-PCR) |
506
-
507
- At the citation layer, `echr-py` combines exact printed occurrences,
508
- uniquely corroborated procedural-document identity, citation-owned pinpoints, verified
509
- target paragraphs, majority/opinion/footnote provenance, and portable graph
510
- exports in one documented contract.
511
-
512
- Mumford's annotations are useful for studying selected citation treatments;
513
- they are not an exhaustive citation inventory or a target-paragraph graph. The
514
- annotation frame deliberately omits submissions, general-principles material,
515
- facts, procedure, operative text, appendices, individual opinions, and
516
- footnotes. A full `echr-py` run can therefore return citation occurrences from
517
- sections and components outside that annotation frame.
518
-
519
- In the frozen 115-document comparison, `echr-py` aligned 5,319 of 5,425
520
- selected ECHR annotations one-to-one (98.0%): 5,316 by strict source-span
521
- overlap and three by uniquely normalized context, with 86 ambiguous and 20
522
- unmatched annotations. These figures measure recovery of the selected
497
+ - [HUDOC Researcher](https://doi.org/10.5281/zenodo.21319704)
498
+ - [`echr-extractor`](https://pypi.org/project/echr-extractor/)
499
+ - [ECHR Open Data](https://echr-opendata.eu/)
500
+ - [Mumford et al.](https://doi.org/10.3233/FAIA251584)
501
+ - [ECtHR-PCR](https://github.com/TUMLegalTech/ECHR-PCR)
502
+
503
+ ## Benchmark
504
+
505
+ `echr-py` is compared against the curated Mumford annotation set. Those
506
+ annotations are useful for studying selected citation treatments; they are not
507
+ an exhaustive citation inventory or a target-paragraph graph. The annotation
508
+ frame deliberately omits submissions, general-principles material, facts,
509
+ procedure, operative text, appendices, individual opinions, and footnotes, so a
510
+ full `echr-py` run can return citation occurrences from sections and components
511
+ outside that frame. Any recovery figure measures recovery of those selected
523
512
  annotations, not detector precision or completeness over the judgments.
524
- Exact-document resolution covered 4,629 of the 5,319 aligned references;
525
- printed application-number identification covered 2,412 of 2,615 references
526
- that supplied a number, with no conflict among the identifications;
527
- complete target-paragraph mapping covered 3,794 of 4,543 aligned references
528
- that carried local pinpoints. Because the reference does not supply canonical
529
- target item IDs or target-paragraph links, these are coverage measures rather
530
- than independently verified document- or paragraph-resolution accuracy. The
531
- importer and methodological comparison remain available for researchers who
532
- need them, but benchmark mechanics belong in the
533
- [methodology audit](https://github.com/niccoloridi/echr-py/blob/main/docs/mumford-methodology-audit.md), not on the project
534
- homepage.
513
+
514
+ The importer and the methodological comparison remain available for researchers
515
+ who need them, and the measured figures, denominators, hashes and reproduction
516
+ records are kept in the
517
+ [methodology audit](https://github.com/niccoloridi/echr-py/blob/main/docs/mumford-methodology-audit.md)
518
+ and the frozen [benchmark manifest](https://github.com/niccoloridi/echr-py/blob/main/docs/benchmarks/mumford-full-inclusive-audit.json),
519
+ where they can carry their conditions, rather than on the project homepage.
535
520
 
536
521
  The evidence and dates behind external comparisons are maintained in the
537
522
  [claim audit](https://github.com/niccoloridi/echr-py/blob/main/docs/claim-audit.md).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: echr-py
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: Pythonic acquisition of HUDOC and HUDOC-EXEC metadata and source documents for ECtHR research.
5
5
  Author-email: Niccolo Ridi <niccoloridi@gmail.com>
6
6
  License-Expression: MIT
@@ -102,7 +102,7 @@ Dynamic: license-file
102
102
  <a href="https://github.com/niccoloridi/echr-py/actions/workflows/ci.yml"><img src="https://github.com/niccoloridi/echr-py/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
103
103
  <img src="https://img.shields.io/badge/python-3.11%E2%80%933.14-3776AB.svg" alt="Python 3.11–3.14">
104
104
  <a href="https://github.com/niccoloridi/echr-py/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green.svg" alt="MIT license"></a>
105
- <img src="https://img.shields.io/badge/version-0.2.1-blue.svg" alt="Version 0.2.1">
105
+ <img src="https://img.shields.io/badge/version-0.2.2-blue.svg" alt="Version 0.2.2">
106
106
  </p>
107
107
 
108
108
  `echr-py` is a research engineering toolkit for the case law of the European
@@ -495,7 +495,7 @@ without cloning the repository:
495
495
 
496
496
  ```bash
497
497
  claude mcp add --scope user --transport stdio echr-py -- \
498
- "$(command -v uvx)" --from 'echr-py[mcp]==0.2.1' echr-py mcp
498
+ "$(command -v uvx)" --from 'echr-py[mcp]==0.2.2' echr-py mcp
499
499
  claude mcp get echr-py
500
500
  ```
501
501
 
@@ -578,48 +578,33 @@ and graphs without mutating external state. Study jobs require an explicit
578
578
  `--enable-jobs` launch configuration with permitted roots, provider and hook
579
579
  allowlists, pricing, and per-job budgets.
580
580
 
581
- ## Which tool fits which job?
581
+ ## See also
582
582
 
583
- The ECtHR research ecosystem now offers several useful but differently scoped
584
- projects:
583
+ Other projects working on ECtHR material:
585
584
 
586
- | If you need… | Start with… |
587
- | --- | --- |
588
- | A multilingual corpus builder with paragraph-, opinion-, footnote-, and exact-citation provenance | **`echr-py`** |
589
- | A hosted search and reading interface over an existing English snapshot | [HUDOC Researcher](https://doi.org/10.5281/zenodo.21319704) |
590
- | A PyPI extractor and SCL network workflow | [`echr-extractor`](https://pypi.org/project/echr-extractor/) |
591
- | A ready processed corpus and hosted API | [ECHR Open Data](https://echr-opendata.eu/) |
592
- | Selective human labels for judicial consideration and Convention provisions | [Mumford et al.](https://doi.org/10.3233/FAIA251584) |
593
- | A prior-case-retrieval dataset | [ECtHR-PCR](https://github.com/TUMLegalTech/ECHR-PCR) |
594
-
595
- At the citation layer, `echr-py` combines exact printed occurrences,
596
- uniquely corroborated procedural-document identity, citation-owned pinpoints, verified
597
- target paragraphs, majority/opinion/footnote provenance, and portable graph
598
- exports in one documented contract.
599
-
600
- Mumford's annotations are useful for studying selected citation treatments;
601
- they are not an exhaustive citation inventory or a target-paragraph graph. The
602
- annotation frame deliberately omits submissions, general-principles material,
603
- facts, procedure, operative text, appendices, individual opinions, and
604
- footnotes. A full `echr-py` run can therefore return citation occurrences from
605
- sections and components outside that annotation frame.
606
-
607
- In the frozen 115-document comparison, `echr-py` aligned 5,319 of 5,425
608
- selected ECHR annotations one-to-one (98.0%): 5,316 by strict source-span
609
- overlap and three by uniquely normalized context, with 86 ambiguous and 20
610
- unmatched annotations. These figures measure recovery of the selected
585
+ - [HUDOC Researcher](https://doi.org/10.5281/zenodo.21319704)
586
+ - [`echr-extractor`](https://pypi.org/project/echr-extractor/)
587
+ - [ECHR Open Data](https://echr-opendata.eu/)
588
+ - [Mumford et al.](https://doi.org/10.3233/FAIA251584)
589
+ - [ECtHR-PCR](https://github.com/TUMLegalTech/ECHR-PCR)
590
+
591
+ ## Benchmark
592
+
593
+ `echr-py` is compared against the curated Mumford annotation set. Those
594
+ annotations are useful for studying selected citation treatments; they are not
595
+ an exhaustive citation inventory or a target-paragraph graph. The annotation
596
+ frame deliberately omits submissions, general-principles material, facts,
597
+ procedure, operative text, appendices, individual opinions, and footnotes, so a
598
+ full `echr-py` run can return citation occurrences from sections and components
599
+ outside that frame. Any recovery figure measures recovery of those selected
611
600
  annotations, not detector precision or completeness over the judgments.
612
- Exact-document resolution covered 4,629 of the 5,319 aligned references;
613
- printed application-number identification covered 2,412 of 2,615 references
614
- that supplied a number, with no conflict among the identifications;
615
- complete target-paragraph mapping covered 3,794 of 4,543 aligned references
616
- that carried local pinpoints. Because the reference does not supply canonical
617
- target item IDs or target-paragraph links, these are coverage measures rather
618
- than independently verified document- or paragraph-resolution accuracy. The
619
- importer and methodological comparison remain available for researchers who
620
- need them, but benchmark mechanics belong in the
621
- [methodology audit](https://github.com/niccoloridi/echr-py/blob/main/docs/mumford-methodology-audit.md), not on the project
622
- homepage.
601
+
602
+ The importer and the methodological comparison remain available for researchers
603
+ who need them, and the measured figures, denominators, hashes and reproduction
604
+ records are kept in the
605
+ [methodology audit](https://github.com/niccoloridi/echr-py/blob/main/docs/mumford-methodology-audit.md)
606
+ and the frozen [benchmark manifest](https://github.com/niccoloridi/echr-py/blob/main/docs/benchmarks/mumford-full-inclusive-audit.json),
607
+ where they can carry their conditions, rather than on the project homepage.
623
608
 
624
609
  The evidence and dates behind external comparisons are maintained in the
625
610
  [claim audit](https://github.com/niccoloridi/echr-py/blob/main/docs/claim-audit.md).
@@ -37,7 +37,7 @@ from ._sync import (
37
37
  from .main.dsl import Q
38
38
  from .models import Case, CaseCollection, Document, Sections
39
39
 
40
- __version__ = "0.2.1"
40
+ __version__ = "0.2.2"
41
41
 
42
42
  __all__ = [
43
43
  "__version__",
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "echr-py"
7
- version = "0.2.1"
7
+ version = "0.2.2"
8
8
  description = "Pythonic acquisition of HUDOC and HUDOC-EXEC metadata and source documents for ECtHR research."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
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