parsl 2024.3.11__tar.gz → 2025.1.13__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 (516) hide show
  1. {parsl-2024.3.11/parsl.egg-info → parsl-2025.1.13}/PKG-INFO +3 -5
  2. {parsl-2024.3.11 → parsl-2025.1.13}/README.rst +22 -16
  3. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/__init__.py +9 -10
  4. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/addresses.py +29 -7
  5. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/app/app.py +7 -8
  6. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/app/bash.py +15 -8
  7. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/app/errors.py +10 -13
  8. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/app/futures.py +8 -10
  9. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/app/python.py +2 -1
  10. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/benchmark/perf.py +2 -1
  11. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/concurrent/__init__.py +2 -2
  12. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/config.py +57 -10
  13. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/ASPIRE1.py +6 -5
  14. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/Azure.py +9 -8
  15. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/bridges.py +6 -4
  16. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/cc_in2p3.py +3 -3
  17. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/ec2.py +3 -1
  18. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/expanse.py +4 -3
  19. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/frontera.py +3 -4
  20. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/htex_local.py +3 -4
  21. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/illinoiscluster.py +3 -1
  22. parsl-2025.1.13/parsl/configs/improv.py +34 -0
  23. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/kubernetes.py +4 -3
  24. parsl-2025.1.13/parsl/configs/local_threads.py +8 -0
  25. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/midway.py +5 -3
  26. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/osg.py +4 -2
  27. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/polaris.py +4 -2
  28. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/stampede2.py +6 -5
  29. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/summit.py +3 -3
  30. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/toss3_llnl.py +4 -3
  31. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/vineex_local.py +6 -4
  32. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/configs/wqex_local.py +5 -3
  33. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/curvezmq.py +4 -0
  34. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/data_provider/data_manager.py +4 -3
  35. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/data_provider/file_noop.py +1 -2
  36. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/data_provider/ftp.py +1 -3
  37. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/data_provider/globus.py +7 -6
  38. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/data_provider/staging.py +2 -2
  39. parsl-2025.1.13/parsl/data_provider/zip.py +135 -0
  40. parsl-2025.1.13/parsl/dataflow/dependency_resolvers.py +115 -0
  41. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/dataflow/dflow.py +262 -224
  42. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/dataflow/errors.py +3 -5
  43. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/dataflow/futures.py +27 -14
  44. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/dataflow/memoization.py +5 -5
  45. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/dataflow/rundirs.py +5 -6
  46. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/dataflow/taskrecord.py +4 -5
  47. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/__init__.py +4 -2
  48. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/base.py +45 -15
  49. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/errors.py +13 -0
  50. parsl-2025.1.13/parsl/executors/execute_task.py +37 -0
  51. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/flux/execute_parsl_task.py +3 -3
  52. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/flux/executor.py +18 -19
  53. parsl-2025.1.13/parsl/executors/flux/flux_instance_manager.py +56 -0
  54. parsl-2025.1.13/parsl/executors/high_throughput/errors.py +52 -0
  55. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/high_throughput/executor.py +316 -282
  56. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/high_throughput/interchange.py +158 -167
  57. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/high_throughput/manager_record.py +5 -0
  58. parsl-2025.1.13/parsl/executors/high_throughput/manager_selector.py +55 -0
  59. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/high_throughput/monitoring_info.py +2 -1
  60. parsl-2025.1.13/parsl/executors/high_throughput/mpi_executor.py +113 -0
  61. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/high_throughput/mpi_prefix_composer.py +10 -11
  62. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/high_throughput/mpi_resource_management.py +6 -17
  63. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/high_throughput/probe.py +9 -7
  64. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/high_throughput/process_worker_pool.py +115 -77
  65. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/high_throughput/zmq_pipes.py +81 -23
  66. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/radical/executor.py +130 -79
  67. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/radical/rpex_resources.py +17 -15
  68. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/radical/rpex_worker.py +4 -3
  69. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/status_handling.py +157 -51
  70. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/taskvine/executor.py +41 -57
  71. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/taskvine/factory_config.py +1 -1
  72. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/taskvine/manager.py +18 -13
  73. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/taskvine/manager_config.py +9 -5
  74. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/threads.py +6 -6
  75. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/workqueue/exec_parsl_function.py +6 -5
  76. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/workqueue/executor.py +64 -63
  77. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/jobs/error_handlers.py +2 -2
  78. parsl-2025.1.13/parsl/jobs/job_status_poller.py +53 -0
  79. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/jobs/states.py +7 -2
  80. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/jobs/strategy.py +43 -31
  81. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/launchers/__init__.py +12 -3
  82. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/launchers/launchers.py +6 -12
  83. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/log_utils.py +9 -6
  84. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/db_manager.py +59 -95
  85. parsl-2025.1.13/parsl/monitoring/errors.py +6 -0
  86. parsl-2025.1.13/parsl/monitoring/monitoring.py +288 -0
  87. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/queries/pandas.py +1 -2
  88. parsl-2025.1.13/parsl/monitoring/radios/base.py +13 -0
  89. parsl-2025.1.13/parsl/monitoring/radios/filesystem.py +52 -0
  90. parsl-2025.1.13/parsl/monitoring/radios/htex.py +57 -0
  91. parsl-2025.1.13/parsl/monitoring/radios/multiprocessing.py +17 -0
  92. parsl-2025.1.13/parsl/monitoring/radios/udp.py +56 -0
  93. parsl-2025.1.13/parsl/monitoring/radios/zmq.py +17 -0
  94. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/remote.py +33 -37
  95. parsl-2025.1.13/parsl/monitoring/router.py +212 -0
  96. parsl-2025.1.13/parsl/monitoring/types.py +11 -0
  97. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/app.py +4 -2
  98. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/models.py +0 -1
  99. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/plots/default/workflow_plots.py +11 -4
  100. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +1 -0
  101. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/utils.py +0 -1
  102. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/views.py +16 -8
  103. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/multiprocessing.py +0 -1
  104. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/process_loggers.py +1 -2
  105. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/__init__.py +8 -17
  106. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/aws/aws.py +2 -3
  107. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/azure/azure.py +4 -5
  108. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/base.py +2 -18
  109. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/cluster_provider.py +4 -12
  110. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/condor/condor.py +7 -17
  111. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/googlecloud/googlecloud.py +2 -1
  112. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/grid_engine/grid_engine.py +5 -14
  113. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/kubernetes/kube.py +80 -40
  114. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/local/local.py +13 -26
  115. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/lsf/lsf.py +5 -23
  116. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/pbspro/pbspro.py +5 -17
  117. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/slurm/slurm.py +81 -39
  118. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/torque/torque.py +3 -14
  119. parsl-2025.1.13/parsl/serialize/__init__.py +16 -0
  120. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/serialize/base.py +1 -2
  121. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/serialize/concretes.py +5 -4
  122. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/serialize/facade.py +3 -3
  123. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/serialize/proxystore.py +3 -2
  124. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/azure_single_node.py +4 -5
  125. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/bridges.py +3 -2
  126. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/cc_in2p3.py +1 -3
  127. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/comet.py +2 -1
  128. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/ec2_single_node.py +1 -2
  129. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/ec2_spot.py +1 -2
  130. parsl-2025.1.13/parsl/tests/configs/flux_local.py +11 -0
  131. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/frontera.py +2 -3
  132. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/htex_local.py +3 -5
  133. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/htex_local_alternate.py +11 -15
  134. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/htex_local_intask_staging.py +5 -9
  135. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/htex_local_rsync_staging.py +4 -8
  136. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_radical.py +1 -3
  137. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_radical_mpi.py +2 -2
  138. parsl-2025.1.13/parsl/tests/configs/local_threads_checkpoint_periodic.py +11 -0
  139. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_threads_monitoring.py +0 -1
  140. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/petrelkube.py +3 -2
  141. parsl-2025.1.13/parsl/tests/configs/slurm_local.py +24 -0
  142. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/summit.py +1 -0
  143. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/taskvine_ex.py +4 -7
  144. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/user_opts.py +2 -8
  145. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/workqueue_ex.py +4 -6
  146. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/conftest.py +27 -13
  147. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/integration/test_stress/test_python_simple.py +3 -4
  148. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/integration/test_stress/test_python_threads.py +3 -5
  149. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/manual_tests/htex_local.py +4 -6
  150. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/manual_tests/test_basic.py +1 -0
  151. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/manual_tests/test_log_filter.py +3 -1
  152. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/manual_tests/test_memory_limits.py +6 -8
  153. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/manual_tests/test_regression_220.py +2 -1
  154. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/manual_tests/test_udp_simple.py +4 -4
  155. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/manual_tests/test_worker_count.py +3 -2
  156. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/scaling_tests/htex_local.py +2 -4
  157. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/scaling_tests/test_scale.py +0 -9
  158. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/scaling_tests/vineex_condor.py +1 -2
  159. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/scaling_tests/vineex_local.py +1 -2
  160. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/site_tests/site_config_selector.py +1 -6
  161. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/site_tests/test_provider.py +4 -2
  162. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/site_tests/test_site.py +2 -0
  163. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/sites/test_affinity.py +7 -7
  164. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/sites/test_dynamic_executor.py +3 -4
  165. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/sites/test_ec2.py +3 -2
  166. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/sites/test_worker_info.py +4 -5
  167. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_aalst_patterns.py +0 -1
  168. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_basic.py +10 -4
  169. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_error_codes.py +5 -7
  170. parsl-2025.1.13/parsl/tests/test_bash_apps/test_inputs_default.py +25 -0
  171. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_kwarg_storage.py +1 -1
  172. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_memoize.py +2 -8
  173. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_memoize_ignore_args.py +9 -14
  174. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +9 -14
  175. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_multiline.py +1 -1
  176. parsl-2025.1.13/parsl/tests/test_bash_apps/test_std_uri.py +123 -0
  177. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_stdout.py +33 -8
  178. parsl-2025.1.13/parsl/tests/test_checkpointing/test_periodic.py +48 -0
  179. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_checkpointing/test_python_checkpoint_1.py +1 -0
  180. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_checkpointing/test_python_checkpoint_2.py +2 -2
  181. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_checkpointing/test_python_checkpoint_3.py +0 -1
  182. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_checkpointing/test_regression_239.py +1 -1
  183. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_checkpointing/test_task_exit.py +2 -3
  184. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_docs/test_from_slides.py +5 -2
  185. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_docs/test_kwargs.py +4 -1
  186. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_docs/test_tutorial_1.py +1 -2
  187. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_docs/test_workflow2.py +0 -1
  188. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_error_handling/test_resource_spec.py +10 -12
  189. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_error_handling/test_retries.py +6 -16
  190. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_error_handling/test_retry_handler.py +1 -0
  191. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_error_handling/test_retry_handler_failure.py +2 -1
  192. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_error_handling/test_wrap_with_logs.py +1 -0
  193. parsl-2025.1.13/parsl/tests/test_execute_task.py +29 -0
  194. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_htex/test_basic.py +2 -3
  195. parsl-2025.1.13/parsl/tests/test_htex/test_block_manager_selector_unit.py +20 -0
  196. parsl-2025.1.13/parsl/tests/test_htex/test_command_client_timeout.py +66 -0
  197. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_htex/test_connected_blocks.py +3 -2
  198. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_htex/test_cpu_affinity_explicit.py +6 -10
  199. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_htex/test_disconnected_blocks.py +6 -5
  200. parsl-2025.1.13/parsl/tests/test_htex/test_disconnected_blocks_failing_provider.py +71 -0
  201. parsl-2025.1.13/parsl/tests/test_htex/test_drain.py +79 -0
  202. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_htex/test_htex.py +51 -25
  203. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_htex/test_manager_failure.py +0 -1
  204. parsl-2025.1.13/parsl/tests/test_htex/test_manager_selector_by_block.py +51 -0
  205. parsl-2025.1.13/parsl/tests/test_htex/test_managers_command.py +36 -0
  206. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_htex/test_missing_worker.py +2 -12
  207. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_htex/test_multiple_disconnected_blocks.py +9 -9
  208. parsl-2025.1.13/parsl/tests/test_htex/test_resource_spec_validation.py +45 -0
  209. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_htex/test_zmq_binding.py +29 -8
  210. parsl-2025.1.13/parsl/tests/test_monitoring/test_app_names.py +86 -0
  211. parsl-2025.1.13/parsl/tests/test_monitoring/test_basic.py +133 -0
  212. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_monitoring/test_db_locks.py +6 -4
  213. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_monitoring/test_fuzz_zmq.py +19 -8
  214. parsl-2025.1.13/parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +80 -0
  215. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_monitoring/test_incomplete_futures.py +5 -4
  216. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_monitoring/test_memoization_representation.py +4 -2
  217. parsl-2025.1.13/parsl/tests/test_monitoring/test_stdouterr.py +134 -0
  218. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_monitoring/test_viz_colouring.py +1 -0
  219. parsl-2025.1.13/parsl/tests/test_mpi_apps/test_bad_mpi_config.py +48 -0
  220. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +28 -11
  221. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_mpi_apps/test_mpi_scheduler.py +7 -2
  222. parsl-2025.1.13/parsl/tests/test_mpi_apps/test_mpiex.py +64 -0
  223. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_mpi_apps/test_resource_spec.py +42 -49
  224. parsl-2025.1.13/parsl/tests/test_providers/test_kubernetes_provider.py +102 -0
  225. parsl-2025.1.13/parsl/tests/test_providers/test_local_provider.py +80 -0
  226. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_providers/test_pbspro_template.py +2 -3
  227. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_providers/test_slurm_template.py +2 -3
  228. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_providers/test_submiterror_deprecation.py +2 -1
  229. parsl-2025.1.13/parsl/tests/test_python_apps/test_context_manager.py +128 -0
  230. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_dep_standard_futures.py +2 -1
  231. parsl-2025.1.13/parsl/tests/test_python_apps/test_dependencies_deep.py +59 -0
  232. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_fail.py +0 -25
  233. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_futures.py +2 -1
  234. parsl-2025.1.13/parsl/tests/test_python_apps/test_inputs_default.py +22 -0
  235. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_join.py +0 -1
  236. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_lifted.py +11 -7
  237. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +1 -0
  238. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_outputs.py +1 -1
  239. parsl-2025.1.13/parsl/tests/test_python_apps/test_pluggable_future_resolution.py +161 -0
  240. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_radical/test_mpi_funcs.py +1 -2
  241. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_regression/test_1480.py +2 -1
  242. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_regression/test_1653.py +2 -1
  243. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_regression/test_226.py +1 -0
  244. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_regression/test_2652.py +1 -0
  245. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_regression/test_69a.py +0 -1
  246. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_regression/test_854.py +4 -2
  247. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_regression/test_97_parallelism_0.py +1 -2
  248. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_regression/test_98.py +0 -1
  249. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_scaling/test_block_error_handler.py +9 -4
  250. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_scaling/test_regression_1621.py +11 -15
  251. parsl-2025.1.13/parsl/tests/test_scaling/test_regression_3568_scaledown_vs_MISSING.py +84 -0
  252. parsl-2025.1.13/parsl/tests/test_scaling/test_regression_3696_oscillation.py +103 -0
  253. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_scaling/test_scale_down.py +2 -5
  254. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +6 -18
  255. parsl-2025.1.13/parsl/tests/test_scaling/test_scale_down_htex_unregistered.py +71 -0
  256. parsl-2025.1.13/parsl/tests/test_scaling/test_shutdown_scalein.py +73 -0
  257. parsl-2025.1.13/parsl/tests/test_scaling/test_worker_interchange_bad_messages_3262.py +90 -0
  258. parsl-2025.1.13/parsl/tests/test_serialization/test_3495_deserialize_managerlost.py +47 -0
  259. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_serialization/test_basic.py +2 -1
  260. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_serialization/test_htex_code_cache.py +3 -4
  261. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_serialization/test_pack_resource_spec.py +2 -1
  262. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_serialization/test_proxystore_configured.py +10 -6
  263. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_serialization/test_proxystore_impl.py +5 -3
  264. parsl-2025.1.13/parsl/tests/test_shutdown/test_kill_monitoring.py +64 -0
  265. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_staging/test_1316.py +3 -4
  266. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_staging/test_docs_1.py +2 -1
  267. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_staging/test_docs_2.py +2 -1
  268. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_staging/test_elaborate_noop_file.py +2 -3
  269. {parsl-2024.3.11/parsl/tests/test_data → parsl-2025.1.13/parsl/tests/test_staging}/test_file.py +6 -6
  270. {parsl-2024.3.11/parsl/tests/test_data → parsl-2025.1.13/parsl/tests/test_staging}/test_output_chain_filenames.py +3 -0
  271. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_staging/test_staging_ftp.py +1 -0
  272. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_staging/test_staging_https.py +5 -2
  273. parsl-2025.1.13/parsl/tests/test_staging/test_staging_stdout.py +64 -0
  274. parsl-2025.1.13/parsl/tests/test_staging/test_zip_in.py +39 -0
  275. parsl-2025.1.13/parsl/tests/test_staging/test_zip_out.py +110 -0
  276. parsl-2025.1.13/parsl/tests/test_staging/test_zip_to_zip.py +41 -0
  277. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_summary.py +2 -2
  278. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_thread_parallelism.py +0 -1
  279. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_threads/test_configs.py +1 -2
  280. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_threads/test_lazy_errors.py +2 -2
  281. parsl-2025.1.13/parsl/tests/test_utils/test_execute_wait.py +35 -0
  282. parsl-2025.1.13/parsl/tests/test_utils/test_sanitize_dns.py +76 -0
  283. parsl-2025.1.13/parsl/tests/unit/test_address.py +20 -0
  284. parsl-2025.1.13/parsl/tests/unit/test_file.py +99 -0
  285. parsl-2025.1.13/parsl/tests/unit/test_usage_tracking.py +66 -0
  286. parsl-2025.1.13/parsl/usage_tracking/api.py +65 -0
  287. parsl-2025.1.13/parsl/usage_tracking/levels.py +6 -0
  288. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/usage_tracking/usage.py +104 -62
  289. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/utils.py +139 -6
  290. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/version.py +1 -1
  291. {parsl-2024.3.11 → parsl-2025.1.13/parsl.egg-info}/PKG-INFO +3 -5
  292. {parsl-2024.3.11 → parsl-2025.1.13}/parsl.egg-info/SOURCES.txt +60 -46
  293. {parsl-2024.3.11 → parsl-2025.1.13}/parsl.egg-info/requires.txt +13 -15
  294. {parsl-2024.3.11 → parsl-2025.1.13}/requirements.txt +1 -1
  295. {parsl-2024.3.11 → parsl-2025.1.13}/setup.py +19 -9
  296. parsl-2024.3.11/parsl/channels/__init__.py +0 -7
  297. parsl-2024.3.11/parsl/channels/base.py +0 -141
  298. parsl-2024.3.11/parsl/channels/errors.py +0 -113
  299. parsl-2024.3.11/parsl/channels/local/local.py +0 -164
  300. parsl-2024.3.11/parsl/channels/oauth_ssh/oauth_ssh.py +0 -110
  301. parsl-2024.3.11/parsl/channels/ssh/ssh.py +0 -276
  302. parsl-2024.3.11/parsl/channels/ssh_il/ssh_il.py +0 -74
  303. parsl-2024.3.11/parsl/configs/ad_hoc.py +0 -35
  304. parsl-2024.3.11/parsl/executors/flux/flux_instance_manager.py +0 -57
  305. parsl-2024.3.11/parsl/executors/high_throughput/errors.py +0 -12
  306. parsl-2024.3.11/parsl/executors/radical/rpex_master.py +0 -42
  307. parsl-2024.3.11/parsl/jobs/job_status_poller.py +0 -136
  308. parsl-2024.3.11/parsl/monitoring/monitoring.py +0 -557
  309. parsl-2024.3.11/parsl/monitoring/radios.py +0 -175
  310. parsl-2024.3.11/parsl/monitoring/types.py +0 -12
  311. parsl-2024.3.11/parsl/providers/ad_hoc/ad_hoc.py +0 -248
  312. parsl-2024.3.11/parsl/providers/cobalt/cobalt.py +0 -236
  313. parsl-2024.3.11/parsl/providers/cobalt/template.py +0 -17
  314. parsl-2024.3.11/parsl/serialize/__init__.py +0 -11
  315. parsl-2024.3.11/parsl/tests/configs/ad_hoc_cluster_htex.py +0 -35
  316. parsl-2024.3.11/parsl/tests/configs/cooley_htex.py +0 -37
  317. parsl-2024.3.11/parsl/tests/configs/htex_ad_hoc_cluster.py +0 -28
  318. parsl-2024.3.11/parsl/tests/configs/local_adhoc.py +0 -18
  319. parsl-2024.3.11/parsl/tests/configs/local_threads_checkpoint_periodic.py +0 -13
  320. parsl-2024.3.11/parsl/tests/configs/swan_htex.py +0 -43
  321. parsl-2024.3.11/parsl/tests/configs/theta.py +0 -37
  322. parsl-2024.3.11/parsl/tests/integration/test_channels/test_channels.py +0 -17
  323. parsl-2024.3.11/parsl/tests/integration/test_channels/test_local_channel.py +0 -42
  324. parsl-2024.3.11/parsl/tests/integration/test_channels/test_scp_1.py +0 -45
  325. parsl-2024.3.11/parsl/tests/integration/test_channels/test_ssh_1.py +0 -40
  326. parsl-2024.3.11/parsl/tests/integration/test_channels/test_ssh_errors.py +0 -46
  327. parsl-2024.3.11/parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -41
  328. parsl-2024.3.11/parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -24
  329. parsl-2024.3.11/parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -48
  330. parsl-2024.3.11/parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +0 -88
  331. parsl-2024.3.11/parsl/tests/manual_tests/test_oauth_ssh.py +0 -13
  332. parsl-2024.3.11/parsl/tests/scaling_tests/local_threads.py +0 -4
  333. parsl-2024.3.11/parsl/tests/sites/test_local_adhoc.py +0 -61
  334. parsl-2024.3.11/parsl/tests/test_channels/test_large_output.py +0 -22
  335. parsl-2024.3.11/parsl/tests/test_checkpointing/test_periodic.py +0 -66
  336. parsl-2024.3.11/parsl/tests/test_monitoring/test_basic.py +0 -85
  337. parsl-2024.3.11/parsl/tests/test_mpi_apps/test_bad_mpi_config.py +0 -41
  338. parsl-2024.3.11/parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py +0 -51
  339. parsl-2024.3.11/parsl/tests/test_providers/test_cobalt_deprecation_warning.py +0 -16
  340. parsl-2024.3.11/parsl/tests/test_providers/test_local_provider.py +0 -209
  341. parsl-2024.3.11/parsl/tests/test_regression/__init__.py +0 -0
  342. parsl-2024.3.11/parsl/tests/test_scaling/__init__.py +0 -0
  343. parsl-2024.3.11/parsl/tests/test_serialization/__init__.py +0 -0
  344. parsl-2024.3.11/parsl/tests/test_threads/__init__.py +0 -0
  345. parsl-2024.3.11/parsl/tests/test_utils/__init__.py +0 -0
  346. parsl-2024.3.11/parsl/usage_tracking/__init__.py +0 -0
  347. {parsl-2024.3.11 → parsl-2025.1.13}/LICENSE +0 -0
  348. {parsl-2024.3.11 → parsl-2025.1.13}/MANIFEST.in +0 -0
  349. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/app/__init__.py +0 -0
  350. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/benchmark/__init__.py +0 -0
  351. {parsl-2024.3.11/parsl/channels/local → parsl-2025.1.13/parsl/configs}/__init__.py +0 -0
  352. {parsl-2024.3.11/parsl/channels/oauth_ssh → parsl-2025.1.13/parsl/data_provider}/__init__.py +0 -0
  353. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/data_provider/files.py +3 -3
  354. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/data_provider/http.py +2 -2
  355. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/data_provider/rsync.py +1 -1
  356. {parsl-2024.3.11/parsl/channels/ssh → parsl-2025.1.13/parsl/dataflow}/__init__.py +0 -0
  357. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/dataflow/states.py +0 -0
  358. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/errors.py +0 -0
  359. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/flux/__init__.py +0 -0
  360. {parsl-2024.3.11/parsl/channels/ssh_il → parsl-2025.1.13/parsl/executors/high_throughput}/__init__.py +0 -0
  361. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/radical/__init__.py +0 -0
  362. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/taskvine/__init__.py +1 -1
  363. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/taskvine/errors.py +1 -1
  364. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/taskvine/exec_parsl_function.py +2 -2
  365. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/taskvine/factory.py +1 -1
  366. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/taskvine/utils.py +0 -0
  367. {parsl-2024.3.11/parsl/configs → parsl-2025.1.13/parsl/executors/workqueue}/__init__.py +0 -0
  368. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/workqueue/errors.py +1 -1
  369. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/workqueue/parsl_coprocess.py +1 -1
  370. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/executors/workqueue/parsl_coprocess_stub.py +0 -0
  371. {parsl-2024.3.11/parsl/data_provider → parsl-2025.1.13/parsl/jobs}/__init__.py +0 -0
  372. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/jobs/errors.py +0 -0
  373. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/launchers/base.py +0 -0
  374. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/launchers/errors.py +1 -1
  375. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/__init__.py +0 -0
  376. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/message_type.py +0 -0
  377. {parsl-2024.3.11/parsl/dataflow → parsl-2025.1.13/parsl/monitoring/queries}/__init__.py +0 -0
  378. {parsl-2024.3.11/parsl/executors/high_throughput → parsl-2025.1.13/parsl/monitoring/radios}/__init__.py +0 -0
  379. {parsl-2024.3.11/parsl/executors/workqueue → parsl-2025.1.13/parsl/monitoring/visualization}/__init__.py +0 -0
  380. {parsl-2024.3.11/parsl/jobs → parsl-2025.1.13/parsl/monitoring/visualization/plots}/__init__.py +0 -0
  381. {parsl-2024.3.11/parsl/monitoring/queries → parsl-2025.1.13/parsl/monitoring/visualization/plots/default}/__init__.py +0 -0
  382. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/plots/default/task_plots.py +0 -0
  383. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/static/parsl-logo-white.png +0 -0
  384. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/static/parsl-monitor.css +0 -0
  385. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/templates/app.html +0 -0
  386. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/templates/dag.html +0 -0
  387. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/templates/error.html +0 -0
  388. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/templates/layout.html +0 -0
  389. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/templates/resource_usage.html +0 -0
  390. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/templates/task.html +0 -0
  391. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/templates/workflow.html +0 -0
  392. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/templates/workflows_summary.html +0 -0
  393. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/monitoring/visualization/version.py +0 -0
  394. {parsl-2024.3.11/parsl/monitoring/visualization → parsl-2025.1.13/parsl/providers/aws}/__init__.py +0 -0
  395. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/aws/template.py +0 -0
  396. {parsl-2024.3.11/parsl/monitoring/visualization/plots → parsl-2025.1.13/parsl/providers/azure}/__init__.py +0 -0
  397. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/azure/template.py +0 -0
  398. {parsl-2024.3.11/parsl/monitoring/visualization/plots/default → parsl-2025.1.13/parsl/providers/condor}/__init__.py +0 -0
  399. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/condor/template.py +0 -0
  400. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/errors.py +2 -2
  401. {parsl-2024.3.11/parsl/providers/ad_hoc → parsl-2025.1.13/parsl/providers/googlecloud}/__init__.py +0 -0
  402. {parsl-2024.3.11/parsl/providers/aws → parsl-2025.1.13/parsl/providers/grid_engine}/__init__.py +0 -0
  403. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/grid_engine/template.py +0 -0
  404. {parsl-2024.3.11/parsl/providers/azure → parsl-2025.1.13/parsl/providers/kubernetes}/__init__.py +0 -0
  405. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/kubernetes/template.py +0 -0
  406. {parsl-2024.3.11/parsl/providers/cobalt → parsl-2025.1.13/parsl/providers/local}/__init__.py +0 -0
  407. {parsl-2024.3.11/parsl/providers/condor → parsl-2025.1.13/parsl/providers/lsf}/__init__.py +0 -0
  408. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/lsf/template.py +0 -0
  409. {parsl-2024.3.11/parsl/providers/googlecloud → parsl-2025.1.13/parsl/providers/pbspro}/__init__.py +0 -0
  410. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/pbspro/template.py +0 -0
  411. {parsl-2024.3.11/parsl/providers/grid_engine → parsl-2025.1.13/parsl/providers/slurm}/__init__.py +0 -0
  412. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/slurm/template.py +0 -0
  413. {parsl-2024.3.11/parsl/providers/kubernetes → parsl-2025.1.13/parsl/providers/torque}/__init__.py +0 -0
  414. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/providers/torque/template.py +0 -0
  415. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/py.typed +0 -0
  416. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/serialize/errors.py +0 -0
  417. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/__init__.py +1 -1
  418. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/callables_helper.py +0 -0
  419. {parsl-2024.3.11/parsl/providers/local → parsl-2025.1.13/parsl/tests/configs}/__init__.py +0 -0
  420. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/bluewaters.py +0 -0
  421. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_threads.py +0 -0
  422. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_threads_checkpoint.py +0 -0
  423. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_threads_checkpoint_dfk_exit.py +0 -0
  424. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_threads_checkpoint_task_exit.py +0 -0
  425. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_threads_ftp_in_task.py +0 -0
  426. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_threads_globus.py +0 -0
  427. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_threads_http_in_task.py +0 -0
  428. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/local_threads_no_cache.py +0 -0
  429. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/midway.py +2 -2
  430. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/nscc_singapore.py +3 -3
  431. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/configs/osg_htex.py +1 -1
  432. {parsl-2024.3.11/parsl/providers/lsf → parsl-2025.1.13/parsl/tests/integration}/__init__.py +0 -0
  433. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/integration/latency.py +0 -0
  434. {parsl-2024.3.11/parsl/providers/pbspro → parsl-2025.1.13/parsl/tests/integration/test_apps}/__init__.py +0 -0
  435. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/integration/test_parsl_load_default_config.py +0 -0
  436. {parsl-2024.3.11/parsl/providers/slurm → parsl-2025.1.13/parsl/tests/integration/test_stress}/__init__.py +0 -0
  437. {parsl-2024.3.11/parsl/providers/torque → parsl-2025.1.13/parsl/tests/manual_tests}/__init__.py +0 -0
  438. {parsl-2024.3.11/parsl/tests/configs → parsl-2025.1.13/parsl/tests/scaling_tests}/__init__.py +0 -0
  439. {parsl-2024.3.11/parsl/configs → parsl-2025.1.13/parsl/tests/scaling_tests}/local_threads.py +0 -0
  440. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/scaling_tests/wqex_condor.py +0 -0
  441. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/scaling_tests/wqex_local.py +0 -0
  442. {parsl-2024.3.11/parsl/tests/integration → parsl-2025.1.13/parsl/tests/site_tests}/__init__.py +0 -0
  443. {parsl-2024.3.11/parsl/tests/integration/test_apps → parsl-2025.1.13/parsl/tests/sites}/__init__.py +0 -0
  444. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/sites/test_concurrent.py +0 -0
  445. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/sites/test_launchers.py +0 -0
  446. {parsl-2024.3.11/parsl/tests/integration/test_channels → parsl-2025.1.13/parsl/tests/sites/test_mpi}/__init__.py +0 -0
  447. {parsl-2024.3.11/parsl/tests/integration/test_stress → parsl-2025.1.13/parsl/tests/test_bash_apps}/__init__.py +0 -0
  448. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_apptimeout.py +2 -2
  449. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_keyword_overlaps.py +0 -0
  450. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_bash_apps/test_pipeline.py +1 -1
  451. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_callables.py +2 -2
  452. {parsl-2024.3.11/parsl/tests/manual_tests → parsl-2025.1.13/parsl/tests/test_checkpointing}/__init__.py +0 -0
  453. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_checkpointing/test_regression_232.py +0 -0
  454. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_checkpointing/test_regression_233.py +0 -0
  455. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_curvezmq.py +0 -0
  456. {parsl-2024.3.11/parsl/tests/scaling_tests → parsl-2025.1.13/parsl/tests/test_docs}/__init__.py +0 -0
  457. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_docs/test_workflow1.py +2 -2
  458. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_docs/test_workflow4.py +0 -0
  459. {parsl-2024.3.11/parsl/tests/site_tests → parsl-2025.1.13/parsl/tests/test_error_handling}/__init__.py +0 -0
  460. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_error_handling/test_fail.py +0 -0
  461. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_error_handling/test_python_walltime.py +0 -0
  462. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_error_handling/test_rand_fail.py +2 -2
  463. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_error_handling/test_serialization_fail.py +1 -1
  464. {parsl-2024.3.11/parsl/tests/sites → parsl-2025.1.13/parsl/tests/test_flowcontrol}/__init__.py +0 -0
  465. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_flux.py +1 -1
  466. {parsl-2024.3.11/parsl/tests/sites/test_mpi → parsl-2025.1.13/parsl/tests/test_htex}/__init__.py +0 -0
  467. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_htex/test_worker_failure.py +0 -0
  468. {parsl-2024.3.11/parsl/tests/test_bash_apps → parsl-2025.1.13/parsl/tests/test_monitoring}/__init__.py +0 -0
  469. {parsl-2024.3.11/parsl/tests/test_channels → parsl-2025.1.13/parsl/tests/test_mpi_apps}/__init__.py +0 -0
  470. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_mpi_apps/test_mpi_prefix.py +4 -4
  471. {parsl-2024.3.11/parsl/tests/test_checkpointing → parsl-2025.1.13/parsl/tests/test_providers}/__init__.py +0 -0
  472. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_providers/test_slurm_instantiate.py +0 -0
  473. {parsl-2024.3.11/parsl/tests/test_data → parsl-2025.1.13/parsl/tests/test_python_apps}/__init__.py +0 -0
  474. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_arg_input_types.py +0 -0
  475. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_basic.py +0 -0
  476. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_dependencies.py +0 -0
  477. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_depfail_propagation.py +0 -0
  478. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_fibonacci_iterative.py +0 -0
  479. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_fibonacci_recursive.py +0 -0
  480. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_garbage_collect.py +0 -0
  481. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_import_fail.py +0 -0
  482. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_mapred.py +0 -0
  483. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_memoize_1.py +0 -0
  484. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_memoize_2.py +0 -0
  485. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_memoize_4.py +0 -0
  486. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_memoize_ignore_args.py +0 -0
  487. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_memoize_joinapp.py +0 -0
  488. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_overview.py +0 -0
  489. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_pipeline.py +0 -0
  490. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_simple.py +0 -0
  491. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_timeout.py +0 -0
  492. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_python_apps/test_type5.py +0 -0
  493. {parsl-2024.3.11/parsl/tests/test_docs → parsl-2025.1.13/parsl/tests/test_radical}/__init__.py +0 -0
  494. {parsl-2024.3.11/parsl/tests/test_error_handling → parsl-2025.1.13/parsl/tests/test_regression}/__init__.py +0 -0
  495. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_regression/test_1606_wait_for_current_tasks.py +0 -0
  496. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_regression/test_221.py +0 -0
  497. {parsl-2024.3.11/parsl/tests/test_flowcontrol → parsl-2025.1.13/parsl/tests/test_scaling}/__init__.py +0 -0
  498. {parsl-2024.3.11/parsl/tests/test_htex → parsl-2025.1.13/parsl/tests/test_serialization}/__init__.py +0 -0
  499. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_serialization/test_2555_caching_deserializer.py +1 -1
  500. {parsl-2024.3.11/parsl/tests/test_monitoring → parsl-2025.1.13/parsl/tests/test_shutdown}/__init__.py +0 -0
  501. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_staging/__init__.py +0 -0
  502. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_staging/staging_provider.py +2 -2
  503. {parsl-2024.3.11/parsl/tests/test_data → parsl-2025.1.13/parsl/tests/test_staging}/test_file_apps.py +0 -0
  504. {parsl-2024.3.11/parsl/tests/test_data → parsl-2025.1.13/parsl/tests/test_staging}/test_file_staging.py +0 -0
  505. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_staging/test_staging_ftp_in_task.py +0 -0
  506. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_staging/test_staging_globus.py +0 -0
  507. {parsl-2024.3.11/parsl/tests/test_mpi_apps → parsl-2025.1.13/parsl/tests/test_threads}/__init__.py +0 -0
  508. {parsl-2024.3.11/parsl/tests/test_providers → parsl-2025.1.13/parsl/tests/test_utils}/__init__.py +0 -0
  509. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/test_utils/test_representation_mixin.py +0 -0
  510. {parsl-2024.3.11/parsl/tests/test_python_apps → parsl-2025.1.13/parsl/tests/unit}/__init__.py +0 -0
  511. {parsl-2024.3.11 → parsl-2025.1.13}/parsl/tests/utils.py +0 -0
  512. {parsl-2024.3.11/parsl/tests/test_radical → parsl-2025.1.13/parsl/usage_tracking}/__init__.py +0 -0
  513. {parsl-2024.3.11 → parsl-2025.1.13}/parsl.egg-info/dependency_links.txt +0 -0
  514. {parsl-2024.3.11 → parsl-2025.1.13}/parsl.egg-info/entry_points.txt +0 -0
  515. {parsl-2024.3.11 → parsl-2025.1.13}/parsl.egg-info/top_level.txt +0 -0
  516. {parsl-2024.3.11 → parsl-2025.1.13}/setup.cfg +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.3.11
3
+ Version: 2025.1.13
4
4
  Summary: Simple data dependent workflows in Python
5
5
  Home-page: https://github.com/Parsl/parsl
6
- Download-URL: https://github.com/Parsl/parsl/archive/2024.03.11.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2025.01.13.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -11,17 +11,15 @@ Keywords: Workflows,Scientific computing
11
11
  Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: Intended Audience :: Developers
13
13
  Classifier: License :: OSI Approved :: Apache Software License
14
- Classifier: Programming Language :: Python :: 3.8
15
14
  Classifier: Programming Language :: Python :: 3.9
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
19
- Requires-Python: >=3.8.0
18
+ Requires-Python: >=3.9.0
20
19
  Provides-Extra: monitoring
21
20
  Provides-Extra: visualization
22
21
  Provides-Extra: aws
23
22
  Provides-Extra: kubernetes
24
- Provides-Extra: oauth_ssh
25
23
  Provides-Extra: docs
26
24
  Provides-Extra: google_cloud
27
25
  Provides-Extra: gssapi
@@ -1,6 +1,6 @@
1
1
  Parsl - Parallel Scripting Library
2
2
  ==================================
3
- |licence| |build-status| |docs| |NSF-1550588| |NSF-1550476| |NSF-1550562| |NSF-1550528|
3
+ |licence| |docs| |NSF-1550588| |NSF-1550476| |NSF-1550562| |NSF-1550528| |NumFOCUS| |CZI-EOSS|
4
4
 
5
5
  Parsl extends parallelism in Python beyond a single computer.
6
6
 
@@ -15,8 +15,6 @@ Parsl lets you chain functions together and will launch each function as inputs
15
15
  import parsl
16
16
  from parsl import python_app
17
17
 
18
- # Start Parsl on a single computer
19
- parsl.load()
20
18
 
21
19
  # Make functions parallel by decorating them
22
20
  @python_app
@@ -24,15 +22,19 @@ Parsl lets you chain functions together and will launch each function as inputs
24
22
  return x + 1
25
23
 
26
24
  @python_app
27
- def g(x):
28
- return x * 2
25
+ def g(x, y):
26
+ return x + y
29
27
 
30
- # These functions now return Futures, and can be chained
31
- future = f(1)
32
- assert future.result() == 2
28
+ # Start Parsl on a single computer
29
+ with parsl.load():
30
+ # These functions now return Futures
31
+ future = f(1)
32
+ assert future.result() == 2
33
33
 
34
- future = g(f(1))
35
- assert future.result() == 4
34
+ # Functions run concurrently, can be chained
35
+ f_a, f_b = f(2), f(3)
36
+ future = g(f_a, f_b)
37
+ assert future.result() == 7
36
38
 
37
39
 
38
40
  Start with the `configuration quickstart <https://parsl.readthedocs.io/en/stable/quickstart.html#getting-started>`_ to learn how to tell Parsl how to use your computing resource,
@@ -41,9 +43,6 @@ then explore the `parallel computing patterns <https://parsl.readthedocs.io/en/s
41
43
  .. |licence| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
42
44
  :target: https://github.com/Parsl/parsl/blob/master/LICENSE
43
45
  :alt: Apache Licence V2.0
44
- .. |build-status| image:: https://github.com/Parsl/parsl/actions/workflows/ci.yaml/badge.svg
45
- :target: https://github.com/Parsl/parsl/actions/workflows/ci.yaml
46
- :alt: Build status
47
46
  .. |docs| image:: https://readthedocs.org/projects/parsl/badge/?version=stable
48
47
  :target: http://parsl.readthedocs.io/en/stable/?badge=stable
49
48
  :alt: Documentation Status
@@ -62,6 +61,12 @@ then explore the `parallel computing patterns <https://parsl.readthedocs.io/en/s
62
61
  .. |NSF-1550475| image:: https://img.shields.io/badge/NSF-1550475-blue.svg
63
62
  :target: https://nsf.gov/awardsearch/showAward?AWD_ID=1550475
64
63
  :alt: NSF award info
64
+ .. |CZI-EOSS| image:: https://chanzuckerberg.github.io/open-science/badges/CZI-EOSS.svg
65
+ :target: https://czi.co/EOSS
66
+ :alt: CZI's Essential Open Source Software for Science
67
+ .. |NumFOCUS| image:: https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A
68
+ :target: https://numfocus.org
69
+ :alt: Powered by NumFOCUS
65
70
 
66
71
 
67
72
  Quickstart
@@ -97,6 +102,7 @@ For Developers
97
102
 
98
103
  2. Build and Test::
99
104
 
105
+ $ cd parsl # navigate to the root directory of the project
100
106
  $ make # show all available makefile targets
101
107
  $ make virtualenv # create a virtual environment
102
108
  $ source .venv/bin/activate # activate the virtual environment
@@ -106,7 +112,7 @@ For Developers
106
112
 
107
113
  3. Install::
108
114
 
109
- $ cd parsl
115
+ $ cd parsl # only if you didn't enter the top-level directory in step 2 above
110
116
  $ python3 setup.py install
111
117
 
112
118
  4. Use Parsl!
@@ -114,12 +120,12 @@ For Developers
114
120
  Requirements
115
121
  ============
116
122
 
117
- Parsl is supported in Python 3.8+. Requirements can be found `here <requirements.txt>`_. Requirements for running tests can be found `here <test-requirements.txt>`_.
123
+ Parsl is supported in Python 3.9+. Requirements can be found `here <requirements.txt>`_. Requirements for running tests can be found `here <test-requirements.txt>`_.
118
124
 
119
125
  Code of Conduct
120
126
  ===============
121
127
 
122
- Parsl seeks to foster an open and welcoming environment - Please see the `Parsl Code of Conduct <https://github.com/Parsl/parsl/blob/master/CoC.md>`_ for more details.
128
+ Parsl seeks to foster an open and welcoming environment - Please see the `Parsl Code of Conduct <https://github.com/Parsl/parsl?tab=coc-ov-file#parsl-code-of-conduct>`_ for more details.
123
129
 
124
130
  Contributing
125
131
  ============
@@ -15,24 +15,23 @@ AUTO_LOGNAME
15
15
 
16
16
  """
17
17
  import logging
18
+ import multiprocessing as _multiprocessing
18
19
  import os
19
20
  import platform
20
21
 
21
- from parsl.version import VERSION
22
22
  from parsl.app.app import bash_app, join_app, python_app
23
23
  from parsl.config import Config
24
- from parsl.executors import ThreadPoolExecutor
25
- from parsl.executors import HighThroughputExecutor
26
- from parsl.executors import WorkQueueExecutor
27
- from parsl.log_utils import set_stream_logger
28
- from parsl.log_utils import set_file_logger
29
- from parsl.monitoring import MonitoringHub
30
-
31
24
  from parsl.data_provider.files import File
32
-
33
25
  from parsl.dataflow.dflow import DataFlowKernel, DataFlowKernelLoader
26
+ from parsl.executors import (
27
+ HighThroughputExecutor,
28
+ ThreadPoolExecutor,
29
+ WorkQueueExecutor,
30
+ )
31
+ from parsl.log_utils import set_file_logger, set_stream_logger
32
+ from parsl.monitoring import MonitoringHub
33
+ from parsl.version import VERSION
34
34
 
35
- import multiprocessing as _multiprocessing
36
35
  if platform.system() == 'Darwin':
37
36
  _multiprocessing.set_start_method('fork', force=True)
38
37
 
@@ -6,19 +6,22 @@ The helper to use depends on the network environment around the submitter,
6
6
  so some experimentation will probably be needed to choose the correct one.
7
7
  """
8
8
 
9
+ import ipaddress
9
10
  import logging
10
11
  import platform
11
- import requests
12
12
  import socket
13
+
14
+ import requests
15
+
13
16
  try:
14
17
  import fcntl
15
18
  except ImportError:
16
19
  fcntl = None # type: ignore[assignment]
17
20
  import struct
18
- import typeguard
19
- import psutil
21
+ from typing import Callable, List, Set, Union
20
22
 
21
- from typing import Set, List, Callable
23
+ import psutil
24
+ import typeguard
22
25
 
23
26
  logger = logging.getLogger(__name__)
24
27
 
@@ -81,7 +84,9 @@ def address_by_hostname() -> str:
81
84
  def address_by_interface(ifname: str) -> str:
82
85
  """Returns the IP address of the given interface name, e.g. 'eth0'
83
86
 
84
- This is from a Stack Overflow answer: https://stackoverflow.com/questions/24196932/how-can-i-get-the-ip-address-of-eth0-in-python#24196955
87
+ This is taken from a Stack Overflow answer:
88
+ https://stackoverflow.com/questions/24196932/how-can-i-get-the-ip-address-of-eth0-in-python#24196955
89
+
85
90
 
86
91
  Parameters
87
92
  ----------
@@ -111,7 +116,7 @@ def get_all_addresses() -> Set[str]:
111
116
  try:
112
117
  s_addresses.add(address_by_interface(interface))
113
118
  except Exception:
114
- logger.info("Ignoring failure to fetch address from interface {}".format(interface))
119
+ logger.debug("Ignoring failure to fetch address from interface {}".format(interface))
115
120
 
116
121
  resolution_functions: List[Callable[[], str]]
117
122
  resolution_functions = [address_by_hostname, address_by_route, address_by_query]
@@ -119,7 +124,7 @@ def get_all_addresses() -> Set[str]:
119
124
  try:
120
125
  s_addresses.add(f())
121
126
  except Exception:
122
- logger.info("Ignoring an address finder exception")
127
+ logger.debug("Ignoring an address finder exception")
123
128
 
124
129
  return s_addresses
125
130
 
@@ -152,3 +157,20 @@ def get_any_address() -> str:
152
157
  if addr == '':
153
158
  raise Exception('Cannot find address of the local machine.')
154
159
  return addr
160
+
161
+
162
+ def tcp_url(address: str, port: Union[str, int, None] = None) -> str:
163
+ """Construct a tcp url safe for IPv4 and IPv6"""
164
+ if address == "*":
165
+ return "tcp://*"
166
+
167
+ ip_addr = ipaddress.ip_address(address)
168
+
169
+ port_suffix = f":{port}" if port else ""
170
+
171
+ if ip_addr.version == 6 and port_suffix:
172
+ url = f"tcp://[{address}]{port_suffix}"
173
+ else:
174
+ url = f"tcp://{address}{port_suffix}"
175
+
176
+ return url
@@ -3,19 +3,16 @@
3
3
  The App class encapsulates a generic leaf task that can be executed asynchronously.
4
4
  """
5
5
  import logging
6
- import typeguard
7
6
  from abc import ABCMeta, abstractmethod
8
7
  from inspect import signature
9
- from typing import List, Optional, Sequence, Union
8
+ from typing import Any, Callable, Dict, List, Optional, Sequence, Union
9
+
10
+ import typeguard
10
11
  from typing_extensions import Literal
11
12
 
12
13
  from parsl.dataflow.dflow import DataFlowKernel
13
-
14
- from typing import Any, Callable, Dict
15
-
16
14
  from parsl.dataflow.futures import AppFuture
17
15
 
18
-
19
16
  logger = logging.getLogger(__name__)
20
17
 
21
18
 
@@ -69,8 +66,10 @@ class AppBase(metaclass=ABCMeta):
69
66
  self.kwargs['walltime'] = params['walltime'].default
70
67
  if 'parsl_resource_specification' in params:
71
68
  self.kwargs['parsl_resource_specification'] = params['parsl_resource_specification'].default
72
- self.outputs = params['outputs'].default if 'outputs' in params else []
73
- self.inputs = params['inputs'].default if 'inputs' in params else []
69
+ if 'outputs' in params:
70
+ self.kwargs['outputs'] = params['outputs'].default
71
+ if 'inputs' in params:
72
+ self.kwargs['inputs'] = params['inputs'].default
74
73
 
75
74
  @abstractmethod
76
75
  def __call__(self, *args: Any, **kwargs: Any) -> AppFuture:
@@ -1,10 +1,10 @@
1
- from functools import update_wrapper
2
- from functools import partial
3
- from inspect import signature, Parameter
4
1
  import logging
2
+ from functools import partial
3
+ from inspect import Parameter, signature
5
4
 
6
- from parsl.app.errors import wrap_error
7
5
  from parsl.app.app import AppBase
6
+ from parsl.app.errors import wrap_error
7
+ from parsl.data_provider.files import File
8
8
  from parsl.dataflow.dflow import DataFlowKernelLoader
9
9
 
10
10
  logger = logging.getLogger(__name__)
@@ -16,6 +16,7 @@ def remote_side_bash_executor(func, *args, **kwargs):
16
16
  """
17
17
  import os
18
18
  import subprocess
19
+
19
20
  import parsl.app.errors as pe
20
21
  from parsl.utils import get_std_fname_mode
21
22
 
@@ -54,13 +55,20 @@ def remote_side_bash_executor(func, *args, **kwargs):
54
55
  if stdfspec is None:
55
56
  return None
56
57
 
57
- fname, mode = get_std_fname_mode(fdname, stdfspec)
58
+ if isinstance(stdfspec, File):
59
+ # a File is an os.PathLike and so we can use it directly for
60
+ # the subsequent file operations
61
+ fname = stdfspec
62
+ mode = "w"
63
+ else:
64
+ fname, mode = get_std_fname_mode(fdname, stdfspec)
65
+
58
66
  try:
59
67
  if os.path.dirname(fname):
60
68
  os.makedirs(os.path.dirname(fname), exist_ok=True)
61
69
  fd = open(fname, mode)
62
70
  except Exception as e:
63
- raise pe.BadStdStreamFile(fname, e)
71
+ raise pe.BadStdStreamFile(str(fname)) from e
64
72
  return fd
65
73
 
66
74
  std_out = open_std_fd('stdout')
@@ -115,11 +123,10 @@ class BashApp(AppBase):
115
123
  if sig.parameters[s].default is not Parameter.empty:
116
124
  self.kwargs[s] = sig.parameters[s].default
117
125
 
118
- # update_wrapper allows remote_side_bash_executor to masquerade as self.func
119
126
  # partial is used to attach the first arg the "func" to the remote_side_bash_executor
120
127
  # this is done to avoid passing a function type in the args which parsl.serializer
121
128
  # doesn't support
122
- remote_fn = partial(update_wrapper(remote_side_bash_executor, self.func), self.func)
129
+ remote_fn = partial(remote_side_bash_executor, self.func)
123
130
  remote_fn.__name__ = self.func.__name__
124
131
  self.wrapped_remote_function = wrap_error(remote_fn)
125
132
 
@@ -1,10 +1,11 @@
1
1
  """Exceptions raised by Apps."""
2
+ import logging
2
3
  from functools import wraps
3
- from typing import Callable, List, Optional, TypeVar, Union
4
- from typing_extensions import ParamSpec
5
4
  from types import TracebackType
6
- import logging
5
+ from typing import Callable, List, Optional, TypeVar, Union
6
+
7
7
  from tblib import Traceback
8
+ from typing_extensions import ParamSpec
8
9
 
9
10
  from parsl.data_provider.files import File
10
11
  from parsl.errors import ParslError
@@ -69,8 +70,8 @@ class MissingOutputs(ParslError):
69
70
  self.reason = reason
70
71
  self.outputs = outputs
71
72
 
72
- def __repr__(self) -> str:
73
- return "Missing Outputs: {0}, Reason:{1}".format(self.outputs, self.reason)
73
+ def __str__(self) -> str:
74
+ return "Missing Outputs: {0}, Reason: {1}".format(self.outputs, self.reason)
74
75
 
75
76
 
76
77
  class BadStdStreamFile(ParslError):
@@ -78,19 +79,14 @@ class BadStdStreamFile(ParslError):
78
79
 
79
80
  Contains:
80
81
  reason(string)
81
- exception object
82
82
  """
83
83
 
84
- def __init__(self, reason: str, exception: Exception) -> None:
85
- super().__init__(reason, exception)
84
+ def __init__(self, reason: str) -> None:
85
+ super().__init__(reason)
86
86
  self._reason = reason
87
- self._exception = exception
88
-
89
- def __repr__(self) -> str:
90
- return "Bad Stream File: {} Exception: {}".format(self._reason, self._exception)
91
87
 
92
88
  def __str__(self) -> str:
93
- return self.__repr__()
89
+ return "Bad Stream File: {}".format(self._reason)
94
90
 
95
91
 
96
92
  class RemoteExceptionWrapper:
@@ -136,6 +132,7 @@ def wrap_error(func: Callable[P, R]) -> Callable[P, Union[R, RemoteExceptionWrap
136
132
  @wraps(func)
137
133
  def wrapper(*args: P.args, **kwargs: P.kwargs) -> Union[R, RemoteExceptionWrapper]:
138
134
  import sys
135
+
139
136
  from parsl.app.errors import RemoteExceptionWrapper
140
137
  try:
141
138
  return func(*args, **kwargs)
@@ -1,12 +1,11 @@
1
1
  """This module implements DataFutures.
2
2
  """
3
3
  import logging
4
- import typeguard
5
4
  from concurrent.futures import Future
6
5
 
7
- from parsl.data_provider.files import File
6
+ import typeguard
8
7
 
9
- from typing import Optional
8
+ from parsl.data_provider.files import File
10
9
 
11
10
  logger = logging.getLogger(__name__)
12
11
 
@@ -39,24 +38,23 @@ class DataFuture(Future):
39
38
  self.set_result(self.file_obj)
40
39
 
41
40
  @typeguard.typechecked
42
- def __init__(self, fut: Future, file_obj: File, tid: Optional[int] = None) -> None:
41
+ def __init__(self, fut: Future, file_obj: File, tid: int) -> None:
43
42
  """Construct the DataFuture object.
44
43
 
45
44
  If the file_obj is a string convert to a File.
46
45
 
47
46
  Args:
48
- - fut (AppFuture) : AppFuture that this DataFuture will track
49
- - file_obj (string/File obj) : Something representing file(s)
47
+ - fut (Future) : Future that this DataFuture will track.
48
+ Completion of ``fut`` indicates that the data is
49
+ ready.
50
+ - file_obj (File) : File that this DataFuture represents the availability of
50
51
 
51
52
  Kwargs:
52
53
  - tid (task_id) : Task id that this DataFuture tracks
53
54
  """
54
55
  super().__init__()
55
56
  self._tid = tid
56
- if isinstance(file_obj, File):
57
- self.file_obj = file_obj
58
- else:
59
- raise ValueError("DataFuture must be initialized with a File, not {}".format(type(file_obj)))
57
+ self.file_obj = file_obj
60
58
  self.parent = fut
61
59
 
62
60
  self.parent.add_done_callback(self.parent_callback)
@@ -2,6 +2,7 @@ import logging
2
2
  import threading
3
3
 
4
4
  import tblib.pickling_support
5
+
5
6
  tblib.pickling_support.install()
6
7
 
7
8
  from functools import wraps
@@ -11,7 +12,6 @@ from parsl.app.errors import wrap_error
11
12
  from parsl.dataflow.dflow import DataFlowKernelLoader
12
13
  from parsl.utils import AutoCancelTimer
13
14
 
14
-
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
17
 
@@ -19,6 +19,7 @@ def timeout(f, seconds: float):
19
19
  @wraps(f)
20
20
  def wrapper(*args, **kwargs):
21
21
  import ctypes
22
+
22
23
  import parsl.app.errors
23
24
 
24
25
  def inject_exception(thread):
@@ -1,7 +1,8 @@
1
1
  import argparse
2
+ import concurrent.futures
2
3
  import importlib
3
4
  import time
4
- import concurrent.futures
5
+
5
6
  import parsl
6
7
 
7
8
  min_iterations = 2
@@ -1,8 +1,8 @@
1
1
  """Interfaces modeled after Python's `concurrent library <https://docs.python.org/3/library/concurrent.html>`_"""
2
- from typing import Callable, Dict, Optional, Iterator, Iterable
2
+ import time
3
3
  from concurrent.futures import Executor
4
+ from typing import Callable, Dict, Iterable, Iterator, Optional
4
5
  from warnings import warn
5
- import time
6
6
 
7
7
  from parsl import Config, DataFlowKernel
8
8
  from parsl.app.python import PythonApp
@@ -1,20 +1,24 @@
1
1
  import logging
2
- import typeguard
3
-
4
2
  from typing import Callable, Iterable, Optional, Sequence, Union
3
+
4
+ import typeguard
5
5
  from typing_extensions import Literal
6
6
 
7
- from parsl.utils import RepresentationMixin
7
+ from parsl.dataflow.dependency_resolvers import DependencyResolver
8
+ from parsl.dataflow.taskrecord import TaskRecord
9
+ from parsl.errors import ConfigurationError
8
10
  from parsl.executors.base import ParslExecutor
9
11
  from parsl.executors.threads import ThreadPoolExecutor
10
- from parsl.errors import ConfigurationError
11
- from parsl.dataflow.taskrecord import TaskRecord
12
12
  from parsl.monitoring import MonitoringHub
13
+ from parsl.usage_tracking.api import UsageInformation
14
+ from parsl.usage_tracking.levels import DISABLED as USAGE_TRACKING_DISABLED
15
+ from parsl.usage_tracking.levels import LEVEL_3 as USAGE_TRACKING_LEVEL_3
16
+ from parsl.utils import RepresentationMixin
13
17
 
14
18
  logger = logging.getLogger(__name__)
15
19
 
16
20
 
17
- class Config(RepresentationMixin):
21
+ class Config(RepresentationMixin, UsageInformation):
18
22
  """
19
23
  Specification of Parsl configuration options.
20
24
 
@@ -34,6 +38,17 @@ class Config(RepresentationMixin):
34
38
  checkpoint_period : str, optional
35
39
  Time interval (in "HH:MM:SS") at which to checkpoint completed tasks. Only has an effect if
36
40
  ``checkpoint_mode='periodic'``.
41
+ dependency_resolver: plugin point for custom dependency resolvers. Default: only resolve Futures,
42
+ using the `SHALLOW_DEPENDENCY_RESOLVER`.
43
+ exit_mode: str, optional
44
+ When Parsl is used as a context manager (using ``with parsl.load`` syntax) then this parameter
45
+ controls what will happen to running tasks and exceptions at exit. The options are:
46
+
47
+ * ``cleanup``: cleanup the DFK on exit without waiting for any tasks
48
+ * ``skip``: skip all shutdown behaviour when exiting the context manager
49
+ * ``wait``: wait for all tasks to complete when exiting normally, but exit immediately when exiting due to an exception.
50
+
51
+ Default is ``cleanup``.
37
52
  garbage_collect : bool. optional.
38
53
  Delete task records from DFK when tasks have completed. Default: True
39
54
  internal_tasks_max_threads : int, optional
@@ -50,16 +65,27 @@ class Config(RepresentationMixin):
50
65
  of 1.
51
66
  run_dir : str, optional
52
67
  Path to run directory. Default is 'runinfo'.
68
+ std_autopath : function, optional
69
+ Sets the function used to generate stdout/stderr specifications when parsl.AUTO_LOGPATH is used. If no function
70
+ is specified, generates paths that look like: ``rundir/NNN/task_logs/X/task_{id}_{name}{label}.{out/err}``
53
71
  strategy : str, optional
54
72
  Strategy to use for scaling blocks according to workflow needs. Can be 'simple', 'htex_auto_scale', 'none'
55
73
  or `None`.
56
74
  If 'none' or `None`, dynamic scaling will be disabled. Default is 'simple'. The literal value `None` is
57
75
  deprecated.
76
+ strategy_period : float or int, optional
77
+ How often the scaling strategy should be executed. Default is 5 seconds.
58
78
  max_idletime : float, optional
59
79
  The maximum idle time allowed for an executor before strategy could shut down unused blocks. Default is 120.0 seconds.
60
- usage_tracking : bool, optional
61
- Set this field to True to opt-in to Parsl's usage tracking system. Parsl only collects minimal, non personally-identifiable,
62
- information used for reporting to our funding agencies. Default is False.
80
+ usage_tracking : int, optional
81
+ Set this field to 1, 2, or 3 to opt-in to Parsl's usage tracking system.
82
+ The value represents the level of usage tracking detail to be collected.
83
+ Setting this field to 0 will disable usage tracking. Default (this field is not set): usage tracking is not enabled.
84
+ Parsl only collects minimal, non personally-identifiable,
85
+ information used for reporting to our funding agencies.
86
+ project_name: str, optional
87
+ Option to deanonymize usage tracking data.
88
+ If set, this value will be used as the project name in the usage tracking data and placed on the leaderboard.
63
89
  initialize_logging : bool, optional
64
90
  Make DFK optionally not initialize any logging. Log messages
65
91
  will still be passed into the python logging system under the
@@ -82,15 +108,20 @@ class Config(RepresentationMixin):
82
108
  Literal['dfk_exit'],
83
109
  Literal['manual']] = None,
84
110
  checkpoint_period: Optional[str] = None,
111
+ dependency_resolver: Optional[DependencyResolver] = None,
112
+ exit_mode: Literal['cleanup', 'skip', 'wait'] = 'cleanup',
85
113
  garbage_collect: bool = True,
86
114
  internal_tasks_max_threads: int = 10,
87
115
  retries: int = 0,
88
116
  retry_handler: Optional[Callable[[Exception, TaskRecord], float]] = None,
89
117
  run_dir: str = 'runinfo',
118
+ std_autopath: Optional[Callable] = None,
90
119
  strategy: Optional[str] = 'simple',
120
+ strategy_period: Union[float, int] = 5,
91
121
  max_idletime: float = 120.0,
92
122
  monitoring: Optional[MonitoringHub] = None,
93
- usage_tracking: bool = False,
123
+ usage_tracking: int = 0,
124
+ project_name: Optional[str] = None,
94
125
  initialize_logging: bool = True) -> None:
95
126
 
96
127
  executors = tuple(executors or [])
@@ -115,16 +146,22 @@ class Config(RepresentationMixin):
115
146
  if checkpoint_mode == 'periodic' and checkpoint_period is None:
116
147
  checkpoint_period = "00:30:00"
117
148
  self.checkpoint_period = checkpoint_period
149
+ self.dependency_resolver = dependency_resolver
150
+ self.exit_mode = exit_mode
118
151
  self.garbage_collect = garbage_collect
119
152
  self.internal_tasks_max_threads = internal_tasks_max_threads
120
153
  self.retries = retries
121
154
  self.retry_handler = retry_handler
122
155
  self.run_dir = run_dir
123
156
  self.strategy = strategy
157
+ self.strategy_period = strategy_period
124
158
  self.max_idletime = max_idletime
159
+ self.validate_usage_tracking(usage_tracking)
125
160
  self.usage_tracking = usage_tracking
161
+ self.project_name = project_name
126
162
  self.initialize_logging = initialize_logging
127
163
  self.monitoring = monitoring
164
+ self.std_autopath: Optional[Callable] = std_autopath
128
165
 
129
166
  @property
130
167
  def executors(self) -> Sequence[ParslExecutor]:
@@ -140,3 +177,13 @@ class Config(RepresentationMixin):
140
177
  if len(duplicates) > 0:
141
178
  raise ConfigurationError('Executors must have unique labels ({})'.format(
142
179
  ', '.join(['label={}'.format(repr(d)) for d in duplicates])))
180
+
181
+ def validate_usage_tracking(self, level: int) -> None:
182
+ if not USAGE_TRACKING_DISABLED <= level <= USAGE_TRACKING_LEVEL_3:
183
+ raise ConfigurationError(
184
+ f"Usage Tracking values must be 0, 1, 2, or 3 and not {level}"
185
+ )
186
+
187
+ def get_usage_information(self):
188
+ return {"executors_len": len(self.executors),
189
+ "dependency_resolver": self.dependency_resolver is not None}
@@ -1,9 +1,10 @@
1
- from parsl.providers import PBSProProvider
2
- from parsl.launchers import MpiRunLauncher
1
+ from parsl.addresses import address_by_interface
3
2
  from parsl.config import Config
4
3
  from parsl.executors import HighThroughputExecutor
5
- from parsl.addresses import address_by_interface
4
+ from parsl.launchers import MpiRunLauncher
6
5
  from parsl.monitoring.monitoring import MonitoringHub
6
+ from parsl.providers import PBSProProvider
7
+ from parsl.usage_tracking.levels import LEVEL_1
7
8
 
8
9
  config = Config(
9
10
  executors=[
@@ -33,11 +34,11 @@ config = Config(
33
34
  ],
34
35
  monitoring=MonitoringHub(
35
36
  hub_address=address_by_interface('ib0'),
36
- hub_port=55055,
37
37
  resource_monitoring_interval=10,
38
38
  ),
39
39
  strategy='simple',
40
40
  retries=3,
41
41
  app_cache=True,
42
- checkpoint_mode='task_exit'
42
+ checkpoint_mode='task_exit',
43
+ usage_tracking=LEVEL_1,
43
44
  )