Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

131 Fix rendering hang when parent directory of output file doesn't exist #132

Merged
merged 3 commits into from
Aug 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
14 changes: 9 additions & 5 deletions gctree/branching_processes.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import numpy as np
import warnings
import random
import os
import scipy.special as scs
import scipy.optimize as sco
import ete3
Expand All @@ -36,6 +35,7 @@
from typing import Tuple, Dict, List, Union, Set, Callable, Mapping, Sequence, Optional
from decimal import Decimal
import math
from pathlib import Path

sequence_resolutions = hdag.parsimony_utils.standard_nt_ambiguity_map_gap_as_char.get_sequence_resolution_func(
"sequence"
Expand Down Expand Up @@ -485,6 +485,10 @@ def render(
show_nuc_muts: If True, annotate branches with nucleotide mutations. If False, and frame is provided, then branches
will be annotated with amino acid mutations.
"""
# Create parent directories of outfile if they don't exist
outfile = Path(outfile)
outfile.parent.mkdir(parents=True, exist_ok=True)

if frame is not None and frame not in (1, 2, 3):
raise RuntimeError("frame must be 1, 2, or 3")

Expand Down Expand Up @@ -675,10 +679,10 @@ def my_layout(node):
description=f"abundance={node.abundance}",
)
)
AlignIO.write(
aln, open(os.path.splitext(outfile)[0] + ".fasta", "w"), "fasta"
)
return tree_copy.render(outfile, tree_style=ts)
with open(outfile.with_suffix(".fasta"), "w") as fh:
AlignIO.write(aln, fh, "fasta")

return tree_copy.render(str(outfile), tree_style=ts)

def feature_colormap(
self,
Expand Down
4 changes: 4 additions & 0 deletions gctree/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import random
import ete3
import itertools
from pathlib import Path


def test(args):
Expand Down Expand Up @@ -164,6 +165,9 @@ def isotype_add(forest):
isotype_names=args.isotype_names,
)

# Make parent directory of output file base string if it doesn't exist
Path(args.outbase).parent.mkdir(parents=True, exist_ok=True)

if len(args.infiles) == 2:
forest = bp.CollapsedForest(
pp.parse_outfile(args.infiles[0], args.infiles[1], args.root)
Expand Down
2 changes: 1 addition & 1 deletion tests/smalltest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ wget -O $substitutions https://bitbucket.org/kleinstein/shazam/raw/ba4b30fc6791e

gctree infer tests/small_outfile tests/abundances.csv --outbase tests/smalltest_output/gctree.infer --root GL --frame 1 --verbose --idlabel --idmapfile tests/idmap.txt --isotype_mapfile tests/isotypemap.txt --mutability HS5F_Mutability.csv --substitution HS5F_Substitution.csv --ranking_coeffs 1 1 0 --use_old_mut_parsimony --branching_process_ranking_coeff 0

gctree infer tests/smalltest_output/gctree.infer.inference.parsimony_forest.p --outbase tests/smalltest_output/gctree.infer --root GL --frame 1 --verbose --idlabel --idmapfile tests/idmap.txt --isotype_mapfile tests/isotypemap.txt --mutability HS5F_Mutability.csv --substitution HS5F_Substitution.csv --ranking_coeffs 1 -1 0 --use_old_mut_parsimony
gctree infer tests/smalltest_output/gctree.infer.inference.parsimony_forest.p --outbase tests/smalltest_output/nonexistant_dir/gctree.infer --root GL --frame 1 --verbose --idlabel --idmapfile tests/idmap.txt --isotype_mapfile tests/isotypemap.txt --mutability HS5F_Mutability.csv --substitution HS5F_Substitution.csv --ranking_coeffs 1 -1 0 --use_old_mut_parsimony

gctree infer tests/small_outfile tests/abundances.csv --outbase tests/smalltest_output/gctree.infer --root GL --frame 1 --verbose --idlabel --idmapfile tests/idmap.txt --isotype_mapfile tests/isotypemap.txt --mutability HS5F_Mutability.csv --substitution HS5F_Substitution.csv --use_old_mut_parsimony

Expand Down
Loading