parsl 2025.9.15__tar.gz → 2025.9.22__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.

Potentially problematic release.


This version of parsl might be problematic. Click here for more details.

Files changed (469) hide show
  1. {parsl-2025.9.15/parsl.egg-info → parsl-2025.9.22}/PKG-INFO +2 -2
  2. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/execute_task.py +2 -8
  3. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/flux/executor.py +3 -5
  4. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/executor.py +2 -4
  5. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/interchange.py +4 -3
  6. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/mpi_resource_management.py +1 -7
  7. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/process_worker_pool.py +5 -1
  8. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/radical/executor.py +2 -6
  9. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/radical/rpex_worker.py +2 -2
  10. parsl-2025.9.22/parsl/serialize/__init__.py +13 -0
  11. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/serialize/facade.py +0 -32
  12. parsl-2025.9.22/parsl/tests/test_execute_task.py +20 -0
  13. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_priority_queue.py +7 -2
  14. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_mpi_apps/test_mpi_scheduler.py +18 -43
  15. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/version.py +1 -1
  16. {parsl-2025.9.15 → parsl-2025.9.22/parsl.egg-info}/PKG-INFO +2 -2
  17. {parsl-2025.9.15 → parsl-2025.9.22}/parsl.egg-info/SOURCES.txt +0 -1
  18. parsl-2025.9.15/parsl/serialize/__init__.py +0 -16
  19. parsl-2025.9.15/parsl/tests/test_execute_task.py +0 -29
  20. parsl-2025.9.15/parsl/tests/test_serialization/test_pack_resource_spec.py +0 -23
  21. {parsl-2025.9.15 → parsl-2025.9.22}/LICENSE +0 -0
  22. {parsl-2025.9.15 → parsl-2025.9.22}/MANIFEST.in +0 -0
  23. {parsl-2025.9.15 → parsl-2025.9.22}/README.rst +0 -0
  24. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/__init__.py +0 -0
  25. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/addresses.py +0 -0
  26. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/app/__init__.py +0 -0
  27. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/app/app.py +0 -0
  28. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/app/bash.py +0 -0
  29. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/app/errors.py +0 -0
  30. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/app/futures.py +0 -0
  31. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/app/python.py +0 -0
  32. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/benchmark/__init__.py +0 -0
  33. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/benchmark/perf.py +0 -0
  34. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/concurrent/__init__.py +0 -0
  35. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/config.py +0 -0
  36. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/ASPIRE1.py +0 -0
  37. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/Azure.py +0 -0
  38. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/__init__.py +0 -0
  39. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/anvil.py +0 -0
  40. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/bridges.py +0 -0
  41. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/cc_in2p3.py +0 -0
  42. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/delta.py +0 -0
  43. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/ec2.py +0 -0
  44. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/expanse.py +0 -0
  45. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/frontera.py +0 -0
  46. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/gc_multisite.py +0 -0
  47. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/gc_tutorial.py +0 -0
  48. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/htex_local.py +0 -0
  49. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/illinoiscluster.py +0 -0
  50. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/improv.py +0 -0
  51. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/kubernetes.py +0 -0
  52. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/local_threads.py +0 -0
  53. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/midway.py +0 -0
  54. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/osg.py +0 -0
  55. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/polaris.py +0 -0
  56. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/stampede2.py +0 -0
  57. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/summit.py +0 -0
  58. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/toss3_llnl.py +0 -0
  59. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/vineex_local.py +0 -0
  60. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/configs/wqex_local.py +0 -0
  61. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/curvezmq.py +0 -0
  62. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/data_provider/__init__.py +0 -0
  63. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/data_provider/data_manager.py +0 -0
  64. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/data_provider/file_noop.py +0 -0
  65. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/data_provider/files.py +0 -0
  66. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/data_provider/ftp.py +0 -0
  67. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/data_provider/globus.py +0 -0
  68. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/data_provider/http.py +0 -0
  69. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/data_provider/rsync.py +0 -0
  70. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/data_provider/staging.py +0 -0
  71. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/data_provider/zip.py +0 -0
  72. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/dataflow/__init__.py +0 -0
  73. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/dataflow/dependency_resolvers.py +0 -0
  74. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/dataflow/dflow.py +0 -0
  75. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/dataflow/errors.py +0 -0
  76. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/dataflow/futures.py +0 -0
  77. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/dataflow/memoization.py +0 -0
  78. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/dataflow/rundirs.py +0 -0
  79. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/dataflow/states.py +0 -0
  80. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/dataflow/taskrecord.py +0 -0
  81. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/errors.py +0 -0
  82. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/__init__.py +0 -0
  83. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/base.py +0 -0
  84. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/errors.py +0 -0
  85. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/flux/__init__.py +0 -0
  86. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/flux/execute_parsl_task.py +0 -0
  87. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/flux/flux_instance_manager.py +0 -0
  88. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/globus_compute.py +0 -0
  89. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/__init__.py +0 -0
  90. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/errors.py +0 -0
  91. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/manager_record.py +0 -0
  92. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/manager_selector.py +0 -0
  93. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/monitoring_info.py +0 -0
  94. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/mpi_executor.py +0 -0
  95. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/mpi_prefix_composer.py +0 -0
  96. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/probe.py +0 -0
  97. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/high_throughput/zmq_pipes.py +0 -0
  98. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/radical/__init__.py +0 -0
  99. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/radical/rpex_resources.py +0 -0
  100. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/status_handling.py +0 -0
  101. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/taskvine/__init__.py +0 -0
  102. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/taskvine/errors.py +0 -0
  103. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/taskvine/exec_parsl_function.py +0 -0
  104. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/taskvine/executor.py +0 -0
  105. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/taskvine/factory.py +0 -0
  106. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/taskvine/factory_config.py +0 -0
  107. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/taskvine/manager.py +0 -0
  108. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/taskvine/manager_config.py +0 -0
  109. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/taskvine/utils.py +0 -0
  110. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/threads.py +0 -0
  111. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/workqueue/__init__.py +0 -0
  112. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/workqueue/errors.py +0 -0
  113. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/workqueue/exec_parsl_function.py +0 -0
  114. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/workqueue/executor.py +0 -0
  115. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/workqueue/parsl_coprocess.py +0 -0
  116. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/executors/workqueue/parsl_coprocess_stub.py +0 -0
  117. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/jobs/__init__.py +0 -0
  118. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/jobs/error_handlers.py +0 -0
  119. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/jobs/errors.py +0 -0
  120. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/jobs/job_status_poller.py +0 -0
  121. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/jobs/states.py +0 -0
  122. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/jobs/strategy.py +0 -0
  123. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/launchers/__init__.py +0 -0
  124. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/launchers/base.py +0 -0
  125. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/launchers/errors.py +0 -0
  126. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/launchers/launchers.py +0 -0
  127. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/log_utils.py +0 -0
  128. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/__init__.py +0 -0
  129. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/db_manager.py +0 -0
  130. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/errors.py +0 -0
  131. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/message_type.py +0 -0
  132. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/monitoring.py +0 -0
  133. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/queries/__init__.py +0 -0
  134. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/queries/pandas.py +0 -0
  135. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/radios/__init__.py +0 -0
  136. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/radios/base.py +0 -0
  137. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/radios/filesystem.py +0 -0
  138. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/radios/filesystem_router.py +0 -0
  139. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/radios/htex.py +0 -0
  140. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/radios/multiprocessing.py +0 -0
  141. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/radios/udp.py +0 -0
  142. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/radios/udp_router.py +0 -0
  143. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/radios/zmq.py +0 -0
  144. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/radios/zmq_router.py +0 -0
  145. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/remote.py +0 -0
  146. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/types.py +0 -0
  147. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/__init__.py +0 -0
  148. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/app.py +0 -0
  149. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/models.py +0 -0
  150. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/plots/__init__.py +0 -0
  151. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/plots/default/__init__.py +0 -0
  152. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/plots/default/task_plots.py +0 -0
  153. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/plots/default/workflow_plots.py +0 -0
  154. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +0 -0
  155. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/static/parsl-logo-white.png +0 -0
  156. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/static/parsl-monitor.css +0 -0
  157. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/templates/app.html +0 -0
  158. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/templates/dag.html +0 -0
  159. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/templates/error.html +0 -0
  160. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/templates/layout.html +0 -0
  161. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/templates/resource_usage.html +0 -0
  162. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/templates/task.html +0 -0
  163. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/templates/workflow.html +0 -0
  164. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/templates/workflows_summary.html +0 -0
  165. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/utils.py +0 -0
  166. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/version.py +0 -0
  167. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/monitoring/visualization/views.py +0 -0
  168. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/multiprocessing.py +0 -0
  169. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/process_loggers.py +0 -0
  170. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/__init__.py +0 -0
  171. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/aws/__init__.py +0 -0
  172. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/aws/aws.py +0 -0
  173. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/aws/template.py +0 -0
  174. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/azure/__init__.py +0 -0
  175. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/azure/azure.py +0 -0
  176. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/azure/template.py +0 -0
  177. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/base.py +0 -0
  178. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/cluster_provider.py +0 -0
  179. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/condor/__init__.py +0 -0
  180. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/condor/condor.py +0 -0
  181. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/condor/template.py +0 -0
  182. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/errors.py +0 -0
  183. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/googlecloud/__init__.py +0 -0
  184. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/googlecloud/googlecloud.py +0 -0
  185. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/grid_engine/__init__.py +0 -0
  186. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/grid_engine/grid_engine.py +0 -0
  187. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/grid_engine/template.py +0 -0
  188. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/kubernetes/__init__.py +0 -0
  189. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/kubernetes/kube.py +0 -0
  190. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/kubernetes/template.py +0 -0
  191. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/local/__init__.py +0 -0
  192. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/local/local.py +0 -0
  193. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/lsf/__init__.py +0 -0
  194. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/lsf/lsf.py +0 -0
  195. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/lsf/template.py +0 -0
  196. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/pbspro/__init__.py +0 -0
  197. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/pbspro/pbspro.py +0 -0
  198. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/pbspro/template.py +0 -0
  199. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/slurm/__init__.py +0 -0
  200. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/slurm/slurm.py +0 -0
  201. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/slurm/template.py +0 -0
  202. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/torque/__init__.py +0 -0
  203. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/torque/template.py +0 -0
  204. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/providers/torque/torque.py +0 -0
  205. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/py.typed +0 -0
  206. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/serialize/base.py +0 -0
  207. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/serialize/concretes.py +0 -0
  208. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/serialize/errors.py +0 -0
  209. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/serialize/proxystore.py +0 -0
  210. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/__init__.py +0 -0
  211. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/callables_helper.py +0 -0
  212. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/__init__.py +0 -0
  213. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/azure_single_node.py +0 -0
  214. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/bluewaters.py +0 -0
  215. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/bridges.py +0 -0
  216. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/cc_in2p3.py +0 -0
  217. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/comet.py +0 -0
  218. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/ec2_single_node.py +0 -0
  219. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/ec2_spot.py +0 -0
  220. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/flux_local.py +0 -0
  221. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/frontera.py +0 -0
  222. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/globus_compute.py +0 -0
  223. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/htex_local.py +0 -0
  224. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/htex_local_alternate.py +0 -0
  225. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/htex_local_intask_staging.py +0 -0
  226. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/htex_local_rsync_staging.py +0 -0
  227. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_radical.py +0 -0
  228. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_radical_mpi.py +0 -0
  229. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_threads.py +0 -0
  230. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_threads_checkpoint.py +0 -0
  231. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_threads_checkpoint_dfk_exit.py +0 -0
  232. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_threads_checkpoint_periodic.py +0 -0
  233. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_threads_checkpoint_task_exit.py +0 -0
  234. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_threads_ftp_in_task.py +0 -0
  235. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_threads_globus.py +0 -0
  236. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_threads_http_in_task.py +0 -0
  237. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/local_threads_no_cache.py +0 -0
  238. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/midway.py +0 -0
  239. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/nscc_singapore.py +0 -0
  240. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/osg_htex.py +0 -0
  241. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/petrelkube.py +0 -0
  242. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/slurm_local.py +0 -0
  243. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/summit.py +0 -0
  244. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/taskvine_ex.py +0 -0
  245. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/user_opts.py +0 -0
  246. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/configs/workqueue_ex.py +0 -0
  247. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/conftest.py +0 -0
  248. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/integration/__init__.py +0 -0
  249. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/integration/latency.py +0 -0
  250. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/integration/test_apps/__init__.py +0 -0
  251. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/integration/test_parsl_load_default_config.py +0 -0
  252. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/integration/test_stress/__init__.py +0 -0
  253. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/integration/test_stress/test_python_simple.py +0 -0
  254. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/integration/test_stress/test_python_threads.py +0 -0
  255. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/manual_tests/__init__.py +0 -0
  256. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/manual_tests/htex_local.py +0 -0
  257. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/manual_tests/test_basic.py +0 -0
  258. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/manual_tests/test_log_filter.py +0 -0
  259. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/manual_tests/test_memory_limits.py +0 -0
  260. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/manual_tests/test_regression_220.py +0 -0
  261. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/manual_tests/test_worker_count.py +0 -0
  262. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/site_tests/__init__.py +0 -0
  263. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/site_tests/site_config_selector.py +0 -0
  264. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/sites/__init__.py +0 -0
  265. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/sites/test_affinity.py +0 -0
  266. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/sites/test_concurrent.py +0 -0
  267. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/sites/test_dynamic_executor.py +0 -0
  268. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/sites/test_ec2.py +0 -0
  269. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/sites/test_launchers.py +0 -0
  270. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/sites/test_mpi/__init__.py +0 -0
  271. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/sites/test_worker_info.py +0 -0
  272. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/__init__.py +0 -0
  273. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_apptimeout.py +0 -0
  274. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_basic.py +0 -0
  275. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_error_codes.py +0 -0
  276. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_inputs_default.py +0 -0
  277. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_keyword_overlaps.py +0 -0
  278. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_kwarg_storage.py +0 -0
  279. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_memoize.py +0 -0
  280. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_memoize_ignore_args.py +0 -0
  281. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +0 -0
  282. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_multiline.py +0 -0
  283. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_pipeline.py +0 -0
  284. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_std_uri.py +0 -0
  285. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_bash_apps/test_stdout.py +0 -0
  286. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_callables.py +0 -0
  287. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_checkpointing/__init__.py +0 -0
  288. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_checkpointing/test_periodic.py +0 -0
  289. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_checkpointing/test_python_checkpoint_1.py +0 -0
  290. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_checkpointing/test_python_checkpoint_2.py +0 -0
  291. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_checkpointing/test_regression_232.py +0 -0
  292. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_checkpointing/test_regression_233.py +0 -0
  293. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_checkpointing/test_regression_239.py +0 -0
  294. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_checkpointing/test_task_exit.py +0 -0
  295. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_curvezmq.py +0 -0
  296. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_docs/__init__.py +0 -0
  297. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_docs/test_from_slides.py +0 -0
  298. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_docs/test_kwargs.py +0 -0
  299. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_docs/test_tutorial_1.py +0 -0
  300. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_docs/test_workflow1.py +0 -0
  301. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_docs/test_workflow4.py +0 -0
  302. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_error_handling/__init__.py +0 -0
  303. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_error_handling/test_fail.py +0 -0
  304. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_error_handling/test_python_walltime.py +0 -0
  305. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_error_handling/test_resource_spec.py +0 -0
  306. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_error_handling/test_retries.py +0 -0
  307. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_error_handling/test_retry_handler.py +0 -0
  308. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_error_handling/test_retry_handler_failure.py +0 -0
  309. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_error_handling/test_serialization_fail.py +0 -0
  310. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_error_handling/test_wrap_with_logs.py +0 -0
  311. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_flowcontrol/__init__.py +0 -0
  312. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_flux.py +0 -0
  313. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/__init__.py +0 -0
  314. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_basic.py +0 -0
  315. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_block_manager_selector_unit.py +0 -0
  316. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_command_client_timeout.py +0 -0
  317. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_command_concurrency_regression_1321.py +0 -0
  318. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_connected_blocks.py +0 -0
  319. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_cpu_affinity_explicit.py +0 -0
  320. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_disconnected_blocks.py +0 -0
  321. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_disconnected_blocks_failing_provider.py +0 -0
  322. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_drain.py +0 -0
  323. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_htex.py +0 -0
  324. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_interchange_exit_bad_registration.py +0 -0
  325. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_manager_failure.py +0 -0
  326. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_manager_selector_by_block.py +0 -0
  327. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_managers_command.py +0 -0
  328. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_missing_worker.py +0 -0
  329. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_multiple_disconnected_blocks.py +0 -0
  330. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_resource_spec_validation.py +0 -0
  331. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_worker_failure.py +0 -0
  332. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_htex/test_zmq_binding.py +0 -0
  333. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/__init__.py +0 -0
  334. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_app_names.py +0 -0
  335. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_basic.py +0 -0
  336. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_db_locks.py +0 -0
  337. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_exit_helper.py +0 -0
  338. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_htex_fuzz_zmq.py +0 -0
  339. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +0 -0
  340. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_incomplete_futures.py +0 -0
  341. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_memoization_representation.py +0 -0
  342. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_radio_filesystem.py +0 -0
  343. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_radio_multiprocessing.py +0 -0
  344. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_radio_udp.py +0 -0
  345. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_radio_zmq.py +0 -0
  346. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_stdouterr.py +0 -0
  347. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_monitoring/test_viz_colouring.py +0 -0
  348. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_mpi_apps/__init__.py +0 -0
  349. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_mpi_apps/test_bad_mpi_config.py +0 -0
  350. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +0 -0
  351. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_mpi_apps/test_mpi_prefix.py +0 -0
  352. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_mpi_apps/test_mpiex.py +0 -0
  353. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_mpi_apps/test_resource_spec.py +0 -0
  354. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_providers/__init__.py +0 -0
  355. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_providers/test_kubernetes_provider.py +0 -0
  356. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_providers/test_local_provider.py +0 -0
  357. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_providers/test_pbspro_template.py +0 -0
  358. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_providers/test_slurm_instantiate.py +0 -0
  359. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_providers/test_slurm_template.py +0 -0
  360. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_providers/test_submiterror_deprecation.py +0 -0
  361. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/__init__.py +0 -0
  362. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_arg_input_types.py +0 -0
  363. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_basic.py +0 -0
  364. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_context_manager.py +0 -0
  365. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_dep_standard_futures.py +0 -0
  366. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_dependencies.py +0 -0
  367. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_dependencies_deep.py +0 -0
  368. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_depfail_propagation.py +0 -0
  369. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_fail.py +0 -0
  370. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_fibonacci_iterative.py +0 -0
  371. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_fibonacci_recursive.py +0 -0
  372. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_futures.py +0 -0
  373. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_garbage_collect.py +0 -0
  374. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_import_fail.py +0 -0
  375. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_inputs_default.py +0 -0
  376. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_join.py +0 -0
  377. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_lifted.py +0 -0
  378. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_mapred.py +0 -0
  379. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_memoize_1.py +0 -0
  380. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_memoize_2.py +0 -0
  381. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_memoize_4.py +0 -0
  382. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +0 -0
  383. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_memoize_exception.py +0 -0
  384. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_memoize_ignore_args.py +0 -0
  385. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_memoize_joinapp.py +0 -0
  386. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_outputs.py +0 -0
  387. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_overview.py +0 -0
  388. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_pipeline.py +0 -0
  389. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_pluggable_future_resolution.py +0 -0
  390. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_simple.py +0 -0
  391. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_timeout.py +0 -0
  392. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_python_apps/test_type5.py +0 -0
  393. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_radical/__init__.py +0 -0
  394. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_radical/test_mpi_funcs.py +0 -0
  395. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_regression/__init__.py +0 -0
  396. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_regression/test_1480.py +0 -0
  397. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_regression/test_1606_wait_for_current_tasks.py +0 -0
  398. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_regression/test_1653.py +0 -0
  399. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_regression/test_221.py +0 -0
  400. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_regression/test_226.py +0 -0
  401. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_regression/test_2652.py +0 -0
  402. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_regression/test_69a.py +0 -0
  403. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_regression/test_97_parallelism_0.py +0 -0
  404. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_regression/test_98.py +0 -0
  405. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_scaling/__init__.py +0 -0
  406. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_scaling/test_block_error_handler.py +0 -0
  407. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_scaling/test_regression_1621.py +0 -0
  408. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_scaling/test_regression_3568_scaledown_vs_MISSING.py +0 -0
  409. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_scaling/test_regression_3696_oscillation.py +0 -0
  410. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_scaling/test_scale_down.py +0 -0
  411. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +0 -0
  412. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_scaling/test_scale_down_htex_unregistered.py +0 -0
  413. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_scaling/test_shutdown_scalein.py +0 -0
  414. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_scaling/test_worker_interchange_bad_messages_3262.py +0 -0
  415. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_serialization/__init__.py +0 -0
  416. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_serialization/test_2555_caching_deserializer.py +0 -0
  417. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_serialization/test_3495_deserialize_managerlost.py +0 -0
  418. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_serialization/test_basic.py +0 -0
  419. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_serialization/test_htex_code_cache.py +0 -0
  420. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_serialization/test_proxystore_configured.py +0 -0
  421. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_serialization/test_proxystore_impl.py +0 -0
  422. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_shutdown/__init__.py +0 -0
  423. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_shutdown/test_kill_monitoring.py +0 -0
  424. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/__init__.py +0 -0
  425. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/staging_provider.py +0 -0
  426. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_1316.py +0 -0
  427. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_docs_1.py +0 -0
  428. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_docs_2.py +0 -0
  429. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_elaborate_noop_file.py +0 -0
  430. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_file.py +0 -0
  431. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_file_apps.py +0 -0
  432. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_file_staging.py +0 -0
  433. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_output_chain_filenames.py +0 -0
  434. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_staging_ftp.py +0 -0
  435. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_staging_ftp_in_task.py +0 -0
  436. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_staging_globus.py +0 -0
  437. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_staging_https.py +0 -0
  438. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_staging_stdout.py +0 -0
  439. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_zip_in.py +0 -0
  440. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_zip_out.py +0 -0
  441. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_staging/test_zip_to_zip.py +0 -0
  442. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_summary.py +0 -0
  443. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_thread_parallelism.py +0 -0
  444. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_threads/__init__.py +0 -0
  445. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_threads/test_configs.py +0 -0
  446. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_threads/test_lazy_errors.py +0 -0
  447. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_utils/__init__.py +0 -0
  448. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_utils/test_execute_wait.py +0 -0
  449. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_utils/test_logutils.py +0 -0
  450. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_utils/test_representation_mixin.py +0 -0
  451. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/test_utils/test_sanitize_dns.py +0 -0
  452. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/unit/__init__.py +0 -0
  453. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/unit/test_address.py +0 -0
  454. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/unit/test_file.py +0 -0
  455. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/unit/test_globus_compute_executor.py +0 -0
  456. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/unit/test_usage_tracking.py +0 -0
  457. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/tests/utils.py +0 -0
  458. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/usage_tracking/__init__.py +0 -0
  459. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/usage_tracking/api.py +0 -0
  460. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/usage_tracking/levels.py +0 -0
  461. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/usage_tracking/usage.py +0 -0
  462. {parsl-2025.9.15 → parsl-2025.9.22}/parsl/utils.py +0 -0
  463. {parsl-2025.9.15 → parsl-2025.9.22}/parsl.egg-info/dependency_links.txt +0 -0
  464. {parsl-2025.9.15 → parsl-2025.9.22}/parsl.egg-info/entry_points.txt +0 -0
  465. {parsl-2025.9.15 → parsl-2025.9.22}/parsl.egg-info/requires.txt +0 -0
  466. {parsl-2025.9.15 → parsl-2025.9.22}/parsl.egg-info/top_level.txt +0 -0
  467. {parsl-2025.9.15 → parsl-2025.9.22}/requirements.txt +0 -0
  468. {parsl-2025.9.15 → parsl-2025.9.22}/setup.cfg +0 -0
  469. {parsl-2025.9.15 → parsl-2025.9.22}/setup.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2025.9.15
3
+ Version: 2025.9.22
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/2025.09.15.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2025.09.22.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -1,17 +1,11 @@
1
- import os
2
-
3
- from parsl.serialize import unpack_res_spec_apply_message
1
+ from parsl.serialize import unpack_apply_message
4
2
 
5
3
 
6
4
  def execute_task(bufs: bytes):
7
5
  """Deserialize the buffer and execute the task.
8
6
  Returns the result or throws exception.
9
7
  """
10
- f, args, kwargs, resource_spec = unpack_res_spec_apply_message(bufs)
11
-
12
- for varname in resource_spec:
13
- envname = "PARSL_" + str(varname).upper()
14
- os.environ[envname] = str(resource_spec[varname])
8
+ f, args, kwargs = unpack_apply_message(bufs)
15
9
 
16
10
  # We might need to look into callability of the function from itself
17
11
  # since we change it's name in the new namespace
@@ -24,7 +24,7 @@ from parsl.executors.flux.execute_parsl_task import __file__ as _WORKER_PATH
24
24
  from parsl.executors.flux.flux_instance_manager import __file__ as _MANAGER_PATH
25
25
  from parsl.providers import LocalProvider
26
26
  from parsl.providers.base import ExecutionProvider
27
- from parsl.serialize import deserialize, pack_res_spec_apply_message
27
+ from parsl.serialize import deserialize, pack_apply_message
28
28
  from parsl.serialize.errors import SerializationError
29
29
  from parsl.utils import RepresentationMixin
30
30
 
@@ -284,10 +284,8 @@ class FluxExecutor(ParslExecutor, RepresentationMixin):
284
284
  infile = os.path.join(self.working_dir, f"{task_id}_in{os.extsep}pkl")
285
285
  outfile = os.path.join(self.working_dir, f"{task_id}_out{os.extsep}pkl")
286
286
  try:
287
- fn_buf = pack_res_spec_apply_message(
288
- func, args, kwargs,
289
- resource_specification={},
290
- buffer_threshold=1024 * 1024
287
+ fn_buf = pack_apply_message(
288
+ func, args, kwargs, buffer_threshold=1 << 20,
291
289
  )
292
290
  except TypeError:
293
291
  raise SerializationError(func.__name__)
@@ -35,7 +35,7 @@ from parsl.monitoring.radios.zmq_router import ZMQRadioReceiver, start_zmq_recei
35
35
  from parsl.process_loggers import wrap_with_logs
36
36
  from parsl.providers import LocalProvider
37
37
  from parsl.providers.base import ExecutionProvider
38
- from parsl.serialize import deserialize, pack_res_spec_apply_message
38
+ from parsl.serialize import deserialize, pack_apply_message
39
39
  from parsl.serialize.errors import DeserializationError, SerializationError
40
40
  from parsl.usage_tracking.api import UsageInformation
41
41
  from parsl.utils import RepresentationMixin
@@ -708,9 +708,7 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin, UsageIn
708
708
  self.tasks[task_id] = fut
709
709
 
710
710
  try:
711
- fn_buf = pack_res_spec_apply_message(func, args, kwargs,
712
- resource_specification=resource_specification,
713
- buffer_threshold=1024 * 1024)
711
+ fn_buf = pack_apply_message(func, args, kwargs, buffer_threshold=1 << 20)
714
712
  except TypeError:
715
713
  raise SerializationError(func.__name__)
716
714
 
@@ -23,7 +23,6 @@ from parsl.monitoring.radios.base import MonitoringRadioSender
23
23
  from parsl.monitoring.radios.zmq import ZMQRadioSender
24
24
  from parsl.process_loggers import wrap_with_logs
25
25
  from parsl.serialize import serialize as serialize_object
26
- from parsl.utils import setproctitle
27
26
  from parsl.version import VERSION as PARSL_VERSION
28
27
 
29
28
  PKL_HEARTBEAT_CODE = pickle.dumps((2 ** 32) - 1)
@@ -220,7 +219,7 @@ class Interchange:
220
219
 
221
220
  reply: Any # the type of reply depends on the command_req received (aka this needs dependent types...)
222
221
 
223
- if self.command_channel in self.socks and self.socks[self.command_channel] == zmq.POLLIN:
222
+ if self.socks.get(self.command_channel) == zmq.POLLIN:
224
223
  logger.debug("entering command_server section")
225
224
 
226
225
  command_req = self.command_channel.recv_pyobj()
@@ -328,7 +327,7 @@ class Interchange:
328
327
  """Process incoming task message(s).
329
328
  """
330
329
 
331
- if self.task_incoming in self.socks and self.socks[self.task_incoming] == zmq.POLLIN:
330
+ if self.socks.get(self.task_incoming) == zmq.POLLIN:
332
331
  logger.debug("start task_incoming section")
333
332
  msg = self.task_incoming.recv_pyobj()
334
333
 
@@ -627,6 +626,8 @@ def start_file_logger(filename: str, level: int = logging.DEBUG, format_string:
627
626
 
628
627
 
629
628
  if __name__ == "__main__":
629
+ from parsl.utils import setproctitle
630
+
630
631
  setproctitle("parsl: HTEX interchange")
631
632
 
632
633
  config = pickle.load(sys.stdin.buffer)
@@ -9,7 +9,6 @@ from enum import Enum
9
9
  from typing import Dict, List, Optional
10
10
 
11
11
  from parsl.multiprocessing import SpawnContext
12
- from parsl.serialize import pack_res_spec_apply_message, unpack_res_spec_apply_message
13
12
 
14
13
  logger = logging.getLogger(__name__)
15
14
 
@@ -167,9 +166,7 @@ class MPITaskScheduler(TaskScheduler):
167
166
 
168
167
  def put_task(self, task_package: dict):
169
168
  """Schedule task if resources are available otherwise backlog the task"""
170
- user_ns = locals()
171
- user_ns.update({"__builtins__": __builtins__})
172
- _f, _args, _kwargs, resource_spec = unpack_res_spec_apply_message(task_package["buffer"])
169
+ resource_spec = task_package.get("resource_spec", {})
173
170
 
174
171
  nodes_needed = resource_spec.get("num_nodes")
175
172
  tid = task_package["task_id"]
@@ -183,9 +180,6 @@ class MPITaskScheduler(TaskScheduler):
183
180
  else:
184
181
  resource_spec["MPI_NODELIST"] = ",".join(allocated_nodes)
185
182
  self._map_tasks_to_nodes[tid] = allocated_nodes
186
- buffer = pack_res_spec_apply_message(_f, _args, _kwargs, resource_spec)
187
- task_package["buffer"] = buffer
188
- task_package["resource_spec"] = resource_spec
189
183
 
190
184
  self.pending_task_q.put(task_package)
191
185
 
@@ -603,6 +603,10 @@ def update_resource_spec_env_vars(mpi_launcher: str, resource_spec: Dict, node_i
603
603
 
604
604
 
605
605
  def _init_mpi_env(mpi_launcher: str, resource_spec: Dict):
606
+ for varname in resource_spec:
607
+ envname = "PARSL_" + str(varname).upper()
608
+ os.environ[envname] = str(resource_spec[varname])
609
+
606
610
  node_list = resource_spec.get("MPI_NODELIST")
607
611
  if node_list is None:
608
612
  return
@@ -753,8 +757,8 @@ def worker(
753
757
  worker_enqueued = True
754
758
 
755
759
  try:
756
- # The worker will receive {'task_id':<tid>, 'buffer':<buf>}
757
760
  req = task_queue.get(timeout=task_queue_timeout)
761
+ # req is {'task_id':<tid>, 'buffer':<buf>, 'resource_spec':<dict>}
758
762
  except queue.Empty:
759
763
  continue
760
764
 
@@ -20,7 +20,7 @@ from parsl.app.errors import BashExitFailure, RemoteExceptionWrapper
20
20
  from parsl.app.python import timeout
21
21
  from parsl.data_provider.files import File
22
22
  from parsl.executors.base import ParslExecutor
23
- from parsl.serialize import deserialize, pack_res_spec_apply_message
23
+ from parsl.serialize import deserialize, pack_apply_message
24
24
  from parsl.serialize.errors import DeserializationError, SerializationError
25
25
  from parsl.utils import RepresentationMixin
26
26
 
@@ -441,11 +441,7 @@ class RadicalPilotExecutor(ParslExecutor, RepresentationMixin):
441
441
 
442
442
  def _pack_and_apply_message(self, func, args, kwargs):
443
443
  try:
444
- buffer = pack_res_spec_apply_message(func,
445
- args,
446
- kwargs,
447
- resource_specification={},
448
- buffer_threshold=1024 * 1024)
444
+ buffer = pack_apply_message(func, args, kwargs, buffer_threshold=1 << 20)
449
445
  task_func = rp.utils.serialize_bson(buffer)
450
446
  except TypeError:
451
447
  raise SerializationError(func.__name__)
@@ -5,7 +5,7 @@ import radical.pilot as rp
5
5
  import parsl.app.errors as pe
6
6
  from parsl.app.bash import remote_side_bash_executor
7
7
  from parsl.executors.execute_task import execute_task
8
- from parsl.serialize import serialize, unpack_res_spec_apply_message
8
+ from parsl.serialize import serialize, unpack_apply_message
9
9
 
10
10
 
11
11
  class ParslWorker:
@@ -33,7 +33,7 @@ class ParslWorker:
33
33
 
34
34
  try:
35
35
  buffer = rp.utils.deserialize_bson(task['description']['executable'])
36
- func, args, kwargs, _resource_spec = unpack_res_spec_apply_message(buffer)
36
+ func, args, kwargs = unpack_apply_message(buffer)
37
37
  ret = remote_side_bash_executor(func, *args, **kwargs)
38
38
  exc = (None, None)
39
39
  val = None
@@ -0,0 +1,13 @@
1
+ from parsl.serialize.facade import (
2
+ deserialize,
3
+ pack_apply_message,
4
+ serialize,
5
+ unpack_apply_message,
6
+ )
7
+
8
+ __all__ = (
9
+ "serialize",
10
+ "deserialize",
11
+ "pack_apply_message",
12
+ "unpack_apply_message",
13
+ )
@@ -62,44 +62,12 @@ def pack_apply_message(func: Any, args: Any, kwargs: Any, buffer_threshold: int
62
62
  return packed_buffer
63
63
 
64
64
 
65
- def pack_res_spec_apply_message(func: Any, args: Any, kwargs: Any, resource_specification: Any, buffer_threshold: int = int(128 * 1e6)) -> bytes:
66
- """Serialize and pack function, parameters, and resource_specification
67
-
68
- Parameters
69
- ----------
70
-
71
- func: Function
72
- A function to ship
73
-
74
- args: Tuple/list of objects
75
- positional parameters as a list
76
-
77
- kwargs: Dict
78
- Dict containing named parameters
79
-
80
- resource_specification: Dict
81
- Dict containing application resource specification
82
-
83
- buffer_threshold: int
84
- Limits buffer to specified size in bytes. Exceeding this limit would give you
85
- a warning in the log. Default is 128MB.
86
- """
87
- return pack_apply_message(func, args, (kwargs, resource_specification), buffer_threshold=buffer_threshold)
88
-
89
-
90
65
  def unpack_apply_message(packed_buffer: bytes) -> List[Any]:
91
66
  """ Unpack and deserialize function and parameters
92
67
  """
93
68
  return [deserialize(buf) for buf in unpack_buffers(packed_buffer)]
94
69
 
95
70
 
96
- def unpack_res_spec_apply_message(packed_buffer: bytes) -> List[Any]:
97
- """ Unpack and deserialize function, parameters, and resource_specification
98
- """
99
- func, args, (kwargs, resource_spec) = unpack_apply_message(packed_buffer)
100
- return [func, args, kwargs, resource_spec]
101
-
102
-
103
71
  def serialize(obj: Any, buffer_threshold: int = int(1e6)) -> bytes:
104
72
  """ Try available serialization methods one at a time
105
73
 
@@ -0,0 +1,20 @@
1
+ import os
2
+
3
+ import pytest
4
+
5
+ from parsl.executors.execute_task import execute_task
6
+ from parsl.serialize.facade import pack_apply_message
7
+
8
+
9
+ def addemup(*args: int, name: str = "apples"):
10
+ total = sum(args)
11
+ return f"{total} {name}"
12
+
13
+
14
+ @pytest.mark.local
15
+ def test_execute_task():
16
+ args = (1, 2, 3)
17
+ kwargs = {"name": "boots"}
18
+ buff = pack_apply_message(addemup, args, kwargs)
19
+ res = execute_task(buff)
20
+ assert res == addemup(*args, **kwargs)
@@ -1,3 +1,5 @@
1
+ from random import randint
2
+
1
3
  import pytest
2
4
 
3
5
  import parsl
@@ -40,8 +42,11 @@ def test_priority_queue():
40
42
  futures = {}
41
43
 
42
44
  # Submit tasks with mixed priorities
43
- # Priorities: [10, 10, 5, 5, 1, 1] to test fallback behavior
44
- for i, priority in enumerate([10, 10, 5, 5, 1, 1]):
45
+ # Test fallback behavior with a guaranteed-unsorted priorities
46
+ priorities = [randint(2, 9) for _ in range(randint(1, 10))]
47
+ priorities.insert(0, 10)
48
+ priorities.extend((1, 10, 1))
49
+ for i, priority in enumerate(priorities):
45
50
  spec = {'priority': priority}
46
51
  futures[(priority, i)] = fake_task(parsl_resource_specification=spec)
47
52
 
@@ -1,4 +1,3 @@
1
- import logging
2
1
  import os
3
2
  import pickle
4
3
  from unittest import mock
@@ -10,7 +9,9 @@ from parsl.executors.high_throughput.mpi_resource_management import (
10
9
  TaskScheduler,
11
10
  )
12
11
  from parsl.multiprocessing import SpawnContext
13
- from parsl.serialize import pack_res_spec_apply_message, unpack_res_spec_apply_message
12
+ from parsl.serialize import pack_apply_message
13
+
14
+ mock_task_buffer = pack_apply_message("func", "args", "kwargs")
14
15
 
15
16
 
16
17
  @pytest.fixture(autouse=True)
@@ -42,12 +43,8 @@ def test_MPISched_put_task():
42
43
  assert len(scheduler.available_nodes) == 8
43
44
  assert scheduler._free_node_counter.value == 8
44
45
 
45
- mock_task_buffer = pack_res_spec_apply_message("func",
46
- "args",
47
- "kwargs",
48
- resource_specification={"num_nodes": 2,
49
- "ranks_per_node": 2})
50
- task_package = {"task_id": 1, "buffer": mock_task_buffer}
46
+ res_spec = {"num_nodes": 2, "ranks_per_node": 2}
47
+ task_package = {"task_id": 1, "buffer": mock_task_buffer, "resource_spec": res_spec}
51
48
  scheduler.put_task(task_package)
52
49
 
53
50
  assert scheduler._free_node_counter.value == 6
@@ -82,21 +79,17 @@ def test_MPISched_roundtrip():
82
79
  assert scheduler.available_nodes
83
80
  assert len(scheduler.available_nodes) == 8
84
81
 
85
- for round in range(1, 9):
82
+ for trip in range(1, 9):
86
83
  assert scheduler._free_node_counter.value == 8
87
84
 
88
- mock_task_buffer = pack_res_spec_apply_message("func",
89
- "args",
90
- "kwargs",
91
- resource_specification={"num_nodes": round,
92
- "ranks_per_node": 2})
93
- task_package = {"task_id": round, "buffer": mock_task_buffer}
85
+ res_spec = {"num_nodes": trip, "ranks_per_node": 2}
86
+ task_package = {"task_id": trip, "buffer": mock_task_buffer, "resource_spec": res_spec}
94
87
  scheduler.put_task(task_package)
95
88
 
96
- assert scheduler._free_node_counter.value == 8 - round
89
+ assert scheduler._free_node_counter.value == 8 - trip
97
90
 
98
91
  # Pop in a mock result
99
- result_pkl = pickle.dumps({"task_id": round, "type": "result", "buffer": "RESULT BUF"})
92
+ result_pkl = pickle.dumps({"task_id": trip, "type": "result", "buffer": "RESULT BUF"})
100
93
  result_q.put(result_pkl)
101
94
 
102
95
  got_result = scheduler.get_result(True, 1)
@@ -114,27 +107,15 @@ def test_MPISched_contention():
114
107
 
115
108
  assert scheduler._free_node_counter.value == 8
116
109
 
117
- mock_task_buffer = pack_res_spec_apply_message("func",
118
- "args",
119
- "kwargs",
120
- resource_specification={
121
- "num_nodes": 8,
122
- "ranks_per_node": 2
123
- })
124
- task_package = {"task_id": 1, "buffer": mock_task_buffer}
110
+ rspec_1 = {"num_nodes": 8, "ranks_per_node": 2}
111
+ task_package = {"task_id": 1, "buffer": mock_task_buffer, "resource_spec": rspec_1}
125
112
  scheduler.put_task(task_package)
126
113
 
127
114
  assert scheduler._free_node_counter.value == 0
128
115
  assert scheduler._backlog_queue.empty()
129
116
 
130
- mock_task_buffer = pack_res_spec_apply_message("func",
131
- "args",
132
- "kwargs",
133
- resource_specification={
134
- "num_nodes": 8,
135
- "ranks_per_node": 2
136
- })
137
- task_package = {"task_id": 2, "buffer": mock_task_buffer}
117
+ rspec_2 = {"num_nodes": 8, "ranks_per_node": 2}
118
+ task_package = {"task_id": 2, "buffer": mock_task_buffer, "resource_spec": rspec_2}
138
119
  scheduler.put_task(task_package)
139
120
 
140
121
  # Second task should now be in the backlog_queue
@@ -143,8 +124,7 @@ def test_MPISched_contention():
143
124
  # Confirm that the first task is available and has all 8 nodes provisioned
144
125
  task_on_worker_side = task_q.get()
145
126
  assert task_on_worker_side['task_id'] == 1
146
- _, _, _, resource_spec = unpack_res_spec_apply_message(task_on_worker_side['buffer'])
147
- assert len(resource_spec['MPI_NODELIST'].split(',')) == 8
127
+ assert len(rspec_1["MPI_NODELIST"].split(",")) == 8
148
128
  assert task_q.empty() # Confirm that task 2 is not yet scheduled
149
129
 
150
130
  # Simulate worker returning result and the scheduler picking up result
@@ -159,8 +139,7 @@ def test_MPISched_contention():
159
139
  # Pop in a mock result
160
140
  task_on_worker_side = task_q.get()
161
141
  assert task_on_worker_side['task_id'] == 2
162
- _, _, _, resource_spec = unpack_res_spec_apply_message(task_on_worker_side['buffer'])
163
- assert len(resource_spec['MPI_NODELIST'].split(',')) == 8
142
+ assert len(rspec_2["MPI_NODELIST"].split(",")) == 8
164
143
 
165
144
 
166
145
  @pytest.mark.local
@@ -178,11 +157,7 @@ def test_hashable_backlog_queue():
178
157
  assert scheduler._free_node_counter.value == 8
179
158
 
180
159
  for i in range(3):
181
- mock_task_buffer = pack_res_spec_apply_message("func", "args", "kwargs",
182
- resource_specification={
183
- "num_nodes": 8,
184
- "ranks_per_node": 2
185
- })
186
- task_package = {"task_id": i, "buffer": mock_task_buffer}
160
+ res_spec = {"num_nodes": 8, "ranks_per_node": 2}
161
+ task_package = {"task_id": i, "buffer": mock_task_buffer, "resource_spec": res_spec}
187
162
  scheduler.put_task(task_package)
188
163
  assert scheduler._backlog_queue.qsize() == 2, "Expected 2 backlogged tasks"
@@ -3,4 +3,4 @@
3
3
  Year.Month.Day[alpha/beta/..]
4
4
  Alphas will be numbered like this -> 2024.12.10a0
5
5
  """
6
- VERSION = '2025.09.15'
6
+ VERSION = '2025.09.22'
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsl
3
- Version: 2025.9.15
3
+ Version: 2025.9.22
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/2025.09.15.tar.gz
6
+ Download-URL: https://github.com/Parsl/parsl/archive/2025.09.22.tar.gz
7
7
  Author: The Parsl Team
8
8
  Author-email: parsl@googlegroups.com
9
9
  License: Apache 2.0
@@ -423,7 +423,6 @@ parsl/tests/test_serialization/test_2555_caching_deserializer.py
423
423
  parsl/tests/test_serialization/test_3495_deserialize_managerlost.py
424
424
  parsl/tests/test_serialization/test_basic.py
425
425
  parsl/tests/test_serialization/test_htex_code_cache.py
426
- parsl/tests/test_serialization/test_pack_resource_spec.py
427
426
  parsl/tests/test_serialization/test_proxystore_configured.py
428
427
  parsl/tests/test_serialization/test_proxystore_impl.py
429
428
  parsl/tests/test_shutdown/__init__.py
@@ -1,16 +0,0 @@
1
- from parsl.serialize.facade import (
2
- deserialize,
3
- pack_apply_message,
4
- pack_res_spec_apply_message,
5
- serialize,
6
- unpack_apply_message,
7
- unpack_res_spec_apply_message,
8
- )
9
-
10
- __all__ = ['serialize',
11
- 'deserialize',
12
- 'pack_apply_message',
13
- 'unpack_apply_message',
14
- 'unpack_res_spec_apply_message',
15
- 'pack_res_spec_apply_message'
16
- ]
@@ -1,29 +0,0 @@
1
- import os
2
-
3
- import pytest
4
-
5
- from parsl.executors.execute_task import execute_task
6
- from parsl.serialize.facade import pack_res_spec_apply_message
7
-
8
-
9
- def addemup(*args: int, name: str = "apples"):
10
- total = sum(args)
11
- return f"{total} {name}"
12
-
13
-
14
- @pytest.mark.local
15
- def test_execute_task():
16
- args = (1, 2, 3)
17
- kwargs = {"name": "boots"}
18
- buff = pack_res_spec_apply_message(addemup, args, kwargs, {})
19
- res = execute_task(buff)
20
- assert res == addemup(*args, **kwargs)
21
-
22
-
23
- @pytest.mark.local
24
- def test_execute_task_resource_spec():
25
- resource_spec = {"num_nodes": 2, "ranks_per_node": 2, "num_ranks": 4}
26
- buff = pack_res_spec_apply_message(addemup, (1, 2), {}, resource_spec)
27
- execute_task(buff)
28
- for key, val in resource_spec.items():
29
- assert os.environ[f"PARSL_{key.upper()}"] == str(val)
@@ -1,23 +0,0 @@
1
- import pytest
2
-
3
- from parsl.serialize import pack_res_spec_apply_message, unpack_res_spec_apply_message
4
-
5
-
6
- def double(x: int, y: int = 2) -> int:
7
- return x * y
8
-
9
-
10
- @pytest.mark.local
11
- def test_pack_and_unpack():
12
- args = (5,)
13
- kwargs = {'y': 10}
14
- resource_spec = {'num_nodes': 4}
15
- packed = pack_res_spec_apply_message(double, args, kwargs, resource_specification=resource_spec)
16
-
17
- unpacked = unpack_res_spec_apply_message(packed)
18
- assert len(unpacked) == 4
19
- u_fn, u_args, u_kwargs, u_res_spec = unpacked
20
- assert u_fn == double
21
- assert u_args == args
22
- assert u_kwargs == kwargs
23
- assert u_res_spec == resource_spec
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes