dayhoff-tools 1.1.10__py3-none-any.whl → 1.13.12__py3-none-any.whl

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 (41) hide show
  1. dayhoff_tools/__init__.py +10 -0
  2. dayhoff_tools/cli/cloud_commands.py +179 -43
  3. dayhoff_tools/cli/engine1/__init__.py +323 -0
  4. dayhoff_tools/cli/engine1/engine_core.py +703 -0
  5. dayhoff_tools/cli/engine1/engine_lifecycle.py +136 -0
  6. dayhoff_tools/cli/engine1/engine_maintenance.py +431 -0
  7. dayhoff_tools/cli/engine1/engine_management.py +505 -0
  8. dayhoff_tools/cli/engine1/shared.py +501 -0
  9. dayhoff_tools/cli/engine1/studio_commands.py +825 -0
  10. dayhoff_tools/cli/engines_studios/__init__.py +6 -0
  11. dayhoff_tools/cli/engines_studios/api_client.py +351 -0
  12. dayhoff_tools/cli/engines_studios/auth.py +144 -0
  13. dayhoff_tools/cli/engines_studios/engine-studio-cli.md +1230 -0
  14. dayhoff_tools/cli/engines_studios/engine_commands.py +1151 -0
  15. dayhoff_tools/cli/engines_studios/progress.py +260 -0
  16. dayhoff_tools/cli/engines_studios/simulators/cli-simulators.md +151 -0
  17. dayhoff_tools/cli/engines_studios/simulators/demo.sh +75 -0
  18. dayhoff_tools/cli/engines_studios/simulators/engine_list_simulator.py +319 -0
  19. dayhoff_tools/cli/engines_studios/simulators/engine_status_simulator.py +369 -0
  20. dayhoff_tools/cli/engines_studios/simulators/idle_status_simulator.py +476 -0
  21. dayhoff_tools/cli/engines_studios/simulators/simulator_utils.py +180 -0
  22. dayhoff_tools/cli/engines_studios/simulators/studio_list_simulator.py +374 -0
  23. dayhoff_tools/cli/engines_studios/simulators/studio_status_simulator.py +164 -0
  24. dayhoff_tools/cli/engines_studios/studio_commands.py +755 -0
  25. dayhoff_tools/cli/main.py +106 -7
  26. dayhoff_tools/cli/utility_commands.py +896 -179
  27. dayhoff_tools/deployment/base.py +70 -6
  28. dayhoff_tools/deployment/deploy_aws.py +165 -25
  29. dayhoff_tools/deployment/deploy_gcp.py +78 -5
  30. dayhoff_tools/deployment/deploy_utils.py +20 -7
  31. dayhoff_tools/deployment/job_runner.py +9 -4
  32. dayhoff_tools/deployment/processors.py +230 -418
  33. dayhoff_tools/deployment/swarm.py +47 -12
  34. dayhoff_tools/embedders.py +28 -26
  35. dayhoff_tools/fasta.py +181 -64
  36. dayhoff_tools/warehouse.py +268 -1
  37. {dayhoff_tools-1.1.10.dist-info → dayhoff_tools-1.13.12.dist-info}/METADATA +20 -5
  38. dayhoff_tools-1.13.12.dist-info/RECORD +54 -0
  39. {dayhoff_tools-1.1.10.dist-info → dayhoff_tools-1.13.12.dist-info}/WHEEL +1 -1
  40. dayhoff_tools-1.1.10.dist-info/RECORD +0 -32
  41. {dayhoff_tools-1.1.10.dist-info → dayhoff_tools-1.13.12.dist-info}/entry_points.txt +0 -0
@@ -1,11 +1,91 @@
1
1
  import os
2
2
  import subprocess
3
+ import sys
3
4
  from datetime import datetime
4
5
  from io import StringIO
5
6
  from pathlib import Path
6
7
  from zoneinfo import ZoneInfo
7
8
 
8
- from ruamel.yaml import YAML
9
+ # Import cloud helper lazily inside functions to avoid heavy deps at module load
10
+
11
+
12
+ def _find_project_root() -> Path | None:
13
+ """
14
+ Find the project root by searching upwards from the current directory for
15
+ a `.git` directory or a `pyproject.toml` file.
16
+
17
+ Returns:
18
+ The path to the project root, or None if not found.
19
+ """
20
+ current_dir = Path.cwd().resolve()
21
+ while current_dir != current_dir.parent:
22
+ if (current_dir / ".git").is_dir() or (
23
+ current_dir / "pyproject.toml"
24
+ ).is_file():
25
+ return current_dir
26
+ current_dir = current_dir.parent
27
+ # Check the final directory in the hierarchy (e.g., '/')
28
+ if (current_dir / ".git").is_dir() or (current_dir / "pyproject.toml").is_file():
29
+ return current_dir
30
+ return None
31
+
32
+
33
+ def _warn_if_gcp_default_sa(force_prompt: bool = False) -> None:
34
+ """Warn the user when the active gcloud principal is the default VM service
35
+ account. See detailed docstring later in file (duplicate for early
36
+ availability)."""
37
+
38
+ from dayhoff_tools.cli import cloud_commands as _cc
39
+
40
+ try:
41
+ impersonation = _cc._get_current_gcp_impersonation()
42
+ user = _cc._get_current_gcp_user()
43
+ active = impersonation if impersonation != "None" else user
44
+ short = _cc._get_short_name(active)
45
+
46
+ # Determine if user creds are valid
47
+ auth_valid = _cc._is_gcp_user_authenticated()
48
+ except Exception:
49
+ # If any helper errors out, don't block execution
50
+ return
51
+
52
+ problem_type = None # "default_sa" | "stale"
53
+ if short == "default VM service account":
54
+ problem_type = "default_sa"
55
+ elif not auth_valid:
56
+ problem_type = "stale"
57
+
58
+ if problem_type is None:
59
+ return # Everything looks good
60
+
61
+ YELLOW = getattr(_cc, "YELLOW", "\033[0;33m")
62
+ BLUE = getattr(_cc, "BLUE", "\033[0;36m")
63
+ RED = getattr(_cc, "RED", "\033[0;31m")
64
+ NC = getattr(_cc, "NC", "\033[0m")
65
+
66
+ if problem_type == "default_sa":
67
+ msg_body = (
68
+ f"You are currently authenticated as the *default VM service account*.\n"
69
+ f" This will block gsutil/DVC access to private buckets (e.g. warehouse)."
70
+ )
71
+ else: # stale creds
72
+ msg_body = (
73
+ f"Your GCP credentials appear to be *expired/stale*.\n"
74
+ f" Re-authenticate to refresh the access token."
75
+ )
76
+
77
+ print(
78
+ f"{YELLOW}⚠ {msg_body}{NC}\n"
79
+ f"{YELLOW} Run {BLUE}dh gcp login{YELLOW} or {BLUE}dh gcp use-devcon{YELLOW} before retrying.{NC}",
80
+ file=sys.stderr,
81
+ )
82
+
83
+ if force_prompt and sys.stdin.isatty() and sys.stdout.isatty():
84
+ import questionary
85
+
86
+ if not questionary.confirm("Proceed anyway?", default=False).ask():
87
+ print(f"{RED}Aborted due to unsafe GCP credentials.{NC}", file=sys.stderr)
88
+ raise SystemExit(1)
9
89
 
10
90
 
11
91
  def human_readable_size(size_bytes):
@@ -74,6 +154,8 @@ def format_yaml_with_meta_spacing(yaml_str: str) -> str:
74
154
 
75
155
  def update_dvc_files(directory):
76
156
  """Traverse directory and update .dvc files with human-readable size, preserving existing formatting"""
157
+ from ruamel.yaml import YAML
158
+
77
159
  yaml = YAML()
78
160
  yaml.preserve_quotes = True
79
161
  yaml.indent(mapping=2, sequence=4, offset=2)
@@ -188,6 +270,8 @@ def import_from_warehouse(
188
270
  subprocess.run(command, check=True)
189
271
 
190
272
  # Copy meta section from warehouse_path to final_path.dvc
273
+ from ruamel.yaml import YAML
274
+
191
275
  yaml = YAML()
192
276
  yaml.preserve_quotes = True
193
277
  yaml.indent(mapping=2, sequence=4, offset=2)
@@ -248,6 +332,8 @@ def add_to_warehouse(
248
332
 
249
333
  # Process each ancestor .dvc file
250
334
  ancestors = []
335
+ from ruamel.yaml import YAML
336
+
251
337
  yaml_loader = YAML()
252
338
  yaml_loader.preserve_quotes = True
253
339
  yaml_loader.indent(mapping=2, sequence=4, offset=2)
@@ -416,3 +502,184 @@ def get_from_warehouse(
416
502
  subprocess.run(command, check=True)
417
503
 
418
504
  return final_path
505
+
506
+
507
+ def get_ancestry(filepath: str) -> None:
508
+ """Take a .dvc file created from import, and generate an ancestry entry
509
+ that can be manually copied into other .dvc files."""
510
+ with open(filepath, "r") as file:
511
+ assert filepath.endswith(".dvc"), "ERROR: Not a .dvc file"
512
+ import yaml
513
+
514
+ ancestor_content = yaml.safe_load(file)
515
+
516
+ error_msg = "Unexpected file structure. Are you sure this is a .dvc file generated from `dvc import`?"
517
+ assert "deps" in ancestor_content, error_msg
518
+
519
+ error_msg = "Please only reference data imported from main branches."
520
+ assert "rev" not in ancestor_content["deps"][0]["repo"], error_msg
521
+
522
+ ancestor_info = {
523
+ "name": os.path.basename(ancestor_content["outs"][0]["path"]),
524
+ "file_md5_hash": ancestor_content["outs"][0]["md5"],
525
+ "size": ancestor_content["outs"][0]["size"],
526
+ "repo_url": ancestor_content["deps"][0]["repo"]["url"],
527
+ "repo_path": ancestor_content["deps"][0]["path"],
528
+ "commit_hash": ancestor_content["deps"][0]["repo"]["rev_lock"],
529
+ }
530
+ print()
531
+ yaml.safe_dump(
532
+ [ancestor_info], sys.stdout, default_flow_style=False, sort_keys=False
533
+ )
534
+
535
+
536
+ def import_from_warehouse_typer() -> None:
537
+ """Import a file from warehouse.
538
+
539
+ Emits an early warning if the active GCP credentials are the *default VM
540
+ service account* because this will prevent DVC/gsutil from accessing the
541
+ warehouse bucket. The user can abort the command when running
542
+ interactively.
543
+ """
544
+
545
+ # Early-exit guard for wrong GCP credentials
546
+ _warn_if_gcp_default_sa(force_prompt=True)
547
+
548
+ # Import only when the function is called
549
+ import questionary
550
+
551
+ # Ensure execution from root directory
552
+ project_root = _find_project_root()
553
+ cwd = Path.cwd()
554
+ if not project_root or project_root != cwd:
555
+ error_msg = (
556
+ "This command must be run from the project's root directory, which is"
557
+ " expected to contain a `.git` folder or a `pyproject.toml` file.\n"
558
+ f"Current directory: {cwd}"
559
+ )
560
+ if project_root:
561
+ error_msg += f"\nDetected project root: {project_root}"
562
+ raise Exception(error_msg)
563
+
564
+ # Use questionary for prompts instead of typer
565
+ warehouse_path = questionary.text("Warehouse path:").ask()
566
+
567
+ # Provide multiple-choice options for output folder
568
+ output_folder_choice = questionary.select(
569
+ "Output folder:",
570
+ choices=["data/imports", "same_as_warehouse", "Custom path..."],
571
+ ).ask()
572
+
573
+ # If custom path is selected, ask for the path
574
+ if output_folder_choice == "Custom path...":
575
+ output_folder = questionary.text("Enter custom output folder:").ask()
576
+ else:
577
+ output_folder = output_folder_choice
578
+
579
+ branch = questionary.text("Branch (default: main):", default="main").ask()
580
+
581
+ final_path = import_from_warehouse(
582
+ warehouse_path=warehouse_path,
583
+ output_folder=output_folder,
584
+ branch=branch,
585
+ )
586
+
587
+
588
+ def get_from_warehouse_typer() -> None:
589
+ """Get a file from warehouse using `dvc get`.
590
+
591
+ Emits an early warning if the active GCP credentials are the *default VM
592
+ service account* because this will prevent DVC/gsutil from accessing the
593
+ warehouse bucket. The user can abort the command when running
594
+ interactively.
595
+ """
596
+
597
+ # Early-exit guard for wrong GCP credentials
598
+ _warn_if_gcp_default_sa(force_prompt=True)
599
+
600
+ # Import only when the function is called
601
+ import questionary
602
+
603
+ # Ensure execution from root directory
604
+ project_root = _find_project_root()
605
+ cwd = Path.cwd()
606
+ if not project_root or project_root != cwd:
607
+ error_msg = (
608
+ "This command must be run from the project's root directory, which is"
609
+ " expected to contain a `.git` folder or a `pyproject.toml` file.\n"
610
+ f"Current directory: {cwd}"
611
+ )
612
+ if project_root:
613
+ error_msg += f"\nDetected project root: {project_root}"
614
+ raise Exception(error_msg)
615
+
616
+ # Use questionary for prompts instead of typer
617
+ warehouse_path = questionary.text("Warehouse path:").ask()
618
+
619
+ # Provide multiple-choice options for output folder
620
+ output_folder_choice = questionary.select(
621
+ "Output folder:",
622
+ choices=["data/imports", "same_as_warehouse", "Custom path..."],
623
+ ).ask()
624
+
625
+ # If custom path is selected, ask for the path
626
+ if output_folder_choice == "Custom path...":
627
+ output_folder = questionary.text("Enter custom output folder:").ask()
628
+ else:
629
+ output_folder = output_folder_choice
630
+
631
+ branch = questionary.text("Branch (default: main):", default="main").ask()
632
+
633
+ final_path = get_from_warehouse(
634
+ warehouse_path=warehouse_path,
635
+ output_folder=output_folder,
636
+ branch=branch,
637
+ )
638
+
639
+
640
+ def add_to_warehouse_typer() -> None:
641
+ """Add a new data file to warehouse and enrich its generated .dvc file.
642
+
643
+ As with *dh wimport*, this command fails when the user is logged in with
644
+ the default VM service account. A guard therefore warns the user first
645
+ and allows them to abort interactively.
646
+ """
647
+
648
+ # Early-exit guard for wrong GCP credentials
649
+ _warn_if_gcp_default_sa(force_prompt=True)
650
+
651
+ # Import only when the function is called
652
+ import questionary
653
+
654
+ # Ensure execution from root directory
655
+ project_root = _find_project_root()
656
+ cwd = Path.cwd()
657
+ if not project_root or project_root != cwd:
658
+ error_msg = (
659
+ "This command must be run from the project's root directory, which is"
660
+ " expected to contain a `.git` folder or a `pyproject.toml` file.\n"
661
+ f"Current directory: {cwd}"
662
+ )
663
+ if project_root:
664
+ error_msg += f"\nDetected project root: {project_root}"
665
+ raise Exception(error_msg)
666
+
667
+ # Prompt for the data file path
668
+ warehouse_path = questionary.text("Data file to be registered:").ask()
669
+
670
+ # Prompt for the ancestor .dvc file paths
671
+ ancestor_dvc_paths = []
672
+ print("\nEnter the path of all ancestor .dvc files (or hit Enter to finish).")
673
+ print("These files must be generated by `dvc import` or `dh wimport`.")
674
+ while True:
675
+ ancestor_path = questionary.text("Ancestor path: ").ask()
676
+ if ancestor_path:
677
+ ancestor_dvc_paths.append(ancestor_path)
678
+ else:
679
+ print()
680
+ break
681
+
682
+ dvc_path = add_to_warehouse(
683
+ warehouse_path=warehouse_path,
684
+ ancestor_dvc_paths=ancestor_dvc_paths,
685
+ )
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: dayhoff-tools
3
- Version: 1.1.10
3
+ Version: 1.13.12
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
@@ -10,23 +10,36 @@ Classifier: Programming Language :: Python :: 3.10
10
10
  Classifier: Programming Language :: Python :: 3.11
11
11
  Classifier: Programming Language :: Python :: 3.12
12
12
  Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Programming Language :: Python :: 3.14
14
+ Provides-Extra: embedders
13
15
  Provides-Extra: full
14
16
  Requires-Dist: biopython (>=1.84) ; extra == "full"
15
- Requires-Dist: boto3 (>=1.36.8) ; extra == "full"
17
+ Requires-Dist: biopython (>=1.85) ; extra == "embedders"
18
+ Requires-Dist: boto3 (>=1.36.8)
16
19
  Requires-Dist: docker (>=7.1.0) ; extra == "full"
20
+ Requires-Dist: fair-esm (>=2.0.0) ; extra == "embedders"
17
21
  Requires-Dist: fair-esm (>=2.0.0) ; extra == "full"
18
22
  Requires-Dist: firebase-admin (>=6.5.0)
19
23
  Requires-Dist: h5py (>=3.11.0) ; extra == "full"
20
- Requires-Dist: pandas (>=2.2.3) ; extra == "full"
24
+ Requires-Dist: h5py (>=3.13.0) ; extra == "embedders"
25
+ Requires-Dist: numpy (>=1.26.4) ; extra == "embedders"
26
+ Requires-Dist: pandas (>=2.2.0,<2.2.3) ; extra == "embedders"
27
+ Requires-Dist: pandas (>=2.2.0,<2.2.3) ; extra == "full"
21
28
  Requires-Dist: pyyaml (>=6.0)
22
29
  Requires-Dist: questionary (>=2.0.1)
23
30
  Requires-Dist: rdkit-pypi (>=2022.9.5) ; extra == "full"
24
31
  Requires-Dist: requests (>=2.31.0)
32
+ Requires-Dist: sentencepiece (>=0.2.0) ; extra == "embedders"
25
33
  Requires-Dist: sentencepiece (>=0.2.0) ; extra == "full"
26
34
  Requires-Dist: sqlalchemy (>=2.0.40,<3.0.0) ; extra == "full"
27
35
  Requires-Dist: toml (>=0.10)
36
+ Requires-Dist: torch (>=2.4.0) ; extra == "embedders"
37
+ Requires-Dist: tqdm (>=4.67.1) ; extra == "embedders"
38
+ Requires-Dist: tqdm (>=4.67.1) ; extra == "full"
28
39
  Requires-Dist: transformers (==4.36.2) ; extra == "full"
40
+ Requires-Dist: transformers (>=4.36.2) ; extra == "embedders"
29
41
  Requires-Dist: typer (>=0.9.0)
42
+ Requires-Dist: tzdata (>=2025.2)
30
43
  Description-Content-Type: text/markdown
31
44
 
32
45
  # dayhoff-tools
@@ -40,7 +53,9 @@ The base package includes minimal dependencies required for core CLI functionali
40
53
  ```bash
41
54
  pip install dayhoff-tools
42
55
  # or
43
- poetry add dayhoff-tools
56
+ uv add dayhoff-tools
57
+ # or, for the special case of installing it in the DHT repo itself,
58
+ uv pip install -e .[full]
44
59
  ```
45
60
 
46
61
  ### Optional Dependencies
@@ -0,0 +1,54 @@
1
+ dayhoff_tools/__init__.py,sha256=M5zThPyEBRYa5CfwlzKhcqTevWn3OKu62cjV6Zqie2A,469
2
+ dayhoff_tools/chemistry/standardizer.py,sha256=uMn7VwHnx02nc404eO6fRuS4rsl4dvSPf2ElfZDXEpY,11188
3
+ dayhoff_tools/chemistry/utils.py,sha256=jt-7JgF-GeeVC421acX-bobKbLU_X94KNOW24p_P-_M,2257
4
+ dayhoff_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ dayhoff_tools/cli/cloud_commands.py,sha256=xrWQZm48e09GTh8RmYh3JqXUzW8mMy07dHk_77LqZx8,41199
6
+ dayhoff_tools/cli/engine1/__init__.py,sha256=RE45X2IPCNUvQp6_OHI2lbjwoqexkH3roUPccIHkeJo,9540
7
+ dayhoff_tools/cli/engine1/engine_core.py,sha256=TECO6766GCZTtbxOY7QRggwmjpMH9JZSuxjbwF46unU,27061
8
+ dayhoff_tools/cli/engine1/engine_lifecycle.py,sha256=_Dk-EZs_qbm8APdOuGOuxhlbK6RgkkoLk2nrwKoo1-A,4519
9
+ dayhoff_tools/cli/engine1/engine_maintenance.py,sha256=S9w2_Ko2C3zKpzOux-iG8QUYn0sIua6oJkC8d-7HVxw,16301
10
+ dayhoff_tools/cli/engine1/engine_management.py,sha256=s_H3FtMlKsdfzR8pwV-j2W2QX-Fypkqj2kPC0aTqC1A,19072
11
+ dayhoff_tools/cli/engine1/shared.py,sha256=Ecx6I1jtzmxQDn3BezKpgpQ4SJeZf4SZjUCLg-67p80,16844
12
+ dayhoff_tools/cli/engine1/studio_commands.py,sha256=VwTQujz32-uMcYusDRE73SdzRpgvIkv7ZAF4zRv6AzA,30266
13
+ dayhoff_tools/cli/engines_studios/__init__.py,sha256=E6aG0C6qjJnJuClemSKRFlYvLUL49MQZOvfqNQ7SDKs,159
14
+ dayhoff_tools/cli/engines_studios/api_client.py,sha256=7puTEpr3ukcguZr5aqRaSXLKM9Et799lnXwiywPvPz8,13459
15
+ dayhoff_tools/cli/engines_studios/auth.py,sha256=rwetV5hp4jSvK8FyvKgXCnezLOZx1aW8oiSDc6U83iE,5189
16
+ dayhoff_tools/cli/engines_studios/engine-studio-cli.md,sha256=or4k7ZZKPMTkvu67PdcUTE2_cxjnj0HQxxTuJZR1uiA,29924
17
+ dayhoff_tools/cli/engines_studios/engine_commands.py,sha256=8utssuiLfxrff3Pk3PjMSUIVMU83mm9N8-Ny1uQr9es,38371
18
+ dayhoff_tools/cli/engines_studios/progress.py,sha256=VW70t7sEHlbLpCi6LOaY19Rp1Kx6Rt9CKNnmaZWFteA,9496
19
+ dayhoff_tools/cli/engines_studios/simulators/cli-simulators.md,sha256=FZJl6nehdr2Duht2cx3yijcak0yKyOaHTrTzvFTAfZs,4976
20
+ dayhoff_tools/cli/engines_studios/simulators/demo.sh,sha256=8tYABSCxLNXqGs-4r071V9mpKNZ5DTQ34WZ-v3d5s94,5364
21
+ dayhoff_tools/cli/engines_studios/simulators/engine_list_simulator.py,sha256=vUrB6gV9UX74L5uCRMTVcPmk_1ZOuP1jYJf6cMP7dOE,9525
22
+ dayhoff_tools/cli/engines_studios/simulators/engine_status_simulator.py,sha256=KUm3gA2MiRgGrQV7KURhb5zabM18-30z_ugRjiq5iso,13024
23
+ dayhoff_tools/cli/engines_studios/simulators/idle_status_simulator.py,sha256=F_MfEXdPKNVDCKgJV72QyU2oMG8hLt-Bwic4yFadRXE,17570
24
+ dayhoff_tools/cli/engines_studios/simulators/simulator_utils.py,sha256=HA08pIMJWV3OFrWj3Ca8GldvgJZfFoTOloyLK0UWMgA,6729
25
+ dayhoff_tools/cli/engines_studios/simulators/studio_list_simulator.py,sha256=ntizeR0BJLdJOwCRBKPajc2xT-BL7SNnONxfgxXDgr8,11609
26
+ dayhoff_tools/cli/engines_studios/simulators/studio_status_simulator.py,sha256=6WvpnRawJVaQf_H81zuR1_66igRRVxPxjAt8e69xjp4,5394
27
+ dayhoff_tools/cli/engines_studios/studio_commands.py,sha256=4ul6i8HDHZTffavu1y_j4kwvsDNvjMvYMWbZGXN8nKY,25597
28
+ dayhoff_tools/cli/main.py,sha256=Nz_jtbppmvWKHZydQ0nkt_eejccJE90ces8xCGrerdY,7086
29
+ dayhoff_tools/cli/swarm_commands.py,sha256=5EyKj8yietvT5lfoz8Zx0iQvVaNgc3SJX1z2zQR6o6M,5614
30
+ dayhoff_tools/cli/utility_commands.py,sha256=e2P4dCCtoqMUGNyb0lFBZ6GZpl5Zslm1qqE5qIvsy38,50765
31
+ dayhoff_tools/deployment/base.py,sha256=uZnFvnPQx6pH_HmJbdThweAs3BrxMaDohpE3iX_-yk4,18377
32
+ dayhoff_tools/deployment/deploy_aws.py,sha256=1j16aE4hmln4pQVtcSGuIGVWbOBfWwveytvihjofADo,21519
33
+ dayhoff_tools/deployment/deploy_gcp.py,sha256=xgaOVsUDmP6wSEMYNkm1yRNcVskfdz80qJtCulkBIAM,8860
34
+ dayhoff_tools/deployment/deploy_utils.py,sha256=KyUFZZWn8NGT9QpR0HGqkX-huOFubvYCabko9SlC5Gg,26516
35
+ dayhoff_tools/deployment/job_runner.py,sha256=hljvFpH2Bw96uYyUup5Ths72PZRL_X27KxlYzBMgguo,5086
36
+ dayhoff_tools/deployment/processors.py,sha256=LM0CQbr4XCb3AtLbrcuDQm4tYPXsoNqgVJ4WQYDjzJc,12406
37
+ dayhoff_tools/deployment/swarm.py,sha256=YJfvVOcAS8cYcIj2fiN4qwC2leh0I9w5A4px8ZWSF6g,22833
38
+ dayhoff_tools/embedders.py,sha256=1THnmio4FYkBswy_xkIiwT-ZOEMn6ZLbTAa-Uz0-kyE,36615
39
+ dayhoff_tools/fasta.py,sha256=USdemH4c_dNhWXOTAhldvlDi8eLHogsy0YSrOnODB5I,50773
40
+ dayhoff_tools/file_ops.py,sha256=JlGowvr-CUJFidV-4g_JmhUTN9bsYuaxtqKmnKomm-Q,8506
41
+ dayhoff_tools/h5.py,sha256=j1nxxaiHsMidVX_XwB33P1Pz9d7K8ZKiDZwJWQUUQSY,21158
42
+ dayhoff_tools/intake/gcp.py,sha256=uCeEskhbEwJIYpN6ne6siT1dbpTizCjjel-hRe0kReE,3030
43
+ dayhoff_tools/intake/gtdb.py,sha256=58JNLWpr3LkXiIq-ubAcEFeR5DyN9YrA-YEoQI_FzlA,10608
44
+ dayhoff_tools/intake/kegg.py,sha256=SaVbumB4leNTSevamT29yIqHurejw1wmcCC32D5Qyco,965
45
+ dayhoff_tools/intake/mmseqs.py,sha256=uEYzRsthJAlUeRYNCfFtJFE73SbuhfUIS1ygYFkhmtw,6435
46
+ dayhoff_tools/intake/structure.py,sha256=ufN3gAodQxhnt7psK1VTQeu9rKERmo_PhoxIbB4QKMw,27660
47
+ dayhoff_tools/intake/uniprot.py,sha256=BZYJQF63OtPcBBnQ7_P9gulxzJtqyorgyuDiPeOJqE4,16456
48
+ dayhoff_tools/logs.py,sha256=DKdeP0k0kliRcilwvX0mUB2eipO5BdWUeHwh-VnsICs,838
49
+ dayhoff_tools/sqlite.py,sha256=jV55ikF8VpTfeQqqlHSbY8OgfyfHj8zgHNpZjBLos_E,18672
50
+ dayhoff_tools/warehouse.py,sha256=UETBtZD3r7WgvURqfGbyHlT7cxoiVq8isjzMuerKw8I,24475
51
+ dayhoff_tools-1.13.12.dist-info/METADATA,sha256=VtmgJEzSIBc552oggyiNJXoZJZ-0L4aNrPhfv-yKeGc,2981
52
+ dayhoff_tools-1.13.12.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
53
+ dayhoff_tools-1.13.12.dist-info/entry_points.txt,sha256=iAf4jteNqW3cJm6CO6czLxjW3vxYKsyGLZ8WGmxamSc,49
54
+ dayhoff_tools-1.13.12.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.2.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,32 +0,0 @@
1
- dayhoff_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- dayhoff_tools/chemistry/standardizer.py,sha256=uMn7VwHnx02nc404eO6fRuS4rsl4dvSPf2ElfZDXEpY,11188
3
- dayhoff_tools/chemistry/utils.py,sha256=jt-7JgF-GeeVC421acX-bobKbLU_X94KNOW24p_P-_M,2257
4
- dayhoff_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- dayhoff_tools/cli/cloud_commands.py,sha256=KiYEuD3nSg8QPWBYfrhdze2La_CJe4iqK-8uOAHyS8U,35827
6
- dayhoff_tools/cli/main.py,sha256=Ae0Bee2VjRzUge1I2DJoDVqoXpQnKfxGhdiMSmIWJwo,3788
7
- dayhoff_tools/cli/swarm_commands.py,sha256=5EyKj8yietvT5lfoz8Zx0iQvVaNgc3SJX1z2zQR6o6M,5614
8
- dayhoff_tools/cli/utility_commands.py,sha256=KCcywhwwDAFnDcts4f_RrgikX9EpUsqdJgFgu59RNnk,20863
9
- dayhoff_tools/deployment/base.py,sha256=u-AjbtHnFLoLt33dhYXHIpV-6jcieMEHHGBGN_U9Hm0,15626
10
- dayhoff_tools/deployment/deploy_aws.py,sha256=O0gQxHioSU_sNU8T8MD4wSOPvWc--V8eRRZzlRu035I,16446
11
- dayhoff_tools/deployment/deploy_gcp.py,sha256=DxBM4sUzwPK9RWLP9bSfr38n1HHl-TVrp4TsbdN8pUA,5795
12
- dayhoff_tools/deployment/deploy_utils.py,sha256=StFwbqnr2_FWiKVg3xnJF4kagTHzndqqDkpaIOaAn_4,26027
13
- dayhoff_tools/deployment/job_runner.py,sha256=4tmdplpvqSE9bVxRWHo2U5kwkYrYod0Uwzpg2Q7qG5o,4850
14
- dayhoff_tools/deployment/processors.py,sha256=-0s-mz6jgMJk78KrKQJDNbz5GZyg7jho0IeGH462FlY,19471
15
- dayhoff_tools/deployment/swarm.py,sha256=MGcS2_x4RNFtnVjWlU_SwNfhICz8NlGYr9cYBK4ZKDA,21688
16
- dayhoff_tools/embedders.py,sha256=CRgcb2z7KeeFrRQawyUZuJ4Yi0-J5jSr0hwuRhjG_FI,36513
17
- dayhoff_tools/fasta.py,sha256=e7xw3pInoupqCGE0-fJTOzmW_earL1M7qPyoqIPfUT4,46269
18
- dayhoff_tools/file_ops.py,sha256=JlGowvr-CUJFidV-4g_JmhUTN9bsYuaxtqKmnKomm-Q,8506
19
- dayhoff_tools/h5.py,sha256=j1nxxaiHsMidVX_XwB33P1Pz9d7K8ZKiDZwJWQUUQSY,21158
20
- dayhoff_tools/intake/gcp.py,sha256=uCeEskhbEwJIYpN6ne6siT1dbpTizCjjel-hRe0kReE,3030
21
- dayhoff_tools/intake/gtdb.py,sha256=58JNLWpr3LkXiIq-ubAcEFeR5DyN9YrA-YEoQI_FzlA,10608
22
- dayhoff_tools/intake/kegg.py,sha256=SaVbumB4leNTSevamT29yIqHurejw1wmcCC32D5Qyco,965
23
- dayhoff_tools/intake/mmseqs.py,sha256=uEYzRsthJAlUeRYNCfFtJFE73SbuhfUIS1ygYFkhmtw,6435
24
- dayhoff_tools/intake/structure.py,sha256=ufN3gAodQxhnt7psK1VTQeu9rKERmo_PhoxIbB4QKMw,27660
25
- dayhoff_tools/intake/uniprot.py,sha256=BZYJQF63OtPcBBnQ7_P9gulxzJtqyorgyuDiPeOJqE4,16456
26
- dayhoff_tools/logs.py,sha256=DKdeP0k0kliRcilwvX0mUB2eipO5BdWUeHwh-VnsICs,838
27
- dayhoff_tools/sqlite.py,sha256=jV55ikF8VpTfeQqqlHSbY8OgfyfHj8zgHNpZjBLos_E,18672
28
- dayhoff_tools/warehouse.py,sha256=TqV8nex1AluNaL4JuXH5zuu9P7qmE89lSo6f_oViy6U,14965
29
- dayhoff_tools-1.1.10.dist-info/METADATA,sha256=0YZZ2uVMRyz4nXf3W9LpL3_SVTMwGahkLHaB-_cnM7w,2225
30
- dayhoff_tools-1.1.10.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
31
- dayhoff_tools-1.1.10.dist-info/entry_points.txt,sha256=iAf4jteNqW3cJm6CO6czLxjW3vxYKsyGLZ8WGmxamSc,49
32
- dayhoff_tools-1.1.10.dist-info/RECORD,,