dayhoff-tools 1.14.4__tar.gz → 1.14.5__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.
Files changed (75) hide show
  1. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/PKG-INFO +1 -1
  2. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/batch/workers/base.py +6 -12
  3. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/boltz.py +62 -24
  4. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/pyproject.toml +1 -1
  5. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/README.md +0 -0
  6. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/__init__.py +0 -0
  7. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/batch/__init__.py +0 -0
  8. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/batch/workers/__init__.py +0 -0
  9. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/batch/workers/boltz.py +0 -0
  10. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/batch/workers/embed_t5.py +0 -0
  11. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/chemistry/standardizer.py +0 -0
  12. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/chemistry/utils.py +0 -0
  13. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/__init__.py +0 -0
  14. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/__init__.py +0 -0
  15. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/aws_batch.py +0 -0
  16. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/__init__.py +0 -0
  17. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/cancel.py +0 -0
  18. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/embed_t5.py +0 -0
  19. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/finalize.py +0 -0
  20. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/list_jobs.py +0 -0
  21. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/local.py +0 -0
  22. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/logs.py +0 -0
  23. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/retry.py +0 -0
  24. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/status.py +0 -0
  25. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/commands/submit.py +0 -0
  26. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/job_id.py +0 -0
  27. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/batch/manifest.py +0 -0
  28. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/cloud_commands.py +0 -0
  29. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engine1/__init__.py +0 -0
  30. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engine1/engine_core.py +0 -0
  31. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engine1/engine_lifecycle.py +0 -0
  32. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engine1/engine_maintenance.py +0 -0
  33. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engine1/engine_management.py +0 -0
  34. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engine1/shared.py +0 -0
  35. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engine1/studio_commands.py +0 -0
  36. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/__init__.py +0 -0
  37. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/api_client.py +0 -0
  38. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/auth.py +0 -0
  39. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/engine-studio-cli.md +0 -0
  40. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/engine_commands.py +0 -0
  41. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/progress.py +0 -0
  42. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/simulators/cli-simulators.md +0 -0
  43. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/simulators/demo.sh +0 -0
  44. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/simulators/engine_list_simulator.py +0 -0
  45. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/simulators/engine_status_simulator.py +0 -0
  46. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/simulators/idle_status_simulator.py +0 -0
  47. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/simulators/simulator_utils.py +0 -0
  48. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/simulators/studio_list_simulator.py +0 -0
  49. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/simulators/studio_status_simulator.py +0 -0
  50. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/ssh_config.py +0 -0
  51. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/engines_studios/studio_commands.py +0 -0
  52. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/github_commands.py +0 -0
  53. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/main.py +0 -0
  54. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/swarm_commands.py +0 -0
  55. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/cli/utility_commands.py +0 -0
  56. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/deployment/base.py +0 -0
  57. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/deployment/deploy_aws.py +0 -0
  58. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/deployment/deploy_gcp.py +0 -0
  59. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/deployment/deploy_utils.py +0 -0
  60. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/deployment/job_runner.py +0 -0
  61. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/deployment/processors.py +0 -0
  62. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/deployment/swarm.py +0 -0
  63. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/embedders.py +0 -0
  64. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/fasta.py +0 -0
  65. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/file_ops.py +0 -0
  66. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/h5.py +0 -0
  67. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/intake/gcp.py +0 -0
  68. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/intake/gtdb.py +0 -0
  69. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/intake/kegg.py +0 -0
  70. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/intake/mmseqs.py +0 -0
  71. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/intake/structure.py +0 -0
  72. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/intake/uniprot.py +0 -0
  73. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/logs.py +0 -0
  74. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/sqlite.py +0 -0
  75. {dayhoff_tools-1.14.4 → dayhoff_tools-1.14.5}/dayhoff_tools/warehouse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dayhoff-tools
3
- Version: 1.14.4
3
+ Version: 1.14.5
4
4
  Summary: Common tools for all the repos at Dayhoff Labs
5
5
  Author: Daniel Martin-Alarcon
6
6
  Author-email: dma@dayhofflabs.com
@@ -30,12 +30,10 @@ def get_array_index() -> int:
30
30
 
31
31
  For array jobs, reads AWS_BATCH_JOB_ARRAY_INDEX.
32
32
  For retry jobs, maps from BATCH_RETRY_INDICES.
33
+ For single jobs (array_size=1), defaults to 0.
33
34
 
34
35
  Returns:
35
36
  The array index this worker should process
36
-
37
- Raises:
38
- RuntimeError: If no array index can be determined
39
37
  """
40
38
  # Check for retry mode first
41
39
  retry_indices = os.environ.get("BATCH_RETRY_INDICES")
@@ -49,15 +47,11 @@ def get_array_index() -> int:
49
47
  )
50
48
  return indices[array_idx]
51
49
 
52
- # Standard array job mode
53
- array_idx = os.environ.get("AWS_BATCH_JOB_ARRAY_INDEX")
54
- if array_idx is not None:
55
- return int(array_idx)
56
-
57
- raise RuntimeError(
58
- "Could not determine array index. "
59
- "Set AWS_BATCH_JOB_ARRAY_INDEX or BATCH_RETRY_INDICES environment variable."
60
- )
50
+ # Standard array job mode - default to 0 for single jobs
51
+ # Note: When array_size=1, AWS Batch runs a single job (not an array),
52
+ # so AWS_BATCH_JOB_ARRAY_INDEX is not set. Default to 0.
53
+ array_idx = os.environ.get("AWS_BATCH_JOB_ARRAY_INDEX", "0")
54
+ return int(array_idx)
61
55
 
62
56
 
63
57
  def get_job_dir() -> Path:
@@ -273,46 +273,84 @@ def _submit_batch_job(
273
273
 
274
274
 
275
275
  def _run_local_mode(input_path: Path):
276
- """Run Boltz locally for a single complex."""
277
- click.echo("Running Boltz locally...")
276
+ """Run Boltz locally in a Docker container.
277
+
278
+ This runs the boltz container with the normal entrypoint, processing
279
+ the first YAML file (index 0) for testing purposes.
280
+ """
281
+ import subprocess
282
+
283
+ click.echo("Running Boltz locally in container...")
278
284
  click.echo(f"Input directory: {input_path}")
279
285
 
280
- # Find first YAML file
286
+ # Find YAML files
281
287
  yaml_files = list(input_path.glob("*.yaml"))
282
288
  if not yaml_files:
283
289
  click.echo(click.style("Error: No YAML files found", fg="red"), err=True)
284
290
  raise SystemExit(1)
285
291
 
286
- input_file = yaml_files[0]
287
- click.echo(f"Processing: {input_file.name}")
288
- click.echo()
292
+ click.echo(f"Found {len(yaml_files)} YAML files, will process: {yaml_files[0].name}")
289
293
 
290
- try:
291
- from dayhoff_tools.batch.workers.boltz import BoltzProcessor
294
+ # Create a temporary job directory structure
295
+ temp_job_dir = input_path / ".local_boltz_job"
296
+ temp_input_dir = temp_job_dir / "input"
297
+ temp_output_dir = temp_job_dir / "output"
292
298
 
293
- processor = BoltzProcessor(
294
- num_workers=None, # Auto-detect
295
- msa_folder=None,
296
- cache_dir=(
297
- "/primordial/.cache/boltz" if os.path.exists("/primordial") else None
298
- ),
299
- )
299
+ # Clean up any previous run
300
+ if temp_job_dir.exists():
301
+ shutil.rmtree(temp_job_dir)
300
302
 
301
- result_dir = processor.run(str(input_file))
303
+ temp_input_dir.mkdir(parents=True)
304
+ temp_output_dir.mkdir(parents=True)
302
305
 
303
- click.echo()
304
- click.echo(click.style("✓ Prediction complete!", fg="green"))
305
- click.echo(f"Output: {result_dir}")
306
+ # Copy YAML files to input directory
307
+ for yaml_file in yaml_files:
308
+ shutil.copy2(yaml_file, temp_input_dir / yaml_file.name)
309
+
310
+ click.echo(f"Output will be at: {temp_output_dir}/")
311
+ click.echo()
306
312
 
307
- except ImportError as e:
313
+ cmd = [
314
+ "docker", "run", "--rm",
315
+ "--gpus", "all",
316
+ "-v", "/primordial:/primordial",
317
+ "-v", f"{temp_job_dir}:{temp_job_dir}",
318
+ "-e", f"JOB_DIR={temp_job_dir}",
319
+ "-e", "AWS_BATCH_JOB_ARRAY_INDEX=0",
320
+ "-e", "BOLTZ_CACHE=/primordial/.cache/boltz",
321
+ "-e", "MSA_DIR=/primordial/.cache/msas",
322
+ DEFAULT_IMAGE_URI,
323
+ ]
324
+
325
+ click.echo(f"Running: {' '.join(cmd)}")
326
+ click.echo()
327
+
328
+ try:
329
+ result = subprocess.run(cmd)
330
+ if result.returncode != 0:
331
+ click.echo(
332
+ click.style(f"Container exited with code {result.returncode}", fg="red"),
333
+ err=True,
334
+ )
335
+ raise SystemExit(result.returncode)
336
+
337
+ # Check for output
338
+ output_dirs = list(temp_output_dir.iterdir()) if temp_output_dir.exists() else []
339
+ if output_dirs:
340
+ click.echo()
341
+ click.echo(click.style("✓ Prediction complete!", fg="green"))
342
+ click.echo(f"Output directory: {temp_output_dir}")
343
+ for d in output_dirs:
344
+ click.echo(f" - {d.name}")
345
+ else:
346
+ click.echo(click.style("Warning: No output found", fg="yellow"))
347
+
348
+ except FileNotFoundError:
308
349
  click.echo(
309
- click.style(f"Error: Missing dependency: {e}", fg="red"),
350
+ click.style("Error: Docker not found. Is Docker installed and running?", fg="red"),
310
351
  err=True,
311
352
  )
312
353
  raise SystemExit(1)
313
- except Exception as e:
314
- click.echo(click.style(f"Error: {e}", fg="red"), err=True)
315
- raise SystemExit(1)
316
354
 
317
355
 
318
356
  def _run_shell_mode(input_path: Path):
@@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
5
5
 
6
6
  [project]
7
7
  name = "dayhoff-tools"
8
- version = "1.14.4"
8
+ version = "1.14.5"
9
9
  description = "Common tools for all the repos at Dayhoff Labs"
10
10
  authors = [
11
11
  {name = "Daniel Martin-Alarcon", email = "dma@dayhofflabs.com"}
File without changes