pyflexicon 4.2.0__tar.gz → 4.3.0__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 (242) hide show
  1. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/CHANGELOG.md +114 -0
  2. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/PKG-INFO +8 -2
  3. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/README.rst +5 -0
  4. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/__init__.py +1 -1
  5. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/BaseOperations.py +17 -4
  6. pyflexicon-4.3.0/flexicon/code/BaseOperations.pyi +67 -0
  7. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Discourse/ConstChartClauseMarkerOperations.py +1 -1
  8. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Discourse/ConstChartMovedTextOperations.py +1 -1
  9. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Discourse/ConstChartOperations.py +2 -2
  10. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Discourse/ConstChartRowOperations.py +1 -1
  11. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Discourse/ConstChartWordGroupOperations.py +1 -1
  12. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/EnvironmentOperations.py +2 -2
  13. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/EnvironmentOperations.pyi +2 -2
  14. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/GramCatOperations.py +2 -2
  15. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/GramCatOperations.pyi +2 -2
  16. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/InflectionFeatureOperations.pyi +4 -1
  17. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/MorphRuleOperations.py +7 -7
  18. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/MorphRuleOperations.pyi +8 -2
  19. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/NaturalClassOperations.py +2 -2
  20. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/NaturalClassOperations.pyi +2 -2
  21. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/POSOperations.py +2 -2
  22. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/POSOperations.pyi +2 -2
  23. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/PhonFeatureOperations.py +2 -2
  24. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/PhonemeOperations.py +2 -2
  25. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/PhonemeOperations.pyi +2 -2
  26. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/PhonologicalRuleOperations.py +1 -1
  27. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/PhonologicalRuleOperations.pyi +2 -1
  28. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/StratumOperations.py +2 -2
  29. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/AllomorphOperations.py +1 -1
  30. {pyflexicon-4.2.0/flexicon/code/Grammar → pyflexicon-4.3.0/flexicon/code/Lexicon}/AllomorphOperations.pyi +2 -1
  31. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/EtymologyOperations.py +2 -2
  32. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/EtymologyOperations.pyi +2 -2
  33. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/ExampleOperations.py +2 -2
  34. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/ExampleOperations.pyi +2 -2
  35. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/LexEntryOperations.py +2 -2
  36. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/LexEntryOperations.pyi +5 -4
  37. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/LexReferenceOperations.py +4 -4
  38. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/LexReferenceOperations.pyi +3 -2
  39. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/LexSenseOperations.py +7 -4
  40. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/LexSenseOperations.pyi +4 -3
  41. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/MSAOperations.py +223 -6
  42. pyflexicon-4.3.0/flexicon/code/Lexicon/MSAOperations.pyi +38 -0
  43. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/PronunciationOperations.py +2 -2
  44. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/PronunciationOperations.pyi +2 -2
  45. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/SemanticDomainOperations.py +1 -1
  46. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/SemanticDomainOperations.pyi +2 -2
  47. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/VariantOperations.py +4 -4
  48. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/VariantOperations.pyi +3 -2
  49. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/AgentOperations.py +2 -1
  50. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/AgentOperations.pyi +2 -2
  51. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/ConfidenceOperations.pyi +3 -2
  52. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/OverlayOperations.pyi +3 -2
  53. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/PossibilityListOperations.pyi +6 -2
  54. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/PublicationOperations.py +1 -1
  55. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/PublicationOperations.pyi +2 -2
  56. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/TranslationTypeOperations.py +19 -34
  57. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/TranslationTypeOperations.pyi +3 -2
  58. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/possibility_item_base.py +1 -1
  59. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/AnthropologyOperations.py +1 -1
  60. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/AnthropologyOperations.pyi +2 -2
  61. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/DataNotebookOperations.py +2 -2
  62. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/DataNotebookOperations.pyi +5 -3
  63. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/LocationOperations.py +1 -1
  64. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/LocationOperations.pyi +2 -2
  65. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/NoteOperations.py +2 -2
  66. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/NoteOperations.pyi +2 -2
  67. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/PersonOperations.py +2 -2
  68. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/PersonOperations.pyi +2 -2
  69. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Reversal/ReversalIndexEntryOperations.py +2 -2
  70. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Reversal/ReversalIndexOperations.py +2 -2
  71. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Scripture/ScrBookOperations.py +2 -2
  72. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Scripture/ScrDraftOperations.py +2 -2
  73. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Scripture/ScrNoteOperations.py +1 -1
  74. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Scripture/ScrSectionOperations.py +1 -1
  75. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Scripture/ScrTxtParaOperations.py +1 -1
  76. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/FilterOperations.py +2 -2
  77. {pyflexicon-4.2.0/flexicon/code/TextsWords → pyflexicon-4.3.0/flexicon/code/Shared}/FilterOperations.pyi +2 -2
  78. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/MediaOperations.py +10 -6
  79. {pyflexicon-4.2.0/flexicon/code/TextsWords → pyflexicon-4.3.0/flexicon/code/Shared}/MediaOperations.pyi +3 -2
  80. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/wrapper_base.py +86 -0
  81. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/AnnotationDefOperations.py +2 -2
  82. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/AnnotationDefOperations.pyi +2 -2
  83. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/CheckOperations.py +2 -2
  84. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/CheckOperations.pyi +6 -2
  85. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/CustomFieldOperations.pyi +6 -2
  86. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/ProjectSettingsOperations.pyi +4 -1
  87. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/WritingSystemOperations.py +2 -2
  88. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/WritingSystemOperations.pyi +2 -2
  89. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/DiscourseOperations.py +2 -2
  90. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/DiscourseOperations.pyi +6 -2
  91. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/ParagraphOperations.py +2 -2
  92. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/ParagraphOperations.pyi +2 -2
  93. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/SegmentOperations.py +218 -2
  94. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/SegmentOperations.pyi +8 -2
  95. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/TextOperations.py +2 -2
  96. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/TextOperations.pyi +2 -2
  97. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/WfiAnalysisOperations.py +1 -1
  98. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/WfiAnalysisOperations.pyi +2 -2
  99. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/WfiGlossOperations.py +2 -2
  100. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/WfiGlossOperations.pyi +4 -3
  101. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/WfiMorphBundleOperations.py +2 -2
  102. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/WfiMorphBundleOperations.pyi +2 -2
  103. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/WordformOperations.py +6 -6
  104. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/WordformOperations.pyi +4 -2
  105. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/pyflexicon.egg-info/PKG-INFO +8 -2
  106. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/pyflexicon.egg-info/SOURCES.txt +4 -3
  107. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/pyflexicon.egg-info/requires.txt +2 -1
  108. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/pyproject.toml +13 -2
  109. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_wrappers.py +62 -0
  110. pyflexicon-4.2.0/flexicon/code/BaseOperations.pyi +0 -37
  111. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/LICENSE.txt +0 -0
  112. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/MANIFEST.in +0 -0
  113. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/NOTICE +0 -0
  114. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/__init__.pyi +0 -0
  115. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Discourse/ConstChartCellTagOperations.py +0 -0
  116. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Discourse/ConstChartMarkerOperations.py +0 -0
  117. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Discourse/__init__.py +0 -0
  118. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/FLExGlobals.py +0 -0
  119. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/FLExInit.py +0 -0
  120. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/FLExLCM.py +0 -0
  121. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/FLExProject.py +0 -0
  122. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/FLExProject.pyi +0 -0
  123. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/InflectionFeatureOperations.py +0 -0
  124. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/__init__.py +0 -0
  125. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/adhoc_prohibition.py +0 -0
  126. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/affix_template.py +0 -0
  127. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/affix_template_collection.py +0 -0
  128. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/compound_rule.py +0 -0
  129. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/compound_rule_collection.py +0 -0
  130. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/phonological_rule.py +0 -0
  131. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/prohibition_collection.py +0 -0
  132. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Grammar/rule_collection.py +0 -0
  133. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/__init__.py +0 -0
  134. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/allomorph.py +0 -0
  135. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/allomorph_collection.py +0 -0
  136. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/morphosyntax_analysis.py +0 -0
  137. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lexicon/msa_collection.py +0 -0
  138. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/ConfidenceOperations.py +0 -0
  139. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/LocalizedListsOperations.py +0 -0
  140. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/OverlayOperations.py +0 -0
  141. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/PossibilityListOperations.py +0 -0
  142. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Lists/__init__.py +0 -0
  143. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/__init__.py +0 -0
  144. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/annotation.py +0 -0
  145. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Notebook/annotation_collection.py +0 -0
  146. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/PythonicWrapper.py +0 -0
  147. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Reversal/__init__.py +0 -0
  148. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Scripture/ScrAnnotationsOperations.py +0 -0
  149. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Scripture/__init__.py +0 -0
  150. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/__init__.py +0 -0
  151. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/catalog.py +0 -0
  152. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/catalog_backed.py +0 -0
  153. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/lcm_constants.py +0 -0
  154. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/morph_type_utils.py +0 -0
  155. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/rule_patterns.py +0 -0
  156. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/smart_collection.py +0 -0
  157. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/Shared/string_utils.py +0 -0
  158. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/CustomFieldOperations.py +0 -0
  159. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/ProjectSettingsOperations.py +0 -0
  160. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/__init__.py +0 -0
  161. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/context_collection.py +0 -0
  162. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/System/phonological_context.py +0 -0
  163. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/TextsWords/__init__.py +0 -0
  164. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/__init__.py +0 -0
  165. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/__init__.pyi +0 -0
  166. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/_context_manager_base.py +0 -0
  167. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/_op_aliases.py +0 -0
  168. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/exceptions.py +0 -0
  169. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/lcm_casting.py +0 -0
  170. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/transaction.py +0 -0
  171. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/code/undoable_operation.py +0 -0
  172. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/examples/demo_lexicon.py +0 -0
  173. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/examples/demo_openproject.py +0 -0
  174. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/examples/demo_pos_operations.py +0 -0
  175. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/examples/demo_writing_systems.py +0 -0
  176. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/py.typed +0 -0
  177. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/__init__.py +0 -0
  178. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/conflict_resolvers.py +0 -0
  179. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/dependency_graph.py +0 -0
  180. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/dependency_resolver.py +0 -0
  181. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/diff.py +0 -0
  182. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/engine.py +0 -0
  183. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/export.py +0 -0
  184. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/hierarchical_importer.py +0 -0
  185. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/match_strategies.py +0 -0
  186. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/merge_ops.py +0 -0
  187. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/selective_import.py +0 -0
  188. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/__init__.py +0 -0
  189. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/test_base_operations.py +0 -0
  190. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/test_dependency_graph.py +0 -0
  191. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/test_diff_engine.py +0 -0
  192. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/test_duplicate_operations.py +0 -0
  193. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/test_match_strategies.py +0 -0
  194. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/test_merge_ops.py +0 -0
  195. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/test_selective_import.py +0 -0
  196. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/test_sync_engine.py +0 -0
  197. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/test_sync_result.py +0 -0
  198. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/tests/test_validation.py +0 -0
  199. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/sync/validation.py +0 -0
  200. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/tests/test_CustomFields.py +0 -0
  201. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/tests/test_FLExInit.py +0 -0
  202. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexicon/tests/test_FLExProject.py +0 -0
  203. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/flexlibs2/__init__.py +0 -0
  204. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/pyflexicon.egg-info/dependency_links.txt +0 -0
  205. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/pyflexicon.egg-info/top_level.txt +0 -0
  206. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/setup.cfg +0 -0
  207. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_affix_template_wrappers.py +0 -0
  208. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_allomorph_wrappers.py +0 -0
  209. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_annotation_wrappers.py +0 -0
  210. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_catalog.py +0 -0
  211. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_collections.py +0 -0
  212. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_compound_rule_wrappers.py +0 -0
  213. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_consolidation_coverage.py +0 -0
  214. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_context_wrappers.py +0 -0
  215. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_custom_field_create_refusal.py +0 -0
  216. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_exception_handling.py +0 -0
  217. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_fixtures.py +0 -0
  218. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_flexproject_aliases.py +0 -0
  219. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_flexproject_discoverability.py +0 -0
  220. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_helpers.py +0 -0
  221. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_homographs.py +0 -0
  222. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_itsstring_fix.py +0 -0
  223. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_lcm_api_real.py +0 -0
  224. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_lcm_api_usage.py +0 -0
  225. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_lcm_direct.py +0 -0
  226. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_lcm_method_verification.py +0 -0
  227. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_msa_wrappers.py +0 -0
  228. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_normalize_match_key.py +0 -0
  229. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_normalize_ws_handle.py +0 -0
  230. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_operations_baseline.py +0 -0
  231. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_pattern_g_owner_of_class.py +0 -0
  232. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_pattern_writing_systems_enumeration.py +0 -0
  233. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_phoneme_duplicate_fix.py +0 -0
  234. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_phonological_rules_wrappers.py +0 -0
  235. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_prohibition_wrappers.py +0 -0
  236. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_rule_patterns.py +0 -0
  237. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_segment_baseline_text.py +0 -0
  238. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_sense_lookups.py +0 -0
  239. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_validation_base.py +0 -0
  240. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_wfianalysis_agent_import.py +0 -0
  241. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_wrap_enumerable_pattern.py +0 -0
  242. {pyflexicon-4.2.0 → pyflexicon-4.3.0}/tests/test_write_enabled_fix.py +0 -0
@@ -15,6 +15,120 @@ _Nothing yet. Non-breaking fixes and breaking changes accumulate here until the
15
15
 
16
16
  ---
17
17
 
18
+ ## [4.3.0] - 2026-07-22
19
+
20
+ ### Added
21
+ - **`SegmentOperations` `AnalysesRS` write API**: new `SetAnalysis`,
22
+ `ReplaceAnalysis`, `InsertAnalysis`, `AppendAnalysis`, and `RemoveAnalysis`
23
+ methods on `ISegment.AnalysesRS`, bringing segment-level analysis-list
24
+ mutation in line with the existing `SetFreeTranslation` support (#215).
25
+ - **`project.MSA.RemoveOrphaned(entry=None, progress=None)`**: project-wide
26
+ `WfiMorphBundle`-aware MSA orphan cleanup. Returns a structured
27
+ `RemoveOrphanedResult` describing what was removed, scoped to a single
28
+ entry when `entry` is supplied (#206).
29
+
30
+ ### Fixed
31
+ - **`LCMObjectWrapper` exposes `lcm_object` / `AsICmObject()`** so wrapper
32
+ objects returned by the API can be cast back to LCM interfaces from user
33
+ scripts; fixes a runtime crash that occurred when user code attempted to
34
+ cast a wrapper directly (#199).
35
+ - **`.pyi` stub `GetAll`/`GetAll*` return annotations** across ~40 Operations
36
+ stub files no longer collapse to a blanket `Iterator[Any]`. Each method is
37
+ now annotated with the concrete behavioral-collection shape it actually
38
+ returns per `docs/getall-contract.md`: `EnumerableWrapper[T]`, `list[T]`
39
+ (spelled `List[Any]` for stub compatibility), or a `SmartCollection[T]`
40
+ subtype (`RuleCollection`, `CompoundRuleCollection`,
41
+ `AffixTemplateCollection`, `AllomorphCollection`). `BaseOperations.pyi` now
42
+ declares `EnumerableWrapper` as a proper `Generic[T]` stub class with typed
43
+ `__iter__`/`__len__`/`__getitem__`/`Count`, instead of leaving it
44
+ unshadowed-but-untyped. `BaseOperations.GetAll`'s own declared return type
45
+ changed from `Iterator[Any]` to `Any` -- none of the three real shapes is
46
+ an `Iterator` (no `__next__`), so `Iterator[Any]` at the base would make
47
+ every subclass override an LSP violation under a strict checker.
48
+ - **Stale/orphaned `.pyi` paths.** `AllomorphOperations.pyi`,
49
+ `FilterOperations.pyi`, and `MediaOperations.pyi` were shadow-stubbed at
50
+ their pre-refactor locations (`Grammar/`, `TextsWords/`) which no longer
51
+ match the real modules (`Lexicon/`, `Shared/`); a type checker resolving
52
+ those modules got no stub coverage at all. Relocated to match the real
53
+ module paths.
54
+ - **Fabricated `GetAll`/`GetAll*` overrides removed or corrected** for
55
+ classes whose stub asserted a per-class `GetAll` override that does not
56
+ exist in the runtime implementation (`InflectionFeatureOperations`,
57
+ `ProjectSettingsOperations`, `PossibilityListOperations`,
58
+ `CheckOperations`, `CustomFieldOperations`, `DiscourseOperations`) --
59
+ these either inherit `GetAll` from a base class or only define a
60
+ `GetAll*`-named sibling method. Also dropped `LexEntryOperations.pyi`'s
61
+ fabricated `GetAllomorphs` stub method, which does not exist in
62
+ `LexEntryOperations.py`.
63
+ - **Missing `GetAll*` sibling methods added to stubs** (previously absent
64
+ entirely, so any call site fell through the class's blanket
65
+ `__getattr__ -> Any`): `GetAllCompoundRules`, `GetAllAffixTemplates`,
66
+ `GetAllAffixTemplatesForPOS`, `GetAllAdhocCoProhibitions`,
67
+ `GetAllByMorphType`, `GetAllSenses` (both `LexEntryOperations` and
68
+ `LexSenseOperations`), `GetAllTypes` (`LexReferenceOperations` and
69
+ `VariantOperations`), `GetAllLists`, `GetAllRecordTypes`,
70
+ `GetAllStatuses`, `GetAllCheckTypes`, `GetAllFields`, `GetAllCharts`,
71
+ `GetAllForms`, `GetAllWithStatus`, `GetAllUnapproved`, `GetAllByType`.
72
+ Each now has the real method's parameter signature (positional args and
73
+ defaults) instead of a blanket `*args: Any, **kwargs: Any`, resolving the
74
+ pre-existing signature drift noted as a prerequisite in the original T10
75
+ assessment.
76
+ - **`MediaOperations.GetAll`** now enumerates `ICmFileRepository` directly
77
+ instead of the incorrect `ICmObjectRepository` cast, and its docstring now
78
+ states the caveat that repository enumeration returns every `ICmFile` in
79
+ the database (pronunciation media, external-link files, orphans included),
80
+ which is broader than walking `LangProject.MediaOC`/`PicturesOC` folders.
81
+ - **`AgentOperations.GetAll`** now carries the `@OperationsMethod` decorator
82
+ it was missing, matching every other `GetAll` in the codebase.
83
+ - **`TranslationTypeOperations.GetSegmentsWithType`** now raises
84
+ `NotImplementedError` instead of silently returning `None`. `ISegment`
85
+ translations have no typed link to a translation-type possibility the way
86
+ text-level translations do, so the method could never do what its name
87
+ promised; it now fails loudly and points callers at `GetTextsWithType()`.
88
+
89
+ ### Deferred (documented, not fixed in this pass)
90
+ - Three whole Operations packages (`Discourse/`, `Reversal/`, `Scripture/`)
91
+ have **no `.pyi` stubs at all** -- a pre-existing gap outside this issue's
92
+ scope (adding a new stub tree, not reconciling an existing one).
93
+ - The non-`GetAll` methods on every stub (`Find`, `Create`, `Delete`, etc.)
94
+ still use the blanket `*args: Any, **kwargs: Any -> Any`/`__getattr__`
95
+ pattern; only `GetAll`/`GetAll*` methods were reconciled in this pass, per
96
+ the issue's stated scope.
97
+
98
+ ### Changed
99
+ - **Build:** the package version is now a single source of truth. `pyproject.toml`
100
+ declares `dynamic = ["version"]` and reads it from the `flexicon.version`
101
+ attribute via `[tool.setuptools.dynamic]`, so the distribution version and the
102
+ runtime `flexicon.version` can no longer diverge (the root cause of the 4.2.0
103
+ stale-version issue). Requires `setuptools>=77` (already pinned in
104
+ `[build-system]`).
105
+
106
+ ### Docs
107
+ - **`GetAll`/`GetAll*` collection-return contract**: standardized ~51
108
+ docstrings across ~50 `flexicon/code/**/*Operations.py` files to a
109
+ consistent `Returns:\n <ContainerType>[<Element>]: ...` form, dropping
110
+ `Yields:` generator-style wording (the `@wrap_enumerable` decorator always
111
+ converts generator bodies to a re-iterable `EnumerableWrapper` before the
112
+ caller sees them, so `Yields:` misdescribed the actual contract).
113
+ `BaseOperations.wrap_enumerable`'s docstring gains a "Behavioral
114
+ collection contract" paragraph explaining the three concrete return
115
+ shapes (`EnumerableWrapper[T]`, `list[T]`, `SmartCollection[T]`
116
+ subtypes) and the loop/`len()`/index/re-iterate guarantee they all
117
+ satisfy. New `docs/getall-contract.md` documents the full guarantee;
118
+ `README.rst` links to it.
119
+
120
+ ---
121
+
122
+ ## [4.2.1]
123
+
124
+ ### Fixed
125
+ - **Runtime version string:** bumped the `flexicon.version` attribute in
126
+ `flexicon/__init__.py`, which was left at `4.1.2` during the 4.2.0 cut so
127
+ the published 4.2.0 wheel reported a stale runtime version. Now matches the
128
+ distribution version.
129
+
130
+ ---
131
+
18
132
  ## [4.2.0]
19
133
 
20
134
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyflexicon
3
- Version: 4.2.0
3
+ Version: 4.3.0
4
4
  Summary: flexicon: a user-centric Python library for FieldWorks Language Explorer (FLEx) projects via the SIL Language and Culture Model (LCM) API
5
5
  Author-email: Matthew Lee <matthew_lee@sil.org>
6
6
  Maintainer-email: Matthew Lee <matthew_lee@sil.org>
@@ -30,7 +30,8 @@ Requires-Dist: sphinx; extra == "docs"
30
30
  Requires-Dist: ghp-import; extra == "docs"
31
31
  Provides-Extra: build
32
32
  Requires-Dist: build; extra == "build"
33
- Requires-Dist: twine; extra == "build"
33
+ Requires-Dist: twine>=5.1; extra == "build"
34
+ Requires-Dist: pkginfo>=1.10; extra == "build"
34
35
  Provides-Extra: dev
35
36
  Requires-Dist: pyflexicon[build,docs,test]; extra == "dev"
36
37
  Requires-Dist: pre-commit; extra == "dev"
@@ -86,6 +87,11 @@ Full API documentation is published at https://flexicon.langtech.cloud.
86
87
  The rendered HTML API help is also bundled and accessible from Python via
87
88
  ``flexicon.APIHelpFile``.
88
89
 
90
+ Every ``GetAll`` returns a loop/``len()``/index/re-iterate-able collection
91
+ regardless of its concrete type (``EnumerableWrapper``, ``list``, or a
92
+ ``SmartCollection`` subtype) -- see ``docs/getall-contract.md`` for the
93
+ full guarantee.
94
+
89
95
  Usage
90
96
  -----
91
97
 
@@ -48,6 +48,11 @@ Full API documentation is published at https://flexicon.langtech.cloud.
48
48
  The rendered HTML API help is also bundled and accessible from Python via
49
49
  ``flexicon.APIHelpFile``.
50
50
 
51
+ Every ``GetAll`` returns a loop/``len()``/index/re-iterate-able collection
52
+ regardless of its concrete type (``EnumerableWrapper``, ``list``, or a
53
+ ``SmartCollection`` subtype) -- see ``docs/getall-contract.md`` for the
54
+ full guarantee.
55
+
51
56
  Usage
52
57
  -----
53
58
 
@@ -12,7 +12,7 @@
12
12
  # License: LGPL-2.1-or-later (see LICENSE.txt)
13
13
  # ----------------------------------------------------------------------------
14
14
 
15
- version = "4.1.2"
15
+ version = "4.3.0"
16
16
 
17
17
  # Define exported classes, etc. at the top level of the package
18
18
 
@@ -13,6 +13,8 @@
13
13
 
14
14
  # --- Imports ------------------------------------------------------------------
15
15
 
16
+ from typing import Any
17
+
16
18
  from .exceptions import (
17
19
  FP_ReadOnlyError,
18
20
  FP_NullParameterError,
@@ -193,6 +195,17 @@ class wrap_enumerable:
193
195
  count = items.Count # Works!
194
196
  first = items[0] # Works!
195
197
  length = len(items) # Works!
198
+
199
+ Behavioral collection contract:
200
+ Every ``GetAll`` in flexicon returns a **behavioral collection**: you
201
+ can always loop it, ``len()`` it, index into it, and re-iterate it.
202
+ The concrete return type -- ``EnumerableWrapper`` (this decorator, for
203
+ large/lazily-materialized results), a plain ``list`` (already a
204
+ sequence, so wrapping is a no-op), or a ``SmartCollection`` subtype
205
+ (adds ``.filter()``/type-breakdown display on top of the same
206
+ sequence guarantees) -- is an implementation detail callers never
207
+ have to branch on. See ``docs/getall-contract.md`` for the full
208
+ guarantee and rationale.
196
209
  """
197
210
 
198
211
  def __init__(self, func):
@@ -1824,7 +1837,7 @@ class BaseOperations:
1824
1837
 
1825
1838
  return _NestingAwareTransaction(self.project, label)
1826
1839
 
1827
- def _ValidateParam(self, param: any, param_name: str = "parameter") -> None:
1840
+ def _ValidateParam(self, param: Any, param_name: str = "parameter") -> None:
1828
1841
  """
1829
1842
  Validate that a parameter is not None and not a stale LCM object.
1830
1843
 
@@ -1886,7 +1899,7 @@ class BaseOperations:
1886
1899
  f"{param_name} refers to a deleted or invalid LCM object"
1887
1900
  )
1888
1901
 
1889
- def _ValidateParamNotEmpty(self, param: any, param_name: str = "parameter") -> None:
1902
+ def _ValidateParamNotEmpty(self, param: Any, param_name: str = "parameter") -> None:
1890
1903
  """
1891
1904
  Validate that a parameter is not None and not empty.
1892
1905
 
@@ -1937,7 +1950,7 @@ class BaseOperations:
1937
1950
  if len(param) == 0:
1938
1951
  raise FP_ParameterError(f"{param_name} cannot be empty")
1939
1952
 
1940
- def _ValidateInstanceOf(self, obj: any, expected_type: type, param_name: str = "object") -> None:
1953
+ def _ValidateInstanceOf(self, obj: Any, expected_type: type, param_name: str = "object") -> None:
1941
1954
  """
1942
1955
  Validate that an object is an instance of expected type.
1943
1956
 
@@ -2102,7 +2115,7 @@ class BaseOperations:
2102
2115
  if index >= max_count:
2103
2116
  raise IndexError(f"{param_name} out of bounds: {index} >= {max_count} " f"(valid range: 0-{max_count - 1})")
2104
2117
 
2105
- def _ValidateOwner(self, obj: any, expected_owner: any, param_name: str = "object") -> None:
2118
+ def _ValidateOwner(self, obj: Any, expected_owner: Any, param_name: str = "object") -> None:
2106
2119
  """
2107
2120
  Validate that an object has expected owner.
2108
2121
 
@@ -0,0 +1,67 @@
1
+ #
2
+ # BaseOperations.pyi
3
+ #
4
+ # Type stubs for BaseOperations
5
+ # Base class for all Operations classes
6
+ #
7
+
8
+ from typing import Any, Optional, Iterator, List, Union, Generic, TypeVar, overload
9
+
10
+ T = TypeVar("T")
11
+
12
+ class EnumerableWrapper(Generic[T]):
13
+ """
14
+ Behavioral-collection wrapper around a raw C# IEnumerable / Python
15
+ iterator or generator (see docs/getall-contract.md).
16
+
17
+ Materializes to a list on first access, then caches it, so it supports
18
+ re-iteration, len(), and indexing/slicing like a real Sequence -- unlike
19
+ the one-shot Iterator it wraps.
20
+ """
21
+
22
+ def __init__(self, enumerable: Any) -> None: ...
23
+ @property
24
+ def Count(self) -> int: ...
25
+ def __len__(self) -> int: ...
26
+ @overload
27
+ def __getitem__(self, index: int) -> T: ...
28
+ @overload
29
+ def __getitem__(self, index: slice) -> List[T]: ...
30
+ def __iter__(self) -> Iterator[T]: ...
31
+ def __contains__(self, item: Any) -> bool: ...
32
+ def __repr__(self) -> str: ...
33
+
34
+ class BaseOperations(Generic[T]):
35
+ """Base class for all FLEx Operations"""
36
+
37
+ project: Any
38
+
39
+ def __init__(self, project: Any) -> None: ...
40
+
41
+ # Common CRUD methods (flexible signatures to accommodate various Operations classes)
42
+ #
43
+ # NOTE: GetAll returns Any (not Iterator[Any]) at this base-class level.
44
+ # Per docs/getall-contract.md, every GetAll/GetAll* subclass override
45
+ # actually returns one of EnumerableWrapper[T], list[T], or a
46
+ # SmartCollection[T] subtype -- never a one-shot Iterator. None of those
47
+ # three shapes is an Iterator (they lack __next__), so Iterator[Any]
48
+ # would make every subclass override an LSP violation under a strict
49
+ # checker. Subclasses declare the concrete shape they actually return.
50
+ def GetAll(self, *args: Any, **kwargs: Any) -> Any: ...
51
+ def Find(self, *args: Any, **kwargs: Any) -> Optional[Any]: ...
52
+ def Exists(self, *args: Any, **kwargs: Any) -> bool: ...
53
+ def Create(self, *args: Any, **kwargs: Any) -> Any: ... # Signature varies by Operations class
54
+ def Delete(self, obj: Any) -> None: ...
55
+ def Duplicate(self, obj: Any, deep: bool = True) -> Any: ...
56
+
57
+ # Common property methods
58
+ def GetName(self, obj: T) -> Optional[str]: ...
59
+ def SetName(self, obj: T, name: str) -> None: ...
60
+ def GetAbbreviation(self, obj: T) -> Optional[str]: ...
61
+ def SetAbbreviation(self, obj: T, abbr: str) -> None: ...
62
+ def GetDescription(self, obj: T) -> Optional[str]: ...
63
+ def SetDescription(self, obj: T, desc: str) -> None: ...
64
+ def GetGUID(self, obj: T) -> Optional[str]: ...
65
+
66
+ # Type checking
67
+ def __getattr__(self, name: str) -> Any: ...
@@ -224,7 +224,7 @@ class ConstChartClauseMarkerOperations(BaseOperations):
224
224
  row_or_hvo: Either an IConstChartRow object or its HVO
225
225
 
226
226
  Returns:
227
- list: List of IConstChartClauseMarker objects (empty list if none)
227
+ list[IConstChartClauseMarker]: List of clause markers (empty list if none)
228
228
 
229
229
  Raises:
230
230
  FP_NullParameterError: If row_or_hvo is None
@@ -212,7 +212,7 @@ class ConstChartMovedTextOperations(BaseOperations):
212
212
  chart_or_hvo: Either an IDsConstChart object or its HVO
213
213
 
214
214
  Returns:
215
- list: List of IConstChartMovedTextMarker objects (empty list if none)
215
+ list[IConstChartMovedTextMarker]: List of moved text markers (empty list if none)
216
216
 
217
217
  Raises:
218
218
  FP_NullParameterError: If chart_or_hvo is None
@@ -85,8 +85,8 @@ class ConstChartOperations(BaseOperations):
85
85
  This method returns an EnumerableWrapper (subscriptable, len()-able, lazily materialized) over all IDsConstChart objects in the
86
86
  project database, allowing iteration over all discourse analysis charts.
87
87
 
88
- Yields:
89
- IDsConstChart: Each constituent chart object in the project
88
+ Returns:
89
+ EnumerableWrapper[IDsConstChart]: Each constituent chart object in the project
90
90
 
91
91
  Example:
92
92
  >>> for chart in project.ConstCharts.GetAll():
@@ -230,7 +230,7 @@ class ConstChartRowOperations(BaseOperations):
230
230
  chart_or_hvo: Either an IDsConstChart object or its HVO
231
231
 
232
232
  Returns:
233
- list: List of IConstChartRow objects (empty list if none)
233
+ list[IConstChartRow]: List of rows (empty list if none)
234
234
 
235
235
  Raises:
236
236
  FP_NullParameterError: If chart_or_hvo is None
@@ -232,7 +232,7 @@ class ConstChartWordGroupOperations(BaseOperations):
232
232
  row_or_hvo: Either an IConstChartRow object or its HVO
233
233
 
234
234
  Returns:
235
- list: List of IConstChartWordGroup objects (empty list if none)
235
+ list[IConstChartWordGroup]: List of word groups (empty list if none)
236
236
 
237
237
  Raises:
238
238
  FP_NullParameterError: If row_or_hvo is None
@@ -82,8 +82,8 @@ class EnvironmentOperations(BaseOperations):
82
82
  """
83
83
  Get all phonological environments in the project.
84
84
 
85
- Yields:
86
- IPhEnvironment: Each environment object in the project's environment list.
85
+ Returns:
86
+ EnumerableWrapper[IPhEnvironment]: Each environment object in the project's environment list.
87
87
 
88
88
  Example:
89
89
  >>> envOps = EnvironmentOperations(project)
@@ -5,12 +5,12 @@
5
5
  #
6
6
 
7
7
  from typing import Any, Optional, Iterator
8
- from ..BaseOperations import BaseOperations
8
+ from ..BaseOperations import BaseOperations, EnumerableWrapper
9
9
 
10
10
  class EnvironmentOperations(BaseOperations[Any]):
11
11
  """EnvironmentOperations operations"""
12
12
 
13
- def GetAll(self, *args: Any, **kwargs: Any) -> Iterator[Any]: ...
13
+ def GetAll(self) -> EnumerableWrapper[Any]: ...
14
14
  def Find(self, *args: Any, **kwargs: Any) -> Optional[Any]: ...
15
15
  def Exists(self, *args: Any, **kwargs: Any) -> bool: ...
16
16
  def Create(self, *args: Any, **kwargs: Any) -> Any: ...
@@ -94,8 +94,8 @@ class GramCatOperations(BaseOperations):
94
94
  yields only top-level categories and the caller must descend
95
95
  via GetSubcategories.
96
96
 
97
- Yields:
98
- ICmPossibility: Each grammatical category.
97
+ Returns:
98
+ EnumerableWrapper[ICmPossibility]: Each grammatical category.
99
99
 
100
100
  Example:
101
101
  >>> gramCatOps = GramCatOperations(project)
@@ -5,12 +5,12 @@
5
5
  #
6
6
 
7
7
  from typing import Any, Optional, Iterator
8
- from ..BaseOperations import BaseOperations
8
+ from ..BaseOperations import BaseOperations, EnumerableWrapper
9
9
 
10
10
  class GramCatOperations(BaseOperations[Any]):
11
11
  """GramCatOperations operations"""
12
12
 
13
- def GetAll(self, *args: Any, **kwargs: Any) -> Iterator[Any]: ...
13
+ def GetAll(self, recursive: bool = True, **kwargs: Any) -> EnumerableWrapper[Any]: ...
14
14
  def Find(self, *args: Any, **kwargs: Any) -> Optional[Any]: ...
15
15
  def Exists(self, *args: Any, **kwargs: Any) -> bool: ...
16
16
  def Create(self, *args: Any, **kwargs: Any) -> Any: ...
@@ -10,7 +10,10 @@ from ..BaseOperations import BaseOperations
10
10
  class InflectionFeatureOperations(BaseOperations[Any]):
11
11
  """InflectionFeatureOperations operations"""
12
12
 
13
- def GetAll(self, *args: Any, **kwargs: Any) -> Iterator[Any]: ...
13
+ # NOTE: this class does not define its own GetAll -- it inherits whatever
14
+ # BaseOperations provides (see BaseOperations.pyi). The previous
15
+ # `GetAll(...) -> Iterator[Any]` line here asserted an override that
16
+ # does not exist in the runtime implementation.
14
17
  def Find(self, *args: Any, **kwargs: Any) -> Optional[Any]: ...
15
18
  def Exists(self, *args: Any, **kwargs: Any) -> bool: ...
16
19
  def Create(self, *args: Any, **kwargs: Any) -> Any: ...
@@ -137,8 +137,8 @@ class MorphRuleOperations(BaseOperations):
137
137
  Ad hoc co-prohibitions are NOT included (different property interface);
138
138
  use GetAllAdhocCoProhibitions() separately.
139
139
 
140
- Yields:
141
- Each compound rule or affix template object.
140
+ Returns:
141
+ EnumerableWrapper[IMoCompoundRule | IMoInflAffixTemplate]: Each compound rule or affix template object.
142
142
 
143
143
  Example:
144
144
  >>> ruleOps = MorphRuleOperations(project)
@@ -160,7 +160,7 @@ class MorphRuleOperations(BaseOperations):
160
160
  Get all compound rules from MoMorphData.CompoundRulesOS.
161
161
 
162
162
  Returns:
163
- CompoundRuleCollection: Collection of CompoundRule wrapper objects
163
+ CompoundRuleCollection[CompoundRule]: Collection of CompoundRule wrapper objects
164
164
  (MoEndoCompound or MoExoCompound).
165
165
 
166
166
  Example:
@@ -194,7 +194,7 @@ class MorphRuleOperations(BaseOperations):
194
194
  as a smart collection with filtering capabilities.
195
195
 
196
196
  Returns:
197
- AffixTemplateCollection: Collection of AffixTemplate wrapper objects
197
+ AffixTemplateCollection[AffixTemplate]: Collection of AffixTemplate wrapper objects
198
198
  from all parts of speech.
199
199
 
200
200
  Example:
@@ -232,7 +232,7 @@ class MorphRuleOperations(BaseOperations):
232
232
  pos_or_hvo: The IPartOfSpeech object or HVO.
233
233
 
234
234
  Returns:
235
- AffixTemplateCollection: Collection of AffixTemplate wrapper objects
235
+ AffixTemplateCollection[AffixTemplate]: Collection of AffixTemplate wrapper objects
236
236
  on the given POS.
237
237
 
238
238
  Raises:
@@ -273,8 +273,8 @@ class MorphRuleOperations(BaseOperations):
273
273
  determine the subtype: MoAdhocProhibGr, MoAdhocProhibMorph,
274
274
  or MoAdhocProhibAllomorph.
275
275
 
276
- Yields:
277
- IMoAdhocProhib: Each co-occurrence prohibition.
276
+ Returns:
277
+ EnumerableWrapper[IMoAdhocProhib]: Each co-occurrence prohibition.
278
278
 
279
279
  Example:
280
280
  >>> for prohib in ruleOps.GetAllAdhocCoProhibitions():
@@ -5,12 +5,18 @@
5
5
  #
6
6
 
7
7
  from typing import Any, Optional, Iterator
8
- from ..BaseOperations import BaseOperations
8
+ from ..BaseOperations import BaseOperations, EnumerableWrapper
9
+ from .compound_rule_collection import CompoundRuleCollection
10
+ from .affix_template_collection import AffixTemplateCollection
9
11
 
10
12
  class MorphRuleOperations(BaseOperations[Any]):
11
13
  """MorphRuleOperations operations"""
12
14
 
13
- def GetAll(self, *args: Any, **kwargs: Any) -> Iterator[Any]: ...
15
+ def GetAll(self) -> EnumerableWrapper[Any]: ...
16
+ def GetAllCompoundRules(self) -> CompoundRuleCollection: ...
17
+ def GetAllAffixTemplates(self) -> AffixTemplateCollection: ...
18
+ def GetAllAffixTemplatesForPOS(self, pos_or_hvo: Any) -> AffixTemplateCollection: ...
19
+ def GetAllAdhocCoProhibitions(self) -> EnumerableWrapper[Any]: ...
14
20
  def Find(self, *args: Any, **kwargs: Any) -> Optional[Any]: ...
15
21
  def Exists(self, *args: Any, **kwargs: Any) -> bool: ...
16
22
  def Create(self, *args: Any, **kwargs: Any) -> Any: ...
@@ -158,8 +158,8 @@ class NaturalClassOperations(BaseOperations):
158
158
  """
159
159
  Get all natural classes in the phonological inventory.
160
160
 
161
- Yields:
162
- IPhNaturalClass: Each natural class in the project.
161
+ Returns:
162
+ EnumerableWrapper[IPhNaturalClass]: Each natural class in the project.
163
163
 
164
164
  Example:
165
165
  >>> for nc in project.NaturalClasses.GetAll():
@@ -5,12 +5,12 @@
5
5
  #
6
6
 
7
7
  from typing import Any, Optional, Iterator
8
- from ..BaseOperations import BaseOperations
8
+ from ..BaseOperations import BaseOperations, EnumerableWrapper
9
9
 
10
10
  class NaturalClassOperations(BaseOperations[Any]):
11
11
  """NaturalClassOperations operations"""
12
12
 
13
- def GetAll(self, *args: Any, **kwargs: Any) -> Iterator[Any]: ...
13
+ def GetAll(self) -> EnumerableWrapper[Any]: ...
14
14
  def Find(self, *args: Any, **kwargs: Any) -> Optional[Any]: ...
15
15
  def Exists(self, *args: Any, **kwargs: Any) -> bool: ...
16
16
  def Create(self, *args: Any, **kwargs: Any) -> Any: ...
@@ -112,8 +112,8 @@ class POSOperations(BaseOperations, CatalogBackedMixin):
112
112
  yields only top-level POSs and the caller must descend via
113
113
  GetSubcategories.
114
114
 
115
- Yields:
116
- IPartOfSpeech: Each part of speech object.
115
+ Returns:
116
+ EnumerableWrapper[IPartOfSpeech]: Each part of speech object.
117
117
 
118
118
  Example:
119
119
  >>> posOps = POSOperations(project)
@@ -5,12 +5,12 @@
5
5
  #
6
6
 
7
7
  from typing import Any, Optional, Iterator
8
- from ..BaseOperations import BaseOperations
8
+ from ..BaseOperations import BaseOperations, EnumerableWrapper
9
9
 
10
10
  class POSOperations(BaseOperations[Any]):
11
11
  """Parts of Speech operations"""
12
12
 
13
- def GetAll(self, *args: Any, **kwargs: Any) -> Iterator[Any]: ...
13
+ def GetAll(self, recursive: bool = True, **kwargs: Any) -> EnumerableWrapper[Any]: ...
14
14
  def Find(self, *args: Any, **kwargs: Any) -> Optional[Any]: ...
15
15
  def Exists(self, *args: Any, **kwargs: Any) -> bool: ...
16
16
  def Create(self, *args: Any, **kwargs: Any) -> Any: ...
@@ -142,8 +142,8 @@ class PhonFeatureOperations(BaseOperations, CatalogBackedMixin):
142
142
  """
143
143
  Get all phonological features in the project.
144
144
 
145
- Yields:
146
- IFsClosedFeature: Each feature in PhFeatureSystemOA.FeaturesOC.
145
+ Returns:
146
+ EnumerableWrapper[IFsClosedFeature]: Each feature in PhFeatureSystemOA.FeaturesOC.
147
147
 
148
148
  Notes:
149
149
  - ``FeaturesOC`` is typed as ``IFsFeatDefn`` in C#. Each yielded
@@ -115,8 +115,8 @@ class PhonemeOperations(BaseOperations):
115
115
  """
116
116
  Get all phonemes in the project.
117
117
 
118
- Yields:
119
- IPhPhoneme: Each phoneme object in the project's phoneme inventory.
118
+ Returns:
119
+ EnumerableWrapper[IPhPhoneme]: Each phoneme object in the project's phoneme inventory.
120
120
 
121
121
  Example:
122
122
  >>> phonemeOps = PhonemeOperations(project)
@@ -5,12 +5,12 @@
5
5
  #
6
6
 
7
7
  from typing import Any, Optional, Iterator
8
- from ..BaseOperations import BaseOperations
8
+ from ..BaseOperations import BaseOperations, EnumerableWrapper
9
9
 
10
10
  class PhonemeOperations(BaseOperations[Any]):
11
11
  """PhonemeOperations operations"""
12
12
 
13
- def GetAll(self, *args: Any, **kwargs: Any) -> Iterator[Any]: ...
13
+ def GetAll(self) -> EnumerableWrapper[Any]: ...
14
14
  def Find(self, *args: Any, **kwargs: Any) -> Optional[Any]: ...
15
15
  def Exists(self, *args: Any, **kwargs: Any) -> bool: ...
16
16
  def Create(self, *args: Any, **kwargs: Any) -> Any: ...
@@ -107,7 +107,7 @@ class PhonologicalRuleOperations(BaseOperations):
107
107
  Get all phonological rules in the project.
108
108
 
109
109
  Returns:
110
- RuleCollection: Smart collection of PhonologicalRule wrapped objects.
110
+ RuleCollection[PhonologicalRule]: Smart collection of PhonologicalRule wrapped objects.
111
111
 
112
112
  Example:
113
113
  >>> phonRuleOps = PhonologicalRuleOperations(project)
@@ -6,11 +6,12 @@
6
6
 
7
7
  from typing import Any, Optional, Iterator
8
8
  from ..BaseOperations import BaseOperations
9
+ from .rule_collection import RuleCollection
9
10
 
10
11
  class PhonologicalRuleOperations(BaseOperations[Any]):
11
12
  """PhonologicalRuleOperations operations"""
12
13
 
13
- def GetAll(self, *args: Any, **kwargs: Any) -> Iterator[Any]: ...
14
+ def GetAll(self) -> RuleCollection: ...
14
15
  def Find(self, *args: Any, **kwargs: Any) -> Optional[Any]: ...
15
16
  def Exists(self, *args: Any, **kwargs: Any) -> bool: ...
16
17
  def Create(self, *args: Any, **kwargs: Any) -> Any: ...
@@ -108,8 +108,8 @@ class StratumOperations(BaseOperations):
108
108
  """
109
109
  Yield every stratum in ``MorphologicalDataOA.StrataOS``.
110
110
 
111
- Yields:
112
- IMoStratum: Each stratum in declaration order.
111
+ Returns:
112
+ EnumerableWrapper[IMoStratum]: Each stratum in declaration order.
113
113
  """
114
114
  morph_data = self.project.lp.MorphologicalDataOA
115
115
  if morph_data is None:
@@ -112,7 +112,7 @@ class AllomorphOperations(BaseOperations):
112
112
  in the entire project.
113
113
 
114
114
  Returns:
115
- AllomorphCollection: Smart collection of Allomorph wrapper objects
115
+ AllomorphCollection[Allomorph]: Smart collection of Allomorph wrapper objects
116
116
  showing type breakdown and supporting filtered queries.
117
117
 
118
118
  Example: