yapyon 0.5.2__tar.gz → 0.6.0.dev0__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 (355) hide show
  1. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/CHANGELOG.md +123 -0
  2. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/MANIFEST.in +2 -0
  3. {yapyon-0.5.2/src/yapyon.egg-info → yapyon-0.6.0.dev0}/PKG-INFO +47 -6
  4. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/README.md +46 -5
  5. yapyon-0.6.0.dev0/docs/DETAILS.md +524 -0
  6. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/GRAMMAR.md +232 -56
  7. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/SPEC.md +614 -163
  8. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/TUTORIAL.md +137 -9
  9. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/README.md +7 -3
  10. yapyon-0.6.0.dev0/docs/conformance/cases/error/angle-bracket-in-a-value.meta.json +5 -0
  11. yapyon-0.6.0.dev0/docs/conformance/cases/error/angle-bracket-in-a-value.yap +1 -0
  12. yapyon-0.6.0.dev0/docs/conformance/cases/error/comprehension-binding-arity.meta.json +5 -0
  13. yapyon-0.6.0.dev0/docs/conformance/cases/error/comprehension-binding-arity.yap +2 -0
  14. yapyon-0.6.0.dev0/docs/conformance/cases/error/comprehension-condition-type.meta.json +5 -0
  15. yapyon-0.6.0.dev0/docs/conformance/cases/error/comprehension-condition-type.yap +2 -0
  16. yapyon-0.6.0.dev0/docs/conformance/cases/error/comprehension-duplicate-key.meta.json +5 -0
  17. yapyon-0.6.0.dev0/docs/conformance/cases/error/comprehension-duplicate-key.yap +2 -0
  18. yapyon-0.6.0.dev0/docs/conformance/cases/error/comprehension-key-type.meta.json +5 -0
  19. yapyon-0.6.0.dev0/docs/conformance/cases/error/comprehension-key-type.yap +2 -0
  20. yapyon-0.6.0.dev0/docs/conformance/cases/error/merge-pipe-in-record.meta.json +1 -0
  21. yapyon-0.6.0.dev0/docs/conformance/cases/error/merge-pipe-in-record.yap +1 -0
  22. yapyon-0.6.0.dev0/docs/conformance/cases/error/replacement-duplicate.meta.json +1 -0
  23. yapyon-0.6.0.dev0/docs/conformance/cases/error/replacement-duplicate.yap +2 -0
  24. yapyon-0.6.0.dev0/docs/conformance/cases/full/30-filtered-inline-selection.expected.yap +4 -0
  25. yapyon-0.6.0.dev0/docs/conformance/cases/full/30-filtered-inline-selection.yap +4 -0
  26. yapyon-0.6.0.dev0/docs/conformance/cases/full/31-block-dictionary-comprehension.expected.yap +4 -0
  27. yapyon-0.6.0.dev0/docs/conformance/cases/full/31-block-dictionary-comprehension.yap +6 -0
  28. yapyon-0.6.0.dev0/docs/conformance/cases/full/32-multimap-comprehensions.expected.yap +7 -0
  29. yapyon-0.6.0.dev0/docs/conformance/cases/full/32-multimap-comprehensions.yap +5 -0
  30. yapyon-0.6.0.dev0/docs/conformance/cases/full/33-key-value-source-bindings.expected.yap +6 -0
  31. yapyon-0.6.0.dev0/docs/conformance/cases/full/33-key-value-source-bindings.yap +4 -0
  32. yapyon-0.6.0.dev0/docs/conformance/cases/full/34-boolean-and-comparison-expressions.expected.yap +6 -0
  33. yapyon-0.6.0.dev0/docs/conformance/cases/full/34-boolean-and-comparison-expressions.yap +6 -0
  34. yapyon-0.6.0.dev0/docs/conformance/cases/full/35-container-none-and-replacement.expected.yap +1 -0
  35. yapyon-0.6.0.dev0/docs/conformance/cases/full/35-container-none-and-replacement.yap +6 -0
  36. yapyon-0.6.0.dev0/docs/conformance/cases/full/36-typed-occurrence-combination.expected.yap +9 -0
  37. yapyon-0.6.0.dev0/docs/conformance/cases/full/36-typed-occurrence-combination.yap +3 -0
  38. yapyon-0.6.0.dev0/docs/conformance/cases/full/37-composition-grouping.expected.yap +1 -0
  39. yapyon-0.6.0.dev0/docs/conformance/cases/full/37-composition-grouping.yap +2 -0
  40. yapyon-0.6.0.dev0/docs/conformance/cases/full/38-independent-comprehension-layers.expected.yap +8 -0
  41. yapyon-0.6.0.dev0/docs/conformance/cases/full/38-independent-comprehension-layers.yap +10 -0
  42. yapyon-0.6.0.dev0/docs/conformance/cases/record/23-flow-multimap.expected.yap +4 -0
  43. yapyon-0.6.0.dev0/docs/conformance/cases/record/23-flow-multimap.yap +1 -0
  44. yapyon-0.6.0.dev0/docs/conformance/cases/record/24-replacement-separators.expected.yap +1 -0
  45. yapyon-0.6.0.dev0/docs/conformance/cases/record/24-replacement-separators.yap +5 -0
  46. yapyon-0.6.0.dev0/examples/comprehensions.yap +17 -0
  47. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/pyproject.toml +1 -1
  48. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/__init__.py +1 -1
  49. yapyon-0.6.0.dev0/src/yapyon/_expressions.py +422 -0
  50. yapyon-0.6.0.dev0/src/yapyon/_source.py +89 -0
  51. yapyon-0.6.0.dev0/src/yapyon/assembly.py +353 -0
  52. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/emitter.py +121 -9
  53. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/expand.py +1 -1
  54. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/lexer.py +264 -19
  55. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/loader.py +9 -3
  56. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/parser.py +376 -46
  57. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/resolver.py +94 -30
  58. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/serializers.py +5 -5
  59. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/tree.py +81 -35
  60. {yapyon-0.5.2 → yapyon-0.6.0.dev0/src/yapyon.egg-info}/PKG-INFO +47 -6
  61. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon.egg-info/SOURCES.txt +42 -0
  62. yapyon-0.6.0.dev0/tests/fixtures/deferred-layer-case/agent.yap +5 -0
  63. yapyon-0.6.0.dev0/tests/fixtures/deferred-layer-case/base.tmpl +1 -0
  64. yapyon-0.6.0.dev0/tests/fixtures/deferred-layer-case/codex.tmpl +6 -0
  65. yapyon-0.6.0.dev0/tests/fixtures/deferred-layer-case/custom.tmpl +6 -0
  66. yapyon-0.6.0.dev0/tests/test_comprehensions.py +405 -0
  67. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_conformance_corpus.py +15 -1
  68. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_empty_multimap.py +1 -2
  69. yapyon-0.6.0.dev0/tests/test_merge_source.py +1079 -0
  70. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_order_independence.py +7 -1
  71. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_parser.py +4 -3
  72. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_slot_syntax.py +1 -1
  73. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_slots.py +1 -1
  74. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_source.py +43 -69
  75. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_tree.py +3 -3
  76. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tools/run_conformance.py +12 -2
  77. yapyon-0.5.2/docs/DETAILS.md +0 -338
  78. yapyon-0.5.2/docs/conformance/cases/error/angle-bracket-in-a-value.meta.json +0 -5
  79. yapyon-0.5.2/docs/conformance/cases/error/angle-bracket-in-a-value.yap +0 -1
  80. yapyon-0.5.2/src/yapyon/_source.py +0 -163
  81. yapyon-0.5.2/src/yapyon/assembly.py +0 -215
  82. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/LICENSE +0 -0
  83. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/argument-contains-the-call-site.meta.json +0 -0
  84. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/argument-contains-the-call-site.yap +0 -0
  85. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/b64-invalid-alphabet.meta.json +0 -0
  86. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/b64-invalid-alphabet.yap +0 -0
  87. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/b64-non-canonical-one-pad.meta.json +0 -0
  88. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/b64-non-canonical-one-pad.yap +0 -0
  89. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/b64-non-canonical-two-pads.meta.json +0 -0
  90. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/b64-non-canonical-two-pads.yap +0 -0
  91. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/bare-path-value.meta.json +0 -0
  92. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/bare-path-value.yap +0 -0
  93. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/bool-from-other-text.meta.json +0 -0
  94. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/bool-from-other-text.yap +0 -0
  95. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/c32-spare-bits.meta.json +0 -0
  96. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/c32-spare-bits.yap +0 -0
  97. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/cast-of-none.meta.json +0 -0
  98. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/cast-of-none.yap +0 -0
  99. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/computed-key-cycle.meta.json +0 -0
  100. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/computed-key-cycle.yap +0 -0
  101. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/computed-key-duplicate.meta.json +0 -0
  102. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/computed-key-duplicate.yap +0 -0
  103. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/computed-key-in-record.meta.json +0 -0
  104. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/computed-key-in-record.yap +0 -0
  105. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/computed-key-metadata.meta.json +0 -0
  106. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/computed-key-metadata.yap +0 -0
  107. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/computed-key-not-dot.meta.json +0 -0
  108. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/computed-key-not-dot.yap +0 -0
  109. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/copy-contains-itself.meta.json +0 -0
  110. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/copy-contains-itself.yap +0 -0
  111. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/decimal-leading-zero.meta.json +0 -0
  112. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/decimal-leading-zero.yap +0 -0
  113. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/dunder-key.meta.json +0 -0
  114. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/dunder-key.yap +0 -0
  115. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/duplicate-key-after-folding.meta.json +0 -0
  116. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/duplicate-key-after-folding.yap +0 -0
  117. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/duplicate-key.meta.json +0 -0
  118. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/duplicate-key.yap +0 -0
  119. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/empty-document.meta.json +0 -0
  120. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/empty-document.yap +0 -0
  121. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/empty-key.meta.json +0 -0
  122. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/empty-key.yap +0 -0
  123. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-name-syntax.meta.json +0 -0
  124. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-name-syntax.yap +0 -0
  125. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-not-exposed.env.json +0 -0
  126. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-not-exposed.meta.json +0 -0
  127. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-not-exposed.yap +0 -0
  128. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-off-with-fallback.env.json +0 -0
  129. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-off-with-fallback.meta.json +0 -0
  130. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-off-with-fallback.yap +0 -0
  131. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-step.env.json +0 -0
  132. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-step.meta.json +0 -0
  133. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-step.yap +0 -0
  134. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-unset.env.json +0 -0
  135. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-unset.meta.json +0 -0
  136. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/env-unset.yap +0 -0
  137. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/hex-bad-symbol.meta.json +0 -0
  138. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/hex-bad-symbol.yap +0 -0
  139. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/hole-in-a-record.meta.json +0 -0
  140. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/hole-in-a-record.yap +0 -0
  141. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/int-from-float-text.meta.json +0 -0
  142. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/int-from-float-text.yap +0 -0
  143. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/int-from-text-with-a-tail.meta.json +0 -0
  144. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/int-from-text-with-a-tail.yap +0 -0
  145. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/key-not-an-identifier.meta.json +0 -0
  146. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/key-not-an-identifier.yap +0 -0
  147. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/left-of-base-column.meta.json +0 -0
  148. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/left-of-base-column.yap +0 -0
  149. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/not-a-record.meta.json +0 -0
  150. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/not-a-record.yap +0 -0
  151. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/oct-symbol-count.meta.json +0 -0
  152. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/oct-symbol-count.yap +0 -0
  153. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/parentheses-in-a-record.meta.json +0 -0
  154. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/parentheses-in-a-record.yap +0 -0
  155. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/parentheses-make-no-tuple.meta.json +0 -0
  156. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/parentheses-make-no-tuple.yap +0 -0
  157. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/quoted-key-not-name.meta.json +0 -0
  158. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/quoted-key-not-name.yap +0 -0
  159. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/safe-dot-before-a-key.meta.json +0 -0
  160. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/safe-dot-before-a-key.yap +0 -0
  161. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/serializer-on-bare-anchor.meta.json +0 -0
  162. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/serializer-on-bare-anchor.yap +0 -0
  163. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/slot-in-a-record.meta.json +0 -0
  164. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/slot-in-a-record.yap +0 -0
  165. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/slot-overrides-not-a-mapping.meta.json +0 -0
  166. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/slot-overrides-not-a-mapping.yap +0 -0
  167. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/tab-in-indent.meta.json +0 -0
  168. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/tab-in-indent.yap +0 -0
  169. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/template-in-yapyon-serializer.meta.json +0 -0
  170. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/template-in-yapyon-serializer.yap +0 -0
  171. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/toml-takes-a-table.meta.json +0 -0
  172. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/toml-takes-a-table.yap +0 -0
  173. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/unbound-hole.meta.json +0 -0
  174. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/unbound-hole.yap +0 -0
  175. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/undeclared-function.meta.json +0 -0
  176. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/undeclared-function.yap +0 -0
  177. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/unfilled-abstract-slot.meta.json +0 -0
  178. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/unfilled-abstract-slot.yap +0 -0
  179. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/unfilled-slot.meta.json +0 -0
  180. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/unfilled-slot.yap +0 -0
  181. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/unknown-built-in.meta.json +0 -0
  182. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/unknown-built-in.yap +0 -0
  183. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/unknown-escape.meta.json +0 -0
  184. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/error/unknown-escape.yap +0 -0
  185. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/01-splice-uses-the-value.expected.yap +0 -0
  186. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/01-splice-uses-the-value.yap +0 -0
  187. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/02-nearest-wins.expected.yap +0 -0
  188. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/02-nearest-wins.yap +0 -0
  189. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/03-root-is-the-escape-hatch.expected.yap +0 -0
  190. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/03-root-is-the-escape-hatch.yap +0 -0
  191. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/04-a-near-uncle-beats-a-far-ancestor.expected.yap +0 -0
  192. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/04-a-near-uncle-beats-a-far-ancestor.yap +0 -0
  193. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/05-parent-and-key.expected.yap +0 -0
  194. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/05-parent-and-key.yap +0 -0
  195. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/06-the-dot-is-sugar-for-the-bracket.expected.yap +0 -0
  196. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/06-the-dot-is-sugar-for-the-bracket.yap +0 -0
  197. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/07-indirect-key-from-a-value.expected.yap +0 -0
  198. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/07-indirect-key-from-a-value.yap +0 -0
  199. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/08-negative-index-takes-pythons-meaning.expected.yap +0 -0
  200. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/08-negative-index-takes-pythons-meaning.yap +0 -0
  201. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/09-multimap-list-view.expected.yap +0 -0
  202. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/09-multimap-list-view.yap +0 -0
  203. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/10-chained-splice.expected.yap +0 -0
  204. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/10-chained-splice.yap +0 -0
  205. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/11-serializer-json.expected.yap +0 -0
  206. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/11-serializer-json.yap +0 -0
  207. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/12-serializer-toml-array-of-tables.expected.yap +0 -0
  208. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/12-serializer-toml-array-of-tables.yap +0 -0
  209. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/13-serializer-yaml.expected.yap +0 -0
  210. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/13-serializer-yaml.yap +0 -0
  211. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/14-serializer-on-a-sibling-through-an-anchor.expected.yap +0 -0
  212. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/14-serializer-on-a-sibling-through-an-anchor.yap +0 -0
  213. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/15-serializer-yapyon.expected.yap +0 -0
  214. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/15-serializer-yapyon.yap +0 -0
  215. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/16-json-records-lexemes.expected.yap +0 -0
  216. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/16-json-records-lexemes.yap +0 -0
  217. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/17-multimap-in-every-format.expected.yap +0 -0
  218. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/17-multimap-in-every-format.yap +0 -0
  219. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/18-toml-none.expected.yap +0 -0
  220. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/18-toml-none.yap +0 -0
  221. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/19-calls.expected.yap +0 -0
  222. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/19-calls.yap +0 -0
  223. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/20-a-subscript-key-written-later.expected.yap +0 -0
  224. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/20-a-subscript-key-written-later.yap +0 -0
  225. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/21-environment.env.json +0 -0
  226. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/21-environment.expected.yap +0 -0
  227. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/21-environment.yap +0 -0
  228. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/22-environment-not-exposed.env.json +0 -0
  229. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/22-environment-not-exposed.expected.yap +0 -0
  230. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/22-environment-not-exposed.yap +0 -0
  231. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/23-environment-allowed.env.json +0 -0
  232. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/23-environment-allowed.expected.yap +0 -0
  233. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/23-environment-allowed.yap +0 -0
  234. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/24-copy-keeps-the-type.expected.yap +0 -0
  235. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/24-copy-keeps-the-type.yap +0 -0
  236. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/25-copy-resolves-then-copies.expected.yap +0 -0
  237. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/25-copy-resolves-then-copies.yap +0 -0
  238. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/26-parentheses-group-a-literal.expected.yap +0 -0
  239. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/26-parentheses-group-a-literal.yap +0 -0
  240. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/27-copy-of-a-calls-result.expected.yap +0 -0
  241. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/27-copy-of-a-calls-result.yap +0 -0
  242. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/28-casters.expected.yap +0 -0
  243. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/28-casters.yap +0 -0
  244. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/29-get-and-safe-calls.expected.yap +0 -0
  245. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/29-get-and-safe-calls.yap +0 -0
  246. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/computed-env-key.env.json +0 -0
  247. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/computed-env-key.expected.yap +0 -0
  248. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/computed-env-key.yap +0 -0
  249. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/computed-keys.expected.yap +0 -0
  250. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/full/computed-keys.yap +0 -0
  251. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/01-scalars.expected.yap +0 -0
  252. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/01-scalars.yap +0 -0
  253. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/02-bytes-two-spellings.expected.yap +0 -0
  254. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/02-bytes-two-spellings.yap +0 -0
  255. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/03-string-quote-forms.expected.yap +0 -0
  256. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/03-string-quote-forms.yap +0 -0
  257. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/04-escapes.expected.yap +0 -0
  258. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/04-escapes.yap +0 -0
  259. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/05-block-vs-flow.expected.yap +0 -0
  260. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/05-block-vs-flow.yap +0 -0
  261. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/06-nested-blocks.expected.yap +0 -0
  262. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/06-nested-blocks.yap +0 -0
  263. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/07-empty-containers.expected.yap +0 -0
  264. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/07-empty-containers.yap +0 -0
  265. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/08-number-forms.expected.yap +0 -0
  266. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/08-number-forms.yap +0 -0
  267. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/09-bool-none.expected.yap +0 -0
  268. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/09-bool-none.yap +0 -0
  269. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/10-unicode-values.expected.yap +0 -0
  270. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/10-unicode-values.yap +0 -0
  271. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/11-keys-fold-identical.expected.yap +0 -0
  272. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/11-keys-fold-identical.yap +0 -0
  273. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/12-multimap.expected.yap +0 -0
  274. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/12-multimap.yap +0 -0
  275. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/13-comments-invisible.expected.yap +0 -0
  276. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/13-comments-invisible.yap +0 -0
  277. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/14-key-order-pinned.expected.yap +0 -0
  278. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/14-key-order-pinned.yap +0 -0
  279. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/15-raw-bytes.expected.yap +0 -0
  280. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/15-raw-bytes.yap +0 -0
  281. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/16-block-strings.expected.yap +0 -0
  282. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/16-block-strings.yap +0 -0
  283. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/17-indented-document.expected.yap +0 -0
  284. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/17-indented-document.yap +0 -0
  285. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/18-stream-literals.expected.yap +0 -0
  286. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/18-stream-literals.yap +0 -0
  287. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/19-radix-integers.expected.yap +0 -0
  288. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/19-radix-integers.yap +0 -0
  289. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/20-a-single-value.expected.yap +0 -0
  290. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/20-a-single-value.yap +0 -0
  291. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/21-an-empty-mapping.expected.yap +0 -0
  292. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/21-an-empty-mapping.yap +0 -0
  293. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/22-the-empty-multimap.expected.yap +0 -0
  294. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/22-the-empty-multimap.yap +0 -0
  295. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/quoted-keys.expected.yap +0 -0
  296. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/docs/conformance/cases/record/quoted-keys.yap +0 -0
  297. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/examples/bridge.yap +0 -0
  298. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/examples/gateway.yap +0 -0
  299. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/examples/registry.yap +0 -0
  300. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/setup.cfg +0 -0
  301. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/__main__.py +0 -0
  302. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/_cli.py +0 -0
  303. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/_digits.py +0 -0
  304. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/_keys.py +0 -0
  305. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/_wcwidth.py +0 -0
  306. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/_width.py +0 -0
  307. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/_xid.py +0 -0
  308. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/contract.py +0 -0
  309. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/environment.py +0 -0
  310. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/multimap.py +0 -0
  311. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/record.py +0 -0
  312. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/template.py +0 -0
  313. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/tier.py +0 -0
  314. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/typespec.py +0 -0
  315. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon/writers.py +0 -0
  316. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon.egg-info/dependency_links.txt +0 -0
  317. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon.egg-info/requires.txt +0 -0
  318. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/src/yapyon.egg-info/top_level.txt +0 -0
  319. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_as_yapyon.py +0 -0
  320. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_bare_calls.py +0 -0
  321. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_builtins.py +0 -0
  322. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_casters.py +0 -0
  323. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_cli.py +0 -0
  324. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_computed_keys.py +0 -0
  325. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_conformance.py +0 -0
  326. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_contracts.py +0 -0
  327. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_copies.py +0 -0
  328. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_diagnostics.py +0 -0
  329. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_documents.py +0 -0
  330. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_emitter.py +0 -0
  331. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_environment.py +0 -0
  332. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_expand.py +0 -0
  333. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_hole_calls.py +0 -0
  334. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_identifiers.py +0 -0
  335. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_key_integration.py +0 -0
  336. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_key_merges.py +0 -0
  337. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_key_syntax.py +0 -0
  338. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_lexer.py +0 -0
  339. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_loader.py +0 -0
  340. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_lookup.py +0 -0
  341. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_node_sources.py +0 -0
  342. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_numbers_streams.py +0 -0
  343. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_readme.py +0 -0
  344. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_record.py +0 -0
  345. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_ref_grammar.py +0 -0
  346. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_resolver.py +0 -0
  347. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_safe_calls.py +0 -0
  348. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_serializer_output.py +0 -0
  349. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_subscripts.py +0 -0
  350. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_tiers.py +0 -0
  351. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_tutorial.py +0 -0
  352. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tests/test_width.py +0 -0
  353. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tools/check_ref_grammar.py +0 -0
  354. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tools/gen_wcwidth_table.py +0 -0
  355. {yapyon-0.5.2 → yapyon-0.6.0.dev0}/tools/gen_xid_table.py +0 -0
@@ -9,6 +9,129 @@ before it needed `pip install yapyon --pre` to be seen.
9
9
 
10
10
  ---
11
11
 
12
+ ## 0.6.0.dev0 — Unreleased
13
+
14
+ Development prerelease targeting specification and grammar **v0.6** for
15
+ merge/source composition and unfinished persistence. This section records
16
+ unreleased work, not a publication claim.
17
+
18
+ ### Changed — breaking
19
+
20
+ - **Ordinary collection merging (§15.2)** combines lists by whole typed
21
+ elements and multimaps by complete key/value pairs, instead of replacing
22
+ them wholesale. Equal items retain the greater per-input occurrence count,
23
+ not the sum. Earlier positions stay; incoming occurrences match the first
24
+ equal unmatched original earlier occurrence or append in incoming order.
25
+ A match takes the complete higher representation, including lexemes and
26
+ a dictionary item's key order/kind, without recursive member fusion.
27
+ Standalone and explicitly replaced collections keep authored repetitions.
28
+ - **Typed merge equality** distinguishes bool, int, and float: True, 1, and
29
+ 1.0 are different items. Same-kind values ignore incidental literal spelling;
30
+ dictionaries compare associations independent of entry order/key kind,
31
+ multimaps compare ordered entry sequences, and Templates compare delivered
32
+ parts and hole metadata without rendering. Ordinary expression equality
33
+ retains its existing numeric behavior.
34
+ - **None yields to containers in either order**, including empty dictionaries,
35
+ lists, and multimaps. Compatible empty inputs yield rather than clear
36
+ populated collections. Other noncombining kinds take the higher whole value. Use explicit
37
+ field replacement to force None or an empty collection over earlier data.
38
+ - **Copies and calls merge by eventual value kind**, not parser-node class.
39
+ A deferred copy/call returning a dictionary now merges by key rather than
40
+ replacing an earlier dictionary wholesale; returned lists/multimaps use the
41
+ same collection operation as literals. Unknown kinds wait for resolution
42
+ without executing during merge or source saving.
43
+
44
+ ### Added
45
+
46
+ - **Field replacement:** `key:= value` discards that field's earlier value,
47
+ including pending computation, and uses the complete incoming RHS. It is
48
+ not deletion or protection from later overrides. Colon and equals are
49
+ separate tokens, so `key : = value` is also valid; flow newlines may separate
50
+ them. An annotation alone does not raise the tier of otherwise literal data,
51
+ and direct record normalization preserves it. Same-contribution dictionary
52
+ duplicates remain akan; matched dictionary keys retain earlier spelling,
53
+ position, and name/non-name kind, without promotion.
54
+ - **Explicit value composition (§16.5):** `|` is the lowest-precedence value
55
+ operator, below logical `or`, and associates left to right across mixed block
56
+ and flow operands. Right grouping remains meaningful; merge is not generally
57
+ associative. A pipe requires at least a ledger even with literal operands.
58
+ The hole/call-argument reference grammar is unchanged.
59
+ - **Faithful unfinished-source layers (§15.8):** `Tree.to_source()` retains
60
+ computed-key dictionaries, comprehensions with nonempty contributions,
61
+ collection programs, replacement intent, lexical scopes, and meaningful
62
+ grouping as one parseable document. It does no lookup, environment access,
63
+ call, cast, serialization, comprehension iteration, template rendering,
64
+ or runtime duplicate comparison, and leaves the source tree unchanged.
65
+ - **Slot composition preserves sequential operations.** A labeled field's
66
+ complete dictionary RHS is one override contribution, not a sequence to
67
+ apply separately to a future filler. Saving may lift sequential slot
68
+ operations into surrounding dictionary layers. Literal empty overrides
69
+ mean no operation on any filler kind; a new replacement slot still fills
70
+ normally. Kind-dependent named-slot contributions retain a discoverable,
71
+ fillable slot rather than guessing its eventual kind or final collection
72
+ position.
73
+ - The former computed-key, pending replacement-boundary, and merged-dictionary-
74
+ comprehension save refusals are lifted where explicit layers faithfully
75
+ represent their state. **A completed fill's undecided historical abstract-slot
76
+ obligation and an unattached slot remain save-time refusals.** A later edit
77
+ is not retroactive fulfillment of a prior fill's own obligation. Source
78
+ saving remains distinct from record emission and finished-data serializers.
79
+
80
+ ### Documentation
81
+
82
+ - Correct README quote-reuse guidance: a hole may use the enclosing string's
83
+ quote mark. Correct stale identifier-only-key and bare-call reservations
84
+ while retaining the narrower hole-interior postfix grammar. Extend the guide
85
+ and tutorial with typed merging, field replacement, meaningful grouping,
86
+ and save/reload continuations.
87
+
88
+ ## 0.5.3 — 2026-10-25
89
+
90
+ Built to specification **v0.5**, amended with collection construction and data
91
+ expressions. The operator-word compatibility change is noted below.
92
+
93
+ ### Compatibility
94
+
95
+ - Lowercase operator words have their expression meaning in the new value
96
+ grammar. In particular, `not(None)` is logical negation, not a call to a
97
+ declared function named `not`, as it could be in 0.5.2. Use a non-operator
98
+ declared name (the existing uppercase naming convention avoids collisions).
99
+ Ordinary keys/path segments keep these words as names; hole references
100
+ retain their separate §5.1 grammar.
101
+
102
+ ### Added
103
+
104
+ - **Collection comprehensions (§16)** for lists, dictionaries, and multimaps,
105
+ in inline and block forms. One `for` clause and one optional `if`; list
106
+ inputs bind one item, dictionary/multimap inputs bind each key/value pair.
107
+ Sources and result kinds are independent. Bindings are lexical and local;
108
+ output is fresh typed data. Computed result keys retain exact text, dictionary
109
+ duplicates are akan, and multimap repeats/order are retained.
110
+ - **Data expressions:** comparisons, membership, `is None`/`is not None`, and
111
+ short-circuit boolean `and`/`or`/`not`. Conditions accept True, False, and
112
+ None only; None counts as false. Boolean operators return booleans, not
113
+ arbitrary operands. Explicit `__bool__` casting is unchanged.
114
+ - **Postfix operations on constructed values and call results**, including
115
+ `[dialect for dialect in choices if condition][0]` and `.__get__(0)` for an
116
+ optional first result. Evaluation remains eager; selecting the first item
117
+ does not hide later comprehension errors. Safe receiver chains retain
118
+ their boundary through postfix selection and explicit grouping.
119
+ - **Nonempty inline multimaps:** `{+ key: value, key: value}` uses one leading
120
+ marker and ordinary comma-separated pairs. Empty remains `{+}`; block
121
+ entries retain their individual markers. Literal inline multimaps are records.
122
+ - Unfinished source saving preserves comprehensions and predicates without
123
+ evaluating inputs, environment references, or functions. A deferred dictionary
124
+ comprehension merged with another nonempty dictionary contribution is refused
125
+ at save time because source cannot retain both layers; empty literal layers
126
+ remain safe. In-memory dictionaries merge normally, before retained generated
127
+ value bodies resolve; lists/multimaps retain whole replacement.
128
+ - Portable conformance cases and a complete `examples/comprehensions.yap`.
129
+
130
+ ### Fixed
131
+
132
+ - A safe call on None skips its remaining arguments before evaluating them,
133
+ using the existing shared call path.
134
+
12
135
  ## 0.5.2 — 2026-10-24
13
136
 
14
137
  Built to specification **v0.5**, amended. **No breaking changes.** Adds
@@ -7,6 +7,8 @@ include CHANGELOG.md
7
7
  # specification travels for the same reason, and more so: the suite says
8
8
  # whether an implementation agrees, docs/ say what it is meant to agree with.
9
9
  recursive-include tests *.py
10
+ # Merge/source continuation acceptance uses these four unfinished documents.
11
+ recursive-include tests/fixtures/deferred-layer-case *.tmpl *.yap
10
12
  recursive-include examples *.yap
11
13
  recursive-include docs *.md
12
14
  # The conformance cases are .yap inputs and .json sidecars, not prose, and
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yapyon
3
- Version: 0.5.2
3
+ Version: 0.6.0.dev0
4
4
  Summary: Python-style typed literals with YAML-like block structure
5
5
  Author-email: Jei Blanchard <jjb@bmail.club>
6
6
  License-Expression: GPL-3.0-or-later
@@ -86,6 +86,8 @@ $ python -m yapyon expand examples/bridge.yap # a ledger in, a record out
86
86
  - [Details](https://github.com/doctorjei/yapyon/blob/main/docs/DETAILS.md) — the long-form guide: every feature, the API, and the CLI
87
87
  - [Specification](https://github.com/doctorjei/yapyon/blob/main/docs/SPEC.md) — what yapyon bytes mean (normative)
88
88
  - [Grammar](https://github.com/doctorjei/yapyon/blob/main/docs/GRAMMAR.md) — which bytes are well-formed yapyon (normative)
89
+ - [Collection comprehensions](docs/DETAILS.md#collection-comprehensions) — typed list, dictionary, and multimap construction
90
+ - [Merging values](docs/DETAILS.md#merging-values) — composition, field replacement, and unfinished-source persistence
89
91
  - [Conformance corpus](https://github.com/doctorjei/yapyon/tree/main/docs/conformance) — portable test cases for a second implementation
90
92
  - [Changelog](https://github.com/doctorjei/yapyon/blob/main/CHANGELOG.md)
91
93
 
@@ -98,12 +100,49 @@ Verbose success prints `ええやん`.
98
100
 
99
101
  A document is one of four kinds (discoverable via `yapyon.tier_of()`):
100
102
  - **record**: literals only (no resolver / resolution process)
101
- - **ledger**: splices & calls built-ins; resolves internally
102
- - **template**: incorporates external data (e.g., environment variables)
103
+ - **ledger**: splices, constructs and composes values, and calls built-ins; resolves internally
104
+ - **template**: holds slots or `yt` strings, or reads the loading process's environment
103
105
  - **assembly**: calls functions that a **contract** declares; can be assembled from multiple files
104
106
 
105
107
  Yapyon has no ambient scope nor includes and is built to be completely auditable / verifiable.
106
108
 
109
+ ## Value composition and unfinished source
110
+
111
+ The **`0.6.0.dev0` development line** adds explicit composition and faithful
112
+ saving of unfinished layers. `|` combines complete values; `:` uses ordinary
113
+ combination at a field, while `:=` replaces that field's complete value:
114
+
115
+ ```yapyon
116
+ settings:
117
+ paths: ["base", "shared"]
118
+ reset: ["old"]
119
+ |
120
+ paths: ["shared", "new", "shared"]
121
+ reset:= []
122
+ ```
123
+
124
+ Here `paths` becomes `["base", "shared", "new", "shared"]`, and `reset`
125
+ becomes `[]`. Dictionaries match unique keys recursively. Lists match whole
126
+ typed elements, and multimaps match whole key/value pairs: each equal item
127
+ keeps the larger count from either input, not the sum. Earlier positions
128
+ stay; unmatched incoming occurrences append, and matches take the complete
129
+ higher representation. `True`, `1`, and `1.0` are distinct for this comparison.
130
+ `None` yields to containers in either order; explicit `:= None` forces it.
131
+ Quoted/computed keys never become names through merging.
132
+
133
+ A pipe has the lowest value-operator precedence and associates left to right.
134
+ Grouping matters: `a | (b | c)` need not mean `a | b | c`. Block and flow
135
+ operands may mix. Pipes require at least a ledger, even with literal operands;
136
+ a replacement annotation alone can remain a record. Holes retain their
137
+ existing reference/call grammar, without pipes.
138
+
139
+ `Tree.to_source()` preserves unfinished expressions, contribution order,
140
+ replacement intent, and meaningful grouping without resolving anything.
141
+ Save the text and parse it again to continue filling slots and composing.
142
+ Historical fill obligations that still need computed-key comparisons and
143
+ unattached slots remain save-time refusals; see the
144
+ [details](docs/DETAILS.md#save-now-finish-later).
145
+
107
146
  ## Element References
108
147
 
109
148
  A hole names a value. `a.b` selects a **name key**; `a["b"]` can also select a quoted or computed key. Quoted keys never become names, even when their text looks like an identifier.
@@ -128,9 +167,11 @@ mind:
128
167
  | `{d[p]}` | the key *stored in* `p`, resolved in the y-string's own scope |
129
168
  | `{mm.k}` | every value filed under `k` in a multimap, in order, as a list |
130
169
 
131
- `{a["bar"]}` where a dot would do is a `shiran` — legal, but say `{a.bar}`.
132
- Because the enclosing string's delimiter ends it, quote a key with the other
133
- mark: `y"{a['b']}"`.
170
+ `{a["bar"]}` where a dot would do is shiran — legal, but say `{a.bar}`.
171
+ Either quote mark works inside a hole, including the enclosing string's own:
172
+ `y"{a["b"]}"` and `y"{a['b']}"` are both valid. A hole is scanned before the
173
+ string's closing delimiter is sought, following modern Python's quote-reuse
174
+ rule.
134
175
 
135
176
  ## Relative References
136
177
 
@@ -59,6 +59,8 @@ $ python -m yapyon expand examples/bridge.yap # a ledger in, a record out
59
59
  - [Details](https://github.com/doctorjei/yapyon/blob/main/docs/DETAILS.md) — the long-form guide: every feature, the API, and the CLI
60
60
  - [Specification](https://github.com/doctorjei/yapyon/blob/main/docs/SPEC.md) — what yapyon bytes mean (normative)
61
61
  - [Grammar](https://github.com/doctorjei/yapyon/blob/main/docs/GRAMMAR.md) — which bytes are well-formed yapyon (normative)
62
+ - [Collection comprehensions](docs/DETAILS.md#collection-comprehensions) — typed list, dictionary, and multimap construction
63
+ - [Merging values](docs/DETAILS.md#merging-values) — composition, field replacement, and unfinished-source persistence
62
64
  - [Conformance corpus](https://github.com/doctorjei/yapyon/tree/main/docs/conformance) — portable test cases for a second implementation
63
65
  - [Changelog](https://github.com/doctorjei/yapyon/blob/main/CHANGELOG.md)
64
66
 
@@ -71,12 +73,49 @@ Verbose success prints `ええやん`.
71
73
 
72
74
  A document is one of four kinds (discoverable via `yapyon.tier_of()`):
73
75
  - **record**: literals only (no resolver / resolution process)
74
- - **ledger**: splices & calls built-ins; resolves internally
75
- - **template**: incorporates external data (e.g., environment variables)
76
+ - **ledger**: splices, constructs and composes values, and calls built-ins; resolves internally
77
+ - **template**: holds slots or `yt` strings, or reads the loading process's environment
76
78
  - **assembly**: calls functions that a **contract** declares; can be assembled from multiple files
77
79
 
78
80
  Yapyon has no ambient scope nor includes and is built to be completely auditable / verifiable.
79
81
 
82
+ ## Value composition and unfinished source
83
+
84
+ The **`0.6.0.dev0` development line** adds explicit composition and faithful
85
+ saving of unfinished layers. `|` combines complete values; `:` uses ordinary
86
+ combination at a field, while `:=` replaces that field's complete value:
87
+
88
+ ```yapyon
89
+ settings:
90
+ paths: ["base", "shared"]
91
+ reset: ["old"]
92
+ |
93
+ paths: ["shared", "new", "shared"]
94
+ reset:= []
95
+ ```
96
+
97
+ Here `paths` becomes `["base", "shared", "new", "shared"]`, and `reset`
98
+ becomes `[]`. Dictionaries match unique keys recursively. Lists match whole
99
+ typed elements, and multimaps match whole key/value pairs: each equal item
100
+ keeps the larger count from either input, not the sum. Earlier positions
101
+ stay; unmatched incoming occurrences append, and matches take the complete
102
+ higher representation. `True`, `1`, and `1.0` are distinct for this comparison.
103
+ `None` yields to containers in either order; explicit `:= None` forces it.
104
+ Quoted/computed keys never become names through merging.
105
+
106
+ A pipe has the lowest value-operator precedence and associates left to right.
107
+ Grouping matters: `a | (b | c)` need not mean `a | b | c`. Block and flow
108
+ operands may mix. Pipes require at least a ledger, even with literal operands;
109
+ a replacement annotation alone can remain a record. Holes retain their
110
+ existing reference/call grammar, without pipes.
111
+
112
+ `Tree.to_source()` preserves unfinished expressions, contribution order,
113
+ replacement intent, and meaningful grouping without resolving anything.
114
+ Save the text and parse it again to continue filling slots and composing.
115
+ Historical fill obligations that still need computed-key comparisons and
116
+ unattached slots remain save-time refusals; see the
117
+ [details](docs/DETAILS.md#save-now-finish-later).
118
+
80
119
  ## Element References
81
120
 
82
121
  A hole names a value. `a.b` selects a **name key**; `a["b"]` can also select a quoted or computed key. Quoted keys never become names, even when their text looks like an identifier.
@@ -101,9 +140,11 @@ mind:
101
140
  | `{d[p]}` | the key *stored in* `p`, resolved in the y-string's own scope |
102
141
  | `{mm.k}` | every value filed under `k` in a multimap, in order, as a list |
103
142
 
104
- `{a["bar"]}` where a dot would do is a `shiran` — legal, but say `{a.bar}`.
105
- Because the enclosing string's delimiter ends it, quote a key with the other
106
- mark: `y"{a['b']}"`.
143
+ `{a["bar"]}` where a dot would do is shiran — legal, but say `{a.bar}`.
144
+ Either quote mark works inside a hole, including the enclosing string's own:
145
+ `y"{a["b"]}"` and `y"{a['b']}"` are both valid. A hole is scanned before the
146
+ string's closing delimiter is sought, following modern Python's quote-reuse
147
+ rule.
107
148
 
108
149
  ## Relative References
109
150