dpdispatcher 0.6.7__tar.gz → 0.6.9__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.
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.github/workflows/test-bohrium.yml +1 -1
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.github/workflows/test.yml +8 -6
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.pre-commit-config.yaml +3 -3
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/PKG-INFO +6 -5
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/README.md +1 -1
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/conf.py +3 -3
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/machine.rst +1 -1
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/resources.rst +1 -1
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/task.rst +1 -1
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/_version.py +9 -4
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/base_context.py +1 -2
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/contexts/ssh_context.py +4 -3
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machines/JH_UniScheduler.py +2 -3
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machines/distributed_shell.py +2 -4
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machines/lsf.py +1 -2
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machines/pbs.py +7 -6
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machines/shell.py +2 -4
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machines/slurm.py +9 -15
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/submission.py +1 -8
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/utils/dpcloudserver/client.py +5 -1
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/utils/hdfs_cli.py +6 -11
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/utils/utils.py +1 -1
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher.egg-info/PKG-INFO +6 -5
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher.egg-info/requires.txt +2 -2
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/pyproject.toml +2 -2
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.git_archival.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.gitattributes +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.github/dependabot.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.github/workflows/ci-docker.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.github/workflows/machines.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.github/workflows/mirror_gitee.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.github/workflows/publish_conda.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.github/workflows/pyright.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.github/workflows/release.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.gitignore +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/.readthedocs.yaml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/CONTRIBUTING.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/Dockerfile +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/LICENSE +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/LICENSE +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/README.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/pbs/docker-compose.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/pbs/start-pbs.sh +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/pbs.sh +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/slurm/docker-compose.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/slurm/register_cluster.sh +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/slurm/start-slurm.sh +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/slurm.sh +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/ssh/docker-compose.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/ssh/start-ssh.sh +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/ssh.sh +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/ci/ssh_rsync.sh +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/codecov.yml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/conda/conda_build_config.yaml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/conda/meta.yaml +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/.gitignore +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/Makefile +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/batch.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/cli.rst +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/context.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/credits.rst +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/dpdispatcher_on_yarn.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/env.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/examples/expanse.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/examples/g16.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/examples/shell.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/examples/template.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/getting-started.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/index.rst +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/install.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/make.bat +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/pep723.rst +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/requirements.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/doc/run.md +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/__init__.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/__main__.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/arginfo.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/contexts/__init__.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/contexts/dp_cloud_server_context.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/contexts/hdfs_context.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/contexts/lazy_local_context.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/contexts/local_context.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/contexts/openapi_context.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/dlog.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/dpcloudserver/__init__.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/dpcloudserver/client.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/dpdisp.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/entrypoints/__init__.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/entrypoints/gui.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/entrypoints/run.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/entrypoints/submission.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machine.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machines/__init__.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machines/dp_cloud_server.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machines/fugaku.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/machines/openapi.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/run.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/utils/__init__.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/utils/dpcloudserver/__init__.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/utils/dpcloudserver/config.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/utils/dpcloudserver/retcode.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/utils/dpcloudserver/zip_file.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/utils/job_status.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher/utils/record.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher.egg-info/SOURCES.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher.egg-info/dependency_links.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher.egg-info/entry_points.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/dpdispatcher.egg-info/top_level.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/examples/dpdisp_run.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/examples/machine/expanse.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/examples/machine/lazy_local.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/examples/machine/mandu.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/examples/resources/expanse_cpu.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/examples/resources/mandu.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/examples/resources/template.slurm +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/examples/resources/tiger.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/examples/task/deepmd-kit.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/examples/task/g16.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/scripts/script_gen_dargs_docs.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/scripts/script_gen_dargs_json.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/setup.cfg +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/.gitignore +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/__init__.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/batch.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/context.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/debug_test_class_submission_init.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/devel_test_JH_UniScheduler.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/devel_test_ali_ehpc.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/devel_test_dp_cloud_server.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/devel_test_lazy_ali_ehpc.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/devel_test_lsf.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/devel_test_shell.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/devel_test_slurm.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/devel_test_ssh_ali_ehpc.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/graph.pb +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/hello_world.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/job.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_JH_UniScheduler.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_ali_ehpc.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_center.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_diffenert.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_dp_cloud_server.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_fugaku.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_if_cuda_multi_devices.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_lazy_local_jh_unischeduler.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_lazy_local_lsf.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_lazy_local_slurm.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_lazylocal_shell.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_local_fugaku.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_local_shell.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_lsf.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_openapi.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_slurm.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/machine_yarn.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/resources.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/submission.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/jsons/task.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/sample_class.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/script_gen_json.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/slurm_test.env +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_JH_UniScheduler_script_generation.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_argcheck.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_class_job.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_class_machine.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_class_machine_dispatch.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_class_resources.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_class_submission.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_class_submission_init.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_class_task.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_cli.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/bct-1/some_dir/some_file +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/dir with space/file with space +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/graph.pb +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_context_dir/0_md/some_dir/some_file +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_examples.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_group_size.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_gui.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_hdfs_context.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_hdfs_dir/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_hdfs_dir/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_hdfs_dir/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_hdfs_dir/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_hdfs_dir/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_hdfs_dir/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_hdfs_dir/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_hdfs_dir/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_hdfs_dir/0_md/graph.pb +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_if_cuda_multi_devices/test_dir/test.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_import_classes.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_jh_unischeduler/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_jh_unischeduler/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_jh_unischeduler/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_jh_unischeduler/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_jh_unischeduler/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_jh_unischeduler/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_jh_unischeduler/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_jh_unischeduler/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_jh_unischeduler/0_md/graph.pb +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lazy_local_context.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_local_context.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_dir/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_dir/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_dir/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_dir/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_dir/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_dir/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_dir/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_dir/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_dir/0_md/graph.pb +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_dir/0_md/submission.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_lsf_script_generation.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_pbs_dir/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_pbs_dir/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_pbs_dir/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_pbs_dir/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_pbs_dir/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_pbs_dir/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_pbs_dir/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_pbs_dir/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_pbs_dir/0_md/graph.pb +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_retry.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_run.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_run_submission.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_run_submission_bohrium.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_run_submission_ratio_unfinished.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_shell_cuda_multi_devices.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_shell_trival.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_shell_trival_dir/fail_dir/mock_fail_task.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_shell_trival_dir/parent_dir/dir with space/example.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_shell_trival_dir/parent_dir/dir1/example.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_shell_trival_dir/parent_dir/dir2/example.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_shell_trival_dir/parent_dir/dir3/example.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_shell_trival_dir/parent_dir/dir4/example.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_shell_trival_dir/parent_dir/graph.pb +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_shell_trival_dir/recover_dir/mock_recover_task.txt +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/bct-1/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/bct-1/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/bct-2/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/bct-2/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/bct-3/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/bct-3/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/bct-4/conf.lmp +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/bct-4/input.lammps +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/d3c842c5b9476e48f7145b370cd330372b9293e1.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/graph.pb +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_dir/0_md/submission.json +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_slurm_script_generation.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_ssh_context.py +0 -0
- {dpdispatcher-0.6.7 → dpdispatcher-0.6.9}/tests/test_work_path/.gitkeep +0 -0
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
BOHRIUM_PASSWORD: ${{ secrets.BOHRIUM_PASSWORD }}
|
|
31
31
|
BOHRIUM_PROJECT_ID: ${{ secrets.BOHRIUM_PROJECT_ID }}
|
|
32
32
|
BOHRIUM_ACCESS_KEY: ${{ secrets.BOHRIUM_ACCESS_KEY }}
|
|
33
|
-
- uses: codecov/codecov-action@
|
|
33
|
+
- uses: codecov/codecov-action@v5
|
|
34
34
|
env:
|
|
35
35
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
36
36
|
remove_label:
|
|
@@ -16,7 +16,7 @@ jobs:
|
|
|
16
16
|
- '3.11'
|
|
17
17
|
- '3.12'
|
|
18
18
|
platform:
|
|
19
|
-
- ubuntu-
|
|
19
|
+
- ubuntu-22.04
|
|
20
20
|
- macos-latest
|
|
21
21
|
- windows-latest
|
|
22
22
|
exclude: # Apple Silicon ARM64 does not support Python < v3.8
|
|
@@ -31,10 +31,12 @@ jobs:
|
|
|
31
31
|
uses: actions/setup-python@v5
|
|
32
32
|
with:
|
|
33
33
|
python-version: ${{ matrix.python-version }}
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
- uses: astral-sh/setup-uv@v5
|
|
35
|
+
with:
|
|
36
|
+
enable-cache: true
|
|
37
|
+
cache-dependency-glob: |
|
|
38
|
+
**/requirements*.txt
|
|
39
|
+
**/pyproject.toml
|
|
38
40
|
- run: uv pip install --system .[test] coverage
|
|
39
41
|
- name: Test
|
|
40
42
|
run: |
|
|
@@ -42,7 +44,7 @@ jobs:
|
|
|
42
44
|
python -m coverage run -p --source=./dpdispatcher -m dpdispatcher -h
|
|
43
45
|
python -m coverage combine
|
|
44
46
|
python -m coverage report
|
|
45
|
-
- uses: codecov/codecov-action@
|
|
47
|
+
- uses: codecov/codecov-action@v5
|
|
46
48
|
env:
|
|
47
49
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
48
50
|
pass:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# See https://pre-commit.com/hooks.html for more hooks
|
|
3
3
|
repos:
|
|
4
4
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
5
|
-
rev:
|
|
5
|
+
rev: v5.0.0
|
|
6
6
|
hooks:
|
|
7
7
|
- id: trailing-whitespace
|
|
8
8
|
exclude: "^tests/"
|
|
@@ -18,7 +18,7 @@ repos:
|
|
|
18
18
|
# Python
|
|
19
19
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
20
20
|
# Ruff version.
|
|
21
|
-
rev: v0.
|
|
21
|
+
rev: v0.9.3
|
|
22
22
|
hooks:
|
|
23
23
|
- id: ruff
|
|
24
24
|
args: ["--fix"]
|
|
@@ -31,7 +31,7 @@ repos:
|
|
|
31
31
|
args: ["--write"]
|
|
32
32
|
# Python inside docs
|
|
33
33
|
- repo: https://github.com/asottile/blacken-docs
|
|
34
|
-
rev: 1.
|
|
34
|
+
rev: 1.19.1
|
|
35
35
|
hooks:
|
|
36
36
|
- id: blacken-docs
|
|
37
37
|
# markdown, yaml
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: dpdispatcher
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.9
|
|
4
4
|
Summary: Generate HPC scheduler systems jobs input scripts, submit these scripts to HPC systems, and poke until they finish
|
|
5
5
|
Author: DeepModeling
|
|
6
6
|
License: GNU LESSER GENERAL PUBLIC LICENSE
|
|
@@ -195,9 +195,9 @@ Requires-Dist: tomli>=1.1.0; python_version < "3.11"
|
|
|
195
195
|
Provides-Extra: docs
|
|
196
196
|
Requires-Dist: sphinx; extra == "docs"
|
|
197
197
|
Requires-Dist: myst-parser; extra == "docs"
|
|
198
|
-
Requires-Dist:
|
|
198
|
+
Requires-Dist: sphinx-book-theme; extra == "docs"
|
|
199
199
|
Requires-Dist: numpydoc; extra == "docs"
|
|
200
|
-
Requires-Dist:
|
|
200
|
+
Requires-Dist: deepmodeling-sphinx>=0.3.0; extra == "docs"
|
|
201
201
|
Requires-Dist: dargs>=0.3.1; extra == "docs"
|
|
202
202
|
Requires-Dist: sphinx-argparse<0.5.0; extra == "docs"
|
|
203
203
|
Provides-Extra: cloudserver
|
|
@@ -212,6 +212,7 @@ Provides-Extra: gui
|
|
|
212
212
|
Requires-Dist: dpgui; extra == "gui"
|
|
213
213
|
Provides-Extra: test
|
|
214
214
|
Requires-Dist: dpgui; extra == "test"
|
|
215
|
+
Dynamic: license-file
|
|
215
216
|
|
|
216
217
|
# DPDispatcher
|
|
217
218
|
|
|
@@ -221,7 +222,7 @@ Requires-Dist: dpgui; extra == "test"
|
|
|
221
222
|
[](https://dpdispatcher.readthedocs.io/)
|
|
222
223
|
|
|
223
224
|
DPDispatcher is a Python package used to generate HPC (High-Performance Computing) scheduler systems (Slurm/PBS/LSF/Bohrium) jobs input scripts, submit them to HPC systems, and poke until they finish.
|
|
224
|
-
|
|
225
|
+
|
|
225
226
|
DPDispatcher will monitor (poke) until these jobs finish and download the results files (if these jobs are running on remote systems connected by SSH).
|
|
226
227
|
|
|
227
228
|
For more information, check the [documentation](https://dpdispatcher.readthedocs.io/).
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
[](https://dpdispatcher.readthedocs.io/)
|
|
7
7
|
|
|
8
8
|
DPDispatcher is a Python package used to generate HPC (High-Performance Computing) scheduler systems (Slurm/PBS/LSF/Bohrium) jobs input scripts, submit them to HPC systems, and poke until they finish.
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
DPDispatcher will monitor (poke) until these jobs finish and download the results files (if these jobs are running on remote systems connected by SSH).
|
|
11
11
|
|
|
12
12
|
For more information, check the [documentation](https://dpdispatcher.readthedocs.io/).
|
|
@@ -20,7 +20,7 @@ from datetime import date
|
|
|
20
20
|
# -- Project information -----------------------------------------------------
|
|
21
21
|
|
|
22
22
|
project = "DPDispatcher"
|
|
23
|
-
copyright = "2020
|
|
23
|
+
copyright = f"2020-{date.today().year}, Deep Modeling"
|
|
24
24
|
author = "DeepModeling"
|
|
25
25
|
|
|
26
26
|
|
|
@@ -33,7 +33,7 @@ extensions = [
|
|
|
33
33
|
"deepmodeling_sphinx",
|
|
34
34
|
"dargs.sphinx",
|
|
35
35
|
"myst_parser",
|
|
36
|
-
"
|
|
36
|
+
"sphinx_book_theme",
|
|
37
37
|
"sphinx.ext.viewcode",
|
|
38
38
|
"sphinx.ext.intersphinx",
|
|
39
39
|
"numpydoc",
|
|
@@ -55,7 +55,7 @@ exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
|
|
|
55
55
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
56
56
|
# a list of builtin themes.
|
|
57
57
|
#
|
|
58
|
-
html_theme = "
|
|
58
|
+
html_theme = "sphinx_book_theme"
|
|
59
59
|
|
|
60
60
|
# Add any paths that contain custom static files (such as style sheets) here,
|
|
61
61
|
# relative to this directory. They are copied after the builtin static files,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Machine parameters
|
|
2
2
|
======================================
|
|
3
3
|
.. note::
|
|
4
|
-
One can load, modify, and export the input file by using our effective web-based tool `DP-GUI <https://deepmodeling.com/
|
|
4
|
+
One can load, modify, and export the input file by using our effective web-based tool `DP-GUI <https://dpgui.deepmodeling.com/input/dpdispatcher-machine>`_ online or hosted using the :ref:`command line interface <cli>` :code:`dpdisp gui`. All parameters below can be set in DP-GUI. By clicking "SAVE JSON", one can download the input file.
|
|
5
5
|
|
|
6
6
|
.. dargs::
|
|
7
7
|
:module: dpdispatcher.arginfo
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Resources parameters
|
|
2
2
|
======================================
|
|
3
3
|
.. note::
|
|
4
|
-
One can load, modify, and export the input file by using our effective web-based tool `DP-GUI <https://deepmodeling.com/
|
|
4
|
+
One can load, modify, and export the input file by using our effective web-based tool `DP-GUI <https://dpgui.deepmodeling.com/input/dpdispatcher-resources>`_ online or hosted using the :ref:`command line interface <cli>` :code:`dpdisp gui`. All parameters below can be set in DP-GUI. By clicking "SAVE JSON", one can download the input file for.
|
|
5
5
|
|
|
6
6
|
.. dargs::
|
|
7
7
|
:module: dpdispatcher.arginfo
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Task parameters
|
|
2
2
|
======================================
|
|
3
3
|
.. note::
|
|
4
|
-
One can load, modify, and export the input file by using our effective web-based tool `DP-GUI <https://deepmodeling.com/
|
|
4
|
+
One can load, modify, and export the input file by using our effective web-based tool `DP-GUI <https://dpgui.deepmodeling.com/input/dpdispatcher-task>`_ online or hosted using the :ref:`command line interface <cli>` :code:`dpdisp gui`. All parameters below can be set in DP-GUI. By clicking "SAVE JSON", one can download the input file.
|
|
5
5
|
|
|
6
6
|
.. dargs::
|
|
7
7
|
:module: dpdispatcher.arginfo
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
# file generated by
|
|
1
|
+
# file generated by setuptools-scm
|
|
2
2
|
# don't change, don't track in version control
|
|
3
|
+
|
|
4
|
+
__all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
|
|
5
|
+
|
|
3
6
|
TYPE_CHECKING = False
|
|
4
7
|
if TYPE_CHECKING:
|
|
5
|
-
from typing import Tuple
|
|
8
|
+
from typing import Tuple
|
|
9
|
+
from typing import Union
|
|
10
|
+
|
|
6
11
|
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
7
12
|
else:
|
|
8
13
|
VERSION_TUPLE = object
|
|
@@ -12,5 +17,5 @@ __version__: str
|
|
|
12
17
|
__version_tuple__: VERSION_TUPLE
|
|
13
18
|
version_tuple: VERSION_TUPLE
|
|
14
19
|
|
|
15
|
-
__version__ = version = '0.6.
|
|
16
|
-
__version_tuple__ = version_tuple = (0, 6,
|
|
20
|
+
__version__ = version = '0.6.9'
|
|
21
|
+
__version_tuple__ = version_tuple = (0, 6, 9)
|
|
@@ -102,8 +102,7 @@ class BaseContext(metaclass=ABCMeta):
|
|
|
102
102
|
exit_status, stdin, stdout, stderr = self.block_call(cmd)
|
|
103
103
|
if exit_status != 0:
|
|
104
104
|
raise RuntimeError(
|
|
105
|
-
"Get error code
|
|
106
|
-
% (
|
|
105
|
+
"Get error code {} in calling {} with job: {} . message: {}".format(
|
|
107
106
|
exit_status,
|
|
108
107
|
cmd,
|
|
109
108
|
self.submission.submission_hash,
|
|
@@ -90,8 +90,7 @@ class SSHSession:
|
|
|
90
90
|
while not self._check_alive():
|
|
91
91
|
if count == max_check:
|
|
92
92
|
raise RuntimeError(
|
|
93
|
-
"cannot connect ssh after
|
|
94
|
-
% (max_check, sleep_time)
|
|
93
|
+
f"cannot connect ssh after {max_check} failures at interval {sleep_time} s"
|
|
95
94
|
)
|
|
96
95
|
dlog.info("connection check failed, try to reconnect to " + self.hostname)
|
|
97
96
|
self._setup_ssh()
|
|
@@ -450,7 +449,9 @@ class SSHContext(BaseContext):
|
|
|
450
449
|
self.init_local_root = local_root
|
|
451
450
|
self.init_remote_root = remote_root
|
|
452
451
|
self.temp_local_root = os.path.abspath(local_root)
|
|
453
|
-
assert os.path.isabs(remote_root),
|
|
452
|
+
assert os.path.isabs(os.path.realpath(remote_root)), (
|
|
453
|
+
"remote_root must be a abspath"
|
|
454
|
+
)
|
|
454
455
|
self.temp_remote_root = remote_root
|
|
455
456
|
self.remote_profile = remote_profile
|
|
456
457
|
self.remote_root = None
|
|
@@ -39,7 +39,7 @@ class JH_UniScheduler(Machine):
|
|
|
39
39
|
custom_gpu_line = resources.kwargs.get("custom_gpu_line", None)
|
|
40
40
|
if not custom_gpu_line:
|
|
41
41
|
script_header_dict["JH_UniScheduler_number_gpu_line"] = (
|
|
42
|
-
|
|
42
|
+
f"#JSUB -gpgpu {resources.gpu_per_node}"
|
|
43
43
|
)
|
|
44
44
|
else:
|
|
45
45
|
script_header_dict["JH_UniScheduler_number_gpu_line"] = custom_gpu_line
|
|
@@ -105,8 +105,7 @@ class JH_UniScheduler(Machine):
|
|
|
105
105
|
elif ret != 0:
|
|
106
106
|
# just retry when any unknown error raised.
|
|
107
107
|
raise RetrySignal(
|
|
108
|
-
"Get error code
|
|
109
|
-
% (ret, job.job_hash, err_str)
|
|
108
|
+
f"Get error code {ret} in checking status with job: {job.job_hash} . message: {err_str}"
|
|
110
109
|
)
|
|
111
110
|
status_out = stdout.read().decode("utf-8").split("\n")
|
|
112
111
|
if len(status_out) < 2:
|
|
@@ -181,8 +181,7 @@ class DistributedShell(Machine):
|
|
|
181
181
|
if ret != 0:
|
|
182
182
|
err_str = stderr.decode("utf-8")
|
|
183
183
|
raise RuntimeError(
|
|
184
|
-
"Command
|
|
185
|
-
% (cmd, err_str, ret)
|
|
184
|
+
f"Command {cmd} fails to execute, error message:{err_str}\nreturn code {ret}\n"
|
|
186
185
|
)
|
|
187
186
|
job_id = int(stdout.decode("utf-8").strip())
|
|
188
187
|
|
|
@@ -200,8 +199,7 @@ class DistributedShell(Machine):
|
|
|
200
199
|
if ret != 0:
|
|
201
200
|
err_str = stderr.decode("utf-8")
|
|
202
201
|
raise RuntimeError(
|
|
203
|
-
"Command fails to execute, error message
|
|
204
|
-
% (err_str, ret)
|
|
202
|
+
f"Command fails to execute, error message:{err_str}\nreturn code {ret}\n"
|
|
205
203
|
)
|
|
206
204
|
|
|
207
205
|
if_job_exists = bool(stdout.decode("utf-8").strip())
|
|
@@ -129,8 +129,7 @@ class LSF(Machine):
|
|
|
129
129
|
elif ret != 0:
|
|
130
130
|
# just retry when any unknown error raised.
|
|
131
131
|
raise RetrySignal(
|
|
132
|
-
"Get error code
|
|
133
|
-
% (ret, job.job_hash, err_str)
|
|
132
|
+
f"Get error code {ret} in checking status with job: {job.job_hash} . message: {err_str}"
|
|
134
133
|
)
|
|
135
134
|
status_out = stdout.read().decode("utf-8").split("\n")
|
|
136
135
|
if len(status_out) < 2:
|
|
@@ -87,8 +87,7 @@ class PBS(Machine):
|
|
|
87
87
|
return JobStatus.terminated
|
|
88
88
|
else:
|
|
89
89
|
raise RuntimeError(
|
|
90
|
-
"status command
|
|
91
|
-
% (command, err_str, ret)
|
|
90
|
+
f"status command {command} fails to execute. erro info: {err_str} return code {ret}"
|
|
92
91
|
)
|
|
93
92
|
status_line = stdout.read().decode("utf-8").split("\n")[-2]
|
|
94
93
|
status_word = status_line.split()[-2]
|
|
@@ -138,8 +137,7 @@ class Torque(PBS):
|
|
|
138
137
|
return JobStatus.terminated
|
|
139
138
|
else:
|
|
140
139
|
raise RuntimeError(
|
|
141
|
-
"status command
|
|
142
|
-
% (command, err_str, ret)
|
|
140
|
+
f"status command {command} fails to execute. erro info: {err_str} return code {ret}"
|
|
143
141
|
)
|
|
144
142
|
status_line = stdout.read().decode("utf-8").split("\n")[-2]
|
|
145
143
|
status_word = status_line.split()[-2]
|
|
@@ -261,6 +259,7 @@ class SGE(PBS):
|
|
|
261
259
|
pass
|
|
262
260
|
|
|
263
261
|
def check_status(self, job):
|
|
262
|
+
### https://softpanorama.org/HPC/Grid_engine/Queues/queue_states.shtml
|
|
264
263
|
job_id = job.job_id
|
|
265
264
|
status_line = None
|
|
266
265
|
if job_id == "":
|
|
@@ -294,10 +293,12 @@ class SGE(PBS):
|
|
|
294
293
|
else:
|
|
295
294
|
status_word = status_line.split()[4]
|
|
296
295
|
# dlog.info (status_word)
|
|
297
|
-
if status_word in ["qw"]:
|
|
296
|
+
if status_word in ["qw", "hqw", "t"]:
|
|
298
297
|
return JobStatus.waiting
|
|
299
|
-
elif status_word in ["r"]:
|
|
298
|
+
elif status_word in ["r", "Rr"]:
|
|
300
299
|
return JobStatus.running
|
|
300
|
+
elif status_word in ["Eqw", "dr", "dt"]:
|
|
301
|
+
return JobStatus.terminated
|
|
301
302
|
else:
|
|
302
303
|
return JobStatus.unknown
|
|
303
304
|
|
|
@@ -43,8 +43,7 @@ class Shell(Machine):
|
|
|
43
43
|
if ret != 0:
|
|
44
44
|
err_str = stderr.read().decode("utf-8")
|
|
45
45
|
raise RuntimeError(
|
|
46
|
-
"status command
|
|
47
|
-
% (cmd, err_str, ret)
|
|
46
|
+
f"status command {cmd} fails to execute\nerror message:{err_str}\nreturn code {ret}\n"
|
|
48
47
|
)
|
|
49
48
|
job_id = int(stdout.read().decode("utf-8").strip())
|
|
50
49
|
self.context.write_file(job_id_name, str(job_id))
|
|
@@ -80,8 +79,7 @@ class Shell(Machine):
|
|
|
80
79
|
if ret != 0:
|
|
81
80
|
err_str = stderr.read().decode("utf-8")
|
|
82
81
|
raise RuntimeError(
|
|
83
|
-
"status command
|
|
84
|
-
% (cmd, err_str, ret)
|
|
82
|
+
f"status command {cmd} fails to execute\nerror message:{err_str}\nreturn code {ret}\n"
|
|
85
83
|
)
|
|
86
84
|
|
|
87
85
|
if_job_exists = bool(stdout.read().decode("utf-8").strip())
|
|
@@ -97,8 +97,7 @@ class Slurm(Machine):
|
|
|
97
97
|
):
|
|
98
98
|
# server network error, retry 3 times
|
|
99
99
|
raise RetrySignal(
|
|
100
|
-
"Get error code
|
|
101
|
-
% (ret, job.job_hash, err_str)
|
|
100
|
+
f"Get error code {ret} in submitting with job: {job.job_hash} . message: {err_str}"
|
|
102
101
|
)
|
|
103
102
|
elif (
|
|
104
103
|
"Job violates accounting/QOS policy" in err_str
|
|
@@ -109,8 +108,7 @@ class Slurm(Machine):
|
|
|
109
108
|
# job number exceeds, skip the submitting
|
|
110
109
|
return ""
|
|
111
110
|
raise RuntimeError(
|
|
112
|
-
"command
|
|
113
|
-
% (command, err_str, ret)
|
|
111
|
+
f"command {command} fails to execute\nerror message:{err_str}\nreturn code {ret}\n"
|
|
114
112
|
)
|
|
115
113
|
subret = stdout.readlines()
|
|
116
114
|
# --parsable
|
|
@@ -145,13 +143,11 @@ class Slurm(Machine):
|
|
|
145
143
|
):
|
|
146
144
|
# retry 3 times
|
|
147
145
|
raise RetrySignal(
|
|
148
|
-
"Get error code
|
|
149
|
-
% (ret, job.job_hash, err_str)
|
|
146
|
+
f"Get error code {ret} in checking status with job: {job.job_hash} . message: {err_str}"
|
|
150
147
|
)
|
|
151
148
|
raise RuntimeError(
|
|
152
|
-
"status command
|
|
153
|
-
"job_id
|
|
154
|
-
% (command, job_id, err_str, ret)
|
|
149
|
+
f"status command {command} fails to execute."
|
|
150
|
+
f"job_id:{job_id} \n error message:{err_str}\n return code {ret}\n"
|
|
155
151
|
)
|
|
156
152
|
status_line = stdout.read().decode("utf-8").split("\n")[-2]
|
|
157
153
|
status_word = status_line.split()[-1]
|
|
@@ -255,7 +251,7 @@ class SlurmJobArray(Slurm):
|
|
|
255
251
|
return super().gen_script_header(job) + "\n#SBATCH --array={}".format(
|
|
256
252
|
",".join(map(str, job_array))
|
|
257
253
|
)
|
|
258
|
-
return super().gen_script_header(job) + "\n#SBATCH --array=0-%
|
|
254
|
+
return super().gen_script_header(job) + "\n#SBATCH --array=0-%s" % (
|
|
259
255
|
math.ceil(len(job.job_task_list) / slurm_job_size) - 1
|
|
260
256
|
)
|
|
261
257
|
|
|
@@ -333,13 +329,11 @@ class SlurmJobArray(Slurm):
|
|
|
333
329
|
):
|
|
334
330
|
# retry 3 times
|
|
335
331
|
raise RetrySignal(
|
|
336
|
-
"Get error code
|
|
337
|
-
% (ret, job.job_hash, err_str)
|
|
332
|
+
f"Get error code {ret} in checking status with job: {job.job_hash} . message: {err_str}"
|
|
338
333
|
)
|
|
339
334
|
raise RuntimeError(
|
|
340
|
-
"status command
|
|
341
|
-
"job_id
|
|
342
|
-
% (command, job_id, err_str, ret)
|
|
335
|
+
f"status command {command} fails to execute."
|
|
336
|
+
f"job_id:{job_id} \n error message:{err_str}\n return code {ret}\n"
|
|
343
337
|
)
|
|
344
338
|
status_lines = stdout.read().decode("utf-8").split("\n")[:-1]
|
|
345
339
|
status = []
|
|
@@ -55,7 +55,6 @@ class Submission:
|
|
|
55
55
|
*,
|
|
56
56
|
task_list=[],
|
|
57
57
|
):
|
|
58
|
-
# self.submission_list = submission_list
|
|
59
58
|
self.local_root = None
|
|
60
59
|
self.work_base = work_base
|
|
61
60
|
self._abs_work_base = os.path.abspath(work_base)
|
|
@@ -324,8 +323,7 @@ class Submission:
|
|
|
324
323
|
kwargs = {**{"clean": False}, **kwargs}
|
|
325
324
|
if kwargs["clean"]:
|
|
326
325
|
dlog.warning(
|
|
327
|
-
"Using async submission with `clean=True`, "
|
|
328
|
-
"job may fail in queue system"
|
|
326
|
+
"Using async submission with `clean=True`, job may fail in queue system"
|
|
329
327
|
)
|
|
330
328
|
loop = asyncio.get_event_loop()
|
|
331
329
|
wrapped_submission = functools.partial(self.run_submission, **kwargs)
|
|
@@ -515,12 +513,9 @@ class Submission:
|
|
|
515
513
|
def submission_from_json(cls, json_file_name="submission.json"):
|
|
516
514
|
with open(json_file_name) as f:
|
|
517
515
|
submission_dict = json.load(f)
|
|
518
|
-
# submission_dict = machine.context.read_file(json_file_name)
|
|
519
516
|
submission = cls.deserialize(submission_dict=submission_dict, machine=None)
|
|
520
517
|
return submission
|
|
521
518
|
|
|
522
|
-
# def check_if_recover()
|
|
523
|
-
|
|
524
519
|
def try_recover_from_json(self):
|
|
525
520
|
submission_file_name = f"{self.submission_hash}.json"
|
|
526
521
|
if_recover = self.machine.context.check_file_exists(submission_file_name)
|
|
@@ -545,7 +540,6 @@ class Submission:
|
|
|
545
540
|
f"machine.context.remote_root:{self.machine.context.remote_root}; "
|
|
546
541
|
f"submission.work_base:{submission.work_base};"
|
|
547
542
|
)
|
|
548
|
-
# self = submission.bind_machine(machine=self.machine)
|
|
549
543
|
else:
|
|
550
544
|
print(self.serialize())
|
|
551
545
|
print(submission.serialize())
|
|
@@ -759,7 +753,6 @@ class Job:
|
|
|
759
753
|
self.fail_count = 0
|
|
760
754
|
self.job_uuid = uuid.uuid4()
|
|
761
755
|
|
|
762
|
-
# self.job_hash = self.get_hash()
|
|
763
756
|
self.job_hash = self.get_hash()
|
|
764
757
|
self.script_file_name = self.job_hash + ".sub"
|
|
765
758
|
|
|
@@ -278,7 +278,11 @@ class Client:
|
|
|
278
278
|
return ""
|
|
279
279
|
resp = requests.get(url, headers={"Range": f"bytes={self.last_log_offset}-"})
|
|
280
280
|
self.last_log_offset += len(resp.content)
|
|
281
|
-
|
|
281
|
+
try:
|
|
282
|
+
return resp.content.decode("utf-8")
|
|
283
|
+
except Exception as e:
|
|
284
|
+
dlog.error(f"Error decoding job log: {e}", stack_info=ENABLE_STACK)
|
|
285
|
+
return ""
|
|
282
286
|
|
|
283
287
|
def _get_job_log(self, job_id):
|
|
284
288
|
ret = self.get(
|
|
@@ -28,7 +28,7 @@ class HDFS:
|
|
|
28
28
|
)
|
|
29
29
|
except Exception as e:
|
|
30
30
|
raise RuntimeError(
|
|
31
|
-
f"Cannot check existence of hdfs uri[{uri}]
|
|
31
|
+
f"Cannot check existence of hdfs uri[{uri}] with cmd[{cmd}]"
|
|
32
32
|
) from e
|
|
33
33
|
|
|
34
34
|
@staticmethod
|
|
@@ -48,9 +48,7 @@ class HDFS:
|
|
|
48
48
|
f"with cmd[{cmd}]; ret[{ret}] output[{out}] stderr[{err}]"
|
|
49
49
|
)
|
|
50
50
|
except Exception as e:
|
|
51
|
-
raise RuntimeError(
|
|
52
|
-
f"Cannot remove hdfs uri[{uri}] " f"with cmd[{cmd}]"
|
|
53
|
-
) from e
|
|
51
|
+
raise RuntimeError(f"Cannot remove hdfs uri[{uri}] with cmd[{cmd}]") from e
|
|
54
52
|
|
|
55
53
|
@staticmethod
|
|
56
54
|
def mkdir(uri):
|
|
@@ -70,7 +68,7 @@ class HDFS:
|
|
|
70
68
|
)
|
|
71
69
|
except Exception as e:
|
|
72
70
|
raise RuntimeError(
|
|
73
|
-
f"Cannot mkdir of hdfs uri[{uri}]
|
|
71
|
+
f"Cannot mkdir of hdfs uri[{uri}] with cmd[{cmd}]"
|
|
74
72
|
) from e
|
|
75
73
|
|
|
76
74
|
@staticmethod
|
|
@@ -80,7 +78,7 @@ class HDFS:
|
|
|
80
78
|
"""
|
|
81
79
|
# Make sure local_path is accessible
|
|
82
80
|
if not os.path.exists(local_path) or not os.access(local_path, os.R_OK):
|
|
83
|
-
raise RuntimeError(f"try to access local_path[{local_path}]
|
|
81
|
+
raise RuntimeError(f"try to access local_path[{local_path}] but failed")
|
|
84
82
|
cmd = f"hadoop fs -copyFromLocal -f {local_path} {to_uri}"
|
|
85
83
|
try:
|
|
86
84
|
ret, out, err = run_cmd_with_all_output(cmd)
|
|
@@ -132,9 +130,7 @@ class HDFS:
|
|
|
132
130
|
f"cmd [{cmd}] ret[{ret}] output[{out}] stderr[{err}]"
|
|
133
131
|
)
|
|
134
132
|
except Exception as e:
|
|
135
|
-
raise RuntimeError(
|
|
136
|
-
f"Cannot read text from uri[{uri}]" f"cmd [{cmd}]"
|
|
137
|
-
) from e
|
|
133
|
+
raise RuntimeError(f"Cannot read text from uri[{uri}]cmd [{cmd}]") from e
|
|
138
134
|
|
|
139
135
|
@staticmethod
|
|
140
136
|
def move(from_uri, to_uri):
|
|
@@ -151,6 +147,5 @@ class HDFS:
|
|
|
151
147
|
)
|
|
152
148
|
except Exception as e:
|
|
153
149
|
raise RuntimeError(
|
|
154
|
-
f"Cannot move from_uri[{from_uri}] to "
|
|
155
|
-
f"to_uri[{to_uri}] with cmd[{cmd}]"
|
|
150
|
+
f"Cannot move from_uri[{from_uri}] to to_uri[{to_uri}] with cmd[{cmd}]"
|
|
156
151
|
) from e
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: dpdispatcher
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.9
|
|
4
4
|
Summary: Generate HPC scheduler systems jobs input scripts, submit these scripts to HPC systems, and poke until they finish
|
|
5
5
|
Author: DeepModeling
|
|
6
6
|
License: GNU LESSER GENERAL PUBLIC LICENSE
|
|
@@ -195,9 +195,9 @@ Requires-Dist: tomli>=1.1.0; python_version < "3.11"
|
|
|
195
195
|
Provides-Extra: docs
|
|
196
196
|
Requires-Dist: sphinx; extra == "docs"
|
|
197
197
|
Requires-Dist: myst-parser; extra == "docs"
|
|
198
|
-
Requires-Dist:
|
|
198
|
+
Requires-Dist: sphinx-book-theme; extra == "docs"
|
|
199
199
|
Requires-Dist: numpydoc; extra == "docs"
|
|
200
|
-
Requires-Dist:
|
|
200
|
+
Requires-Dist: deepmodeling-sphinx>=0.3.0; extra == "docs"
|
|
201
201
|
Requires-Dist: dargs>=0.3.1; extra == "docs"
|
|
202
202
|
Requires-Dist: sphinx-argparse<0.5.0; extra == "docs"
|
|
203
203
|
Provides-Extra: cloudserver
|
|
@@ -212,6 +212,7 @@ Provides-Extra: gui
|
|
|
212
212
|
Requires-Dist: dpgui; extra == "gui"
|
|
213
213
|
Provides-Extra: test
|
|
214
214
|
Requires-Dist: dpgui; extra == "test"
|
|
215
|
+
Dynamic: license-file
|
|
215
216
|
|
|
216
217
|
# DPDispatcher
|
|
217
218
|
|
|
@@ -221,7 +222,7 @@ Requires-Dist: dpgui; extra == "test"
|
|
|
221
222
|
[](https://dpdispatcher.readthedocs.io/)
|
|
222
223
|
|
|
223
224
|
DPDispatcher is a Python package used to generate HPC (High-Performance Computing) scheduler systems (Slurm/PBS/LSF/Bohrium) jobs input scripts, submit them to HPC systems, and poke until they finish.
|
|
224
|
-
|
|
225
|
+
|
|
225
226
|
DPDispatcher will monitor (poke) until these jobs finish and download the results files (if these jobs are running on remote systems connected by SSH).
|
|
226
227
|
|
|
227
228
|
For more information, check the [documentation](https://dpdispatcher.readthedocs.io/).
|
|
@@ -51,9 +51,9 @@ dpdisp = "dpdispatcher.dpdisp:main"
|
|
|
51
51
|
docs = [
|
|
52
52
|
'sphinx',
|
|
53
53
|
'myst-parser',
|
|
54
|
-
'
|
|
54
|
+
'sphinx-book-theme',
|
|
55
55
|
'numpydoc',
|
|
56
|
-
'
|
|
56
|
+
'deepmodeling-sphinx>=0.3.0',
|
|
57
57
|
'dargs>=0.3.1',
|
|
58
58
|
'sphinx-argparse<0.5.0',
|
|
59
59
|
]
|
|
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
|