parsl 2024.5.27__py3-none-any.whl → 2024.6.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. parsl/__init__.py +9 -10
  2. parsl/addresses.py +6 -4
  3. parsl/app/app.py +3 -6
  4. parsl/app/bash.py +4 -4
  5. parsl/app/errors.py +5 -3
  6. parsl/app/futures.py +3 -3
  7. parsl/app/python.py +2 -1
  8. parsl/benchmark/perf.py +2 -1
  9. parsl/channels/__init__.py +2 -2
  10. parsl/channels/base.py +0 -1
  11. parsl/channels/errors.py +2 -1
  12. parsl/channels/oauth_ssh/oauth_ssh.py +4 -3
  13. parsl/channels/ssh/ssh.py +9 -1
  14. parsl/channels/ssh_il/ssh_il.py +1 -0
  15. parsl/concurrent/__init__.py +2 -2
  16. parsl/config.py +32 -9
  17. parsl/configs/ASPIRE1.py +3 -3
  18. parsl/configs/Azure.py +6 -7
  19. parsl/configs/ad_hoc.py +4 -3
  20. parsl/configs/bridges.py +3 -3
  21. parsl/configs/cc_in2p3.py +2 -2
  22. parsl/configs/ec2.py +1 -1
  23. parsl/configs/expanse.py +1 -2
  24. parsl/configs/frontera.py +2 -3
  25. parsl/configs/htex_local.py +1 -2
  26. parsl/configs/illinoiscluster.py +1 -1
  27. parsl/configs/kubernetes.py +1 -2
  28. parsl/configs/midway.py +3 -3
  29. parsl/configs/osg.py +1 -1
  30. parsl/configs/polaris.py +1 -1
  31. parsl/configs/stampede2.py +4 -5
  32. parsl/configs/summit.py +1 -3
  33. parsl/configs/toss3_llnl.py +1 -2
  34. parsl/configs/vineex_local.py +3 -3
  35. parsl/configs/wqex_local.py +2 -2
  36. parsl/data_provider/data_manager.py +3 -3
  37. parsl/data_provider/file_noop.py +1 -2
  38. parsl/data_provider/files.py +3 -3
  39. parsl/data_provider/ftp.py +1 -3
  40. parsl/data_provider/globus.py +7 -6
  41. parsl/data_provider/http.py +2 -2
  42. parsl/data_provider/rsync.py +1 -1
  43. parsl/data_provider/staging.py +2 -2
  44. parsl/data_provider/zip.py +4 -5
  45. parsl/dataflow/dflow.py +57 -26
  46. parsl/dataflow/errors.py +2 -1
  47. parsl/dataflow/futures.py +1 -2
  48. parsl/dataflow/memoization.py +5 -5
  49. parsl/dataflow/rundirs.py +1 -1
  50. parsl/dataflow/taskrecord.py +4 -5
  51. parsl/executors/__init__.py +3 -3
  52. parsl/executors/base.py +1 -0
  53. parsl/executors/flux/execute_parsl_task.py +2 -2
  54. parsl/executors/flux/executor.py +11 -12
  55. parsl/executors/flux/flux_instance_manager.py +3 -3
  56. parsl/executors/high_throughput/executor.py +31 -36
  57. parsl/executors/high_throughput/interchange.py +37 -38
  58. parsl/executors/high_throughput/manager_record.py +1 -0
  59. parsl/executors/high_throughput/monitoring_info.py +2 -1
  60. parsl/executors/high_throughput/mpi_executor.py +5 -2
  61. parsl/executors/high_throughput/mpi_prefix_composer.py +1 -1
  62. parsl/executors/high_throughput/mpi_resource_management.py +1 -2
  63. parsl/executors/high_throughput/probe.py +6 -4
  64. parsl/executors/high_throughput/process_worker_pool.py +31 -20
  65. parsl/executors/high_throughput/zmq_pipes.py +28 -14
  66. parsl/executors/radical/executor.py +15 -15
  67. parsl/executors/radical/rpex_master.py +1 -2
  68. parsl/executors/radical/rpex_resources.py +1 -2
  69. parsl/executors/radical/rpex_worker.py +2 -1
  70. parsl/executors/status_handling.py +5 -4
  71. parsl/executors/taskvine/__init__.py +1 -1
  72. parsl/executors/taskvine/errors.py +1 -1
  73. parsl/executors/taskvine/exec_parsl_function.py +2 -2
  74. parsl/executors/taskvine/executor.py +23 -24
  75. parsl/executors/taskvine/factory.py +1 -1
  76. parsl/executors/taskvine/manager.py +11 -13
  77. parsl/executors/threads.py +4 -5
  78. parsl/executors/workqueue/errors.py +1 -1
  79. parsl/executors/workqueue/exec_parsl_function.py +5 -4
  80. parsl/executors/workqueue/executor.py +26 -27
  81. parsl/executors/workqueue/parsl_coprocess.py +1 -1
  82. parsl/jobs/error_handlers.py +1 -1
  83. parsl/jobs/job_status_poller.py +2 -5
  84. parsl/jobs/states.py +1 -1
  85. parsl/jobs/strategy.py +2 -2
  86. parsl/launchers/__init__.py +12 -3
  87. parsl/launchers/errors.py +1 -1
  88. parsl/log_utils.py +1 -2
  89. parsl/monitoring/db_manager.py +16 -10
  90. parsl/monitoring/monitoring.py +11 -15
  91. parsl/monitoring/queries/pandas.py +1 -2
  92. parsl/monitoring/radios.py +2 -4
  93. parsl/monitoring/remote.py +13 -8
  94. parsl/monitoring/router.py +8 -11
  95. parsl/monitoring/types.py +2 -0
  96. parsl/monitoring/visualization/app.py +4 -2
  97. parsl/monitoring/visualization/models.py +0 -1
  98. parsl/monitoring/visualization/plots/default/workflow_plots.py +8 -4
  99. parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +1 -0
  100. parsl/monitoring/visualization/utils.py +0 -1
  101. parsl/monitoring/visualization/views.py +16 -9
  102. parsl/multiprocessing.py +0 -1
  103. parsl/process_loggers.py +1 -2
  104. parsl/providers/__init__.py +9 -12
  105. parsl/providers/ad_hoc/ad_hoc.py +1 -1
  106. parsl/providers/aws/aws.py +2 -3
  107. parsl/providers/azure/azure.py +4 -5
  108. parsl/providers/base.py +1 -1
  109. parsl/providers/cluster_provider.py +1 -1
  110. parsl/providers/cobalt/cobalt.py +3 -3
  111. parsl/providers/condor/condor.py +4 -2
  112. parsl/providers/errors.py +2 -2
  113. parsl/providers/googlecloud/googlecloud.py +2 -1
  114. parsl/providers/grid_engine/grid_engine.py +2 -2
  115. parsl/providers/kubernetes/kube.py +24 -9
  116. parsl/providers/local/local.py +5 -1
  117. parsl/providers/lsf/lsf.py +2 -2
  118. parsl/providers/pbspro/pbspro.py +1 -1
  119. parsl/providers/slurm/slurm.py +36 -27
  120. parsl/providers/torque/torque.py +1 -1
  121. parsl/serialize/__init__.py +8 -3
  122. parsl/serialize/base.py +1 -2
  123. parsl/serialize/concretes.py +5 -4
  124. parsl/serialize/proxystore.py +3 -2
  125. parsl/tests/__init__.py +1 -1
  126. parsl/tests/configs/ad_hoc_cluster_htex.py +4 -4
  127. parsl/tests/configs/azure_single_node.py +4 -5
  128. parsl/tests/configs/bridges.py +3 -2
  129. parsl/tests/configs/cc_in2p3.py +2 -2
  130. parsl/tests/configs/comet.py +2 -1
  131. parsl/tests/configs/ec2_single_node.py +1 -2
  132. parsl/tests/configs/ec2_spot.py +1 -2
  133. parsl/tests/configs/flux_local.py +11 -0
  134. parsl/tests/configs/frontera.py +3 -2
  135. parsl/tests/configs/htex_ad_hoc_cluster.py +2 -4
  136. parsl/tests/configs/htex_local.py +2 -3
  137. parsl/tests/configs/htex_local_alternate.py +8 -11
  138. parsl/tests/configs/htex_local_intask_staging.py +5 -7
  139. parsl/tests/configs/htex_local_rsync_staging.py +4 -6
  140. parsl/tests/configs/local_adhoc.py +1 -1
  141. parsl/tests/configs/local_radical.py +1 -3
  142. parsl/tests/configs/local_radical_mpi.py +2 -2
  143. parsl/tests/configs/midway.py +2 -2
  144. parsl/tests/configs/nscc_singapore.py +3 -3
  145. parsl/tests/configs/osg_htex.py +1 -1
  146. parsl/tests/configs/petrelkube.py +3 -2
  147. parsl/tests/configs/summit.py +1 -0
  148. parsl/tests/configs/swan_htex.py +2 -2
  149. parsl/tests/configs/taskvine_ex.py +3 -5
  150. parsl/tests/configs/theta.py +2 -2
  151. parsl/tests/configs/workqueue_ex.py +3 -4
  152. parsl/tests/conftest.py +8 -4
  153. parsl/tests/integration/test_channels/test_ssh_errors.py +1 -1
  154. parsl/tests/integration/test_stress/test_python_simple.py +3 -4
  155. parsl/tests/integration/test_stress/test_python_threads.py +3 -5
  156. parsl/tests/manual_tests/htex_local.py +4 -4
  157. parsl/tests/manual_tests/test_ad_hoc_htex.py +2 -1
  158. parsl/tests/manual_tests/test_basic.py +1 -0
  159. parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +4 -4
  160. parsl/tests/manual_tests/test_log_filter.py +3 -1
  161. parsl/tests/manual_tests/test_memory_limits.py +6 -6
  162. parsl/tests/manual_tests/test_regression_220.py +2 -1
  163. parsl/tests/manual_tests/test_udp_simple.py +4 -3
  164. parsl/tests/manual_tests/test_worker_count.py +3 -2
  165. parsl/tests/scaling_tests/htex_local.py +2 -2
  166. parsl/tests/scaling_tests/test_scale.py +0 -9
  167. parsl/tests/scaling_tests/vineex_condor.py +1 -2
  168. parsl/tests/scaling_tests/vineex_local.py +1 -2
  169. parsl/tests/site_tests/test_provider.py +3 -1
  170. parsl/tests/site_tests/test_site.py +2 -0
  171. parsl/tests/sites/test_affinity.py +7 -5
  172. parsl/tests/sites/test_dynamic_executor.py +3 -3
  173. parsl/tests/sites/test_ec2.py +3 -2
  174. parsl/tests/sites/test_local_adhoc.py +2 -1
  175. parsl/tests/sites/test_worker_info.py +4 -3
  176. parsl/tests/test_aalst_patterns.py +0 -1
  177. parsl/tests/test_bash_apps/test_apptimeout.py +2 -2
  178. parsl/tests/test_bash_apps/test_error_codes.py +1 -4
  179. parsl/tests/test_bash_apps/test_memoize_ignore_args.py +1 -0
  180. parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +2 -2
  181. parsl/tests/test_bash_apps/test_pipeline.py +1 -1
  182. parsl/tests/test_bash_apps/test_std_uri.py +4 -3
  183. parsl/tests/test_bash_apps/test_stdout.py +20 -2
  184. parsl/tests/test_callables.py +2 -2
  185. parsl/tests/test_checkpointing/test_python_checkpoint_1.py +1 -0
  186. parsl/tests/test_checkpointing/test_python_checkpoint_2.py +2 -1
  187. parsl/tests/test_checkpointing/test_regression_239.py +1 -1
  188. parsl/tests/test_checkpointing/test_task_exit.py +1 -1
  189. parsl/tests/test_docs/test_from_slides.py +2 -2
  190. parsl/tests/test_docs/test_kwargs.py +1 -1
  191. parsl/tests/test_docs/test_tutorial_1.py +1 -2
  192. parsl/tests/test_docs/test_workflow1.py +2 -2
  193. parsl/tests/test_docs/test_workflow2.py +0 -1
  194. parsl/tests/test_error_handling/test_rand_fail.py +2 -2
  195. parsl/tests/test_error_handling/test_resource_spec.py +4 -2
  196. parsl/tests/test_error_handling/test_retries.py +2 -1
  197. parsl/tests/test_error_handling/test_retry_handler.py +1 -0
  198. parsl/tests/test_error_handling/test_retry_handler_failure.py +2 -1
  199. parsl/tests/test_error_handling/test_serialization_fail.py +1 -1
  200. parsl/tests/test_error_handling/test_wrap_with_logs.py +1 -0
  201. parsl/tests/test_flux.py +1 -1
  202. parsl/tests/test_htex/test_command_client_timeout.py +9 -12
  203. parsl/tests/test_htex/test_connected_blocks.py +3 -2
  204. parsl/tests/test_htex/test_cpu_affinity_explicit.py +5 -2
  205. parsl/tests/test_htex/test_disconnected_blocks.py +6 -4
  206. parsl/tests/test_htex/test_drain.py +5 -5
  207. parsl/tests/test_htex/test_htex.py +1 -2
  208. parsl/tests/test_htex/test_managers_command.py +3 -2
  209. parsl/tests/test_htex/test_multiple_disconnected_blocks.py +6 -4
  210. parsl/tests/test_htex/test_zmq_binding.py +22 -6
  211. parsl/tests/test_monitoring/test_app_names.py +3 -2
  212. parsl/tests/test_monitoring/test_basic.py +4 -4
  213. parsl/tests/test_monitoring/test_db_locks.py +6 -3
  214. parsl/tests/test_monitoring/test_fuzz_zmq.py +6 -3
  215. parsl/tests/test_monitoring/test_htex_init_blocks_vs_monitoring.py +5 -5
  216. parsl/tests/test_monitoring/test_incomplete_futures.py +5 -3
  217. parsl/tests/test_monitoring/test_memoization_representation.py +4 -1
  218. parsl/tests/test_monitoring/test_stdouterr.py +4 -4
  219. parsl/tests/test_monitoring/test_viz_colouring.py +1 -0
  220. parsl/tests/test_mpi_apps/test_bad_mpi_config.py +1 -1
  221. parsl/tests/test_mpi_apps/test_mpi_mode_disabled.py +2 -0
  222. parsl/tests/test_mpi_apps/test_mpi_mode_enabled.py +7 -5
  223. parsl/tests/test_mpi_apps/test_mpi_prefix.py +4 -4
  224. parsl/tests/test_mpi_apps/test_mpi_scheduler.py +7 -2
  225. parsl/tests/test_mpi_apps/test_mpiex.py +4 -3
  226. parsl/tests/test_mpi_apps/test_resource_spec.py +9 -10
  227. parsl/tests/test_providers/test_cobalt_deprecation_warning.py +2 -0
  228. parsl/tests/test_providers/test_local_provider.py +2 -1
  229. parsl/tests/test_providers/test_pbspro_template.py +1 -1
  230. parsl/tests/test_providers/test_slurm_template.py +1 -1
  231. parsl/tests/test_providers/test_submiterror_deprecation.py +2 -1
  232. parsl/tests/test_python_apps/test_context_manager.py +99 -3
  233. parsl/tests/test_python_apps/test_dep_standard_futures.py +2 -1
  234. parsl/tests/test_python_apps/test_dependencies_deep.py +59 -0
  235. parsl/tests/test_python_apps/test_futures.py +2 -1
  236. parsl/tests/test_python_apps/test_join.py +0 -1
  237. parsl/tests/test_python_apps/test_lifted.py +3 -3
  238. parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +1 -0
  239. parsl/tests/test_python_apps/test_pluggable_future_resolution.py +1 -1
  240. parsl/tests/test_radical/test_mpi_funcs.py +1 -2
  241. parsl/tests/test_regression/test_1480.py +2 -1
  242. parsl/tests/test_regression/test_1653.py +2 -1
  243. parsl/tests/test_regression/test_2652.py +1 -0
  244. parsl/tests/test_regression/test_69a.py +0 -1
  245. parsl/tests/test_regression/test_854.py +4 -2
  246. parsl/tests/test_regression/test_97_parallelism_0.py +1 -2
  247. parsl/tests/test_regression/test_98.py +0 -1
  248. parsl/tests/test_scaling/test_block_error_handler.py +9 -4
  249. parsl/tests/test_scaling/test_scale_down.py +2 -3
  250. parsl/tests/test_scaling/test_scale_down_htex_auto_scale.py +4 -5
  251. parsl/tests/test_scaling/test_scale_down_htex_unregistered.py +3 -4
  252. parsl/tests/test_scaling/test_shutdown_scalein.py +1 -2
  253. parsl/tests/test_serialization/test_2555_caching_deserializer.py +1 -1
  254. parsl/tests/test_serialization/test_basic.py +2 -1
  255. parsl/tests/test_serialization/test_htex_code_cache.py +3 -4
  256. parsl/tests/test_serialization/test_pack_resource_spec.py +2 -1
  257. parsl/tests/test_serialization/test_proxystore_configured.py +10 -5
  258. parsl/tests/test_serialization/test_proxystore_impl.py +5 -3
  259. parsl/tests/test_shutdown/test_kill_monitoring.py +3 -2
  260. parsl/tests/test_staging/staging_provider.py +2 -2
  261. parsl/tests/test_staging/test_1316.py +3 -2
  262. parsl/tests/test_staging/test_docs_1.py +1 -1
  263. parsl/tests/test_staging/test_docs_2.py +2 -1
  264. parsl/tests/test_staging/test_elaborate_noop_file.py +2 -2
  265. parsl/tests/test_staging/test_staging_https.py +2 -2
  266. parsl/tests/test_staging/test_staging_stdout.py +4 -3
  267. parsl/tests/test_staging/test_zip_in.py +6 -8
  268. parsl/tests/test_staging/test_zip_out.py +7 -9
  269. parsl/tests/test_staging/test_zip_to_zip.py +6 -8
  270. parsl/tests/test_summary.py +2 -1
  271. parsl/tests/test_thread_parallelism.py +0 -1
  272. parsl/tests/test_threads/test_configs.py +1 -1
  273. parsl/tests/test_threads/test_lazy_errors.py +2 -1
  274. parsl/tests/unit/test_usage_tracking.py +45 -0
  275. parsl/usage_tracking/api.py +2 -3
  276. parsl/usage_tracking/levels.py +6 -0
  277. parsl/usage_tracking/usage.py +60 -39
  278. parsl/utils.py +13 -2
  279. parsl/version.py +1 -1
  280. {parsl-2024.5.27.data → parsl-2024.6.10.data}/scripts/exec_parsl_function.py +5 -4
  281. {parsl-2024.5.27.data → parsl-2024.6.10.data}/scripts/process_worker_pool.py +31 -20
  282. {parsl-2024.5.27.dist-info → parsl-2024.6.10.dist-info}/METADATA +2 -2
  283. parsl-2024.6.10.dist-info/RECORD +475 -0
  284. parsl-2024.5.27.dist-info/RECORD +0 -471
  285. {parsl-2024.5.27.data → parsl-2024.6.10.data}/scripts/parsl_coprocess.py +1 -1
  286. {parsl-2024.5.27.dist-info → parsl-2024.6.10.dist-info}/LICENSE +0 -0
  287. {parsl-2024.5.27.dist-info → parsl-2024.6.10.dist-info}/WHEEL +0 -0
  288. {parsl-2024.5.27.dist-info → parsl-2024.6.10.dist-info}/entry_points.txt +0 -0
  289. {parsl-2024.5.27.dist-info → parsl-2024.6.10.dist-info}/top_level.txt +0 -0
@@ -1,14 +1,13 @@
1
- import logging
2
- import typeguard
3
1
  import concurrent.futures as cf
4
-
2
+ import logging
5
3
  from typing import List, Optional
6
4
 
5
+ import typeguard
6
+
7
7
  from parsl.data_provider.staging import Staging
8
8
  from parsl.executors.base import ParslExecutor
9
- from parsl.utils import RepresentationMixin
10
9
  from parsl.executors.errors import UnsupportedFeatureError
11
-
10
+ from parsl.utils import RepresentationMixin
12
11
 
13
12
  logger = logging.getLogger(__name__)
14
13
 
@@ -1,7 +1,7 @@
1
1
  from typing import Optional
2
2
 
3
- from parsl.errors import ParslError
4
3
  from parsl.app.errors import AppException
4
+ from parsl.errors import ParslError
5
5
 
6
6
 
7
7
  class WorkQueueTaskFailure(AppException):
@@ -1,10 +1,11 @@
1
+ import pickle
2
+ import sys
3
+ import traceback
4
+
1
5
  from parsl.app.errors import RemoteExceptionWrapper
2
6
  from parsl.data_provider.files import File
3
- from parsl.utils import get_std_fname_mode
4
- import traceback
5
- import sys
6
- import pickle
7
7
  from parsl.serialize import serialize
8
+ from parsl.utils import get_std_fname_mode
8
9
 
9
10
  # This scripts executes a parsl function which is pickled in a file:
10
11
  #
@@ -3,50 +3,49 @@ Cooperative Computing Lab (CCL) at Notre Dame to provide a fault-tolerant,
3
3
  high-throughput system for delegating Parsl tasks to thousands of remote machines
4
4
  """
5
5
 
6
- import threading
7
- import multiprocessing
8
- import logging
9
- from concurrent.futures import Future
10
- from ctypes import c_bool
11
-
12
- import tempfile
13
6
  import hashlib
14
- import subprocess
7
+ import inspect
8
+ import itertools
9
+ import logging
10
+ import multiprocessing
15
11
  import os
16
- import socket
17
- import time
18
12
  import pickle
19
13
  import queue
20
- import inspect
21
14
  import shutil
22
- import itertools
15
+ import socket
16
+ import subprocess
17
+ import tempfile
18
+ import threading
19
+ import time
20
+ from collections import namedtuple
21
+ from concurrent.futures import Future
22
+ from ctypes import c_bool
23
+ from typing import Dict, List, Optional, Set, Union
24
+
25
+ import typeguard
23
26
 
24
- from parsl.serialize import pack_apply_message, deserialize
25
27
  import parsl.utils as putils
26
- from parsl.executors.errors import ExecutorError
27
28
  from parsl.data_provider.files import File
29
+ from parsl.data_provider.staging import Staging
28
30
  from parsl.errors import OptionalModuleMissing
31
+ from parsl.executors.errors import ExecutorError
29
32
  from parsl.executors.status_handling import BlockProviderExecutor
30
- from parsl.providers.base import ExecutionProvider
31
- from parsl.providers import LocalProvider, CondorProvider
32
33
  from parsl.executors.workqueue import exec_parsl_function
33
34
  from parsl.process_loggers import wrap_with_logs
35
+ from parsl.providers import CondorProvider, LocalProvider
36
+ from parsl.providers.base import ExecutionProvider
37
+ from parsl.serialize import deserialize, pack_apply_message
34
38
  from parsl.utils import setproctitle
35
39
 
36
- import typeguard
37
- from typing import Dict, List, Optional, Set, Union
38
- from parsl.data_provider.staging import Staging
39
-
40
- from .errors import WorkQueueTaskFailure
41
- from .errors import WorkQueueFailure
42
-
43
- from collections import namedtuple
40
+ from .errors import WorkQueueFailure, WorkQueueTaskFailure
44
41
 
45
42
  try:
46
43
  import work_queue as wq
47
- from work_queue import WorkQueue
48
- from work_queue import WORK_QUEUE_DEFAULT_PORT
49
- from work_queue import WORK_QUEUE_ALLOCATION_MODE_MAX_THROUGHPUT
44
+ from work_queue import (
45
+ WORK_QUEUE_ALLOCATION_MODE_MAX_THROUGHPUT,
46
+ WORK_QUEUE_DEFAULT_PORT,
47
+ WorkQueue,
48
+ )
50
49
  except ImportError:
51
50
  _work_queue_enabled = False
52
51
  WORK_QUEUE_DEFAULT_PORT = 0
@@ -1,8 +1,8 @@
1
1
  #! /usr/bin/env python3
2
2
 
3
- import socket
4
3
  import json
5
4
  import os
5
+ import socket
6
6
  import sys
7
7
 
8
8
  # If enabled, coprocess will print to stdout
@@ -3,8 +3,8 @@ from __future__ import annotations
3
3
  from typing import Dict, Tuple
4
4
 
5
5
  import parsl.executors.status_handling as status_handling
6
- from parsl.jobs.states import JobStatus, JobState
7
6
  from parsl.jobs.errors import TooManyJobFailuresError
7
+ from parsl.jobs.states import JobState, JobStatus
8
8
 
9
9
 
10
10
  def noop_error_handler(executor: status_handling.BlockProviderExecutor, status: Dict[str, JobStatus], threshold: int = 3) -> None:
@@ -1,13 +1,10 @@
1
1
  import logging
2
- from typing import List, Sequence, Optional, Union
2
+ from typing import List, Optional, Sequence, Union
3
3
 
4
- from parsl.jobs.strategy import Strategy
5
4
  from parsl.executors.status_handling import BlockProviderExecutor
6
-
7
-
5
+ from parsl.jobs.strategy import Strategy
8
6
  from parsl.utils import Timer
9
7
 
10
-
11
8
  logger = logging.getLogger(__name__)
12
9
 
13
10
 
parsl/jobs/states.py CHANGED
@@ -1,6 +1,6 @@
1
+ import logging
1
2
  import os
2
3
  from enum import IntEnum
3
- import logging
4
4
  from typing import Optional
5
5
 
6
6
  logger = logging.getLogger(__name__)
parsl/jobs/strategy.py CHANGED
@@ -1,7 +1,8 @@
1
1
  from __future__ import annotations
2
+
2
3
  import logging
3
- import time
4
4
  import math
5
+ import time
5
6
  import warnings
6
7
  from typing import Dict, List, Optional, Sequence, TypedDict
7
8
 
@@ -11,7 +12,6 @@ from parsl.executors.status_handling import BlockProviderExecutor
11
12
  from parsl.jobs.states import JobState
12
13
  from parsl.process_loggers import wrap_with_logs
13
14
 
14
-
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
17
 
@@ -1,6 +1,15 @@
1
- from parsl.launchers.launchers import SimpleLauncher, SingleNodeLauncher, \
2
- SrunLauncher, AprunLauncher, SrunMPILauncher, WrappedLauncher, \
3
- GnuParallelLauncher, MpiExecLauncher, MpiRunLauncher, JsrunLauncher
1
+ from parsl.launchers.launchers import (
2
+ AprunLauncher,
3
+ GnuParallelLauncher,
4
+ JsrunLauncher,
5
+ MpiExecLauncher,
6
+ MpiRunLauncher,
7
+ SimpleLauncher,
8
+ SingleNodeLauncher,
9
+ SrunLauncher,
10
+ SrunMPILauncher,
11
+ WrappedLauncher,
12
+ )
4
13
 
5
14
  __all__ = ['SimpleLauncher',
6
15
  'WrappedLauncher',
parsl/launchers/errors.py CHANGED
@@ -1,5 +1,5 @@
1
- from parsl.providers.errors import ExecutionProviderException
2
1
  from parsl.launchers.base import Launcher
2
+ from parsl.providers.errors import ExecutionProviderException
3
3
 
4
4
 
5
5
  class BadLauncher(ExecutionProviderException, TypeError):
parsl/log_utils.py CHANGED
@@ -12,10 +12,9 @@ provided for logging:
12
12
  """
13
13
  import io
14
14
  import logging
15
- import typeguard
16
-
17
15
  from typing import Optional
18
16
 
17
+ import typeguard
19
18
 
20
19
  DEFAULT_FORMAT = (
21
20
  "%(created)f %(asctime)s %(processName)s-%(process)d "
@@ -1,15 +1,14 @@
1
+ import datetime
1
2
  import logging
2
- import threading
3
- import queue
4
3
  import os
4
+ import queue
5
+ import threading
5
6
  import time
6
- import datetime
7
-
8
7
  from typing import Any, Dict, List, Optional, Set, Tuple, TypeVar, cast
9
8
 
10
- from parsl.log_utils import set_file_logger
11
9
  from parsl.dataflow.states import States
12
10
  from parsl.errors import OptionalModuleMissing
11
+ from parsl.log_utils import set_file_logger
13
12
  from parsl.monitoring.message_type import MessageType
14
13
  from parsl.monitoring.types import MonitoringMessage, TaggedMonitoringMessage
15
14
  from parsl.process_loggers import wrap_with_logs
@@ -21,11 +20,18 @@ X = TypeVar('X')
21
20
 
22
21
  try:
23
22
  import sqlalchemy as sa
24
- from sqlalchemy import Column, Text, Float, Boolean, BigInteger, Integer, DateTime, PrimaryKeyConstraint, Table
25
- from sqlalchemy.orm import Mapper
26
- from sqlalchemy.orm import mapperlib
27
- from sqlalchemy.orm import sessionmaker
28
- from sqlalchemy.orm import declarative_base
23
+ from sqlalchemy import (
24
+ BigInteger,
25
+ Boolean,
26
+ Column,
27
+ DateTime,
28
+ Float,
29
+ Integer,
30
+ PrimaryKeyConstraint,
31
+ Table,
32
+ Text,
33
+ )
34
+ from sqlalchemy.orm import Mapper, declarative_base, mapperlib, sessionmaker
29
35
  except ImportError:
30
36
  _sqlalchemy_enabled = False
31
37
  else:
@@ -1,29 +1,25 @@
1
1
  from __future__ import annotations
2
2
 
3
- import os
4
- import time
5
3
  import logging
6
4
  import multiprocessing.synchronize as ms
7
- import typeguard
8
-
5
+ import os
9
6
  import queue
10
-
11
- from parsl.multiprocessing import ForkProcess, SizedQueue
12
- from multiprocessing import Process
13
- from multiprocessing import Event
7
+ import time
8
+ from multiprocessing import Event, Process
14
9
  from multiprocessing.queues import Queue
15
- from parsl.log_utils import set_file_logger
16
- from parsl.utils import RepresentationMixin
17
- from parsl.process_loggers import wrap_with_logs
18
- from parsl.utils import setproctitle
10
+ from typing import TYPE_CHECKING, Any, Optional, Tuple, Union, cast
19
11
 
20
- from parsl.serialize import deserialize
12
+ import typeguard
21
13
 
14
+ from parsl.log_utils import set_file_logger
15
+ from parsl.monitoring.message_type import MessageType
22
16
  from parsl.monitoring.radios import MultiprocessingQueueRadio
23
17
  from parsl.monitoring.router import router_starter
24
- from parsl.monitoring.message_type import MessageType
25
18
  from parsl.monitoring.types import AddressedMonitoringMessage
26
- from typing import cast, Any, Optional, Tuple, Union, TYPE_CHECKING
19
+ from parsl.multiprocessing import ForkProcess, SizedQueue
20
+ from parsl.process_loggers import wrap_with_logs
21
+ from parsl.serialize import deserialize
22
+ from parsl.utils import RepresentationMixin, setproctitle
27
23
 
28
24
  _db_manager_excepts: Optional[Exception]
29
25
 
@@ -1,7 +1,6 @@
1
- import pandas as pd
2
-
3
1
  from typing import Any
4
2
 
3
+ import pandas as pd
5
4
 
6
5
  # pandas can take several different types of database connection,
7
6
  # and itself exposes its connection parameters as "Any".
@@ -1,11 +1,9 @@
1
+ import logging
1
2
  import os
2
- import socket
3
3
  import pickle
4
+ import socket
4
5
  import uuid
5
- import logging
6
-
7
6
  from abc import ABCMeta, abstractmethod
8
-
9
7
  from multiprocessing.queues import Queue
10
8
  from typing import Optional
11
9
 
@@ -1,16 +1,20 @@
1
+ import datetime
2
+ import logging
1
3
  import os
2
4
  import time
3
- import logging
4
- import datetime
5
5
  from functools import wraps
6
-
7
- from parsl.multiprocessing import ForkProcess
8
6
  from multiprocessing import Event
9
- from parsl.process_loggers import wrap_with_logs
7
+ from typing import Any, Callable, Dict, List, Sequence, Tuple
10
8
 
11
9
  from parsl.monitoring.message_type import MessageType
12
- from parsl.monitoring.radios import MonitoringRadio, UDPRadio, HTEXRadio, FilesystemRadio
13
- from typing import Any, Callable, Dict, List, Sequence, Tuple
10
+ from parsl.monitoring.radios import (
11
+ FilesystemRadio,
12
+ HTEXRadio,
13
+ MonitoringRadio,
14
+ UDPRadio,
15
+ )
16
+ from parsl.multiprocessing import ForkProcess
17
+ from parsl.process_loggers import wrap_with_logs
14
18
 
15
19
  logger = logging.getLogger(__name__)
16
20
 
@@ -135,8 +139,8 @@ def send_first_last_message(try_id: int,
135
139
  monitoring_hub_url: str,
136
140
  run_id: str, radio_mode: str, run_dir: str,
137
141
  is_last: bool) -> None:
138
- import platform
139
142
  import os
143
+ import platform
140
144
 
141
145
  radio = get_radio(radio_mode, monitoring_hub_url, task_id, run_dir)
142
146
 
@@ -177,6 +181,7 @@ def monitor(pid: int,
177
181
  """
178
182
  import logging
179
183
  import platform
184
+
180
185
  import psutil
181
186
 
182
187
  from parsl.utils import setproctitle
@@ -1,24 +1,21 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import logging
3
4
  import os
5
+ import pickle
6
+ import queue
4
7
  import socket
5
8
  import time
6
- import pickle
7
- import logging
8
- import zmq
9
+ from multiprocessing.synchronize import Event
10
+ from typing import Optional, Tuple, Union
9
11
 
10
- import queue
12
+ import zmq
11
13
 
12
14
  from parsl.log_utils import set_file_logger
13
- from parsl.process_loggers import wrap_with_logs
14
- from parsl.utils import setproctitle
15
-
16
15
  from parsl.monitoring.message_type import MessageType
17
16
  from parsl.monitoring.types import AddressedMonitoringMessage, TaggedMonitoringMessage
18
-
19
- from multiprocessing.synchronize import Event
20
- from typing import Optional, Tuple, Union
21
-
17
+ from parsl.process_loggers import wrap_with_logs
18
+ from parsl.utils import setproctitle
22
19
 
23
20
  logger = logging.getLogger(__name__)
24
21
 
parsl/monitoring/types.py CHANGED
@@ -1,5 +1,7 @@
1
1
  from typing import Any, Dict, Tuple, Union
2
+
2
3
  from typing_extensions import TypeAlias
4
+
3
5
  from parsl.monitoring.message_type import MessageType
4
6
 
5
7
  # A basic parsl monitoring message is wrapped by up to two wrappers:
@@ -1,8 +1,10 @@
1
- from flask import Flask
2
- from parsl.monitoring.visualization.models import db
3
1
  import argparse
4
2
  import os
5
3
 
4
+ from flask import Flask
5
+
6
+ from parsl.monitoring.visualization.models import db
7
+
6
8
 
7
9
  def cli_run():
8
10
  """ Instantiates the Monitoring viz server
@@ -1,6 +1,5 @@
1
1
  from flask_sqlalchemy import SQLAlchemy
2
2
 
3
-
4
3
  WORKFLOW = 'workflow' # Workflow table includes workflow metadata
5
4
  TASK = 'task' # Task table includes task metadata
6
5
  STATUS = 'status' # Status table includes task status
@@ -1,13 +1,17 @@
1
1
  import math
2
+
3
+ import networkx as nx
2
4
  import numpy as np
3
5
  import pandas as pd
4
- import plotly.graph_objs as go
5
6
  import plotly.figure_factory as ff
7
+ import plotly.graph_objs as go
6
8
  from plotly.offline import plot
7
- import networkx as nx
8
-
9
- from parsl.monitoring.visualization.utils import timestamp_to_int, num_to_timestamp, DB_DATE_FORMAT
10
9
 
10
+ from parsl.monitoring.visualization.utils import (
11
+ DB_DATE_FORMAT,
12
+ num_to_timestamp,
13
+ timestamp_to_int,
14
+ )
11
15
 
12
16
  # gantt_colors must assign a color value for every state name defined
13
17
  # in parsl/dataflow/states.py
@@ -1,4 +1,5 @@
1
1
  import math
2
+
2
3
  import numpy as np
3
4
  import pandas as pd
4
5
  import plotly.graph_objs as go
@@ -1,6 +1,5 @@
1
1
  from datetime import datetime
2
2
 
3
-
4
3
  DB_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
5
4
 
6
5
 
@@ -1,15 +1,22 @@
1
- from flask import render_template
2
- from flask import current_app as app
3
1
  import pandas as pd
2
+ from flask import current_app as app
3
+ from flask import render_template
4
4
 
5
5
  import parsl.monitoring.queries.pandas as queries
6
-
7
- from parsl.monitoring.visualization.models import Workflow, Task, Status, db
8
-
9
- from parsl.monitoring.visualization.plots.default.workflow_plots import task_gantt_plot, task_per_app_plot, workflow_dag_plot
10
- from parsl.monitoring.visualization.plots.default.task_plots import time_series_memory_per_task_plot
11
- from parsl.monitoring.visualization.plots.default.workflow_resource_plots import (resource_distribution_plot,
12
- resource_efficiency, worker_efficiency)
6
+ from parsl.monitoring.visualization.models import Status, Task, Workflow, db
7
+ from parsl.monitoring.visualization.plots.default.task_plots import (
8
+ time_series_memory_per_task_plot,
9
+ )
10
+ from parsl.monitoring.visualization.plots.default.workflow_plots import (
11
+ task_gantt_plot,
12
+ task_per_app_plot,
13
+ workflow_dag_plot,
14
+ )
15
+ from parsl.monitoring.visualization.plots.default.workflow_resource_plots import (
16
+ resource_distribution_plot,
17
+ resource_efficiency,
18
+ worker_efficiency,
19
+ )
13
20
 
14
21
  dummy = True
15
22
 
parsl/multiprocessing.py CHANGED
@@ -6,7 +6,6 @@ import multiprocessing
6
6
  import multiprocessing.queues
7
7
  import platform
8
8
  from multiprocessing.context import ForkProcess as ForkProcessType
9
-
10
9
  from typing import Callable
11
10
 
12
11
  logger = logging.getLogger(__name__)
parsl/process_loggers.py CHANGED
@@ -1,7 +1,6 @@
1
+ import functools
1
2
  import logging
2
3
  import threading
3
- import functools
4
-
5
4
  from typing import Callable, Optional
6
5
 
7
6
 
@@ -1,24 +1,21 @@
1
1
  # Workstation Provider
2
- from parsl.providers.local.local import LocalProvider
3
-
4
- # Cluster Providers
5
-
6
- from parsl.providers.cobalt.cobalt import CobaltProvider
7
- from parsl.providers.condor.condor import CondorProvider
8
- from parsl.providers.grid_engine.grid_engine import GridEngineProvider
9
- from parsl.providers.slurm.slurm import SlurmProvider
10
- from parsl.providers.torque.torque import TorqueProvider
11
- from parsl.providers.pbspro.pbspro import PBSProProvider
12
- from parsl.providers.lsf.lsf import LSFProvider
13
2
  from parsl.providers.ad_hoc.ad_hoc import AdHocProvider
14
3
 
15
4
  # Cloud Providers
16
5
  from parsl.providers.aws.aws import AWSProvider
17
- from parsl.providers.googlecloud.googlecloud import GoogleCloudProvider
18
6
  from parsl.providers.azure.azure import AzureProvider
7
+ from parsl.providers.cobalt.cobalt import CobaltProvider
8
+ from parsl.providers.condor.condor import CondorProvider
9
+ from parsl.providers.googlecloud.googlecloud import GoogleCloudProvider
10
+ from parsl.providers.grid_engine.grid_engine import GridEngineProvider
19
11
 
20
12
  # Kubernetes
21
13
  from parsl.providers.kubernetes.kube import KubernetesProvider
14
+ from parsl.providers.local.local import LocalProvider
15
+ from parsl.providers.lsf.lsf import LSFProvider
16
+ from parsl.providers.pbspro.pbspro import PBSProProvider
17
+ from parsl.providers.slurm.slurm import SlurmProvider
18
+ from parsl.providers.torque.torque import TorqueProvider
22
19
 
23
20
  __all__ = ['LocalProvider',
24
21
  'CobaltProvider',
@@ -3,7 +3,7 @@ import os
3
3
  import time
4
4
 
5
5
  from parsl.channels import LocalChannel
6
- from parsl.jobs.states import JobStatus, JobState
6
+ from parsl.jobs.states import JobState, JobStatus
7
7
  from parsl.launchers import SimpleLauncher
8
8
  from parsl.providers.base import ExecutionProvider
9
9
  from parsl.providers.errors import ScriptPathError
@@ -4,13 +4,12 @@ import os
4
4
  import time
5
5
  from string import Template
6
6
 
7
- from parsl.errors import ConfigurationError
7
+ from parsl.errors import ConfigurationError, OptionalModuleMissing
8
8
  from parsl.jobs.states import JobState, JobStatus
9
+ from parsl.launchers import SingleNodeLauncher
9
10
  from parsl.providers.aws.template import template_string
10
11
  from parsl.providers.base import ExecutionProvider
11
- from parsl.errors import OptionalModuleMissing
12
12
  from parsl.utils import RepresentationMixin
13
- from parsl.launchers import SingleNodeLauncher
14
13
 
15
14
  logger = logging.getLogger(__name__)
16
15
 
@@ -4,22 +4,21 @@ import os
4
4
  import time
5
5
  from string import Template
6
6
 
7
- from parsl.errors import ConfigurationError
7
+ from parsl.errors import ConfigurationError, OptionalModuleMissing
8
8
  from parsl.jobs.states import JobState, JobStatus
9
+ from parsl.launchers import SingleNodeLauncher
9
10
  from parsl.providers.azure.template import template_string
10
11
  from parsl.providers.base import ExecutionProvider
11
- from parsl.errors import OptionalModuleMissing
12
12
  from parsl.utils import RepresentationMixin
13
- from parsl.launchers import SingleNodeLauncher
14
13
 
15
14
  logger = logging.getLogger(__name__)
16
15
 
17
16
  try:
18
17
  from azure.common.credentials import ServicePrincipalCredentials
19
- from azure.mgmt.resource import ResourceManagementClient
20
- from azure.mgmt.network import NetworkManagementClient
21
18
  from azure.mgmt.compute import ComputeManagementClient
22
19
  from azure.mgmt.compute.models import DiskCreateOption
20
+ from azure.mgmt.network import NetworkManagementClient
21
+ from azure.mgmt.resource import ResourceManagementClient
23
22
  from msrestazure.azure_exceptions import CloudError
24
23
 
25
24
  _api_enabled = True
parsl/providers/base.py CHANGED
@@ -1,5 +1,5 @@
1
- from abc import ABCMeta, abstractmethod, abstractproperty
2
1
  import logging
2
+ from abc import ABCMeta, abstractmethod, abstractproperty
3
3
  from typing import Any, Dict, List, Optional
4
4
 
5
5
  from parsl.channels.base import Channel
@@ -2,10 +2,10 @@ import logging
2
2
  from abc import abstractmethod
3
3
  from string import Template
4
4
 
5
- from parsl.providers.errors import SchedulerMissingArgs, ScriptPathError
6
5
  from parsl.launchers.base import Launcher
7
6
  from parsl.launchers.errors import BadLauncher
8
7
  from parsl.providers.base import ExecutionProvider
8
+ from parsl.providers.errors import SchedulerMissingArgs, ScriptPathError
9
9
 
10
10
  logger = logging.getLogger(__name__)
11
11
 
@@ -3,12 +3,12 @@ import os
3
3
  import time
4
4
  import warnings
5
5
 
6
- from parsl.providers.errors import ScaleOutFailed
7
6
  from parsl.channels import LocalChannel
7
+ from parsl.jobs.states import JobState, JobStatus
8
8
  from parsl.launchers import AprunLauncher
9
- from parsl.providers.cobalt.template import template_string
10
9
  from parsl.providers.cluster_provider import ClusterProvider
11
- from parsl.jobs.states import JobState, JobStatus
10
+ from parsl.providers.cobalt.template import template_string
11
+ from parsl.providers.errors import ScaleOutFailed
12
12
  from parsl.utils import RepresentationMixin, wtime_to_minutes
13
13
 
14
14
  logger = logging.getLogger(__name__)