chemunited 0.0.1__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.
- chemunited-0.0.1/LICENSE +21 -0
- chemunited-0.0.1/PKG-INFO +36 -0
- chemunited-0.0.1/pyproject.toml +166 -0
- chemunited-0.0.1/setup.cfg +4 -0
- chemunited-0.0.1/src/chemunited/__init__.py +3 -0
- chemunited-0.0.1/src/chemunited/__main__.py +53 -0
- chemunited-0.0.1/src/chemunited/connectivity/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/connectivity/graph.py +77 -0
- chemunited-0.0.1/src/chemunited/connectivity/online_list.py +364 -0
- chemunited-0.0.1/src/chemunited/connectivity/openapi_commands.py +248 -0
- chemunited-0.0.1/src/chemunited/draw/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/draw/graph.py +376 -0
- chemunited-0.0.1/src/chemunited/draw/tree_add.py +287 -0
- chemunited-0.0.1/src/chemunited/elements/__init__.py +3 -0
- chemunited-0.0.1/src/chemunited/elements/access.py +176 -0
- chemunited-0.0.1/src/chemunited/elements/component/__init__.py +13 -0
- chemunited-0.0.1/src/chemunited/elements/component/__test_component.py +64 -0
- chemunited-0.0.1/src/chemunited/elements/component/component_factory.py +159 -0
- chemunited-0.0.1/src/chemunited/elements/component/component_parts/__init__.py +24 -0
- chemunited-0.0.1/src/chemunited/elements/component/component_parts/connection_point.py +157 -0
- chemunited-0.0.1/src/chemunited/elements/component/component_parts/flow_channel.py +0 -0
- chemunited-0.0.1/src/chemunited/elements/component/component_parts/scene_item.py +379 -0
- chemunited-0.0.1/src/chemunited/elements/component/component_parts/svg_layer.py +90 -0
- chemunited-0.0.1/src/chemunited/elements/component/component_parts/text_element.py +22 -0
- chemunited-0.0.1/src/chemunited/elements/component/connectivity.py +56 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/__init__.py +61 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/hplccontrol_graph.py +28 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/ircontrol_graph.py +26 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/mscontrol_graph.py +28 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/nmrcontrol_graph.py +28 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/spectrum.py +50 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/assembly/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/pipes/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/pipes/distributor_graph.py +44 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/pipes/mfc_graph.py +21 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/pumps/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/pumps/syringepump_graph.py +92 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/sensors/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/technical/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/technical/multichannel_graph.py +56 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/thermal/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/valve/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/valve/rotary_valve_graph.py +92 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/valve/solenoid_valve_graph.py +164 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/common.py +45 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/customflask_graph.py +93 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/flowreactor_graph.py +99 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/glassbottle_graph.py +92 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/loop_graph.py +75 -0
- chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/vial_graph.py +211 -0
- chemunited-0.0.1/src/chemunited/elements/component/graph_item.py +625 -0
- chemunited-0.0.1/src/chemunited/elements/component/protocols/__init__.py +30 -0
- chemunited-0.0.1/src/chemunited/elements/component/widgets/__init__.py +5 -0
- chemunited-0.0.1/src/chemunited/elements/component/widgets/connectivity.py +35 -0
- chemunited-0.0.1/src/chemunited/elements/component/widgets/main.py +67 -0
- chemunited-0.0.1/src/chemunited/elements/component/widgets/properties.py +34 -0
- chemunited-0.0.1/src/chemunited/elements/compounds/__init__.py +5 -0
- chemunited-0.0.1/src/chemunited/elements/compounds/compound_dialog.py +117 -0
- chemunited-0.0.1/src/chemunited/elements/compounds/compound_list.py +285 -0
- chemunited-0.0.1/src/chemunited/elements/compounds/compounds_widget.py +44 -0
- chemunited-0.0.1/src/chemunited/elements/compounds/coolprop_lookup.py +179 -0
- chemunited-0.0.1/src/chemunited/elements/connection/__connection_test.py +128 -0
- chemunited-0.0.1/src/chemunited/elements/connection/__init__.py +17 -0
- chemunited-0.0.1/src/chemunited/elements/connection/connection.py +404 -0
- chemunited-0.0.1/src/chemunited/elements/inventory/__init__.py +5 -0
- chemunited-0.0.1/src/chemunited/elements/inventory/workspace.py +1251 -0
- chemunited-0.0.1/src/chemunited/elements/pool_commands.py +71 -0
- chemunited-0.0.1/src/chemunited/elements/reactions/__init__.py +11 -0
- chemunited-0.0.1/src/chemunited/elements/reactions/model.py +33 -0
- chemunited-0.0.1/src/chemunited/elements/reactions/reaction_dialog.py +108 -0
- chemunited-0.0.1/src/chemunited/elements/reactions/reaction_list.py +132 -0
- chemunited-0.0.1/src/chemunited/elements/reactions/reactions_widget.py +28 -0
- chemunited-0.0.1/src/chemunited/mcp/MCP_CLIENT_CONFIG.md +99 -0
- chemunited-0.0.1/src/chemunited/mcp/__init__.py +6 -0
- chemunited-0.0.1/src/chemunited/mcp/instructions.md +287 -0
- chemunited-0.0.1/src/chemunited/mcp/project_files.py +122 -0
- chemunited-0.0.1/src/chemunited/mcp/qt_bridge.py +46 -0
- chemunited-0.0.1/src/chemunited/mcp/server.py +226 -0
- chemunited-0.0.1/src/chemunited/monitor.py +237 -0
- chemunited-0.0.1/src/chemunited/monitoring/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/monitoring/execution_api_process.py +387 -0
- chemunited-0.0.1/src/chemunited/monitoring/graph.py +14 -0
- chemunited-0.0.1/src/chemunited/monitoring/pool_log_tailer.py +106 -0
- chemunited-0.0.1/src/chemunited/monitoring/process_list.py +100 -0
- chemunited-0.0.1/src/chemunited/monitoring/status_animated.py +90 -0
- chemunited-0.0.1/src/chemunited/monitoring/summary.py +728 -0
- chemunited-0.0.1/src/chemunited/orchestrator/__init__.py +5 -0
- chemunited-0.0.1/src/chemunited/orchestrator/connectivity.py +154 -0
- chemunited-0.0.1/src/chemunited/orchestrator/core.py +118 -0
- chemunited-0.0.1/src/chemunited/orchestrator/draw.py +468 -0
- chemunited-0.0.1/src/chemunited/orchestrator/execution.py +1020 -0
- chemunited-0.0.1/src/chemunited/orchestrator/inventory_state.py +158 -0
- chemunited-0.0.1/src/chemunited/orchestrator/main.py +5 -0
- chemunited-0.0.1/src/chemunited/orchestrator/orchestrator.py +5 -0
- chemunited-0.0.1/src/chemunited/orchestrator/project_file.py +1283 -0
- chemunited-0.0.1/src/chemunited/orchestrator/protocols.py +163 -0
- chemunited-0.0.1/src/chemunited/pre_run/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/pre_run/dashboard_launcher.py +695 -0
- chemunited-0.0.1/src/chemunited/pre_run/pre_run_frame.py +69 -0
- chemunited-0.0.1/src/chemunited/pre_run/process_list.py +448 -0
- chemunited-0.0.1/src/chemunited/pre_run/protocols_historic.py +231 -0
- chemunited-0.0.1/src/chemunited/pre_run/summary_window.py +235 -0
- chemunited-0.0.1/src/chemunited/project/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/project/git_manager.py +225 -0
- chemunited-0.0.1/src/chemunited/project/manifest.py +35 -0
- chemunited-0.0.1/src/chemunited/project/platform_svg.py +139 -0
- chemunited-0.0.1/src/chemunited/project/recent.py +104 -0
- chemunited-0.0.1/src/chemunited/project/session.py +217 -0
- chemunited-0.0.1/src/chemunited/project/storage.py +958 -0
- chemunited-0.0.1/src/chemunited/project/writer.py +92 -0
- chemunited-0.0.1/src/chemunited/protocols/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/protocols/graph.py +6 -0
- chemunited-0.0.1/src/chemunited/protocols/process_list.py +94 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/__init__.py +12 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/controller.py +192 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/design.py +39 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/editor.py +529 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/elements/__init__.py +7 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/elements/access_point.py +168 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/elements/status_bar.py +136 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/elements/style.py +44 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/elements/work_connection.py +606 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/elements/work_node.py +443 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/exceptions.py +6 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/naming.py +12 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/node_parameters_dialog.py +236 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/process_workflow.py +406 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/workflow_frames.py +1598 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/workflow_rules.py +140 -0
- chemunited-0.0.1/src/chemunited/protocols/workflows/workflow_widget.py +169 -0
- chemunited-0.0.1/src/chemunited/setup.py +529 -0
- chemunited-0.0.1/src/chemunited/shared/editor/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/shared/editor/base.py +181 -0
- chemunited-0.0.1/src/chemunited/shared/editor/editor.py +0 -0
- chemunited-0.0.1/src/chemunited/shared/editor/lexer.py +108 -0
- chemunited-0.0.1/src/chemunited/shared/editor/parameters/cards.py +703 -0
- chemunited-0.0.1/src/chemunited/shared/editor/parameters/drag_list.py +155 -0
- chemunited-0.0.1/src/chemunited/shared/editor/parameters/example.py +121 -0
- chemunited-0.0.1/src/chemunited/shared/editor/parameters/list.py +117 -0
- chemunited-0.0.1/src/chemunited/shared/editor/parameters/main.py +528 -0
- chemunited-0.0.1/src/chemunited/shared/editor/protocols/command.py +296 -0
- chemunited-0.0.1/src/chemunited/shared/editor/protocols/command_list.py +462 -0
- chemunited-0.0.1/src/chemunited/shared/editor/protocols/example.py +246 -0
- chemunited-0.0.1/src/chemunited/shared/editor/protocols/node_metadata.py +36 -0
- chemunited-0.0.1/src/chemunited/shared/editor/protocols/param_ref_card.py +165 -0
- chemunited-0.0.1/src/chemunited/shared/editor/protocols/script.py +419 -0
- chemunited-0.0.1/src/chemunited/shared/enums/__init__.py +10 -0
- chemunited-0.0.1/src/chemunited/shared/enums/elements_scene.py +8 -0
- chemunited-0.0.1/src/chemunited/shared/enums/protocols_enum.py +10 -0
- chemunited-0.0.1/src/chemunited/shared/enums/windows_enum.py +17 -0
- chemunited-0.0.1/src/chemunited/shared/graph/__init__.py +7 -0
- chemunited-0.0.1/src/chemunited/shared/graph/graph_core.py +190 -0
- chemunited-0.0.1/src/chemunited/shared/graph/scene_core.py +37 -0
- chemunited-0.0.1/src/chemunited/shared/graph_objects/__init__.py +6 -0
- chemunited-0.0.1/src/chemunited/shared/graph_objects/custom_path.py +184 -0
- chemunited-0.0.1/src/chemunited/shared/icon.py +78 -0
- chemunited-0.0.1/src/chemunited/shared/logger_queue.py +132 -0
- chemunited-0.0.1/src/chemunited/shared/prcess_list/__init__.py +5 -0
- chemunited-0.0.1/src/chemunited/shared/prcess_list/item.py +261 -0
- chemunited-0.0.1/src/chemunited/shared/prcess_list/list.py +154 -0
- chemunited-0.0.1/src/chemunited/shared/prcess_list/widget.py +107 -0
- chemunited-0.0.1/src/chemunited/shared/resources/README.md +177 -0
- chemunited-0.0.1/src/chemunited/shared/resources/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/ADC.svg +32 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/BackPressureRegulator.svg +48 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/BottleAccess.svg +34 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/BottlePressureAccess.svg +34 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/BubbleSensor.svg +46 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Chiller.svg +106 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/CustomFlask.svg +54 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/DAC.svg +32 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Distributor.svg +20 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/FlaskJacket.svg +20 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/FlowMeter.svg +49 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/FlowReactor.svg +131 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/FlowReactorBase.svg +20 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/FourPortDistributionValve.svg +308 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/FourPortFivePositionValve.svg +282 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Gantry3D.svg +199 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/GlassBottle.svg +75 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/HPLC.svg +116 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/HPLCControl.svg +1023 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/HPLCPump.svg +79 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/IRControl.svg +36 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/LengthControl.svg +66 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Loop.svg +128 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/LoopBase.svg +23 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/MFCComponent.svg +226 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/MSControl.svg +79 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/MassFlowControl.svg +40 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/MultiChannelADC.svg +238 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/MultiChannelDAC.svg +238 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/MultiChannelRelay.svg +220 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/NMRControl.svg +48 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Peltier.svg +76 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PeltierCoolerTemperatureControl.svg +553 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PhidgetBubbleSensorComponent.svg +256 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PhidgetBubbleSensorPowerComponent.svg +59 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PhotoLeds.svg +57 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PhotoSensor.svg +144 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Photoreactor.svg +296 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PoolDARK.svg +91 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PoolLIGHT.svg +91 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Power.svg +27 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PowerControl.svg +59 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PowerSwitch.svg +59 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PressureControl.svg +294 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/PressureSensor.svg +287 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Relay.svg +26 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/RotaryValve.svg +37 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Separator.svg +53 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Sink.svg +77 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/SixPortDistributionValve.svg +364 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/SixPortTwoPositionValve.svg +352 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/SixteenPortDistributionValve.svg +644 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/SolenoidValve.svg +33 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/SolenoidValve2Way.svg +39 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Source.svg +77 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/SourceSink.svg +22 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/SyringeBarrel.svg +101 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/SyringePlunger.svg +24 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/SyringePump.svg +704 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/TemperatureControl.svg +1089 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/ThreePortFourPositionValve.svg +283 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/ThreePortTwoPositionValve.svg +264 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/TwelvePortDistributionValve.svg +532 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/TwoPortDistributionValve.svg +252 -0
- chemunited-0.0.1/src/chemunited/shared/resources/components/Vial.svg +301 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/add_folder_black.svg +14 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/add_folder_white.svg +14 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/air.svg +4 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/block_for_black.svg +4 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/block_for_white.svg +4 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/block_if_black.svg +7 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/block_if_white.svg +11 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/boolean_black.svg +13 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/boolean_white.svg +13 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/build.svg +12 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/chemical_black.svg +11 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/chemical_white.svg +7 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/chemunited.ico +0 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/chemunited.svg +346 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/chemunited_simu.svg +689 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/choices_black.svg +11 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/choices_white.svg +11 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/color_select_black.svg +6 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/color_select_white.svg +6 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/complete.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/component_icon.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/connection_black.svg +13 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/connection_white.svg +15 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/csv.svg +10 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/database_black.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/database_white.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/device_hierarchy.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/flowchem_logo.svg +33 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/home.svg +13 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/inspect_black.svg +9 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/inspect_white.svg +9 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/integer_black.svg +15 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/integer_white.svg +15 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/json.svg +7 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/line_pressure_black.svg +23 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/line_pressure_white.svg +23 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/link_black.svg +4 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/link_white.svg +4 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/list_black.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/list_white.svg +6 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/log.svg +12 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/logo.svg +389 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/manual_black.svg +12 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/manual_white.svg +12 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/measure_black.svg +38 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/measure_white.svg +38 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/module.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/molecule_black.svg +48 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/molecule_white.svg +48 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/move_black.svg +4 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/move_white.svg +4 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/offline.svg +28 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/online.svg +25 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/onlineA.svg +22 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/onlineB.svg +23 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/onlineC.svg +24 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/open_folder_black.svg +7 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/open_folder_white.svg +7 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/orchestrator_black.svg +2 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/orchestrator_white.svg +2 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/pause_black.svg +5 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/pause_white.svg +5 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/play_black.svg +14 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/play_white.svg +14 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/process_black.svg +14 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/process_white.svg +14 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/python.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/router.svg +28 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/scissor_black.svg +2 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/scissor_white.svg +14 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/select_black.svg +12 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/select_white.svg +12 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/simulation.svg +27 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/slow_black.svg +9 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/slow_white.svg +9 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/speed_black.svg +10 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/speed_white.svg +10 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/status_black.svg +5 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/status_white.svg +5 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/stop_black.svg +10 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/stop_white.svg +10 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/string_black.svg +6 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/string_white.svg +6 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/toml.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/trash_black.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/trash_white.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/update_black.svg +2 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/update_white.svg +2 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/upload_black.svg +7 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/upload_white.svg +7 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/variable_black.svg +12 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/variable_white.svg +12 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/waiting_icon.svg +1 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/water.svg +5 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/wifi_black.svg +6 -0
- chemunited-0.0.1/src/chemunited/shared/resources/icons/wifi_white.svg +6 -0
- chemunited-0.0.1/src/chemunited/shared/resources/lexer/theme_dark.json +62 -0
- chemunited-0.0.1/src/chemunited/shared/resources/lexer/theme_light.json +62 -0
- chemunited-0.0.1/src/chemunited/shared/resources/qss/dark/loggings_widget.qss +6 -0
- chemunited-0.0.1/src/chemunited/shared/resources/qss/dark/main_window.qss +21 -0
- chemunited-0.0.1/src/chemunited/shared/resources/qss/light/loggings_widget.qss +6 -0
- chemunited-0.0.1/src/chemunited/shared/resources/qss/light/main_window.qss +21 -0
- chemunited-0.0.1/src/chemunited/shared/resources/resources_rc.py +31195 -0
- chemunited-0.0.1/src/chemunited/shared/resources/resources_rc.qrc +183 -0
- chemunited-0.0.1/src/chemunited/shared/resources/scripts/parameter.txt +12 -0
- chemunited-0.0.1/src/chemunited/shared/resources/scripts/process.txt +139 -0
- chemunited-0.0.1/src/chemunited/shared/resources/scripts/project.txt +43 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/__init__.py +4 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/card_factory.py +95 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/__init__.py +0 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/base_card.py +111 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/bool_card.py +58 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/builder_models.py +251 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/choice_card.py +74 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/float_card.py +73 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/int_card.py +65 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/list_card.py +121 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/quantity_card.py +152 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/str_card.py +50 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/dialog.py +53 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/editor_widget.py +211 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/example.py +251 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/busy_status.py +79 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/frame_base.py +293 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/loggings_widget.py +360 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/logo_window.py +106 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/main_window.py +192 -0
- chemunited-0.0.1/src/chemunited/shared/widgets/segment_widget.py +49 -0
- chemunited-0.0.1/src/chemunited/simulation/__init__.py +4 -0
- chemunited-0.0.1/src/chemunited/simulation/final_state.py +297 -0
- chemunited-0.0.1/src/chemunited/simulation/graph_simulation.py +10 -0
- chemunited-0.0.1/src/chemunited/simulation/playback.py +61 -0
- chemunited-0.0.1/src/chemunited/simulation/simulate_report.py +1024 -0
- chemunited-0.0.1/src/chemunited/utils/files.py +39 -0
- chemunited-0.0.1/src/chemunited/utils/flowchem_listener.py +176 -0
- chemunited-0.0.1/src/chemunited/utils/math_functions.py +154 -0
- chemunited-0.0.1/src/chemunited/utils/update_dialog.py +82 -0
- chemunited-0.0.1/src/chemunited/utils/version_check.py +45 -0
- chemunited-0.0.1/src/chemunited.egg-info/PKG-INFO +36 -0
- chemunited-0.0.1/src/chemunited.egg-info/SOURCES.txt +374 -0
- chemunited-0.0.1/src/chemunited.egg-info/dependency_links.txt +1 -0
- chemunited-0.0.1/src/chemunited.egg-info/entry_points.txt +2 -0
- chemunited-0.0.1/src/chemunited.egg-info/requires.txt +25 -0
- chemunited-0.0.1/src/chemunited.egg-info/top_level.txt +1 -0
- chemunited-0.0.1/tests/test_package_data.py +30 -0
chemunited-0.0.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Automated Chemistry @ Max Plank Institute of Colloids and Interfaces
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: chemunited
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Visual interface for designing and executing chemistry automation workflows on top of FlowChem.
|
|
5
|
+
Author-email: Samuel Vitor Saraiva <samuel.saraiva@mpikg.mpg.de>
|
|
6
|
+
Maintainer-email: Samuel Vitor Saraiva <samuel.saraiva@mpikg.mpg.de>
|
|
7
|
+
License: MIT
|
|
8
|
+
Keywords: control,automation,process
|
|
9
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
10
|
+
Requires-Python: >=3.13
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Requires-Dist: chemunited-quantities>=0.0.3
|
|
14
|
+
Requires-Dist: chemunited-core>=0.0.4
|
|
15
|
+
Requires-Dist: chemunited-workflow>=0.0.2
|
|
16
|
+
Requires-Dist: chemunited-sim[tray]>=0.0.2
|
|
17
|
+
Requires-Dist: PyQt-Fluent-Widgets<2.0,>=1.7.0
|
|
18
|
+
Requires-Dist: QScintilla>=2.14.0
|
|
19
|
+
Requires-Dist: platformdirs>=4.0
|
|
20
|
+
Requires-Dist: gitpython>=3.1.41
|
|
21
|
+
Requires-Dist: zeroconf>=0.131.0
|
|
22
|
+
Requires-Dist: rich-click>=1.7
|
|
23
|
+
Requires-Dist: black<27.0,>=25.1.0
|
|
24
|
+
Requires-Dist: loguru>=0.7
|
|
25
|
+
Requires-Dist: packaging>=23.0
|
|
26
|
+
Requires-Dist: matplotlib
|
|
27
|
+
Provides-Extra: compound-lookup
|
|
28
|
+
Requires-Dist: CoolProp<8,>=7; extra == "compound-lookup"
|
|
29
|
+
Provides-Extra: dev
|
|
30
|
+
Requires-Dist: black>=25.1.0; extra == "dev"
|
|
31
|
+
Requires-Dist: mypy>=1.19.1; extra == "dev"
|
|
32
|
+
Requires-Dist: pre-commit>=4.0.0; extra == "dev"
|
|
33
|
+
Requires-Dist: ruff>=0.11.2; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-qt>=4.4; extra == "dev"
|
|
36
|
+
Dynamic: license-file
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=64", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "chemunited"
|
|
7
|
+
version = "0.0.1"
|
|
8
|
+
description = "Visual interface for designing and executing chemistry automation workflows on top of FlowChem."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.13"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
keywords = ["control", "automation", "process"]
|
|
13
|
+
authors = [
|
|
14
|
+
{ name = "Samuel Vitor Saraiva", email = "samuel.saraiva@mpikg.mpg.de" }
|
|
15
|
+
]
|
|
16
|
+
maintainers = [
|
|
17
|
+
{ name = "Samuel Vitor Saraiva", email = "samuel.saraiva@mpikg.mpg.de" }
|
|
18
|
+
]
|
|
19
|
+
classifiers = [
|
|
20
|
+
"License :: OSI Approved :: MIT License"
|
|
21
|
+
]
|
|
22
|
+
dependencies = [
|
|
23
|
+
# sub-packages (provide the entire runtime engine)
|
|
24
|
+
"chemunited-quantities>=0.0.3",
|
|
25
|
+
"chemunited-core>=0.0.4",
|
|
26
|
+
"chemunited-workflow>=0.0.2",
|
|
27
|
+
"chemunited-sim[tray]>=0.0.2",
|
|
28
|
+
"PyQt-Fluent-Widgets>=1.7.0,<2.0", # Qt UI
|
|
29
|
+
"QScintilla>=2.14.0",
|
|
30
|
+
"platformdirs>=4.0",
|
|
31
|
+
"gitpython>=3.1.41",
|
|
32
|
+
"zeroconf>=0.131.0",
|
|
33
|
+
"rich-click>=1.7",
|
|
34
|
+
"black>=25.1.0,<27.0", # used programmatically to format user protocol
|
|
35
|
+
"loguru>=0.7", # explicitly re-declared
|
|
36
|
+
"packaging>=23.0",
|
|
37
|
+
"matplotlib"
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
[project.scripts]
|
|
41
|
+
chemunited = "chemunited.__main__:main"
|
|
42
|
+
|
|
43
|
+
[project.optional-dependencies]
|
|
44
|
+
compound-lookup = [
|
|
45
|
+
"CoolProp>=7,<8",
|
|
46
|
+
]
|
|
47
|
+
dev = [
|
|
48
|
+
"black>=25.1.0",
|
|
49
|
+
"mypy>=1.19.1",
|
|
50
|
+
"pre-commit>=4.0.0",
|
|
51
|
+
"ruff>=0.11.2",
|
|
52
|
+
"pytest>=8.0",
|
|
53
|
+
"pytest-qt>=4.4",
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
[tool.pytest.ini_options]
|
|
57
|
+
qt_api = "pyqt5"
|
|
58
|
+
testpaths = ["tests"]
|
|
59
|
+
|
|
60
|
+
[tool.setuptools]
|
|
61
|
+
package-dir = {"" = "src"}
|
|
62
|
+
|
|
63
|
+
[tool.setuptools.packages.find]
|
|
64
|
+
where = ["src"]
|
|
65
|
+
include = ["chemunited*"]
|
|
66
|
+
namespaces = true
|
|
67
|
+
|
|
68
|
+
[tool.setuptools.package-data]
|
|
69
|
+
"chemunited.mcp" = ["*.md"]
|
|
70
|
+
"chemunited.shared.resources" = [
|
|
71
|
+
"*.md",
|
|
72
|
+
"*.qrc",
|
|
73
|
+
"components/*.svg",
|
|
74
|
+
"icons/*.ico",
|
|
75
|
+
"icons/*.svg",
|
|
76
|
+
"lexer/*.json",
|
|
77
|
+
"qss/dark/*.qss",
|
|
78
|
+
"qss/light/*.qss",
|
|
79
|
+
"scripts/*.txt",
|
|
80
|
+
]
|
|
81
|
+
|
|
82
|
+
[tool.black]
|
|
83
|
+
line-length = 88
|
|
84
|
+
target-version = ["py310"]
|
|
85
|
+
extend-exclude = '''
|
|
86
|
+
(
|
|
87
|
+
^/.venv
|
|
88
|
+
| ^/build
|
|
89
|
+
| ^/src/chemunited/shared/resources
|
|
90
|
+
)
|
|
91
|
+
'''
|
|
92
|
+
|
|
93
|
+
[tool.ruff]
|
|
94
|
+
line-length = 88
|
|
95
|
+
target-version = "py310"
|
|
96
|
+
extend-exclude = [
|
|
97
|
+
".venv",
|
|
98
|
+
"build",
|
|
99
|
+
"src/chemunited/shared/resources",
|
|
100
|
+
]
|
|
101
|
+
|
|
102
|
+
[tool.ruff.lint]
|
|
103
|
+
extend-select = ["I"]
|
|
104
|
+
|
|
105
|
+
[tool.bandit]
|
|
106
|
+
# B101 (assert_used): style nit, not a vulnerability check — we use asserts as
|
|
107
|
+
# internal invariants after a preceding guard already rules out the failing case.
|
|
108
|
+
# B404 (import subprocess): blacklists the import itself with zero signal; the
|
|
109
|
+
# meaningful check is B603 on each call site, reviewed individually below.
|
|
110
|
+
skips = ["B101", "B404"]
|
|
111
|
+
|
|
112
|
+
[tool.mypy]
|
|
113
|
+
python_version = "3.13"
|
|
114
|
+
files = ["src/chemunited"]
|
|
115
|
+
exclude = '(^\.venv/|^build/|^src/chemunited/shared/resources/)'
|
|
116
|
+
mypy_path = "src"
|
|
117
|
+
namespace_packages = true
|
|
118
|
+
pretty = true
|
|
119
|
+
show_error_codes = true
|
|
120
|
+
warn_redundant_casts = true
|
|
121
|
+
warn_unused_ignores = false
|
|
122
|
+
explicit_package_bases = true
|
|
123
|
+
|
|
124
|
+
[[tool.mypy.overrides]]
|
|
125
|
+
module = [
|
|
126
|
+
"PyQt5",
|
|
127
|
+
"PyQt5.*",
|
|
128
|
+
"black",
|
|
129
|
+
"chemunited_workflow",
|
|
130
|
+
"chemunited_workflow.*",
|
|
131
|
+
"git",
|
|
132
|
+
"mcp",
|
|
133
|
+
"mcp.*",
|
|
134
|
+
"qfluentwidgets",
|
|
135
|
+
"qframelesswindow",
|
|
136
|
+
"networkx",
|
|
137
|
+
"numpy",
|
|
138
|
+
"scipy",
|
|
139
|
+
"scipy.*",
|
|
140
|
+
"loguru",
|
|
141
|
+
"pyvis",
|
|
142
|
+
"pyvis.*",
|
|
143
|
+
"requests",
|
|
144
|
+
"requests.*",
|
|
145
|
+
"rich",
|
|
146
|
+
"rich.*",
|
|
147
|
+
"rich_click",
|
|
148
|
+
"uvicorn",
|
|
149
|
+
"uvicorn.*",
|
|
150
|
+
"zeroconf",
|
|
151
|
+
"pydantic_pint",
|
|
152
|
+
]
|
|
153
|
+
ignore_missing_imports = true
|
|
154
|
+
|
|
155
|
+
[[tool.mypy.overrides]]
|
|
156
|
+
module = [
|
|
157
|
+
"matplotlib",
|
|
158
|
+
"matplotlib.*",
|
|
159
|
+
"CoolProp",
|
|
160
|
+
"CoolProp.*",
|
|
161
|
+
]
|
|
162
|
+
ignore_missing_imports = true
|
|
163
|
+
|
|
164
|
+
[[tool.mypy.overrides]]
|
|
165
|
+
module = ["chemunited.shared.resources.resources_rc"]
|
|
166
|
+
ignore_errors = true
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
import rich_click as click
|
|
5
|
+
from PyQt5.QtCore import Qt, QTimer
|
|
6
|
+
from PyQt5.QtGui import QIcon
|
|
7
|
+
from PyQt5.QtWidgets import QApplication
|
|
8
|
+
|
|
9
|
+
from chemunited.setup import SetupWindow
|
|
10
|
+
|
|
11
|
+
_APP_ID = "org.chemunited.orchestrator"
|
|
12
|
+
_ICON_PATH = ":/icons/icons/chemunited.ico"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@click.command()
|
|
16
|
+
@click.argument("project_file", type=click.Path(exists=True), required=False)
|
|
17
|
+
@click.option(
|
|
18
|
+
"--overwrite",
|
|
19
|
+
is_flag=True,
|
|
20
|
+
default=False,
|
|
21
|
+
help="Overwrite an existing project directory when importing a .chemunited file.",
|
|
22
|
+
)
|
|
23
|
+
def main(project_file: str | None = None, overwrite: bool = False) -> None:
|
|
24
|
+
"""Entry point for launching the ChemUnited GUI."""
|
|
25
|
+
if sys.platform == "win32":
|
|
26
|
+
import ctypes
|
|
27
|
+
|
|
28
|
+
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(_APP_ID)
|
|
29
|
+
|
|
30
|
+
# Set high DPI settings for better display scaling
|
|
31
|
+
QApplication.setHighDpiScaleFactorRoundingPolicy(
|
|
32
|
+
Qt.HighDpiScaleFactorRoundingPolicy.PassThrough # type: ignore[attr-defined]
|
|
33
|
+
)
|
|
34
|
+
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) # type: ignore[attr-defined]
|
|
35
|
+
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps) # type: ignore[attr-defined]
|
|
36
|
+
|
|
37
|
+
app = QApplication(sys.argv)
|
|
38
|
+
|
|
39
|
+
app.setWindowIcon(QIcon(_ICON_PATH))
|
|
40
|
+
|
|
41
|
+
window = SetupWindow()
|
|
42
|
+
window.show()
|
|
43
|
+
if project_file:
|
|
44
|
+
_path = Path(project_file).resolve()
|
|
45
|
+
_overwrite = overwrite
|
|
46
|
+
QTimer.singleShot(
|
|
47
|
+
0, lambda: window.orchestrator.open_project(_path, overwrite=_overwrite)
|
|
48
|
+
)
|
|
49
|
+
sys.exit(app.exec_())
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
if __name__ == "__main__":
|
|
53
|
+
main()
|
|
File without changes
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING, override
|
|
2
|
+
|
|
3
|
+
from loguru import logger
|
|
4
|
+
|
|
5
|
+
from chemunited.elements.component.graph_item import GraphComponent
|
|
6
|
+
from chemunited.shared.enums import SetupStepMode
|
|
7
|
+
from chemunited.shared.graph import GraphCore, SceneCore
|
|
8
|
+
|
|
9
|
+
from .online_list import OnlineList
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from ..setup import SetupWindow
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ConnectivityGraphicView(GraphCore):
|
|
16
|
+
MODE = SetupStepMode.CONNECTIVITY
|
|
17
|
+
|
|
18
|
+
def __init__(self, scene: SceneCore | None = None, parent=None):
|
|
19
|
+
super().__init__(scene, parent)
|
|
20
|
+
self.setObjectName("ConnectivityGraphicView")
|
|
21
|
+
if parent is not None:
|
|
22
|
+
self.parent_ref: SetupWindow = parent
|
|
23
|
+
|
|
24
|
+
@override
|
|
25
|
+
def dragEnterEvent(self, event):
|
|
26
|
+
if event.mimeData().hasFormat(OnlineList.MIME):
|
|
27
|
+
event.acceptProposedAction()
|
|
28
|
+
else:
|
|
29
|
+
event.ignore()
|
|
30
|
+
|
|
31
|
+
@override
|
|
32
|
+
def dragMoveEvent(self, event):
|
|
33
|
+
if event.mimeData().hasFormat(OnlineList.MIME):
|
|
34
|
+
event.acceptProposedAction()
|
|
35
|
+
else:
|
|
36
|
+
event.ignore()
|
|
37
|
+
|
|
38
|
+
def _component_at_drop_position(self, event) -> GraphComponent | None:
|
|
39
|
+
scene_pos = self.mapToScene(event.pos())
|
|
40
|
+
scene = self.scene()
|
|
41
|
+
if scene is None:
|
|
42
|
+
return None
|
|
43
|
+
|
|
44
|
+
for item in scene.items(scene_pos):
|
|
45
|
+
current = item
|
|
46
|
+
while current is not None:
|
|
47
|
+
if isinstance(current, GraphComponent):
|
|
48
|
+
return current
|
|
49
|
+
current = current.parentItem() # type: ignore[assignment]
|
|
50
|
+
return None
|
|
51
|
+
|
|
52
|
+
@override
|
|
53
|
+
def dropEvent(self, event):
|
|
54
|
+
if not event.mimeData().hasFormat(OnlineList.MIME):
|
|
55
|
+
event.ignore()
|
|
56
|
+
return
|
|
57
|
+
|
|
58
|
+
url_component = event.mimeData().data(OnlineList.MIME).data().decode("utf-8")
|
|
59
|
+
event.acceptProposedAction()
|
|
60
|
+
|
|
61
|
+
component = self._component_at_drop_position(event)
|
|
62
|
+
if component is None:
|
|
63
|
+
logger.warning(
|
|
64
|
+
f"No component found at position {self.mapToScene(event.pos())}"
|
|
65
|
+
)
|
|
66
|
+
return
|
|
67
|
+
if not component.inf.is_electronic:
|
|
68
|
+
logger.warning(f"Component {component.inf.name} is not electronic.")
|
|
69
|
+
return
|
|
70
|
+
|
|
71
|
+
if hasattr(self, "parent_ref"):
|
|
72
|
+
self.parent_ref.orchestrator.associate_component(
|
|
73
|
+
name=component.inf.name,
|
|
74
|
+
urlc=url_component,
|
|
75
|
+
)
|
|
76
|
+
else:
|
|
77
|
+
print(url_component, component.inf.name)
|