wirely 0.1.0__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. wirely-0.1.2/CHANGELOG.md +244 -0
  2. {wirely-0.1.0 → wirely-0.1.2}/MANIFEST.in +3 -1
  3. {wirely-0.1.0/wirely.egg-info → wirely-0.1.2}/PKG-INFO +54 -8
  4. {wirely-0.1.0 → wirely-0.1.2}/README.md +44 -2
  5. wirely-0.1.2/doc/README.md +17 -0
  6. wirely-0.1.2/doc/bytecode-format.md +1187 -0
  7. wirely-0.1.2/doc/control-protocol.md +367 -0
  8. wirely-0.1.2/doc/language.md +569 -0
  9. wirely-0.1.2/doc/libraries.md +265 -0
  10. wirely-0.1.2/doc/native-python.md +326 -0
  11. wirely-0.1.2/doc/value-types.md +380 -0
  12. wirely-0.1.2/doc/wirely-style.md +109 -0
  13. wirely-0.1.2/examples/delay.wrl +7 -0
  14. wirely-0.1.2/examples/flipflop.wrl +14 -0
  15. wirely-0.1.2/examples/gpio.wrl +9 -0
  16. wirely-0.1.2/examples/knx.wrl +32 -0
  17. wirely-0.1.2/examples/test.wrl +86 -0
  18. {wirely-0.1.0 → wirely-0.1.2}/pyproject.toml +13 -8
  19. wirely-0.1.2/test/compiler/arithmetic.wrl +67 -0
  20. wirely-0.1.2/test/compiler/assertions.wrl +37 -0
  21. wirely-0.1.2/test/compiler/attributes.wrl +97 -0
  22. wirely-0.1.2/test/compiler/constants.wrl +83 -0
  23. wirely-0.1.2/test/compiler/conversions.wrl +47 -0
  24. wirely-0.1.2/test/compiler/durations.wrl +38 -0
  25. wirely-0.1.2/test/compiler/equality.wrl +59 -0
  26. wirely-0.1.2/test/compiler/library_settings.wrl +91 -0
  27. wirely-0.1.2/test/compiler/literals.wrl +114 -0
  28. wirely-0.1.0/test/nested_library.wrl → wirely-0.1.2/test/compiler/namespaces.wrl +6 -5
  29. wirely-0.1.2/test/compiler/native_functions.wrl +15 -0
  30. wirely-0.1.2/test/compiler/options.wrl +62 -0
  31. wirely-0.1.2/test/compiler/ordering.wrl +19 -0
  32. wirely-0.1.2/test/compiler/parameters.wrl +155 -0
  33. wirely-0.1.2/test/compiler/path.wrl +21 -0
  34. wirely-0.1.2/test/compiler/prepared_configuration.wrl +28 -0
  35. wirely-0.1.2/test/compiler/runtime_limits.wrl +163 -0
  36. wirely-0.1.2/test/compiler/structs.wrl +45 -0
  37. wirely-0.1.2/test/compiler/syntax.wrl +178 -0
  38. wirely-0.1.2/test/compiler/time_of_day.wrl +35 -0
  39. wirely-0.1.2/test/compiler/types.wrl +181 -0
  40. wirely-0.1.2/test/negative/arithmetic.wrl +88 -0
  41. wirely-0.1.2/test/negative/assertions.wrl +110 -0
  42. wirely-0.1.2/test/negative/attributes.wrl +211 -0
  43. wirely-0.1.2/test/negative/connections.wrl +119 -0
  44. wirely-0.1.2/test/negative/constants.wrl +194 -0
  45. wirely-0.1.2/test/negative/conversions.wrl +43 -0
  46. wirely-0.1.2/test/negative/durations.wrl +45 -0
  47. wirely-0.1.2/test/negative/enum_declarations.wrl +235 -0
  48. wirely-0.1.2/test/negative/enum_literals.wrl +34 -0
  49. wirely-0.1.2/test/negative/integer_literals.wrl +182 -0
  50. wirely-0.1.2/test/negative/library_settings.wrl +138 -0
  51. wirely-0.1.2/test/negative/monotonic_time.wrl +51 -0
  52. wirely-0.1.2/test/negative/native_functions.wrl +97 -0
  53. wirely-0.1.2/test/negative/native_initializers.wrl +74 -0
  54. wirely-0.1.2/test/negative/native_procedures.wrl +23 -0
  55. wirely-0.1.2/test/negative/native_values.wrl +96 -0
  56. wirely-0.1.2/test/negative/node_declarations.wrl +47 -0
  57. wirely-0.1.2/test/negative/node_types.wrl +34 -0
  58. wirely-0.1.2/test/negative/option_literals.wrl +39 -0
  59. wirely-0.1.2/test/negative/option_properties.wrl +146 -0
  60. wirely-0.1.2/test/negative/optional_forwarding.wrl +121 -0
  61. wirely-0.1.2/test/negative/optional_outputs.wrl +59 -0
  62. wirely-0.1.2/test/negative/options.wrl +115 -0
  63. wirely-0.1.2/test/negative/parameters.wrl +34 -0
  64. wirely-0.1.2/test/negative/path.wrl +46 -0
  65. wirely-0.1.2/test/negative/prepared_configuration.wrl +61 -0
  66. wirely-0.1.2/test/negative/procedure_bindings.wrl +112 -0
  67. wirely-0.1.2/test/negative/procedures.wrl +393 -0
  68. wirely-0.1.2/test/negative/resource_connections.wrl +157 -0
  69. wirely-0.1.2/test/negative/resource_declarations.wrl +102 -0
  70. wirely-0.1.2/test/negative/resource_value_types.wrl +39 -0
  71. wirely-0.1.2/test/negative/runtime_limits.wrl +430 -0
  72. wirely-0.1.2/test/negative/runtime_types.wrl +69 -0
  73. wirely-0.1.2/test/negative/state_connections.wrl +262 -0
  74. wirely-0.1.2/test/negative/string_literals.wrl +131 -0
  75. wirely-0.1.2/test/negative/structs.wrl +349 -0
  76. wirely-0.1.2/test/negative/syntax_lists.wrl +59 -0
  77. wirely-0.1.2/test/negative/time_of_day.wrl +25 -0
  78. wirely-0.1.2/test/negative/type_comparisons.wrl +163 -0
  79. wirely-0.1.2/test/negative/unit_literals.wrl +7 -0
  80. wirely-0.1.2/test/negative/weak_keywords.wrl +48 -0
  81. wirely-0.1.2/test/unit/attribute_editing.py +151 -0
  82. wirely-0.1.2/test/unit/attribute_editing.wrl +1 -0
  83. wirely-0.1.2/test/unit/container.py +115 -0
  84. wirely-0.1.2/test/unit/container.wrl +1 -0
  85. wirely-0.1.2/test/unit/control.py +237 -0
  86. wirely-0.1.2/test/unit/control.wrl +4 -0
  87. wirely-0.1.2/test/unit/equality.py +82 -0
  88. wirely-0.1.2/test/unit/equality.wrl +81 -0
  89. wirely-0.1.2/test/unit/instructions.py +408 -0
  90. wirely-0.1.2/test/unit/instructions.wrl +1 -0
  91. wirely-0.1.2/test/unit/library_configuration.py +216 -0
  92. wirely-0.1.2/test/unit/library_configuration.wrl +1 -0
  93. wirely-0.1.2/test/unit/native_interface.py +778 -0
  94. wirely-0.1.2/test/unit/native_interface.wrl +1 -0
  95. wirely-0.1.2/test/unit/native_values.py +193 -0
  96. wirely-0.1.2/test/unit/native_values.wrl +4 -0
  97. wirely-0.1.2/test/unit/negative_cases.py +206 -0
  98. wirely-0.1.2/test/unit/negative_cases.wrl +1 -0
  99. wirely-0.1.2/test/unit/procedures.py +536 -0
  100. wirely-0.1.2/test/unit/procedures.wrl +332 -0
  101. wirely-0.1.2/test/unit/resources.py +219 -0
  102. wirely-0.1.2/test/unit/resources.wrl +1 -0
  103. wirely-0.1.2/test/unit/runtime_program.py +129 -0
  104. wirely-0.1.2/test/unit/runtime_program.wrl +20 -0
  105. wirely-0.1.2/test/unit/serialization.py +238 -0
  106. wirely-0.1.2/test/unit/serialization.wrl +1 -0
  107. wirely-0.1.2/test/unit/shuffle.py +110 -0
  108. wirely-0.1.2/test/unit/shuffle.wrl +1 -0
  109. wirely-0.1.2/test/unit/state_connections.py +401 -0
  110. wirely-0.1.2/test/unit/state_connections.wrl +1 -0
  111. wirely-0.1.2/test/unit/test_resources.py +226 -0
  112. wirely-0.1.2/test/unit/test_resources.wrl +1 -0
  113. wirely-0.1.2/test/unit/types.py +390 -0
  114. wirely-0.1.2/test/unit/types.wrl +1 -0
  115. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/abb.py +4 -2
  116. wirely-0.1.2/test/wrl/abb.wrl +8 -0
  117. wirely-0.1.2/test/wrl/and.wrl +14 -0
  118. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/csv.py +25 -24
  119. wirely-0.1.2/test/wrl/csv.wrl +15 -0
  120. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/delay.py +0 -2
  121. wirely-0.1.2/test/wrl/delay.wrl +13 -0
  122. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/flipflop.py +7 -7
  123. wirely-0.1.2/test/wrl/flipflop.wrl +9 -0
  124. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/gpio.py +4 -2
  125. wirely-0.1.2/test/wrl/gpio.wrl +9 -0
  126. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/knx.py +71 -70
  127. wirely-0.1.2/test/wrl/knx.wrl +107 -0
  128. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/knx_time.py +5 -5
  129. wirely-0.1.2/test/wrl/knx_time.wrl +13 -0
  130. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/mqtt.py +50 -48
  131. wirely-0.1.2/test/wrl/mqtt.wrl +104 -0
  132. wirely-0.1.2/test/wrl/option.py +99 -0
  133. wirely-0.1.2/test/wrl/option.wrl +25 -0
  134. wirely-0.1.0/test/ext_prog.py → wirely-0.1.2/test/wrl/process.py +8 -5
  135. wirely-0.1.2/test/wrl/process.wrl +3 -0
  136. wirely-0.1.2/test/wrl/simple.wrl +3 -0
  137. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/std.py +3 -1
  138. wirely-0.1.2/test/wrl/std.wrl +10 -0
  139. wirely-0.1.2/test/wrl/time.py +344 -0
  140. wirely-0.1.2/test/wrl/time.wrl +24 -0
  141. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/two_n.py +8 -8
  142. wirely-0.1.2/test/wrl/two_n.wrl +50 -0
  143. {wirely-0.1.0 → wirely-0.1.2}/tools/run-tests +19 -8
  144. wirely-0.1.2/tools/run-tests-dependencies +116 -0
  145. wirely-0.1.2/wirely/__init__.py +10 -0
  146. wirely-0.1.2/wirely/__main__.py +69 -0
  147. wirely-0.1.2/wirely/cli/client.py +141 -0
  148. wirely-0.1.2/wirely/cli/compile_command.py +31 -0
  149. {wirely-0.1.0/wirely → wirely-0.1.2/wirely/cli}/graphviz.py +21 -9
  150. wirely-0.1.2/wirely/cli/objdump.py +47 -0
  151. {wirely-0.1.0/wirely → wirely-0.1.2/wirely/cli}/run.py +19 -20
  152. wirely-0.1.2/wirely/cli/service.py +93 -0
  153. wirely-0.1.2/wirely/compiler/__init__.py +136 -0
  154. wirely-0.1.2/wirely/compiler/ast.py +1960 -0
  155. wirely-0.1.2/wirely/compiler/attribute_editing.py +305 -0
  156. wirely-0.1.2/wirely/compiler/attributes.py +209 -0
  157. {wirely-0.1.0/wirely → wirely-0.1.2/wirely/compiler}/block.py +170 -149
  158. {wirely-0.1.0/wirely → wirely-0.1.2/wirely/compiler}/block_type.py +93 -88
  159. wirely-0.1.2/wirely/compiler/blocks.lark +257 -0
  160. wirely-0.1.2/wirely/compiler/diagnostics.py +59 -0
  161. wirely-0.1.2/wirely/compiler/expressions.py +1094 -0
  162. wirely-0.1.2/wirely/compiler/function_implementations/__init__.py +1 -0
  163. wirely-0.1.2/wirely/compiler/function_implementations/csv.py +5 -0
  164. wirely-0.1.2/wirely/compiler/function_implementations/knx.py +32 -0
  165. wirely-0.1.2/wirely/compiler/function_implementations/mqtt.py +86 -0
  166. wirely-0.1.2/wirely/compiler/function_implementations/path.py +19 -0
  167. wirely-0.1.2/wirely/compiler/function_implementations/test.py +66 -0
  168. wirely-0.1.2/wirely/compiler/function_implementations/time.py +2 -0
  169. wirely-0.1.2/wirely/compiler/function_implementations/two_n.py +27 -0
  170. wirely-0.1.2/wirely/compiler/model.py +107 -0
  171. wirely-0.1.2/wirely/compiler/native_functions.py +184 -0
  172. {wirely-0.1.0/wirely → wirely-0.1.2/wirely/compiler}/node.py +52 -10
  173. wirely-0.1.2/wirely/compiler/parameters.py +102 -0
  174. {wirely-0.1.0/wirely → wirely-0.1.2/wirely/compiler}/parser.py +82 -8
  175. wirely-0.1.2/wirely/compiler/program.py +378 -0
  176. wirely-0.1.2/wirely/compiler/shuffle.py +73 -0
  177. wirely-0.1.2/wirely/compiler/static_bindings.py +24 -0
  178. wirely-0.1.2/wirely/compiler/support.py +283 -0
  179. wirely-0.1.2/wirely/compiler/types.py +246 -0
  180. wirely-0.1.2/wirely/compiler/value.py +276 -0
  181. wirely-0.1.2/wirely/control/client.py +136 -0
  182. wirely-0.1.2/wirely/control/controller.py +103 -0
  183. wirely-0.1.2/wirely/control/framing.py +127 -0
  184. wirely-0.1.2/wirely/control/messages.py +146 -0
  185. wirely-0.1.2/wirely/control/server.py +274 -0
  186. wirely-0.1.2/wirely/functions/__init__.py +80 -0
  187. wirely-0.1.2/wirely/functions/duration.py +112 -0
  188. wirely-0.1.2/wirely/functions/monotonic_time.py +65 -0
  189. wirely-0.1.2/wirely/functions/test_library.py +23 -0
  190. wirely-0.1.2/wirely/functions/time_of_day.py +34 -0
  191. wirely-0.1.2/wirely/lib/abb_jra.wrl +71 -0
  192. wirely-0.1.2/wirely/lib/csv.wrl +42 -0
  193. wirely-0.1.2/wirely/lib/gpio.wrl +39 -0
  194. wirely-0.1.2/wirely/lib/knx.wrl +128 -0
  195. wirely-0.1.2/wirely/lib/matter.wrl +12 -0
  196. wirely-0.1.2/wirely/lib/memory.wrl +47 -0
  197. wirely-0.1.2/wirely/lib/mqtt.wrl +108 -0
  198. wirely-0.1.2/wirely/lib/path.wrl +5 -0
  199. wirely-0.1.2/wirely/lib/process.wrl +13 -0
  200. wirely-0.1.2/wirely/lib/std.wrl +199 -0
  201. wirely-0.1.2/wirely/lib/test.wrl +8 -0
  202. wirely-0.1.2/wirely/lib/time.wrl +122 -0
  203. wirely-0.1.2/wirely/lib/two_n.wrl +142 -0
  204. wirely-0.1.2/wirely/misc/state_directory.py +49 -0
  205. wirely-0.1.2/wirely/native/__init__.py +45 -0
  206. {wirely-0.1.0 → wirely-0.1.2}/wirely/native/abb_jra.py +9 -17
  207. {wirely-0.1.0 → wirely-0.1.2}/wirely/native/csv.py +24 -66
  208. wirely-0.1.2/wirely/native/gpio.py +74 -0
  209. {wirely-0.1.0 → wirely-0.1.2}/wirely/native/knx.py +64 -205
  210. wirely-0.1.2/wirely/native/memory.py +58 -0
  211. {wirely-0.1.0 → wirely-0.1.2}/wirely/native/mqtt.py +90 -220
  212. wirely-0.1.2/wirely/native/process.py +53 -0
  213. wirely-0.1.2/wirely/native/std.py +221 -0
  214. wirely-0.1.2/wirely/native/test_library.py +13 -0
  215. wirely-0.1.2/wirely/native/time.py +253 -0
  216. wirely-0.1.2/wirely/native/two_n.py +400 -0
  217. wirely-0.1.2/wirely/program/__init__.py +12 -0
  218. wirely-0.1.2/wirely/program/container.py +116 -0
  219. wirely-0.1.2/wirely/program/limits.py +5 -0
  220. wirely-0.1.2/wirely/program/procedures.py +121 -0
  221. wirely-0.1.2/wirely/program/program.py +280 -0
  222. wirely-0.1.2/wirely/program/validation.py +188 -0
  223. wirely-0.1.2/wirely/runtime/__init__.py +1 -0
  224. wirely-0.1.2/wirely/runtime/contexts.py +213 -0
  225. wirely-0.1.2/wirely/runtime/engine.py +317 -0
  226. wirely-0.1.2/wirely/runtime/linking.py +81 -0
  227. wirely-0.1.2/wirely/runtime/procedures.py +105 -0
  228. wirely-0.1.2/wirely/runtime/time_snapshot.py +13 -0
  229. wirely-0.1.2/wirely/test.py +646 -0
  230. wirely-0.1.2/wirely/two_n/__init__.py +0 -0
  231. {wirely-0.1.0 → wirely-0.1.2}/wirely/two_n/cert.py +1 -0
  232. {wirely-0.1.0 → wirely-0.1.2}/wirely/two_n/fake_server.py +44 -34
  233. wirely-0.1.2/wirely/types/__init__.py +682 -0
  234. wirely-0.1.2/wirely/types/option.py +8 -0
  235. wirely-0.1.2/wirely/types/serialization.py +159 -0
  236. wirely-0.1.2/wirely/types/struct.py +35 -0
  237. {wirely-0.1.0/wirely → wirely-0.1.2/wirely/types}/time.py +93 -28
  238. wirely-0.1.2/wirely/types/unit.py +6 -0
  239. wirely-0.1.2/wirely/types/value_types.py +133 -0
  240. {wirely-0.1.0 → wirely-0.1.2/wirely.egg-info}/PKG-INFO +54 -8
  241. wirely-0.1.2/wirely.egg-info/SOURCES.txt +263 -0
  242. {wirely-0.1.0 → wirely-0.1.2}/wirely.egg-info/requires.txt +7 -5
  243. wirely-0.1.0/doc/README.md +0 -8
  244. wirely-0.1.0/doc/language.md +0 -166
  245. wirely-0.1.0/doc/libraries.md +0 -177
  246. wirely-0.1.0/examples/delay.wrl +0 -7
  247. wirely-0.1.0/examples/flipflop.wrl +0 -10
  248. wirely-0.1.0/examples/gpio.wrl +0 -4
  249. wirely-0.1.0/examples/knx.wrl +0 -23
  250. wirely-0.1.0/examples/test.wrl +0 -86
  251. wirely-0.1.0/test/abb.wrl +0 -8
  252. wirely-0.1.0/test/and.wrl +0 -14
  253. wirely-0.1.0/test/compiler.wrl +0 -8
  254. wirely-0.1.0/test/csv.wrl +0 -9
  255. wirely-0.1.0/test/delay.wrl +0 -13
  256. wirely-0.1.0/test/ext_prog.wrl +0 -3
  257. wirely-0.1.0/test/flipflop.wrl +0 -9
  258. wirely-0.1.0/test/gpio.wrl +0 -9
  259. wirely-0.1.0/test/knx.wrl +0 -81
  260. wirely-0.1.0/test/knx_time.wrl +0 -7
  261. wirely-0.1.0/test/mqtt.wrl +0 -73
  262. wirely-0.1.0/test/negative/duplicate_block_type_in_reopened_library.wrl +0 -9
  263. wirely-0.1.0/test/negative/library_inside_node_type.wrl +0 -4
  264. wirely-0.1.0/test/negative/singleton_input.wrl +0 -3
  265. wirely-0.1.0/test/negative/singleton_parameter.wrl +0 -3
  266. wirely-0.1.0/test/negative/unknown_abb_jra.wrl +0 -2
  267. wirely-0.1.0/test/negative/unknown_node_type.wrl +0 -1
  268. wirely-0.1.0/test/negative/unknown_parameter.wrl +0 -1
  269. wirely-0.1.0/test/option.py +0 -26
  270. wirely-0.1.0/test/option.wrl +0 -25
  271. wirely-0.1.0/test/parser.wrl +0 -4
  272. wirely-0.1.0/test/simple.wrl +0 -3
  273. wirely-0.1.0/test/std.wrl +0 -10
  274. wirely-0.1.0/test/time.py +0 -291
  275. wirely-0.1.0/test/time.wrl +0 -15
  276. wirely-0.1.0/test/two_n.wrl +0 -42
  277. wirely-0.1.0/test/types.py +0 -169
  278. wirely-0.1.0/wirely/__init__.py +0 -406
  279. wirely-0.1.0/wirely/__main__.py +0 -45
  280. wirely-0.1.0/wirely/ast.py +0 -1135
  281. wirely-0.1.0/wirely/blocks.lark +0 -126
  282. wirely-0.1.0/wirely/compiler.py +0 -125
  283. wirely-0.1.0/wirely/engine.py +0 -418
  284. wirely-0.1.0/wirely/enum.py +0 -15
  285. wirely-0.1.0/wirely/example.py +0 -36
  286. wirely-0.1.0/wirely/lib/abb_jra.wrl +0 -64
  287. wirely-0.1.0/wirely/lib/csv.wrl +0 -32
  288. wirely-0.1.0/wirely/lib/ext_prog.wrl +0 -12
  289. wirely-0.1.0/wirely/lib/gpio.wrl +0 -23
  290. wirely-0.1.0/wirely/lib/knx.wrl +0 -80
  291. wirely-0.1.0/wirely/lib/memory.wrl +0 -45
  292. wirely-0.1.0/wirely/lib/mqtt.wrl +0 -66
  293. wirely-0.1.0/wirely/lib/std.wrl +0 -134
  294. wirely-0.1.0/wirely/lib/time.wrl +0 -93
  295. wirely-0.1.0/wirely/lib/two_n.wrl +0 -111
  296. wirely-0.1.0/wirely/native/__init__.py +0 -74
  297. wirely-0.1.0/wirely/native/ext_prog.py +0 -77
  298. wirely-0.1.0/wirely/native/gpio.py +0 -125
  299. wirely-0.1.0/wirely/native/memory.py +0 -113
  300. wirely-0.1.0/wirely/native/std.py +0 -334
  301. wirely-0.1.0/wirely/native/test_library.py +0 -14
  302. wirely-0.1.0/wirely/native/time.py +0 -359
  303. wirely-0.1.0/wirely/native/two_n.py +0 -632
  304. wirely-0.1.0/wirely/program.py +0 -155
  305. wirely-0.1.0/wirely/service.py +0 -65
  306. wirely-0.1.0/wirely/test.py +0 -569
  307. wirely-0.1.0/wirely/types.py +0 -522
  308. wirely-0.1.0/wirely/value.py +0 -163
  309. wirely-0.1.0/wirely.egg-info/SOURCES.txt +0 -120
  310. {wirely-0.1.0 → wirely-0.1.2}/LICENSE +0 -0
  311. {wirely-0.1.0 → wirely-0.1.2}/doc/python-style.md +0 -0
  312. {wirely-0.1.0 → wirely-0.1.2}/setup.cfg +0 -0
  313. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/and.py +0 -0
  314. {wirely-0.1.0/test → wirely-0.1.2/test/wrl}/username_password.txt +0 -0
  315. {wirely-0.1.0 → wirely-0.1.2}/tools/build-pex +0 -0
  316. {wirely-0.1.0 → wirely-0.1.2}/tools/git_write_wd_tree.py +0 -0
  317. {wirely-0.1.0 → wirely-0.1.2}/tools/setup-venv +0 -0
  318. {wirely-0.1.0 → wirely-0.1.2}/tools/test-gitlab-ci +0 -0
  319. {wirely-0.1.0 → wirely-0.1.2}/tools/wirely +0 -0
  320. {wirely-0.1.0/wirely/knx → wirely-0.1.2/wirely/cli}/__init__.py +0 -0
  321. {wirely-0.1.0/wirely/misc → wirely-0.1.2/wirely/control}/__init__.py +0 -0
  322. {wirely-0.1.0/wirely/two_n → wirely-0.1.2/wirely/knx}/__init__.py +0 -0
  323. {wirely-0.1.0 → wirely-0.1.2}/wirely/knx/connection_adapter.py +0 -0
  324. {wirely-0.1.0 → wirely-0.1.2}/wirely/knx/connection_config.py +0 -0
  325. /wirely-0.1.0/test/types.wrl → /wirely-0.1.2/wirely/misc/__init__.py +0 -0
  326. {wirely-0.1.0 → wirely-0.1.2}/wirely/misc/service.py +0 -0
  327. {wirely-0.1.0 → wirely-0.1.2}/wirely/two_n/client.py +0 -0
  328. {wirely-0.1.0 → wirely-0.1.2}/wirely/two_n/grab_images.py +0 -0
  329. {wirely-0.1.0 → wirely-0.1.2}/wirely/util.py +0 -0
  330. {wirely-0.1.0 → wirely-0.1.2}/wirely.egg-info/dependency_links.txt +0 -0
  331. {wirely-0.1.0 → wirely-0.1.2}/wirely.egg-info/entry_points.txt +0 -0
  332. {wirely-0.1.0 → wirely-0.1.2}/wirely.egg-info/top_level.txt +0 -0
@@ -0,0 +1,244 @@
1
+ # Changelog
2
+
3
+ ## 0.1.2 - 2026-10-10
4
+
5
+ ### Breaking changes and migration
6
+
7
+ #### Optional parameter forwarding
8
+
9
+ Replace implicit forwarding with `Foo?: parameter_option(Foo)` in node
10
+ arguments.
11
+
12
+ #### Node instance syntax
13
+
14
+ Replace parameter parentheses with braces, parameter `=` with `:`, and
15
+ remove the final semicolon. Every node instance needs braces:
16
+
17
+ | Before | After |
18
+ | --- | --- |
19
+ | `node n: T(P = value);` | `node n: T { P: value }` |
20
+ | `node n: T;` | `node n: T {}` |
21
+ | `node n: T();` | `node n: T {}` |
22
+
23
+ #### Connector syntax
24
+
25
+ Use `multi value`, `multi event`, and `multi resource` instead of `list value`,
26
+ `list event`, and `list resource` in input declarations.
27
+
28
+ Use `default input` and `default output` instead of `implicit input` and
29
+ `implicit output` in connector declarations, connection endpoints, and
30
+ procedure bindings.
31
+
32
+ #### Library and function names
33
+
34
+ Update node types and function calls as follows:
35
+
36
+ | In 0.1.1 | In 0.1.2 |
37
+ | --- | --- |
38
+ | `ExtProg.LaunchOnEvent` | `Process.LaunchOnEvent` |
39
+ | `MQTT.EventEmitter` | `MQTT.EventSender` |
40
+ | `KNX.EventEmitter` | `KNX.EventSender` |
41
+ | `Time.DelayChange` | `Time.DebounceStable` |
42
+ | `Std.Delay` | `Std.DelayOneStep` |
43
+ | `Time.IsBetween` | `Time.IsInDailyInterval` |
44
+ | `Std.OptionUnwrapOrDefault` | `Std.OptionUnwrapOr` |
45
+
46
+ #### Attribute names
47
+
48
+ Separate qualified attribute names with `.` instead of `::`.
49
+
50
+ #### Library settings
51
+
52
+ String settings are now library enums. For example, replace
53
+ `ActiveState: "Low"` with `ActiveState: GPIO.ActiveState.Low`:
54
+
55
+ | Node type | Parameter | Enum type |
56
+ | --- | --- | --- |
57
+ | `GPIO.Output` | `ActiveState` | `GPIO.ActiveState` |
58
+ | `GPIO.Output` | `Drive` | `GPIO.Drive` |
59
+ | `GPIO.Output` | `Bias` | `GPIO.Bias` |
60
+ | `Std.DetectEdge` | `EdgeType` | `Std.EdgeType` |
61
+ | `KNX.Connection` | `Protocol` | `KNX.Protocol` |
62
+ | MQTT nodes | `Format` | `MQTT.Format` |
63
+
64
+ Member names match the former strings.
65
+
66
+ `TwoN.Connection` requires an absolute `UsernamePasswordFile`. To read a
67
+ file beside the calling source file, use:
68
+
69
+ ```wirely
70
+ UsernamePasswordFile:
71
+ Path.Join(Path.Parent(Path.SourceFile()), "credentials.txt"),
72
+ ```
73
+
74
+ #### Time values
75
+
76
+ Replace `TimeOfDay_AddWrap(time, offset)` with
77
+ `TimeOfDay.WrappingAdd(time, duration)`, for example
78
+ `TimeOfDay.WrappingAdd("23:30", "PT1H")`.
79
+
80
+ `TimeOfDay` strings use two-digit hours and minutes, optionally followed by
81
+ seconds and up to nine fraction digits, such as `"08:00:30.125"`. `"24:00"`
82
+ is the end of the day.
83
+
84
+ Replace `MonotonicTime.Invalid` with `Option[MonotonicTime]` and `None`.
85
+ `Time.MonotonicTimeReached` takes `value Option[MonotonicTime]`.
86
+
87
+ #### Stricter checks
88
+
89
+ - Every input except `multi` inputs needs a source, including resource
90
+ inputs that nothing uses.
91
+ - Each state and temporary variable needs exactly one producing procedure.
92
+ - `assert` is a keyword; write `r#assert` to use it as an identifier.
93
+
94
+ ### Added
95
+
96
+ - Write procedure bodies in Wirely, in node types or at the program root.
97
+ Bodies assign each output once and support `let`, `if`, and expressions:
98
+
99
+ ```wirely
100
+ procedure run
101
+ depends on Enabled, default input as input
102
+ produces default output as output
103
+ {
104
+ output = if Enabled { input } else { Fallback };
105
+ }
106
+ ```
107
+
108
+ See [procedure bodies](doc/language.md#procedure-bodies).
109
+ - Declare compile-time constants with `constant Name: Type = expression;`
110
+ and check conditions with `assert condition, "message";`.
111
+ - Expressions support ordering comparisons, equality for all value types
112
+ (and for types at compile time), struct field access, and compile-time
113
+ integer arithmetic. Integer types provide wrapping, saturating, and
114
+ checked arithmetic and conversions such as `uint8.CheckedFrom(value)`.
115
+ Options support `IsSome`, `IsNone`, `UnwrapOr(fallback)`,
116
+ `if let Some(x) = value { ... } else { ... }`, and compile-time
117
+ `Unwrap()`.
118
+ - Declare `native function` and `native constant function` in libraries.
119
+ See [native functions](doc/language.md#native-functions).
120
+ - The `std` library provides arithmetic and conversions for `Duration`,
121
+ `MonotonicTime`, and `TimeOfDay`. See [value types](doc/value-types.md).
122
+ - The `path` library provides `Path.Join`, `Path.Parent`, and
123
+ `Path.SourceFile`.
124
+ - `wirely run-service --state-directory DIR` serves local control sockets
125
+ for status, pausing, stepping, and state snapshots; `wirely client` sends
126
+ these requests. See
127
+ [local sockets](doc/control-protocol.md#local-sockets).
128
+ - `wirely.compiler.attribute_editing` adds, sets, and removes attributes
129
+ while preserving source formatting.
130
+
131
+ ## 0.1.1 - 2026-10-04
132
+
133
+ ### Breaking changes and migration
134
+
135
+ #### Library names
136
+
137
+ Update node types, named arguments, and connection endpoints as follows.
138
+ Names are case-sensitive.
139
+
140
+ | In 0.1.0 | In 0.1.1 |
141
+ | --- | --- |
142
+ | `Std.DebugInput` | `Std.DebugValueSource` |
143
+ | `Std.DebugPrinter` | `Std.DebugValuePrinter` |
144
+ | `MQTT.Server` | `MQTT.Connection` |
145
+ | MQTT client input `Server` | `Broker` |
146
+ | `TwoN.Device` node type | `TwoN.Connection` |
147
+ | TwoN connection parameter `Hostname` | `Host` |
148
+ | `Time.TriggerAt` parameter `Type` | `OutputType` |
149
+ | `Time.TriggerAt` parameter `Value` | `OutputValue` |
150
+ | `Time.DelayChange` parameter `Time` | `Duration` |
151
+ | `Std.Delay` parameter `initialValue` | `InitialValue` |
152
+ | `Time.IsBetween` parameters `start`, `end` | `Start`, `End` |
153
+
154
+ Rename the parameter `type` to `Type` on `Std.Delay`,
155
+ `Std.TwoStageValueForward`, `Std.DebugValuePrinter`, `Std.DebugEventPrinter`,
156
+ `Std.DebugValueSource`, and `Std.DebugEventSource`.
157
+
158
+ The MQTT input rename applies to `ValueOptionProvider`, `ValueProvider`,
159
+ `EventEmitter`, and `EventReceiver`. For example, change
160
+ `connect broker -> publisher.Server;` to
161
+ `connect broker -> publisher.Broker;`.
162
+
163
+ #### Resource connectors
164
+
165
+ Replace integration-specific connector kinds in custom node declarations:
166
+
167
+ | In 0.1.0 | In 0.1.1 |
168
+ | --- | --- |
169
+ | `knx_bus` | `resource KNX.Bus` |
170
+ | `mqtt_server` | `resource MQTT.Broker` |
171
+ | `two_n_device` | `resource TwoN.Device` |
172
+
173
+ Custom libraries can declare their own opaque resources with
174
+ `resource type Name;`. See [resource connectors](doc/language.md#opaque-resource-connectors).
175
+
176
+ #### Runtime types
177
+
178
+ `String` and `List[T]` are now enforced as parameter-only types, including
179
+ options containing them.
180
+
181
+ #### Procedure bindings and state dependencies
182
+
183
+ Add `as "key"` aliases to implicit connectors and complex references in
184
+ `depends on` and `produces`. Simple identifiers use their own names.
185
+ Procedures that read previous state must declare that dependency explicitly;
186
+ state changes only rerun procedures that depend on them. For example:
187
+
188
+ ```wirely
189
+ native procedure run
190
+ depends on implicit input as "input", last_value.old as "previous"
191
+ produces implicit output as "output", last_value as "next";
192
+ ```
193
+
194
+ See [state and execution](doc/language.md#state-and-execution).
195
+
196
+ #### String escapes
197
+
198
+ Quoted strings use Rust-style escapes. Replace Python-style Unicode escapes
199
+ such as `\u0041` or `\U0001F600` with `\u{41}` or `\u{1F600}`. Use raw
200
+ strings such as `r"C:\logs\wirely"` to preserve literal backslashes.
201
+
202
+ ### Added
203
+
204
+ - Integer literals accept unary `+` and `-`, including hexadecimal and
205
+ octal literals, such as `-42`, `-0x2a`, and `-0o52`.
206
+ - Use `()` for unit values and `Some(value)` for present optional values;
207
+ `None` represents absence.
208
+ - Declare named enum types with explicit integer representations and member
209
+ values, and use qualified literals such as `Mode.Heat`:
210
+
211
+ ```wirely
212
+ enum type Mode: uint8 {
213
+ Off = 0,
214
+ Heat = 1,
215
+ }
216
+ ```
217
+
218
+ - Declare named struct types and construct values by field name:
219
+
220
+ ```wirely
221
+ struct type Reading {
222
+ temperature: int16,
223
+ valid: boolean,
224
+ }
225
+ node reading: Std.Constant(
226
+ Type = Reading,
227
+ Value = Reading { valid: true, temperature: 215 }
228
+ );
229
+ ```
230
+
231
+ See [types and literals](doc/language.md#parameters-types-and-literals).
232
+ - Connect previous-step state directly with
233
+ `connect last_value.old -> target;`. Use `last_value.new` in connections
234
+ or procedure dependencies to read this step's value after its writer.
235
+ `.old` reads the initial value on the first step.
236
+ - Attach compiler attributes with `#[...]` and `#![...]`. Set node
237
+ coordinates with `#[position(x = 120, y = -40.5)]` before a node
238
+ declaration. See [attributes](doc/language.md#attributes).
239
+
240
+ ## 0.1.0
241
+
242
+ Initial release: typed node graphs, value and event connections, stateful
243
+ execution, composite and native nodes, and bundled KNX, MQTT, GPIO, 2N,
244
+ time, memory, CSV, and external-command libraries.
@@ -1,10 +1,12 @@
1
+ include CHANGELOG.md
1
2
  recursive-include doc *.md
2
3
  recursive-include examples *.wrl
3
4
  recursive-include test *.py *.wrl
4
- include test/username_password.txt
5
+ include test/wrl/username_password.txt
5
6
  include tools/build-pex
6
7
  include tools/git_write_wd_tree.py
7
8
  include tools/run-tests
9
+ include tools/run-tests-dependencies
8
10
  include tools/setup-venv
9
11
  include tools/test-gitlab-ci
10
12
  include tools/wirely
@@ -1,33 +1,37 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wirely
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Node-based language and runtime for low-level home automation
5
5
  Author: Steffen Kieß
6
6
  License: MIT
7
+ Project-URL: Repository, https://github.com/steffen-kiess/wirely
8
+ Project-URL: Issues, https://github.com/steffen-kiess/wirely/issues
7
9
  Requires-Python: >=3.11
8
10
  Description-Content-Type: text/markdown
9
11
  License-File: LICENSE
10
- Requires-Dist: lark
11
- Requires-Dist: sdnotify
12
+ Requires-Dist: lark>=1.1.5
13
+ Requires-Dist: sdnotify>=0.3.0
14
+ Requires-Dist: cbor2>=5.4.5
12
15
  Provides-Extra: knx
13
16
  Requires-Dist: xknx<4,>=3.0; extra == "knx"
14
17
  Provides-Extra: mqtt
15
18
  Requires-Dist: aiomqtt<3,>=2.3; extra == "mqtt"
16
19
  Provides-Extra: two-n
17
20
  Requires-Dist: aiohttp<4,>=3.12; extra == "two-n"
18
- Requires-Dist: cryptography; extra == "two-n"
21
+ Requires-Dist: cryptography>=38.0.0; extra == "two-n"
19
22
  Provides-Extra: graphviz
20
- Requires-Dist: graphviz; extra == "graphviz"
23
+ Requires-Dist: graphviz>=0.20.1; extra == "graphviz"
21
24
  Provides-Extra: gpio
22
25
  Requires-Dist: gpiod<3,>=2.1; extra == "gpio"
23
26
  Provides-Extra: all
24
27
  Requires-Dist: wirely[gpio,graphviz,knx,mqtt,two-n]; extra == "all"
25
28
  Provides-Extra: test
26
- Requires-Dist: pyOpenSSL; extra == "test"
29
+ Requires-Dist: pyOpenSSL>=23.0.0; extra == "test"
27
30
  Provides-Extra: pex
28
31
  Requires-Dist: pex; extra == "pex"
29
32
  Provides-Extra: dev
30
33
  Requires-Dist: wirely[pex,test]; extra == "dev"
34
+ Requires-Dist: uv; extra == "dev"
31
35
  Dynamic: license-file
32
36
 
33
37
  Wirely
@@ -42,7 +46,8 @@ these signals; it does not model higher-level concepts such as rooms,
42
46
  as Home Assistant does.
43
47
 
44
48
  See the [language documentation](doc/language.md) for how to write Wirely
45
- programs.
49
+ programs and the [changelog](CHANGELOG.md) for release notes and migration
50
+ steps.
46
51
 
47
52
  Installation
48
53
  ------------
@@ -62,6 +67,9 @@ wirely compile program.wrl
62
67
  python3 -m wirely compile program.wrl
63
68
  ```
64
69
 
70
+ Use `wirely compile --dump-program program.wrl` to print the compiled
71
+ runtime program, including its variables, configuration, and procedures.
72
+
65
73
  Install optional integrations as needed:
66
74
 
67
75
  ```
@@ -84,7 +92,7 @@ checkout launchers:
84
92
 
85
93
  ```
86
94
  tools/setup-venv
87
- tools/wirely compile test/simple.wrl
95
+ tools/wirely compile test/wrl/simple.wrl
88
96
  tools/run-tests
89
97
  ```
90
98
 
@@ -92,3 +100,41 @@ The launchers use `venv/bin/python` when available. Otherwise, they warn and
92
100
  use the current Python interpreter. `tools/wirely` accepts the same arguments
93
101
  as `wirely` and runs the source in this checkout from any working directory.
94
102
  The test suite also requires `knxd` and `mosquitto`.
103
+
104
+ Pass test names to run a selection, and add `--timings` to list durations
105
+ slowest first:
106
+
107
+ ```
108
+ tools/run-tests --timings unit/types unit/equality
109
+ ```
110
+
111
+ To check that compilation does not depend on declaration order, set
112
+ `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.
118
+
119
+ ```
120
+ WIRELY_COMPILER_SHUFFLE_SEED=1 tools/run-tests
121
+ ```
122
+
123
+ Test dependency and Python versions in temporary environments:
124
+
125
+ ```
126
+ tools/run-tests-dependencies --versions min --python min
127
+ tools/run-tests-dependencies --versions max --python max
128
+ tools/run-tests-dependencies --versions all-min --python 3.11
129
+ ```
130
+
131
+ `--versions` defaults to `min`: minimum direct dependencies, with latest
132
+ compatible transitive dependencies. `all-min` also minimizes transitive
133
+ dependencies; `max` selects the newest compatible dependency set.
134
+
135
+ `--python` accepts a uv version request or an executable name/path and
136
+ defaults to the interpreter running the script. `min` selects the latest
137
+ compatible patch of the oldest supported CPython minor; `max` selects the
138
+ newest compatible stable CPython available through the installed uv.
139
+ uv can download missing interpreters. `tools/run-tests --python PATH` runs
140
+ tests using a specified Python executable.
@@ -10,7 +10,8 @@ these signals; it does not model higher-level concepts such as rooms,
10
10
  as Home Assistant does.
11
11
 
12
12
  See the [language documentation](doc/language.md) for how to write Wirely
13
- programs.
13
+ programs and the [changelog](CHANGELOG.md) for release notes and migration
14
+ steps.
14
15
 
15
16
  Installation
16
17
  ------------
@@ -30,6 +31,9 @@ wirely compile program.wrl
30
31
  python3 -m wirely compile program.wrl
31
32
  ```
32
33
 
34
+ Use `wirely compile --dump-program program.wrl` to print the compiled
35
+ runtime program, including its variables, configuration, and procedures.
36
+
33
37
  Install optional integrations as needed:
34
38
 
35
39
  ```
@@ -52,7 +56,7 @@ checkout launchers:
52
56
 
53
57
  ```
54
58
  tools/setup-venv
55
- tools/wirely compile test/simple.wrl
59
+ tools/wirely compile test/wrl/simple.wrl
56
60
  tools/run-tests
57
61
  ```
58
62
 
@@ -60,3 +64,41 @@ The launchers use `venv/bin/python` when available. Otherwise, they warn and
60
64
  use the current Python interpreter. `tools/wirely` accepts the same arguments
61
65
  as `wirely` and runs the source in this checkout from any working directory.
62
66
  The test suite also requires `knxd` and `mosquitto`.
67
+
68
+ Pass test names to run a selection, and add `--timings` to list durations
69
+ slowest first:
70
+
71
+ ```
72
+ tools/run-tests --timings unit/types unit/equality
73
+ ```
74
+
75
+ To check that compilation does not depend on declaration order, set
76
+ `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.
82
+
83
+ ```
84
+ WIRELY_COMPILER_SHUFFLE_SEED=1 tools/run-tests
85
+ ```
86
+
87
+ Test dependency and Python versions in temporary environments:
88
+
89
+ ```
90
+ tools/run-tests-dependencies --versions min --python min
91
+ tools/run-tests-dependencies --versions max --python max
92
+ tools/run-tests-dependencies --versions all-min --python 3.11
93
+ ```
94
+
95
+ `--versions` defaults to `min`: minimum direct dependencies, with latest
96
+ compatible transitive dependencies. `all-min` also minimizes transitive
97
+ dependencies; `max` selects the newest compatible dependency set.
98
+
99
+ `--python` accepts a uv version request or an executable name/path and
100
+ defaults to the interpreter running the script. `min` selects the latest
101
+ compatible patch of the oldest supported CPython minor; `max` selects the
102
+ newest compatible stable CPython available through the installed uv.
103
+ uv can download missing interpreters. `tools/run-tests --python PATH` runs
104
+ tests using a specified Python executable.
@@ -0,0 +1,17 @@
1
+ # Wirely documentation
2
+
3
+ Wirely programs are graphs of typed nodes written in `.wrl` files. Start with
4
+ the [language guide](language.md) to learn how to declare nodes and connect
5
+ them. Then use the [library reference](libraries.md) to find the nodes supplied
6
+ with Wirely. The [value type reference](value-types.md) describes the types
7
+ used by parameters, connectors, and state.
8
+
9
+ The [binary program format proposal](bytecode-format.md) describes program
10
+ tables, value encodings, and optional debugging information.
11
+
12
+ For `.wrl` formatting and naming, follow the
13
+ [Wirely style guide](wirely-style.md).
14
+
15
+ To implement nodes and procedures in Python, use the
16
+ [native Python implementation guide](native-python.md). For Python
17
+ contributions, follow the [Python style guide](python-style.md).