nameparser 2.8.1__tar.gz → 2.8.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 (240) hide show
  1. {nameparser-2.8.1/nameparser.egg-info → nameparser-2.8.2}/PKG-INFO +2 -2
  2. {nameparser-2.8.1 → nameparser-2.8.2}/README.rst +1 -1
  3. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_config_shim.py +1 -1
  4. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_lexicon.py +3 -3
  5. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_version.py +1 -1
  6. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/__init__.py +8 -7
  7. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/_invariants.py +1 -1
  8. nameparser-2.8.2/nameparser/config/surnames.py +40 -0
  9. {nameparser-2.8.1 → nameparser-2.8.2/nameparser.egg-info}/PKG-INFO +2 -2
  10. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser.egg-info/SOURCES.txt +1 -0
  11. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_contracts.py +6 -4
  12. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_deprecations.py +3 -3
  13. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_removals_2_8_1.py +28 -7
  14. {nameparser-2.8.1 → nameparser-2.8.2}/AUTHORS +0 -0
  15. {nameparser-2.8.1 → nameparser-2.8.2}/LICENSE +0 -0
  16. {nameparser-2.8.1 → nameparser-2.8.2}/MANIFEST.in +0 -0
  17. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/__init__.py +0 -0
  18. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/__main__.py +0 -0
  19. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_facade.py +0 -0
  20. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_locale.py +0 -0
  21. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_parser.py +0 -0
  22. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/__init__.py +0 -0
  23. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_assemble.py +0 -0
  24. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_assign.py +0 -0
  25. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_classify.py +0 -0
  26. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_comma.py +0 -0
  27. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_extract.py +0 -0
  28. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_group.py +0 -0
  29. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_pieces.py +0 -0
  30. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_post_rules.py +0 -0
  31. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_script_segment.py +0 -0
  32. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_segment.py +0 -0
  33. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_state.py +0 -0
  34. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_tokenize.py +0 -0
  35. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_pipeline/_vocab.py +0 -0
  36. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_policy.py +0 -0
  37. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_render.py +0 -0
  38. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/_types.py +0 -0
  39. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/_compiled.py +0 -0
  40. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/_deprecated.py +0 -0
  41. /nameparser-2.8.1/nameparser/config/surnames.py → /nameparser-2.8.2/nameparser/config/_ko_surnames.py +0 -0
  42. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/_titles_2_6_0.py +0 -0
  43. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/bound_first_names.py +0 -0
  44. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/bound_given_names.py +0 -0
  45. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/capitalization.py +0 -0
  46. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/conjunctions.py +0 -0
  47. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/given_names.py +0 -0
  48. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/maiden_markers.py +0 -0
  49. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/particles.py +0 -0
  50. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/prefixes.py +0 -0
  51. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/regexes.py +0 -0
  52. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/suffixes.py +0 -0
  53. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/config/titles.py +0 -0
  54. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/locales/__init__.py +0 -0
  55. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/locales/ja.py +0 -0
  56. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/locales/ru.py +0 -0
  57. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/locales/tr_az.py +0 -0
  58. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/locales/zh.py +0 -0
  59. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/parser.py +0 -0
  60. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/py.typed +0 -0
  61. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/util.py +0 -0
  62. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ak.toml +0 -0
  63. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/am.toml +0 -0
  64. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ar.toml +0 -0
  65. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/as.toml +0 -0
  66. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/be.toml +0 -0
  67. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/bg.toml +0 -0
  68. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/bin.toml +0 -0
  69. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/bn.toml +0 -0
  70. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/bo.toml +0 -0
  71. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/bs.toml +0 -0
  72. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ca.toml +0 -0
  73. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/cs.toml +0 -0
  74. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/da.toml +0 -0
  75. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/de.toml +0 -0
  76. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/el.toml +0 -0
  77. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/en.toml +0 -0
  78. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/es.toml +0 -0
  79. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/et.toml +0 -0
  80. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/fa.toml +0 -0
  81. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ff.toml +0 -0
  82. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/fi.toml +0 -0
  83. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/fil.toml +0 -0
  84. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/fr.toml +0 -0
  85. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ga.toml +0 -0
  86. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/gd.toml +0 -0
  87. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/gu.toml +0 -0
  88. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ha.toml +0 -0
  89. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/he.toml +0 -0
  90. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/hi.toml +0 -0
  91. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/hr.toml +0 -0
  92. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/hu.toml +0 -0
  93. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/hy.toml +0 -0
  94. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/id.toml +0 -0
  95. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/is.toml +0 -0
  96. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/it.toml +0 -0
  97. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ja.toml +0 -0
  98. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ka.toml +0 -0
  99. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/kk.toml +0 -0
  100. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/km.toml +0 -0
  101. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/kn.toml +0 -0
  102. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ko.toml +0 -0
  103. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/kok.toml +0 -0
  104. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/lo.toml +0 -0
  105. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/lt.toml +0 -0
  106. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/lv.toml +0 -0
  107. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/mi.toml +0 -0
  108. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/mk.toml +0 -0
  109. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ml.toml +0 -0
  110. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/mn.toml +0 -0
  111. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/mr.toml +0 -0
  112. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ms.toml +0 -0
  113. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/mul.toml +0 -0
  114. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/my.toml +0 -0
  115. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/nb.toml +0 -0
  116. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ne.toml +0 -0
  117. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/nl.toml +0 -0
  118. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/nn.toml +0 -0
  119. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/or.toml +0 -0
  120. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/pa.toml +0 -0
  121. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/pl.toml +0 -0
  122. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/pt-BR.toml +0 -0
  123. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/pt.toml +0 -0
  124. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ro.toml +0 -0
  125. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ru.toml +0 -0
  126. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/sd.toml +0 -0
  127. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/shn.toml +0 -0
  128. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/si.toml +0 -0
  129. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/sk.toml +0 -0
  130. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/sl.toml +0 -0
  131. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/sr.toml +0 -0
  132. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/sv.toml +0 -0
  133. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/sw.toml +0 -0
  134. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ta.toml +0 -0
  135. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/te.toml +0 -0
  136. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/th.toml +0 -0
  137. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ti.toml +0 -0
  138. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/tr.toml +0 -0
  139. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/uk.toml +0 -0
  140. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/und.toml +0 -0
  141. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/ur.toml +0 -0
  142. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/vi.toml +0 -0
  143. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/yi.toml +0 -0
  144. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/yo.toml +0 -0
  145. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/zh.toml +0 -0
  146. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser/vocab/zu.toml +0 -0
  147. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser.egg-info/dependency_links.txt +0 -0
  148. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser.egg-info/requires.txt +0 -0
  149. {nameparser-2.8.1 → nameparser-2.8.2}/nameparser.egg-info/top_level.txt +0 -0
  150. {nameparser-2.8.1 → nameparser-2.8.2}/pyproject.toml +0 -0
  151. {nameparser-2.8.1 → nameparser-2.8.2}/setup.cfg +0 -0
  152. {nameparser-2.8.1 → nameparser-2.8.2}/tests/__init__.py +0 -0
  153. {nameparser-2.8.1 → nameparser-2.8.2}/tests/base.py +0 -0
  154. {nameparser-2.8.1 → nameparser-2.8.2}/tests/conftest.py +0 -0
  155. {nameparser-2.8.1 → nameparser-2.8.2}/tests/removals.py +0 -0
  156. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_bound_given_names.py +0 -0
  157. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_brute_force.py +0 -0
  158. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_capitalization.py +0 -0
  159. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_comma_variants.py +0 -0
  160. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_conjunctions.py +0 -0
  161. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_constants.py +0 -0
  162. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_east_slavic_patronymic_order.py +0 -0
  163. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_first_name.py +0 -0
  164. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_initials.py +0 -0
  165. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_middle_name_as_last.py +0 -0
  166. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_nicknames.py +0 -0
  167. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_output_format.py +0 -0
  168. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_particles.py +0 -0
  169. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_python_api.py +0 -0
  170. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_suffixes.py +0 -0
  171. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_titles.py +0 -0
  172. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_turkic_patronymic_order.py +0 -0
  173. {nameparser-2.8.1 → nameparser-2.8.2}/tests/test_variations.py +0 -0
  174. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/__init__.py +0 -0
  175. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/_differential_fixtures.py +0 -0
  176. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/cases.py +0 -0
  177. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/conftest.py +0 -0
  178. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/design_docs.py +0 -0
  179. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/__init__.py +0 -0
  180. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_assemble.py +0 -0
  181. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_assign.py +0 -0
  182. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_classify.py +0 -0
  183. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_comma.py +0 -0
  184. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_extract.py +0 -0
  185. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_group.py +0 -0
  186. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_pieces.py +0 -0
  187. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_post_rules.py +0 -0
  188. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_script_segment.py +0 -0
  189. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_segment.py +0 -0
  190. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_state.py +0 -0
  191. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_tokenize.py +0 -0
  192. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/pipeline/test_vocab.py +0 -0
  193. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/rules_budget.py +0 -0
  194. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/rules_doc.py +0 -0
  195. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/rules_skeleton.py +0 -0
  196. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_benchmark.py +0 -0
  197. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_cases.py +0 -0
  198. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_cldr_agreement.py +0 -0
  199. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_cldr_corpus.py +0 -0
  200. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_cli.py +0 -0
  201. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_config_aliases.py +0 -0
  202. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_config_shim.py +0 -0
  203. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_corpora.py +0 -0
  204. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_corpus_build.py +0 -0
  205. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_design_docs.py +0 -0
  206. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_differential.py +0 -0
  207. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_doc_citations.py +0 -0
  208. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_doc_spellings.py +0 -0
  209. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_facade.py +0 -0
  210. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_facade_cases.py +0 -0
  211. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_gnd_corpus.py +0 -0
  212. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_layering.py +0 -0
  213. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_lexicon.py +0 -0
  214. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_local_agreement.py +0 -0
  215. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_local_corpora.py +0 -0
  216. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_local_jrc.py +0 -0
  217. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_local_orcid.py +0 -0
  218. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_local_patentsview.py +0 -0
  219. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_locale.py +0 -0
  220. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_locales.py +0 -0
  221. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_measure.py +0 -0
  222. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_name_usage_tool.py +0 -0
  223. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_order_correspondence.py +0 -0
  224. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_parser.py +0 -0
  225. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_policy.py +0 -0
  226. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_properties.py +0 -0
  227. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_regex_sync.py +0 -0
  228. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_render.py +0 -0
  229. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_reprs.py +0 -0
  230. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_rules_budget.py +0 -0
  231. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_rules_doc.py +0 -0
  232. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_rules_doc_grammar.py +0 -0
  233. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_rules_skeleton.py +0 -0
  234. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_snapshot.py +0 -0
  235. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_types.py +0 -0
  236. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_vocab.py +0 -0
  237. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_wikidata_corpus.py +0 -0
  238. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_wikidata_native_corpus.py +0 -0
  239. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_word_report.py +0 -0
  240. {nameparser-2.8.1 → nameparser-2.8.2}/tests/v2/test_zh_surnames_tool.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nameparser
3
- Version: 2.8.1
3
+ Version: 2.8.2
4
4
  Summary: A simple Python module for parsing human names into their individual components.
5
5
  Author-email: Derek Gulbranson <derek73@gmail.com>
6
6
  License-Expression: LGPL-2.1-or-later
@@ -40,7 +40,7 @@ composable, and locale packs are opt-in.
40
40
  ⚠️ **2.8.1 adds three more DeprecationWarnings** for things 3.0 changes:
41
41
  configuring a ``Lexicon`` through its set fields
42
42
  (``Lexicon.default().add(titles={"dean"})``), reading the vocabulary
43
- constants in ``nameparser.config`` (``TITLES`` and the rest, all but
43
+ constants in ``nameparser.config`` (``TITLES`` and the rest; 2.8.2 adds
44
44
  ``surnames``), and ``nameparser.config.regexes``. A test run that turns
45
45
  warnings into errors (``-W error``, or pytest's ``filterwarnings =
46
46
  error``) fails where your code does any of these; see the `migration
@@ -12,7 +12,7 @@ composable, and locale packs are opt-in.
12
12
  ⚠️ **2.8.1 adds three more DeprecationWarnings** for things 3.0 changes:
13
13
  configuring a ``Lexicon`` through its set fields
14
14
  (``Lexicon.default().add(titles={"dean"})``), reading the vocabulary
15
- constants in ``nameparser.config`` (``TITLES`` and the rest, all but
15
+ constants in ``nameparser.config`` (``TITLES`` and the rest; 2.8.2 adds
16
16
  ``surnames``), and ``nameparser.config.regexes``. A test run that turns
17
17
  warnings into errors (``-W error``, or pytest's ``filterwarnings =
18
18
  error``) fails where your code does any of these; see the `migration
@@ -1170,7 +1170,7 @@ class Constants:
1170
1170
  from nameparser.config._compiled import MAIDEN_MARKERS
1171
1171
  from nameparser.config._compiled import (
1172
1172
  AGNOMENS, GLUED_HONORIFICS, SUFFIX_WORDS_AMBIGUOUS)
1173
- from nameparser.config.surnames import KOREAN_SURNAMES
1173
+ from nameparser.config._ko_surnames import KOREAN_SURNAMES
1174
1174
  from nameparser.config._titles_2_6_0 import TITLES_2_6_0
1175
1175
  from nameparser.config._compiled import (
1176
1176
  AFTER_GIVEN_TITLES, TITLE_MODIFIERS, TITLE_PHRASES, TITLE_STYLES,
@@ -799,7 +799,7 @@ class Lexicon:
799
799
  #: written wholly in a script :attr:`Policy.segment_scripts
800
800
  #: <nameparser.Policy.segment_scripts>` activates. The default
801
801
  #: carries the Korean census list
802
- #: (:data:`~nameparser.config.surnames.KOREAN_SURNAMES`); Chinese
802
+ #: (``nameparser/config/_ko_surnames.py``); Chinese
803
803
  #: surnames ship in locales.ZH because Han segmentation is opt-in.
804
804
  surnames: frozenset[str] = frozenset()
805
805
  #: Honorifics, and credential, office and generational words, that
@@ -1209,7 +1209,7 @@ class Lexicon:
1209
1209
  def _default_lexicon() -> Lexicon:
1210
1210
  # The compiled vocabulary, read from _compiled rather than the public
1211
1211
  # nameparser.config modules, whose constants warn at a caller's read
1212
- # since 2.8.1 (#1007); surnames.py is not deprecated.
1212
+ # since 2.8.1 (#1007), and surnames.py's since 2.8.2.
1213
1213
  from nameparser.config._compiled import BOUND_GIVEN_NAMES
1214
1214
  from nameparser.config._compiled import GIVEN_NAME_ABBREVIATIONS
1215
1215
  from nameparser.config._compiled import CAPITALIZATION_EXCEPTIONS
@@ -1221,7 +1221,7 @@ def _default_lexicon() -> Lexicon:
1221
1221
  AGNOMENS, GLUED_HONORIFICS, SUFFIX_ACRONYMS, SUFFIX_ACRONYMS_AMBIGUOUS,
1222
1222
  SUFFIX_WORDS, SUFFIX_WORDS_AMBIGUOUS,
1223
1223
  )
1224
- from nameparser.config.surnames import KOREAN_SURNAMES
1224
+ from nameparser.config._ko_surnames import KOREAN_SURNAMES
1225
1225
  from nameparser.config._compiled import (
1226
1226
  AFTER_GIVEN_TITLES, GIVEN_NAME_TITLES, TITLE_MODIFIERS, TITLE_PHRASES,
1227
1227
  TITLE_STYLES, TITLES, TITLES_AMBIGUOUS)
@@ -7,7 +7,7 @@
7
7
  #: cannot carry the dev marker, so `VERSION >= (2, 8, 1)` is already
8
8
  #: true here while 2.8.1 is unreleased. Compare `__version__` instead
9
9
  #: where that distinction matters.
10
- VERSION = (2, 8, 1)
10
+ VERSION = (2, 8, 2)
11
11
  #: PEP 440 pre-release/dev segment appended to the numeric version, or
12
12
  #: "" for a final release. Joined WITHOUT a dot ("2.0.0rc1", not
13
13
  #: "2.0.0.rc1"); setuptools reads __version__ as the package version.
@@ -10,10 +10,11 @@ rest of the facade in 3.0. The vocabulary data modules beside them
10
10
  ...) hold the word lists the 2.x :class:`~nameparser.Lexicon` is built
11
11
  from, named for its fields since 2.2 (#293); since 2.6 each (all but
12
12
  ``surnames.py``) re-exports sets compiled from the per-word TOML files
13
- in ``nameparser/vocab/`` (#737). 3.0 removes them too, all but
14
- ``surnames``, and since 2.8.1 reading one of their constants warns,
13
+ in ``nameparser/vocab/`` (#737). 3.0 removes them too, and makes
14
+ ``surnames`` private; since 2.8.1 reading one of their constants warns,
15
15
  naming what 3.0 offers in its place (#1007), as reading
16
- ``nameparser.config.regexes`` does (#1008).
16
+ ``nameparser.config.regexes`` does (#1008), and since 2.8.2 reading
17
+ ``surnames.KOREAN_SURNAMES`` does.
17
18
 
18
19
  ``RegexTupleManager`` is served from the shim purely for pickle
19
20
  compatibility (through ``__getattr__`` since 2.8, so loading such a blob
@@ -25,10 +26,10 @@ blob raises ``AttributeError`` looking up the class, not a clean
25
26
  compatibility failure.
26
27
  """
27
28
  # Maintainer note, deliberately outside the docstring: 3.0 removes the
28
- # five shim names below and the vocabulary DATA modules but surnames
29
- # (#1007, #1008, superseding decisions/3-0-reevaluations's 2026-10-28
30
- # entry, which kept the modules); the modules warn per constant since
31
- # 2.8.1. Constants and CONSTANTS are imported eagerly -- Constants
29
+ # five shim names below and the vocabulary DATA modules, surnames made
30
+ # private (#1007, #1008, superseding decisions/3-0-reevaluations's
31
+ # 2026-10-28 entry, which kept the modules); the modules warn per
32
+ # constant since 2.8.1, surnames since 2.8.2. Constants and CONSTANTS are imported eagerly -- Constants
32
33
  # warns at construction, the CONSTANTS singleton when mutated -- while
33
34
  # the three managers resolve through __getattr__ so that each caller's
34
35
  # read warns, at the caller's line, and nameparser's own reads (from
@@ -2,7 +2,7 @@
2
2
 
3
3
  Since the word lists moved to nameparser/vocab/*.toml, whose compiler
4
4
  (tools/vocab/build.py) refuses an unnormalized spelling itself, the one
5
- constant this module still checks is ``surnames.KOREAN_SURNAMES``, a
5
+ constant this module still checks is ``_ko_surnames.KOREAN_SURNAMES``, a
6
6
  segmentation list outside the per-word model.
7
7
 
8
8
  A constant is looked up in normalized form, so a stray capital or a
@@ -0,0 +1,40 @@
1
+ """The Korean census surnames the default lexicon segments unspaced
2
+ hangul on (#271), deprecated in 2.8.2: 3.0 makes the module private,
3
+ and ``Lexicon.default().surnames`` holds the same words in 2.x and 3.0
4
+ alike."""
5
+ # The list itself lives in _ko_surnames.py, which the library reads, so
6
+ # only a caller's read of this module's constant warns (#1007, as
7
+ # titles.py over _compiled).
8
+ from typing import TYPE_CHECKING
9
+
10
+ from nameparser.config import _ko_surnames
11
+ from nameparser.config._deprecated import alias_getattr
12
+
13
+ KOREAN_SURNAMES = _ko_surnames.KOREAN_SURNAMES
14
+ """
15
+ Korean surnames (#271), used by the 2.0 API's unspaced-name
16
+ segmentation: a hangul token like "김민준" splits into surname + given
17
+ name by longest match. Ships as DEFAULT vocabulary because a hangul
18
+ entry can only ever match hangul text, and hangul text is unambiguously
19
+ Korean. Chinese surnames live in ``nameparser.locales.zh`` instead (Han
20
+ segmentation is opt-in; a zh list corrupts Japanese kanji names).
21
+
22
+ Deprecated since 2.8.2, and private in 3.0: read
23
+ ``Lexicon.default().surnames``, which holds the same words, and extend
24
+ it with ``Lexicon.default() | Lexicon(surnames=frozenset({...}))``.
25
+ """
26
+
27
+ # outside the type checker's view, for the reason alias_getattr's
28
+ # docstring gives: a module __getattr__ mypy can see answers every
29
+ # missing attribute of the module
30
+ if not TYPE_CHECKING:
31
+ # 2.8.2: the constant is served by __getattr__ and warns at the line
32
+ # that reads it, naming the Lexicon field 3.0 keeps public
33
+ __getattr__, __dir__ = alias_getattr(__name__, {}, removed={
34
+ "KOREAN_SURNAMES": (
35
+ "Lexicon.default().surnames holds the same words, now and in 3.0"),
36
+ }, namespace=globals())
37
+
38
+ # star imports read __all__ and never the module __getattr__ -- see the
39
+ # note in prefixes.py
40
+ __all__ = ["KOREAN_SURNAMES"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nameparser
3
- Version: 2.8.1
3
+ Version: 2.8.2
4
4
  Summary: A simple Python module for parsing human names into their individual components.
5
5
  Author-email: Derek Gulbranson <derek73@gmail.com>
6
6
  License-Expression: LGPL-2.1-or-later
@@ -40,7 +40,7 @@ composable, and locale packs are opt-in.
40
40
  ⚠️ **2.8.1 adds three more DeprecationWarnings** for things 3.0 changes:
41
41
  configuring a ``Lexicon`` through its set fields
42
42
  (``Lexicon.default().add(titles={"dean"})``), reading the vocabulary
43
- constants in ``nameparser.config`` (``TITLES`` and the rest, all but
43
+ constants in ``nameparser.config`` (``TITLES`` and the rest; 2.8.2 adds
44
44
  ``surnames``), and ``nameparser.config.regexes``. A test run that turns
45
45
  warnings into errors (``-W error``, or pytest's ``filterwarnings =
46
46
  error``) fails where your code does any of these; see the `migration
@@ -40,6 +40,7 @@ nameparser/config/__init__.py
40
40
  nameparser/config/_compiled.py
41
41
  nameparser/config/_deprecated.py
42
42
  nameparser/config/_invariants.py
43
+ nameparser/config/_ko_surnames.py
43
44
  nameparser/config/_titles_2_6_0.py
44
45
  nameparser/config/bound_first_names.py
45
46
  nameparser/config/bound_given_names.py
@@ -85,7 +85,8 @@ def test_every_guarded_config_module_is_imported() -> None:
85
85
 
86
86
  Since the vocabulary moved to nameparser/vocab/*.toml, whose
87
87
  compiler checks it (tests/v2/test_vocab.py), the asserts left are
88
- on data still written in Python -- ``surnames`` today, which is
88
+ on data still written in Python -- ``_ko_surnames`` today (the
89
+ Korean census list, ``surnames.py``'s until 2.8.2), which is
89
90
  lazy (imported inside ``_snapshot``/``_default_lexicon``), so its
90
91
  guard fires only incidentally, whenever some other test happens to
91
92
  build a default Lexicon. Importing them all here makes every guard
@@ -101,11 +102,12 @@ def test_every_guarded_config_module_is_imported() -> None:
101
102
  import nameparser.config
102
103
 
103
104
  config_dir = pathlib.Path(nameparser.config.__file__).parent
104
- # private modules excluded: _invariants DEFINES the guard (the
105
- # substring hits its own def) and holds no vocabulary of its own
105
+ # _invariants excluded: it DEFINES the guard (the substring hits its
106
+ # own def) and holds no vocabulary of its own. Private modules are
107
+ # read, since the data moved to one in 2.8.2
106
108
  guarded = sorted(
107
109
  p.stem for p in config_dir.glob("*.py")
108
- if not p.stem.startswith("_")
110
+ if p.stem != "_invariants"
109
111
  and "assert_normalized(" in p.read_text(encoding="utf-8"))
110
112
  assert guarded, (
111
113
  f"no guarded config module found in {config_dir} -- the "
@@ -434,10 +434,10 @@ def test_a_copy_leaves_the_once_per_line_registry_alone() -> None:
434
434
  "from nameparser import HumanName",
435
435
  "from nameparser.parser import HumanName",
436
436
  "from nameparser.config import CONSTANTS, Constants",
437
- # the module imports quietly; its constants warn since 2.8.1 (#1007),
438
- # asserted in test_removals_2_8_1.py, and surnames is not removed
437
+ # the modules import quietly; their constants warn since 2.8.1
438
+ # (#1007), surnames' since 2.8.2, asserted in test_removals_2_8_1.py
439
439
  "import nameparser.config.titles",
440
- "from nameparser.config.surnames import KOREAN_SURNAMES",
440
+ "import nameparser.config.surnames",
441
441
  "from nameparser import parse; parse('John Smith')",
442
442
  ])
443
443
  def test_imports_and_the_core_stay_quiet(code: str) -> None:
@@ -7,7 +7,9 @@ line and naming the 3.0 replacement and the migration guide:
7
7
  ``Lexicon(...)``, ``add()``, ``remove()`` or ``dataclasses.replace``;
8
8
  * the constants of the eight ``nameparser.config`` vocabulary modules
9
9
  3.0 deletes (#1007);
10
- * ``nameparser.config.regexes`` (#1008).
10
+ * ``nameparser.config.regexes`` (#1008);
11
+ * and, since 2.8.2, ``nameparser.config.surnames``, which 3.0 makes
12
+ private (its words are ``Lexicon.default().surnames``).
11
13
 
12
14
  The tables are written out literally rather than read from the modules,
13
15
  for the reason tests/v2/test_config_aliases.py gives: imported, every
@@ -58,8 +60,8 @@ def _line_after() -> int:
58
60
  # -- the vocabulary and regex modules (#1007, #1008) --------------------------
59
61
 
60
62
  #: (module, constant, a phrase its replacement clause must hold). Every
61
- #: public name of the nine modules, the 1.x aliases (which
62
- #: test_config_aliases.py asserts) aside.
63
+ #: public name of the ten modules, the 1.x aliases (which
64
+ #: test_config_aliases.py asserts) aside; surnames since 2.8.2.
63
65
  REMOVED_CONSTANTS = [
64
66
  ("titles", "GIVEN_NAME_TITLES", 'words(kind="title", addresses="given")'),
65
67
  ("titles", "TITLES", 'words(kind="title")'),
@@ -89,6 +91,7 @@ REMOVED_CONSTANTS = [
89
91
  ("regexes", "re_bidi", "copy a pattern you reuse"),
90
92
  ("regexes", "EMPTY_REGEX", "copy a pattern you reuse"),
91
93
  ("regexes", "REGEXES", "copy a pattern you reuse"),
94
+ ("surnames", "KOREAN_SURNAMES", "Lexicon.default().surnames"),
92
95
  ]
93
96
  REMOVED_MODULES = sorted({m for m, _, _ in REMOVED_CONSTANTS})
94
97
 
@@ -124,7 +127,10 @@ def test_reading_a_removed_constant_warns_at_the_reading_line(
124
127
  [w] = _deprecations(record)
125
128
  _assert_removal(w, module_name, name, phrase, line)
126
129
  # served unchanged: the library's own copy is the same object
127
- if module_name != "regexes":
130
+ if module_name == "surnames":
131
+ from nameparser.config import _ko_surnames
132
+ assert value is _ko_surnames.KOREAN_SURNAMES
133
+ elif module_name != "regexes":
128
134
  from nameparser.config import _compiled
129
135
  assert value is getattr(_compiled, name)
130
136
 
@@ -151,13 +157,28 @@ def test_the_table_covers_every_public_name(module_name: str) -> None:
151
157
  assert set(module.__all__) - aliases == listed
152
158
 
153
159
 
154
- def test_the_module_imports_quietly_and_surnames_stays() -> None:
160
+ def test_the_modules_import_quietly() -> None:
155
161
  with warnings.catch_warnings():
156
162
  warnings.simplefilter("error")
157
163
  for module_name in REMOVED_MODULES:
158
164
  importlib.import_module(f"nameparser.config.{module_name}")
159
- from nameparser.config.surnames import KOREAN_SURNAMES
160
- assert KOREAN_SURNAMES
165
+
166
+
167
+ def test_the_surnames_replacement_runs_quietly_and_holds_the_same_words(
168
+ ) -> None:
169
+ # 2.8.2: the message offers Lexicon.default().surnames, the field
170
+ # 3.0 keeps public, as the code that replaces the read; run the
171
+ # code it names and hold it to the constant it replaces
172
+ from nameparser.config import surnames
173
+ with _caught() as record:
174
+ held = surnames.KOREAN_SURNAMES
175
+ [w] = _deprecations(record)
176
+ code = str(w.message).split("; ", 1)[1].split(" holds", 1)[0]
177
+ assert code == "Lexicon.default().surnames"
178
+ with warnings.catch_warnings():
179
+ warnings.simplefilter("error")
180
+ offered = eval(code, {"Lexicon": Lexicon}) # noqa: S307
181
+ assert offered == held
161
182
 
162
183
 
163
184
  def test_an_alias_to_a_removed_constant_warns_once_naming_both() -> None:
File without changes
File without changes
File without changes