parsl 2024.1.1__tar.gz → 2024.1.15__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 (435) hide show
  1. {parsl-2024.1.1/parsl.egg-info → parsl-2024.1.15}/PKG-INFO +2 -2
  2. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/addresses.py +3 -2
  3. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/dataflow/dflow.py +5 -9
  4. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/high_throughput/executor.py +19 -16
  5. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/workqueue/executor.py +1 -1
  6. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/jobs/job_status_poller.py +7 -6
  7. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/errors.py +14 -7
  8. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/conftest.py +59 -10
  9. parsl-2024.1.15/parsl/tests/test_checkpointing/test_python_checkpoint_1.py +33 -0
  10. parsl-2024.1.15/parsl/tests/test_checkpointing/test_python_checkpoint_2.py +42 -0
  11. parsl-2024.1.15/parsl/tests/test_providers/test_submiterror_deprecation.py +21 -0
  12. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_radical/test_mpi_funcs.py +3 -2
  13. parsl-2024.1.15/parsl/tests/test_staging/__init__.py +7 -0
  14. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_staging/test_elaborate_noop_file.py +30 -38
  15. parsl-2024.1.15/parsl/tests/test_staging/test_staging_https.py +103 -0
  16. parsl-2024.1.15/parsl/tests/test_utils/test_representation_mixin.py +68 -0
  17. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/utils.py +14 -9
  18. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/version.py +1 -1
  19. {parsl-2024.1.1 → parsl-2024.1.15/parsl.egg-info}/PKG-INFO +2 -2
  20. {parsl-2024.1.1 → parsl-2024.1.15}/parsl.egg-info/SOURCES.txt +3 -1
  21. parsl-2024.1.1/parsl/tests/test_checkpointing/test_python_checkpoint_1.py +0 -53
  22. parsl-2024.1.1/parsl/tests/test_checkpointing/test_python_checkpoint_2.py +0 -45
  23. parsl-2024.1.1/parsl/tests/test_staging/test_staging_https.py +0 -119
  24. parsl-2024.1.1/parsl/tests/test_staging/test_staging_https_in_task.py +0 -34
  25. {parsl-2024.1.1 → parsl-2024.1.15}/LICENSE +0 -0
  26. {parsl-2024.1.1 → parsl-2024.1.15}/MANIFEST.in +0 -0
  27. {parsl-2024.1.1 → parsl-2024.1.15}/README.rst +0 -0
  28. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/__init__.py +0 -0
  29. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/app/__init__.py +0 -0
  30. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/app/app.py +0 -0
  31. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/app/bash.py +0 -0
  32. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/app/errors.py +0 -0
  33. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/app/futures.py +0 -0
  34. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/app/python.py +0 -0
  35. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/benchmark/__init__.py +0 -0
  36. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/benchmark/perf.py +0 -0
  37. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/__init__.py +0 -0
  38. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/base.py +0 -0
  39. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/errors.py +0 -0
  40. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/local/__init__.py +0 -0
  41. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/local/local.py +0 -0
  42. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/oauth_ssh/__init__.py +0 -0
  43. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/oauth_ssh/oauth_ssh.py +0 -0
  44. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/ssh/__init__.py +0 -0
  45. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/ssh/ssh.py +0 -0
  46. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/ssh_il/__init__.py +0 -0
  47. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/channels/ssh_il/ssh_il.py +0 -0
  48. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/concurrent/__init__.py +0 -0
  49. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/config.py +0 -0
  50. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/ASPIRE1.py +0 -0
  51. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/Azure.py +0 -0
  52. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/__init__.py +0 -0
  53. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/ad_hoc.py +0 -0
  54. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/bluewaters.py +0 -0
  55. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/bridges.py +0 -0
  56. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/cc_in2p3.py +0 -0
  57. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/comet.py +0 -0
  58. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/cooley.py +0 -0
  59. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/ec2.py +0 -0
  60. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/frontera.py +0 -0
  61. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/htex_local.py +0 -0
  62. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/illinoiscluster.py +0 -0
  63. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/kubernetes.py +0 -0
  64. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/local_threads.py +0 -0
  65. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/midway.py +0 -0
  66. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/osg.py +0 -0
  67. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/polaris.py +0 -0
  68. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/stampede2.py +0 -0
  69. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/summit.py +0 -0
  70. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/theta.py +0 -0
  71. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/toss3_llnl.py +0 -0
  72. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/vineex_local.py +0 -0
  73. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/configs/wqex_local.py +0 -0
  74. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/data_provider/__init__.py +0 -0
  75. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/data_provider/data_manager.py +0 -0
  76. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/data_provider/file_noop.py +0 -0
  77. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/data_provider/files.py +0 -0
  78. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/data_provider/ftp.py +0 -0
  79. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/data_provider/globus.py +0 -0
  80. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/data_provider/http.py +0 -0
  81. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/data_provider/rsync.py +0 -0
  82. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/data_provider/staging.py +0 -0
  83. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/dataflow/__init__.py +0 -0
  84. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/dataflow/errors.py +0 -0
  85. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/dataflow/futures.py +0 -0
  86. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/dataflow/memoization.py +0 -0
  87. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/dataflow/rundirs.py +0 -0
  88. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/dataflow/states.py +0 -0
  89. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/dataflow/taskrecord.py +0 -0
  90. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/errors.py +0 -0
  91. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/__init__.py +0 -0
  92. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/base.py +0 -0
  93. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/errors.py +0 -0
  94. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/flux/__init__.py +0 -0
  95. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/flux/execute_parsl_task.py +0 -0
  96. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/flux/executor.py +0 -0
  97. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/flux/flux_instance_manager.py +0 -0
  98. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/high_throughput/__init__.py +0 -0
  99. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/high_throughput/errors.py +0 -0
  100. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/high_throughput/interchange.py +0 -0
  101. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/high_throughput/manager_record.py +0 -0
  102. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/high_throughput/monitoring_info.py +0 -0
  103. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/high_throughput/probe.py +0 -0
  104. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/high_throughput/process_worker_pool.py +0 -0
  105. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/high_throughput/zmq_pipes.py +0 -0
  106. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/radical/__init__.py +0 -0
  107. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/radical/executor.py +0 -0
  108. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/radical/rpex_master.py +0 -0
  109. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/radical/rpex_resources.py +0 -0
  110. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/radical/rpex_worker.py +0 -0
  111. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/status_handling.py +0 -0
  112. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/taskvine/__init__.py +0 -0
  113. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/taskvine/errors.py +0 -0
  114. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/taskvine/exec_parsl_function.py +0 -0
  115. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/taskvine/executor.py +0 -0
  116. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/taskvine/factory.py +0 -0
  117. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/taskvine/factory_config.py +0 -0
  118. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/taskvine/manager.py +0 -0
  119. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/taskvine/manager_config.py +0 -0
  120. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/taskvine/utils.py +0 -0
  121. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/threads.py +0 -0
  122. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/workqueue/__init__.py +0 -0
  123. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/workqueue/errors.py +0 -0
  124. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/workqueue/exec_parsl_function.py +0 -0
  125. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/workqueue/parsl_coprocess.py +0 -0
  126. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/executors/workqueue/parsl_coprocess_stub.py +0 -0
  127. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/jobs/__init__.py +0 -0
  128. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/jobs/error_handlers.py +0 -0
  129. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/jobs/errors.py +0 -0
  130. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/jobs/states.py +0 -0
  131. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/jobs/strategy.py +0 -0
  132. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/launchers/__init__.py +0 -0
  133. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/launchers/base.py +0 -0
  134. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/launchers/errors.py +0 -0
  135. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/launchers/launchers.py +0 -0
  136. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/log_utils.py +0 -0
  137. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/__init__.py +0 -0
  138. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/db_manager.py +0 -0
  139. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/message_type.py +0 -0
  140. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/monitoring.py +0 -0
  141. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/queries/__init__.py +0 -0
  142. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/queries/pandas.py +0 -0
  143. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/radios.py +0 -0
  144. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/remote.py +0 -0
  145. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/types.py +0 -0
  146. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/__init__.py +0 -0
  147. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/app.py +0 -0
  148. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/models.py +0 -0
  149. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/plots/__init__.py +0 -0
  150. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/plots/default/__init__.py +0 -0
  151. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/plots/default/task_plots.py +0 -0
  152. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/plots/default/workflow_plots.py +0 -0
  153. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +0 -0
  154. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/static/parsl-logo-white.png +0 -0
  155. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/static/parsl-monitor.css +0 -0
  156. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/templates/app.html +0 -0
  157. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/templates/dag.html +0 -0
  158. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/templates/error.html +0 -0
  159. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/templates/layout.html +0 -0
  160. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/templates/resource_usage.html +0 -0
  161. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/templates/task.html +0 -0
  162. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/templates/workflow.html +0 -0
  163. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/templates/workflows_summary.html +0 -0
  164. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/utils.py +0 -0
  165. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/version.py +0 -0
  166. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/monitoring/visualization/views.py +0 -0
  167. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/multiprocessing.py +0 -0
  168. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/process_loggers.py +0 -0
  169. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/__init__.py +0 -0
  170. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/ad_hoc/__init__.py +0 -0
  171. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/ad_hoc/ad_hoc.py +0 -0
  172. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/aws/__init__.py +0 -0
  173. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/aws/aws.py +0 -0
  174. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/aws/template.py +0 -0
  175. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/azure/__init__.py +0 -0
  176. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/azure/azure.py +0 -0
  177. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/azure/template.py +0 -0
  178. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/base.py +0 -0
  179. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/cluster_provider.py +0 -0
  180. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/cobalt/__init__.py +0 -0
  181. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/cobalt/cobalt.py +0 -0
  182. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/cobalt/template.py +0 -0
  183. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/condor/__init__.py +0 -0
  184. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/condor/condor.py +0 -0
  185. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/condor/template.py +0 -0
  186. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/googlecloud/__init__.py +0 -0
  187. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/googlecloud/googlecloud.py +0 -0
  188. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/grid_engine/__init__.py +0 -0
  189. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/grid_engine/grid_engine.py +0 -0
  190. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/grid_engine/template.py +0 -0
  191. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/kubernetes/__init__.py +0 -0
  192. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/kubernetes/kube.py +0 -0
  193. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/kubernetes/template.py +0 -0
  194. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/local/__init__.py +0 -0
  195. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/local/local.py +0 -0
  196. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/lsf/__init__.py +0 -0
  197. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/lsf/lsf.py +0 -0
  198. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/lsf/template.py +0 -0
  199. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/pbspro/__init__.py +0 -0
  200. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/pbspro/pbspro.py +0 -0
  201. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/pbspro/template.py +0 -0
  202. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/slurm/__init__.py +0 -0
  203. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/slurm/slurm.py +0 -0
  204. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/slurm/template.py +0 -0
  205. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/torque/__init__.py +0 -0
  206. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/torque/template.py +0 -0
  207. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/providers/torque/torque.py +0 -0
  208. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/py.typed +0 -0
  209. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/serialize/__init__.py +0 -0
  210. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/serialize/base.py +0 -0
  211. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/serialize/concretes.py +0 -0
  212. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/serialize/errors.py +0 -0
  213. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/serialize/facade.py +0 -0
  214. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/serialize/proxystore.py +0 -0
  215. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/__init__.py +0 -0
  216. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/callables_helper.py +0 -0
  217. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/__init__.py +0 -0
  218. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/ad_hoc_cluster_htex.py +0 -0
  219. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/azure_single_node.py +0 -0
  220. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/bluewaters.py +0 -0
  221. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/bridges.py +0 -0
  222. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/cc_in2p3.py +0 -0
  223. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/comet.py +0 -0
  224. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/cooley_htex.py +0 -0
  225. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/ec2_single_node.py +0 -0
  226. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/ec2_spot.py +0 -0
  227. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/frontera.py +0 -0
  228. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/htex_ad_hoc_cluster.py +0 -0
  229. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/htex_local.py +0 -0
  230. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/htex_local_alternate.py +0 -0
  231. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/htex_local_intask_staging.py +0 -0
  232. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/htex_local_rsync_staging.py +0 -0
  233. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_adhoc.py +0 -0
  234. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_radical.py +0 -0
  235. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_radical_mpi.py +0 -0
  236. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_threads.py +0 -0
  237. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_threads_checkpoint.py +0 -0
  238. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_threads_checkpoint_dfk_exit.py +0 -0
  239. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_threads_checkpoint_periodic.py +0 -0
  240. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_threads_checkpoint_task_exit.py +0 -0
  241. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_threads_ftp_in_task.py +0 -0
  242. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_threads_globus.py +0 -0
  243. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_threads_http_in_task.py +0 -0
  244. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_threads_monitoring.py +0 -0
  245. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/local_threads_no_cache.py +0 -0
  246. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/midway.py +0 -0
  247. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/nscc_singapore.py +0 -0
  248. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/osg_htex.py +0 -0
  249. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/petrelkube.py +0 -0
  250. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/summit.py +0 -0
  251. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/swan_htex.py +0 -0
  252. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/taskvine_ex.py +0 -0
  253. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/theta.py +0 -0
  254. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/user_opts.py +0 -0
  255. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/configs/workqueue_ex.py +0 -0
  256. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/__init__.py +0 -0
  257. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/latency.py +0 -0
  258. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_apps/__init__.py +0 -0
  259. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_channels/__init__.py +0 -0
  260. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_channels/test_channels.py +0 -0
  261. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_channels/test_local_channel.py +0 -0
  262. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_channels/test_scp_1.py +0 -0
  263. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_channels/test_ssh_1.py +0 -0
  264. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_channels/test_ssh_errors.py +0 -0
  265. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -0
  266. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -0
  267. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_parsl_load_default_config.py +0 -0
  268. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_stress/__init__.py +0 -0
  269. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_stress/test_python_simple.py +0 -0
  270. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/integration/test_stress/test_python_threads.py +0 -0
  271. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/__init__.py +0 -0
  272. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/htex_local.py +0 -0
  273. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -0
  274. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/test_basic.py +0 -0
  275. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +0 -0
  276. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/test_log_filter.py +0 -0
  277. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/test_memory_limits.py +0 -0
  278. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/test_oauth_ssh.py +0 -0
  279. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/test_regression_220.py +0 -0
  280. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/test_udp_simple.py +0 -0
  281. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/manual_tests/test_worker_count.py +0 -0
  282. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/scaling_tests/__init__.py +0 -0
  283. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/scaling_tests/htex_local.py +0 -0
  284. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/scaling_tests/local_threads.py +0 -0
  285. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/scaling_tests/test_scale.py +0 -0
  286. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/scaling_tests/vineex_condor.py +0 -0
  287. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/scaling_tests/vineex_local.py +0 -0
  288. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/scaling_tests/wqex_condor.py +0 -0
  289. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/scaling_tests/wqex_local.py +0 -0
  290. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/site_tests/__init__.py +0 -0
  291. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/site_tests/site_config_selector.py +0 -0
  292. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/site_tests/test_provider.py +0 -0
  293. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/site_tests/test_site.py +0 -0
  294. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/sites/__init__.py +0 -0
  295. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/sites/test_affinity.py +0 -0
  296. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/sites/test_concurrent.py +0 -0
  297. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/sites/test_dynamic_executor.py +0 -0
  298. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/sites/test_ec2.py +0 -0
  299. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/sites/test_launchers.py +0 -0
  300. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/sites/test_local_adhoc.py +0 -0
  301. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/sites/test_mpi/__init__.py +0 -0
  302. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/sites/test_worker_info.py +0 -0
  303. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_aalst_patterns.py +0 -0
  304. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/__init__.py +0 -0
  305. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_apptimeout.py +0 -0
  306. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_basic.py +0 -0
  307. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_error_codes.py +0 -0
  308. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_keyword_overlaps.py +0 -0
  309. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_kwarg_storage.py +0 -0
  310. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_memoize.py +0 -0
  311. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_memoize_ignore_args.py +0 -0
  312. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +0 -0
  313. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_multiline.py +0 -0
  314. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_pipeline.py +0 -0
  315. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_bash_apps/test_stdout.py +0 -0
  316. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_callables.py +0 -0
  317. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_channels/__init__.py +0 -0
  318. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_channels/test_large_output.py +0 -0
  319. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_checkpointing/__init__.py +0 -0
  320. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_checkpointing/test_periodic.py +0 -0
  321. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_checkpointing/test_python_checkpoint_3.py +0 -0
  322. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_checkpointing/test_regression_232.py +0 -0
  323. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_checkpointing/test_regression_233.py +0 -0
  324. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_checkpointing/test_regression_239.py +0 -0
  325. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_checkpointing/test_task_exit.py +0 -0
  326. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_data/__init__.py +0 -0
  327. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_data/test_file.py +0 -0
  328. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_data/test_file_apps.py +0 -0
  329. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_data/test_file_staging.py +0 -0
  330. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_data/test_output_chain_filenames.py +0 -0
  331. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_docs/__init__.py +0 -0
  332. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_docs/test_from_slides.py +0 -0
  333. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_docs/test_kwargs.py +0 -0
  334. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_docs/test_tutorial_1.py +0 -0
  335. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_docs/test_workflow1.py +0 -0
  336. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_docs/test_workflow2.py +0 -0
  337. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_docs/test_workflow4.py +0 -0
  338. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/__init__.py +0 -0
  339. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_fail.py +0 -0
  340. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_htex_basic.py +0 -0
  341. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_htex_manager_failure.py +0 -0
  342. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_htex_missing_worker.py +0 -0
  343. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_htex_worker_failure.py +0 -0
  344. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_python_walltime.py +0 -0
  345. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_rand_fail.py +0 -0
  346. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_resource_spec.py +0 -0
  347. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_retries.py +0 -0
  348. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_retry_handler.py +0 -0
  349. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_retry_handler_failure.py +0 -0
  350. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_serialization_fail.py +0 -0
  351. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_error_handling/test_wrap_with_logs.py +0 -0
  352. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_flowcontrol/__init__.py +0 -0
  353. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_flux.py +0 -0
  354. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_htex/__init__.py +0 -0
  355. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_htex/test_htex_zmq_binding.py +0 -0
  356. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_monitoring/__init__.py +0 -0
  357. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_monitoring/test_basic.py +0 -0
  358. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_monitoring/test_db_locks.py +0 -0
  359. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_monitoring/test_fuzz_zmq.py +0 -0
  360. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_monitoring/test_memoization_representation.py +0 -0
  361. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_monitoring/test_viz_colouring.py +0 -0
  362. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_providers/__init__.py +0 -0
  363. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_providers/test_local_provider.py +0 -0
  364. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_providers/test_slurm_instantiate.py +0 -0
  365. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/__init__.py +0 -0
  366. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_arg_input_types.py +0 -0
  367. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_basic.py +0 -0
  368. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_dep_standard_futures.py +0 -0
  369. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_dependencies.py +0 -0
  370. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_depfail_propagation.py +0 -0
  371. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_fail.py +0 -0
  372. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_fibonacci_iterative.py +0 -0
  373. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_fibonacci_recursive.py +0 -0
  374. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_futures.py +0 -0
  375. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_garbage_collect.py +0 -0
  376. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_import_fail.py +0 -0
  377. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_join.py +0 -0
  378. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_lifted.py +0 -0
  379. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_mapred.py +0 -0
  380. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_memoize_1.py +0 -0
  381. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_memoize_2.py +0 -0
  382. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_memoize_4.py +0 -0
  383. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +0 -0
  384. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_memoize_ignore_args.py +0 -0
  385. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_memoize_joinapp.py +0 -0
  386. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_outputs.py +0 -0
  387. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_overview.py +0 -0
  388. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_pipeline.py +0 -0
  389. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_simple.py +0 -0
  390. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_timeout.py +0 -0
  391. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_python_apps/test_type5.py +0 -0
  392. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_radical/__init__.py +0 -0
  393. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/__init__.py +0 -0
  394. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/test_1480.py +0 -0
  395. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/test_1606_wait_for_current_tasks.py +0 -0
  396. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/test_1653.py +0 -0
  397. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/test_221.py +0 -0
  398. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/test_226.py +0 -0
  399. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/test_2652.py +0 -0
  400. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/test_69a.py +0 -0
  401. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/test_854.py +0 -0
  402. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/test_97_parallelism_0.py +0 -0
  403. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_regression/test_98.py +0 -0
  404. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_scaling/__init__.py +0 -0
  405. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_scaling/test_block_error_handler.py +0 -0
  406. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_scaling/test_regression_1621.py +0 -0
  407. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_scaling/test_scale_down.py +0 -0
  408. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_serialization/__init__.py +0 -0
  409. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_serialization/test_2555_caching_deserializer.py +0 -0
  410. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_serialization/test_basic.py +0 -0
  411. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_serialization/test_proxystore_configured.py +0 -0
  412. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_serialization/test_proxystore_impl.py +0 -0
  413. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_staging/staging_provider.py +0 -0
  414. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_staging/test_1316.py +0 -0
  415. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_staging/test_docs_1.py +0 -0
  416. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_staging/test_docs_2.py +0 -0
  417. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_staging/test_staging_ftp.py +0 -0
  418. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_staging/test_staging_ftp_in_task.py +0 -0
  419. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_staging/test_staging_globus.py +0 -0
  420. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_summary.py +0 -0
  421. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_thread_parallelism.py +0 -0
  422. {parsl-2024.1.1/parsl/tests/test_staging → parsl-2024.1.15/parsl/tests/test_threads}/__init__.py +0 -0
  423. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_threads/test_configs.py +0 -0
  424. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/test_threads/test_lazy_errors.py +0 -0
  425. {parsl-2024.1.1/parsl/tests/test_threads → parsl-2024.1.15/parsl/tests/test_utils}/__init__.py +0 -0
  426. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/tests/utils.py +0 -0
  427. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/usage_tracking/__init__.py +0 -0
  428. {parsl-2024.1.1 → parsl-2024.1.15}/parsl/usage_tracking/usage.py +0 -0
  429. {parsl-2024.1.1 → parsl-2024.1.15}/parsl.egg-info/dependency_links.txt +0 -0
  430. {parsl-2024.1.1 → parsl-2024.1.15}/parsl.egg-info/entry_points.txt +0 -0
  431. {parsl-2024.1.1 → parsl-2024.1.15}/parsl.egg-info/requires.txt +0 -0
  432. {parsl-2024.1.1 → parsl-2024.1.15}/parsl.egg-info/top_level.txt +0 -0
  433. {parsl-2024.1.1 → parsl-2024.1.15}/requirements.txt +0 -0
  434. {parsl-2024.1.1 → parsl-2024.1.15}/setup.cfg +0 -0
  435. {parsl-2024.1.1 → parsl-2024.1.15}/setup.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2024.1.1
3
+ Version: 2024.1.15
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.01.01.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2024.01.15.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -72,8 +72,9 @@ def address_by_hostname() -> str:
72
72
  """
73
73
  logger.debug("Finding address by using local hostname")
74
74
  addr = platform.node()
75
- logger.debug("Address found: {}".format(addr))
76
- return addr
75
+ ip_addr = socket.gethostbyname(addr)
76
+ logger.debug("Address found: {}".format(ip_addr))
77
+ return ip_addr
77
78
 
78
79
 
79
80
  @typeguard.typechecked
@@ -177,7 +177,9 @@ class DataFlowKernel:
177
177
 
178
178
  # this must be set before executors are added since add_executors calls
179
179
  # job_status_poller.add_executors.
180
- self.job_status_poller = JobStatusPoller(self)
180
+ self.job_status_poller = JobStatusPoller(strategy=self.config.strategy,
181
+ max_idletime=self.config.max_idletime,
182
+ dfk=self)
181
183
 
182
184
  self.executors: Dict[str, ParslExecutor] = {}
183
185
 
@@ -526,9 +528,7 @@ class DataFlowKernel:
526
528
  # or do nothing?
527
529
  if self.checkpoint_mode == 'task_exit':
528
530
  self.checkpoint(tasks=[task_record])
529
- elif self.checkpoint_mode == 'manual' or \
530
- self.checkpoint_mode == 'periodic' or \
531
- self.checkpoint_mode == 'dfk_exit':
531
+ elif self.checkpoint_mode in ('manual', 'periodic', 'dfk_exit'):
532
532
  with self.checkpoint_lock:
533
533
  self.checkpointable_tasks.append(task_record)
534
534
  elif self.checkpoint_mode is None:
@@ -1298,11 +1298,7 @@ class DataFlowKernel:
1298
1298
  hashsum = task_record['hashsum']
1299
1299
  if not hashsum:
1300
1300
  continue
1301
- t = {'hash': hashsum,
1302
- 'exception': None,
1303
- 'result': None}
1304
-
1305
- t['result'] = app_fu.result()
1301
+ t = {'hash': hashsum, 'exception': None, 'result': app_fu.result()}
1306
1302
 
1307
1303
  # We are using pickle here since pickle dumps to a file in 'ab'
1308
1304
  # mode behave like a incremental log.
@@ -205,7 +205,6 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin):
205
205
 
206
206
  BlockProviderExecutor.__init__(self, provider=provider, block_error_handler=block_error_handler)
207
207
  self.label = label
208
- self.launch_cmd = launch_cmd
209
208
  self.worker_debug = worker_debug
210
209
  self.storage_access = storage_access
211
210
  self.working_dir = working_dir
@@ -259,21 +258,25 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin):
259
258
  self.cpu_affinity = cpu_affinity
260
259
 
261
260
  if not launch_cmd:
262
- self.launch_cmd = ("process_worker_pool.py {debug} {max_workers} "
263
- "-a {addresses} "
264
- "-p {prefetch_capacity} "
265
- "-c {cores_per_worker} "
266
- "-m {mem_per_worker} "
267
- "--poll {poll_period} "
268
- "--task_port={task_port} "
269
- "--result_port={result_port} "
270
- "--logdir={logdir} "
271
- "--block_id={{block_id}} "
272
- "--hb_period={heartbeat_period} "
273
- "{address_probe_timeout_string} "
274
- "--hb_threshold={heartbeat_threshold} "
275
- "--cpu-affinity {cpu_affinity} "
276
- "--available-accelerators {accelerators}")
261
+ launch_cmd = (
262
+ "process_worker_pool.py {debug} {max_workers} "
263
+ "-a {addresses} "
264
+ "-p {prefetch_capacity} "
265
+ "-c {cores_per_worker} "
266
+ "-m {mem_per_worker} "
267
+ "--poll {poll_period} "
268
+ "--task_port={task_port} "
269
+ "--result_port={result_port} "
270
+ "--logdir={logdir} "
271
+ "--block_id={{block_id}} "
272
+ "--hb_period={heartbeat_period} "
273
+ "{address_probe_timeout_string} "
274
+ "--hb_threshold={heartbeat_threshold} "
275
+ "--cpu-affinity {cpu_affinity} "
276
+ "--available-accelerators {accelerators}"
277
+ )
278
+
279
+ self.launch_cmd = launch_cmd
277
280
 
278
281
  radio_mode = "htex"
279
282
 
@@ -849,7 +849,7 @@ def _work_queue_submit_wait(*,
849
849
  break
850
850
 
851
851
  # Submit tasks
852
- while task_queue.qsize() > 0 and not should_stop.value:
852
+ while task_queue.qsize() > 0 or q.empty() and not should_stop.value:
853
853
  # Obtain task from task_queue
854
854
  try:
855
855
  task = task_queue.get(timeout=1)
@@ -2,7 +2,7 @@ import logging
2
2
  import parsl
3
3
  import time
4
4
  import zmq
5
- from typing import Dict, List, Sequence
5
+ from typing import Dict, List, Sequence, Optional
6
6
 
7
7
  from parsl.jobs.states import JobStatus, JobState
8
8
  from parsl.jobs.strategy import Strategy
@@ -17,7 +17,7 @@ logger = logging.getLogger(__name__)
17
17
 
18
18
 
19
19
  class PollItem:
20
- def __init__(self, executor: BlockProviderExecutor, dfk: "parsl.dataflow.dflow.DataFlowKernel"):
20
+ def __init__(self, executor: BlockProviderExecutor, dfk: Optional["parsl.dataflow.dflow.DataFlowKernel"] = None):
21
21
  self._executor = executor
22
22
  self._dfk = dfk
23
23
  self._interval = executor.status_polling_interval
@@ -26,7 +26,7 @@ class PollItem:
26
26
 
27
27
  # Create a ZMQ channel to send poll status to monitoring
28
28
  self.monitoring_enabled = False
29
- if self._dfk.monitoring is not None:
29
+ if self._dfk and self._dfk.monitoring is not None:
30
30
  self.monitoring_enabled = True
31
31
  hub_address = self._dfk.hub_address
32
32
  hub_port = self._dfk.hub_interchange_port
@@ -100,11 +100,12 @@ class PollItem:
100
100
 
101
101
 
102
102
  class JobStatusPoller(Timer):
103
- def __init__(self, dfk: "parsl.dataflow.dflow.DataFlowKernel") -> None:
103
+ def __init__(self, strategy: Optional[str] = None, max_idletime: float = 0.0,
104
+ dfk: Optional["parsl.dataflow.dflow.DataFlowKernel"] = None) -> None:
104
105
  self._poll_items = [] # type: List[PollItem]
105
106
  self.dfk = dfk
106
- self._strategy = Strategy(strategy=dfk.config.strategy,
107
- max_idletime=dfk.config.max_idletime)
107
+ self._strategy = Strategy(strategy=strategy,
108
+ max_idletime=max_idletime)
108
109
  super().__init__(self.poll, interval=5, name="JobStatusPoller")
109
110
 
110
111
  def poll(self) -> None:
@@ -1,5 +1,7 @@
1
1
  from parsl.errors import ParslError
2
2
 
3
+ import warnings
4
+
3
5
 
4
6
  class ExecutionProviderException(ParslError):
5
7
  """ Base class for all exceptions
@@ -46,18 +48,23 @@ class ScriptPathError(ExecutionProviderException):
46
48
 
47
49
 
48
50
  class SubmitException(ExecutionProviderException):
49
- '''Raised by the submit() method of a provider if there is an error in launching a task.
51
+ '''Raised by the submit() method of a provider if there is an error in launching a job.
50
52
  '''
51
53
 
52
- def __init__(self, task_name, message, stdout=None, stderr=None):
53
- self.task_name = task_name
54
+ def __init__(self, job_name, message, stdout=None, stderr=None):
55
+ self.job_name = job_name
54
56
  self.message = message
55
57
  self.stdout = stdout
56
58
  self.stderr = stderr
57
59
 
60
+ @property
61
+ def task_name(self) -> str:
62
+ warnings.warn("task_name is deprecated; use .job_name instead. This will be removed after 2024-06.", DeprecationWarning)
63
+ return self.job_name
64
+
58
65
  def __str__(self):
59
66
  # TODO: make this more user-friendly
60
- return "Cannot launch task {0}: {1}; stdout={2}, stderr={3}".format(self.task_name,
61
- self.message,
62
- self.stdout,
63
- self.stderr)
67
+ return "Cannot launch job {0}: {1}; stdout={2}, stderr={3}".format(self.job_name,
68
+ self.message,
69
+ self.stdout,
70
+ self.stderr)
@@ -3,6 +3,8 @@ import itertools
3
3
  import logging
4
4
  import os
5
5
  import pathlib
6
+ import re
7
+ import shutil
6
8
  import time
7
9
  import types
8
10
  import signal
@@ -20,6 +22,7 @@ import _pytest.runner as runner
20
22
 
21
23
  import parsl
22
24
  from parsl.dataflow.dflow import DataFlowKernelLoader
25
+ from parsl.utils import RepresentationMixin
23
26
 
24
27
  logger = logging.getLogger(__name__)
25
28
 
@@ -44,17 +47,46 @@ def pytest_sessionstart(session):
44
47
 
45
48
 
46
49
  @pytest.fixture(scope="session")
47
- def tmpd_cwd_session():
48
- n = datetime.now().strftime('%Y%m%d.%H%I%S')
49
- with tempfile.TemporaryDirectory(dir=os.getcwd(), prefix=f".pytest-{n}-") as tmpd:
50
- yield pathlib.Path(tmpd)
50
+ def tmpd_cwd_session(pytestconfig):
51
+ config = re.sub(r"[^A-z0-9_-]+", "_", pytestconfig.getoption('config')[0])
52
+ cwd = pathlib.Path(os.getcwd())
53
+ pytest_dir = cwd / ".pytest"
54
+ pytest_dir.mkdir(mode=0o700, parents=True, exist_ok=True)
55
+
56
+ test_dir_prefix = "parsltest-"
57
+ link = pytest_dir / f"{test_dir_prefix}current"
58
+ link.unlink(missing_ok=True)
59
+ n = datetime.now().strftime('%Y%m%d.%H%M%S')
60
+ tmpd = tempfile.mkdtemp(dir=pytest_dir, prefix=f"{test_dir_prefix}{n}-{config}-")
61
+ tmpd = pathlib.Path(tmpd)
62
+ link.symlink_to(tmpd.name)
63
+ yield link
64
+
65
+ try:
66
+ preserve = int(os.getenv("PARSL_TEST_PRESERVE_NUM_RUNS", "3"))
67
+ except Exception:
68
+ preserve = 3
69
+
70
+ test_runs = sorted(
71
+ d for d in pytest_dir.glob(f"{test_dir_prefix}*")
72
+ if d.is_dir() and not d.is_symlink()
73
+ )
74
+ for run_to_remove in test_runs[:-preserve]:
75
+ run_to_remove.chmod(0o700)
76
+ for root, subdirnames, fnames in os.walk(run_to_remove):
77
+ rpath = pathlib.Path(root)
78
+ for d in subdirnames:
79
+ (rpath / d).lchmod(0o700)
80
+ for f in fnames:
81
+ (rpath / f).lchmod(0o600)
82
+ shutil.rmtree(run_to_remove)
51
83
 
52
84
 
53
85
  @pytest.fixture
54
86
  def tmpd_cwd(tmpd_cwd_session, request):
55
87
  prefix = f"{request.node.name}-"
56
- with tempfile.TemporaryDirectory(dir=tmpd_cwd_session, prefix=prefix) as tmpd:
57
- yield pathlib.Path(tmpd)
88
+ tmpd = tempfile.mkdtemp(dir=tmpd_cwd_session, prefix=prefix)
89
+ yield pathlib.Path(tmpd)
58
90
 
59
91
 
60
92
  def pytest_addoption(parser):
@@ -118,7 +150,7 @@ def pytest_configure(config):
118
150
 
119
151
 
120
152
  @pytest.fixture(autouse=True, scope='session')
121
- def load_dfk_session(request, pytestconfig):
153
+ def load_dfk_session(request, pytestconfig, tmpd_cwd_session):
122
154
  """Load a dfk around entire test suite, except in local mode.
123
155
 
124
156
  The special path `local` indicates that configuration will not come
@@ -126,6 +158,8 @@ def load_dfk_session(request, pytestconfig):
126
158
  load_dfk_local_module for module-level configuration management.
127
159
  """
128
160
 
161
+ RepresentationMixin._validate_repr = True
162
+
129
163
  config = pytestconfig.getoption('config')[0]
130
164
 
131
165
  if config != 'local':
@@ -137,12 +171,19 @@ def load_dfk_session(request, pytestconfig):
137
171
  raise RuntimeError("DFK didn't start as None - there was a DFK from somewhere already")
138
172
 
139
173
  if hasattr(module, 'config'):
140
- dfk = parsl.load(module.config)
174
+ parsl_conf = module.config
141
175
  elif hasattr(module, 'fresh_config'):
142
- dfk = parsl.load(module.fresh_config())
176
+ parsl_conf = module.fresh_config()
143
177
  else:
144
178
  raise RuntimeError("Config module does not define config or fresh_config")
145
179
 
180
+ if parsl_conf.run_dir == "runinfo": # the default
181
+ parsl_conf.run_dir = tmpd_cwd_session / parsl_conf.run_dir
182
+ dfk = parsl.load(parsl_conf)
183
+
184
+ for ex in dfk.executors.values():
185
+ ex.working_dir = tmpd_cwd_session
186
+
146
187
  yield
147
188
 
148
189
  if parsl.dfk() != dfk:
@@ -154,7 +195,7 @@ def load_dfk_session(request, pytestconfig):
154
195
 
155
196
 
156
197
  @pytest.fixture(autouse=True, scope='module')
157
- def load_dfk_local_module(request, pytestconfig):
198
+ def load_dfk_local_module(request, pytestconfig, tmpd_cwd_session):
158
199
  """Load the dfk around test modules, in local mode.
159
200
 
160
201
  If local_config is specified in the test module, it will be loaded using
@@ -165,6 +206,7 @@ def load_dfk_local_module(request, pytestconfig):
165
206
  be used to perform more interesting DFK initialisation not possible with
166
207
  local_config.
167
208
  """
209
+ RepresentationMixin._validate_repr = True
168
210
 
169
211
  config = pytestconfig.getoption('config')[0]
170
212
 
@@ -177,8 +219,15 @@ def load_dfk_local_module(request, pytestconfig):
177
219
  assert callable(local_config)
178
220
  c = local_config()
179
221
  assert isinstance(c, parsl.Config)
222
+
223
+ if c.run_dir == "runinfo": # the default
224
+ c.run_dir = tmpd_cwd_session / c.run_dir
225
+
180
226
  dfk = parsl.load(c)
181
227
 
228
+ for ex in dfk.executors.values():
229
+ ex.working_dir = tmpd_cwd_session
230
+
182
231
  if callable(local_setup):
183
232
  local_setup()
184
233
 
@@ -0,0 +1,33 @@
1
+ import os
2
+ import pytest
3
+
4
+ import parsl
5
+ from parsl import python_app
6
+ from parsl.tests.configs.local_threads import fresh_config
7
+
8
+
9
+ def local_config():
10
+ config = fresh_config()
11
+ config.checkpoint_mode = "manual"
12
+ return config
13
+
14
+
15
+ @python_app(cache=True)
16
+ def uuid_app():
17
+ import uuid
18
+ return uuid.uuid4()
19
+
20
+
21
+ @pytest.mark.local
22
+ def test_initial_checkpoint_write():
23
+ """1. Launch a few apps and write the checkpoint once a few have completed
24
+ """
25
+ uuid_app().result()
26
+
27
+ cpt_dir = parsl.dfk().checkpoint()
28
+
29
+ cptpath = cpt_dir + '/dfk.pkl'
30
+ assert os.path.exists(cptpath), f"DFK checkpoint missing: {cptpath}"
31
+
32
+ cptpath = cpt_dir + '/tasks.pkl'
33
+ assert os.path.exists(cptpath), f"Tasks checkpoint missing: {cptpath}"
@@ -0,0 +1,42 @@
1
+ import contextlib
2
+ import os
3
+ import pytest
4
+ import parsl
5
+ from parsl import python_app
6
+
7
+ from parsl.tests.configs.local_threads_checkpoint import fresh_config
8
+
9
+
10
+ @contextlib.contextmanager
11
+ def parsl_configured(run_dir, **kw):
12
+ c = fresh_config()
13
+ c.run_dir = run_dir
14
+ for config_attr, config_val in kw.items():
15
+ setattr(c, config_attr, config_val)
16
+ dfk = parsl.load(c)
17
+ for ex in dfk.executors.values():
18
+ ex.working_dir = run_dir
19
+ yield dfk
20
+
21
+ parsl.dfk().cleanup()
22
+ parsl.clear()
23
+
24
+
25
+ @python_app(cache=True)
26
+ def uuid_app():
27
+ import uuid
28
+ return uuid.uuid4()
29
+
30
+
31
+ @pytest.mark.local
32
+ def test_loading_checkpoint(tmpd_cwd):
33
+ """Load memoization table from previous checkpoint
34
+ """
35
+ with parsl_configured(tmpd_cwd, checkpoint_mode="task_exit"):
36
+ checkpoint_files = [os.path.join(parsl.dfk().run_dir, "checkpoint")]
37
+ result = uuid_app().result()
38
+
39
+ with parsl_configured(tmpd_cwd, checkpoint_files=checkpoint_files):
40
+ relaunched = uuid_app().result()
41
+
42
+ assert result == relaunched, "Expected following call to uuid_app to return cached uuid"
@@ -0,0 +1,21 @@
1
+ import pytest
2
+ import random
3
+ import string
4
+
5
+ from parsl.providers.errors import SubmitException
6
+
7
+
8
+ @pytest.mark.local
9
+ def test_submit_exception_task_name_deprecation():
10
+ """This tests the deprecation warning of task_name in SubmitException
11
+ """
12
+ j = "the_name-" + "".join(random.sample(string.ascii_lowercase, 10))
13
+
14
+ ex = SubmitException(j, "m")
15
+
16
+ # the new behaviour
17
+ assert ex.job_name == j
18
+
19
+ # the old behaviour
20
+ with pytest.deprecated_call():
21
+ assert ex.task_name == j
@@ -5,7 +5,7 @@ from parsl.tests.configs.local_radical_mpi import fresh_config as local_config
5
5
 
6
6
 
7
7
  @parsl.python_app
8
- def test_mpi_func(msg, sleep, comm=None, parsl_resource_specification={}):
8
+ def some_mpi_func(msg, sleep, comm=None, parsl_resource_specification={}):
9
9
  import time
10
10
  msg = 'hello %d/%d: %s' % (comm.rank, comm.size, msg)
11
11
  time.sleep(sleep)
@@ -17,11 +17,12 @@ apps = []
17
17
 
18
18
 
19
19
  @pytest.mark.local
20
+ @pytest.mark.radical
20
21
  def test_radical_mpi(n=7):
21
22
  # rank size should be > 1 for the
22
23
  # radical runtime system to run this function in MPI env
23
24
  for i in range(2, n):
24
25
  spec = {'ranks': i}
25
- t = test_mpi_func(msg='mpi.func.%06d' % i, sleep=1, comm=None, parsl_resource_specification=spec)
26
+ t = some_mpi_func(msg='mpi.func.%06d' % i, sleep=1, comm=None, parsl_resource_specification=spec)
26
27
  apps.append(t)
27
28
  assert [len(app.result()) for app in apps] == list(range(2, n))
@@ -0,0 +1,7 @@
1
+ def read_sort_write(in_path, out_path):
2
+ with open(in_path) as u:
3
+ strs = u.read().split()
4
+ strs.sort()
5
+ with open(out_path, 'w') as s:
6
+ for e in strs:
7
+ print(e, file=s)
@@ -20,8 +20,8 @@ logger = logging.getLogger(__name__)
20
20
 
21
21
 
22
22
  @bash_app
23
- def touch(filename, inputs=[], outputs=[]):
24
- return "touch {}".format(filename)
23
+ def touch(filename, outputs=()):
24
+ return f"touch {filename}"
25
25
 
26
26
 
27
27
  @python_app
@@ -31,52 +31,47 @@ def app_test_in(file):
31
31
  pass
32
32
 
33
33
 
34
+ @pytest.fixture
35
+ def storage_access_parsl():
36
+ def _setup_config(*args, **kwargs):
37
+ tpe = ThreadPoolExecutor(
38
+ label='local_threads',
39
+ storage_access=[NoOpTestingFileStaging(*args, **kwargs)]
40
+ )
41
+ config = Config(executors=[tpe])
42
+ parsl.load(config)
43
+
44
+ yield _setup_config
45
+
46
+ parsl.dfk().cleanup()
47
+ parsl.clear()
48
+
49
+
34
50
  @pytest.mark.local
35
- def test_regression_stage_out_does_not_stage_in():
36
- no_stageout_config = Config(
37
- executors=[
38
- ThreadPoolExecutor(
39
- label='local_threads',
40
- storage_access=[NoOpTestingFileStaging(allow_stage_in=False)]
41
- )
42
- ]
43
- )
44
-
45
- parsl.load(no_stageout_config)
51
+ def test_regression_stage_out_does_not_stage_in(storage_access_parsl, tmpd_cwd):
52
+ storage_access_parsl(allow_stage_in=False)
46
53
 
47
54
  # Test that the helper app runs with no staging
48
- touch("test.1", outputs=[]).result()
55
+ touch(str(tmpd_cwd / "test.1"), outputs=[]).result()
49
56
 
50
- # Test with stage-out, checking that provider stage in is never
51
- # invoked. If stage-in is invoked, the the NoOpTestingFileStaging
57
+ # Test with stage-out, checking that provider stage-in is never
58
+ # invoked. If stage-in is invoked, then the NoOpTestingFileStaging
52
59
  # provider will raise an exception, which should propagate to
53
60
  # .result() here.
54
- touch("test.2", outputs=[File("test.2")]).result()
61
+ fpath = tmpd_cwd / "test.2"
62
+ touch(str(fpath), outputs=[File(fpath)]).result()
55
63
 
56
64
  # Test that stage-in exceptions propagate out to user code.
57
65
  with pytest.raises(NoOpError):
58
66
  touch("test.3", inputs=[File("test.3")]).result()
59
67
 
60
- parsl.dfk().cleanup()
61
- parsl.clear()
62
-
63
68
 
64
69
  @pytest.mark.local
65
- def test_regression_stage_in_does_not_stage_out():
66
- no_stageout_config = Config(
67
- executors=[
68
- ThreadPoolExecutor(
69
- label='local_threads',
70
- storage_access=[NoOpTestingFileStaging(allow_stage_out=False)]
71
- )
72
- ],
73
- )
74
-
75
- parsl.load(no_stageout_config)
76
-
77
- f = open("test.4", "a")
78
- f.write("test")
79
- f.close()
70
+ def test_regression_stage_in_does_not_stage_out(storage_access_parsl, tmpd_cwd):
71
+ storage_access_parsl(allow_stage_out=False)
72
+
73
+ fpath = tmpd_cwd / "test.4"
74
+ fpath.write_text("test")
80
75
 
81
76
  # Test that stage in does not invoke stage out. If stage out is
82
77
  # attempted, then the NoOpTestingFileStaging provider will raise
@@ -86,6 +81,3 @@ def test_regression_stage_in_does_not_stage_out():
86
81
  # Test that stage out exceptions propagate to user code.
87
82
  with pytest.raises(NoOpError):
88
83
  touch("test.5", outputs=[File("test.5")]).result()
89
-
90
- parsl.dfk().cleanup()
91
- parsl.clear()