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