wirely 0.1.2__tar.gz → 0.1.4__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 (525) hide show
  1. {wirely-0.1.2 → wirely-0.1.4}/CHANGELOG.md +92 -1
  2. {wirely-0.1.2 → wirely-0.1.4}/MANIFEST.in +3 -2
  3. {wirely-0.1.2/wirely.egg-info → wirely-0.1.4}/PKG-INFO +55 -9
  4. {wirely-0.1.2 → wirely-0.1.4}/README.md +50 -7
  5. {wirely-0.1.2 → wirely-0.1.4}/doc/README.md +6 -2
  6. {wirely-0.1.2 → wirely-0.1.4}/doc/bytecode-format.md +464 -262
  7. wirely-0.1.4/doc/compiler-stages.md +140 -0
  8. wirely-0.1.4/doc/diagram-layout.md +163 -0
  9. wirely-0.1.4/doc/language.md +917 -0
  10. {wirely-0.1.2 → wirely-0.1.4}/doc/libraries.md +84 -64
  11. wirely-0.1.4/doc/native-python.md +544 -0
  12. {wirely-0.1.2 → wirely-0.1.4}/doc/python-style.md +2 -0
  13. wirely-0.1.4/doc/tests.md +118 -0
  14. {wirely-0.1.2 → wirely-0.1.4}/doc/value-types.md +125 -91
  15. {wirely-0.1.2 → wirely-0.1.4}/doc/wirely-style.md +11 -7
  16. {wirely-0.1.2 → wirely-0.1.4}/examples/delay.wrl +1 -1
  17. {wirely-0.1.2 → wirely-0.1.4}/examples/test.wrl +18 -22
  18. {wirely-0.1.2 → wirely-0.1.4}/pyproject.toml +20 -4
  19. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/arithmetic.wrl +4 -4
  20. wirely-0.1.4/tests/compiler/assertions.wrl +84 -0
  21. wirely-0.1.4/tests/compiler/attributes.wrl +152 -0
  22. wirely-0.1.4/tests/compiler/bindings.wrl +42 -0
  23. wirely-0.1.4/tests/compiler/bitwise.wrl +120 -0
  24. wirely-0.1.4/tests/compiler/blocks.wrl +146 -0
  25. wirely-0.1.4/tests/compiler/changed.wrl +42 -0
  26. wirely-0.1.4/tests/compiler/connection_order.wrl +73 -0
  27. wirely-0.1.4/tests/compiler/constant_expressions.wrl +79 -0
  28. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/constants.wrl +12 -12
  29. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/conversions.wrl +6 -3
  30. wirely-0.1.4/tests/compiler/durations.wrl +42 -0
  31. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/equality.wrl +6 -6
  32. wirely-0.1.4/tests/compiler/events.wrl +152 -0
  33. wirely-0.1.4/tests/compiler/knx.wrl +31 -0
  34. wirely-0.1.4/tests/compiler/length.wrl +121 -0
  35. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/library_settings.wrl +15 -15
  36. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/literals.wrl +10 -2
  37. wirely-0.1.4/tests/compiler/multi_procedures.wrl +102 -0
  38. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/namespaces.wrl +23 -0
  39. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/native_functions.wrl +2 -2
  40. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/options.wrl +2 -2
  41. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/ordering.wrl +2 -2
  42. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/parameters.wrl +38 -38
  43. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/path.wrl +3 -3
  44. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/prepared_configuration.wrl +10 -13
  45. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/runtime_limits.wrl +10 -4
  46. wirely-0.1.4/tests/compiler/static_sources.wrl +33 -0
  47. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/syntax.wrl +54 -6
  48. wirely-0.1.4/tests/compiler/time_of_day.wrl +40 -0
  49. wirely-0.1.4/tests/compiler/type_stages.wrl +28 -0
  50. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/types.wrl +66 -25
  51. wirely-0.1.4/tests/compiler/warnings.wrl +200 -0
  52. wirely-0.1.4/tests/compiler/warnings_allowed.wrl +11 -0
  53. wirely-0.1.4/tests/infra/native_extension/compiler/generated/__init__.py +11 -0
  54. wirely-0.1.4/tests/infra/native_extension/compiler/generated/_bindings.py +10 -0
  55. wirely-0.1.4/tests/infra/native_extension/compiler/generated/_contracts/__init__.py +1 -0
  56. wirely-0.1.4/tests/infra/native_extension/functions/test_library.py +18 -0
  57. wirely-0.1.4/tests/infra/native_extension/generated/__init__.py +22 -0
  58. wirely-0.1.4/tests/infra/native_extension/generated/_bindings.py +55 -0
  59. wirely-0.1.4/tests/infra/native_extension/generated/_signatures.py +28 -0
  60. wirely-0.1.4/tests/infra/native_extension/generated/enums.py +12 -0
  61. wirely-0.1.4/tests/infra/native_extension/generated/structs.py +21 -0
  62. wirely-0.1.4/tests/infra/native_extension/generated/test_library.py +108 -0
  63. wirely-0.1.4/tests/infra/native_extension/library.wrl +12 -0
  64. wirely-0.1.4/tests/infra/native_extension/native/__init__.py +0 -0
  65. wirely-0.1.4/tests/infra/native_extension/native/test_library.py +9 -0
  66. wirely-0.1.4/tests/infra/runner/__init__.py +1 -0
  67. wirely-0.1.4/tests/infra/runner/__main__.py +83 -0
  68. wirely-0.1.4/tests/infra/runner/diagnostics.py +170 -0
  69. wirely-0.1.4/tests/infra/runner/execution.py +195 -0
  70. wirely-0.1.4/tests/infra/runner/parallel.py +222 -0
  71. wirely-0.1.4/tests/infra/runner/registry.py +181 -0
  72. wirely-0.1.4/tests/infra/runner/services.py +242 -0
  73. wirely-0.1.4/tests/infra/support.py +134 -0
  74. wirely-0.1.4/tests/misc/grammar.py +10 -0
  75. wirely-0.1.4/tests/misc/type_check.py +9 -0
  76. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/arithmetic.wrl +19 -19
  77. wirely-0.1.4/tests/negative/assertions.wrl +215 -0
  78. wirely-0.1.4/tests/negative/attributes.wrl +358 -0
  79. wirely-0.1.4/tests/negative/bindings.wrl +105 -0
  80. wirely-0.1.4/tests/negative/bitwise.wrl +135 -0
  81. wirely-0.1.4/tests/negative/blocks.wrl +296 -0
  82. wirely-0.1.4/tests/negative/changed.wrl +95 -0
  83. wirely-0.1.4/tests/negative/connections.wrl +234 -0
  84. wirely-0.1.4/tests/negative/constant_expressions.wrl +84 -0
  85. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/constants.wrl +55 -44
  86. wirely-0.1.4/tests/negative/conversions.wrl +57 -0
  87. wirely-0.1.4/tests/negative/durations.wrl +45 -0
  88. wirely-0.1.4/tests/negative/enum_declarations.wrl +285 -0
  89. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/enum_literals.wrl +7 -7
  90. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/integer_literals.wrl +19 -1
  91. wirely-0.1.4/tests/negative/length.wrl +156 -0
  92. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/library_settings.wrl +20 -20
  93. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/monotonic_time.wrl +13 -14
  94. wirely-0.1.4/tests/negative/multi_procedures.wrl +184 -0
  95. wirely-0.1.4/tests/negative/native_functions.wrl +118 -0
  96. wirely-0.1.4/tests/negative/native_initializers.wrl +149 -0
  97. wirely-0.1.4/tests/negative/native_procedures.wrl +50 -0
  98. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/native_values.wrl +13 -13
  99. wirely-0.1.4/tests/negative/node_declarations.wrl +177 -0
  100. wirely-0.1.4/tests/negative/node_types.wrl +51 -0
  101. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/option_literals.wrl +4 -3
  102. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/option_properties.wrl +23 -22
  103. wirely-0.1.4/tests/negative/optional_forwarding.wrl +93 -0
  104. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/optional_outputs.wrl +18 -11
  105. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/options.wrl +20 -15
  106. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/parameters.wrl +8 -6
  107. wirely-0.1.4/tests/negative/path.wrl +19 -0
  108. wirely-0.1.4/tests/negative/prepared_configuration.wrl +121 -0
  109. wirely-0.1.4/tests/negative/procedure_ports.wrl +575 -0
  110. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/procedures.wrl +99 -68
  111. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/resource_connections.wrl +14 -15
  112. wirely-0.1.4/tests/negative/resource_declarations.wrl +252 -0
  113. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/resource_value_types.wrl +6 -6
  114. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/runtime_limits.wrl +10 -9
  115. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/runtime_types.wrl +10 -10
  116. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/state_connections.wrl +35 -10
  117. wirely-0.1.4/tests/negative/string_literals.wrl +131 -0
  118. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/structs.wrl +105 -38
  119. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/syntax_lists.wrl +1 -1
  120. wirely-0.1.4/tests/negative/time_of_day.wrl +22 -0
  121. wirely-0.1.4/tests/negative/type_comparisons.wrl +121 -0
  122. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/weak_keywords.wrl +2 -2
  123. wirely-0.1.4/tests/repo/bytecode_format.py +20 -0
  124. wirely-0.1.4/tests/repo/files.py +30 -0
  125. wirely-0.1.4/tests/repo/native_types.py +22 -0
  126. wirely-0.1.4/tests/unit/analysis.py +234 -0
  127. wirely-0.1.4/tests/unit/compiler_api.py +301 -0
  128. wirely-0.1.4/tests/unit/compiler_warnings.py +99 -0
  129. {wirely-0.1.2/test → wirely-0.1.4/tests}/unit/container.py +6 -2
  130. {wirely-0.1.2/test → wirely-0.1.4/tests}/unit/control.py +3 -3
  131. wirely-0.1.4/tests/unit/control.wrl +13 -0
  132. wirely-0.1.4/tests/unit/csv.py +97 -0
  133. wirely-0.1.4/tests/unit/editing.py +617 -0
  134. wirely-0.1.4/tests/unit/editor.py +256 -0
  135. wirely-0.1.4/tests/unit/editor_cache.py +110 -0
  136. wirely-0.1.4/tests/unit/editor_export.py +56 -0
  137. wirely-0.1.4/tests/unit/editor_widgets.py +525 -0
  138. wirely-0.1.4/tests/unit/editor_workspace.py +348 -0
  139. wirely-0.1.4/tests/unit/engine_wakeup.py +101 -0
  140. wirely-0.1.4/tests/unit/engine_wakeup.wrl +4 -0
  141. wirely-0.1.4/tests/unit/format_records.py +102 -0
  142. {wirely-0.1.2/test → wirely-0.1.4/tests}/unit/instructions.py +126 -53
  143. wirely-0.1.4/tests/unit/library_configuration.py +579 -0
  144. wirely-0.1.4/tests/unit/monotonic_timestamp.py +82 -0
  145. wirely-0.1.4/tests/unit/native_contracts.py +277 -0
  146. wirely-0.1.4/tests/unit/native_extensions.py +253 -0
  147. wirely-0.1.4/tests/unit/native_interface.py +1378 -0
  148. wirely-0.1.4/tests/unit/native_values.py +337 -0
  149. {wirely-0.1.2/test → wirely-0.1.4/tests}/unit/negative_cases.py +117 -23
  150. wirely-0.1.4/tests/unit/outline.py +136 -0
  151. {wirely-0.1.2/test → wirely-0.1.4/tests}/unit/procedures.py +292 -61
  152. {wirely-0.1.2/test → wirely-0.1.4/tests}/unit/procedures.wrl +215 -52
  153. wirely-0.1.4/tests/unit/resources.py +409 -0
  154. wirely-0.1.4/tests/unit/runtime_program.py +351 -0
  155. {wirely-0.1.2/test → wirely-0.1.4/tests}/unit/serialization.py +79 -54
  156. {wirely-0.1.2/test → wirely-0.1.4/tests}/unit/state_connections.py +204 -96
  157. wirely-0.1.4/tests/unit/static_sources.py +41 -0
  158. wirely-0.1.4/tests/unit/static_sources.wrl +36 -0
  159. {wirely-0.1.2/test → wirely-0.1.4/tests}/unit/test_resources.py +32 -29
  160. wirely-0.1.4/tests/unit/types.py +673 -0
  161. wirely-0.1.4/tests/unit/wall_clock.py +531 -0
  162. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/abb.py +16 -4
  163. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/and.py +4 -0
  164. wirely-0.1.4/tests/wrl/bitwise.py +51 -0
  165. wirely-0.1.4/tests/wrl/bitwise.wrl +107 -0
  166. wirely-0.1.4/tests/wrl/changed.py +46 -0
  167. wirely-0.1.4/tests/wrl/changed.wrl +52 -0
  168. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/csv.py +125 -32
  169. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/delay.py +4 -0
  170. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/delay.wrl +5 -5
  171. {wirely-0.1.2/test/unit → wirely-0.1.4/tests/wrl}/equality.py +27 -22
  172. {wirely-0.1.2/test/unit → wirely-0.1.4/tests/wrl}/equality.wrl +21 -20
  173. wirely-0.1.4/tests/wrl/event_bindings.py +46 -0
  174. wirely-0.1.4/tests/wrl/event_bindings.wrl +82 -0
  175. wirely-0.1.4/tests/wrl/events.py +44 -0
  176. wirely-0.1.4/tests/wrl/events.wrl +116 -0
  177. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/flipflop.py +22 -23
  178. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/gpio.py +1 -4
  179. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/knx.py +112 -7
  180. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/knx.wrl +110 -0
  181. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/knx_time.py +3 -4
  182. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/knx_time.wrl +1 -1
  183. wirely-0.1.4/tests/wrl/length.py +19 -0
  184. wirely-0.1.4/tests/wrl/length.wrl +50 -0
  185. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/mqtt.py +6 -8
  186. wirely-0.1.4/tests/wrl/multi_forward.py +17 -0
  187. wirely-0.1.4/tests/wrl/multi_forward.wrl +34 -0
  188. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/option.py +25 -3
  189. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/option.wrl +17 -0
  190. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/process.py +1 -2
  191. wirely-0.1.4/tests/wrl/std.py +91 -0
  192. wirely-0.1.4/tests/wrl/std.wrl +34 -0
  193. wirely-0.1.4/tests/wrl/time.py +447 -0
  194. wirely-0.1.4/tests/wrl/time.wrl +35 -0
  195. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/two_n.py +14 -14
  196. wirely-0.1.4/tools/generate-native-types +75 -0
  197. wirely-0.1.4/tools/run-tests +46 -0
  198. {wirely-0.1.2 → wirely-0.1.4}/tools/run-tests-dependencies +10 -2
  199. {wirely-0.1.2 → wirely-0.1.4}/wirely/__init__.py +2 -2
  200. {wirely-0.1.2 → wirely-0.1.4}/wirely/__main__.py +14 -1
  201. wirely-0.1.4/wirely/cli/__init__.py +0 -0
  202. {wirely-0.1.2 → wirely-0.1.4}/wirely/cli/client.py +23 -20
  203. wirely-0.1.4/wirely/cli/compile_command.py +57 -0
  204. wirely-0.1.4/wirely/cli/edit.py +13 -0
  205. wirely-0.1.4/wirely/cli/export_image.py +38 -0
  206. {wirely-0.1.2 → wirely-0.1.4}/wirely/cli/graphviz.py +28 -28
  207. {wirely-0.1.2 → wirely-0.1.4}/wirely/cli/objdump.py +4 -3
  208. {wirely-0.1.2 → wirely-0.1.4}/wirely/cli/run.py +33 -31
  209. {wirely-0.1.2 → wirely-0.1.4}/wirely/cli/service.py +8 -7
  210. wirely-0.1.4/wirely/compiler/__init__.py +166 -0
  211. wirely-0.1.4/wirely/compiler/analysis.py +438 -0
  212. wirely-0.1.4/wirely/compiler/ast/__init__.py +100 -0
  213. wirely-0.1.4/wirely/compiler/ast/base.py +193 -0
  214. wirely-0.1.4/wirely/compiler/ast/functions.py +97 -0
  215. wirely-0.1.4/wirely/compiler/ast/library.py +96 -0
  216. wirely-0.1.4/wirely/compiler/ast/node_types.py +71 -0
  217. wirely-0.1.4/wirely/compiler/ast/nodes.py +351 -0
  218. wirely-0.1.4/wirely/compiler/ast/parameter_declarations.py +72 -0
  219. wirely-0.1.4/wirely/compiler/ast/ports.py +109 -0
  220. wirely-0.1.4/wirely/compiler/ast/procedures.py +531 -0
  221. wirely-0.1.4/wirely/compiler/ast/scope.py +262 -0
  222. wirely-0.1.4/wirely/compiler/ast/specifiers.py +102 -0
  223. wirely-0.1.4/wirely/compiler/ast/type_declarations.py +256 -0
  224. wirely-0.1.4/wirely/compiler/ast/values.py +396 -0
  225. wirely-0.1.4/wirely/compiler/attributes.py +390 -0
  226. wirely-0.1.4/wirely/compiler/coordinator.py +190 -0
  227. wirely-0.1.4/wirely/compiler/diagnostics.py +164 -0
  228. wirely-0.1.4/wirely/compiler/editing.py +1258 -0
  229. wirely-0.1.4/wirely/compiler/expressions.py +1881 -0
  230. wirely-0.1.4/wirely/compiler/extensions.py +42 -0
  231. wirely-0.1.4/wirely/compiler/function_implementations/csv.py +11 -0
  232. wirely-0.1.4/wirely/compiler/function_implementations/knx.py +27 -0
  233. {wirely-0.1.2 → wirely-0.1.4}/wirely/compiler/function_implementations/mqtt.py +15 -9
  234. wirely-0.1.4/wirely/compiler/function_implementations/path.py +22 -0
  235. wirely-0.1.4/wirely/compiler/function_implementations/schedule.py +7 -0
  236. wirely-0.1.4/wirely/compiler/function_implementations/std.py +49 -0
  237. wirely-0.1.4/wirely/compiler/function_implementations/test.py +70 -0
  238. {wirely-0.1.2 → wirely-0.1.4}/wirely/compiler/function_implementations/two_n.py +10 -8
  239. wirely-0.1.4/wirely/compiler/generated/__init__.py +30 -0
  240. wirely-0.1.4/wirely/compiler/generated/_bindings.py +143 -0
  241. wirely-0.1.4/wirely/compiler/generated/_contracts/__init__.py +1 -0
  242. wirely-0.1.4/wirely/compiler/generated/_contracts/csv.py +41 -0
  243. wirely-0.1.4/wirely/compiler/generated/_contracts/knx.py +98 -0
  244. wirely-0.1.4/wirely/compiler/generated/_contracts/mqtt.py +71 -0
  245. wirely-0.1.4/wirely/compiler/generated/_contracts/path.py +96 -0
  246. wirely-0.1.4/wirely/compiler/generated/_contracts/schedule.py +45 -0
  247. wirely-0.1.4/wirely/compiler/generated/_contracts/std.py +44 -0
  248. wirely-0.1.4/wirely/compiler/generated/_contracts/test.py +181 -0
  249. wirely-0.1.4/wirely/compiler/generated/_contracts/two_n.py +69 -0
  250. wirely-0.1.4/wirely/compiler/graph.py +392 -0
  251. wirely-0.1.4/wirely/compiler/instance.py +649 -0
  252. wirely-0.1.4/wirely/compiler/model.py +260 -0
  253. wirely-0.1.4/wirely/compiler/native_contracts.py +1125 -0
  254. wirely-0.1.4/wirely/compiler/native_functions.py +246 -0
  255. wirely-0.1.4/wirely/compiler/native_signatures.py +189 -0
  256. wirely-0.1.4/wirely/compiler/node_type.py +417 -0
  257. wirely-0.1.4/wirely/compiler/outline.py +721 -0
  258. wirely-0.1.4/wirely/compiler/parameters.py +176 -0
  259. {wirely-0.1.2 → wirely-0.1.4}/wirely/compiler/parser.py +134 -93
  260. wirely-0.1.4/wirely/compiler/program.py +615 -0
  261. wirely-0.1.4/wirely/compiler/shuffle.py +127 -0
  262. wirely-0.1.4/wirely/compiler/sources.py +188 -0
  263. wirely-0.1.4/wirely/compiler/stages.py +10 -0
  264. wirely-0.1.4/wirely/compiler/static_bindings.py +29 -0
  265. wirely-0.1.4/wirely/compiler/support.py +433 -0
  266. wirely-0.1.4/wirely/compiler/types.py +249 -0
  267. wirely-0.1.4/wirely/compiler/value.py +341 -0
  268. wirely-0.1.4/wirely/compiler/wirely.lark +330 -0
  269. wirely-0.1.4/wirely/control/__init__.py +0 -0
  270. {wirely-0.1.2 → wirely-0.1.4}/wirely/control/client.py +17 -11
  271. {wirely-0.1.2 → wirely-0.1.4}/wirely/control/controller.py +17 -12
  272. {wirely-0.1.2 → wirely-0.1.4}/wirely/control/framing.py +10 -8
  273. {wirely-0.1.2 → wirely-0.1.4}/wirely/control/messages.py +10 -9
  274. {wirely-0.1.2 → wirely-0.1.4}/wirely/control/server.py +43 -29
  275. wirely-0.1.4/wirely/editor/__init__.py +5 -0
  276. wirely-0.1.4/wirely/editor/app.py +656 -0
  277. wirely-0.1.4/wirely/editor/export.py +82 -0
  278. wirely-0.1.4/wirely/editor/graph_model.py +398 -0
  279. wirely-0.1.4/wirely/editor/graph_view.py +908 -0
  280. wirely-0.1.4/wirely/editor/grid.py +20 -0
  281. wirely-0.1.4/wirely/editor/layout.py +205 -0
  282. wirely-0.1.4/wirely/editor/palette.py +133 -0
  283. wirely-0.1.4/wirely/editor/program.py +220 -0
  284. wirely-0.1.4/wirely/editor/properties.py +114 -0
  285. wirely-0.1.4/wirely/editor/sync.py +224 -0
  286. wirely-0.1.4/wirely/editor/text_view.py +318 -0
  287. wirely-0.1.4/wirely/editor/workspace.py +450 -0
  288. wirely-0.1.4/wirely/functions/__init__.py +38 -0
  289. wirely-0.1.4/wirely/functions/schedule_time_of_day.py +33 -0
  290. wirely-0.1.4/wirely/functions/std_duration.py +100 -0
  291. wirely-0.1.4/wirely/functions/timer_monotonic_time.py +54 -0
  292. wirely-0.1.4/wirely/generated/__init__.py +22 -0
  293. wirely-0.1.4/wirely/generated/_bindings.py +809 -0
  294. wirely-0.1.4/wirely/generated/_signatures.py +537 -0
  295. wirely-0.1.4/wirely/generated/csv.py +127 -0
  296. wirely-0.1.4/wirely/generated/enums.py +57 -0
  297. wirely-0.1.4/wirely/generated/gpio.py +122 -0
  298. wirely-0.1.4/wirely/generated/knx.py +482 -0
  299. wirely-0.1.4/wirely/generated/mqtt.py +372 -0
  300. wirely-0.1.4/wirely/generated/process.py +118 -0
  301. wirely-0.1.4/wirely/generated/schedule.py +124 -0
  302. wirely-0.1.4/wirely/generated/schedule_time_of_day.py +81 -0
  303. wirely-0.1.4/wirely/generated/std.py +369 -0
  304. wirely-0.1.4/wirely/generated/std_duration.py +266 -0
  305. wirely-0.1.4/wirely/generated/structs.py +65 -0
  306. wirely-0.1.4/wirely/generated/timer.py +127 -0
  307. wirely-0.1.4/wirely/generated/timer_monotonic_time.py +114 -0
  308. wirely-0.1.4/wirely/generated/two_n.py +547 -0
  309. wirely-0.1.4/wirely/knx/__init__.py +0 -0
  310. wirely-0.1.4/wirely/knx/address.py +34 -0
  311. {wirely-0.1.2 → wirely-0.1.4}/wirely/knx/connection_adapter.py +15 -8
  312. {wirely-0.1.2 → wirely-0.1.4}/wirely/knx/connection_config.py +16 -13
  313. wirely-0.1.4/wirely/knx/value_types.py +53 -0
  314. wirely-0.1.4/wirely/lib/abb_jra.wrl +94 -0
  315. wirely-0.1.4/wirely/lib/csv.wrl +46 -0
  316. {wirely-0.1.2 → wirely-0.1.4}/wirely/lib/gpio.wrl +14 -7
  317. {wirely-0.1.2 → wirely-0.1.4}/wirely/lib/knx.wrl +69 -35
  318. {wirely-0.1.2 → wirely-0.1.4}/wirely/lib/matter.wrl +1 -1
  319. wirely-0.1.4/wirely/lib/memory.wrl +80 -0
  320. wirely-0.1.4/wirely/lib/mqtt.wrl +132 -0
  321. wirely-0.1.4/wirely/lib/path.wrl +5 -0
  322. wirely-0.1.4/wirely/lib/process.wrl +20 -0
  323. wirely-0.1.4/wirely/lib/schedule.wrl +123 -0
  324. wirely-0.1.4/wirely/lib/std.wrl +245 -0
  325. wirely-0.1.4/wirely/lib/test.wrl +8 -0
  326. wirely-0.1.4/wirely/lib/timer.wrl +141 -0
  327. wirely-0.1.4/wirely/lib/two_n.wrl +196 -0
  328. wirely-0.1.4/wirely/misc/__init__.py +0 -0
  329. {wirely-0.1.2 → wirely-0.1.4}/wirely/misc/service.py +5 -3
  330. {wirely-0.1.2 → wirely-0.1.4}/wirely/misc/state_directory.py +3 -2
  331. wirely-0.1.4/wirely/native/__init__.py +11 -0
  332. wirely-0.1.4/wirely/native/csv.py +161 -0
  333. wirely-0.1.4/wirely/native/gpio.py +97 -0
  334. wirely-0.1.4/wirely/native/knx.py +359 -0
  335. {wirely-0.1.2 → wirely-0.1.4}/wirely/native/mqtt.py +173 -151
  336. wirely-0.1.4/wirely/native/process.py +63 -0
  337. wirely-0.1.4/wirely/native/schedule.py +61 -0
  338. wirely-0.1.4/wirely/native/std.py +160 -0
  339. wirely-0.1.4/wirely/native/timer.py +45 -0
  340. wirely-0.1.4/wirely/native/two_n.py +376 -0
  341. {wirely-0.1.2 → wirely-0.1.4}/wirely/program/__init__.py +3 -2
  342. {wirely-0.1.2 → wirely-0.1.4}/wirely/program/container.py +25 -20
  343. wirely-0.1.4/wirely/program/format.wrl +478 -0
  344. wirely-0.1.4/wirely/program/generated/__init__.py +1 -0
  345. wirely-0.1.4/wirely/program/generated/format.py +722 -0
  346. {wirely-0.1.2 → wirely-0.1.4}/wirely/program/procedures.py +11 -10
  347. wirely-0.1.4/wirely/program/program.py +404 -0
  348. wirely-0.1.4/wirely/program/records.py +52 -0
  349. {wirely-0.1.2 → wirely-0.1.4}/wirely/program/validation.py +115 -34
  350. wirely-0.1.4/wirely/runtime/contexts.py +80 -0
  351. wirely-0.1.4/wirely/runtime/engine.py +485 -0
  352. wirely-0.1.4/wirely/runtime/extensions.py +98 -0
  353. wirely-0.1.4/wirely/runtime/linking.py +243 -0
  354. wirely-0.1.4/wirely/runtime/native_api.py +393 -0
  355. wirely-0.1.4/wirely/runtime/native_values.py +140 -0
  356. {wirely-0.1.2 → wirely-0.1.4}/wirely/runtime/procedures.py +33 -33
  357. wirely-0.1.4/wirely/runtime/resources.py +24 -0
  358. wirely-0.1.4/wirely/runtime/signatures.py +186 -0
  359. {wirely-0.1.2 → wirely-0.1.4}/wirely/runtime/time_snapshot.py +2 -2
  360. wirely-0.1.4/wirely/runtime/wall_clock.py +176 -0
  361. wirely-0.1.4/wirely/two_n/__init__.py +0 -0
  362. {wirely-0.1.2 → wirely-0.1.4}/wirely/two_n/cert.py +10 -5
  363. {wirely-0.1.2 → wirely-0.1.4}/wirely/two_n/client.py +43 -31
  364. {wirely-0.1.2 → wirely-0.1.4}/wirely/two_n/fake_server.py +37 -33
  365. {wirely-0.1.2 → wirely-0.1.4}/wirely/two_n/grab_images.py +3 -2
  366. wirely-0.1.4/wirely/types/__init__.py +870 -0
  367. wirely-0.1.4/wirely/types/integers.py +125 -0
  368. {wirely-0.1.2 → wirely-0.1.4}/wirely/types/option.py +5 -2
  369. {wirely-0.1.2 → wirely-0.1.4}/wirely/types/serialization.py +33 -50
  370. wirely-0.1.4/wirely/types/time.py +316 -0
  371. wirely-0.1.4/wirely/types/value_types.py +265 -0
  372. wirely-0.1.4/wirely/util.py +40 -0
  373. {wirely-0.1.2 → wirely-0.1.4/wirely.egg-info}/PKG-INFO +55 -9
  374. wirely-0.1.4/wirely.egg-info/SOURCES.txt +409 -0
  375. {wirely-0.1.2 → wirely-0.1.4}/wirely.egg-info/requires.txt +5 -1
  376. wirely-0.1.2/doc/language.md +0 -569
  377. wirely-0.1.2/doc/native-python.md +0 -326
  378. wirely-0.1.2/test/compiler/assertions.wrl +0 -37
  379. wirely-0.1.2/test/compiler/attributes.wrl +0 -97
  380. wirely-0.1.2/test/compiler/durations.wrl +0 -38
  381. wirely-0.1.2/test/compiler/time_of_day.wrl +0 -35
  382. wirely-0.1.2/test/negative/assertions.wrl +0 -110
  383. wirely-0.1.2/test/negative/attributes.wrl +0 -211
  384. wirely-0.1.2/test/negative/connections.wrl +0 -119
  385. wirely-0.1.2/test/negative/conversions.wrl +0 -43
  386. wirely-0.1.2/test/negative/durations.wrl +0 -45
  387. wirely-0.1.2/test/negative/enum_declarations.wrl +0 -235
  388. wirely-0.1.2/test/negative/native_functions.wrl +0 -97
  389. wirely-0.1.2/test/negative/native_initializers.wrl +0 -74
  390. wirely-0.1.2/test/negative/native_procedures.wrl +0 -23
  391. wirely-0.1.2/test/negative/node_declarations.wrl +0 -47
  392. wirely-0.1.2/test/negative/node_types.wrl +0 -34
  393. wirely-0.1.2/test/negative/optional_forwarding.wrl +0 -121
  394. wirely-0.1.2/test/negative/path.wrl +0 -46
  395. wirely-0.1.2/test/negative/prepared_configuration.wrl +0 -61
  396. wirely-0.1.2/test/negative/procedure_bindings.wrl +0 -112
  397. wirely-0.1.2/test/negative/resource_declarations.wrl +0 -102
  398. wirely-0.1.2/test/negative/string_literals.wrl +0 -131
  399. wirely-0.1.2/test/negative/time_of_day.wrl +0 -25
  400. wirely-0.1.2/test/negative/type_comparisons.wrl +0 -163
  401. wirely-0.1.2/test/unit/attribute_editing.py +0 -151
  402. wirely-0.1.2/test/unit/attribute_editing.wrl +0 -1
  403. wirely-0.1.2/test/unit/container.wrl +0 -1
  404. wirely-0.1.2/test/unit/control.wrl +0 -4
  405. wirely-0.1.2/test/unit/instructions.wrl +0 -1
  406. wirely-0.1.2/test/unit/library_configuration.py +0 -216
  407. wirely-0.1.2/test/unit/library_configuration.wrl +0 -1
  408. wirely-0.1.2/test/unit/native_interface.py +0 -778
  409. wirely-0.1.2/test/unit/native_interface.wrl +0 -1
  410. wirely-0.1.2/test/unit/native_values.py +0 -193
  411. wirely-0.1.2/test/unit/negative_cases.wrl +0 -1
  412. wirely-0.1.2/test/unit/resources.py +0 -219
  413. wirely-0.1.2/test/unit/resources.wrl +0 -1
  414. wirely-0.1.2/test/unit/runtime_program.py +0 -129
  415. wirely-0.1.2/test/unit/runtime_program.wrl +0 -20
  416. wirely-0.1.2/test/unit/serialization.wrl +0 -1
  417. wirely-0.1.2/test/unit/shuffle.py +0 -110
  418. wirely-0.1.2/test/unit/shuffle.wrl +0 -1
  419. wirely-0.1.2/test/unit/state_connections.wrl +0 -1
  420. wirely-0.1.2/test/unit/test_resources.wrl +0 -1
  421. wirely-0.1.2/test/unit/types.py +0 -390
  422. wirely-0.1.2/test/unit/types.wrl +0 -1
  423. wirely-0.1.2/test/wrl/std.py +0 -51
  424. wirely-0.1.2/test/wrl/std.wrl +0 -10
  425. wirely-0.1.2/test/wrl/time.py +0 -344
  426. wirely-0.1.2/test/wrl/time.wrl +0 -24
  427. wirely-0.1.2/tools/run-tests +0 -78
  428. wirely-0.1.2/wirely/cli/compile_command.py +0 -31
  429. wirely-0.1.2/wirely/compiler/__init__.py +0 -136
  430. wirely-0.1.2/wirely/compiler/ast.py +0 -1960
  431. wirely-0.1.2/wirely/compiler/attribute_editing.py +0 -305
  432. wirely-0.1.2/wirely/compiler/attributes.py +0 -209
  433. wirely-0.1.2/wirely/compiler/block.py +0 -563
  434. wirely-0.1.2/wirely/compiler/block_type.py +0 -347
  435. wirely-0.1.2/wirely/compiler/blocks.lark +0 -257
  436. wirely-0.1.2/wirely/compiler/diagnostics.py +0 -59
  437. wirely-0.1.2/wirely/compiler/expressions.py +0 -1094
  438. wirely-0.1.2/wirely/compiler/function_implementations/csv.py +0 -5
  439. wirely-0.1.2/wirely/compiler/function_implementations/knx.py +0 -32
  440. wirely-0.1.2/wirely/compiler/function_implementations/path.py +0 -19
  441. wirely-0.1.2/wirely/compiler/function_implementations/test.py +0 -66
  442. wirely-0.1.2/wirely/compiler/function_implementations/time.py +0 -2
  443. wirely-0.1.2/wirely/compiler/model.py +0 -107
  444. wirely-0.1.2/wirely/compiler/native_functions.py +0 -184
  445. wirely-0.1.2/wirely/compiler/node.py +0 -167
  446. wirely-0.1.2/wirely/compiler/parameters.py +0 -102
  447. wirely-0.1.2/wirely/compiler/program.py +0 -378
  448. wirely-0.1.2/wirely/compiler/shuffle.py +0 -73
  449. wirely-0.1.2/wirely/compiler/static_bindings.py +0 -24
  450. wirely-0.1.2/wirely/compiler/support.py +0 -283
  451. wirely-0.1.2/wirely/compiler/types.py +0 -246
  452. wirely-0.1.2/wirely/compiler/value.py +0 -276
  453. wirely-0.1.2/wirely/functions/__init__.py +0 -80
  454. wirely-0.1.2/wirely/functions/duration.py +0 -112
  455. wirely-0.1.2/wirely/functions/monotonic_time.py +0 -65
  456. wirely-0.1.2/wirely/functions/test_library.py +0 -23
  457. wirely-0.1.2/wirely/functions/time_of_day.py +0 -34
  458. wirely-0.1.2/wirely/lib/abb_jra.wrl +0 -71
  459. wirely-0.1.2/wirely/lib/csv.wrl +0 -42
  460. wirely-0.1.2/wirely/lib/memory.wrl +0 -47
  461. wirely-0.1.2/wirely/lib/mqtt.wrl +0 -108
  462. wirely-0.1.2/wirely/lib/path.wrl +0 -5
  463. wirely-0.1.2/wirely/lib/process.wrl +0 -13
  464. wirely-0.1.2/wirely/lib/std.wrl +0 -199
  465. wirely-0.1.2/wirely/lib/test.wrl +0 -8
  466. wirely-0.1.2/wirely/lib/time.wrl +0 -122
  467. wirely-0.1.2/wirely/lib/two_n.wrl +0 -142
  468. wirely-0.1.2/wirely/native/__init__.py +0 -45
  469. wirely-0.1.2/wirely/native/abb_jra.py +0 -58
  470. wirely-0.1.2/wirely/native/csv.py +0 -152
  471. wirely-0.1.2/wirely/native/gpio.py +0 -74
  472. wirely-0.1.2/wirely/native/knx.py +0 -314
  473. wirely-0.1.2/wirely/native/memory.py +0 -58
  474. wirely-0.1.2/wirely/native/process.py +0 -53
  475. wirely-0.1.2/wirely/native/std.py +0 -221
  476. wirely-0.1.2/wirely/native/test_library.py +0 -13
  477. wirely-0.1.2/wirely/native/time.py +0 -253
  478. wirely-0.1.2/wirely/native/two_n.py +0 -400
  479. wirely-0.1.2/wirely/program/program.py +0 -280
  480. wirely-0.1.2/wirely/runtime/contexts.py +0 -213
  481. wirely-0.1.2/wirely/runtime/engine.py +0 -317
  482. wirely-0.1.2/wirely/runtime/linking.py +0 -81
  483. wirely-0.1.2/wirely/test.py +0 -646
  484. wirely-0.1.2/wirely/types/__init__.py +0 -682
  485. wirely-0.1.2/wirely/types/struct.py +0 -35
  486. wirely-0.1.2/wirely/types/time.py +0 -237
  487. wirely-0.1.2/wirely/types/value_types.py +0 -133
  488. wirely-0.1.2/wirely/util.py +0 -111
  489. wirely-0.1.2/wirely.egg-info/SOURCES.txt +0 -263
  490. {wirely-0.1.2 → wirely-0.1.4}/LICENSE +0 -0
  491. {wirely-0.1.2 → wirely-0.1.4}/doc/control-protocol.md +0 -0
  492. {wirely-0.1.2 → wirely-0.1.4}/examples/flipflop.wrl +0 -0
  493. {wirely-0.1.2 → wirely-0.1.4}/examples/gpio.wrl +0 -0
  494. {wirely-0.1.2 → wirely-0.1.4}/examples/knx.wrl +0 -0
  495. {wirely-0.1.2 → wirely-0.1.4}/setup.cfg +0 -0
  496. {wirely-0.1.2/wirely/cli → wirely-0.1.4/tests}/__init__.py +0 -0
  497. {wirely-0.1.2/test/wrl → wirely-0.1.4/tests/compiler}/simple.wrl +0 -0
  498. {wirely-0.1.2/test → wirely-0.1.4/tests}/compiler/structs.wrl +0 -0
  499. {wirely-0.1.2/wirely/control → wirely-0.1.4/tests/infra}/__init__.py +0 -0
  500. {wirely-0.1.2/wirely/knx → wirely-0.1.4/tests/infra/native_extension}/__init__.py +0 -0
  501. {wirely-0.1.2/wirely/misc → wirely-0.1.4/tests/infra/native_extension/compiler}/__init__.py +0 -0
  502. {wirely-0.1.2/wirely/two_n → wirely-0.1.4/tests/infra/native_extension/functions}/__init__.py +0 -0
  503. {wirely-0.1.2/test → wirely-0.1.4/tests}/negative/unit_literals.wrl +0 -0
  504. {wirely-0.1.2/test → wirely-0.1.4/tests}/unit/native_values.wrl +0 -0
  505. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/abb.wrl +0 -0
  506. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/and.wrl +0 -0
  507. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/csv.wrl +0 -0
  508. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/flipflop.wrl +0 -0
  509. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/gpio.wrl +0 -0
  510. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/mqtt.wrl +0 -0
  511. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/process.wrl +0 -0
  512. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/two_n.wrl +0 -0
  513. {wirely-0.1.2/test → wirely-0.1.4/tests}/wrl/username_password.txt +0 -0
  514. {wirely-0.1.2 → wirely-0.1.4}/tools/build-pex +0 -0
  515. {wirely-0.1.2 → wirely-0.1.4}/tools/git_write_wd_tree.py +0 -0
  516. {wirely-0.1.2 → wirely-0.1.4}/tools/setup-venv +0 -0
  517. {wirely-0.1.2 → wirely-0.1.4}/tools/test-gitlab-ci +0 -0
  518. {wirely-0.1.2 → wirely-0.1.4}/tools/wirely +0 -0
  519. {wirely-0.1.2 → wirely-0.1.4}/wirely/compiler/function_implementations/__init__.py +0 -0
  520. {wirely-0.1.2 → wirely-0.1.4}/wirely/program/limits.py +0 -0
  521. {wirely-0.1.2 → wirely-0.1.4}/wirely/runtime/__init__.py +0 -0
  522. {wirely-0.1.2 → wirely-0.1.4}/wirely/types/unit.py +0 -0
  523. {wirely-0.1.2 → wirely-0.1.4}/wirely.egg-info/dependency_links.txt +0 -0
  524. {wirely-0.1.2 → wirely-0.1.4}/wirely.egg-info/entry_points.txt +0 -0
  525. {wirely-0.1.2 → wirely-0.1.4}/wirely.egg-info/top_level.txt +0 -0
@@ -1,5 +1,96 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.1.4 - 2026-10-24
4
+
5
+ ### Breaking changes and migration
6
+
7
+ #### Optional parameters
8
+
9
+ Replace `parameter_option(x)` with `optional(x)`.
10
+
11
+ #### Type names
12
+
13
+ Replace `String` with `string` and `ValueType` with `type`.
14
+ Replace `Duration`, `TimeOfDay`, and `MonotonicTime` with `Std.Duration`,
15
+ `Schedule.TimeOfDay`, and `Timer.MonotonicTime`, respectively, including
16
+ in qualified function calls.
17
+
18
+ #### Schedule.IsInDailyInterval
19
+
20
+ The output is `Option[boolean]`. Handle `None` when wall time is unknown.
21
+
22
+ #### Bindings
23
+
24
+ Replace `temporary name: T;` with `binding name: value T;`, and
25
+ `resource name: R;` with `binding name: resource R;`. The connection kind is
26
+ required. The old declaration forms are no longer accepted.
27
+
28
+ #### Enums
29
+
30
+ Declare enums as `open` or `closed`. Open enums keep an explicit underlying
31
+ type and member values and accept unnamed values of that type. Closed enums
32
+ omit both and number their members from zero in declaration order:
33
+
34
+ ```wirely
35
+ open enum type Protocol: uint8 {
36
+ TCP = 1,
37
+ UDP = 2,
38
+ }
39
+
40
+ closed enum type State {
41
+ Idle,
42
+ Running,
43
+ }
44
+ ```
45
+
46
+ Replace `enum type` with `open enum type` to keep existing numbering.
47
+
48
+ #### Std.DelayOneStep
49
+
50
+ Replace `Std.DelayOneStep` with state and read its previous value with
51
+ `.old`:
52
+
53
+ ```wirely
54
+ state delayed: boolean = false;
55
+ connect source -> delayed;
56
+ connect delayed.old -> target;
57
+ ```
58
+
59
+ ## 0.1.3 - 2026-10-12
60
+
61
+ ### Breaking changes and migration
62
+
63
+ #### Schedule and Timer namespaces
64
+
65
+ Replace `Time` with `Schedule` for `IsInDailyInterval`, `TriggerAt`,
66
+ `TimeOfDayMinute`, and `IsValidDailyInterval`, and with `Timer` for
67
+ `DebounceStable` and `MonotonicTimeReached`.
68
+
69
+ ### Added
70
+
71
+ - `Timer.MonotonicTimestamp` emits the step's monotonic time while an input
72
+ event is present.
73
+ - Bitwise operators `&`, `|`, `^`, `!`, `<<`, and `>>` for integers.
74
+ - Procedure ports can be declared with a type and wired with `connect`.
75
+ Refer to a port as `procedure.port`, also in reference ports of other
76
+ procedures:
77
+
78
+ ```wirely
79
+ procedure invert
80
+ depends on value: value boolean
81
+ produces inverted: value boolean
82
+ {
83
+ inverted = !value;
84
+ }
85
+ connect default input -> invert.value;
86
+ connect invert.inverted -> default output;
87
+ ```
88
+ - Connections can target temporaries and state; state takes its value from
89
+ a procedure output port. Reference output ports can target child inputs.
90
+ - `wirely edit` edits programs as source text and as diagrams, kept in
91
+ sync. `wirely export-image` draws a diagram as a PDF or PNG file. Install
92
+ the `editor` extra to use them.
93
+
3
94
  ## 0.1.2 - 2026-10-10
4
95
 
5
96
  ### Breaking changes and migration
@@ -171,7 +262,7 @@ Replace integration-specific connector kinds in custom node declarations:
171
262
  | `two_n_device` | `resource TwoN.Device` |
172
263
 
173
264
  Custom libraries can declare their own opaque resources with
174
- `resource type Name;`. See [resource connectors](doc/language.md#opaque-resource-connectors).
265
+ `resource type Name;`. See [resource connectors](doc/language.md#opaque-resource-ports).
175
266
 
176
267
  #### Runtime types
177
268
 
@@ -1,9 +1,10 @@
1
1
  include CHANGELOG.md
2
2
  recursive-include doc *.md
3
3
  recursive-include examples *.wrl
4
- recursive-include test *.py *.wrl
5
- include test/wrl/username_password.txt
4
+ recursive-include tests *.py *.wrl
5
+ include tests/wrl/username_password.txt
6
6
  include tools/build-pex
7
+ include tools/generate-native-types
7
8
  include tools/git_write_wd_tree.py
8
9
  include tools/run-tests
9
10
  include tools/run-tests-dependencies
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wirely
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: Node-based language and runtime for low-level home automation
5
5
  Author: Steffen Kieß
6
6
  License: MIT
@@ -13,7 +13,7 @@ Requires-Dist: lark>=1.1.5
13
13
  Requires-Dist: sdnotify>=0.3.0
14
14
  Requires-Dist: cbor2>=5.4.5
15
15
  Provides-Extra: knx
16
- Requires-Dist: xknx<4,>=3.0; extra == "knx"
16
+ Requires-Dist: xknx<4,>=3.4; extra == "knx"
17
17
  Provides-Extra: mqtt
18
18
  Requires-Dist: aiomqtt<3,>=2.3; extra == "mqtt"
19
19
  Provides-Extra: two-n
@@ -23,10 +23,13 @@ Provides-Extra: graphviz
23
23
  Requires-Dist: graphviz>=0.20.1; extra == "graphviz"
24
24
  Provides-Extra: gpio
25
25
  Requires-Dist: gpiod<3,>=2.1; extra == "gpio"
26
+ Provides-Extra: editor
27
+ Requires-Dist: PySide6-Essentials>=6.8; extra == "editor"
26
28
  Provides-Extra: all
27
29
  Requires-Dist: wirely[gpio,graphviz,knx,mqtt,two-n]; extra == "all"
28
30
  Provides-Extra: test
29
31
  Requires-Dist: pyOpenSSL>=23.0.0; extra == "test"
32
+ Requires-Dist: mypy>=2.0; extra == "test"
30
33
  Provides-Extra: pex
31
34
  Requires-Dist: pex; extra == "pex"
32
35
  Provides-Extra: dev
@@ -69,6 +72,10 @@ python3 -m wirely compile program.wrl
69
72
 
70
73
  Use `wirely compile --dump-program program.wrl` to print the compiled
71
74
  runtime program, including its variables, configuration, and procedures.
75
+ Add `--timings` to print the duration of each compiler stage.
76
+ Set `WIRELY_COMPILER_CACHE_LARK=1` to keep the parser tables in
77
+ `$XDG_CACHE_HOME/wirely/` (by default `~/.cache/wirely/`), which saves
78
+ about 0.7 s on each start.
72
79
 
73
80
  Install optional integrations as needed:
74
81
 
@@ -79,8 +86,38 @@ python3 -m pip install 'wirely[two-n]' # 2N devices
79
86
  python3 -m pip install 'wirely[graphviz]' # show-graph
80
87
  python3 -m pip install 'wirely[gpio]' # GPIO
81
88
  python3 -m pip install 'wirely[all]' # all optional integrations
89
+ python3 -m pip install 'wirely[editor]' # graphical editor
82
90
  ```
83
91
 
92
+ Set `WIRELY_VERBOSE=1` to print node creation, connection setup, and each
93
+ value sent or received by the KNX, MQTT, 2N, CSV, and Process nodes.
94
+
95
+ `wirely edit program.wrl` opens a program in a graphical editor with tabs
96
+ for its source files and diagrams. Edits in either view update the other.
97
+ Right-click a tab to split the view, move it to another pane, or detach it
98
+ into a window. You can also drag tabs between panes, onto pane edges to
99
+ split, or outside the editor to detach. Closing a detached window returns
100
+ its tabs to the main window. Layouts last for the current session.
101
+ A diagram is read-only while its source has syntax errors. In a diagram:
102
+
103
+ - Drag a node to store its position in the source; right-click it and choose
104
+ Reset to Automatic Position to remove it again. Use View → Snap to Grid
105
+ to toggle snapping for all diagrams. A selected group snaps its movement
106
+ while keeping its relative positions.
107
+ - Drag from a port to another port to connect them. Drag a connection away
108
+ from an input to move or remove it.
109
+ - Press Delete to remove the selection and F2 to rename it.
110
+ - Right-click the background to add nodes and declarations.
111
+ - Double-click a node to open the diagram of its node type.
112
+ - Press Ctrl+E to show the source of the selection, and Ctrl+Shift+E in the
113
+ source to show the element at the cursor in its diagram.
114
+
115
+ `wirely export-image program.wrl -o diagram.pdf` draws the program diagram as
116
+ the editor shows it, as a PDF or PNG file. Use `--scope Name` for the diagram
117
+ of a node type and `--scale` for the PNG resolution. Diagrams use the DejaVu
118
+ Sans font, or a fallback font if it is not installed. See
119
+ [diagram layout](doc/diagram-layout.md) for how layouts are stored.
120
+
84
121
  The `test` extra adds dependencies used only by the test suite. Install
85
122
  `wirely[all,test]` to include both integrations and test dependencies.
86
123
 
@@ -92,7 +129,7 @@ checkout launchers:
92
129
 
93
130
  ```
94
131
  tools/setup-venv
95
- tools/wirely compile test/wrl/simple.wrl
132
+ tools/wirely compile tests/compiler/simple.wrl
96
133
  tools/run-tests
97
134
  ```
98
135
 
@@ -105,16 +142,19 @@ Pass test names to run a selection, and add `--timings` to list durations
105
142
  slowest first:
106
143
 
107
144
  ```
108
- tools/run-tests --timings unit/types unit/equality
145
+ tools/run-tests --timings unit/types wrl/equality
109
146
  ```
110
147
 
148
+ Add `--processes 4` to run the tests in four worker processes; see the
149
+ [test guide](doc/tests.md) for the options.
150
+
111
151
  To check that compilation does not depend on declaration order, set
112
152
  `WIRELY_COMPILER_SHUFFLE_SEED` to an integer. The compiler then shuffles
113
- declarations, node parameters, struct literal fields, and procedure
114
- bindings with that seed; connections keep their relative order. Also set
115
- `WIRELY_COMPILER_SHUFFLE_LAYOUT=1` to shuffle struct fields and enum
116
- members, which changes serialization and enum default values. Negative
117
- tests may report different diagnostics in this mode.
153
+ declarations, node parameters, procedure ports, `uses` bindings, and open
154
+ enum members with that seed; connections keep their relative order. Also set `WIRELY_COMPILER_SHUFFLE_LAYOUT=1` to shuffle
155
+ fields of structs and members of closed enums that are not native, which
156
+ changes the runtime representation.
157
+ Negative tests may report different diagnostics in this mode.
118
158
 
119
159
  ```
120
160
  WIRELY_COMPILER_SHUFFLE_SEED=1 tools/run-tests
@@ -138,3 +178,9 @@ compatible patch of the oldest supported CPython minor; `max` selects the
138
178
  newest compatible stable CPython available through the installed uv.
139
179
  uv can download missing interpreters. `tools/run-tests --python PATH` runs
140
180
  tests using a specified Python executable.
181
+
182
+ Test names, `--timings`, and `--keep-going` work as for `tools/run-tests`:
183
+
184
+ ```
185
+ tools/run-tests-dependencies --versions min --python min misc/type_check
186
+ ```
@@ -33,6 +33,10 @@ python3 -m wirely compile program.wrl
33
33
 
34
34
  Use `wirely compile --dump-program program.wrl` to print the compiled
35
35
  runtime program, including its variables, configuration, and procedures.
36
+ Add `--timings` to print the duration of each compiler stage.
37
+ Set `WIRELY_COMPILER_CACHE_LARK=1` to keep the parser tables in
38
+ `$XDG_CACHE_HOME/wirely/` (by default `~/.cache/wirely/`), which saves
39
+ about 0.7 s on each start.
36
40
 
37
41
  Install optional integrations as needed:
38
42
 
@@ -43,8 +47,38 @@ python3 -m pip install 'wirely[two-n]' # 2N devices
43
47
  python3 -m pip install 'wirely[graphviz]' # show-graph
44
48
  python3 -m pip install 'wirely[gpio]' # GPIO
45
49
  python3 -m pip install 'wirely[all]' # all optional integrations
50
+ python3 -m pip install 'wirely[editor]' # graphical editor
46
51
  ```
47
52
 
53
+ Set `WIRELY_VERBOSE=1` to print node creation, connection setup, and each
54
+ value sent or received by the KNX, MQTT, 2N, CSV, and Process nodes.
55
+
56
+ `wirely edit program.wrl` opens a program in a graphical editor with tabs
57
+ for its source files and diagrams. Edits in either view update the other.
58
+ Right-click a tab to split the view, move it to another pane, or detach it
59
+ into a window. You can also drag tabs between panes, onto pane edges to
60
+ split, or outside the editor to detach. Closing a detached window returns
61
+ its tabs to the main window. Layouts last for the current session.
62
+ A diagram is read-only while its source has syntax errors. In a diagram:
63
+
64
+ - Drag a node to store its position in the source; right-click it and choose
65
+ Reset to Automatic Position to remove it again. Use View → Snap to Grid
66
+ to toggle snapping for all diagrams. A selected group snaps its movement
67
+ while keeping its relative positions.
68
+ - Drag from a port to another port to connect them. Drag a connection away
69
+ from an input to move or remove it.
70
+ - Press Delete to remove the selection and F2 to rename it.
71
+ - Right-click the background to add nodes and declarations.
72
+ - Double-click a node to open the diagram of its node type.
73
+ - Press Ctrl+E to show the source of the selection, and Ctrl+Shift+E in the
74
+ source to show the element at the cursor in its diagram.
75
+
76
+ `wirely export-image program.wrl -o diagram.pdf` draws the program diagram as
77
+ the editor shows it, as a PDF or PNG file. Use `--scope Name` for the diagram
78
+ of a node type and `--scale` for the PNG resolution. Diagrams use the DejaVu
79
+ Sans font, or a fallback font if it is not installed. See
80
+ [diagram layout](doc/diagram-layout.md) for how layouts are stored.
81
+
48
82
  The `test` extra adds dependencies used only by the test suite. Install
49
83
  `wirely[all,test]` to include both integrations and test dependencies.
50
84
 
@@ -56,7 +90,7 @@ checkout launchers:
56
90
 
57
91
  ```
58
92
  tools/setup-venv
59
- tools/wirely compile test/wrl/simple.wrl
93
+ tools/wirely compile tests/compiler/simple.wrl
60
94
  tools/run-tests
61
95
  ```
62
96
 
@@ -69,16 +103,19 @@ Pass test names to run a selection, and add `--timings` to list durations
69
103
  slowest first:
70
104
 
71
105
  ```
72
- tools/run-tests --timings unit/types unit/equality
106
+ tools/run-tests --timings unit/types wrl/equality
73
107
  ```
74
108
 
109
+ Add `--processes 4` to run the tests in four worker processes; see the
110
+ [test guide](doc/tests.md) for the options.
111
+
75
112
  To check that compilation does not depend on declaration order, set
76
113
  `WIRELY_COMPILER_SHUFFLE_SEED` to an integer. The compiler then shuffles
77
- declarations, node parameters, struct literal fields, and procedure
78
- bindings with that seed; connections keep their relative order. Also set
79
- `WIRELY_COMPILER_SHUFFLE_LAYOUT=1` to shuffle struct fields and enum
80
- members, which changes serialization and enum default values. Negative
81
- tests may report different diagnostics in this mode.
114
+ declarations, node parameters, procedure ports, `uses` bindings, and open
115
+ enum members with that seed; connections keep their relative order. Also set `WIRELY_COMPILER_SHUFFLE_LAYOUT=1` to shuffle
116
+ fields of structs and members of closed enums that are not native, which
117
+ changes the runtime representation.
118
+ Negative tests may report different diagnostics in this mode.
82
119
 
83
120
  ```
84
121
  WIRELY_COMPILER_SHUFFLE_SEED=1 tools/run-tests
@@ -102,3 +139,9 @@ compatible patch of the oldest supported CPython minor; `max` selects the
102
139
  newest compatible stable CPython available through the installed uv.
103
140
  uv can download missing interpreters. `tools/run-tests --python PATH` runs
104
141
  tests using a specified Python executable.
142
+
143
+ Test names, `--timings`, and `--keep-going` work as for `tools/run-tests`:
144
+
145
+ ```
146
+ tools/run-tests-dependencies --versions min --python min misc/type_check
147
+ ```
@@ -4,14 +4,18 @@ Wirely programs are graphs of typed nodes written in `.wrl` files. Start with
4
4
  the [language guide](language.md) to learn how to declare nodes and connect
5
5
  them. Then use the [library reference](libraries.md) to find the nodes supplied
6
6
  with Wirely. The [value type reference](value-types.md) describes the types
7
- used by parameters, connectors, and state.
7
+ used by parameters, ports, and state.
8
8
 
9
9
  The [binary program format proposal](bytecode-format.md) describes program
10
10
  tables, value encodings, and optional debugging information.
11
11
 
12
12
  For `.wrl` formatting and naming, follow the
13
- [Wirely style guide](wirely-style.md).
13
+ [Wirely style guide](wirely-style.md). The [diagram layout](diagram-layout.md)
14
+ document defines how diagrams of programs are laid out and stored.
14
15
 
15
16
  To implement nodes and procedures in Python, use the
16
17
  [native Python implementation guide](native-python.md). For Python
17
18
  contributions, follow the [Python style guide](python-style.md).
19
+
20
+ For compiler development, read the [compiler stages guide](compiler-stages.md).
21
+ For test categories, execution, and authoring, read the [test guide](tests.md).