experimaestro 1.8.5__tar.gz → 1.8.7__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 experimaestro might be problematic. Click here for more details.

Files changed (156) hide show
  1. {experimaestro-1.8.5 → experimaestro-1.8.7}/PKG-INFO +1 -1
  2. {experimaestro-1.8.5 → experimaestro-1.8.7}/pyproject.toml +2 -2
  3. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/context.py +1 -1
  4. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/serialization.py +3 -2
  5. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/launcherfinder/registry.py +1 -0
  6. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/launcherfinder/specs.py +10 -9
  7. {experimaestro-1.8.5 → experimaestro-1.8.7}/LICENSE +0 -0
  8. {experimaestro-1.8.5 → experimaestro-1.8.7}/README.md +0 -0
  9. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/__init__.py +0 -0
  10. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/__main__.py +0 -0
  11. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/annotations.py +0 -0
  12. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/checkers.py +0 -0
  13. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/cli/__init__.py +0 -0
  14. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/cli/filter.py +0 -0
  15. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/cli/jobs.py +0 -0
  16. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/click.py +0 -0
  17. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/commandline.py +0 -0
  18. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/compat.py +0 -0
  19. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/connectors/__init__.py +0 -0
  20. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/connectors/local.py +0 -0
  21. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/connectors/ssh.py +0 -0
  22. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/__init__.py +0 -0
  23. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/arguments.py +0 -0
  24. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/callbacks.py +0 -0
  25. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/identifier.py +0 -0
  26. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/objects/__init__.py +0 -0
  27. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/objects/config.py +0 -0
  28. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/objects/config_utils.py +0 -0
  29. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/objects/config_walk.py +0 -0
  30. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/objects.pyi +0 -0
  31. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/serializers.py +0 -0
  32. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/types.py +0 -0
  33. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/core/utils.py +0 -0
  34. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/exceptions.py +0 -0
  35. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/experiments/__init__.py +0 -0
  36. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/experiments/cli.py +0 -0
  37. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/experiments/configuration.py +0 -0
  38. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/generators.py +0 -0
  39. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/huggingface.py +0 -0
  40. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/ipc.py +0 -0
  41. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/launcherfinder/__init__.py +0 -0
  42. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/launcherfinder/base.py +0 -0
  43. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/launcherfinder/parser.py +0 -0
  44. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/launchers/__init__.py +0 -0
  45. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/launchers/direct.py +0 -0
  46. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/launchers/oar.py +0 -0
  47. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/launchers/slurm/__init__.py +0 -0
  48. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/launchers/slurm/base.py +0 -0
  49. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/locking.py +0 -0
  50. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/mkdocs/__init__.py +0 -0
  51. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/mkdocs/annotations.py +0 -0
  52. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/mkdocs/base.py +0 -0
  53. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/mkdocs/metaloader.py +0 -0
  54. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/mkdocs/style.css +0 -0
  55. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/mypy.py +0 -0
  56. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/notifications.py +0 -0
  57. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/py.typed +0 -0
  58. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/rpyc.py +0 -0
  59. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/run.py +0 -0
  60. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/scheduler/__init__.py +0 -0
  61. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/scheduler/base.py +0 -0
  62. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/scheduler/dependencies.py +0 -0
  63. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/scheduler/dynamic_outputs.py +0 -0
  64. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/scheduler/services.py +0 -0
  65. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/scheduler/state.py +0 -0
  66. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/scheduler/workspace.py +0 -0
  67. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/scriptbuilder.py +0 -0
  68. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/__init__.py +0 -0
  69. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/0c35d18bf06992036b69.woff2 +0 -0
  70. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/1815e00441357e01619e.ttf +0 -0
  71. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/219aa9140e099e6c72ed.woff2 +0 -0
  72. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/2463b90d9a316e4e5294.woff2 +0 -0
  73. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/2582b0e4bcf85eceead0.ttf +0 -0
  74. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/3a4004a46a653d4b2166.woff +0 -0
  75. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/3baa5b8f3469222b822d.woff +0 -0
  76. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/4d73cb90e394b34b7670.woff +0 -0
  77. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/4ef4218c522f1eb6b5b1.woff2 +0 -0
  78. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/5d681e2edae8c60630db.woff +0 -0
  79. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/6f420cf17cc0d7676fad.woff2 +0 -0
  80. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/89999bdf5d835c012025.woff2 +0 -0
  81. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/914997e1bdfc990d0897.ttf +0 -0
  82. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/c210719e60948b211a12.woff2 +0 -0
  83. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/c380809fd3677d7d6903.woff2 +0 -0
  84. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/f882956fd323fd322f31.woff +0 -0
  85. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/favicon.ico +0 -0
  86. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/index.css +0 -0
  87. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/index.css.map +0 -0
  88. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/index.html +0 -0
  89. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/index.js +0 -0
  90. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/index.js.map +0 -0
  91. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/login.html +0 -0
  92. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/server/data/manifest.json +0 -0
  93. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/settings.py +0 -0
  94. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/sphinx/__init__.py +0 -0
  95. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/sphinx/static/experimaestro.css +0 -0
  96. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/taskglobals.py +0 -0
  97. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/__init__.py +0 -0
  98. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/conftest.py +0 -0
  99. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/connectors/bin/executable.py +0 -0
  100. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/connectors/test_local.py +0 -0
  101. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/connectors/utils.py +0 -0
  102. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/core/__init__.py +0 -0
  103. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/core/test_generics.py +0 -0
  104. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/definitions_types.py +0 -0
  105. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/launchers/__init__.py +0 -0
  106. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/launchers/bin/sacct +0 -0
  107. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/launchers/bin/sbatch +0 -0
  108. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/launchers/bin/srun +0 -0
  109. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/launchers/bin/test.py +0 -0
  110. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/launchers/common.py +0 -0
  111. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/launchers/config_slurm/__init__.py +0 -0
  112. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/launchers/config_slurm/launchers.py +0 -0
  113. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/launchers/test_local.py +0 -0
  114. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/launchers/test_slurm.py +0 -0
  115. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/restart.py +0 -0
  116. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/restart_main.py +0 -0
  117. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/scripts/notifyandwait.py +0 -0
  118. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/scripts/waitforfile.py +0 -0
  119. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/task_tokens.py +0 -0
  120. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/tasks/__init__.py +0 -0
  121. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/tasks/all.py +0 -0
  122. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/tasks/foreign.py +0 -0
  123. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_checkers.py +0 -0
  124. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_dependencies.py +0 -0
  125. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_experiment.py +0 -0
  126. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_findlauncher.py +0 -0
  127. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_forward.py +0 -0
  128. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_identifier.py +0 -0
  129. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_instance.py +0 -0
  130. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_objects.py +0 -0
  131. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_outputs.py +0 -0
  132. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_param.py +0 -0
  133. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_progress.py +0 -0
  134. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_serializers.py +0 -0
  135. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_snippets.py +0 -0
  136. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_ssh.py +0 -0
  137. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_tags.py +0 -0
  138. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_tasks.py +0 -0
  139. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_tokens.py +0 -0
  140. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_types.py +0 -0
  141. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/test_validation.py +0 -0
  142. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/token_reschedule.py +0 -0
  143. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tests/utils.py +0 -0
  144. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tokens.py +0 -0
  145. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tools/__init__.py +0 -0
  146. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tools/diff.py +0 -0
  147. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tools/documentation.py +0 -0
  148. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/tools/jobs.py +0 -0
  149. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/typingutils.py +0 -0
  150. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/utils/__init__.py +0 -0
  151. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/utils/asyncio.py +0 -0
  152. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/utils/jobs.py +0 -0
  153. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/utils/jupyter.py +0 -0
  154. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/utils/resources.py +0 -0
  155. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/utils/settings.py +0 -0
  156. {experimaestro-1.8.5 → experimaestro-1.8.7}/src/experimaestro/xpmutils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: experimaestro
3
- Version: 1.8.5
3
+ Version: 1.8.7
4
4
  Summary: "Experimaestro is a computer science experiment manager"
5
5
  License: GPL-3
6
6
  Keywords: experiment manager
@@ -20,7 +20,7 @@ include = [
20
20
  "src/experimaestro/mkdocs/style.css",
21
21
  { path="src/experimaestro/server/data/*", format=['sdist', 'wheel']}
22
22
  ]
23
- version = "1.8.5"
23
+ version = "1.8.7"
24
24
  repository = "https://github.com/experimaestro/experimaestro-python"
25
25
  documentation = "https://experimaestro-python.readthedocs.io/"
26
26
 
@@ -122,7 +122,7 @@ warn_unused_ignores = true
122
122
 
123
123
  [tool.commitizen]
124
124
  name = "cz_conventional_commits"
125
- version = "1.8.5"
125
+ version = "1.8.7"
126
126
  changelog_start_rev = "v1.0.0"
127
127
  tag_format = "v$major.$minor.$patch$prerelease"
128
128
  # update_changelog_on_bump = true
@@ -73,7 +73,7 @@ class SerializationContext:
73
73
 
74
74
 
75
75
  class SerializedPathLoader(Protocol):
76
- def __call__(path: Union[Path, str, SerializedPath]) -> Path:
76
+ def __call__(self, path: Union[Path, str, SerializedPath]) -> Path:
77
77
  """Get a filesystem path from a relative path
78
78
 
79
79
  :param path: The relative path
@@ -66,7 +66,8 @@ def save(obj: Any, save_directory: Optional[Path]):
66
66
  def get_data_loader(path: Union[str, Path, SerializedPathLoader]):
67
67
  if path is None:
68
68
 
69
- def data_loader():
69
+ def data_loader(_: Union[str, Path, SerializedPathLoader]):
70
+ # Just raise an exception
70
71
  raise RuntimeError("No serialization path was given")
71
72
 
72
73
  return data_loader
@@ -170,7 +171,7 @@ def deserialize(
170
171
  with data_loader("definition.json").open("rt") as fh:
171
172
  content = json.load(fh)
172
173
 
173
- object, init_tasks = from_state_dict(content, as_instance=as_instance)
174
+ object, init_tasks = from_state_dict(content, data_loader, as_instance=as_instance)
174
175
 
175
176
  if as_instance:
176
177
  for init_task in init_tasks:
@@ -83,6 +83,7 @@ class LauncherRegistry:
83
83
 
84
84
  # Register the find launcher function if it exists
85
85
  launchers_py = basepath / "launchers.py"
86
+ print(f"basepath {launchers_py}")
86
87
  if launchers_py.is_file():
87
88
  logger.info("Loading %s", launchers_py)
88
89
 
@@ -20,9 +20,6 @@ class CudaSpecification:
20
20
  min_memory: int = 0
21
21
  """Minimum request memory (in bytes)"""
22
22
 
23
- def __lt__(self, other: "CudaSpecification"):
24
- return self.memory < other.memory
25
-
26
23
  def match(self, spec: "CudaSpecification"):
27
24
  """Returns True if the specification matches this host"""
28
25
  return (self.memory >= spec.memory) and (self.min_memory <= spec.memory)
@@ -30,7 +27,7 @@ class CudaSpecification:
30
27
  def __repr__(self):
31
28
  return (
32
29
  f"CUDA({self.model} "
33
- f"{format_size(self.memory)}/{format_size(self.min_memory)})"
30
+ f"max={format_size(self.memory)}/min={format_size(self.min_memory)})"
34
31
  )
35
32
 
36
33
 
@@ -48,8 +45,8 @@ class CPUSpecification:
48
45
  cpu_per_gpu: int = 0
49
46
  """Number of CPU per GPU (0 if not defined)"""
50
47
 
51
- def __lt__(self, other: "CPUSpecification"):
52
- return self.memory < other.memory and self.cores < other.cores
48
+ def match(self, other: "CPUSpecification"):
49
+ return (self.memory >= other.memory) and (self.cores >= other.cores)
53
50
 
54
51
  def total_memory(self, gpus: int = 0):
55
52
  return max(
@@ -95,6 +92,7 @@ class HostRequirement:
95
92
  """A requirement must be a disjunction of host requirements"""
96
93
 
97
94
  requirements: List["HostSimpleRequirement"]
95
+ """List of requirements (by order of priority)"""
98
96
 
99
97
  def __init__(self) -> None:
100
98
  self.requirements = []
@@ -133,7 +131,10 @@ class HostSimpleRequirement(HostRequirement):
133
131
  """Simple host requirement"""
134
132
 
135
133
  cuda_gpus: List["CudaSpecification"]
134
+ """Specification for CUDA gpus"""
135
+
136
136
  cpu: "CPUSpecification"
137
+ """Specification for CPU"""
137
138
 
138
139
  duration: int
139
140
  """Requested duration (in seconds)"""
@@ -158,7 +159,7 @@ class HostSimpleRequirement(HostRequirement):
158
159
  self.cpu.cores = max(req.cpu.cores, self.cpu.cores)
159
160
  self.duration = max(req.duration, self.duration)
160
161
  self.cuda_gpus.extend(req.cuda_gpus)
161
- self.cuda_gpus.sort()
162
+ self.cuda_gpus.sort(key=lambda cuda: -cuda.memory)
162
163
 
163
164
  def match(self, host: HostSpecification) -> Optional[MatchRequirement]:
164
165
  if self.cuda_gpus:
@@ -182,7 +183,7 @@ class HostSimpleRequirement(HostRequirement):
182
183
  )
183
184
  return None
184
185
 
185
- if host.cpu < self.cpu:
186
+ if not host.cpu.match(self.cpu):
186
187
  return None
187
188
 
188
189
  if host.max_duration > 0 and self.duration > host.max_duration:
@@ -197,7 +198,7 @@ class HostSimpleRequirement(HostRequirement):
197
198
  _self = deepcopy(self)
198
199
  for _ in range(count - 1):
199
200
  _self.cuda_gpus.extend(self.cuda_gpus)
200
- _self.cuda_gpus.sort()
201
+ _self.cuda_gpus.sort(key=lambda cuda: -cuda.memory)
201
202
 
202
203
  return _self
203
204
 
File without changes
File without changes