openprocess 0.7.1__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.
- {openprocess-0.7.1/openprocess.egg-info → openprocess-0.8.0}/PKG-INFO +21 -18
- {openprocess-0.7.1 → openprocess-0.8.0}/README.md +20 -17
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/__init__.py +1 -1
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/library.py +2 -1
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/runner.py +7 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/workflow.py +16 -4
- openprocess-0.8.0/openprocess/gui/flow/__init__.py +9 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/flow/page.py +200 -196
- openprocess-0.8.0/openprocess/gui/flow/picker.py +172 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/flow/viewers.py +31 -4
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/app.py +7 -129
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/cpn_page.py +0 -5
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/log_page.py +1 -15
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/model_page.py +1 -5
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/style.py +14 -6
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/computed.py +1 -1
- {openprocess-0.7.1 → openprocess-0.8.0/openprocess.egg-info}/PKG-INFO +21 -18
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess.egg-info/SOURCES.txt +1 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_flow.py +25 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_flow_gui.py +174 -7
- openprocess-0.7.1/openprocess/gui/flow/__init__.py +0 -8
- {openprocess-0.7.1 → openprocess-0.8.0}/LICENSE +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/cpnpy/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/analysis/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/analysis/state_space.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/analysis/state_space_process.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/cli.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/1 Petri nets/Exercise 1.1 Order handling/answer.pnml +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/1 Petri nets/Exercise 1.1 Order handling/question.md +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/2 Soundness/Exercise 2.1 Spot the flaw/answer.pnml +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/2 Soundness/Exercise 2.1 Spot the flaw/net.pnml +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/2 Soundness/Exercise 2.1 Spot the flaw/question.md +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/3 Discovery/Exercise 3.1 The alpha-algorithm/log.txt +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/3 Discovery/Exercise 3.1 The alpha-algorithm/question.md +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/4 Regions/Exercise 4.1 Regions of a transition system/question.md +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/4 Regions/Exercise 4.1 Regions of a transition system/ts.txt +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/5 Markings/Exercise 5.1 Markings and matrices/net.pnml +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/5 Markings/Exercise 5.1 Markings and matrices/question.md +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/6 Inductive Miner/Exercise 6.1 Cuts and trees/log.txt +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/6 Inductive Miner/Exercise 6.1 Cuts and trees/question.md +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/log.txt +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/m1.pnml +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/m2.pnml +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/m3.pnml +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/net.pnml +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/7 Conformance/Exercise 7.1 Replay, alignments and workflows/question.md +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/exercises/pack.md +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/box.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/check.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/compare.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/cpn.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/discover.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/filter.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/input.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/output.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/predict.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/science.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/boxes/sweeps.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/convert.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/datasets.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/explain.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/record.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/sweep.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/flow/types.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/app.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/arc_editing.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/canvas.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/flow/canvas.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/flow/templates.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/items.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/learn/answer_boxes.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/learn/concealment.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/learn/mode.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/panning.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/resources/openprocess-icon.png +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/__main__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/charts.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/compare_page.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/definition_view.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/derivation_view.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/documents.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/dotted_chart.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/file_dialogs.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/filter_dialog.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/graph_builders.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/graph_view.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/instances.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/log_editor.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/markdown_view.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/mathtext.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/ml_highlighter.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/net_comparison.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/notes_overlay.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/petri_page.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/regions_view.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/sidebar.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/tool_icons.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/updates.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/widgets.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/workers.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/studio/workspace.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/theme.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/gui/tidy.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/io/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/io/cpn_reader.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/io/cpn_writer.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/answers.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/checks.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/context.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/exam.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/exercise-packs.md +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/importer.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/notation.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/pack.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/learn/sheet.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/analysis.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/columns.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/compare_nets.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/conformance/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/conformance/alignments.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/conformance/quality.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/conformance/token_replay.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/csv_import.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/definitions.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/dfg.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/discovery/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/discovery/alpha.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/discovery/heuristics.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/discovery/inductive.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/discovery/state_regions.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/filtering.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/footprint.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/invariants.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/layout.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/log.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/petrinet.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/playout.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/pm4py_bridge.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/pnml.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/processtree.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/regions.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/stats.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/structure.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/transition_system.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/mining/xes.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/ml/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/ml/ast_nodes.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/ml/builtins.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/ml/colorsets.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/ml/errors.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/ml/evaluator.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/ml/lexer.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/ml/multiset.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/ml/parser.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/ml/values.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/model/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/model/declarations.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/model/examples.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/model/net.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/model/plain.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/references.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/sim/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/sim/binding.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/sim/export.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/sim/simulator.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/teaching/__init__.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/teaching/answers.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/teaching/checks.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/teaching/pack.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess/teaching/sheet.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess.egg-info/dependency_links.txt +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess.egg-info/entry_points.txt +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess.egg-info/requires.txt +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/openprocess.egg-info/top_level.txt +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/pyproject.toml +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/setup.cfg +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_arc_editing.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_colorsets.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_columns.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_cpn_course_model.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_definitions.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_exercises_gui.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_hierarchy.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_io.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_learn.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_learn_gui.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_log_editing.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_mining.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_ml.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_multiset.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_regions.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_rename.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_simulation.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_state_space.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_studio_gui.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_teaching.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_tidy.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_updates.py +0 -0
- {openprocess-0.7.1 → openprocess-0.8.0}/tests/test_wf_structure.py +0 -0
- {openprocess-0.7.1 → 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.
|
|
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
|
-
- **
|
|
758
|
-
|
|
759
|
-
|
|
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**
|
|
764
|
-
the
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
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
|
-
- **
|
|
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
|
|
791
|
-
|
|
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
|
-
- **
|
|
719
|
-
|
|
720
|
-
|
|
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**
|
|
725
|
-
the
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
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
|
-
- **
|
|
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
|
|
752
|
-
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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*:
|
|
420
|
-
box
|
|
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
|
+
"""
|