parsl 2024.5.13__tar.gz → 2024.5.27__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 (476) hide show
  1. {parsl-2024.5.13/parsl.egg-info → parsl-2024.5.27}/PKG-INFO +2 -2
  2. {parsl-2024.5.13 → parsl-2024.5.27}/README.rst +8 -6
  3. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/base.py +2 -9
  4. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/local/local.py +3 -6
  5. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/oauth_ssh/oauth_ssh.py +2 -2
  6. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/ssh/ssh.py +2 -2
  7. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/config.py +7 -1
  8. parsl-2024.5.27/parsl/dataflow/dependency_resolvers.py +115 -0
  9. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/dflow.py +45 -39
  10. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/__init__.py +2 -0
  11. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/base.py +7 -7
  12. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/errors.py +10 -0
  13. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/executor.py +85 -84
  14. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/interchange.py +6 -5
  15. parsl-2024.5.27/parsl/executors/high_throughput/mpi_executor.py +85 -0
  16. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/mpi_prefix_composer.py +18 -2
  17. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/mpi_resource_management.py +3 -0
  18. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/zmq_pipes.py +36 -2
  19. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/radical/rpex_resources.py +3 -7
  20. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/remote.py +18 -24
  21. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/local/local.py +1 -1
  22. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/conftest.py +2 -2
  23. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_dynamic_executor.py +0 -1
  24. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_std_uri.py +0 -6
  25. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_periodic.py +2 -7
  26. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_python_checkpoint_2.py +0 -1
  27. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_python_checkpoint_3.py +0 -1
  28. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_task_exit.py +0 -1
  29. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_basic.py +0 -1
  30. parsl-2024.5.27/parsl/tests/test_htex/test_command_client_timeout.py +69 -0
  31. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_cpu_affinity_explicit.py +1 -8
  32. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_manager_failure.py +0 -1
  33. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_managers_command.py +2 -7
  34. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_missing_worker.py +2 -8
  35. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_app_names.py +0 -1
  36. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_basic.py +0 -2
  37. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_db_locks.py +0 -1
  38. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_fuzz_zmq.py +0 -1
  39. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +0 -2
  40. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_incomplete_futures.py +0 -1
  41. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_memoization_representation.py +0 -1
  42. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_stdouterr.py +0 -2
  43. parsl-2024.5.27/parsl/tests/test_mpi_apps/test_bad_mpi_config.py +33 -0
  44. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py +2 -8
  45. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +10 -1
  46. parsl-2024.5.27/parsl/tests/test_mpi_apps/test_mpiex.py +64 -0
  47. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/test_resource_spec.py +14 -9
  48. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_context_manager.py +1 -9
  49. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_lifted.py +10 -6
  50. parsl-2024.5.27/parsl/tests/test_python_apps/test_pluggable_future_resolution.py +161 -0
  51. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_regression_1621.py +0 -2
  52. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_shutdown_scalein.py +0 -2
  53. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_proxystore_configured.py +0 -1
  54. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_shutdown/test_kill_monitoring.py +0 -2
  55. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_1316.py +0 -2
  56. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_elaborate_noop_file.py +0 -1
  57. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_summary.py +0 -1
  58. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_threads/test_configs.py +0 -1
  59. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_threads/test_lazy_errors.py +0 -1
  60. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/version.py +1 -1
  61. {parsl-2024.5.13 → parsl-2024.5.27/parsl.egg-info}/PKG-INFO +2 -2
  62. {parsl-2024.5.13 → parsl-2024.5.27}/parsl.egg-info/SOURCES.txt +5 -0
  63. {parsl-2024.5.13 → parsl-2024.5.27}/parsl.egg-info/requires.txt +4 -2
  64. {parsl-2024.5.13 → parsl-2024.5.27}/setup.py +1 -1
  65. parsl-2024.5.13/parsl/tests/test_mpi_apps/test_bad_mpi_config.py +0 -41
  66. {parsl-2024.5.13 → parsl-2024.5.27}/LICENSE +0 -0
  67. {parsl-2024.5.13 → parsl-2024.5.27}/MANIFEST.in +0 -0
  68. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/__init__.py +0 -0
  69. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/addresses.py +0 -0
  70. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/__init__.py +0 -0
  71. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/app.py +0 -0
  72. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/bash.py +0 -0
  73. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/errors.py +0 -0
  74. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/futures.py +0 -0
  75. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/app/python.py +0 -0
  76. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/benchmark/__init__.py +0 -0
  77. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/benchmark/perf.py +0 -0
  78. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/__init__.py +0 -0
  79. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/errors.py +0 -0
  80. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/local/__init__.py +0 -0
  81. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/oauth_ssh/__init__.py +0 -0
  82. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/ssh/__init__.py +0 -0
  83. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/ssh_il/__init__.py +0 -0
  84. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/channels/ssh_il/ssh_il.py +0 -0
  85. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/concurrent/__init__.py +0 -0
  86. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/ASPIRE1.py +0 -0
  87. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/Azure.py +0 -0
  88. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/__init__.py +0 -0
  89. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/ad_hoc.py +0 -0
  90. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/bridges.py +0 -0
  91. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/cc_in2p3.py +0 -0
  92. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/ec2.py +0 -0
  93. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/expanse.py +0 -0
  94. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/frontera.py +0 -0
  95. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/htex_local.py +0 -0
  96. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/illinoiscluster.py +0 -0
  97. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/kubernetes.py +0 -0
  98. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/local_threads.py +0 -0
  99. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/midway.py +0 -0
  100. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/osg.py +0 -0
  101. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/polaris.py +0 -0
  102. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/stampede2.py +0 -0
  103. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/summit.py +0 -0
  104. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/toss3_llnl.py +0 -0
  105. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/vineex_local.py +0 -0
  106. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/configs/wqex_local.py +0 -0
  107. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/curvezmq.py +0 -0
  108. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/__init__.py +0 -0
  109. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/data_manager.py +0 -0
  110. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/file_noop.py +0 -0
  111. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/files.py +0 -0
  112. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/ftp.py +0 -0
  113. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/globus.py +0 -0
  114. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/http.py +0 -0
  115. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/rsync.py +0 -0
  116. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/staging.py +0 -0
  117. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/data_provider/zip.py +0 -0
  118. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/__init__.py +0 -0
  119. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/errors.py +0 -0
  120. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/futures.py +0 -0
  121. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/memoization.py +0 -0
  122. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/rundirs.py +0 -0
  123. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/states.py +0 -0
  124. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/dataflow/taskrecord.py +0 -0
  125. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/errors.py +0 -0
  126. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/errors.py +0 -0
  127. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/flux/__init__.py +0 -0
  128. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/flux/execute_parsl_task.py +0 -0
  129. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/flux/executor.py +0 -0
  130. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/flux/flux_instance_manager.py +0 -0
  131. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/__init__.py +0 -0
  132. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/manager_record.py +0 -0
  133. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/monitoring_info.py +0 -0
  134. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/probe.py +0 -0
  135. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/high_throughput/process_worker_pool.py +0 -0
  136. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/radical/__init__.py +0 -0
  137. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/radical/executor.py +0 -0
  138. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/radical/rpex_master.py +0 -0
  139. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/radical/rpex_worker.py +0 -0
  140. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/status_handling.py +0 -0
  141. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/__init__.py +0 -0
  142. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/errors.py +0 -0
  143. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/exec_parsl_function.py +0 -0
  144. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/executor.py +0 -0
  145. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/factory.py +0 -0
  146. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/factory_config.py +0 -0
  147. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/manager.py +0 -0
  148. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/manager_config.py +0 -0
  149. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/taskvine/utils.py +0 -0
  150. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/threads.py +0 -0
  151. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/__init__.py +0 -0
  152. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/errors.py +0 -0
  153. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/exec_parsl_function.py +0 -0
  154. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/executor.py +0 -0
  155. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/parsl_coprocess.py +0 -0
  156. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/executors/workqueue/parsl_coprocess_stub.py +0 -0
  157. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/__init__.py +0 -0
  158. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/error_handlers.py +0 -0
  159. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/errors.py +0 -0
  160. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/job_status_poller.py +0 -0
  161. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/states.py +0 -0
  162. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/jobs/strategy.py +0 -0
  163. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/launchers/__init__.py +0 -0
  164. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/launchers/base.py +0 -0
  165. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/launchers/errors.py +0 -0
  166. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/launchers/launchers.py +0 -0
  167. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/log_utils.py +0 -0
  168. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/__init__.py +0 -0
  169. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/db_manager.py +0 -0
  170. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/message_type.py +0 -0
  171. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/monitoring.py +0 -0
  172. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/queries/__init__.py +0 -0
  173. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/queries/pandas.py +0 -0
  174. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/radios.py +0 -0
  175. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/router.py +0 -0
  176. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/types.py +0 -0
  177. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/__init__.py +0 -0
  178. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/app.py +0 -0
  179. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/models.py +0 -0
  180. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/plots/__init__.py +0 -0
  181. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/plots/default/__init__.py +0 -0
  182. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/plots/default/task_plots.py +0 -0
  183. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/plots/default/workflow_plots.py +0 -0
  184. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +0 -0
  185. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/static/parsl-logo-white.png +0 -0
  186. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/static/parsl-monitor.css +0 -0
  187. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/app.html +0 -0
  188. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/dag.html +0 -0
  189. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/error.html +0 -0
  190. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/layout.html +0 -0
  191. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/resource_usage.html +0 -0
  192. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/task.html +0 -0
  193. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/workflow.html +0 -0
  194. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/templates/workflows_summary.html +0 -0
  195. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/utils.py +0 -0
  196. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/version.py +0 -0
  197. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/monitoring/visualization/views.py +0 -0
  198. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/multiprocessing.py +0 -0
  199. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/process_loggers.py +0 -0
  200. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/__init__.py +0 -0
  201. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/ad_hoc/__init__.py +0 -0
  202. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/ad_hoc/ad_hoc.py +0 -0
  203. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/aws/__init__.py +0 -0
  204. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/aws/aws.py +0 -0
  205. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/aws/template.py +0 -0
  206. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/azure/__init__.py +0 -0
  207. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/azure/azure.py +0 -0
  208. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/azure/template.py +0 -0
  209. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/base.py +0 -0
  210. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/cluster_provider.py +0 -0
  211. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/cobalt/__init__.py +0 -0
  212. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/cobalt/cobalt.py +0 -0
  213. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/cobalt/template.py +0 -0
  214. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/condor/__init__.py +0 -0
  215. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/condor/condor.py +0 -0
  216. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/condor/template.py +0 -0
  217. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/errors.py +0 -0
  218. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/googlecloud/__init__.py +0 -0
  219. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/googlecloud/googlecloud.py +0 -0
  220. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/grid_engine/__init__.py +0 -0
  221. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/grid_engine/grid_engine.py +0 -0
  222. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/grid_engine/template.py +0 -0
  223. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/kubernetes/__init__.py +0 -0
  224. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/kubernetes/kube.py +0 -0
  225. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/kubernetes/template.py +0 -0
  226. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/local/__init__.py +0 -0
  227. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/lsf/__init__.py +0 -0
  228. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/lsf/lsf.py +0 -0
  229. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/lsf/template.py +0 -0
  230. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/pbspro/__init__.py +0 -0
  231. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/pbspro/pbspro.py +0 -0
  232. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/pbspro/template.py +0 -0
  233. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/slurm/__init__.py +0 -0
  234. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/slurm/slurm.py +0 -0
  235. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/slurm/template.py +0 -0
  236. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/torque/__init__.py +0 -0
  237. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/torque/template.py +0 -0
  238. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/providers/torque/torque.py +0 -0
  239. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/py.typed +0 -0
  240. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/__init__.py +0 -0
  241. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/base.py +0 -0
  242. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/concretes.py +0 -0
  243. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/errors.py +0 -0
  244. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/facade.py +0 -0
  245. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/serialize/proxystore.py +0 -0
  246. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/__init__.py +0 -0
  247. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/callables_helper.py +0 -0
  248. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/__init__.py +0 -0
  249. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/ad_hoc_cluster_htex.py +0 -0
  250. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/azure_single_node.py +0 -0
  251. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/bluewaters.py +0 -0
  252. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/bridges.py +0 -0
  253. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/cc_in2p3.py +0 -0
  254. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/comet.py +0 -0
  255. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/cooley_htex.py +0 -0
  256. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/ec2_single_node.py +0 -0
  257. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/ec2_spot.py +0 -0
  258. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/frontera.py +0 -0
  259. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/htex_ad_hoc_cluster.py +0 -0
  260. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/htex_local.py +0 -0
  261. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/htex_local_alternate.py +0 -0
  262. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/htex_local_intask_staging.py +0 -0
  263. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/htex_local_rsync_staging.py +0 -0
  264. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_adhoc.py +0 -0
  265. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_radical.py +0 -0
  266. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_radical_mpi.py +0 -0
  267. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads.py +0 -0
  268. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_checkpoint.py +0 -0
  269. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_checkpoint_dfk_exit.py +0 -0
  270. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_checkpoint_periodic.py +0 -0
  271. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_checkpoint_task_exit.py +0 -0
  272. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_ftp_in_task.py +0 -0
  273. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_globus.py +0 -0
  274. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_http_in_task.py +0 -0
  275. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_monitoring.py +0 -0
  276. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/local_threads_no_cache.py +0 -0
  277. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/midway.py +0 -0
  278. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/nscc_singapore.py +0 -0
  279. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/osg_htex.py +0 -0
  280. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/petrelkube.py +0 -0
  281. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/summit.py +0 -0
  282. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/swan_htex.py +0 -0
  283. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/taskvine_ex.py +0 -0
  284. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/theta.py +0 -0
  285. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/user_opts.py +0 -0
  286. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/configs/workqueue_ex.py +0 -0
  287. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/__init__.py +0 -0
  288. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/latency.py +0 -0
  289. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_apps/__init__.py +0 -0
  290. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/__init__.py +0 -0
  291. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_channels.py +0 -0
  292. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_local_channel.py +0 -0
  293. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_scp_1.py +0 -0
  294. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_ssh_1.py +0 -0
  295. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_ssh_errors.py +0 -0
  296. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -0
  297. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -0
  298. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_parsl_load_default_config.py +0 -0
  299. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_stress/__init__.py +0 -0
  300. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_stress/test_python_simple.py +0 -0
  301. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/integration/test_stress/test_python_threads.py +0 -0
  302. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/__init__.py +0 -0
  303. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/htex_local.py +0 -0
  304. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -0
  305. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_basic.py +0 -0
  306. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +0 -0
  307. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_log_filter.py +0 -0
  308. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_memory_limits.py +0 -0
  309. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_oauth_ssh.py +0 -0
  310. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_regression_220.py +0 -0
  311. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_udp_simple.py +0 -0
  312. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/manual_tests/test_worker_count.py +0 -0
  313. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/__init__.py +0 -0
  314. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/htex_local.py +0 -0
  315. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/local_threads.py +0 -0
  316. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/test_scale.py +0 -0
  317. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/vineex_condor.py +0 -0
  318. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/vineex_local.py +0 -0
  319. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/wqex_condor.py +0 -0
  320. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/scaling_tests/wqex_local.py +0 -0
  321. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/site_tests/__init__.py +0 -0
  322. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/site_tests/site_config_selector.py +0 -0
  323. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/site_tests/test_provider.py +0 -0
  324. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/site_tests/test_site.py +0 -0
  325. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/__init__.py +0 -0
  326. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_affinity.py +0 -0
  327. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_concurrent.py +0 -0
  328. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_ec2.py +0 -0
  329. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_launchers.py +0 -0
  330. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_local_adhoc.py +0 -0
  331. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_mpi/__init__.py +0 -0
  332. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/sites/test_worker_info.py +0 -0
  333. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_aalst_patterns.py +0 -0
  334. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/__init__.py +0 -0
  335. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_apptimeout.py +0 -0
  336. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_basic.py +0 -0
  337. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_error_codes.py +0 -0
  338. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_keyword_overlaps.py +0 -0
  339. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_kwarg_storage.py +0 -0
  340. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_memoize.py +0 -0
  341. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_memoize_ignore_args.py +0 -0
  342. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +0 -0
  343. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_multiline.py +0 -0
  344. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_pipeline.py +0 -0
  345. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_bash_apps/test_stdout.py +0 -0
  346. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_callables.py +0 -0
  347. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_channels/__init__.py +0 -0
  348. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_channels/test_large_output.py +0 -0
  349. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/__init__.py +0 -0
  350. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_python_checkpoint_1.py +0 -0
  351. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_regression_232.py +0 -0
  352. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_regression_233.py +0 -0
  353. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_checkpointing/test_regression_239.py +0 -0
  354. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_curvezmq.py +0 -0
  355. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/__init__.py +0 -0
  356. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_from_slides.py +0 -0
  357. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_kwargs.py +0 -0
  358. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_tutorial_1.py +0 -0
  359. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_workflow1.py +0 -0
  360. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_workflow2.py +0 -0
  361. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_docs/test_workflow4.py +0 -0
  362. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/__init__.py +0 -0
  363. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_fail.py +0 -0
  364. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_python_walltime.py +0 -0
  365. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_rand_fail.py +0 -0
  366. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_resource_spec.py +0 -0
  367. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_retries.py +0 -0
  368. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_retry_handler.py +0 -0
  369. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_retry_handler_failure.py +0 -0
  370. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_serialization_fail.py +0 -0
  371. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_error_handling/test_wrap_with_logs.py +0 -0
  372. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_flowcontrol/__init__.py +0 -0
  373. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_flux.py +0 -0
  374. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/__init__.py +0 -0
  375. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_connected_blocks.py +0 -0
  376. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_disconnected_blocks.py +0 -0
  377. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_drain.py +0 -0
  378. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_htex.py +0 -0
  379. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_multiple_disconnected_blocks.py +0 -0
  380. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_worker_failure.py +0 -0
  381. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_htex/test_zmq_binding.py +0 -0
  382. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/__init__.py +0 -0
  383. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_monitoring/test_viz_colouring.py +0 -0
  384. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/__init__.py +0 -0
  385. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/test_mpi_prefix.py +0 -0
  386. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_mpi_apps/test_mpi_scheduler.py +0 -0
  387. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/__init__.py +0 -0
  388. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_cobalt_deprecation_warning.py +0 -0
  389. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_local_provider.py +0 -0
  390. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_pbspro_template.py +0 -0
  391. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_slurm_instantiate.py +0 -0
  392. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_slurm_template.py +0 -0
  393. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_providers/test_submiterror_deprecation.py +0 -0
  394. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/__init__.py +0 -0
  395. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_arg_input_types.py +0 -0
  396. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_basic.py +0 -0
  397. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_dep_standard_futures.py +0 -0
  398. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_dependencies.py +0 -0
  399. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_depfail_propagation.py +0 -0
  400. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_fail.py +0 -0
  401. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_fibonacci_iterative.py +0 -0
  402. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_fibonacci_recursive.py +0 -0
  403. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_futures.py +0 -0
  404. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_garbage_collect.py +0 -0
  405. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_import_fail.py +0 -0
  406. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_join.py +0 -0
  407. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_mapred.py +0 -0
  408. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_1.py +0 -0
  409. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_2.py +0 -0
  410. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_4.py +0 -0
  411. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +0 -0
  412. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_ignore_args.py +0 -0
  413. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_memoize_joinapp.py +0 -0
  414. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_outputs.py +0 -0
  415. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_overview.py +0 -0
  416. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_pipeline.py +0 -0
  417. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_simple.py +0 -0
  418. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_timeout.py +0 -0
  419. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_python_apps/test_type5.py +0 -0
  420. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_radical/__init__.py +0 -0
  421. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_radical/test_mpi_funcs.py +0 -0
  422. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/__init__.py +0 -0
  423. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_1480.py +0 -0
  424. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_1606_wait_for_current_tasks.py +0 -0
  425. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_1653.py +0 -0
  426. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_221.py +0 -0
  427. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_226.py +0 -0
  428. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_2652.py +0 -0
  429. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_69a.py +0 -0
  430. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_854.py +0 -0
  431. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_97_parallelism_0.py +0 -0
  432. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_regression/test_98.py +0 -0
  433. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/__init__.py +0 -0
  434. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_block_error_handler.py +0 -0
  435. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_scale_down.py +0 -0
  436. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +0 -0
  437. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_scaling/test_scale_down_htex_unregistered.py +0 -0
  438. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/__init__.py +0 -0
  439. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_2555_caching_deserializer.py +0 -0
  440. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_basic.py +0 -0
  441. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_htex_code_cache.py +0 -0
  442. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_pack_resource_spec.py +0 -0
  443. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_serialization/test_proxystore_impl.py +0 -0
  444. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_shutdown/__init__.py +0 -0
  445. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/__init__.py +0 -0
  446. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/staging_provider.py +0 -0
  447. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_docs_1.py +0 -0
  448. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_docs_2.py +0 -0
  449. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_file.py +0 -0
  450. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_file_apps.py +0 -0
  451. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_file_staging.py +0 -0
  452. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_output_chain_filenames.py +0 -0
  453. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_staging_ftp.py +0 -0
  454. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_staging_ftp_in_task.py +0 -0
  455. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_staging_globus.py +0 -0
  456. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_staging_https.py +0 -0
  457. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_staging_stdout.py +0 -0
  458. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_zip_in.py +0 -0
  459. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_zip_out.py +0 -0
  460. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_staging/test_zip_to_zip.py +0 -0
  461. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_thread_parallelism.py +0 -0
  462. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_threads/__init__.py +0 -0
  463. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_utils/__init__.py +0 -0
  464. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/test_utils/test_representation_mixin.py +0 -0
  465. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/unit/__init__.py +0 -0
  466. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/unit/test_file.py +0 -0
  467. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/tests/utils.py +0 -0
  468. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/usage_tracking/__init__.py +0 -0
  469. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/usage_tracking/api.py +0 -0
  470. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/usage_tracking/usage.py +0 -0
  471. {parsl-2024.5.13 → parsl-2024.5.27}/parsl/utils.py +0 -0
  472. {parsl-2024.5.13 → parsl-2024.5.27}/parsl.egg-info/dependency_links.txt +0 -0
  473. {parsl-2024.5.13 → parsl-2024.5.27}/parsl.egg-info/entry_points.txt +0 -0
  474. {parsl-2024.5.13 → parsl-2024.5.27}/parsl.egg-info/top_level.txt +0 -0
  475. {parsl-2024.5.13 → parsl-2024.5.27}/requirements.txt +0 -0
  476. {parsl-2024.5.13 → parsl-2024.5.27}/setup.cfg +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.5.13
3
+ Version: 2024.5.27
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.05.13.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2024.05.27.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -22,17 +22,19 @@ Parsl lets you chain functions together and will launch each function as inputs
22
22
  return x + 1
23
23
 
24
24
  @python_app
25
- def g(x):
26
- return x * 2
25
+ def g(x, y):
26
+ return x + y
27
27
 
28
28
  # Start Parsl on a single computer
29
29
  with parsl.load():
30
- # These functions now return Futures, and can be chained
30
+ # These functions now return Futures
31
31
  future = f(1)
32
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,
@@ -120,7 +122,7 @@ Parsl is supported in Python 3.8+. Requirements can be found `here <requirements
120
122
  Code of Conduct
121
123
  ===============
122
124
 
123
- Parsl seeks to foster an open and welcoming environment - Please see the `Parsl Code of Conduct <https://github.com/Parsl/parsl/blob/master/CODE_OF_CONDUCT.md>`_ for more details.
125
+ 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.
124
126
 
125
127
  Contributing
126
128
  ============
@@ -89,15 +89,8 @@ class Channel(metaclass=ABCMeta):
89
89
  pass
90
90
 
91
91
  @abstractmethod
92
- def close(self) -> bool:
93
- ''' Closes the channel. Clean out any auth credentials.
94
-
95
- Args:
96
- None
97
-
98
- Returns:
99
- Bool
100
-
92
+ def close(self) -> None:
93
+ ''' Closes the channel.
101
94
  '''
102
95
  pass
103
96
 
@@ -107,13 +107,10 @@ class LocalChannel(Channel, RepresentationMixin):
107
107
  def pull_file(self, remote_source, local_dir):
108
108
  return self.push_file(remote_source, local_dir)
109
109
 
110
- def close(self):
111
- ''' There's nothing to close here, and this really doesn't do anything
112
-
113
- Returns:
114
- - False, because it really did not "close" this channel.
110
+ def close(self) -> None:
111
+ ''' There's nothing to close here, and so this doesn't do anything
115
112
  '''
116
- return False
113
+ pass
117
114
 
118
115
  def isdir(self, path):
119
116
  """Return true if the path refers to an existing directory.
@@ -106,5 +106,5 @@ class OAuthSSHChannel(SSHChannel):
106
106
 
107
107
  return exit_status, stdout, stderr
108
108
 
109
- def close(self):
110
- return self.transport.close()
109
+ def close(self) -> None:
110
+ self.transport.close()
@@ -217,9 +217,9 @@ class SSHChannel(Channel, RepresentationMixin):
217
217
 
218
218
  return local_dest
219
219
 
220
- def close(self):
220
+ def close(self) -> None:
221
221
  if self._is_connected():
222
- return self.ssh_client.close()
222
+ self.ssh_client.close()
223
223
 
224
224
  def isdir(self, path):
225
225
  """Return true if the path refers to an existing directory.
@@ -5,6 +5,7 @@ from typing import Callable, Iterable, Optional, Sequence, Union
5
5
  from typing_extensions import Literal
6
6
 
7
7
  from parsl.utils import RepresentationMixin
8
+ from parsl.dataflow.dependency_resolvers import DependencyResolver
8
9
  from parsl.executors.base import ParslExecutor
9
10
  from parsl.executors.threads import ThreadPoolExecutor
10
11
  from parsl.errors import ConfigurationError
@@ -35,6 +36,8 @@ class Config(RepresentationMixin, UsageInformation):
35
36
  checkpoint_period : str, optional
36
37
  Time interval (in "HH:MM:SS") at which to checkpoint completed tasks. Only has an effect if
37
38
  ``checkpoint_mode='periodic'``.
39
+ dependency_resolver: plugin point for custom dependency resolvers. Default: only resolve Futures,
40
+ using the `SHALLOW_DEPENDENCY_RESOLVER`.
38
41
  garbage_collect : bool. optional.
39
42
  Delete task records from DFK when tasks have completed. Default: True
40
43
  internal_tasks_max_threads : int, optional
@@ -88,6 +91,7 @@ class Config(RepresentationMixin, UsageInformation):
88
91
  Literal['dfk_exit'],
89
92
  Literal['manual']] = None,
90
93
  checkpoint_period: Optional[str] = None,
94
+ dependency_resolver: Optional[DependencyResolver] = None,
91
95
  garbage_collect: bool = True,
92
96
  internal_tasks_max_threads: int = 10,
93
97
  retries: int = 0,
@@ -123,6 +127,7 @@ class Config(RepresentationMixin, UsageInformation):
123
127
  if checkpoint_mode == 'periodic' and checkpoint_period is None:
124
128
  checkpoint_period = "00:30:00"
125
129
  self.checkpoint_period = checkpoint_period
130
+ self.dependency_resolver = dependency_resolver
126
131
  self.garbage_collect = garbage_collect
127
132
  self.internal_tasks_max_threads = internal_tasks_max_threads
128
133
  self.retries = retries
@@ -152,4 +157,5 @@ class Config(RepresentationMixin, UsageInformation):
152
157
  ', '.join(['label={}'.format(repr(d)) for d in duplicates])))
153
158
 
154
159
  def get_usage_information(self):
155
- return {"executors_len": len(self.executors)}
160
+ return {"executors_len": len(self.executors),
161
+ "dependency_resolver": self.dependency_resolver is not None}
@@ -0,0 +1,115 @@
1
+ from concurrent.futures import Future
2
+ from dataclasses import dataclass
3
+ from functools import singledispatch
4
+ from typing import Callable, Sequence
5
+
6
+
7
+ @dataclass
8
+ class DependencyResolver:
9
+ """A DependencyResolver describes how app dependencies can be resolved.
10
+ It is specified as two functions: `traverse_to_gather` which turns an
11
+ app parameter into a sequence of futures which must be waited for before
12
+ the task can be executed (for example, in the case of
13
+ `DEEP_DEPENDENCY_RESOLVER` this traverses structures such as lists to
14
+ find every contained ``Future``), and `traverse_to_unwrap` which turns an
15
+ app parameter into its value to be passed to the app on execution
16
+ (for example in the case of `DEEP_DEPENDENCY_RESOLVER` this replaces a
17
+ list containing futures with a new list containing the values of those
18
+ resolved futures).
19
+
20
+ By default, Parsl will use `SHALLOW_DEPENDENCY_RESOLVER` which only
21
+ resolves Futures passed directly as arguments.
22
+ """
23
+ traverse_to_gather: Callable[[object], Sequence[Future]]
24
+ traverse_to_unwrap: Callable[[object], object]
25
+
26
+
27
+ @singledispatch
28
+ def shallow_traverse_to_gather(o):
29
+ # objects in general do not expose futures that we can see
30
+ return []
31
+
32
+
33
+ @singledispatch
34
+ def shallow_traverse_to_unwrap(o):
35
+ # objects in general unwrap to themselves
36
+ return o
37
+
38
+
39
+ @shallow_traverse_to_gather.register
40
+ def _(fut: Future):
41
+ return [fut]
42
+
43
+
44
+ @shallow_traverse_to_unwrap.register
45
+ @singledispatch
46
+ def _(fut: Future):
47
+ assert fut.done()
48
+ return fut.result()
49
+
50
+
51
+ @singledispatch
52
+ def deep_traverse_to_gather(o):
53
+ # objects in general do not expose futures that we can see
54
+ return []
55
+
56
+
57
+ @singledispatch
58
+ def deep_traverse_to_unwrap(o):
59
+ # objects in general unwrap to themselves
60
+ return o
61
+
62
+
63
+ @deep_traverse_to_gather.register
64
+ def _(fut: Future):
65
+ return [fut]
66
+
67
+
68
+ @deep_traverse_to_unwrap.register
69
+ @singledispatch
70
+ def _(fut: Future):
71
+ assert fut.done()
72
+ return fut.result()
73
+
74
+
75
+ @deep_traverse_to_gather.register(tuple)
76
+ @deep_traverse_to_gather.register(list)
77
+ @deep_traverse_to_gather.register(set)
78
+ def _(iterable):
79
+ return [e for v in iterable for e in deep_traverse_to_gather(v)]
80
+
81
+
82
+ @deep_traverse_to_unwrap.register(tuple)
83
+ @deep_traverse_to_unwrap.register(list)
84
+ @deep_traverse_to_unwrap.register(set)
85
+ @singledispatch
86
+ def _(iterable):
87
+
88
+ type_ = type(iterable)
89
+ return type_(map(deep_traverse_to_unwrap, iterable))
90
+
91
+
92
+ @deep_traverse_to_gather.register(dict)
93
+ def _(dictionary):
94
+ futures = []
95
+ for key, value in dictionary.items():
96
+ futures.extend(deep_traverse_to_gather(key))
97
+ futures.extend(deep_traverse_to_gather(value))
98
+ return futures
99
+
100
+
101
+ @deep_traverse_to_unwrap.register(dict)
102
+ def _(dictionary):
103
+ unwrapped_dict = {}
104
+ for key, value in dictionary.items():
105
+ key = deep_traverse_to_unwrap(key)
106
+ value = deep_traverse_to_unwrap(value)
107
+ unwrapped_dict[key] = value
108
+ return unwrapped_dict
109
+
110
+
111
+ DEEP_DEPENDENCY_RESOLVER = DependencyResolver(traverse_to_gather=deep_traverse_to_gather,
112
+ traverse_to_unwrap=deep_traverse_to_unwrap)
113
+
114
+ SHALLOW_DEPENDENCY_RESOLVER = DependencyResolver(traverse_to_gather=shallow_traverse_to_gather,
115
+ traverse_to_unwrap=shallow_traverse_to_unwrap)
@@ -26,6 +26,7 @@ from parsl.channels import Channel
26
26
  from parsl.config import Config
27
27
  from parsl.data_provider.data_manager import DataManager
28
28
  from parsl.data_provider.files import File
29
+ from parsl.dataflow.dependency_resolvers import SHALLOW_DEPENDENCY_RESOLVER
29
30
  from parsl.dataflow.errors import BadCheckpoint, DependencyError, JoinError
30
31
  from parsl.dataflow.futures import AppFuture
31
32
  from parsl.dataflow.memoization import Memoizer
@@ -203,6 +204,9 @@ class DataFlowKernel:
203
204
  self.tasks: Dict[int, TaskRecord] = {}
204
205
  self.submitter_lock = threading.Lock()
205
206
 
207
+ self.dependency_resolver = self.config.dependency_resolver if self.config.dependency_resolver is not None \
208
+ else SHALLOW_DEPENDENCY_RESOLVER
209
+
206
210
  atexit.register(self.atexit_cleanup)
207
211
 
208
212
  def __enter__(self):
@@ -852,8 +856,11 @@ class DataFlowKernel:
852
856
  depends: List[Future] = []
853
857
 
854
858
  def check_dep(d: Any) -> None:
855
- if isinstance(d, Future):
856
- depends.extend([d])
859
+ try:
860
+ depends.extend(self.dependency_resolver.traverse_to_gather(d))
861
+ except Exception:
862
+ logger.exception("Exception in dependency_resolver.traverse_to_gather")
863
+ raise
857
864
 
858
865
  # Check the positional args
859
866
  for dep in args:
@@ -870,7 +877,8 @@ class DataFlowKernel:
870
877
 
871
878
  return depends
872
879
 
873
- def _unwrap_futures(self, args, kwargs):
880
+ def _unwrap_futures(self, args: Sequence[Any], kwargs: Dict[str, Any]) \
881
+ -> Tuple[Sequence[Any], Dict[str, Any], Sequence[Tuple[Exception, str]]]:
874
882
  """This function should be called when all dependencies have completed.
875
883
 
876
884
  It will rewrite the arguments for that task, replacing each Future
@@ -891,53 +899,40 @@ class DataFlowKernel:
891
899
  """
892
900
  dep_failures = []
893
901
 
902
+ def append_failure(e: Exception, dep: Future) -> None:
903
+ # If this Future is associated with a task inside this DFK,
904
+ # then refer to the task ID.
905
+ # Otherwise make a repr of the Future object.
906
+ if hasattr(dep, 'task_record') and dep.task_record['dfk'] == self:
907
+ tid = "task " + repr(dep.task_record['id'])
908
+ else:
909
+ tid = repr(dep)
910
+ dep_failures.extend([(e, tid)])
911
+
894
912
  # Replace item in args
895
913
  new_args = []
896
914
  for dep in args:
897
- if isinstance(dep, Future):
898
- try:
899
- new_args.extend([dep.result()])
900
- except Exception as e:
901
- # If this Future is associated with a task inside this DFK,
902
- # then refer to the task ID.
903
- # Otherwise make a repr of the Future object.
904
- if hasattr(dep, 'task_record') and dep.task_record['dfk'] == self:
905
- tid = "task " + repr(dep.task_record['id'])
906
- else:
907
- tid = repr(dep)
908
- dep_failures.extend([(e, tid)])
909
- else:
910
- new_args.extend([dep])
915
+ try:
916
+ new_args.extend([self.dependency_resolver.traverse_to_unwrap(dep)])
917
+ except Exception as e:
918
+ append_failure(e, dep)
911
919
 
912
920
  # Check for explicit kwargs ex, fu_1=<fut>
913
921
  for key in kwargs:
914
922
  dep = kwargs[key]
915
- if isinstance(dep, Future):
916
- try:
917
- kwargs[key] = dep.result()
918
- except Exception as e:
919
- if hasattr(dep, 'task_record'):
920
- tid = dep.task_record['id']
921
- else:
922
- tid = None
923
- dep_failures.extend([(e, tid)])
923
+ try:
924
+ kwargs[key] = self.dependency_resolver.traverse_to_unwrap(dep)
925
+ except Exception as e:
926
+ append_failure(e, dep)
924
927
 
925
928
  # Check for futures in inputs=[<fut>...]
926
929
  if 'inputs' in kwargs:
927
930
  new_inputs = []
928
931
  for dep in kwargs['inputs']:
929
- if isinstance(dep, Future):
930
- try:
931
- new_inputs.extend([dep.result()])
932
- except Exception as e:
933
- if hasattr(dep, 'task_record'):
934
- tid = dep.task_record['id']
935
- else:
936
- tid = None
937
- dep_failures.extend([(e, tid)])
938
-
939
- else:
940
- new_inputs.extend([dep])
932
+ try:
933
+ new_inputs.extend([self.dependency_resolver.traverse_to_unwrap(dep)])
934
+ except Exception as e:
935
+ append_failure(e, dep)
941
936
  kwargs['inputs'] = new_inputs
942
937
 
943
938
  return new_args, kwargs, dep_failures
@@ -1042,6 +1037,8 @@ class DataFlowKernel:
1042
1037
 
1043
1038
  func = self._add_output_deps(executor, app_args, app_kwargs, app_fu, func)
1044
1039
 
1040
+ logger.debug("Added output dependencies")
1041
+
1045
1042
  # Replace the function invocation in the TaskRecord with whatever file-staging
1046
1043
  # substitutions have been made.
1047
1044
  task_record.update({
@@ -1053,8 +1050,10 @@ class DataFlowKernel:
1053
1050
 
1054
1051
  self.tasks[task_id] = task_record
1055
1052
 
1053
+ logger.debug("Gathering dependencies")
1056
1054
  # Get the list of dependencies for the task
1057
1055
  depends = self._gather_all_deps(app_args, app_kwargs)
1056
+ logger.debug("Gathered dependencies")
1058
1057
  task_record['depends'] = depends
1059
1058
 
1060
1059
  depend_descs = []
@@ -1156,7 +1155,7 @@ class DataFlowKernel:
1156
1155
  executor.run_id = self.run_id
1157
1156
  executor.run_dir = self.run_dir
1158
1157
  executor.hub_address = self.hub_address
1159
- executor.hub_port = self.hub_zmq_port
1158
+ executor.hub_zmq_port = self.hub_zmq_port
1160
1159
  if self.monitoring:
1161
1160
  executor.monitoring_radio = self.monitoring.radio
1162
1161
  if hasattr(executor, 'provider'):
@@ -1271,6 +1270,13 @@ class DataFlowKernel:
1271
1270
  atexit.unregister(self.atexit_cleanup)
1272
1271
  logger.info("Unregistered atexit hook")
1273
1272
 
1273
+ if DataFlowKernelLoader._dfk is self:
1274
+ logger.info("Unregistering default DFK")
1275
+ parsl.clear()
1276
+ logger.info("Unregistered default DFK")
1277
+ else:
1278
+ logger.debug("Cleaning up non-default DFK - not unregistering")
1279
+
1274
1280
  logger.info("DFK cleanup complete")
1275
1281
 
1276
1282
  def checkpoint(self, tasks: Optional[Sequence[TaskRecord]] = None) -> str:
@@ -1,9 +1,11 @@
1
1
  from parsl.executors.threads import ThreadPoolExecutor
2
2
  from parsl.executors.workqueue.executor import WorkQueueExecutor
3
3
  from parsl.executors.high_throughput.executor import HighThroughputExecutor
4
+ from parsl.executors.high_throughput.mpi_executor import MPIExecutor
4
5
  from parsl.executors.flux.executor import FluxExecutor
5
6
 
6
7
  __all__ = ['ThreadPoolExecutor',
7
8
  'HighThroughputExecutor',
9
+ 'MPIExecutor',
8
10
  'WorkQueueExecutor',
9
11
  'FluxExecutor']
@@ -50,13 +50,13 @@ class ParslExecutor(metaclass=ABCMeta):
50
50
  self,
51
51
  *,
52
52
  hub_address: Optional[str] = None,
53
- hub_port: Optional[int] = None,
53
+ hub_zmq_port: Optional[int] = None,
54
54
  monitoring_radio: Optional[MonitoringRadio] = None,
55
55
  run_dir: str = ".",
56
56
  run_id: Optional[str] = None,
57
57
  ):
58
58
  self.hub_address = hub_address
59
- self.hub_port = hub_port
59
+ self.hub_zmq_port = hub_zmq_port
60
60
  self.monitoring_radio = monitoring_radio
61
61
  self.run_dir = os.path.abspath(run_dir)
62
62
  self.run_id = run_id
@@ -136,14 +136,14 @@ class ParslExecutor(metaclass=ABCMeta):
136
136
  self._hub_address = value
137
137
 
138
138
  @property
139
- def hub_port(self) -> Optional[int]:
139
+ def hub_zmq_port(self) -> Optional[int]:
140
140
  """Port to the Hub for monitoring.
141
141
  """
142
- return self._hub_port
142
+ return self._hub_zmq_port
143
143
 
144
- @hub_port.setter
145
- def hub_port(self, value: Optional[int]) -> None:
146
- self._hub_port = value
144
+ @hub_zmq_port.setter
145
+ def hub_zmq_port(self, value: Optional[int]) -> None:
146
+ self._hub_zmq_port = value
147
147
 
148
148
  @property
149
149
  def monitoring_radio(self) -> Optional[MonitoringRadio]:
@@ -10,3 +10,13 @@ class WorkerLost(Exception):
10
10
 
11
11
  def __str__(self):
12
12
  return self.__repr__()
13
+
14
+
15
+ class CommandClientTimeoutError(Exception):
16
+ """Raised when the command client times out waiting for a response.
17
+ """
18
+
19
+
20
+ class CommandClientBadError(Exception):
21
+ """Raised when the command client is bad from an earlier timeout.
22
+ """