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.
Files changed (376) hide show
  1. chemunited-0.0.1/LICENSE +21 -0
  2. chemunited-0.0.1/PKG-INFO +36 -0
  3. chemunited-0.0.1/pyproject.toml +166 -0
  4. chemunited-0.0.1/setup.cfg +4 -0
  5. chemunited-0.0.1/src/chemunited/__init__.py +3 -0
  6. chemunited-0.0.1/src/chemunited/__main__.py +53 -0
  7. chemunited-0.0.1/src/chemunited/connectivity/__init__.py +0 -0
  8. chemunited-0.0.1/src/chemunited/connectivity/graph.py +77 -0
  9. chemunited-0.0.1/src/chemunited/connectivity/online_list.py +364 -0
  10. chemunited-0.0.1/src/chemunited/connectivity/openapi_commands.py +248 -0
  11. chemunited-0.0.1/src/chemunited/draw/__init__.py +0 -0
  12. chemunited-0.0.1/src/chemunited/draw/graph.py +376 -0
  13. chemunited-0.0.1/src/chemunited/draw/tree_add.py +287 -0
  14. chemunited-0.0.1/src/chemunited/elements/__init__.py +3 -0
  15. chemunited-0.0.1/src/chemunited/elements/access.py +176 -0
  16. chemunited-0.0.1/src/chemunited/elements/component/__init__.py +13 -0
  17. chemunited-0.0.1/src/chemunited/elements/component/__test_component.py +64 -0
  18. chemunited-0.0.1/src/chemunited/elements/component/component_factory.py +159 -0
  19. chemunited-0.0.1/src/chemunited/elements/component/component_parts/__init__.py +24 -0
  20. chemunited-0.0.1/src/chemunited/elements/component/component_parts/connection_point.py +157 -0
  21. chemunited-0.0.1/src/chemunited/elements/component/component_parts/flow_channel.py +0 -0
  22. chemunited-0.0.1/src/chemunited/elements/component/component_parts/scene_item.py +379 -0
  23. chemunited-0.0.1/src/chemunited/elements/component/component_parts/svg_layer.py +90 -0
  24. chemunited-0.0.1/src/chemunited/elements/component/component_parts/text_element.py +22 -0
  25. chemunited-0.0.1/src/chemunited/elements/component/connectivity.py +56 -0
  26. chemunited-0.0.1/src/chemunited/elements/component/glossary/__init__.py +61 -0
  27. chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/__init__.py +0 -0
  28. chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/hplccontrol_graph.py +28 -0
  29. chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/ircontrol_graph.py +26 -0
  30. chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/mscontrol_graph.py +28 -0
  31. chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/nmrcontrol_graph.py +28 -0
  32. chemunited-0.0.1/src/chemunited/elements/component/glossary/analytics/spectrum.py +50 -0
  33. chemunited-0.0.1/src/chemunited/elements/component/glossary/assembly/__init__.py +0 -0
  34. chemunited-0.0.1/src/chemunited/elements/component/glossary/pipes/__init__.py +0 -0
  35. chemunited-0.0.1/src/chemunited/elements/component/glossary/pipes/distributor_graph.py +44 -0
  36. chemunited-0.0.1/src/chemunited/elements/component/glossary/pipes/mfc_graph.py +21 -0
  37. chemunited-0.0.1/src/chemunited/elements/component/glossary/pumps/__init__.py +0 -0
  38. chemunited-0.0.1/src/chemunited/elements/component/glossary/pumps/syringepump_graph.py +92 -0
  39. chemunited-0.0.1/src/chemunited/elements/component/glossary/sensors/__init__.py +0 -0
  40. chemunited-0.0.1/src/chemunited/elements/component/glossary/technical/__init__.py +0 -0
  41. chemunited-0.0.1/src/chemunited/elements/component/glossary/technical/multichannel_graph.py +56 -0
  42. chemunited-0.0.1/src/chemunited/elements/component/glossary/thermal/__init__.py +0 -0
  43. chemunited-0.0.1/src/chemunited/elements/component/glossary/valve/__init__.py +0 -0
  44. chemunited-0.0.1/src/chemunited/elements/component/glossary/valve/rotary_valve_graph.py +92 -0
  45. chemunited-0.0.1/src/chemunited/elements/component/glossary/valve/solenoid_valve_graph.py +164 -0
  46. chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/__init__.py +0 -0
  47. chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/common.py +45 -0
  48. chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/customflask_graph.py +93 -0
  49. chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/flowreactor_graph.py +99 -0
  50. chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/glassbottle_graph.py +92 -0
  51. chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/loop_graph.py +75 -0
  52. chemunited-0.0.1/src/chemunited/elements/component/glossary/vessels/vial_graph.py +211 -0
  53. chemunited-0.0.1/src/chemunited/elements/component/graph_item.py +625 -0
  54. chemunited-0.0.1/src/chemunited/elements/component/protocols/__init__.py +30 -0
  55. chemunited-0.0.1/src/chemunited/elements/component/widgets/__init__.py +5 -0
  56. chemunited-0.0.1/src/chemunited/elements/component/widgets/connectivity.py +35 -0
  57. chemunited-0.0.1/src/chemunited/elements/component/widgets/main.py +67 -0
  58. chemunited-0.0.1/src/chemunited/elements/component/widgets/properties.py +34 -0
  59. chemunited-0.0.1/src/chemunited/elements/compounds/__init__.py +5 -0
  60. chemunited-0.0.1/src/chemunited/elements/compounds/compound_dialog.py +117 -0
  61. chemunited-0.0.1/src/chemunited/elements/compounds/compound_list.py +285 -0
  62. chemunited-0.0.1/src/chemunited/elements/compounds/compounds_widget.py +44 -0
  63. chemunited-0.0.1/src/chemunited/elements/compounds/coolprop_lookup.py +179 -0
  64. chemunited-0.0.1/src/chemunited/elements/connection/__connection_test.py +128 -0
  65. chemunited-0.0.1/src/chemunited/elements/connection/__init__.py +17 -0
  66. chemunited-0.0.1/src/chemunited/elements/connection/connection.py +404 -0
  67. chemunited-0.0.1/src/chemunited/elements/inventory/__init__.py +5 -0
  68. chemunited-0.0.1/src/chemunited/elements/inventory/workspace.py +1251 -0
  69. chemunited-0.0.1/src/chemunited/elements/pool_commands.py +71 -0
  70. chemunited-0.0.1/src/chemunited/elements/reactions/__init__.py +11 -0
  71. chemunited-0.0.1/src/chemunited/elements/reactions/model.py +33 -0
  72. chemunited-0.0.1/src/chemunited/elements/reactions/reaction_dialog.py +108 -0
  73. chemunited-0.0.1/src/chemunited/elements/reactions/reaction_list.py +132 -0
  74. chemunited-0.0.1/src/chemunited/elements/reactions/reactions_widget.py +28 -0
  75. chemunited-0.0.1/src/chemunited/mcp/MCP_CLIENT_CONFIG.md +99 -0
  76. chemunited-0.0.1/src/chemunited/mcp/__init__.py +6 -0
  77. chemunited-0.0.1/src/chemunited/mcp/instructions.md +287 -0
  78. chemunited-0.0.1/src/chemunited/mcp/project_files.py +122 -0
  79. chemunited-0.0.1/src/chemunited/mcp/qt_bridge.py +46 -0
  80. chemunited-0.0.1/src/chemunited/mcp/server.py +226 -0
  81. chemunited-0.0.1/src/chemunited/monitor.py +237 -0
  82. chemunited-0.0.1/src/chemunited/monitoring/__init__.py +0 -0
  83. chemunited-0.0.1/src/chemunited/monitoring/execution_api_process.py +387 -0
  84. chemunited-0.0.1/src/chemunited/monitoring/graph.py +14 -0
  85. chemunited-0.0.1/src/chemunited/monitoring/pool_log_tailer.py +106 -0
  86. chemunited-0.0.1/src/chemunited/monitoring/process_list.py +100 -0
  87. chemunited-0.0.1/src/chemunited/monitoring/status_animated.py +90 -0
  88. chemunited-0.0.1/src/chemunited/monitoring/summary.py +728 -0
  89. chemunited-0.0.1/src/chemunited/orchestrator/__init__.py +5 -0
  90. chemunited-0.0.1/src/chemunited/orchestrator/connectivity.py +154 -0
  91. chemunited-0.0.1/src/chemunited/orchestrator/core.py +118 -0
  92. chemunited-0.0.1/src/chemunited/orchestrator/draw.py +468 -0
  93. chemunited-0.0.1/src/chemunited/orchestrator/execution.py +1020 -0
  94. chemunited-0.0.1/src/chemunited/orchestrator/inventory_state.py +158 -0
  95. chemunited-0.0.1/src/chemunited/orchestrator/main.py +5 -0
  96. chemunited-0.0.1/src/chemunited/orchestrator/orchestrator.py +5 -0
  97. chemunited-0.0.1/src/chemunited/orchestrator/project_file.py +1283 -0
  98. chemunited-0.0.1/src/chemunited/orchestrator/protocols.py +163 -0
  99. chemunited-0.0.1/src/chemunited/pre_run/__init__.py +0 -0
  100. chemunited-0.0.1/src/chemunited/pre_run/dashboard_launcher.py +695 -0
  101. chemunited-0.0.1/src/chemunited/pre_run/pre_run_frame.py +69 -0
  102. chemunited-0.0.1/src/chemunited/pre_run/process_list.py +448 -0
  103. chemunited-0.0.1/src/chemunited/pre_run/protocols_historic.py +231 -0
  104. chemunited-0.0.1/src/chemunited/pre_run/summary_window.py +235 -0
  105. chemunited-0.0.1/src/chemunited/project/__init__.py +0 -0
  106. chemunited-0.0.1/src/chemunited/project/git_manager.py +225 -0
  107. chemunited-0.0.1/src/chemunited/project/manifest.py +35 -0
  108. chemunited-0.0.1/src/chemunited/project/platform_svg.py +139 -0
  109. chemunited-0.0.1/src/chemunited/project/recent.py +104 -0
  110. chemunited-0.0.1/src/chemunited/project/session.py +217 -0
  111. chemunited-0.0.1/src/chemunited/project/storage.py +958 -0
  112. chemunited-0.0.1/src/chemunited/project/writer.py +92 -0
  113. chemunited-0.0.1/src/chemunited/protocols/__init__.py +0 -0
  114. chemunited-0.0.1/src/chemunited/protocols/graph.py +6 -0
  115. chemunited-0.0.1/src/chemunited/protocols/process_list.py +94 -0
  116. chemunited-0.0.1/src/chemunited/protocols/workflows/__init__.py +12 -0
  117. chemunited-0.0.1/src/chemunited/protocols/workflows/controller.py +192 -0
  118. chemunited-0.0.1/src/chemunited/protocols/workflows/design.py +39 -0
  119. chemunited-0.0.1/src/chemunited/protocols/workflows/editor.py +529 -0
  120. chemunited-0.0.1/src/chemunited/protocols/workflows/elements/__init__.py +7 -0
  121. chemunited-0.0.1/src/chemunited/protocols/workflows/elements/access_point.py +168 -0
  122. chemunited-0.0.1/src/chemunited/protocols/workflows/elements/status_bar.py +136 -0
  123. chemunited-0.0.1/src/chemunited/protocols/workflows/elements/style.py +44 -0
  124. chemunited-0.0.1/src/chemunited/protocols/workflows/elements/work_connection.py +606 -0
  125. chemunited-0.0.1/src/chemunited/protocols/workflows/elements/work_node.py +443 -0
  126. chemunited-0.0.1/src/chemunited/protocols/workflows/exceptions.py +6 -0
  127. chemunited-0.0.1/src/chemunited/protocols/workflows/naming.py +12 -0
  128. chemunited-0.0.1/src/chemunited/protocols/workflows/node_parameters_dialog.py +236 -0
  129. chemunited-0.0.1/src/chemunited/protocols/workflows/process_workflow.py +406 -0
  130. chemunited-0.0.1/src/chemunited/protocols/workflows/workflow_frames.py +1598 -0
  131. chemunited-0.0.1/src/chemunited/protocols/workflows/workflow_rules.py +140 -0
  132. chemunited-0.0.1/src/chemunited/protocols/workflows/workflow_widget.py +169 -0
  133. chemunited-0.0.1/src/chemunited/setup.py +529 -0
  134. chemunited-0.0.1/src/chemunited/shared/editor/__init__.py +0 -0
  135. chemunited-0.0.1/src/chemunited/shared/editor/base.py +181 -0
  136. chemunited-0.0.1/src/chemunited/shared/editor/editor.py +0 -0
  137. chemunited-0.0.1/src/chemunited/shared/editor/lexer.py +108 -0
  138. chemunited-0.0.1/src/chemunited/shared/editor/parameters/cards.py +703 -0
  139. chemunited-0.0.1/src/chemunited/shared/editor/parameters/drag_list.py +155 -0
  140. chemunited-0.0.1/src/chemunited/shared/editor/parameters/example.py +121 -0
  141. chemunited-0.0.1/src/chemunited/shared/editor/parameters/list.py +117 -0
  142. chemunited-0.0.1/src/chemunited/shared/editor/parameters/main.py +528 -0
  143. chemunited-0.0.1/src/chemunited/shared/editor/protocols/command.py +296 -0
  144. chemunited-0.0.1/src/chemunited/shared/editor/protocols/command_list.py +462 -0
  145. chemunited-0.0.1/src/chemunited/shared/editor/protocols/example.py +246 -0
  146. chemunited-0.0.1/src/chemunited/shared/editor/protocols/node_metadata.py +36 -0
  147. chemunited-0.0.1/src/chemunited/shared/editor/protocols/param_ref_card.py +165 -0
  148. chemunited-0.0.1/src/chemunited/shared/editor/protocols/script.py +419 -0
  149. chemunited-0.0.1/src/chemunited/shared/enums/__init__.py +10 -0
  150. chemunited-0.0.1/src/chemunited/shared/enums/elements_scene.py +8 -0
  151. chemunited-0.0.1/src/chemunited/shared/enums/protocols_enum.py +10 -0
  152. chemunited-0.0.1/src/chemunited/shared/enums/windows_enum.py +17 -0
  153. chemunited-0.0.1/src/chemunited/shared/graph/__init__.py +7 -0
  154. chemunited-0.0.1/src/chemunited/shared/graph/graph_core.py +190 -0
  155. chemunited-0.0.1/src/chemunited/shared/graph/scene_core.py +37 -0
  156. chemunited-0.0.1/src/chemunited/shared/graph_objects/__init__.py +6 -0
  157. chemunited-0.0.1/src/chemunited/shared/graph_objects/custom_path.py +184 -0
  158. chemunited-0.0.1/src/chemunited/shared/icon.py +78 -0
  159. chemunited-0.0.1/src/chemunited/shared/logger_queue.py +132 -0
  160. chemunited-0.0.1/src/chemunited/shared/prcess_list/__init__.py +5 -0
  161. chemunited-0.0.1/src/chemunited/shared/prcess_list/item.py +261 -0
  162. chemunited-0.0.1/src/chemunited/shared/prcess_list/list.py +154 -0
  163. chemunited-0.0.1/src/chemunited/shared/prcess_list/widget.py +107 -0
  164. chemunited-0.0.1/src/chemunited/shared/resources/README.md +177 -0
  165. chemunited-0.0.1/src/chemunited/shared/resources/__init__.py +0 -0
  166. chemunited-0.0.1/src/chemunited/shared/resources/components/ADC.svg +32 -0
  167. chemunited-0.0.1/src/chemunited/shared/resources/components/BackPressureRegulator.svg +48 -0
  168. chemunited-0.0.1/src/chemunited/shared/resources/components/BottleAccess.svg +34 -0
  169. chemunited-0.0.1/src/chemunited/shared/resources/components/BottlePressureAccess.svg +34 -0
  170. chemunited-0.0.1/src/chemunited/shared/resources/components/BubbleSensor.svg +46 -0
  171. chemunited-0.0.1/src/chemunited/shared/resources/components/Chiller.svg +106 -0
  172. chemunited-0.0.1/src/chemunited/shared/resources/components/CustomFlask.svg +54 -0
  173. chemunited-0.0.1/src/chemunited/shared/resources/components/DAC.svg +32 -0
  174. chemunited-0.0.1/src/chemunited/shared/resources/components/Distributor.svg +20 -0
  175. chemunited-0.0.1/src/chemunited/shared/resources/components/FlaskJacket.svg +20 -0
  176. chemunited-0.0.1/src/chemunited/shared/resources/components/FlowMeter.svg +49 -0
  177. chemunited-0.0.1/src/chemunited/shared/resources/components/FlowReactor.svg +131 -0
  178. chemunited-0.0.1/src/chemunited/shared/resources/components/FlowReactorBase.svg +20 -0
  179. chemunited-0.0.1/src/chemunited/shared/resources/components/FourPortDistributionValve.svg +308 -0
  180. chemunited-0.0.1/src/chemunited/shared/resources/components/FourPortFivePositionValve.svg +282 -0
  181. chemunited-0.0.1/src/chemunited/shared/resources/components/Gantry3D.svg +199 -0
  182. chemunited-0.0.1/src/chemunited/shared/resources/components/GlassBottle.svg +75 -0
  183. chemunited-0.0.1/src/chemunited/shared/resources/components/HPLC.svg +116 -0
  184. chemunited-0.0.1/src/chemunited/shared/resources/components/HPLCControl.svg +1023 -0
  185. chemunited-0.0.1/src/chemunited/shared/resources/components/HPLCPump.svg +79 -0
  186. chemunited-0.0.1/src/chemunited/shared/resources/components/IRControl.svg +36 -0
  187. chemunited-0.0.1/src/chemunited/shared/resources/components/LengthControl.svg +66 -0
  188. chemunited-0.0.1/src/chemunited/shared/resources/components/Loop.svg +128 -0
  189. chemunited-0.0.1/src/chemunited/shared/resources/components/LoopBase.svg +23 -0
  190. chemunited-0.0.1/src/chemunited/shared/resources/components/MFCComponent.svg +226 -0
  191. chemunited-0.0.1/src/chemunited/shared/resources/components/MSControl.svg +79 -0
  192. chemunited-0.0.1/src/chemunited/shared/resources/components/MassFlowControl.svg +40 -0
  193. chemunited-0.0.1/src/chemunited/shared/resources/components/MultiChannelADC.svg +238 -0
  194. chemunited-0.0.1/src/chemunited/shared/resources/components/MultiChannelDAC.svg +238 -0
  195. chemunited-0.0.1/src/chemunited/shared/resources/components/MultiChannelRelay.svg +220 -0
  196. chemunited-0.0.1/src/chemunited/shared/resources/components/NMRControl.svg +48 -0
  197. chemunited-0.0.1/src/chemunited/shared/resources/components/Peltier.svg +76 -0
  198. chemunited-0.0.1/src/chemunited/shared/resources/components/PeltierCoolerTemperatureControl.svg +553 -0
  199. chemunited-0.0.1/src/chemunited/shared/resources/components/PhidgetBubbleSensorComponent.svg +256 -0
  200. chemunited-0.0.1/src/chemunited/shared/resources/components/PhidgetBubbleSensorPowerComponent.svg +59 -0
  201. chemunited-0.0.1/src/chemunited/shared/resources/components/PhotoLeds.svg +57 -0
  202. chemunited-0.0.1/src/chemunited/shared/resources/components/PhotoSensor.svg +144 -0
  203. chemunited-0.0.1/src/chemunited/shared/resources/components/Photoreactor.svg +296 -0
  204. chemunited-0.0.1/src/chemunited/shared/resources/components/PoolDARK.svg +91 -0
  205. chemunited-0.0.1/src/chemunited/shared/resources/components/PoolLIGHT.svg +91 -0
  206. chemunited-0.0.1/src/chemunited/shared/resources/components/Power.svg +27 -0
  207. chemunited-0.0.1/src/chemunited/shared/resources/components/PowerControl.svg +59 -0
  208. chemunited-0.0.1/src/chemunited/shared/resources/components/PowerSwitch.svg +59 -0
  209. chemunited-0.0.1/src/chemunited/shared/resources/components/PressureControl.svg +294 -0
  210. chemunited-0.0.1/src/chemunited/shared/resources/components/PressureSensor.svg +287 -0
  211. chemunited-0.0.1/src/chemunited/shared/resources/components/Relay.svg +26 -0
  212. chemunited-0.0.1/src/chemunited/shared/resources/components/RotaryValve.svg +37 -0
  213. chemunited-0.0.1/src/chemunited/shared/resources/components/Separator.svg +53 -0
  214. chemunited-0.0.1/src/chemunited/shared/resources/components/Sink.svg +77 -0
  215. chemunited-0.0.1/src/chemunited/shared/resources/components/SixPortDistributionValve.svg +364 -0
  216. chemunited-0.0.1/src/chemunited/shared/resources/components/SixPortTwoPositionValve.svg +352 -0
  217. chemunited-0.0.1/src/chemunited/shared/resources/components/SixteenPortDistributionValve.svg +644 -0
  218. chemunited-0.0.1/src/chemunited/shared/resources/components/SolenoidValve.svg +33 -0
  219. chemunited-0.0.1/src/chemunited/shared/resources/components/SolenoidValve2Way.svg +39 -0
  220. chemunited-0.0.1/src/chemunited/shared/resources/components/Source.svg +77 -0
  221. chemunited-0.0.1/src/chemunited/shared/resources/components/SourceSink.svg +22 -0
  222. chemunited-0.0.1/src/chemunited/shared/resources/components/SyringeBarrel.svg +101 -0
  223. chemunited-0.0.1/src/chemunited/shared/resources/components/SyringePlunger.svg +24 -0
  224. chemunited-0.0.1/src/chemunited/shared/resources/components/SyringePump.svg +704 -0
  225. chemunited-0.0.1/src/chemunited/shared/resources/components/TemperatureControl.svg +1089 -0
  226. chemunited-0.0.1/src/chemunited/shared/resources/components/ThreePortFourPositionValve.svg +283 -0
  227. chemunited-0.0.1/src/chemunited/shared/resources/components/ThreePortTwoPositionValve.svg +264 -0
  228. chemunited-0.0.1/src/chemunited/shared/resources/components/TwelvePortDistributionValve.svg +532 -0
  229. chemunited-0.0.1/src/chemunited/shared/resources/components/TwoPortDistributionValve.svg +252 -0
  230. chemunited-0.0.1/src/chemunited/shared/resources/components/Vial.svg +301 -0
  231. chemunited-0.0.1/src/chemunited/shared/resources/icons/add_folder_black.svg +14 -0
  232. chemunited-0.0.1/src/chemunited/shared/resources/icons/add_folder_white.svg +14 -0
  233. chemunited-0.0.1/src/chemunited/shared/resources/icons/air.svg +4 -0
  234. chemunited-0.0.1/src/chemunited/shared/resources/icons/block_for_black.svg +4 -0
  235. chemunited-0.0.1/src/chemunited/shared/resources/icons/block_for_white.svg +4 -0
  236. chemunited-0.0.1/src/chemunited/shared/resources/icons/block_if_black.svg +7 -0
  237. chemunited-0.0.1/src/chemunited/shared/resources/icons/block_if_white.svg +11 -0
  238. chemunited-0.0.1/src/chemunited/shared/resources/icons/boolean_black.svg +13 -0
  239. chemunited-0.0.1/src/chemunited/shared/resources/icons/boolean_white.svg +13 -0
  240. chemunited-0.0.1/src/chemunited/shared/resources/icons/build.svg +12 -0
  241. chemunited-0.0.1/src/chemunited/shared/resources/icons/chemical_black.svg +11 -0
  242. chemunited-0.0.1/src/chemunited/shared/resources/icons/chemical_white.svg +7 -0
  243. chemunited-0.0.1/src/chemunited/shared/resources/icons/chemunited.ico +0 -0
  244. chemunited-0.0.1/src/chemunited/shared/resources/icons/chemunited.svg +346 -0
  245. chemunited-0.0.1/src/chemunited/shared/resources/icons/chemunited_simu.svg +689 -0
  246. chemunited-0.0.1/src/chemunited/shared/resources/icons/choices_black.svg +11 -0
  247. chemunited-0.0.1/src/chemunited/shared/resources/icons/choices_white.svg +11 -0
  248. chemunited-0.0.1/src/chemunited/shared/resources/icons/color_select_black.svg +6 -0
  249. chemunited-0.0.1/src/chemunited/shared/resources/icons/color_select_white.svg +6 -0
  250. chemunited-0.0.1/src/chemunited/shared/resources/icons/complete.svg +1 -0
  251. chemunited-0.0.1/src/chemunited/shared/resources/icons/component_icon.svg +1 -0
  252. chemunited-0.0.1/src/chemunited/shared/resources/icons/connection_black.svg +13 -0
  253. chemunited-0.0.1/src/chemunited/shared/resources/icons/connection_white.svg +15 -0
  254. chemunited-0.0.1/src/chemunited/shared/resources/icons/csv.svg +10 -0
  255. chemunited-0.0.1/src/chemunited/shared/resources/icons/database_black.svg +1 -0
  256. chemunited-0.0.1/src/chemunited/shared/resources/icons/database_white.svg +1 -0
  257. chemunited-0.0.1/src/chemunited/shared/resources/icons/device_hierarchy.svg +1 -0
  258. chemunited-0.0.1/src/chemunited/shared/resources/icons/flowchem_logo.svg +33 -0
  259. chemunited-0.0.1/src/chemunited/shared/resources/icons/home.svg +13 -0
  260. chemunited-0.0.1/src/chemunited/shared/resources/icons/inspect_black.svg +9 -0
  261. chemunited-0.0.1/src/chemunited/shared/resources/icons/inspect_white.svg +9 -0
  262. chemunited-0.0.1/src/chemunited/shared/resources/icons/integer_black.svg +15 -0
  263. chemunited-0.0.1/src/chemunited/shared/resources/icons/integer_white.svg +15 -0
  264. chemunited-0.0.1/src/chemunited/shared/resources/icons/json.svg +7 -0
  265. chemunited-0.0.1/src/chemunited/shared/resources/icons/line_pressure_black.svg +23 -0
  266. chemunited-0.0.1/src/chemunited/shared/resources/icons/line_pressure_white.svg +23 -0
  267. chemunited-0.0.1/src/chemunited/shared/resources/icons/link_black.svg +4 -0
  268. chemunited-0.0.1/src/chemunited/shared/resources/icons/link_white.svg +4 -0
  269. chemunited-0.0.1/src/chemunited/shared/resources/icons/list_black.svg +1 -0
  270. chemunited-0.0.1/src/chemunited/shared/resources/icons/list_white.svg +6 -0
  271. chemunited-0.0.1/src/chemunited/shared/resources/icons/log.svg +12 -0
  272. chemunited-0.0.1/src/chemunited/shared/resources/icons/logo.svg +389 -0
  273. chemunited-0.0.1/src/chemunited/shared/resources/icons/manual_black.svg +12 -0
  274. chemunited-0.0.1/src/chemunited/shared/resources/icons/manual_white.svg +12 -0
  275. chemunited-0.0.1/src/chemunited/shared/resources/icons/measure_black.svg +38 -0
  276. chemunited-0.0.1/src/chemunited/shared/resources/icons/measure_white.svg +38 -0
  277. chemunited-0.0.1/src/chemunited/shared/resources/icons/module.svg +1 -0
  278. chemunited-0.0.1/src/chemunited/shared/resources/icons/molecule_black.svg +48 -0
  279. chemunited-0.0.1/src/chemunited/shared/resources/icons/molecule_white.svg +48 -0
  280. chemunited-0.0.1/src/chemunited/shared/resources/icons/move_black.svg +4 -0
  281. chemunited-0.0.1/src/chemunited/shared/resources/icons/move_white.svg +4 -0
  282. chemunited-0.0.1/src/chemunited/shared/resources/icons/offline.svg +28 -0
  283. chemunited-0.0.1/src/chemunited/shared/resources/icons/online.svg +25 -0
  284. chemunited-0.0.1/src/chemunited/shared/resources/icons/onlineA.svg +22 -0
  285. chemunited-0.0.1/src/chemunited/shared/resources/icons/onlineB.svg +23 -0
  286. chemunited-0.0.1/src/chemunited/shared/resources/icons/onlineC.svg +24 -0
  287. chemunited-0.0.1/src/chemunited/shared/resources/icons/open_folder_black.svg +7 -0
  288. chemunited-0.0.1/src/chemunited/shared/resources/icons/open_folder_white.svg +7 -0
  289. chemunited-0.0.1/src/chemunited/shared/resources/icons/orchestrator_black.svg +2 -0
  290. chemunited-0.0.1/src/chemunited/shared/resources/icons/orchestrator_white.svg +2 -0
  291. chemunited-0.0.1/src/chemunited/shared/resources/icons/pause_black.svg +5 -0
  292. chemunited-0.0.1/src/chemunited/shared/resources/icons/pause_white.svg +5 -0
  293. chemunited-0.0.1/src/chemunited/shared/resources/icons/play_black.svg +14 -0
  294. chemunited-0.0.1/src/chemunited/shared/resources/icons/play_white.svg +14 -0
  295. chemunited-0.0.1/src/chemunited/shared/resources/icons/process_black.svg +14 -0
  296. chemunited-0.0.1/src/chemunited/shared/resources/icons/process_white.svg +14 -0
  297. chemunited-0.0.1/src/chemunited/shared/resources/icons/python.svg +1 -0
  298. chemunited-0.0.1/src/chemunited/shared/resources/icons/router.svg +28 -0
  299. chemunited-0.0.1/src/chemunited/shared/resources/icons/scissor_black.svg +2 -0
  300. chemunited-0.0.1/src/chemunited/shared/resources/icons/scissor_white.svg +14 -0
  301. chemunited-0.0.1/src/chemunited/shared/resources/icons/select_black.svg +12 -0
  302. chemunited-0.0.1/src/chemunited/shared/resources/icons/select_white.svg +12 -0
  303. chemunited-0.0.1/src/chemunited/shared/resources/icons/simulation.svg +27 -0
  304. chemunited-0.0.1/src/chemunited/shared/resources/icons/slow_black.svg +9 -0
  305. chemunited-0.0.1/src/chemunited/shared/resources/icons/slow_white.svg +9 -0
  306. chemunited-0.0.1/src/chemunited/shared/resources/icons/speed_black.svg +10 -0
  307. chemunited-0.0.1/src/chemunited/shared/resources/icons/speed_white.svg +10 -0
  308. chemunited-0.0.1/src/chemunited/shared/resources/icons/status_black.svg +5 -0
  309. chemunited-0.0.1/src/chemunited/shared/resources/icons/status_white.svg +5 -0
  310. chemunited-0.0.1/src/chemunited/shared/resources/icons/stop_black.svg +10 -0
  311. chemunited-0.0.1/src/chemunited/shared/resources/icons/stop_white.svg +10 -0
  312. chemunited-0.0.1/src/chemunited/shared/resources/icons/string_black.svg +6 -0
  313. chemunited-0.0.1/src/chemunited/shared/resources/icons/string_white.svg +6 -0
  314. chemunited-0.0.1/src/chemunited/shared/resources/icons/toml.svg +1 -0
  315. chemunited-0.0.1/src/chemunited/shared/resources/icons/trash_black.svg +1 -0
  316. chemunited-0.0.1/src/chemunited/shared/resources/icons/trash_white.svg +1 -0
  317. chemunited-0.0.1/src/chemunited/shared/resources/icons/update_black.svg +2 -0
  318. chemunited-0.0.1/src/chemunited/shared/resources/icons/update_white.svg +2 -0
  319. chemunited-0.0.1/src/chemunited/shared/resources/icons/upload_black.svg +7 -0
  320. chemunited-0.0.1/src/chemunited/shared/resources/icons/upload_white.svg +7 -0
  321. chemunited-0.0.1/src/chemunited/shared/resources/icons/variable_black.svg +12 -0
  322. chemunited-0.0.1/src/chemunited/shared/resources/icons/variable_white.svg +12 -0
  323. chemunited-0.0.1/src/chemunited/shared/resources/icons/waiting_icon.svg +1 -0
  324. chemunited-0.0.1/src/chemunited/shared/resources/icons/water.svg +5 -0
  325. chemunited-0.0.1/src/chemunited/shared/resources/icons/wifi_black.svg +6 -0
  326. chemunited-0.0.1/src/chemunited/shared/resources/icons/wifi_white.svg +6 -0
  327. chemunited-0.0.1/src/chemunited/shared/resources/lexer/theme_dark.json +62 -0
  328. chemunited-0.0.1/src/chemunited/shared/resources/lexer/theme_light.json +62 -0
  329. chemunited-0.0.1/src/chemunited/shared/resources/qss/dark/loggings_widget.qss +6 -0
  330. chemunited-0.0.1/src/chemunited/shared/resources/qss/dark/main_window.qss +21 -0
  331. chemunited-0.0.1/src/chemunited/shared/resources/qss/light/loggings_widget.qss +6 -0
  332. chemunited-0.0.1/src/chemunited/shared/resources/qss/light/main_window.qss +21 -0
  333. chemunited-0.0.1/src/chemunited/shared/resources/resources_rc.py +31195 -0
  334. chemunited-0.0.1/src/chemunited/shared/resources/resources_rc.qrc +183 -0
  335. chemunited-0.0.1/src/chemunited/shared/resources/scripts/parameter.txt +12 -0
  336. chemunited-0.0.1/src/chemunited/shared/resources/scripts/process.txt +139 -0
  337. chemunited-0.0.1/src/chemunited/shared/resources/scripts/project.txt +43 -0
  338. chemunited-0.0.1/src/chemunited/shared/widgets/__init__.py +0 -0
  339. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/__init__.py +4 -0
  340. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/card_factory.py +95 -0
  341. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/__init__.py +0 -0
  342. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/base_card.py +111 -0
  343. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/bool_card.py +58 -0
  344. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/builder_models.py +251 -0
  345. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/choice_card.py +74 -0
  346. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/float_card.py +73 -0
  347. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/int_card.py +65 -0
  348. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/list_card.py +121 -0
  349. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/quantity_card.py +152 -0
  350. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/cards/str_card.py +50 -0
  351. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/dialog.py +53 -0
  352. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/editor_widget.py +211 -0
  353. chemunited-0.0.1/src/chemunited/shared/widgets/base_mode_editor/example.py +251 -0
  354. chemunited-0.0.1/src/chemunited/shared/widgets/busy_status.py +79 -0
  355. chemunited-0.0.1/src/chemunited/shared/widgets/frame_base.py +293 -0
  356. chemunited-0.0.1/src/chemunited/shared/widgets/loggings_widget.py +360 -0
  357. chemunited-0.0.1/src/chemunited/shared/widgets/logo_window.py +106 -0
  358. chemunited-0.0.1/src/chemunited/shared/widgets/main_window.py +192 -0
  359. chemunited-0.0.1/src/chemunited/shared/widgets/segment_widget.py +49 -0
  360. chemunited-0.0.1/src/chemunited/simulation/__init__.py +4 -0
  361. chemunited-0.0.1/src/chemunited/simulation/final_state.py +297 -0
  362. chemunited-0.0.1/src/chemunited/simulation/graph_simulation.py +10 -0
  363. chemunited-0.0.1/src/chemunited/simulation/playback.py +61 -0
  364. chemunited-0.0.1/src/chemunited/simulation/simulate_report.py +1024 -0
  365. chemunited-0.0.1/src/chemunited/utils/files.py +39 -0
  366. chemunited-0.0.1/src/chemunited/utils/flowchem_listener.py +176 -0
  367. chemunited-0.0.1/src/chemunited/utils/math_functions.py +154 -0
  368. chemunited-0.0.1/src/chemunited/utils/update_dialog.py +82 -0
  369. chemunited-0.0.1/src/chemunited/utils/version_check.py +45 -0
  370. chemunited-0.0.1/src/chemunited.egg-info/PKG-INFO +36 -0
  371. chemunited-0.0.1/src/chemunited.egg-info/SOURCES.txt +374 -0
  372. chemunited-0.0.1/src/chemunited.egg-info/dependency_links.txt +1 -0
  373. chemunited-0.0.1/src/chemunited.egg-info/entry_points.txt +2 -0
  374. chemunited-0.0.1/src/chemunited.egg-info/requires.txt +25 -0
  375. chemunited-0.0.1/src/chemunited.egg-info/top_level.txt +1 -0
  376. chemunited-0.0.1/tests/test_package_data.py +30 -0
@@ -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,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ from .shared.resources import resources_rc
2
+
3
+ __all__ = ["resources_rc"]
@@ -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()
@@ -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)