parsl 2024.3.11__py3-none-any.whl → 2025.1.13__py3-none-any.whl

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 (369) hide show
  1. parsl/__init__.py +9 -10
  2. parsl/addresses.py +29 -7
  3. parsl/app/app.py +7 -8
  4. parsl/app/bash.py +15 -8
  5. parsl/app/errors.py +10 -13
  6. parsl/app/futures.py +8 -10
  7. parsl/app/python.py +2 -1
  8. parsl/benchmark/perf.py +2 -1
  9. parsl/concurrent/__init__.py +2 -2
  10. parsl/config.py +57 -10
  11. parsl/configs/ASPIRE1.py +6 -5
  12. parsl/configs/Azure.py +9 -8
  13. parsl/configs/bridges.py +6 -4
  14. parsl/configs/cc_in2p3.py +3 -3
  15. parsl/configs/ec2.py +3 -1
  16. parsl/configs/expanse.py +4 -3
  17. parsl/configs/frontera.py +3 -4
  18. parsl/configs/htex_local.py +3 -4
  19. parsl/configs/illinoiscluster.py +3 -1
  20. parsl/configs/improv.py +34 -0
  21. parsl/configs/kubernetes.py +4 -3
  22. parsl/configs/local_threads.py +5 -1
  23. parsl/configs/midway.py +5 -3
  24. parsl/configs/osg.py +4 -2
  25. parsl/configs/polaris.py +4 -2
  26. parsl/configs/stampede2.py +6 -5
  27. parsl/configs/summit.py +3 -3
  28. parsl/configs/toss3_llnl.py +4 -3
  29. parsl/configs/vineex_local.py +6 -4
  30. parsl/configs/wqex_local.py +5 -3
  31. parsl/curvezmq.py +4 -0
  32. parsl/data_provider/data_manager.py +4 -3
  33. parsl/data_provider/file_noop.py +1 -2
  34. parsl/data_provider/files.py +3 -3
  35. parsl/data_provider/ftp.py +1 -3
  36. parsl/data_provider/globus.py +7 -6
  37. parsl/data_provider/http.py +2 -2
  38. parsl/data_provider/rsync.py +1 -1
  39. parsl/data_provider/staging.py +2 -2
  40. parsl/data_provider/zip.py +135 -0
  41. parsl/dataflow/dependency_resolvers.py +115 -0
  42. parsl/dataflow/dflow.py +262 -224
  43. parsl/dataflow/errors.py +3 -5
  44. parsl/dataflow/futures.py +27 -14
  45. parsl/dataflow/memoization.py +5 -5
  46. parsl/dataflow/rundirs.py +5 -6
  47. parsl/dataflow/taskrecord.py +4 -5
  48. parsl/executors/__init__.py +4 -2
  49. parsl/executors/base.py +45 -15
  50. parsl/executors/errors.py +13 -0
  51. parsl/executors/execute_task.py +37 -0
  52. parsl/executors/flux/execute_parsl_task.py +3 -3
  53. parsl/executors/flux/executor.py +18 -19
  54. parsl/executors/flux/flux_instance_manager.py +26 -27
  55. parsl/executors/high_throughput/errors.py +43 -3
  56. parsl/executors/high_throughput/executor.py +316 -282
  57. parsl/executors/high_throughput/interchange.py +158 -167
  58. parsl/executors/high_throughput/manager_record.py +5 -0
  59. parsl/executors/high_throughput/manager_selector.py +55 -0
  60. parsl/executors/high_throughput/monitoring_info.py +2 -1
  61. parsl/executors/high_throughput/mpi_executor.py +113 -0
  62. parsl/executors/high_throughput/mpi_prefix_composer.py +10 -11
  63. parsl/executors/high_throughput/mpi_resource_management.py +6 -17
  64. parsl/executors/high_throughput/probe.py +9 -7
  65. parsl/executors/high_throughput/process_worker_pool.py +115 -77
  66. parsl/executors/high_throughput/zmq_pipes.py +81 -23
  67. parsl/executors/radical/executor.py +130 -79
  68. parsl/executors/radical/rpex_resources.py +17 -15
  69. parsl/executors/radical/rpex_worker.py +4 -3
  70. parsl/executors/status_handling.py +157 -51
  71. parsl/executors/taskvine/__init__.py +1 -1
  72. parsl/executors/taskvine/errors.py +1 -1
  73. parsl/executors/taskvine/exec_parsl_function.py +2 -2
  74. parsl/executors/taskvine/executor.py +41 -57
  75. parsl/executors/taskvine/factory.py +1 -1
  76. parsl/executors/taskvine/factory_config.py +1 -1
  77. parsl/executors/taskvine/manager.py +18 -13
  78. parsl/executors/taskvine/manager_config.py +9 -5
  79. parsl/executors/threads.py +6 -6
  80. parsl/executors/workqueue/errors.py +1 -1
  81. parsl/executors/workqueue/exec_parsl_function.py +6 -5
  82. parsl/executors/workqueue/executor.py +64 -63
  83. parsl/executors/workqueue/parsl_coprocess.py +1 -1
  84. parsl/jobs/error_handlers.py +2 -2
  85. parsl/jobs/job_status_poller.py +30 -113
  86. parsl/jobs/states.py +7 -2
  87. parsl/jobs/strategy.py +43 -31
  88. parsl/launchers/__init__.py +12 -3
  89. parsl/launchers/errors.py +1 -1
  90. parsl/launchers/launchers.py +6 -12
  91. parsl/log_utils.py +9 -6
  92. parsl/monitoring/db_manager.py +59 -95
  93. parsl/monitoring/errors.py +6 -0
  94. parsl/monitoring/monitoring.py +87 -356
  95. parsl/monitoring/queries/pandas.py +1 -2
  96. parsl/monitoring/radios/base.py +13 -0
  97. parsl/monitoring/radios/filesystem.py +52 -0
  98. parsl/monitoring/radios/htex.py +57 -0
  99. parsl/monitoring/radios/multiprocessing.py +17 -0
  100. parsl/monitoring/radios/udp.py +56 -0
  101. parsl/monitoring/radios/zmq.py +17 -0
  102. parsl/monitoring/remote.py +33 -37
  103. parsl/monitoring/router.py +212 -0
  104. parsl/monitoring/types.py +5 -6
  105. parsl/monitoring/visualization/app.py +4 -2
  106. parsl/monitoring/visualization/models.py +0 -1
  107. parsl/monitoring/visualization/plots/default/workflow_plots.py +11 -4
  108. parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +1 -0
  109. parsl/monitoring/visualization/utils.py +0 -1
  110. parsl/monitoring/visualization/views.py +16 -8
  111. parsl/multiprocessing.py +0 -1
  112. parsl/process_loggers.py +1 -2
  113. parsl/providers/__init__.py +8 -17
  114. parsl/providers/aws/aws.py +2 -3
  115. parsl/providers/azure/azure.py +4 -5
  116. parsl/providers/base.py +2 -18
  117. parsl/providers/cluster_provider.py +4 -12
  118. parsl/providers/condor/condor.py +7 -17
  119. parsl/providers/errors.py +2 -2
  120. parsl/providers/googlecloud/googlecloud.py +2 -1
  121. parsl/providers/grid_engine/grid_engine.py +5 -14
  122. parsl/providers/kubernetes/kube.py +80 -40
  123. parsl/providers/local/local.py +13 -26
  124. parsl/providers/lsf/lsf.py +5 -23
  125. parsl/providers/pbspro/pbspro.py +5 -17
  126. parsl/providers/slurm/slurm.py +81 -39
  127. parsl/providers/torque/torque.py +3 -14
  128. parsl/serialize/__init__.py +8 -3
  129. parsl/serialize/base.py +1 -2
  130. parsl/serialize/concretes.py +5 -4
  131. parsl/serialize/facade.py +3 -3
  132. parsl/serialize/proxystore.py +3 -2
  133. parsl/tests/__init__.py +1 -1
  134. parsl/tests/configs/azure_single_node.py +4 -5
  135. parsl/tests/configs/bridges.py +3 -2
  136. parsl/tests/configs/cc_in2p3.py +1 -3
  137. parsl/tests/configs/comet.py +2 -1
  138. parsl/tests/configs/ec2_single_node.py +1 -2
  139. parsl/tests/configs/ec2_spot.py +1 -2
  140. parsl/tests/configs/flux_local.py +11 -0
  141. parsl/tests/configs/frontera.py +2 -3
  142. parsl/tests/configs/htex_local.py +3 -5
  143. parsl/tests/configs/htex_local_alternate.py +11 -15
  144. parsl/tests/configs/htex_local_intask_staging.py +5 -9
  145. parsl/tests/configs/htex_local_rsync_staging.py +4 -8
  146. parsl/tests/configs/local_radical.py +1 -3
  147. parsl/tests/configs/local_radical_mpi.py +2 -2
  148. parsl/tests/configs/local_threads_checkpoint_periodic.py +8 -10
  149. parsl/tests/configs/local_threads_monitoring.py +0 -1
  150. parsl/tests/configs/midway.py +2 -2
  151. parsl/tests/configs/nscc_singapore.py +3 -3
  152. parsl/tests/configs/osg_htex.py +1 -1
  153. parsl/tests/configs/petrelkube.py +3 -2
  154. parsl/tests/configs/slurm_local.py +24 -0
  155. parsl/tests/configs/summit.py +1 -0
  156. parsl/tests/configs/taskvine_ex.py +4 -7
  157. parsl/tests/configs/user_opts.py +2 -8
  158. parsl/tests/configs/workqueue_ex.py +4 -6
  159. parsl/tests/conftest.py +27 -13
  160. parsl/tests/integration/test_stress/test_python_simple.py +3 -4
  161. parsl/tests/integration/test_stress/test_python_threads.py +3 -5
  162. parsl/tests/manual_tests/htex_local.py +4 -6
  163. parsl/tests/manual_tests/test_basic.py +1 -0
  164. parsl/tests/manual_tests/test_log_filter.py +3 -1
  165. parsl/tests/manual_tests/test_memory_limits.py +6 -8
  166. parsl/tests/manual_tests/test_regression_220.py +2 -1
  167. parsl/tests/manual_tests/test_udp_simple.py +4 -4
  168. parsl/tests/manual_tests/test_worker_count.py +3 -2
  169. parsl/tests/scaling_tests/htex_local.py +2 -4
  170. parsl/tests/scaling_tests/test_scale.py +0 -9
  171. parsl/tests/scaling_tests/vineex_condor.py +1 -2
  172. parsl/tests/scaling_tests/vineex_local.py +1 -2
  173. parsl/tests/site_tests/site_config_selector.py +1 -6
  174. parsl/tests/site_tests/test_provider.py +4 -2
  175. parsl/tests/site_tests/test_site.py +2 -0
  176. parsl/tests/sites/test_affinity.py +7 -7
  177. parsl/tests/sites/test_dynamic_executor.py +3 -4
  178. parsl/tests/sites/test_ec2.py +3 -2
  179. parsl/tests/sites/test_worker_info.py +4 -5
  180. parsl/tests/test_aalst_patterns.py +0 -1
  181. parsl/tests/test_bash_apps/test_apptimeout.py +2 -2
  182. parsl/tests/test_bash_apps/test_basic.py +10 -4
  183. parsl/tests/test_bash_apps/test_error_codes.py +5 -7
  184. parsl/tests/test_bash_apps/test_inputs_default.py +25 -0
  185. parsl/tests/test_bash_apps/test_kwarg_storage.py +1 -1
  186. parsl/tests/test_bash_apps/test_memoize.py +2 -8
  187. parsl/tests/test_bash_apps/test_memoize_ignore_args.py +9 -14
  188. parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +9 -14
  189. parsl/tests/test_bash_apps/test_multiline.py +1 -1
  190. parsl/tests/test_bash_apps/test_pipeline.py +1 -1
  191. parsl/tests/test_bash_apps/test_std_uri.py +123 -0
  192. parsl/tests/test_bash_apps/test_stdout.py +33 -8
  193. parsl/tests/test_callables.py +2 -2
  194. parsl/tests/test_checkpointing/test_periodic.py +21 -39
  195. parsl/tests/test_checkpointing/test_python_checkpoint_1.py +1 -0
  196. parsl/tests/test_checkpointing/test_python_checkpoint_2.py +2 -2
  197. parsl/tests/test_checkpointing/test_python_checkpoint_3.py +0 -1
  198. parsl/tests/test_checkpointing/test_regression_239.py +1 -1
  199. parsl/tests/test_checkpointing/test_task_exit.py +2 -3
  200. parsl/tests/test_docs/test_from_slides.py +5 -2
  201. parsl/tests/test_docs/test_kwargs.py +4 -1
  202. parsl/tests/test_docs/test_tutorial_1.py +1 -2
  203. parsl/tests/test_docs/test_workflow1.py +2 -2
  204. parsl/tests/test_docs/test_workflow2.py +0 -1
  205. parsl/tests/test_error_handling/test_rand_fail.py +2 -2
  206. parsl/tests/test_error_handling/test_resource_spec.py +10 -12
  207. parsl/tests/test_error_handling/test_retries.py +6 -16
  208. parsl/tests/test_error_handling/test_retry_handler.py +1 -0
  209. parsl/tests/test_error_handling/test_retry_handler_failure.py +2 -1
  210. parsl/tests/test_error_handling/test_serialization_fail.py +1 -1
  211. parsl/tests/test_error_handling/test_wrap_with_logs.py +1 -0
  212. parsl/tests/test_execute_task.py +29 -0
  213. parsl/tests/test_flux.py +1 -1
  214. parsl/tests/test_htex/test_basic.py +2 -3
  215. parsl/tests/test_htex/test_block_manager_selector_unit.py +20 -0
  216. parsl/tests/test_htex/test_command_client_timeout.py +66 -0
  217. parsl/tests/test_htex/test_connected_blocks.py +3 -2
  218. parsl/tests/test_htex/test_cpu_affinity_explicit.py +6 -10
  219. parsl/tests/test_htex/test_disconnected_blocks.py +6 -5
  220. parsl/tests/test_htex/test_disconnected_blocks_failing_provider.py +71 -0
  221. parsl/tests/test_htex/test_drain.py +79 -0
  222. parsl/tests/test_htex/test_htex.py +51 -25
  223. parsl/tests/test_htex/test_manager_failure.py +0 -1
  224. parsl/tests/test_htex/test_manager_selector_by_block.py +51 -0
  225. parsl/tests/test_htex/test_managers_command.py +36 -0
  226. parsl/tests/test_htex/test_missing_worker.py +2 -12
  227. parsl/tests/test_htex/test_multiple_disconnected_blocks.py +9 -9
  228. parsl/tests/test_htex/test_resource_spec_validation.py +45 -0
  229. parsl/tests/test_htex/test_zmq_binding.py +29 -8
  230. parsl/tests/test_monitoring/test_app_names.py +86 -0
  231. parsl/tests/test_monitoring/test_basic.py +73 -25
  232. parsl/tests/test_monitoring/test_db_locks.py +6 -4
  233. parsl/tests/test_monitoring/test_fuzz_zmq.py +19 -8
  234. parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +80 -0
  235. parsl/tests/test_monitoring/test_incomplete_futures.py +5 -4
  236. parsl/tests/test_monitoring/test_memoization_representation.py +4 -2
  237. parsl/tests/test_monitoring/test_stdouterr.py +134 -0
  238. parsl/tests/test_monitoring/test_viz_colouring.py +1 -0
  239. parsl/tests/test_mpi_apps/test_bad_mpi_config.py +33 -26
  240. parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +28 -11
  241. parsl/tests/test_mpi_apps/test_mpi_prefix.py +4 -4
  242. parsl/tests/test_mpi_apps/test_mpi_scheduler.py +7 -2
  243. parsl/tests/test_mpi_apps/test_mpiex.py +64 -0
  244. parsl/tests/test_mpi_apps/test_resource_spec.py +42 -49
  245. parsl/tests/test_providers/test_kubernetes_provider.py +102 -0
  246. parsl/tests/test_providers/test_local_provider.py +3 -132
  247. parsl/tests/test_providers/test_pbspro_template.py +2 -3
  248. parsl/tests/test_providers/test_slurm_template.py +2 -3
  249. parsl/tests/test_providers/test_submiterror_deprecation.py +2 -1
  250. parsl/tests/test_python_apps/test_context_manager.py +128 -0
  251. parsl/tests/test_python_apps/test_dep_standard_futures.py +2 -1
  252. parsl/tests/test_python_apps/test_dependencies_deep.py +59 -0
  253. parsl/tests/test_python_apps/test_fail.py +0 -25
  254. parsl/tests/test_python_apps/test_futures.py +2 -1
  255. parsl/tests/test_python_apps/test_inputs_default.py +22 -0
  256. parsl/tests/test_python_apps/test_join.py +0 -1
  257. parsl/tests/test_python_apps/test_lifted.py +11 -7
  258. parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +1 -0
  259. parsl/tests/test_python_apps/test_outputs.py +1 -1
  260. parsl/tests/test_python_apps/test_pluggable_future_resolution.py +161 -0
  261. parsl/tests/test_radical/test_mpi_funcs.py +1 -2
  262. parsl/tests/test_regression/test_1480.py +2 -1
  263. parsl/tests/test_regression/test_1653.py +2 -1
  264. parsl/tests/test_regression/test_226.py +1 -0
  265. parsl/tests/test_regression/test_2652.py +1 -0
  266. parsl/tests/test_regression/test_69a.py +0 -1
  267. parsl/tests/test_regression/test_854.py +4 -2
  268. parsl/tests/test_regression/test_97_parallelism_0.py +1 -2
  269. parsl/tests/test_regression/test_98.py +0 -1
  270. parsl/tests/test_scaling/test_block_error_handler.py +9 -4
  271. parsl/tests/test_scaling/test_regression_1621.py +11 -15
  272. parsl/tests/test_scaling/test_regression_3568_scaledown_vs_MISSING.py +84 -0
  273. parsl/tests/test_scaling/test_regression_3696_oscillation.py +103 -0
  274. parsl/tests/test_scaling/test_scale_down.py +2 -5
  275. parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +6 -18
  276. parsl/tests/test_scaling/test_scale_down_htex_unregistered.py +71 -0
  277. parsl/tests/test_scaling/test_shutdown_scalein.py +73 -0
  278. parsl/tests/test_scaling/test_worker_interchange_bad_messages_3262.py +90 -0
  279. parsl/tests/test_serialization/test_2555_caching_deserializer.py +1 -1
  280. parsl/tests/test_serialization/test_3495_deserialize_managerlost.py +47 -0
  281. parsl/tests/test_serialization/test_basic.py +2 -1
  282. parsl/tests/test_serialization/test_htex_code_cache.py +3 -4
  283. parsl/tests/test_serialization/test_pack_resource_spec.py +2 -1
  284. parsl/tests/test_serialization/test_proxystore_configured.py +10 -6
  285. parsl/tests/test_serialization/test_proxystore_impl.py +5 -3
  286. parsl/tests/test_shutdown/test_kill_monitoring.py +64 -0
  287. parsl/tests/test_staging/staging_provider.py +2 -2
  288. parsl/tests/test_staging/test_1316.py +3 -4
  289. parsl/tests/test_staging/test_docs_1.py +2 -1
  290. parsl/tests/test_staging/test_docs_2.py +2 -1
  291. parsl/tests/test_staging/test_elaborate_noop_file.py +2 -3
  292. parsl/tests/{test_data → test_staging}/test_file.py +6 -6
  293. parsl/tests/{test_data → test_staging}/test_output_chain_filenames.py +3 -0
  294. parsl/tests/test_staging/test_staging_ftp.py +1 -0
  295. parsl/tests/test_staging/test_staging_https.py +5 -2
  296. parsl/tests/test_staging/test_staging_stdout.py +64 -0
  297. parsl/tests/test_staging/test_zip_in.py +39 -0
  298. parsl/tests/test_staging/test_zip_out.py +110 -0
  299. parsl/tests/test_staging/test_zip_to_zip.py +41 -0
  300. parsl/tests/test_summary.py +2 -2
  301. parsl/tests/test_thread_parallelism.py +0 -1
  302. parsl/tests/test_threads/test_configs.py +1 -2
  303. parsl/tests/test_threads/test_lazy_errors.py +2 -2
  304. parsl/tests/test_utils/test_execute_wait.py +35 -0
  305. parsl/tests/test_utils/test_sanitize_dns.py +76 -0
  306. parsl/tests/unit/test_address.py +20 -0
  307. parsl/tests/unit/test_file.py +99 -0
  308. parsl/tests/unit/test_usage_tracking.py +66 -0
  309. parsl/usage_tracking/api.py +65 -0
  310. parsl/usage_tracking/levels.py +6 -0
  311. parsl/usage_tracking/usage.py +104 -62
  312. parsl/utils.py +139 -6
  313. parsl/version.py +1 -1
  314. {parsl-2024.3.11.data → parsl-2025.1.13.data}/scripts/exec_parsl_function.py +6 -5
  315. parsl-2025.1.13.data/scripts/interchange.py +649 -0
  316. {parsl-2024.3.11.data → parsl-2025.1.13.data}/scripts/process_worker_pool.py +115 -77
  317. parsl-2025.1.13.dist-info/METADATA +96 -0
  318. parsl-2025.1.13.dist-info/RECORD +462 -0
  319. {parsl-2024.3.11.dist-info → parsl-2025.1.13.dist-info}/WHEEL +1 -1
  320. parsl/channels/__init__.py +0 -7
  321. parsl/channels/base.py +0 -141
  322. parsl/channels/errors.py +0 -113
  323. parsl/channels/local/local.py +0 -164
  324. parsl/channels/oauth_ssh/oauth_ssh.py +0 -110
  325. parsl/channels/ssh/ssh.py +0 -276
  326. parsl/channels/ssh_il/__init__.py +0 -0
  327. parsl/channels/ssh_il/ssh_il.py +0 -74
  328. parsl/configs/ad_hoc.py +0 -35
  329. parsl/executors/radical/rpex_master.py +0 -42
  330. parsl/monitoring/radios.py +0 -175
  331. parsl/providers/ad_hoc/__init__.py +0 -0
  332. parsl/providers/ad_hoc/ad_hoc.py +0 -248
  333. parsl/providers/cobalt/__init__.py +0 -0
  334. parsl/providers/cobalt/cobalt.py +0 -236
  335. parsl/providers/cobalt/template.py +0 -17
  336. parsl/tests/configs/ad_hoc_cluster_htex.py +0 -35
  337. parsl/tests/configs/cooley_htex.py +0 -37
  338. parsl/tests/configs/htex_ad_hoc_cluster.py +0 -28
  339. parsl/tests/configs/local_adhoc.py +0 -18
  340. parsl/tests/configs/swan_htex.py +0 -43
  341. parsl/tests/configs/theta.py +0 -37
  342. parsl/tests/integration/test_channels/__init__.py +0 -0
  343. parsl/tests/integration/test_channels/test_channels.py +0 -17
  344. parsl/tests/integration/test_channels/test_local_channel.py +0 -42
  345. parsl/tests/integration/test_channels/test_scp_1.py +0 -45
  346. parsl/tests/integration/test_channels/test_ssh_1.py +0 -40
  347. parsl/tests/integration/test_channels/test_ssh_errors.py +0 -46
  348. parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -41
  349. parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -24
  350. parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -48
  351. parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +0 -88
  352. parsl/tests/manual_tests/test_oauth_ssh.py +0 -13
  353. parsl/tests/sites/test_local_adhoc.py +0 -61
  354. parsl/tests/test_channels/__init__.py +0 -0
  355. parsl/tests/test_channels/test_large_output.py +0 -22
  356. parsl/tests/test_data/__init__.py +0 -0
  357. parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py +0 -51
  358. parsl/tests/test_providers/test_cobalt_deprecation_warning.py +0 -16
  359. parsl-2024.3.11.dist-info/METADATA +0 -98
  360. parsl-2024.3.11.dist-info/RECORD +0 -447
  361. parsl/{channels/local → monitoring/radios}/__init__.py +0 -0
  362. parsl/{channels/oauth_ssh → tests/test_shutdown}/__init__.py +0 -0
  363. parsl/tests/{test_data → test_staging}/test_file_apps.py +0 -0
  364. parsl/tests/{test_data → test_staging}/test_file_staging.py +0 -0
  365. parsl/{channels/ssh → tests/unit}/__init__.py +0 -0
  366. {parsl-2024.3.11.data → parsl-2025.1.13.data}/scripts/parsl_coprocess.py +1 -1
  367. {parsl-2024.3.11.dist-info → parsl-2025.1.13.dist-info}/LICENSE +0 -0
  368. {parsl-2024.3.11.dist-info → parsl-2025.1.13.dist-info}/entry_points.txt +0 -0
  369. {parsl-2024.3.11.dist-info → parsl-2025.1.13.dist-info}/top_level.txt +0 -0
@@ -1,41 +0,0 @@
1
- import parsl
2
- from parsl.channels.ssh.ssh import SSHChannel as SSH
3
-
4
-
5
- def connect_and_list(hostname, username):
6
- conn = SSH(hostname, username=username)
7
- ec, out, err = conn.execute_wait("echo $HOSTNAME")
8
- conn.close()
9
- return out
10
-
11
-
12
- def test_push(conn, fname="test001.txt"):
13
-
14
- with open(fname, 'w') as f:
15
- f.write("Hello from parsl.ssh testing\n")
16
-
17
- conn.push_file(fname, "/tmp")
18
- ec, out, err = conn.execute_wait("ls /tmp/{0}".format(fname))
19
- print(ec, out, err)
20
-
21
-
22
- def test_pull(conn, fname="test001.txt"):
23
-
24
- local = "foo"
25
- conn.pull_file("/tmp/{0}".format(fname), local)
26
-
27
- with open("{0}/{1}".format(local, fname), 'r') as f:
28
- print(f.readlines())
29
-
30
-
31
- if __name__ == "__main__":
32
-
33
- parsl.set_stream_logger()
34
-
35
- # This is for testing
36
- conn = SSH("midway.rcc.uchicago.edu", username="yadunand")
37
-
38
- test_push(conn)
39
- test_pull(conn)
40
-
41
- conn.close()
@@ -1,24 +0,0 @@
1
- import parsl
2
- from parsl.channels.ssh_il.ssh_il import SSHInteractiveLoginChannel as SSH
3
-
4
-
5
- def connect_and_list(hostname, username):
6
- conn = SSH(hostname, username=username)
7
- ec, out, err = conn.execute_wait("echo $HOSTNAME")
8
- conn.close()
9
- return out
10
-
11
-
12
- def test_cooley():
13
- ''' Test ssh channels to midway
14
- '''
15
- url = 'cooley.alcf.anl.gov'
16
- uname = 'yadunand'
17
- out = connect_and_list(url, uname)
18
- print("Sitename :{0} hostname:{1}".format(url, out))
19
- return
20
-
21
-
22
- if __name__ == "__main__":
23
- parsl.set_stream_logger()
24
- test_cooley()
@@ -1,48 +0,0 @@
1
- import parsl
2
- from parsl import python_app
3
- parsl.set_stream_logger()
4
-
5
- from parsl.providers import AdHocProvider
6
- from parsl.channels import SSHChannel
7
- from parsl.config import Config
8
- from parsl.executors import HighThroughputExecutor
9
-
10
- remotes = ['midway2-login2.rcc.uchicago.edu', 'midway2-login1.rcc.uchicago.edu']
11
-
12
- config = Config(
13
- executors=[
14
- HighThroughputExecutor(
15
- label='AdHoc',
16
- max_workers_per_node=2,
17
- worker_logdir_root="/scratch/midway2/yadunand/parsl_scripts",
18
- encrypted=True,
19
- provider=AdHocProvider(
20
- worker_init="source /scratch/midway2/yadunand/parsl_env_setup.sh",
21
- channels=[SSHChannel(hostname=m,
22
- username="yadunand",
23
- script_dir="/scratch/midway2/yadunand/parsl_cluster")
24
- for m in remotes]
25
- )
26
- )
27
- ]
28
- )
29
-
30
-
31
- @python_app
32
- def platform(sleep=2, stdout=None):
33
- import platform
34
- import time
35
- time.sleep(sleep)
36
- return platform.uname()
37
-
38
-
39
- def test_raw_provider():
40
-
41
- parsl.load(config)
42
-
43
- x = [platform() for i in range(10)]
44
- print([i.result() for i in x])
45
-
46
-
47
- if __name__ == "__main__":
48
- test_raw_provider()
@@ -1,88 +0,0 @@
1
- import parsl
2
- from parsl.monitoring.monitoring import MonitoringHub
3
- from parsl.config import Config
4
- from parsl.executors import HighThroughputExecutor
5
- from parsl.launchers import AprunLauncher
6
- from parsl.providers import CobaltProvider
7
-
8
- import logging
9
- from parsl.app.app import python_app
10
-
11
-
12
- def local_setup():
13
- threads_config = Config(
14
- executors=[
15
- HighThroughputExecutor(
16
- label="theta_htex",
17
- # worker_debug=True,
18
- cores_per_worker=4,
19
- encrypted=True,
20
- provider=CobaltProvider(
21
- queue='debug-flat-quad',
22
- account='CSC249ADCD01',
23
- launcher=AprunLauncher(overrides="-d 64"),
24
- worker_init='source activate parsl-issues',
25
- init_blocks=1,
26
- max_blocks=1,
27
- min_blocks=1,
28
- nodes_per_block=4,
29
- cmd_timeout=60,
30
- walltime='00:10:00',
31
- ),
32
- )
33
- ],
34
- monitoring=MonitoringHub(
35
- hub_port=55055,
36
- logging_level=logging.DEBUG,
37
- resource_monitoring_interval=10),
38
- strategy='none')
39
- parsl.load(threads_config)
40
-
41
-
42
- def local_teardown():
43
- parsl.clear()
44
-
45
-
46
- @python_app
47
- def inc(x):
48
- import time
49
- start = time.time()
50
- sleep_duration = 30.0
51
- while True:
52
- x += 1
53
- end = time.time()
54
- if end - start >= sleep_duration:
55
- break
56
- return x
57
-
58
-
59
- @python_app
60
- def add_inc(inputs=[]):
61
- import time
62
- start = time.time()
63
- sleep_duration = 30.0
64
- res = sum(inputs)
65
- while True:
66
- res += 1
67
- end = time.time()
68
- if end - start >= sleep_duration:
69
- break
70
- return res
71
-
72
-
73
- if __name__ == "__main__":
74
-
75
- total = 200
76
- half = int(total / 2)
77
- one_third = int(total / 3)
78
- two_third = int(total / 3 * 2)
79
- futures_1 = [inc(i) for i in range(total)]
80
- futures_2 = [add_inc(inputs=futures_1[0:half]),
81
- add_inc(inputs=futures_1[half:total])]
82
- futures_3 = [inc(futures_2[0]) for _ in range(half)] + [inc(futures_2[1]) for _ in range(half)]
83
- futures_4 = [add_inc(inputs=futures_3[0:one_third]),
84
- add_inc(inputs=futures_3[one_third:two_third]),
85
- add_inc(inputs=futures_3[two_third:total])]
86
-
87
- print([f.result() for f in futures_4])
88
- print("Done")
@@ -1,13 +0,0 @@
1
- from parsl.channels import OAuthSSHChannel
2
-
3
-
4
- def test_channel():
5
- channel = OAuthSSHChannel(hostname='ssh.demo.globus.org', username='yadunand')
6
- x, stdout, stderr = channel.execute_wait('ls')
7
- print(x, stdout, stderr)
8
- assert x == 0, "Expected exit code 0, got {}".format(x)
9
-
10
-
11
- if __name__ == '__main__':
12
-
13
- test_channel()
@@ -1,61 +0,0 @@
1
- import pytest
2
-
3
- from parsl import python_app
4
- from parsl.tests.configs.local_adhoc import fresh_config as local_config
5
-
6
- import logging
7
- logger = logging.getLogger(__name__)
8
-
9
-
10
- @python_app
11
- def python_app_2():
12
- import os
13
- import threading
14
- import time
15
- time.sleep(1)
16
- return "Hello from PID[{}] TID[{}]".format(os.getpid(), threading.current_thread())
17
-
18
-
19
- @python_app
20
- def python_app_1():
21
- import os
22
- import threading
23
- import time
24
- time.sleep(1)
25
- return "Hello from PID[{}] TID[{}]".format(os.getpid(), threading.current_thread())
26
-
27
-
28
- @python_app
29
- def bash_app(stdout=None, stderr=None):
30
- return 'echo "Hello from $(uname -a)" ; sleep 2'
31
-
32
-
33
- @pytest.mark.local
34
- def test_python(N=2):
35
- """Testing basic python functionality."""
36
-
37
- r1 = {}
38
- r2 = {}
39
- for i in range(0, N):
40
- r1[i] = python_app_1()
41
- r2[i] = python_app_2()
42
- print("Waiting ....")
43
-
44
- for x in r1:
45
- print("python_app_1 : ", r1[x].result())
46
- for x in r2:
47
- print("python_app_2 : ", r2[x].result())
48
-
49
- return
50
-
51
-
52
- @pytest.mark.local
53
- def test_bash():
54
- """Testing basic bash functionality."""
55
-
56
- import os
57
- fname = os.path.basename(__file__)
58
-
59
- x = bash_app(stdout="{0}.out".format(fname))
60
- print("Waiting ....")
61
- print(x.result())
File without changes
@@ -1,22 +0,0 @@
1
- import pytest
2
-
3
- from parsl.channels.local.local import LocalChannel
4
-
5
-
6
- @pytest.mark.local
7
- def test_local_large_output_2210():
8
- """Regression test for #2210.
9
- The local channel was hanging if the specified command gave too
10
- much output, due to a race condition between process exiting and
11
- pipes filling up.
12
- """
13
-
14
- c = LocalChannel()
15
-
16
- # this will output 128kb of stdout
17
- c.execute_wait("yes | dd count=128 bs=1024", walltime=60)
18
-
19
- # if this test fails, execute_wait should raise a timeout
20
- # exception.
21
-
22
- # The contents out the output is not verified by this test
File without changes
@@ -1,51 +0,0 @@
1
- import logging
2
- from typing import Dict
3
- import pytest
4
- import parsl
5
- from parsl import python_app
6
- from parsl.tests.configs.htex_local import fresh_config
7
-
8
- EXECUTOR_LABEL = "MPI_TEST"
9
-
10
-
11
- def local_setup():
12
- config = fresh_config()
13
- config.executors[0].label = EXECUTOR_LABEL
14
- config.executors[0].max_workers_per_node = 1
15
- config.executors[0].enable_mpi_mode = False
16
- parsl.load(config)
17
-
18
-
19
- def local_teardown():
20
- parsl.dfk().cleanup()
21
- parsl.clear()
22
-
23
-
24
- @python_app
25
- def get_env_vars(parsl_resource_specification: Dict = {}) -> Dict:
26
- import os
27
-
28
- parsl_vars = {}
29
- for key in os.environ:
30
- if key.startswith("PARSL_"):
31
- parsl_vars[key] = os.environ[key]
32
- return parsl_vars
33
-
34
-
35
- @pytest.mark.local
36
- def test_only_resource_specs_set():
37
- """Confirm that resource_spec env vars are set while launch prefixes are not
38
- when enable_mpi_mode = False"""
39
- resource_spec = {
40
- "num_nodes": 4,
41
- "ranks_per_node": 2,
42
- }
43
-
44
- future = get_env_vars(parsl_resource_specification=resource_spec)
45
-
46
- result = future.result()
47
- assert isinstance(result, Dict)
48
- assert "PARSL_DEFAULT_PREFIX" not in result
49
- assert "PARSL_SRUN_PREFIX" not in result
50
- assert result["PARSL_NUM_NODES"] == str(resource_spec["num_nodes"])
51
- assert result["PARSL_RANKS_PER_NODE"] == str(resource_spec["ranks_per_node"])
@@ -1,16 +0,0 @@
1
- import warnings
2
- import pytest
3
- from parsl.providers import CobaltProvider
4
-
5
-
6
- @pytest.mark.local
7
- def test_deprecation_warning():
8
-
9
- with warnings.catch_warnings(record=True) as w:
10
- warnings.simplefilter("always")
11
-
12
- CobaltProvider()
13
-
14
- assert len(w) == 1
15
- assert issubclass(w[-1].category, DeprecationWarning)
16
- assert "CobaltProvider" in str(w[-1].message)
@@ -1,98 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: parsl
3
- Version: 2024.3.11
4
- Summary: Simple data dependent workflows in Python
5
- Home-page: https://github.com/Parsl/parsl
6
- Download-URL: https://github.com/Parsl/parsl/archive/2024.03.11.tar.gz
7
- Author: The Parsl Team
8
- Author-email: parsl@googlegroups.com
9
- License: Apache 2.0
10
- Keywords: Workflows,Scientific computing
11
- Classifier: Development Status :: 5 - Production/Stable
12
- Classifier: Intended Audience :: Developers
13
- Classifier: License :: OSI Approved :: Apache Software License
14
- Classifier: Programming Language :: Python :: 3.8
15
- Classifier: Programming Language :: Python :: 3.9
16
- Classifier: Programming Language :: Python :: 3.10
17
- Classifier: Programming Language :: Python :: 3.11
18
- Classifier: Programming Language :: Python :: 3.12
19
- Requires-Python: >=3.8.0
20
- License-File: LICENSE
21
- Requires-Dist: pyzmq >=17.1.2
22
- Requires-Dist: typeguard !=3.*,<5,>=2.10
23
- Requires-Dist: typing-extensions <5,>=4.6
24
- Requires-Dist: globus-sdk
25
- Requires-Dist: dill
26
- Requires-Dist: tblib
27
- Requires-Dist: requests
28
- Requires-Dist: paramiko
29
- Requires-Dist: psutil >=5.5.1
30
- Requires-Dist: setproctitle
31
- Provides-Extra: all
32
- Requires-Dist: sqlalchemy <2,>=1.4 ; extra == 'all'
33
- Requires-Dist: pydot ; extra == 'all'
34
- Requires-Dist: networkx <2.6,>=2.5 ; extra == 'all'
35
- Requires-Dist: Flask >=1.0.2 ; extra == 'all'
36
- Requires-Dist: flask-sqlalchemy ; extra == 'all'
37
- Requires-Dist: pandas <2.2 ; extra == 'all'
38
- Requires-Dist: plotly ; extra == 'all'
39
- Requires-Dist: python-daemon ; extra == 'all'
40
- Requires-Dist: boto3 ; extra == 'all'
41
- Requires-Dist: kubernetes ; extra == 'all'
42
- Requires-Dist: oauth-ssh >=0.9 ; extra == 'all'
43
- Requires-Dist: ipython <=8.6.0 ; extra == 'all'
44
- Requires-Dist: nbsphinx ; extra == 'all'
45
- Requires-Dist: sphinx <7.2,>=7.1 ; extra == 'all'
46
- Requires-Dist: sphinx-rtd-theme ; extra == 'all'
47
- Requires-Dist: google-auth ; extra == 'all'
48
- Requires-Dist: google-api-python-client ; extra == 'all'
49
- Requires-Dist: python-gssapi ; extra == 'all'
50
- Requires-Dist: azure <=4 ; extra == 'all'
51
- Requires-Dist: msrestazure ; extra == 'all'
52
- Requires-Dist: work-queue ; extra == 'all'
53
- Requires-Dist: pyyaml ; extra == 'all'
54
- Requires-Dist: cffi ; extra == 'all'
55
- Requires-Dist: jsonschema ; extra == 'all'
56
- Requires-Dist: proxystore ; extra == 'all'
57
- Requires-Dist: radical.pilot ; extra == 'all'
58
- Provides-Extra: aws
59
- Requires-Dist: boto3 ; extra == 'aws'
60
- Provides-Extra: azure
61
- Requires-Dist: azure <=4 ; extra == 'azure'
62
- Requires-Dist: msrestazure ; extra == 'azure'
63
- Provides-Extra: docs
64
- Requires-Dist: ipython <=8.6.0 ; extra == 'docs'
65
- Requires-Dist: nbsphinx ; extra == 'docs'
66
- Requires-Dist: sphinx <7.2,>=7.1 ; extra == 'docs'
67
- Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
68
- Provides-Extra: flux
69
- Requires-Dist: pyyaml ; extra == 'flux'
70
- Requires-Dist: cffi ; extra == 'flux'
71
- Requires-Dist: jsonschema ; extra == 'flux'
72
- Provides-Extra: google_cloud
73
- Requires-Dist: google-auth ; extra == 'google_cloud'
74
- Requires-Dist: google-api-python-client ; extra == 'google_cloud'
75
- Provides-Extra: gssapi
76
- Requires-Dist: python-gssapi ; extra == 'gssapi'
77
- Provides-Extra: kubernetes
78
- Requires-Dist: kubernetes ; extra == 'kubernetes'
79
- Provides-Extra: monitoring
80
- Requires-Dist: sqlalchemy <2,>=1.4 ; extra == 'monitoring'
81
- Provides-Extra: oauth_ssh
82
- Requires-Dist: oauth-ssh >=0.9 ; extra == 'oauth_ssh'
83
- Provides-Extra: proxystore
84
- Requires-Dist: proxystore ; extra == 'proxystore'
85
- Provides-Extra: radical-pilot
86
- Requires-Dist: radical.pilot ; extra == 'radical-pilot'
87
- Provides-Extra: visualization
88
- Requires-Dist: pydot ; extra == 'visualization'
89
- Requires-Dist: networkx <2.6,>=2.5 ; extra == 'visualization'
90
- Requires-Dist: Flask >=1.0.2 ; extra == 'visualization'
91
- Requires-Dist: flask-sqlalchemy ; extra == 'visualization'
92
- Requires-Dist: pandas <2.2 ; extra == 'visualization'
93
- Requires-Dist: plotly ; extra == 'visualization'
94
- Requires-Dist: python-daemon ; extra == 'visualization'
95
- Provides-Extra: workqueue
96
- Requires-Dist: work-queue ; extra == 'workqueue'
97
-
98
- Simple parallel workflows system for Python