udtools 0.2.6__tar.gz → 0.2.7__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 (165) hide show
  1. {udtools-0.2.6/src/udtools.egg-info → udtools-0.2.7}/PKG-INFO +1 -1
  2. {udtools-0.2.6 → udtools-0.2.7}/pyproject.toml +1 -1
  3. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/__init__.py +1 -1
  4. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/argparser.py +30 -29
  5. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/cli.py +1 -1
  6. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/data/deprels.json +10 -0
  7. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/data/feats.json +1 -1
  8. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/incident.py +4 -0
  9. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/validator.py +13 -3
  10. {udtools-0.2.6 → udtools-0.2.7/src/udtools.egg-info}/PKG-INFO +1 -1
  11. {udtools-0.2.6 → udtools-0.2.7}/src/udtools.egg-info/SOURCES.txt +1 -0
  12. udtools-0.2.7/tests/test-cases/invalid-level1/.gitattributes +2 -0
  13. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/non-unix-newline.conllu +23 -23
  14. {udtools-0.2.6 → udtools-0.2.7}/LICENSE.txt +0 -0
  15. {udtools-0.2.6 → udtools-0.2.7}/MANIFEST.in +0 -0
  16. {udtools-0.2.6 → udtools-0.2.7}/README.md +0 -0
  17. {udtools-0.2.6 → udtools-0.2.7}/setup.cfg +0 -0
  18. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/data/data.json +0 -0
  19. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/data/docdeps.json +0 -0
  20. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/data/docfeats.json +0 -0
  21. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/data/edeprels.json +0 -0
  22. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/data/tospace.json +0 -0
  23. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/data/udeprels.json +0 -0
  24. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/data/upos.json +0 -0
  25. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/data.py +0 -0
  26. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/level1.py +0 -0
  27. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/level2.py +0 -0
  28. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/level3.py +0 -0
  29. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/level4.py +0 -0
  30. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/level5.py +0 -0
  31. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/level6.py +0 -0
  32. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/state.py +0 -0
  33. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/udeval.py +0 -0
  34. {udtools-0.2.6 → udtools-0.2.7}/src/udtools/utils.py +0 -0
  35. {udtools-0.2.6 → udtools-0.2.7}/src/udtools.egg-info/dependency_links.txt +0 -0
  36. {udtools-0.2.6 → udtools-0.2.7}/src/udtools.egg-info/entry_points.txt +0 -0
  37. {udtools-0.2.6 → udtools-0.2.7}/src/udtools.egg-info/requires.txt +0 -0
  38. {udtools-0.2.6 → udtools-0.2.7}/src/udtools.egg-info/top_level.txt +0 -0
  39. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/README.md +0 -0
  40. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/eval/cs_pud-gold.conllu +0 -0
  41. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/eval/cs_pud-plain.txt +0 -0
  42. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/eval/cs_pud-udpipe-pdtc-ud-2.17-251125.conllu +0 -0
  43. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/eval/eval.txt +0 -0
  44. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/columns-format-minimal.conllu +0 -0
  45. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/columns-format.conllu +0 -0
  46. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/extra-empty-line.conllu +0 -0
  47. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/invalid-line.conllu +0 -0
  48. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/invalid-word-id.conllu +0 -0
  49. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/invalid-word-interval.conllu +0 -0
  50. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/misplaced-comment.conllu +0 -0
  51. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/misplaced-empty-node-2.conllu +0 -0
  52. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/misplaced-empty-node.conllu +0 -0
  53. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/misplaced-word-interval.conllu +0 -0
  54. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/multiple-sent-id.conllu +0 -0
  55. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/mwt-nonempty-2.conllu +0 -0
  56. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/mwt-nonempty-field.conllu +0 -0
  57. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/non-unix-newline.conllu +0 -0
  58. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/overlapping-word-interval.conllu +0 -0
  59. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/pseudo-empty-line.conllu +0 -0
  60. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/reversed-word-interval.conllu +0 -0
  61. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/unicode-normalization.conllu +0 -0
  62. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/word-id-sequence-2.conllu +0 -0
  63. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-functions/word-id-sequence.conllu +0 -0
  64. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/columns-format-minimal.conllu +0 -0
  65. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/columns-format.conllu +0 -0
  66. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/duplicate-id.conllu +0 -0
  67. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/empty-field.conllu +0 -0
  68. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/empty-head.conllu +0 -0
  69. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/empty-sentence.conllu +0 -0
  70. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/extra-empty-line.conllu +0 -0
  71. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/id-starting-from-2.conllu +0 -0
  72. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/id-with-extra-0.conllu +0 -0
  73. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/invalid-line.conllu +0 -0
  74. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/invalid-range.conllu +0 -0
  75. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/invalid-word-id.conllu +0 -0
  76. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/invalid-word-interval.conllu +0 -0
  77. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/misindexed-empty-node.conllu +0 -0
  78. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/misordered-multiword.conllu +0 -0
  79. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/misplaced-comment-end.conllu +0 -0
  80. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/misplaced-comment-mid.conllu +0 -0
  81. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/misplaced-comment.conllu +0 -0
  82. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/misplaced-empty-node-2.conllu +0 -0
  83. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/misplaced-empty-node.conllu +0 -0
  84. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/misplaced-range.conllu +0 -0
  85. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/misplaced-word-interval.conllu +0 -0
  86. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/missing-final-line.conllu +0 -0
  87. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/mwt-nonempty-field.conllu +0 -0
  88. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/nan-id.conllu +0 -0
  89. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/nonsequential-empty-node-id.conllu +0 -0
  90. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/nonsequential-id.conllu +0 -0
  91. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/out-of-bounds-range.conllu +0 -0
  92. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/overlapping-multiword.conllu +0 -0
  93. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/overlapping-range.conllu +0 -0
  94. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/overlapping-word-interval.conllu +0 -0
  95. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/pseudo-empty-line.conllu +0 -0
  96. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/reversed-word-interval.conllu +0 -0
  97. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/seemingly-empty-line.conllu +0 -0
  98. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/tanl-broken.conllu +0 -0
  99. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/trailing-tab.conllu +0 -0
  100. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/unicode-normalization.conllu +0 -0
  101. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/word-id-sequence-2.conllu +0 -0
  102. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level1/word-id-sequence.conllu +0 -0
  103. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/ambiguous-feature.conllu +0 -0
  104. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/cyclic-deps.conllu +0 -0
  105. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/deprel-not-empty-in-empty.conllu +0 -0
  106. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/duplicate-feature.conllu +0 -0
  107. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/duplicate-layered-feature.conllu +0 -0
  108. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/duplicate-value.conllu +0 -0
  109. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/empty-node-nonempty.conllu +0 -0
  110. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/extra-empty-line.conllu +0 -0
  111. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/extra-field.conllu +0 -0
  112. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/head-not-empty-in-empty.conllu +0 -0
  113. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/invalid-deps-id.conllu +0 -0
  114. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/invalid-deps-order.conllu +0 -0
  115. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/invalid-deps-syntax.conllu +0 -0
  116. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/invalid-deps.conllu +0 -0
  117. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/invalid-head.conllu +0 -0
  118. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/invalid-range-format.conllu +0 -0
  119. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/lowercase-feature-in-empty.conllu +0 -0
  120. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/lowercase-feature-value-in-empty.conllu +0 -0
  121. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/lowercase-feature.conllu +0 -0
  122. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/lowercase-postag-in-empty.conllu +0 -0
  123. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/lowercase-postag.conllu +0 -0
  124. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/lowercase-value.conllu +0 -0
  125. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/misordered-feature.conllu +0 -0
  126. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/misordered-layered-feature.conllu +0 -0
  127. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/missing-space-after.conllu +0 -0
  128. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/multiple-roots.conllu +0 -0
  129. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/multiple-sent-id.conllu +0 -0
  130. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/multiple-sent_id.conllu +0 -0
  131. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/mwt-nonempty-upos.conllu +0 -0
  132. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/mwt-nonempty.conllu +0 -0
  133. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/no-sent_id.conllu +0 -0
  134. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/parallel-id.conllu +0 -0
  135. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/self-cycle-deps.conllu +0 -0
  136. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/self-cycle-head.conllu +0 -0
  137. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/space-in-field.conllu +0 -0
  138. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/uppercase-deprel.conllu +0 -0
  139. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level2/uppercase-deps-deprel.conllu +0 -0
  140. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level3/head-0-deprel-not-root.conllu +0 -0
  141. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level3/head-not-0-deprel-root.conllu +0 -0
  142. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level3/nmod-obl.conllu +0 -0
  143. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level3/non-proj.conllu +0 -0
  144. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level3/rel-upos.conllu +0 -0
  145. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level3/right-to-left.conllu +0 -0
  146. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level3/too-many-objects.conllu +0 -0
  147. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level3/too-many-subjects.conllu +0 -0
  148. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level4-5/cs_pud-ud-test.conllu +0 -0
  149. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/invalid-level4-5/yrl_complin-mwt-typo-yes.conllu +0 -0
  150. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/test.bat +0 -0
  151. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/test.log +0 -0
  152. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/valid/empty-file.conllu +0 -0
  153. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/valid/empty-nodes.conllu +0 -0
  154. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/valid/layered-features.conllu +0 -0
  155. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/valid/maximal-empty-node.conllu +0 -0
  156. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/valid/minimal-empty-node.conllu +0 -0
  157. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/valid/multiple-features.conllu +0 -0
  158. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/valid/nmod-obl.conllu +0 -0
  159. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/valid/tanl.conllu +0 -0
  160. {udtools-0.2.6 → udtools-0.2.7}/tests/test-cases/valid/whitespace.conllu +0 -0
  161. {udtools-0.2.6 → udtools-0.2.7}/tests/test_cases.py +0 -0
  162. {udtools-0.2.6 → udtools-0.2.7}/tests/test_checks.py +0 -0
  163. {udtools-0.2.6 → udtools-0.2.7}/tests/test_regex.py +0 -0
  164. {udtools-0.2.6 → udtools-0.2.7}/tests/test_utils.py +0 -0
  165. {udtools-0.2.6 → udtools-0.2.7}/tests/test_validate.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: udtools
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: Python tools for Universal Dependencies
5
5
  Author: Filip Ginter, Sampo Pyysalo, Daniel Zeman, Milan Straka, Martin Popel, Gosse Bouma, John Bauer, Arianna Masciolini, Ludovica Pannitto
6
6
  Maintainer-email: Daniel Zeman <zeman@ufal.mff.cuni.cz>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "udtools"
7
- version = "0.2.6"
7
+ version = "0.2.7"
8
8
  authors = [
9
9
  { name="Filip Ginter" },
10
10
  { name="Sampo Pyysalo" },
@@ -4,7 +4,7 @@ udtools.
4
4
  Python tools for Universal Dependencies.
5
5
  """
6
6
 
7
- __version__ = "0.2.6"
7
+ __version__ = "0.2.7"
8
8
  __author__ = 'Daniel Zeman'
9
9
  __credits__ = 'Universal Dependencies community'
10
10
 
@@ -14,50 +14,51 @@ def build_argparse_validator():
14
14
  opt_parser = argparse.ArgumentParser(description="CoNLL-U validation script. Python 3 is needed to run it!")
15
15
 
16
16
  io_group = opt_parser.add_argument_group("Input / output options")
17
- io_group.add_argument('--quiet',
18
- dest="quiet", action="store_true", default=False,
17
+ io_group.add_argument('-q', '--quiet',
18
+ dest='quiet', action="store_true", default=False,
19
19
  help="""Do not print anything (errors, warnings, summary).
20
20
  Exit with 0 on pass, non-zero on fail.""")
21
21
  io_group.add_argument('--no-warnings',
22
22
  dest='no_warnings', action='store_true', default=False,
23
23
  help="""Print only errors but no warnings.
24
- The final summary will still include the number of warnings, although they were not printed.
25
- This option also does not affect storing warnings in the validation state.""")
24
+ The final summary will still include the number of warnings, although they were not printed.""")
25
+ io_group.add_argument('-e', '--exclude',
26
+ nargs='+',
27
+ help="""One or more ids of tests whose incidents should not be printed.
28
+ For example: --exclude missing-sent-id invalid-sent-id.
29
+ The tests will still be performed and resulting incidents counted in the final summary.""")
30
+ io_group.add_argument('-i', '--include-only',
31
+ nargs='+',
32
+ help="""One or more ids of tests whose incidents should be printed.
33
+ For example: --include-only missing-sent-id invalid-sent-id.
34
+ Any other incidents will not be printed.
35
+ The tests will still be performed and resulting incidents counted in the final summary.""")
26
36
  io_group.add_argument('--max-err',
27
- action="store", type=int, default=20,
28
- help="""How many incidents to output per category? 0 for all.
37
+ action='store', type=int, default=20,
38
+ help="""How many incidents to print per test class? 0 for all.
29
39
  Default: %(default)d.""")
30
- ###!!! --max-store should not be a commandline option if the saved errors are useless for the user. The limit should be incorporated as a default in the Validator class, or the default should be 0 but the cli should construct the Validator with a limit.
31
- io_group.add_argument('--max-store',
32
- action="store", type=int, default=20,
33
- help="""How many incidents to save in the validation state? 0 for all.
34
- Default: %(default)d.
35
- Saved incidents are not used for anything when the validator is invoked as a command line script.
36
- However, setting a low limit here protects the memory when a treebank contains large number of errors.""")
37
40
  io_group.add_argument('input',
38
41
  nargs='*',
39
42
  help="""Input file name(s), or "-" or nothing for standard input.""")
40
43
 
41
- list_group = opt_parser.add_argument_group("Tag sets", "Options relevant to checking tag sets.")
42
- list_group.add_argument("--lang",
43
- action="store", required=True, default=None,
44
- help="""Which langauge are we checking?
45
- If you specify this (as a two-letter code), the tags will be checked
46
- using the language-specific files in the
47
- data/directory of the validator.""")
48
- list_group.add_argument("--level",
49
- action="store", type=int, default=5, dest="level",
44
+ test_group = opt_parser.add_argument_group("Test configuration options")
45
+ test_group.add_argument('--lang',
46
+ action='store', required=True, default=None,
47
+ help="""Which langauge are we checking (ISO 639 code)?
48
+ Determines the language-specific lists of features,
49
+ auxiliaries, relation subtypes etc. This is a required
50
+ argument. Use "ud" as the value if you only want to
51
+ test the universal part of the UD guidelines.""")
52
+ test_group.add_argument('--level',
53
+ action='store', type=int, default=5, dest="level",
50
54
  help="""Level 1: Test only CoNLL-U backbone.
51
55
  Level 2: UD format.
52
56
  Level 3: UD contents.
53
57
  Level 4: Language-specific labels.
54
- Level 5: Language-specific contents.""")
55
-
56
- coref_group = opt_parser.add_argument_group("Coreference / entity constraints",
57
- "Options for checking coreference and entity annotation.")
58
- coref_group.add_argument('--coref',
59
- action='store_true', default=False, dest='check_coref',
60
- help='Test coreference and entity-related annotation in MISC.')
58
+ Level 5 (default): Language-specific contents.""")
59
+ test_group.add_argument('--coref',
60
+ action='store_true', default=False, dest='check_coref',
61
+ help='Test coreference and entity-related annotation in MISC.')
61
62
  return opt_parser
62
63
 
63
64
 
@@ -19,7 +19,7 @@ from udtools.udeval import evaluate_wrapper, build_evaluation_table
19
19
 
20
20
  def main():
21
21
  args = parse_args_validator()
22
- validator = Validator(lang=args.lang, level=args.level, args=args)
22
+ validator = Validator(lang=args.lang, level=args.level, max_store=10, args=args)
23
23
  state = validator.validate_files(args.input)
24
24
  # Summarize the warnings and errors.
25
25
  summary = str(state)
@@ -3147,12 +3147,14 @@
3147
3147
  "conj": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3148
3148
  "cop": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3149
3149
  "csubj": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3150
+ "csubj:pass": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2026-01-08-11-02-45", "lastchanger": "mregnault"},
3150
3151
  "dep": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3151
3152
  "det": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3152
3153
  "det:poss": {"type": "global", "doc": "global", "permitted": 1, "errors": []},
3153
3154
  "discourse": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3154
3155
  "dislocated": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3155
3156
  "expl": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3157
+ "expl:pass": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2026-01-08-11-00-47", "lastchanger": "mregnault"},
3156
3158
  "fixed": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3157
3159
  "flat": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3158
3160
  "goeswith": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
@@ -3161,10 +3163,13 @@
3161
3163
  "mark": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3162
3164
  "nmod": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3163
3165
  "nsubj": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3166
+ "nsubj:pass": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2026-01-08-11-02-24", "lastchanger": "mregnault"},
3164
3167
  "nummod": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3165
3168
  "obj": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3166
3169
  "obl": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3167
3170
  "obl:advmod": {"type": "local", "doc": "local", "permitted": 0, "errors": [], "lastchanged": "2025-10-30-15-12-15", "lastchanger": "MathieuDehouck"},
3171
+ "obl:agent": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2026-01-08-11-02-07", "lastchanger": "mregnault"},
3172
+ "obl:arg": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2026-01-08-11-01-03", "lastchanger": "mregnault"},
3168
3173
  "obl:mod": {"type": "local", "doc": "local", "permitted": 1, "errors": [], "lastchanged": "2025-10-30-15-11-55", "lastchanger": "MathieuDehouck"},
3169
3174
  "orphan": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3170
3175
  "parataxis": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
@@ -3194,12 +3199,14 @@
3194
3199
  "conj": {"type": "universal", "doc": "local", "permitted": 1, "errors": []},
3195
3200
  "cop": {"type": "universal", "doc": "local", "permitted": 1, "errors": []},
3196
3201
  "csubj": {"type": "universal", "doc": "local", "permitted": 1, "errors": []},
3202
+ "csubj:pass": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2026-01-08-10-59-01", "lastchanger": "mregnault"},
3197
3203
  "dep": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3198
3204
  "det": {"type": "universal", "doc": "local", "permitted": 1, "errors": []},
3199
3205
  "det:poss": {"type": "global", "doc": "global", "permitted": 1, "errors": []},
3200
3206
  "discourse": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3201
3207
  "dislocated": {"type": "universal", "doc": "local", "permitted": 1, "errors": []},
3202
3208
  "expl": {"type": "universal", "doc": "local", "permitted": 1, "errors": []},
3209
+ "expl:pass": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2026-01-08-10-58-13", "lastchanger": "mregnault"},
3203
3210
  "fixed": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3204
3211
  "flat": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
3205
3212
  "goeswith": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
@@ -3215,6 +3222,7 @@
3215
3222
  "nsubj:advmod": {"type": "local", "doc": "local", "permitted": 1, "errors": []},
3216
3223
  "nsubj:obj": {"type": "local", "doc": "local", "permitted": 1, "errors": []},
3217
3224
  "nsubj:outer": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2023-10-30-11-03-17", "lastchanger": "lgrobol"},
3225
+ "nsubj:pass": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2026-01-08-10-58-38", "lastchanger": "mregnault"},
3218
3226
  "nummod": {"type": "universal", "doc": "local", "permitted": 1, "errors": []},
3219
3227
  "obj": {"type": "universal", "doc": "local", "permitted": 1, "errors": []},
3220
3228
  "obj:advmod": {"type": "local", "doc": "local", "permitted": 1, "errors": []},
@@ -3222,6 +3230,8 @@
3222
3230
  "obj:obl": {"type": "local", "doc": "local", "permitted": 1, "errors": []},
3223
3231
  "obl": {"type": "universal", "doc": "local", "permitted": 1, "errors": []},
3224
3232
  "obl:advmod": {"type": "local", "doc": "none", "permitted": 0, "errors": []},
3233
+ "obl:agent": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2026-01-08-10-59-45", "lastchanger": "mregnault"},
3234
+ "obl:arg": {"type": "global", "doc": "global", "permitted": 1, "errors": [], "lastchanged": "2026-01-08-10-59-26", "lastchanger": "mregnault"},
3225
3235
  "obl:mod": {"type": "local", "doc": "local", "permitted": 1, "errors": []},
3226
3236
  "orphan": {"type": "universal", "doc": "local", "permitted": 1, "errors": []},
3227
3237
  "parataxis": {"type": "universal", "doc": "global", "permitted": 1, "errors": []},
@@ -4485,7 +4485,7 @@
4485
4485
  "Aspect": {"type": "universal", "doc": "global", "permitted": 1, "errors": [], "uvalues": ["Imp", "Perf"], "lvalues": [], "unused_uvalues": ["Hab", "Iter", "Prog", "Prosp"], "unused_lvalues": [], "evalues": [], "byupos": {"AUX": {"Imp": 1, "Perf": 1}, "VERB": {"Imp": 1, "Perf": 1}, "X": {"Imp": 1, "Perf": 1}}, "lastchanged": "2024-10-19-20-19-19", "lastchanger": "OggiPeeters"},
4486
4486
  "Case": {"type": "universal", "doc": "global", "permitted": 1, "errors": [], "uvalues": ["Acc", "Dat", "Gen", "Nom"], "lvalues": [], "unused_uvalues": ["Abe", "Abl", "Abs", "Add", "Ade", "All", "Ben", "Cau", "Cmp", "Cns", "Com", "Del", "Dis", "Ela", "Equ", "Erg", "Ess", "Ill", "Ine", "Ins", "Lat", "Loc", "Par", "Per", "Sbe", "Sbl", "Spl", "Sub", "Sup", "Tem", "Ter", "Tra", "Voc"], "unused_lvalues": [], "evalues": [], "byupos": {"ADJ": {"Acc": 1, "Dat": 1, "Gen": 1, "Nom": 1}, "DET": {"Acc": 1, "Dat": 1, "Gen": 1, "Nom": 1}, "NOUN": {"Acc": 1, "Dat": 1, "Gen": 1, "Nom": 1}, "NUM": {"Acc": 1, "Dat": 1, "Gen": 1, "Nom": 1}, "PART": {"Acc": 1, "Dat": 1, "Gen": 1, "Nom": 1}, "PRON": {"Acc": 1, "Dat": 1, "Gen": 1, "Nom": 1}, "PROPN": {"Acc": 1, "Dat": 1, "Gen": 1, "Nom": 1}, "VERB": {"Acc": 1, "Dat": 1, "Gen": 1, "Nom": 1}, "X": {"Acc": 1, "Dat": 1, "Gen": 1, "Nom": 1}}, "lastchanged": "2025-08-16-19-43-44", "lastchanger": "OggiPeeters"},
4487
4487
  "Degree": {"type": "universal", "doc": "global", "permitted": 1, "errors": [], "uvalues": ["Cmp", "Pos", "Sup"], "lvalues": [], "unused_uvalues": ["Abs", "Aug", "Dim", "Equ"], "unused_lvalues": [], "evalues": [], "byupos": {"ADJ": {"Cmp": 1, "Pos": 1, "Sup": 1}}, "lastchanged": "2024-10-19-15-18-24", "lastchanger": "OggiPeeters"},
4488
- "ExtPos": {"type": "lspec", "doc": "global", "permitted": 1, "errors": [], "uvalues": [], "lvalues": ["DET", "PRON"], "unused_uvalues": [], "unused_lvalues": ["ADJ", "ADP", "ADV", "AUX", "CCONJ", "INTJ", "PROPN", "SCONJ"], "evalues": [], "byupos": {"DET": {"DET": 1}, "PART": {"DET": 1, "PRON": 1}, "PRON": {"DET": 1, "PRON": 1}}, "lastchanged": "2025-07-17-13-46-09", "lastchanger": "OggiPeeters"},
4488
+ "ExtPos": {"type": "lspec", "doc": "global", "permitted": 1, "errors": [], "uvalues": [], "lvalues": ["ADP", "DET", "PRON"], "unused_uvalues": [], "unused_lvalues": ["ADJ", "ADV", "AUX", "CCONJ", "INTJ", "PROPN", "SCONJ"], "evalues": [], "byupos": {"ADP": {"ADP": 1}, "DET": {"DET": 1}, "PART": {"DET": 1, "PRON": 1}, "PRON": {"DET": 1, "PRON": 1}, "VERB": {"DET": 1}}, "lastchanged": "2026-01-06-19-15-35", "lastchanger": "Grammatocyphon"},
4489
4489
  "Gender": {"type": "universal", "doc": "global", "permitted": 1, "errors": [], "uvalues": ["Fem", "Masc", "Neut"], "lvalues": [], "unused_uvalues": ["Com"], "unused_lvalues": [], "evalues": [], "byupos": {"ADJ": {"Fem": 1, "Masc": 1, "Neut": 1}, "DET": {"Fem": 1, "Masc": 1, "Neut": 1}, "NOUN": {"Fem": 1, "Masc": 1, "Neut": 1}, "NUM": {"Fem": 1, "Masc": 1, "Neut": 1}, "PART": {"Fem": 1, "Masc": 1, "Neut": 1}, "PRON": {"Fem": 1, "Masc": 1, "Neut": 1}, "PROPN": {"Fem": 1, "Masc": 1, "Neut": 1}, "VERB": {"Fem": 1, "Masc": 1, "Neut": 1}, "X": {"Fem": 1, "Masc": 1, "Neut": 1}}, "lastchanged": "2025-08-16-19-42-14", "lastchanger": "OggiPeeters"},
4490
4490
  "Mood": {"type": "universal", "doc": "global", "permitted": 1, "errors": [], "uvalues": ["Imp", "Ind", "Opt", "Sub"], "lvalues": [], "unused_uvalues": ["Adm", "Cnd", "Des", "Int", "Irr", "Jus", "Nec", "Pot", "Prp", "Qot"], "unused_lvalues": [], "evalues": [], "byupos": {"AUX": {"Imp": 1, "Ind": 1, "Opt": 1, "Sub": 1}, "VERB": {"Imp": 1, "Ind": 1, "Opt": 1, "Sub": 1}}, "lastchanged": "2024-10-19-15-21-56", "lastchanger": "OggiPeeters"},
4491
4491
  "NumType": {"type": "universal", "doc": "global", "permitted": 1, "errors": [], "uvalues": ["Card", "Ord"], "lvalues": [], "unused_uvalues": ["Dist", "Frac", "Mult", "Range", "Sets"], "unused_lvalues": [], "evalues": [], "byupos": {"NUM": {"Card": 1, "Ord": 1}}, "lastchanged": "2024-10-19-15-23-39", "lastchanger": "OggiPeeters"},
@@ -198,6 +198,10 @@ class Incident:
198
198
  return
199
199
  if 'no_warnings' in self.config and self.config['no_warnings'] and self.is_warning():
200
200
  return
201
+ if 'exclude' in self.config and self.testid in self.config['exclude']:
202
+ return
203
+ if 'include_only' in self.config and self.testid not in self.config['include_only']:
204
+ return
201
205
  # Suppress error messages of a type of which we have seen too many.
202
206
  if too_many > 0:
203
207
  if too_many == 1:
@@ -29,7 +29,7 @@ except ModuleNotFoundError:
29
29
 
30
30
 
31
31
  class Validator(Level6):
32
- def __init__(self, lang=None, level=None, check_coref=None, args=None, datapath=None, output=sys.stderr):
32
+ def __init__(self, lang=None, level=None, check_coref=None, args=None, datapath=None, output=sys.stderr, max_store=0):
33
33
  """
34
34
  Initialization of the Validator class.
35
35
 
@@ -64,6 +64,13 @@ class Validator(Level6):
64
64
  None. If it is None, the output is suppressed (same as the --quiet
65
65
  command line option) and errors are only saved in state for later
66
66
  processing.
67
+ max_store : int, optional
68
+ How many incidents to store in the validation state? Default 0
69
+ means no limit. Limiting this helps save memory with large
70
+ treebanks and large numbers of incidents. Especially if the
71
+ intended use of the Validator object is to immediately report
72
+ incidents without returning to them later. The limit is applied
73
+ separately to each test class.
67
74
  """
68
75
  self.data = data.Data(datapath=datapath)
69
76
  if not args:
@@ -97,13 +104,16 @@ class Validator(Level6):
97
104
  self.incfg['quiet'] = args_dict['quiet']
98
105
  if 'no_warnings' in args_dict:
99
106
  self.incfg['no_warnings'] = args_dict['no_warnings']
107
+ if 'exclude' in args_dict and args_dict['exclude']:
108
+ self.incfg['exclude'] = args_dict['exclude']
109
+ if 'include_only' in args_dict and args_dict['include_only']:
110
+ self.incfg['include_only'] = args_dict['include_only']
100
111
  if 'max_err' in args_dict:
101
112
  self.incfg['max_err'] = args_dict['max_err']
102
- if 'max_store' in args_dict:
103
- self.incfg['max_store'] = args_dict['max_store']
104
113
  if 'input' in args_dict and len(args_dict['input']) > 1:
105
114
  self.incfg['report_filename'] = True
106
115
  self.incfg['output'] = output
116
+ self.incfg['max_store'] = max_store
107
117
  self.conllu_reader = udapi.block.read.conllu.Conllu()
108
118
 
109
119
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: udtools
3
- Version: 0.2.6
3
+ Version: 0.2.7
4
4
  Summary: Python tools for Universal Dependencies
5
5
  Author: Filip Ginter, Sampo Pyysalo, Daniel Zeman, Milan Straka, Martin Popel, Gosse Bouma, John Bauer, Arianna Masciolini, Ludovica Pannitto
6
6
  Maintainer-email: Daniel Zeman <zeman@ufal.mff.cuni.cz>
@@ -64,6 +64,7 @@ tests/test-cases/invalid-functions/reversed-word-interval.conllu
64
64
  tests/test-cases/invalid-functions/unicode-normalization.conllu
65
65
  tests/test-cases/invalid-functions/word-id-sequence-2.conllu
66
66
  tests/test-cases/invalid-functions/word-id-sequence.conllu
67
+ tests/test-cases/invalid-level1/.gitattributes
67
68
  tests/test-cases/invalid-level1/columns-format-minimal.conllu
68
69
  tests/test-cases/invalid-level1/columns-format.conllu
69
70
  tests/test-cases/invalid-level1/duplicate-id.conllu
@@ -0,0 +1,2 @@
1
+ # Do not convert CRLF to LF in the test file that intentionally contains CRLF.
2
+ non-unix-newline.conllu -text
@@ -1,23 +1,23 @@
1
- # sent_id = dos-newlines1
2
- # text = LONDRA .
3
- 1 LONDRA Londra NOUN SP _ 0 root _ _
4
- 2 . . PUNCT FS _ 1 punct _ _
5
-
6
- # This is a comment
7
- # sent_id = dos-newlines2
8
- # text = Gas dalla statua .
9
- 1 Gas gas NOUN S Gender=Masc|Number=Sing 0 root _ _
10
- 2-3 dalla _ _ _ _ _ _ _ _
11
- 2 da da ADP EA _ 1 nmod _ _
12
- 3 la il DET RD Gender=Fem|Number=Sing|PronType=Art 4 det _ _
13
- 4 statua statua NOUN S Gender=Fem|Number=Sing 2 nmod _ _
14
- 5 . . PUNCT FS _ 1 punct _ _
15
-
16
- # sent_id = dos-newlines3
17
- # text = Evacuata la Tate Gallery .
18
- 1 Evacuata evacuare VERB V Gender=Fem|Number=Sing|VerbForm=Part 3 advcl _ _
19
- 2 la il DET RD Gender=Fem|Number=Sing|PronType=Art 3 det _ _
20
- 3 Tate Tate NOUN SP _ 0 root _ _
21
- 4 Gallery Gallery NOUN SP _ 3 flat _ _
22
- 5 . . PUNCT FS _ 3 punct _ _
23
-
1
+ # sent_id = dos-newlines1
2
+ # text = LONDRA .
3
+ 1 LONDRA Londra NOUN SP _ 0 root _ _
4
+ 2 . . PUNCT FS _ 1 punct _ _
5
+
6
+ # This is a comment
7
+ # sent_id = dos-newlines2
8
+ # text = Gas dalla statua .
9
+ 1 Gas gas NOUN S Gender=Masc|Number=Sing 0 root _ _
10
+ 2-3 dalla _ _ _ _ _ _ _ _
11
+ 2 da da ADP EA _ 1 nmod _ _
12
+ 3 la il DET RD Gender=Fem|Number=Sing|PronType=Art 4 det _ _
13
+ 4 statua statua NOUN S Gender=Fem|Number=Sing 2 nmod _ _
14
+ 5 . . PUNCT FS _ 1 punct _ _
15
+
16
+ # sent_id = dos-newlines3
17
+ # text = Evacuata la Tate Gallery .
18
+ 1 Evacuata evacuare VERB V Gender=Fem|Number=Sing|VerbForm=Part 3 advcl _ _
19
+ 2 la il DET RD Gender=Fem|Number=Sing|PronType=Art 3 det _ _
20
+ 3 Tate Tate NOUN SP _ 0 root _ _
21
+ 4 Gallery Gallery NOUN SP _ 3 flat _ _
22
+ 5 . . PUNCT FS _ 3 punct _ _
23
+
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