parsl 2023.7.10__tar.gz → 2023.7.17__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-2023.7.10/parsl.egg-info → parsl-2023.7.17}/PKG-INFO +2 -2
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/high_throughput/executor.py +2 -3
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/high_throughput/process_worker_pool.py +2 -3
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/serialize/concretes.py +0 -19
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/conftest.py +71 -3
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_htex_worker_failure.py +5 -12
- parsl-2023.7.17/parsl/tests/test_regression/test_1606_wait_for_current_tasks.py +42 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_scaling/test_regression_1621.py +26 -20
- parsl-2023.7.17/parsl/tests/test_scaling/test_scale_down.py +97 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/version.py +1 -1
- {parsl-2023.7.10 → parsl-2023.7.17/parsl.egg-info}/PKG-INFO +2 -2
- parsl-2023.7.10/parsl/tests/test_regression/test_1606_wait_for_current_tasks.py +0 -17
- parsl-2023.7.10/parsl/tests/test_scaling/test_scale_down.py +0 -80
- {parsl-2023.7.10 → parsl-2023.7.17}/LICENSE +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/MANIFEST.in +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/README.rst +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/addresses.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/app/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/app/app.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/app/bash.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/app/errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/app/futures.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/app/python.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/benchmark/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/benchmark/perf.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/base.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/local/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/local/local.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/oauth_ssh/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/oauth_ssh/oauth_ssh.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/ssh/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/ssh/ssh.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/ssh_il/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/channels/ssh_il/ssh_il.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/concurrent/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/config.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/ASPIRE1.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/Azure.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/ad_hoc.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/bluewaters.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/bridges.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/cc_in2p3.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/comet.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/cooley.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/ec2.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/frontera.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/htex_local.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/illinoiscluster.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/kubernetes.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/local_threads.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/midway.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/osg.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/polaris.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/stampede2.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/summit.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/theta.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/toss3_llnl.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/vineex_local.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/configs/wqex_local.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/data_provider/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/data_provider/data_manager.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/data_provider/file_noop.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/data_provider/files.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/data_provider/ftp.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/data_provider/globus.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/data_provider/http.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/data_provider/rsync.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/data_provider/staging.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/dflow.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/executor_status.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/futures.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/job_error_handler.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/job_status_poller.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/memoization.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/rundirs.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/states.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/strategy.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/dataflow/taskrecord.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/base.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/flux/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/flux/execute_parsl_task.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/flux/executor.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/flux/flux_instance_manager.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/high_throughput/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/high_throughput/errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/high_throughput/interchange.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/high_throughput/manager_record.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/high_throughput/monitoring_info.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/high_throughput/probe.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/high_throughput/zmq_pipes.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/status_handling.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/taskvine/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/taskvine/errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/taskvine/exec_parsl_function.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/taskvine/executor.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/threads.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/workqueue/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/workqueue/errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/workqueue/exec_parsl_function.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/workqueue/executor.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/workqueue/parsl_coprocess.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/executors/workqueue/parsl_coprocess_stub.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/launchers/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/launchers/base.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/launchers/errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/launchers/launchers.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/log_utils.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/db_manager.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/message_type.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/monitoring.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/queries/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/queries/pandas.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/radios.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/remote.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/types.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/app.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/models.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/plots/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/plots/default/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/plots/default/task_plots.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/plots/default/workflow_plots.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/plots/default/workflow_resource_plots.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/static/parsl-logo-white.png +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/static/parsl-monitor.css +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/templates/app.html +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/templates/dag.html +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/templates/error.html +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/templates/layout.html +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/templates/resource_usage.html +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/templates/task.html +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/templates/workflow.html +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/templates/workflows_summary.html +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/utils.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/version.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/monitoring/visualization/views.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/multiprocessing.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/process_loggers.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/ad_hoc/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/ad_hoc/ad_hoc.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/aws/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/aws/aws.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/aws/template.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/azure/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/azure/azure.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/azure/template.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/base.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/cluster_provider.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/cobalt/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/cobalt/cobalt.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/cobalt/template.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/condor/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/condor/condor.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/condor/template.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/googlecloud/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/googlecloud/googlecloud.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/grid_engine/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/grid_engine/grid_engine.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/grid_engine/template.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/kubernetes/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/kubernetes/kube.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/kubernetes/template.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/local/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/local/local.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/lsf/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/lsf/lsf.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/lsf/template.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/pbspro/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/pbspro/pbspro.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/pbspro/template.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/slurm/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/slurm/slurm.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/slurm/template.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/torque/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/torque/template.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/providers/torque/torque.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/py.typed +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/serialize/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/serialize/base.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/serialize/facade.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/callables_helper.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/ad_hoc_cluster_htex.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/azure_single_node.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/bluewaters.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/bridges.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/cc_in2p3.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/comet.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/cooley_htex.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/ec2_single_node.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/ec2_spot.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/frontera.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/htex_ad_hoc_cluster.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/htex_local.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/htex_local_alternate.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/htex_local_intask_staging.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/htex_local_rsync_staging.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_adhoc.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_threads.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_threads_checkpoint.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_threads_checkpoint_dfk_exit.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_threads_checkpoint_periodic.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_threads_checkpoint_task_exit.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_threads_ftp_in_task.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_threads_globus.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_threads_http_in_task.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_threads_monitoring.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/local_threads_no_cache.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/midway.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/nscc_singapore.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/osg_htex.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/petrelkube.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/summit.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/swan_htex.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/taskvine_ex.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/theta.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/user_opts.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/configs/workqueue_ex.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/latency.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_apps/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_channels/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_channels/test_channels.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_channels/test_local_channel.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_channels/test_scp_1.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_channels/test_ssh_1.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_channels/test_ssh_errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_channels/test_ssh_file_transport.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_channels/test_ssh_interactive.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_parsl_load_default_config.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_stress/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_stress/test_python_simple.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/integration/test_stress/test_python_threads.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/htex_local.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/test_ad_hoc_htex.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/test_basic.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/test_fan_in_out_htex_remote.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/test_log_filter.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/test_memory_limits.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/test_oauth_ssh.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/test_regression_220.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/test_udp_simple.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/manual_tests/test_worker_count.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/scaling_tests/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/scaling_tests/htex_local.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/scaling_tests/local_threads.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/scaling_tests/test_scale.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/scaling_tests/vineex_condor.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/scaling_tests/vineex_local.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/scaling_tests/wqex_condor.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/scaling_tests/wqex_local.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/site_tests/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/site_tests/site_config_selector.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/site_tests/test_provider.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/site_tests/test_site.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/sites/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/sites/test_affinity.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/sites/test_concurrent.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/sites/test_dynamic_executor.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/sites/test_ec2.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/sites/test_launchers.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/sites/test_local_adhoc.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/sites/test_mpi/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/sites/test_start_method.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/sites/test_worker_info.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_aalst_patterns.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_apptimeout.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_basic.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_error_codes.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_keyword_overlaps.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_kwarg_storage.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_memoize.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_memoize_ignore_args.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_memoize_ignore_args_regr.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_multiline.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_pipeline.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_bash_apps/test_stdout.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_callables.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_channels/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_channels/test_large_output.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_checkpointing/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_checkpointing/test_periodic.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_checkpointing/test_python_checkpoint_1.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_checkpointing/test_python_checkpoint_2.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_checkpointing/test_python_checkpoint_3.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_checkpointing/test_regression_232.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_checkpointing/test_regression_233.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_checkpointing/test_regression_239.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_checkpointing/test_task_exit.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_data/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_data/test_file.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_data/test_file_apps.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_data/test_file_staging.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_data/test_output_chain_filenames.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_docs/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_docs/test_from_slides.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_docs/test_tutorial_1.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_docs/test_workflow1.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_docs/test_workflow2.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_docs/test_workflow3.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_docs/test_workflow4.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_fail.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_htex_basic.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_htex_missing_worker.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_python_walltime.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_rand_fail.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_resource_spec.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_retries.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_retry_handler.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_retry_handler_failure.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_serialization_fail.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_wrap_with_logs.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_flowcontrol/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_flux.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_monitoring/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_monitoring/test_basic.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_monitoring/test_db_locks.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_monitoring/test_fuzz_zmq.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_monitoring/test_memoization_representation.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_monitoring/test_viz_colouring.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_providers/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_providers/test_local_provider.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_arg_input_types.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_basic.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_dep_standard_futures.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_dependencies.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_depfail_propagation.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_fail.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_fibonacci_iterative.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_fibonacci_recursive.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_futures.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_garbage_collect.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_import_fail.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_join.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_mapred.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_memoize_1.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_memoize_2.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_memoize_4.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_memoize_bad_id_for_memo.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_memoize_ignore_args.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_memoize_joinapp.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_outputs.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_overview.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_pipeline.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_simple.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_timeout.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_python_apps/test_type5.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/test_1480.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/test_1653.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/test_221.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/test_226.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/test_2652.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/test_69a.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/test_69b.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/test_854.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/test_97_parallelism_0.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_regression/test_98.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_scaling/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_serialization/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_serialization/test_2555_caching_deserializer.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_serialization/test_basic.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/staging_provider.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/test_1316.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/test_docs_1.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/test_docs_2.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/test_elaborate_noop_file.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/test_staging_ftp.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/test_staging_ftp_in_task.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/test_staging_globus.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/test_staging_https.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_staging/test_staging_https_in_task.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_summary.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_thread_parallelism.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_threads/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_threads/test_configs.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_threads/test_lazy_errors.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/utils.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/usage_tracking/__init__.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/usage_tracking/usage.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl/utils.py +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl.egg-info/SOURCES.txt +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl.egg-info/dependency_links.txt +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl.egg-info/entry_points.txt +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl.egg-info/requires.txt +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/parsl.egg-info/top_level.txt +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/requirements.txt +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/setup.cfg +0 -0
- {parsl-2023.7.10 → parsl-2023.7.17}/setup.py +0 -0
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2023.7.
|
3
|
+
Version: 2023.7.17
|
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/2023.07.
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2023.07.17.tar.gz
|
7
7
|
Author: The Parsl Team
|
8
8
|
Author-email: parsl@googlegroups.com
|
9
9
|
License: Apache 2.0
|
@@ -595,10 +595,9 @@ class HighThroughputExecutor(BlockProviderExecutor, RepresentationMixin):
|
|
595
595
|
except TypeError:
|
596
596
|
raise SerializationError(func.__name__)
|
597
597
|
|
598
|
-
msg = {"task_id": task_id,
|
599
|
-
"buffer": fn_buf}
|
598
|
+
msg = {"task_id": task_id, "buffer": fn_buf}
|
600
599
|
|
601
|
-
# Post task to the
|
600
|
+
# Post task to the outgoing queue
|
602
601
|
self.outgoing_q.put(msg)
|
603
602
|
|
604
603
|
# Return the future
|
@@ -370,7 +370,7 @@ class Manager:
|
|
370
370
|
logger.critical("Exiting")
|
371
371
|
|
372
372
|
@wrap_with_logs
|
373
|
-
def worker_watchdog(self, kill_event):
|
373
|
+
def worker_watchdog(self, kill_event: threading.Event):
|
374
374
|
"""Keeps workers alive.
|
375
375
|
|
376
376
|
Parameters:
|
@@ -381,7 +381,7 @@ class Manager:
|
|
381
381
|
|
382
382
|
logger.debug("Starting worker watchdog")
|
383
383
|
|
384
|
-
while not kill_event.
|
384
|
+
while not kill_event.wait(self.heartbeat_period):
|
385
385
|
for worker_id, p in self.procs.items():
|
386
386
|
if not p.is_alive():
|
387
387
|
logger.error("Worker {} has died".format(worker_id))
|
@@ -409,7 +409,6 @@ class Manager:
|
|
409
409
|
name="HTEX-Worker-{}".format(worker_id))
|
410
410
|
self.procs[worker_id] = p
|
411
411
|
logger.info("Worker {} has been restarted".format(worker_id))
|
412
|
-
time.sleep(self.heartbeat_period)
|
413
412
|
|
414
413
|
logger.critical("Exiting")
|
415
414
|
|
@@ -28,25 +28,6 @@ class PickleSerializer(SerializerBase):
|
|
28
28
|
return pickle.loads(body)
|
29
29
|
|
30
30
|
|
31
|
-
class PickleCallableSerializer(SerializerBase):
|
32
|
-
"""This serializer is a variant of the PickleSerializer that will
|
33
|
-
serialize and deserialize callables using an lru_cache, under the
|
34
|
-
assumption that callables are immutable and so can be cached.
|
35
|
-
"""
|
36
|
-
|
37
|
-
_identifier = b'C1'
|
38
|
-
_for_code = True
|
39
|
-
_for_data = False
|
40
|
-
|
41
|
-
@functools.lru_cache
|
42
|
-
def serialize(self, data: Any) -> bytes:
|
43
|
-
return pickle.dumps(data)
|
44
|
-
|
45
|
-
@functools.lru_cache
|
46
|
-
def deserialize(self, body: bytes) -> Any:
|
47
|
-
return pickle.loads(body)
|
48
|
-
|
49
|
-
|
50
31
|
class DillSerializer(SerializerBase):
|
51
32
|
""" Dill serialization works on a superset of object including the ones covered by pickle.
|
52
33
|
However for most cases pickle is faster. For most callable objects the additional overhead
|
@@ -1,12 +1,16 @@
|
|
1
1
|
import importlib.util
|
2
|
+
import itertools
|
2
3
|
import logging
|
3
4
|
import os
|
4
5
|
import pathlib
|
6
|
+
import time
|
7
|
+
import types
|
5
8
|
import signal
|
6
9
|
import sys
|
7
10
|
import tempfile
|
8
11
|
import threading
|
9
12
|
import traceback
|
13
|
+
import typing as t
|
10
14
|
from datetime import datetime
|
11
15
|
from glob import glob
|
12
16
|
from itertools import chain
|
@@ -157,9 +161,9 @@ def load_dfk_local_module(request, pytestconfig):
|
|
157
161
|
parsl.load. It should be a Callable that returns a parsl Config object.
|
158
162
|
|
159
163
|
If local_setup and/or local_teardown are callables (such as functions) in
|
160
|
-
the test module, they
|
161
|
-
|
162
|
-
|
164
|
+
the test module, they will be invoked before/after the tests. This can
|
165
|
+
be used to perform more interesting DFK initialisation not possible with
|
166
|
+
local_config.
|
163
167
|
"""
|
164
168
|
|
165
169
|
config = pytestconfig.getoption('config')[0]
|
@@ -290,3 +294,67 @@ def pytest_ignore_collect(path):
|
|
290
294
|
return True
|
291
295
|
else:
|
292
296
|
return False
|
297
|
+
|
298
|
+
|
299
|
+
def create_traceback(start: int = 0) -> t.Optional[types.TracebackType]:
|
300
|
+
"""
|
301
|
+
Dynamically create a traceback.
|
302
|
+
|
303
|
+
Builds a traceback from the top of the stack (the currently executing frame) on
|
304
|
+
down to the root frame. Optionally, use start to build from an earlier stack
|
305
|
+
frame.
|
306
|
+
|
307
|
+
N.B. uses `sys._getframe`, which I only know to exist in CPython.
|
308
|
+
"""
|
309
|
+
tb = None
|
310
|
+
for depth in itertools.count(start + 1, 1):
|
311
|
+
try:
|
312
|
+
frame = sys._getframe(depth)
|
313
|
+
tb = types.TracebackType(tb, frame, frame.f_lasti, frame.f_lineno)
|
314
|
+
except ValueError:
|
315
|
+
break
|
316
|
+
return tb
|
317
|
+
|
318
|
+
|
319
|
+
@pytest.fixture
|
320
|
+
def try_assert():
|
321
|
+
def _impl(
|
322
|
+
test_func: t.Callable[[], bool],
|
323
|
+
fail_msg: str = "",
|
324
|
+
timeout_ms: float = 5000,
|
325
|
+
attempts: int = 0,
|
326
|
+
check_period_ms: int = 20,
|
327
|
+
):
|
328
|
+
tb = create_traceback(start=1)
|
329
|
+
timeout_s = abs(timeout_ms) / 1000.0
|
330
|
+
check_period_s = abs(check_period_ms) / 1000.0
|
331
|
+
if attempts > 0:
|
332
|
+
for _attempt_no in range(attempts):
|
333
|
+
if test_func():
|
334
|
+
return
|
335
|
+
time.sleep(check_period_s)
|
336
|
+
else:
|
337
|
+
att_fail = (
|
338
|
+
f"\n (Still failing after attempt limit [{attempts}], testing"
|
339
|
+
f" every {check_period_ms}ms)"
|
340
|
+
)
|
341
|
+
exc = AssertionError(f"{str(fail_msg)}{att_fail}".strip())
|
342
|
+
raise exc.with_traceback(tb)
|
343
|
+
|
344
|
+
elif timeout_s > 0:
|
345
|
+
end = time.monotonic() + timeout_s
|
346
|
+
while time.monotonic() < end:
|
347
|
+
if test_func():
|
348
|
+
return
|
349
|
+
time.sleep(check_period_s)
|
350
|
+
att_fail = (
|
351
|
+
f"\n (Still failing after timeout [{timeout_ms}ms], with attempts "
|
352
|
+
f"every {check_period_ms}ms)"
|
353
|
+
)
|
354
|
+
exc = AssertionError(f"{str(fail_msg)}{att_fail}".strip())
|
355
|
+
raise exc.with_traceback(tb)
|
356
|
+
|
357
|
+
else:
|
358
|
+
raise AssertionError("Bad assert call: no attempts or timeout period")
|
359
|
+
|
360
|
+
yield _impl
|
{parsl-2023.7.10 → parsl-2023.7.17}/parsl/tests/test_error_handling/test_htex_worker_failure.py
RENAMED
@@ -1,28 +1,21 @@
|
|
1
1
|
import pytest
|
2
2
|
|
3
|
-
import parsl
|
4
3
|
from parsl.app.app import python_app
|
5
|
-
from parsl.tests.configs.htex_local import fresh_config
|
6
|
-
|
7
4
|
from parsl.executors.high_throughput.errors import WorkerLost
|
8
5
|
|
9
6
|
|
10
|
-
def
|
7
|
+
def local_config():
|
8
|
+
from parsl.tests.configs.htex_local import fresh_config
|
11
9
|
config = fresh_config()
|
12
10
|
config.executors[0].poll_period = 1
|
13
11
|
config.executors[0].max_workers = 1
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
def local_teardown():
|
18
|
-
parsl.dfk().cleanup()
|
19
|
-
parsl.clear()
|
12
|
+
config.executors[0].heartbeat_period = 1
|
13
|
+
return config
|
20
14
|
|
21
15
|
|
22
16
|
@python_app
|
23
17
|
def kill_worker():
|
24
|
-
|
25
|
-
sys.exit(2)
|
18
|
+
raise SystemExit(2)
|
26
19
|
|
27
20
|
|
28
21
|
@pytest.mark.local
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import threading
|
2
|
+
import time
|
3
|
+
|
4
|
+
import pytest
|
5
|
+
|
6
|
+
import parsl
|
7
|
+
from parsl.tests.configs.local_threads import fresh_config as local_config # noqa
|
8
|
+
|
9
|
+
|
10
|
+
@parsl.python_app
|
11
|
+
def slow_app(evt: threading.Event):
|
12
|
+
evt.wait()
|
13
|
+
|
14
|
+
|
15
|
+
@pytest.mark.local
|
16
|
+
def test_wait_for_tasks():
|
17
|
+
"""
|
18
|
+
gh#1606 reported that wait_for_current_tasks fails due to tasks being removed
|
19
|
+
from the DFK tasks dict as they complete; bug introduced in #1543.
|
20
|
+
"""
|
21
|
+
def test_kernel(may_wait: threading.Event):
|
22
|
+
e1, e2 = threading.Event(), threading.Event()
|
23
|
+
|
24
|
+
# app_slow is in *middle* of internal DFK data structure
|
25
|
+
app_fast1, app_slow, app_fast2 = slow_app(e1), slow_app(e2), slow_app(e1)
|
26
|
+
|
27
|
+
may_wait.set() # initiated wait in outer test
|
28
|
+
time.sleep(0.01)
|
29
|
+
|
30
|
+
e1.set()
|
31
|
+
|
32
|
+
while not all(f.done() for f in (app_fast1, app_fast2)):
|
33
|
+
time.sleep(0.01)
|
34
|
+
|
35
|
+
e2.set()
|
36
|
+
app_slow.result()
|
37
|
+
|
38
|
+
may_continue = threading.Event()
|
39
|
+
threading.Thread(target=test_kernel, daemon=True, args=(may_continue,)).start()
|
40
|
+
|
41
|
+
may_continue.wait()
|
42
|
+
parsl.dfk().wait_for_current_tasks() # per sleeps, waits for all 3 tasks
|
@@ -1,33 +1,27 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
import threading
|
2
|
+
|
3
|
+
import pytest
|
3
4
|
|
4
|
-
import logging
|
5
5
|
import parsl
|
6
6
|
from parsl.channels import LocalChannel
|
7
7
|
from parsl.config import Config
|
8
8
|
from parsl.executors import HighThroughputExecutor
|
9
9
|
from parsl.launchers import SimpleLauncher
|
10
10
|
from parsl.providers import LocalProvider
|
11
|
-
import pytest
|
12
|
-
|
13
|
-
|
14
|
-
logger = logging.getLogger(__name__)
|
15
11
|
|
16
12
|
|
17
13
|
@parsl.python_app
|
18
14
|
def app():
|
19
15
|
import time
|
20
|
-
time.sleep(
|
16
|
+
time.sleep(1)
|
21
17
|
|
22
18
|
|
23
19
|
class OneShotLocalProvider(LocalProvider):
|
24
20
|
def __init__(self, *args, **kwargs):
|
25
|
-
logger.info("OneShotLocalProvider __init__ with MRO: {}".format(type(self).mro()))
|
26
21
|
self.recorded_submits = 0
|
27
22
|
super().__init__(*args, **kwargs)
|
28
23
|
|
29
24
|
def submit(self, *args, **kwargs):
|
30
|
-
logger.info("OneShotLocalProvider submit")
|
31
25
|
self.recorded_submits += 1
|
32
26
|
return super().submit(*args, **kwargs)
|
33
27
|
|
@@ -35,32 +29,44 @@ class OneShotLocalProvider(LocalProvider):
|
|
35
29
|
|
36
30
|
|
37
31
|
@pytest.mark.local
|
38
|
-
def test_one_block():
|
39
|
-
|
32
|
+
def test_one_block(tmpd_cwd):
|
33
|
+
"""
|
34
|
+
this test is intended to ensure that only one block is launched when only
|
35
|
+
one app is invoked. this is a regression test.
|
36
|
+
"""
|
40
37
|
oneshot_provider = OneShotLocalProvider(
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
38
|
+
channel=LocalChannel(),
|
39
|
+
init_blocks=0,
|
40
|
+
min_blocks=0,
|
41
|
+
max_blocks=10,
|
42
|
+
launcher=SimpleLauncher(),
|
43
|
+
)
|
47
44
|
|
48
45
|
config = Config(
|
49
46
|
executors=[
|
50
47
|
HighThroughputExecutor(
|
51
48
|
label="htex_local",
|
49
|
+
address="127.0.0.1",
|
52
50
|
worker_debug=True,
|
53
51
|
cores_per_worker=1,
|
54
52
|
provider=oneshot_provider,
|
53
|
+
worker_logdir_root=str(tmpd_cwd)
|
55
54
|
)
|
56
55
|
],
|
57
56
|
strategy='simple',
|
58
57
|
)
|
59
58
|
|
60
59
|
parsl.load(config)
|
60
|
+
dfk = parsl.dfk()
|
61
|
+
|
62
|
+
def poller():
|
63
|
+
import time
|
64
|
+
while True:
|
65
|
+
dfk.job_status_poller.poll()
|
66
|
+
time.sleep(0.1)
|
61
67
|
|
62
|
-
|
63
|
-
|
68
|
+
threading.Thread(target=poller, daemon=True).start()
|
69
|
+
app().result()
|
64
70
|
parsl.dfk().cleanup()
|
65
71
|
parsl.clear()
|
66
72
|
|
@@ -0,0 +1,97 @@
|
|
1
|
+
import logging
|
2
|
+
import time
|
3
|
+
|
4
|
+
import pytest
|
5
|
+
|
6
|
+
import parsl
|
7
|
+
|
8
|
+
from parsl import File, python_app
|
9
|
+
from parsl.providers import LocalProvider
|
10
|
+
from parsl.channels import LocalChannel
|
11
|
+
from parsl.launchers import SingleNodeLauncher
|
12
|
+
from parsl.config import Config
|
13
|
+
from parsl.executors import HighThroughputExecutor
|
14
|
+
|
15
|
+
logger = logging.getLogger(__name__)
|
16
|
+
|
17
|
+
_max_blocks = 5
|
18
|
+
_min_blocks = 2
|
19
|
+
|
20
|
+
|
21
|
+
def local_config():
|
22
|
+
return Config(
|
23
|
+
executors=[
|
24
|
+
HighThroughputExecutor(
|
25
|
+
heartbeat_period=1,
|
26
|
+
heartbeat_threshold=2,
|
27
|
+
poll_period=100,
|
28
|
+
label="htex_local",
|
29
|
+
address="127.0.0.1",
|
30
|
+
max_workers=1,
|
31
|
+
provider=LocalProvider(
|
32
|
+
channel=LocalChannel(),
|
33
|
+
init_blocks=0,
|
34
|
+
max_blocks=_max_blocks,
|
35
|
+
min_blocks=_min_blocks,
|
36
|
+
launcher=SingleNodeLauncher(),
|
37
|
+
),
|
38
|
+
)
|
39
|
+
],
|
40
|
+
max_idletime=0.5,
|
41
|
+
strategy='htex_auto_scale',
|
42
|
+
)
|
43
|
+
|
44
|
+
|
45
|
+
@python_app
|
46
|
+
def waiting_app(ident: int, inputs=()):
|
47
|
+
import pathlib
|
48
|
+
import time
|
49
|
+
|
50
|
+
# Approximate an Event by writing to files; the test logic will poll this file
|
51
|
+
with open(inputs[0], "a") as f:
|
52
|
+
f.write(f"Ready: {ident}\n")
|
53
|
+
|
54
|
+
# Similarly, use Event approximation (file check!) by polling.
|
55
|
+
may_finish_file = pathlib.Path(inputs[1])
|
56
|
+
while not may_finish_file.exists():
|
57
|
+
time.sleep(0.01)
|
58
|
+
|
59
|
+
|
60
|
+
# see issue #1885 for details of failures of this test.
|
61
|
+
# at the time of issue #1885 this test was failing frequently
|
62
|
+
# in CI.
|
63
|
+
@pytest.mark.local
|
64
|
+
def test_scale_out(tmpd_cwd, try_assert):
|
65
|
+
dfk = parsl.dfk()
|
66
|
+
|
67
|
+
num_managers = len(dfk.executors['htex_local'].connected_managers())
|
68
|
+
|
69
|
+
assert num_managers == 0, "Expected 0 managers at start"
|
70
|
+
assert dfk.executors['htex_local'].outstanding == 0, "Expected 0 tasks at start"
|
71
|
+
|
72
|
+
ntasks = 10
|
73
|
+
ready_path = tmpd_cwd / "workers_ready"
|
74
|
+
finish_path = tmpd_cwd / "workers_may_continue"
|
75
|
+
ready_path.touch()
|
76
|
+
inputs = [File(str(ready_path)), File(str(finish_path))]
|
77
|
+
|
78
|
+
futs = [waiting_app(i, inputs=inputs) for i in range(ntasks)]
|
79
|
+
|
80
|
+
while ready_path.read_text().count("\n") < _max_blocks:
|
81
|
+
time.sleep(0.5)
|
82
|
+
|
83
|
+
assert len(dfk.executors['htex_local'].connected_managers()) == _max_blocks
|
84
|
+
|
85
|
+
finish_path.touch() # Approximation of Event, via files
|
86
|
+
[x.result() for x in futs]
|
87
|
+
|
88
|
+
assert dfk.executors['htex_local'].outstanding == 0
|
89
|
+
|
90
|
+
def assert_kernel():
|
91
|
+
return len(dfk.executors['htex_local'].connected_managers()) == _min_blocks
|
92
|
+
|
93
|
+
try_assert(
|
94
|
+
assert_kernel,
|
95
|
+
fail_msg=f"Expected {_min_blocks} managers when no tasks (min_blocks)",
|
96
|
+
timeout_ms=15000,
|
97
|
+
)
|
@@ -1,9 +1,9 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: parsl
|
3
|
-
Version: 2023.7.
|
3
|
+
Version: 2023.7.17
|
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/2023.07.
|
6
|
+
Download-URL: https://github.com/Parsl/parsl/archive/2023.07.17.tar.gz
|
7
7
|
Author: The Parsl Team
|
8
8
|
Author-email: parsl@googlegroups.com
|
9
9
|
License: Apache 2.0
|
@@ -1,17 +0,0 @@
|
|
1
|
-
import parsl
|
2
|
-
|
3
|
-
|
4
|
-
@parsl.python_app
|
5
|
-
def slow_app(delay):
|
6
|
-
import time
|
7
|
-
time.sleep(delay)
|
8
|
-
|
9
|
-
|
10
|
-
def test_wait_for_tasks():
|
11
|
-
slow_app(5)
|
12
|
-
slow_app(10) # This test has a higher task ID, and runs for a longer period
|
13
|
-
slow_app(3) # This test has a higher task ID, but runs for a shorter period
|
14
|
-
parsl.dfk().wait_for_current_tasks()
|
15
|
-
# the regression reported in #1606 is that wait_for_current_tasks
|
16
|
-
# fails due to tasks being removed from the DFK tasks dict as they
|
17
|
-
# complete, introduced in #1543.
|
@@ -1,80 +0,0 @@
|
|
1
|
-
import logging
|
2
|
-
import parsl
|
3
|
-
import pytest
|
4
|
-
import time
|
5
|
-
from parsl import python_app
|
6
|
-
|
7
|
-
from parsl.providers import LocalProvider
|
8
|
-
from parsl.channels import LocalChannel
|
9
|
-
# from parsl.launchers import SimpleLauncher
|
10
|
-
from parsl.launchers import SingleNodeLauncher
|
11
|
-
|
12
|
-
from parsl.config import Config
|
13
|
-
from parsl.executors import HighThroughputExecutor
|
14
|
-
|
15
|
-
logger = logging.getLogger(__name__)
|
16
|
-
|
17
|
-
|
18
|
-
def local_config():
|
19
|
-
return Config(
|
20
|
-
executors=[
|
21
|
-
HighThroughputExecutor(
|
22
|
-
heartbeat_period=2,
|
23
|
-
heartbeat_threshold=6,
|
24
|
-
poll_period=1,
|
25
|
-
label="htex_local",
|
26
|
-
max_workers=1,
|
27
|
-
provider=LocalProvider(
|
28
|
-
channel=LocalChannel(),
|
29
|
-
init_blocks=0,
|
30
|
-
max_blocks=5,
|
31
|
-
min_blocks=2,
|
32
|
-
launcher=SingleNodeLauncher(),
|
33
|
-
),
|
34
|
-
)
|
35
|
-
],
|
36
|
-
max_idletime=5,
|
37
|
-
strategy='htex_auto_scale',
|
38
|
-
)
|
39
|
-
|
40
|
-
|
41
|
-
@python_app
|
42
|
-
def sleeper(t):
|
43
|
-
import time
|
44
|
-
time.sleep(t)
|
45
|
-
|
46
|
-
|
47
|
-
# see issue #1885 for details of failures of this test.
|
48
|
-
# at the time of issue #1885 this test was failing frequently
|
49
|
-
# in CI.
|
50
|
-
@pytest.mark.local
|
51
|
-
def test_scale_out():
|
52
|
-
logger.info("start")
|
53
|
-
dfk = parsl.dfk()
|
54
|
-
|
55
|
-
logger.info("initial asserts")
|
56
|
-
assert len(dfk.executors['htex_local'].connected_managers()) == 0, "Expected 0 managers at start"
|
57
|
-
assert dfk.executors['htex_local'].outstanding == 0, "Expected 0 tasks at start"
|
58
|
-
|
59
|
-
logger.info("launching tasks")
|
60
|
-
fus = [sleeper(i) for i in [15 for x in range(0, 10)]]
|
61
|
-
|
62
|
-
logger.info("waiting for warm up")
|
63
|
-
time.sleep(15)
|
64
|
-
|
65
|
-
logger.info("asserting 5 managers")
|
66
|
-
assert len(dfk.executors['htex_local'].connected_managers()) == 5, "Expected 5 managers after some time"
|
67
|
-
|
68
|
-
logger.info("waiting for all futures to complete")
|
69
|
-
[x.result() for x in fus]
|
70
|
-
|
71
|
-
logger.info("asserting 0 outstanding tasks after completion")
|
72
|
-
assert dfk.executors['htex_local'].outstanding == 0, "Expected 0 outstanding tasks after future completion"
|
73
|
-
|
74
|
-
logger.info("waiting a while for scale down")
|
75
|
-
time.sleep(25)
|
76
|
-
|
77
|
-
logger.info("asserting 2 managers remain")
|
78
|
-
assert len(dfk.executors['htex_local'].connected_managers()) == 2, "Expected 2 managers when no tasks, lower bound by min_blocks"
|
79
|
-
|
80
|
-
logger.info("test passed")
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|