dpdispatcher 0.5.7__tar.gz → 0.5.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (231) hide show
  1. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/PKG-INFO +1 -1
  2. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/batch.md +8 -0
  3. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/__init__.py +2 -0
  4. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/_version.py +2 -2
  5. dpdispatcher-0.5.8/dpdispatcher/fugaku.py +94 -0
  6. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/submission.py +67 -3
  7. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/PKG-INFO +1 -1
  8. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/SOURCES.txt +3 -0
  9. dpdispatcher-0.5.8/tests/jsons/machine_fugaku.json +24 -0
  10. dpdispatcher-0.5.8/tests/jsons/machine_local_fugaku.json +18 -0
  11. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_run_submission.py +63 -1
  12. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/ci-docker.yml +0 -0
  13. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/machines.yml +0 -0
  14. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/mirror_gitee.yml +0 -0
  15. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/publish_conda.yml +0 -0
  16. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/pyright.yml +0 -0
  17. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/release.yml +0 -0
  18. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.github/workflows/test.yml +0 -0
  19. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.gitignore +0 -0
  20. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/.pre-commit-config.yaml +0 -0
  21. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/CONTRIBUTING.md +0 -0
  22. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/Dockerfile +0 -0
  23. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/LICENSE +0 -0
  24. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/README.md +0 -0
  25. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/LICENSE +0 -0
  26. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/README.md +0 -0
  27. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/pbs/docker-compose.yml +0 -0
  28. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/pbs/start-pbs.sh +0 -0
  29. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/pbs.sh +0 -0
  30. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/slurm/docker-compose.yml +0 -0
  31. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/slurm/register_cluster.sh +0 -0
  32. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/slurm/start-slurm.sh +0 -0
  33. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/slurm.sh +0 -0
  34. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/ssh/docker-compose.yml +0 -0
  35. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/ssh/start-ssh.sh +0 -0
  36. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/ssh.sh +0 -0
  37. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/ci/ssh_rsync.sh +0 -0
  38. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/codecov.yml +0 -0
  39. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/conda/conda_build_config.yaml +0 -0
  40. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/conda/meta.yaml +0 -0
  41. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/.gitignore +0 -0
  42. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/Makefile +0 -0
  43. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/conf.py +0 -0
  44. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/context.md +0 -0
  45. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/credits.rst +0 -0
  46. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/dpdispatcher_on_yarn.md +0 -0
  47. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/examples/expanse.md +0 -0
  48. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/examples/g16.md +0 -0
  49. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/examples/shell.md +0 -0
  50. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/getting-started.md +0 -0
  51. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/index.rst +0 -0
  52. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/install.md +0 -0
  53. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/machine.rst +0 -0
  54. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/make.bat +0 -0
  55. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/requirements.txt +0 -0
  56. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/resources.rst +0 -0
  57. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/doc/task.rst +0 -0
  58. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/JobStatus.py +0 -0
  59. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/arginfo.py +0 -0
  60. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/base_context.py +0 -0
  61. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/distributed_shell.py +0 -0
  62. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dp_cloud_server.py +0 -0
  63. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dp_cloud_server_context.py +0 -0
  64. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/__init__.py +0 -0
  65. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/client.py +0 -0
  66. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/config.py +0 -0
  67. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/retcode.py +0 -0
  68. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/temp_test.py +0 -0
  69. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpcloudserver/zip_file.py +0 -0
  70. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/dpdisp.py +0 -0
  71. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/hdfs_cli.py +0 -0
  72. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/hdfs_context.py +0 -0
  73. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/lazy_local_context.py +0 -0
  74. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/local_context.py +0 -0
  75. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/lsf.py +0 -0
  76. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/machine.py +0 -0
  77. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/pbs.py +0 -0
  78. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/shell.py +0 -0
  79. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/slurm.py +0 -0
  80. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/ssh_context.py +0 -0
  81. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher/utils.py +0 -0
  82. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/dependency_links.txt +0 -0
  83. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/entry_points.txt +0 -0
  84. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/requires.txt +0 -0
  85. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/dpdispatcher.egg-info/top_level.txt +0 -0
  86. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/machine/expanse.json +0 -0
  87. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/machine/lazy_local.json +0 -0
  88. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/machine/mandu.json +0 -0
  89. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/resources/expanse_cpu.json +0 -0
  90. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/resources/mandu.json +0 -0
  91. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/task/deepmd-kit.json +0 -0
  92. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/examples/task/g16.json +0 -0
  93. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/pyproject.toml +0 -0
  94. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/scripts/script_gen_dargs_docs.py +0 -0
  95. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/scripts/script_gen_dargs_json.py +0 -0
  96. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/setup.cfg +0 -0
  97. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/.gitignore +0 -0
  98. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/__init__.py +0 -0
  99. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/batch.json +0 -0
  100. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/context.py +0 -0
  101. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/debug_test_class_submission_init.py +0 -0
  102. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_ali_ehpc.py +0 -0
  103. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_dp_cloud_server.py +0 -0
  104. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_lazy_ali_ehpc.py +0 -0
  105. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_lsf.py +0 -0
  106. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_shell.py +0 -0
  107. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_slurm.py +0 -0
  108. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/devel_test_ssh_ali_ehpc.py +0 -0
  109. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/graph.pb +0 -0
  110. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/job.json +0 -0
  111. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine.json +0 -0
  112. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_ali_ehpc.json +0 -0
  113. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_center.json +0 -0
  114. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_diffenert.json +0 -0
  115. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_dp_cloud_server.json +0 -0
  116. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_if_cuda_multi_devices.json +0 -0
  117. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_lazy_local_lsf.json +0 -0
  118. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_lazy_local_slurm.json +0 -0
  119. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_lazylocal_shell.json +0 -0
  120. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_local_shell.json +0 -0
  121. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_lsf.json +0 -0
  122. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_slurm.json +0 -0
  123. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/machine_yarn.json +0 -0
  124. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/resources.json +0 -0
  125. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/submission.json +0 -0
  126. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/jsons/task.json +0 -0
  127. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/lsf/context.py +0 -0
  128. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/lsf/test_dispatcher.py +0 -0
  129. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/lsf/test_lsf_local.py +0 -0
  130. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/old/test_dispatcher_utils.py +0 -0
  131. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/old/test_lazy_local_context.py +0 -0
  132. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/old/test_local_context.py +0 -0
  133. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/old/test_local_session.py +0 -0
  134. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/old/test_ssh_context.py +0 -0
  135. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/pbs/context.py +0 -0
  136. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/pbs/test_dispatcher.py +0 -0
  137. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/pbs/test_pbs_local.py +0 -0
  138. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/sample_class.py +0 -0
  139. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/script_gen_json.py +0 -0
  140. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/shell/context.py +0 -0
  141. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/shell/test_dispatcher.py +0 -0
  142. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/shell/test_shell_local.py +0 -0
  143. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/shell/test_shell_ssh.py +0 -0
  144. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/context.py +0 -0
  145. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/test_dispatcher.py +0 -0
  146. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/test_dispatcher_lazy_local.py +0 -0
  147. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/test_slurm_lazy_local.py +0 -0
  148. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/test_slurm_local.py +0 -0
  149. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm/test_slurm_ssh.py +0 -0
  150. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/slurm_test.env +0 -0
  151. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_argcheck.py +0 -0
  152. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_job.py +0 -0
  153. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_machine.py +0 -0
  154. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_machine_dispatch.py +0 -0
  155. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_resources.py +0 -0
  156. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_submission.py +0 -0
  157. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_submission_init.py +0 -0
  158. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_class_task.py +0 -0
  159. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-1/conf.lmp +0 -0
  160. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-1/input.lammps +0 -0
  161. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-1/some_dir/some_file +0 -0
  162. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-2/conf.lmp +0 -0
  163. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-2/input.lammps +0 -0
  164. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-3/conf.lmp +0 -0
  165. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-3/input.lammps +0 -0
  166. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-4/conf.lmp +0 -0
  167. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/bct-4/input.lammps +0 -0
  168. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/dir with space/file with space +0 -0
  169. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/graph.pb +0 -0
  170. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_context_dir/0_md/some_dir/some_file +0 -0
  171. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_group_size.py +0 -0
  172. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_context.py +0 -0
  173. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-1/conf.lmp +0 -0
  174. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-1/input.lammps +0 -0
  175. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-2/conf.lmp +0 -0
  176. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-2/input.lammps +0 -0
  177. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-3/conf.lmp +0 -0
  178. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-3/input.lammps +0 -0
  179. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-4/conf.lmp +0 -0
  180. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/bct-4/input.lammps +0 -0
  181. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_hdfs_dir/0_md/graph.pb +0 -0
  182. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_if_cuda_multi_devices/test_dir/test.txt +0 -0
  183. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_import_classes.py +0 -0
  184. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lazy_local_context.py +0 -0
  185. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_local_context.py +0 -0
  186. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-1/conf.lmp +0 -0
  187. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-1/input.lammps +0 -0
  188. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-2/conf.lmp +0 -0
  189. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-2/input.lammps +0 -0
  190. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-3/conf.lmp +0 -0
  191. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-3/input.lammps +0 -0
  192. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-4/conf.lmp +0 -0
  193. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/bct-4/input.lammps +0 -0
  194. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/graph.pb +0 -0
  195. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_dir/0_md/submission.json +0 -0
  196. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_lsf_script_generation.py +0 -0
  197. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-1/conf.lmp +0 -0
  198. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-1/input.lammps +0 -0
  199. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-2/conf.lmp +0 -0
  200. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-2/input.lammps +0 -0
  201. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-3/conf.lmp +0 -0
  202. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-3/input.lammps +0 -0
  203. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-4/conf.lmp +0 -0
  204. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/bct-4/input.lammps +0 -0
  205. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_pbs_dir/0_md/graph.pb +0 -0
  206. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_retry.py +0 -0
  207. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_run_submission_ratio_unfinished.py +0 -0
  208. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_cuda_multi_devices.py +0 -0
  209. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival.py +0 -0
  210. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/fail_dir/mock_fail_task.txt +0 -0
  211. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/dir with space/example.txt +0 -0
  212. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/dir1/example.txt +0 -0
  213. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/dir2/example.txt +0 -0
  214. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/dir3/example.txt +0 -0
  215. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/dir4/example.txt +0 -0
  216. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/parent_dir/graph.pb +0 -0
  217. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_shell_trival_dir/recover_dir/mock_recover_task.txt +0 -0
  218. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-1/conf.lmp +0 -0
  219. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-1/input.lammps +0 -0
  220. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-2/conf.lmp +0 -0
  221. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-2/input.lammps +0 -0
  222. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-3/conf.lmp +0 -0
  223. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-3/input.lammps +0 -0
  224. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-4/conf.lmp +0 -0
  225. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/bct-4/input.lammps +0 -0
  226. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/d3c842c5b9476e48f7145b370cd330372b9293e1.json +0 -0
  227. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/graph.pb +0 -0
  228. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_dir/0_md/submission.json +0 -0
  229. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_slurm_script_generation.py +0 -0
  230. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_ssh_context.py +0 -0
  231. {dpdispatcher-0.5.7 → dpdispatcher-0.5.8}/tests/test_work_path/.gitkeep +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dpdispatcher
3
- Version: 0.5.7
3
+ Version: 0.5.8
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
@@ -62,3 +62,11 @@ Read Bohrium documentation for details.
62
62
 
63
63
  `DistributedShell` is used to submit yarn jobs.
64
64
  Read [Support DPDispatcher on Yarn](dpdispatcher_on_yarn.md) for details.
65
+
66
+ ## Fugaku
67
+
68
+ {dargs:argument}`batch_type <resources/batch_type>`: `Fugaku`
69
+
70
+ [Fujitsu cloud service](https://doc.cloud.global.fujitsu.com/lib/common/jp/hpc-user-manual/) is a job scheduling system used by Fujitsu's HPCs such as Fugaku, ITO and K computer. It should be noted that although the same job scheduling system is used, there are some differences in the details, Fagaku class cannot be directly used for other HPCs.
71
+
72
+ Read Fujitsu cloud service documentation for details.
@@ -43,6 +43,7 @@ except ImportError:
43
43
  from .distributed_shell import DistributedShell
44
44
  from .dp_cloud_server import DpCloudServer, Lebesgue
45
45
  from .dp_cloud_server_context import DpCloudServerContext, LebesgueContext
46
+ from .fugaku import Fugaku
46
47
  from .hdfs_context import HDFSContext
47
48
  from .lazy_local_context import LazyLocalContext
48
49
  from .local_context import LocalContext
@@ -85,6 +86,7 @@ __all__ = [
85
86
  "PBS",
86
87
  "Shell",
87
88
  "Slurm",
89
+ "Fugaku",
88
90
  "SSHContext",
89
91
  "Submission",
90
92
  "Task",
@@ -1,4 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- __version__ = version = '0.5.7'
4
- __version_tuple__ = version_tuple = (0, 5, 7)
3
+ __version__ = version = '0.5.8'
4
+ __version_tuple__ = version_tuple = (0, 5, 8)
@@ -0,0 +1,94 @@
1
+ import shlex
2
+
3
+ from dpdispatcher import dlog
4
+ from dpdispatcher.JobStatus import JobStatus
5
+ from dpdispatcher.machine import Machine
6
+
7
+ fugaku_script_header_template = """\
8
+ {queue_name_line}
9
+ {fugaku_node_number_line}
10
+ {fugaku_ntasks_per_node_line}
11
+ """
12
+
13
+
14
+ class Fugaku(Machine):
15
+ def gen_script(self, job):
16
+ fugaku_script = super().gen_script(job)
17
+ return fugaku_script
18
+
19
+ def gen_script_header(self, job):
20
+ resources = job.resources
21
+ fugaku_script_header_dict = {}
22
+ fugaku_script_header_dict[
23
+ "fugaku_node_number_line"
24
+ ] = f'#PJM -L "node={resources.number_node}" '
25
+ fugaku_script_header_dict[
26
+ "fugaku_ntasks_per_node_line"
27
+ ] = '#PJM --mpi "max-proc-per-node={cpu_per_node}"'.format(
28
+ cpu_per_node=resources.cpu_per_node
29
+ )
30
+ fugaku_script_header_dict[
31
+ "queue_name_line"
32
+ ] = f'#PJM -L "rscgrp={resources.queue_name}"'
33
+ fugaku_script_header = fugaku_script_header_template.format(
34
+ **fugaku_script_header_dict
35
+ )
36
+ return fugaku_script_header
37
+
38
+ def do_submit(self, job):
39
+ script_file_name = job.script_file_name
40
+ script_str = self.gen_script(job)
41
+ job_id_name = job.job_hash + "_job_id"
42
+ # script_str = self.sub_script(job_dirs, cmd, args=args, resources=resources, outlog=outlog, errlog=errlog)
43
+ self.context.write_file(fname=script_file_name, write_str=script_str)
44
+ # self.context.write_file(fname=os.path.join(self.context.submission.work_base, script_file_name), write_str=script_str)
45
+ # script_file_dir = os.path.join(self.context.submission.work_base)
46
+ script_file_dir = self.context.remote_root
47
+ # stdin, stdout, stderr = self.context.block_checkcall('cd %s && %s %s' % (self.context.remote_root, 'pjsub', script_file_name))
48
+
49
+ stdin, stdout, stderr = self.context.block_checkcall(
50
+ "cd {} && {} {}".format(
51
+ shlex.quote(script_file_dir), "pjsub", shlex.quote(script_file_name)
52
+ )
53
+ )
54
+ subret = stdout.readlines()
55
+ job_id = subret[0].split()[5]
56
+ self.context.write_file(job_id_name, job_id)
57
+ return job_id
58
+
59
+ def default_resources(self, resources):
60
+ pass
61
+
62
+ def check_status(self, job):
63
+ job_id = job.job_id
64
+ if job_id == "":
65
+ return JobStatus.unsubmitted
66
+ ret, stdin, stdout, stderr = self.context.block_call("pjstat " + job_id)
67
+ err_str = stderr.read().decode("utf-8")
68
+ try:
69
+ status_line = stdout.read().decode("utf-8").split("\n")[-2]
70
+ # pjstat only retrun 0 if the job is not waiting or running
71
+ except Exception:
72
+ ret, stdin, stdout, stderr = self.context.block_call("pjstat -H " + job_id)
73
+ status_line = stdout.read().decode("utf-8").split("\n")[-2]
74
+ status_word = status_line.split()[3]
75
+ if status_word in ["EXT", "CCL", "ERR"]:
76
+ if self.check_finish_tag(job):
77
+ dlog.info(f"job: {job.job_hash} {job.job_id} finished")
78
+ return JobStatus.finished
79
+ else:
80
+ return JobStatus.terminated
81
+ else:
82
+ return JobStatus.unknown
83
+ status_word = status_line.split()[3]
84
+ # dlog.info (status_word)
85
+ if status_word in ["QUE", "HLD", "RNA", "SPD"]:
86
+ return JobStatus.waiting
87
+ elif status_word in ["RUN", "RNE"]:
88
+ return JobStatus.running
89
+ else:
90
+ return JobStatus.unknown
91
+
92
+ def check_finish_tag(self, job):
93
+ job_tag_finished = job.job_hash + "_job_tag_finished"
94
+ return self.context.check_file_exists(job_tag_finished)
@@ -1,5 +1,7 @@
1
1
  # %%
2
+ import asyncio
2
3
  import copy
4
+ import functools
3
5
  import json
4
6
  import os
5
7
  import pathlib
@@ -199,7 +201,9 @@ class Submission:
199
201
  self.local_root = machine.context.temp_local_root
200
202
  return self
201
203
 
202
- def run_submission(self, *, dry_run=False, exit_on_submit=False, clean=True):
204
+ def run_submission(
205
+ self, *, dry_run=False, exit_on_submit=False, clean=True, check_interval=30
206
+ ):
203
207
  """Main method to execute the submission.
204
208
  First, check whether old Submission exists on the remote machine, and try to recover from it.
205
209
  Second, upload the local files to the remote machine where the tasks to be executed.
@@ -240,7 +244,7 @@ class Submission:
240
244
  break
241
245
 
242
246
  try:
243
- time.sleep(30)
247
+ time.sleep(check_interval)
244
248
  except (Exception, KeyboardInterrupt, SystemExit) as e:
245
249
  self.submission_to_json()
246
250
  dlog.exception(e)
@@ -254,12 +258,72 @@ class Submission:
254
258
  finally:
255
259
  pass
256
260
  self.handle_unexpected_submission_state()
257
- self.download_jobs()
261
+ self.try_download_result()
258
262
  self.submission_to_json()
259
263
  if clean:
260
264
  self.clean_jobs()
261
265
  return self.serialize()
262
266
 
267
+ def try_download_result(self):
268
+ start_time = time.time()
269
+ retry_interval = 60 # 每1分钟重试一次
270
+ success = False
271
+ while not success:
272
+ try:
273
+ self.download_jobs()
274
+ success = True
275
+ except (EOFError, Exception) as e:
276
+ dlog.exception(e)
277
+ elapsed_time = time.time() - start_time
278
+ if elapsed_time < 3600: # 1小时内
279
+ dlog.info("Retrying in 1 minute...")
280
+ time.sleep(retry_interval)
281
+ elif elapsed_time < 86400: # 1小时后,但在24小时内
282
+ retry_interval = 600 # 每10分钟重试一次
283
+ dlog.info("Retrying in 10 minutes...")
284
+ time.sleep(retry_interval)
285
+ else: # 超过24小时
286
+ dlog.info("Maximum retries time reached. Exiting.")
287
+ break
288
+
289
+ async def async_run_submission(self, **kwargs):
290
+ """Async interface of run_submission.
291
+
292
+ Examples
293
+ --------
294
+ >>> import asyncio
295
+ >>> from dpdispacher import Machine, Resource, Submission
296
+ >>> async def run_jobs():
297
+ ... backgroud_task = set()
298
+ ... # task1
299
+ ... task1 = Task(...)
300
+ ... submission1 = Submission(..., task_list=[task1])
301
+ ... background_task = asyncio.create_task(
302
+ ... submission1.async_run_submission(check_interval=2, clean=False)
303
+ ... )
304
+ ... # task2
305
+ ... task2 = Task(...)
306
+ ... submission2 = Submission(..., task_list=[task1])
307
+ ... background_task = asyncio.create_task(
308
+ ... submission2.async_run_submission(check_interval=2, clean=False)
309
+ ... )
310
+ ... background_tasks.add(background_task)
311
+ ... result = await asyncio.gather(*background_tasks)
312
+ ... return result
313
+ >>> run_jobs()
314
+
315
+ May raise Error if pass `clean=True` explicitly when submit to pbs or slurm.
316
+ """
317
+ kwargs = {**{"clean": False}, **kwargs}
318
+ if kwargs["clean"]:
319
+ dlog.warning(
320
+ "Using async submission with `clean=True`, "
321
+ "job may fail in queue system"
322
+ )
323
+ loop = asyncio.get_event_loop()
324
+ wrapped_submission = functools.partial(self.run_submission, **kwargs)
325
+ return await loop.run_in_executor(None, wrapped_submission)
326
+
263
327
  def update_submission_state(self):
264
328
  """Check whether all the jobs in the submission.
265
329
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dpdispatcher
3
- Version: 0.5.7
3
+ Version: 0.5.8
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
@@ -55,6 +55,7 @@ dpdispatcher/distributed_shell.py
55
55
  dpdispatcher/dp_cloud_server.py
56
56
  dpdispatcher/dp_cloud_server_context.py
57
57
  dpdispatcher/dpdisp.py
58
+ dpdispatcher/fugaku.py
58
59
  dpdispatcher/hdfs_cli.py
59
60
  dpdispatcher/hdfs_context.py
60
61
  dpdispatcher/lazy_local_context.py
@@ -131,10 +132,12 @@ tests/jsons/machine_ali_ehpc.json
131
132
  tests/jsons/machine_center.json
132
133
  tests/jsons/machine_diffenert.json
133
134
  tests/jsons/machine_dp_cloud_server.json
135
+ tests/jsons/machine_fugaku.json
134
136
  tests/jsons/machine_if_cuda_multi_devices.json
135
137
  tests/jsons/machine_lazy_local_lsf.json
136
138
  tests/jsons/machine_lazy_local_slurm.json
137
139
  tests/jsons/machine_lazylocal_shell.json
140
+ tests/jsons/machine_local_fugaku.json
138
141
  tests/jsons/machine_local_shell.json
139
142
  tests/jsons/machine_lsf.json
140
143
  tests/jsons/machine_slurm.json
@@ -0,0 +1,24 @@
1
+ {
2
+ "machine": {
3
+ "batch_type": "fugaku",
4
+ "context_type": "SSHContext",
5
+ "local_root" : "./",
6
+ "remote_profile": {
7
+ "hostname": "login.****.jp",
8
+ "key_filename":"/home/***/.ssh/***",
9
+ "passphrase":"******",
10
+ "username": "u*****"
11
+ },
12
+ "remote_root": "/vol*****/data/****"
13
+ },
14
+ "resources": {
15
+ "number_node": 1,
16
+ "cpu_per_node": 48,
17
+ "source_list": [""],
18
+ "queue_name": "small",
19
+ "group_size": 1,
20
+ "custom_flags" : ["#PJM -L \"elapse=4:00:00\"",
21
+ "#PJM -x PJM_LLIO_GFSCACHE=/vol0004",
22
+ "#PJM -g hp******"]
23
+ }
24
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "machine": {
3
+ "batch_type": "fugaku",
4
+ "context_type": "local",
5
+ "local_root" : "./",
6
+ "remote_root": "./"
7
+ },
8
+ "resources": {
9
+ "number_node": 1,
10
+ "cpu_per_node": 48,
11
+ "source_list": [""],
12
+ "queue_name": "small",
13
+ "group_size": 1,
14
+ "custom_flags" : ["#PJM -L \"elapse=4:00:00\"",
15
+ "#PJM -x PJM_LLIO_GFSCACHE=/vol0004",
16
+ "#PJM -g hp******"]
17
+ }
18
+ }
@@ -1,4 +1,6 @@
1
+ import asyncio
1
2
  import os
3
+ import random
2
4
  import shutil
3
5
  import sys
4
6
 
@@ -85,7 +87,51 @@ class RunSubmission:
85
87
  backward_common_files=[],
86
88
  task_list=task_list,
87
89
  )
88
- submission.run_submission()
90
+ submission.run_submission(check_interval=2)
91
+
92
+ for ii in range(4):
93
+ self.assertTrue(
94
+ os.path.isfile(
95
+ os.path.join(
96
+ self.machine_dict["local_root"], "test_dir/", f"out{ii}.txt"
97
+ )
98
+ )
99
+ )
100
+
101
+ def test_async_run_submission(self):
102
+ machine = Machine.load_from_dict(self.machine_dict)
103
+ resources = Resources.load_from_dict(self.resources_dict)
104
+ ntask = 4
105
+
106
+ async def run_jobs(ntask):
107
+ background_tasks = set()
108
+ for ii in range(ntask):
109
+ sleep_time = random.random() * 5 + 2
110
+ task = Task(
111
+ command=f"echo dpdispatcher_unittest_{ii} && sleep {sleep_time}",
112
+ task_work_path="./",
113
+ forward_files=[],
114
+ backward_files=[f"out{ii}.txt"],
115
+ outlog=f"out{ii}.txt",
116
+ )
117
+ submission = Submission(
118
+ work_base="test_dir/",
119
+ machine=machine,
120
+ resources=resources,
121
+ forward_common_files=[],
122
+ backward_common_files=[],
123
+ task_list=[task],
124
+ )
125
+ background_task = asyncio.create_task(
126
+ submission.async_run_submission(check_interval=2, clean=False)
127
+ )
128
+ background_tasks.add(background_task)
129
+ # background_task.add_done_callback(background_tasks.discard)
130
+ res = await asyncio.gather(*background_tasks)
131
+ return res
132
+
133
+ res = asyncio.run(run_jobs(ntask=ntask))
134
+ print(res)
89
135
 
90
136
  for ii in range(4):
91
137
  self.assertTrue(
@@ -110,6 +156,10 @@ class TestSlurmRun(RunSubmission, unittest.TestCase):
110
156
  self.machine_dict["batch_type"] = "Slurm"
111
157
  self.resources_dict["queue_name"] = "normal"
112
158
 
159
+ @unittest.skip("Manaually skip") # comment this line to open unittest
160
+ def test_async_run_submission(self):
161
+ return super().test_async_run_submission()
162
+
113
163
 
114
164
  @unittest.skipIf(
115
165
  os.environ.get("DPDISPATCHER_TEST") != "slurm",
@@ -121,6 +171,10 @@ class TestSlurmJobArrayRun(RunSubmission, unittest.TestCase):
121
171
  self.machine_dict["batch_type"] = "SlurmJobArray"
122
172
  self.resources_dict["queue_name"] = "normal"
123
173
 
174
+ @unittest.skip("Manaually skip") # comment this line to open unittest
175
+ def test_async_run_submission(self):
176
+ return super().test_async_run_submission()
177
+
124
178
 
125
179
  @unittest.skipIf(
126
180
  os.environ.get("DPDISPATCHER_TEST") != "slurm",
@@ -133,6 +187,10 @@ class TestSlurmJobArrayRun2(RunSubmission, unittest.TestCase):
133
187
  self.resources_dict["queue_name"] = "normal"
134
188
  self.resources_dict["kwargs"] = {"slurm_job_size": 2}
135
189
 
190
+ @unittest.skip("Manaually skip") # comment this line to open unittest
191
+ def test_async_run_submission(self):
192
+ return super().test_async_run_submission()
193
+
136
194
 
137
195
  @unittest.skipIf(
138
196
  os.environ.get("DPDISPATCHER_TEST") != "pbs", "outside the pbs testing environment"
@@ -143,6 +201,10 @@ class TestPBSRun(RunSubmission, unittest.TestCase):
143
201
  self.machine_dict["batch_type"] = "PBS"
144
202
  self.resources_dict["queue_name"] = "workq"
145
203
 
204
+ @unittest.skip("Manaually skip") # comment this line to open unittest
205
+ def test_async_run_submission(self):
206
+ return super().test_async_run_submission()
207
+
146
208
 
147
209
  @unittest.skipIf(sys.platform == "win32", "Shell is not supported on Windows")
148
210
  class TestLazyLocalContext(RunSubmission, unittest.TestCase):
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