openprocess 0.7.2__tar.gz → 0.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. {openprocess-0.7.2/openprocess.egg-info → openprocess-0.8.0}/PKG-INFO +21 -18
  2. {openprocess-0.7.2 → openprocess-0.8.0}/README.md +20 -17
  3. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/__init__.py +1 -1
  4. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/library.py +2 -1
  5. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/runner.py +7 -0
  6. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/workflow.py +16 -4
  7. openprocess-0.8.0/openprocess/gui/flow/__init__.py +9 -0
  8. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/flow/page.py +151 -192
  9. openprocess-0.8.0/openprocess/gui/flow/picker.py +172 -0
  10. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/flow/viewers.py +31 -4
  11. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/app.py +7 -129
  12. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/cpn_page.py +0 -5
  13. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/log_page.py +1 -15
  14. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/model_page.py +1 -5
  15. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/style.py +14 -6
  16. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/computed.py +1 -1
  17. {openprocess-0.7.2 → openprocess-0.8.0/openprocess.egg-info}/PKG-INFO +21 -18
  18. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess.egg-info/SOURCES.txt +1 -0
  19. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_flow.py +25 -0
  20. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_flow_gui.py +137 -7
  21. openprocess-0.7.2/openprocess/gui/flow/__init__.py +0 -8
  22. {openprocess-0.7.2 → openprocess-0.8.0}/LICENSE +0 -0
  23. {openprocess-0.7.2 → openprocess-0.8.0}/cpnpy/__init__.py +0 -0
  24. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/analysis/__init__.py +0 -0
  25. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/analysis/state_space.py +0 -0
  26. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/analysis/state_space_process.py +0 -0
  27. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/cli.py +0 -0
  28. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/1 Petri nets/Exercise 1.1 Order handling/answer.pnml +0 -0
  29. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/1 Petri nets/Exercise 1.1 Order handling/question.md +0 -0
  30. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/2 Soundness/Exercise 2.1 Spot the flaw/answer.pnml +0 -0
  31. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/2 Soundness/Exercise 2.1 Spot the flaw/net.pnml +0 -0
  32. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/2 Soundness/Exercise 2.1 Spot the flaw/question.md +0 -0
  33. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/3 Discovery/Exercise 3.1 The alpha-algorithm/log.txt +0 -0
  34. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/3 Discovery/Exercise 3.1 The alpha-algorithm/question.md +0 -0
  35. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/4 Regions/Exercise 4.1 Regions of a transition system/question.md +0 -0
  36. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/4 Regions/Exercise 4.1 Regions of a transition system/ts.txt +0 -0
  37. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/5 Markings/Exercise 5.1 Markings and matrices/net.pnml +0 -0
  38. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/5 Markings/Exercise 5.1 Markings and matrices/question.md +0 -0
  39. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/6 Inductive Miner/Exercise 6.1 Cuts and trees/log.txt +0 -0
  40. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/6 Inductive Miner/Exercise 6.1 Cuts and trees/question.md +0 -0
  41. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/log.txt +0 -0
  42. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/m1.pnml +0 -0
  43. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/m2.pnml +0 -0
  44. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/m3.pnml +0 -0
  45. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/net.pnml +0 -0
  46. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/question.md +0 -0
  47. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/exercises/pack.md +0 -0
  48. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/__init__.py +0 -0
  49. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/box.py +0 -0
  50. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/__init__.py +0 -0
  51. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/check.py +0 -0
  52. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/compare.py +0 -0
  53. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/cpn.py +0 -0
  54. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/discover.py +0 -0
  55. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/filter.py +0 -0
  56. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/input.py +0 -0
  57. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/output.py +0 -0
  58. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/predict.py +0 -0
  59. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/science.py +0 -0
  60. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/boxes/sweeps.py +0 -0
  61. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/convert.py +0 -0
  62. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/datasets.py +0 -0
  63. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/explain.py +0 -0
  64. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/record.py +0 -0
  65. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/sweep.py +0 -0
  66. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/flow/types.py +0 -0
  67. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/__init__.py +0 -0
  68. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/app.py +0 -0
  69. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/arc_editing.py +0 -0
  70. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/canvas.py +0 -0
  71. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/flow/canvas.py +0 -0
  72. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/flow/templates.py +0 -0
  73. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/items.py +0 -0
  74. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/learn/answer_boxes.py +0 -0
  75. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/learn/concealment.py +0 -0
  76. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/learn/mode.py +0 -0
  77. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/panning.py +0 -0
  78. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/resources/openprocess-icon.png +0 -0
  79. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/__init__.py +0 -0
  80. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/__main__.py +0 -0
  81. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/charts.py +0 -0
  82. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/compare_page.py +0 -0
  83. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/definition_view.py +0 -0
  84. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/derivation_view.py +0 -0
  85. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/documents.py +0 -0
  86. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/dotted_chart.py +0 -0
  87. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/file_dialogs.py +0 -0
  88. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/filter_dialog.py +0 -0
  89. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/graph_builders.py +0 -0
  90. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/graph_view.py +0 -0
  91. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/instances.py +0 -0
  92. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/log_editor.py +0 -0
  93. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/markdown_view.py +0 -0
  94. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/mathtext.py +0 -0
  95. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/ml_highlighter.py +0 -0
  96. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/net_comparison.py +0 -0
  97. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/notes_overlay.py +0 -0
  98. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/petri_page.py +0 -0
  99. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/regions_view.py +0 -0
  100. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/sidebar.py +0 -0
  101. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/tool_icons.py +0 -0
  102. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/updates.py +0 -0
  103. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/widgets.py +0 -0
  104. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/workers.py +0 -0
  105. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/studio/workspace.py +0 -0
  106. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/theme.py +0 -0
  107. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/gui/tidy.py +0 -0
  108. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/io/__init__.py +0 -0
  109. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/io/cpn_reader.py +0 -0
  110. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/io/cpn_writer.py +0 -0
  111. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/__init__.py +0 -0
  112. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/answers.py +0 -0
  113. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/checks.py +0 -0
  114. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/context.py +0 -0
  115. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/exam.py +0 -0
  116. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/exercise-packs.md +0 -0
  117. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/importer.py +0 -0
  118. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/notation.py +0 -0
  119. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/pack.py +0 -0
  120. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/learn/sheet.py +0 -0
  121. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/__init__.py +0 -0
  122. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/analysis.py +0 -0
  123. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/columns.py +0 -0
  124. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/compare_nets.py +0 -0
  125. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/conformance/__init__.py +0 -0
  126. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/conformance/alignments.py +0 -0
  127. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/conformance/quality.py +0 -0
  128. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/conformance/token_replay.py +0 -0
  129. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/csv_import.py +0 -0
  130. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/definitions.py +0 -0
  131. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/dfg.py +0 -0
  132. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/discovery/__init__.py +0 -0
  133. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/discovery/alpha.py +0 -0
  134. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/discovery/heuristics.py +0 -0
  135. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/discovery/inductive.py +0 -0
  136. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/discovery/state_regions.py +0 -0
  137. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/filtering.py +0 -0
  138. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/footprint.py +0 -0
  139. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/invariants.py +0 -0
  140. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/layout.py +0 -0
  141. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/log.py +0 -0
  142. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/petrinet.py +0 -0
  143. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/playout.py +0 -0
  144. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/pm4py_bridge.py +0 -0
  145. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/pnml.py +0 -0
  146. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/processtree.py +0 -0
  147. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/regions.py +0 -0
  148. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/stats.py +0 -0
  149. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/structure.py +0 -0
  150. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/transition_system.py +0 -0
  151. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/mining/xes.py +0 -0
  152. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/ml/__init__.py +0 -0
  153. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/ml/ast_nodes.py +0 -0
  154. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/ml/builtins.py +0 -0
  155. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/ml/colorsets.py +0 -0
  156. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/ml/errors.py +0 -0
  157. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/ml/evaluator.py +0 -0
  158. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/ml/lexer.py +0 -0
  159. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/ml/multiset.py +0 -0
  160. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/ml/parser.py +0 -0
  161. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/ml/values.py +0 -0
  162. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/model/__init__.py +0 -0
  163. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/model/declarations.py +0 -0
  164. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/model/examples.py +0 -0
  165. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/model/net.py +0 -0
  166. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/model/plain.py +0 -0
  167. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/references.py +0 -0
  168. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/sim/__init__.py +0 -0
  169. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/sim/binding.py +0 -0
  170. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/sim/export.py +0 -0
  171. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/sim/simulator.py +0 -0
  172. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/teaching/__init__.py +0 -0
  173. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/teaching/answers.py +0 -0
  174. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/teaching/checks.py +0 -0
  175. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/teaching/pack.py +0 -0
  176. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess/teaching/sheet.py +0 -0
  177. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess.egg-info/dependency_links.txt +0 -0
  178. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess.egg-info/entry_points.txt +0 -0
  179. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess.egg-info/requires.txt +0 -0
  180. {openprocess-0.7.2 → openprocess-0.8.0}/openprocess.egg-info/top_level.txt +0 -0
  181. {openprocess-0.7.2 → openprocess-0.8.0}/pyproject.toml +0 -0
  182. {openprocess-0.7.2 → openprocess-0.8.0}/setup.cfg +0 -0
  183. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_arc_editing.py +0 -0
  184. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_colorsets.py +0 -0
  185. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_columns.py +0 -0
  186. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_cpn_course_model.py +0 -0
  187. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_definitions.py +0 -0
  188. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_exercises_gui.py +0 -0
  189. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_hierarchy.py +0 -0
  190. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_io.py +0 -0
  191. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_learn.py +0 -0
  192. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_learn_gui.py +0 -0
  193. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_log_editing.py +0 -0
  194. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_mining.py +0 -0
  195. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_ml.py +0 -0
  196. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_multiset.py +0 -0
  197. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_regions.py +0 -0
  198. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_rename.py +0 -0
  199. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_simulation.py +0 -0
  200. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_state_space.py +0 -0
  201. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_studio_gui.py +0 -0
  202. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_teaching.py +0 -0
  203. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_tidy.py +0 -0
  204. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_updates.py +0 -0
  205. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_wf_structure.py +0 -0
  206. {openprocess-0.7.2 → openprocess-0.8.0}/tests/test_workspace.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openprocess
3
- Version: 0.7.2
3
+ Version: 0.8.0
4
4
  Summary: Process mining, Petri nets and workflows in one open app: every algorithm visible, every result reproducible, every step teachable
5
5
  Author: Sam Struthers
6
6
  License: MIT
@@ -754,19 +754,26 @@ Miner, a fitness check), *Compare discovery* (three miners side by side),
754
754
  confidence* (bootstrap intervals, a test and a plot; needs the `science`
755
755
  extra) and *Predict the next activity*. Or start empty.
756
756
 
757
- - **Boxes** are listed on the left in groups (Input, Filter, Discover, Check,
758
- Compare, Output, Science, Predict, Coloured nets, Sweep, Yours) with a
759
- search field. Click one to add it, or double-click the canvas.
757
+ - **The page is the canvas.** Three buttons in its header: **+ Add box**,
758
+ **Run ▶**, and **⋯** for Re-run, Record, Export experiment and Save.
759
+ - **+ Add box** (or a double-click on the canvas) opens every box, by group:
760
+ the six core groups side by side (Input, Filter, Discover, Check, Compare,
761
+ Output) and one line for the rest (Science, Predict, Coloured nets, Sweep,
762
+ your own boxes) with *Show all*. Type to search them all: "alpha" finds the
763
+ α-algorithm; Enter adds the first match.
760
764
  - **Connect** by dragging from the dot on the right of a box: while you drag,
761
765
  only the inputs that take that kind of result light up, so a wrong
762
766
  connection cannot be made. Click a wire and press Delete to remove it.
763
- - **Click a box** for the side panel: **Result** (the net, the log's figures,
764
- the table, the figure), **How** (what the box reported: notes, intermediate
765
- values, the derivation), **Code** (the box's few lines and, under them, the
766
- actual algorithm it calls: the α-algorithm's eight steps, the Inductive
767
- Miner's cuts, with the work each follows and *Whole file* for the module)
768
- and **Settings** (a control per setting; *Sweep* a number over a range).
769
- **⤢** opens the tab in a window of its own.
767
+ - **Click a box** and the side panel appears beside the canvas, on
768
+ **Result** (the net, the log's figures, the table, the figure; a log's
769
+ Result has *Open as log ›* for the dotted chart, process map, footprint,
770
+ variants and cases). Its other tabs: **How** (what the box reported: notes,
771
+ intermediate values, the derivation), **Code** (the box's few lines and,
772
+ under them, the actual algorithm it calls: the α-algorithm's eight steps,
773
+ the Inductive Miner's cuts, with the work each follows and *Whole file* for
774
+ the module) and **Settings** (a control per setting; *Sweep* a number over
775
+ a range). **⤢** opens the tab in a window of its own; **✕**, or a click
776
+ on the canvas, puts the panel away.
770
777
  - **Only what changed runs again.** Every box shows a status dot: waiting,
771
778
  running, done, failed (the error is on the Result tab; the rest keeps
772
779
  working), or waiting for your OK.
@@ -780,16 +787,12 @@ extra) and *Predict the next activity*. Or start empty.
780
787
  connections that reach outside; double-click it to open its own canvas,
781
788
  ⇧⌘G to ungroup. *Save as a box* in the side panel writes the group to
782
789
  `boxes/`, so it is listed under *Yours* and can be used in any workflow.
783
- - **From a page**: *As a workflow* on a log's Discover tab or a model page,
784
- and *Use in a workflow* on the net canvas, open a workflow with that file
785
- as its source.
786
- - **Export experiment** writes a zip with the workflow file and its record,
790
+ - **Export experiment** (under ⋯) writes a zip with the workflow file and its record,
787
791
  the inputs, your boxes, every result as a file (CSV, PNML, SVG, XES), a
788
792
  `requirements.lock` and a README that says what was run: supplementary
789
793
  material for a paper, which `openprocess run --check` can verify.
790
- - **The three panels** (box list, canvas, side panel) resize by dragging the
791
- gaps, hide with *⇤ Boxes* / *Panel ⇥* or the View menu, and come back with
792
- *View ▸ Reset Workflow Layout*.
794
+ - **The side panel** resizes by dragging the gap beside it; double-click the
795
+ gap, or *View ▸ Reset Workflow Layout*, for its default width.
793
796
 
794
797
  ## Workflows from Python
795
798
 
@@ -715,19 +715,26 @@ Miner, a fitness check), *Compare discovery* (three miners side by side),
715
715
  confidence* (bootstrap intervals, a test and a plot; needs the `science`
716
716
  extra) and *Predict the next activity*. Or start empty.
717
717
 
718
- - **Boxes** are listed on the left in groups (Input, Filter, Discover, Check,
719
- Compare, Output, Science, Predict, Coloured nets, Sweep, Yours) with a
720
- search field. Click one to add it, or double-click the canvas.
718
+ - **The page is the canvas.** Three buttons in its header: **+ Add box**,
719
+ **Run ▶**, and **⋯** for Re-run, Record, Export experiment and Save.
720
+ - **+ Add box** (or a double-click on the canvas) opens every box, by group:
721
+ the six core groups side by side (Input, Filter, Discover, Check, Compare,
722
+ Output) and one line for the rest (Science, Predict, Coloured nets, Sweep,
723
+ your own boxes) with *Show all*. Type to search them all: "alpha" finds the
724
+ α-algorithm; Enter adds the first match.
721
725
  - **Connect** by dragging from the dot on the right of a box: while you drag,
722
726
  only the inputs that take that kind of result light up, so a wrong
723
727
  connection cannot be made. Click a wire and press Delete to remove it.
724
- - **Click a box** for the side panel: **Result** (the net, the log's figures,
725
- the table, the figure), **How** (what the box reported: notes, intermediate
726
- values, the derivation), **Code** (the box's few lines and, under them, the
727
- actual algorithm it calls: the α-algorithm's eight steps, the Inductive
728
- Miner's cuts, with the work each follows and *Whole file* for the module)
729
- and **Settings** (a control per setting; *Sweep* a number over a range).
730
- **⤢** opens the tab in a window of its own.
728
+ - **Click a box** and the side panel appears beside the canvas, on
729
+ **Result** (the net, the log's figures, the table, the figure; a log's
730
+ Result has *Open as log ›* for the dotted chart, process map, footprint,
731
+ variants and cases). Its other tabs: **How** (what the box reported: notes,
732
+ intermediate values, the derivation), **Code** (the box's few lines and,
733
+ under them, the actual algorithm it calls: the α-algorithm's eight steps,
734
+ the Inductive Miner's cuts, with the work each follows and *Whole file* for
735
+ the module) and **Settings** (a control per setting; *Sweep* a number over
736
+ a range). **⤢** opens the tab in a window of its own; **✕**, or a click
737
+ on the canvas, puts the panel away.
731
738
  - **Only what changed runs again.** Every box shows a status dot: waiting,
732
739
  running, done, failed (the error is on the Result tab; the rest keeps
733
740
  working), or waiting for your OK.
@@ -741,16 +748,12 @@ extra) and *Predict the next activity*. Or start empty.
741
748
  connections that reach outside; double-click it to open its own canvas,
742
749
  ⇧⌘G to ungroup. *Save as a box* in the side panel writes the group to
743
750
  `boxes/`, so it is listed under *Yours* and can be used in any workflow.
744
- - **From a page**: *As a workflow* on a log's Discover tab or a model page,
745
- and *Use in a workflow* on the net canvas, open a workflow with that file
746
- as its source.
747
- - **Export experiment** writes a zip with the workflow file and its record,
751
+ - **Export experiment** (under ⋯) writes a zip with the workflow file and its record,
748
752
  the inputs, your boxes, every result as a file (CSV, PNML, SVG, XES), a
749
753
  `requirements.lock` and a README that says what was run: supplementary
750
754
  material for a paper, which `openprocess run --check` can verify.
751
- - **The three panels** (box list, canvas, side panel) resize by dragging the
752
- gaps, hide with *⇤ Boxes* / *Panel ⇥* or the View menu, and come back with
753
- *View ▸ Reset Workflow Layout*.
755
+ - **The side panel** resizes by dragging the gap beside it; double-click the
756
+ gap, or *View ▸ Reset Workflow Layout*, for its default width.
754
757
 
755
758
  ## Workflows from Python
756
759
 
@@ -48,7 +48,7 @@ from .sim.simulator import Simulator
48
48
  #: The one place the version number is written (pyproject.toml, the update
49
49
  #: check and packaging/build.py read it from here). A release is tagged
50
50
  #: "v" + this, e.g. v0.2.0.
51
- __version__ = "0.7.2"
51
+ __version__ = "0.8.0"
52
52
 
53
53
  __all__ = [
54
54
  "Arc", "BindingElement", "CPNet", "Marking", "Multiset", "Page", "Place",
@@ -28,7 +28,8 @@ from typing import Iterable
28
28
 
29
29
  from .box import Box, BoxError, BoxSpec
30
30
 
31
- #: The modules of the standard library, in the order the box list shows their groups.
31
+ #: The modules of the standard library, in the order *+ Add box* shows their groups
32
+ #: (the first six are the core groups it shows before *Show all*).
32
33
  STANDARD_MODULES = ("input", "filter", "discover", "check", "compare", "output",
33
34
  "science", "predict", "cpn", "sweeps")
34
35
  GROUP_ORDER = ("Input", "Filter", "Discover", "Check", "Compare", "Output", "Science",
@@ -260,6 +260,13 @@ class Runner:
260
260
  values.append(self._fit(value, port))
261
261
  keys.append(upstream.key + ":" + output)
262
262
  inputs[port.name] = values if port.many else values[0]
263
+ # A file not chosen yet (a box just added from the list): wait and say
264
+ # so, rather than run and fail with a traceback about None.
265
+ for setting in spec.settings:
266
+ if setting.kind == "path" and settings.get(setting.name) in (None, ""):
267
+ result.status = IDLE
268
+ result.message = f"Choose the {setting.name} in Settings"
269
+ return result
263
270
  result.key = hashlib.sha256(
264
271
  (spec.fingerprint + "|" + settings_key(settings) + "|" + "|".join(keys)).encode()).hexdigest()
265
272
  cached = self.cache.get(result.key)
@@ -102,7 +102,15 @@ class Workflow:
102
102
  title: str = "") -> Node:
103
103
  """Put a box on the canvas, with its default settings unless given."""
104
104
  spec = self.library.resolve(box)
105
- node_id = id or fresh_id()
105
+ if id is None:
106
+ # The counter is per process, so a workflow opened from a file (or
107
+ # made in an earlier session) may already hold the next number:
108
+ # take the first one it does not.
109
+ node_id = fresh_id()
110
+ while node_id in self.nodes:
111
+ node_id = fresh_id()
112
+ else:
113
+ node_id = id
106
114
  if node_id in self.nodes:
107
115
  raise WorkflowError(f"There is already a box with id {node_id!r}")
108
116
  values = spec.defaults()
@@ -188,7 +196,11 @@ class Workflow:
188
196
  raise WorkflowError(f"No box {m!r}")
189
197
  if self.group_of(m) is not None:
190
198
  raise WorkflowError("A box can be in one group only")
191
- group = Group(id or fresh_id("g"), name, list(members))
199
+ if id is None:
200
+ id = fresh_id("g")
201
+ while id in self.groups: # see add(): ids are per process
202
+ id = fresh_id("g")
203
+ group = Group(id, name, list(members))
192
204
  xs = [self.nodes[m].position[0] for m in members]
193
205
  ys = [self.nodes[m].position[1] for m in members]
194
206
  group.position = (min(xs), min(ys))
@@ -416,8 +428,8 @@ def record(function: Callable, name: str | None = None, library=None) -> Workflo
416
428
 
417
429
  class Recorded:
418
430
  """A ``@workflow`` function: still callable, with ``.workflow`` drawn on
419
- first use. One with typed parameters is also a *composite box*: in the
420
- box list it is one box, on the canvas it can be opened as a group."""
431
+ first use. One with typed parameters is also a *composite box*: under
432
+ *+ Add box* it is one box, on the canvas it can be opened as a group."""
421
433
 
422
434
  def __init__(self, fn: Callable, name: str | None, group: str) -> None:
423
435
  self.fn = fn
@@ -0,0 +1,9 @@
1
+ """The Workflows page: the workflow canvas, *+ Add box* and the side panel.
2
+
3
+ Everything here draws :mod:`openprocess.flow`; nothing in :mod:`openprocess.flow`
4
+ knows about Qt. ``canvas.py`` is the canvas (boxes, wires, dragging a
5
+ wire from a box to a box), ``picker.py`` is the *+ Add box* popover,
6
+ ``viewers.py`` shows a box's result, how it got there, its code and its
7
+ settings, ``page.py`` puts them together with the runner, and
8
+ ``templates.py`` holds the ready-made workflows.
9
+ """