Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
54caeb3
Updating tests in test_runner.py to allow them to run on only one GPU
marcuscollins Jun 2, 2026
d5881bb
feat(models): add Protpardelle-1c StructureModelWrapper
marcuscollins Jun 2, 2026
2d4e6f6
[WIP] fixing Claude's implementation of a Protenix wrapper, so it doe…
marcuscollins Jun 12, 2026
57535b0
get default model config from protpardelle module rather than keeping…
marcuscollins Jun 12, 2026
90fd520
Starting to debug Protpardelle on actl
marcuscollins Jun 13, 2026
90b4320
fix(protpardelle): complete denoising step wiring (#267)
manzuoni-astera Jun 23, 2026
5378a17
Modify EDMSamplerConfig options for Protpardelle-1c
marcuscollins Jun 29, 2026
a784508
fix(protpardelle): pipe sampling options through guidance CLI (#270)
xraymemory Jun 30, 2026
352819c
Resolving coderabbitai f/b on PR #274
marcuscollins Jun 30, 2026
155468b
Updating pixi.lock
marcuscollins Jun 30, 2026
3e6ad9a
updating pixi.lock after merging main
marcuscollins Jun 30, 2026
04a42a2
fix(samplers): reconcile FlowModelWrapper.step call with Protocol (#288)
manzuoni-astera Jul 1, 2026
d098158
Addressing f/b from @kchrispens and fixing lint issues
marcuscollins Jul 1, 2026
b772b35
fix(imports,tests): support bare require_* decorators; clean up protp…
manzuoni-astera Jul 2, 2026
f620fa3
Add @overloads to decorators in imports.py to satisfy ty checks
marcuscollins Jul 9, 2026
db224cb
fix(protenix): resolve MSA typecheck errors (#266)
manzuoni-astera Jul 8, 2026
471529a
fix(protpardelle): complete denoising step wiring (#267)
manzuoni-astera Jun 23, 2026
f9d09e8
refactor(protpardelle)!: remove inert sampling config fields and CLI …
marcuscollins Jul 10, 2026
f052930
minor fixes from PR 300 f/b
marcuscollins Jul 10, 2026
4d00cba
fix(protenix): resolve MSA typecheck errors (#266)
manzuoni-astera Jul 8, 2026
c8380cf
fix(protpardelle): complete denoising step wiring (#267)
manzuoni-astera Jun 23, 2026
9a82574
fix(protenix): resolve MSA typecheck errors (#266)
manzuoni-astera Jul 8, 2026
f02bab7
fix ruff issue w/ dimensions of tensor
marcuscollins Jul 10, 2026
a88eb4d
add some comments about the protpardelle atom_mask
marcuscollins Jul 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .actlignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
.pixi/
grid_search_results/
outputs/
/data/
data/
!/src/sampleworks/data/
!/src/sampleworks/data/**
initial_dataset_40*/
checkpoints/
release_data/
Expand Down
12,226 changes: 9,669 additions & 2,557 deletions pixi.lock

Large diffs are not rendered by default.

50 changes: 45 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,52 @@ pypi-dependencies = {"boltz" = "*", "cuequivariance-torch" = "*", "cuequivarianc
platforms = ["linux-64"]

[tool.pixi.feature.boltz-osx]
pypi-dependencies = {"boltz" = "*", "cuequivariance-torch" = "*", "rdkit" = ">=2025.3.6"}
pypi-dependencies = {"boltz" = "*", "cuequivariance-torch" = "*", "rdkit" = ">=2025.3.6", "joblib" = "*", "sfcalculator-torch" = ">=0.3.2"}
Comment thread
marcuscollins marked this conversation as resolved.
platforms = ["osx-arm64"]


[tool.pixi.feature.protenix]
pypi-dependencies = {"protenix" = "*", "einx" = "*", "triton" = "*"}
platforms = ["linux-64"]

[tool.pixi.feature.protpardelle]
platforms = ["linux-64", "osx-arm64"]

[tool.pixi.feature.protpardelle.dependencies]
biopython = "*"
einops = "*"
huggingface_hub = "*"
hydra-core = "*"
jupyter = "*"
numpy = ">=1.25.0,<2.0"
omegaconf = "*"
pandas = "==2.3.1"
prody = "*"
pyyaml = "*"
scipy = "*"
pytorch = ">=2.6.0,<2.8"
Comment thread
marcuscollins marked this conversation as resolved.
tqdm = "*"
typer = "*"

[tool.pixi.feature.protpardelle.pypi-dependencies]
protpardelle = {git = "https://github.com/ProteinDesignLab/protpardelle-1c.git"}
Comment thread
marcuscollins marked this conversation as resolved.
biotite = "*"
dm-tree = "*"
jaxtyping = "*"
ml_collections = "*"
modelcif = "*"
transformers = "*"
wandb = "*"

[tool.pixi.feature.protpardelle.pypi-options.dependency-overrides]
pandas = "==2.3.1"
Comment thread
marcuscollins marked this conversation as resolved.

[project]
authors = [{email = "[email protected]", name = "Karson Chrispens"}]
authors = [
{email = "[email protected]", name = "Karson Chrispens"},
{email = "[email protected]", name = "Marcus D. Collins"}
]

classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Science/Research",
Expand Down Expand Up @@ -132,6 +168,8 @@ boltz-dev = {features = ["boltz", "dev"]}
boltz-osx = {features = ["boltz-osx", "dev", "analysis"]}
protenix = {features = ["protenix"]}
protenix-dev = {features = ["protenix", "dev"]}
protpardelle = {features = ["protpardelle"]}
protpardelle-dev = {features = ["protpardelle", "dev"]}
rf3 = {features = ["rf3"]}
rf3-dev = {features = ["rf3", "dev"]}

Expand All @@ -141,14 +179,16 @@ rdkit = ">=2024.3.5,<2025.9"
[tool.pixi.feature.rf3.pypi-dependencies]
rc-foundry = {editable = true, extras = ["rf3"], git = "https://github.com/k-chrispens/foundry.git"}

[tool.pixi.pypi-dependencies]
sampleworks = {editable = true, path = "."}

# Workspace-level override: reciprocalspaceship (sfcalculator-torch transitive dep)
# caps pandas<=2.2.3 in its metadata, but runs fine on 2.3.1; protenix hard-pins
# pandas==2.3.1. Standardize all envs on 2.3.1 to avoid silent downgrades.
[tool.pixi.pypi-options.dependency-overrides]
pandas = "==2.3.1"
gemmi = "==0.6.7"


[tool.pixi.pypi-dependencies]
sampleworks = {editable = true, path = "."}

[tool.pixi.system-requirements]
cuda = "12"
Expand Down
9 changes: 7 additions & 2 deletions src/sampleworks/cli/guidance.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,21 @@
import sys

from sampleworks.utils.guidance_script_arguments import GuidanceConfig
from sampleworks.utils.guidance_script_utils import get_model_and_device, run_guidance


def main(argv: list[str] | None = None) -> int:
config = GuidanceConfig.from_cli(argv)

from loguru import logger

from sampleworks.utils.guidance_script_utils import get_model_and_device, run_guidance

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A quick question, why should we import it here not at the starting of the file?

@marcuscollins marcuscollins Jul 10, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@smallfishabc Good question, I think something must have gotten messed up with the commit history, like a rebase was missed somewhere. I shouldn't need to change this file at all.

In general, imports inside functions are made to speed things up--e.g. if I only needed to import something when one particular function was called, and it was a slow import, I might guard it like this.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I see what's going on.... Hmmm. This is a change I should have made separately, but it had to do with reconciling arguments across the different models (protenix, protpardelle, rf3, boltz1/2)


logger.info(f"Running guidance with config: {config}")
device, model_wrapper = get_model_and_device(
config.device,
getattr(config, "model_checkpoint", None),
config.model,
method=getattr(config, "method", None),
config=config,
)
result = run_guidance(config, config.guidance_type, model_wrapper, device)
return result.exit_code
Expand Down
101 changes: 101 additions & 0 deletions src/sampleworks/data/cc89_epoch415.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
data:
auto_calc_sigma_data: true
chain_residx_gap: 200
dummy_fill_mode: zero
fixed_size: 512
mixing_ratios:
- 1.0
n_aatype_tokens: 21
n_examples_for_sigma_data: 500
pdb_paths:
- /scratch/users/tianyulu/augmented_ingraham_cath_bugfree
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Comment thread
marcuscollins marked this conversation as resolved.
se3_data_augment: true
sigma_data: 10.3
subset:
- designable_
translation_scale: 1.0
diffusion:
sampling:
function: uniform
s_max: 80
s_min: 0.001
training:
function: lognormal
psigma_mean: -0.5
psigma_std: 1.5
model:
compute_loss_on_all_atoms: false
conditioning_style: concat
crop_conditional: true
dummy_fill_masked_atoms: false
full_mpnn_model_path: /scratch/users/tianyulu/farfalle/ProteinMPNN/vanilla_model_weights
mpnn_model:
label_smoothing: 0.1
n_channel: 128
n_layers: 3
n_neighbors: 32
noise_cond_mult: 4
use_self_conditioning: true
mpnn_model_checkpoint: ''
pretrained_modules: []
struct_model:
arch: dit
n_atoms: 37
n_channel: 256
noise_cond_mult: 4
uvit:
cat_pwd_to_conv: false
conv_skip_connection: false
dim_head: 32
n_blocks_per_layer: 2
n_filt_per_layer: []
n_heads: 8
n_layers: 10
patch_size: 1
position_embedding_max: 32
position_embedding_type: rotary
struct_model_checkpoint: ''
task: ai-allatom
train:
batch_size: 32
checkpoint_freq: 1
checkpoints: []
ckpt_path: /scratch/users/tianyulu/farfalle/out_dir/farfalle/cc89/checkpoints/epoch206_training_state.pth
clip_grad_norm: true
crop_cond:
contiguous_prob: 0.05
discontiguous_prob: 0.9
dist_threshold: 45.0
max_discontiguous_res: 24
max_span_len: 12
recenter_coords: true
sidechain_only_prob: 0.0
sidechain_prob: 0.9
terms_prob: 0.5
crop_conditional: true
decay_steps: 2000000
eval_freq: 8000000
eval_loss_t:
- 0.1
- 0.3
- 0.5
- 0.7
- 0.9
fpd_length_ranges_per_chain:
- - 50
- 256
grad_clip_val: 1.0
length_ranges_per_chain:
- - 166
- 188
lr: 0.0001
max_epochs: 10000
n_eval_samples: 10
n_fpd_samples: 0
sc_num_seqs: 4
seed: 0
self_cond_train_prob: 0.9
shapes_path: /scratch/users/tianyulu/protein_shapes
subsample_eval_set: 0.05
warmup_steps: 1000
weight_decay: 0.0
1 change: 1 addition & 0 deletions src/sampleworks/models/protpardelle/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"""Protpardelle-1c model wrapper."""
Loading
Loading