phylogenie 2.1.4__py3-none-any.whl → 2.1.5__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.
@@ -6,7 +6,7 @@ from typing import Any, Literal
6
6
  from numpy.random import Generator, default_rng
7
7
 
8
8
  from phylogenie.generators.dataset import DatasetGenerator, DataType
9
- from phylogenie.generators.factories import data
9
+ from phylogenie.generators.factories import data, string
10
10
  from phylogenie.generators.trees import TreeDatasetGeneratorConfig
11
11
  from phylogenie.io import dump_newick
12
12
 
@@ -19,7 +19,7 @@ class AliSimDatasetGenerator(DatasetGenerator):
19
19
  trees: TreeDatasetGeneratorConfig
20
20
  keep_trees: bool = False
21
21
  iqtree_path: str = "iqtree2"
22
- args: dict[str, str | int | float]
22
+ args: dict[str, Any]
23
23
 
24
24
  def _generate_one_from_tree(
25
25
  self, filename: str, tree_file: str, rng: Generator, data: dict[str, Any]
@@ -35,9 +35,7 @@ class AliSimDatasetGenerator(DatasetGenerator):
35
35
  ]
36
36
 
37
37
  for key, value in self.args.items():
38
- command.extend(
39
- [key, value.format(**data) if isinstance(value, str) else str(value)]
40
- )
38
+ command.extend([key, string(value, data)])
41
39
 
42
40
  command.extend(["-af", "fasta"])
43
41
  subprocess.run(command, check=True, stdout=subprocess.DEVNULL)
@@ -1,3 +1,4 @@
1
+ import re
1
2
  from typing import Any
2
3
 
3
4
  import numpy as np
@@ -53,6 +54,14 @@ def scalar(x: cfg.Scalar, data: dict[str, Any]) -> pgt.Scalar:
53
54
  return x
54
55
 
55
56
 
57
+ def string(s: Any, data: dict[str, Any]) -> str:
58
+ if not isinstance(s, str):
59
+ return str(s)
60
+ return re.sub(
61
+ r"\{([^{}]+)\}", lambda match: str(_eval_expression(match.group(1), data)), s
62
+ ) # Match content inside curly braces
63
+
64
+
56
65
  def many_scalars(x: cfg.ManyScalars, data: dict[str, Any]) -> pgt.ManyScalars:
57
66
  if isinstance(x, str):
58
67
  e = _eval_expression(x, data)
@@ -49,7 +49,9 @@ def simulate_tree(
49
49
  current_time = 0.0
50
50
  change_times = sorted(set(t for e in events for t in e.rate.change_times))
51
51
  next_change_time = change_times.pop(0) if change_times else np.inf
52
- target_n_tips = rng.integers(min_tips, max_tips) if max_time == np.inf else None
52
+ target_n_tips = (
53
+ rng.integers(min_tips, max_tips + 1) if max_time == np.inf else None
54
+ )
53
55
 
54
56
  while current_time < max_time:
55
57
  if time.perf_counter() - start_clock > timeout:
@@ -125,7 +127,7 @@ def generate_trees(
125
127
 
126
128
  if os.path.exists(output_dir):
127
129
  raise FileExistsError(f"Output directory {output_dir} already exists")
128
- os.mkdir(output_dir)
130
+ os.makedirs(output_dir, exist_ok=True)
129
131
 
130
132
  rng = default_rng(seed)
131
133
  jobs = joblib.Parallel(n_jobs=n_jobs, return_as="generator_unordered")(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: phylogenie
3
- Version: 2.1.4
3
+ Version: 2.1.5
4
4
  Summary: Generate phylogenetic datasets with minimal setup effort
5
5
  Author: Gabriele Marino
6
6
  Author-email: gabmarino.8601@gmail.com
@@ -1,9 +1,9 @@
1
1
  phylogenie/__init__.py,sha256=T2mRLsYtoLlWt8GlxrrUnfXJ9XVioq7hTvVq3uJpwQI,2215
2
2
  phylogenie/generators/__init__.py,sha256=zsOxy28-9j9alOQLIgrOAFfmM58NNHO_NEtW-KXQXAY,888
3
- phylogenie/generators/alisim.py,sha256=3mANgyQrlozhslV3_ryt-m4ItkRcKKRLufWf6SNBTnQ,2781
3
+ phylogenie/generators/alisim.py,sha256=6IQEn8zNoVSLdHLRT1HBnrv1wfZzYaT-38SQNXE_MU4,2702
4
4
  phylogenie/generators/configs.py,sha256=AiiFS6rpH9BPwDKCkT4SVrRzfLFFrwRCJM4CRj0Srdk,1072
5
5
  phylogenie/generators/dataset.py,sha256=loVKC_1G7gzkPDN9W3GF-Rj9od8AeOJgIC0aJJa-4KA,2110
6
- phylogenie/generators/factories.py,sha256=jLwDuq0mrmDz2U5rZM19KJ2hSpamG3r6zb83YCc6snA,7619
6
+ phylogenie/generators/factories.py,sha256=OKCNg9jwF2KahZCJKTdJVxhLTeLNBDMOqJs7XSVXTqY,7881
7
7
  phylogenie/generators/trees.py,sha256=q03WPG82M4ucp-jyjoKEBy7TKMBzD3RkKn8hS0G0-i0,10463
8
8
  phylogenie/generators/typeguards.py,sha256=yj4VkhOaUXJ2OrY-6zhOeY9C4yKIQxjZtk2d-vIxttQ,828
9
9
  phylogenie/io.py,sha256=y7nQIvLgCvqELsXFKfm1GgKJO_saoQ-7zQpE3Kvajzc,3509
@@ -20,13 +20,13 @@ phylogenie/treesimulator/events/__init__.py,sha256=UGfvXOVJ_ZAkk_8sBPihjmxciiaEn
20
20
  phylogenie/treesimulator/events/contact_tracing.py,sha256=_nJ85yhgGkeruQgMHvGpDYoyhheBf8M4LgZWiWdi5dY,4801
21
21
  phylogenie/treesimulator/events/core.py,sha256=JokGmieAv2xEX7KsjBWZr05jHN1jB-XZbpxe9gwdbDA,7953
22
22
  phylogenie/treesimulator/events/mutations.py,sha256=xkXUIppbLIWZqKwVf-hi7d-_pS42TG2EPVfJA_grxBg,3443
23
- phylogenie/treesimulator/gillespie.py,sha256=naoxPyZixWVkd5f7B3KhEtOFiQI4NDIp_589NCLTHKM,4831
23
+ phylogenie/treesimulator/gillespie.py,sha256=xdfiiMAsdC4ybLwmT6njC6ZrbgCeEptpuNX23Gnf-Vc,4877
24
24
  phylogenie/treesimulator/model.py,sha256=0Im6cFTlpMlJrSP4pTTKtvLT9qrQWV8MSTesAsBxT8g,5422
25
25
  phylogenie/typeguards.py,sha256=JtqmbEWJZBRHbWgCvcl6nrWm3VcBfzRbklbTBYHItn0,1325
26
26
  phylogenie/typings.py,sha256=GknvAFXyiaWeeYJ8Lk5d6E2VHT-xW6ONEojYbtJYiB8,476
27
27
  phylogenie/utils.py,sha256=pCg9ob0RpLUHwM49x4knKxL4FNPr3-EU_6zMXsvxtAg,370
28
- phylogenie-2.1.4.dist-info/LICENSE.txt,sha256=NUrDqElK-eD3I0WqC004CJsy6cs0JgsAoebDv_42-pw,1071
29
- phylogenie-2.1.4.dist-info/METADATA,sha256=xp3v_zG0Cua0UQN6TlF7yS9NuchhdlKnDf8-O3e-l_8,5375
30
- phylogenie-2.1.4.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
31
- phylogenie-2.1.4.dist-info/entry_points.txt,sha256=Rt6_usN0FkBX1ZfiqCirjMN9FKOgFLG8rydcQ8kugeE,51
32
- phylogenie-2.1.4.dist-info/RECORD,,
28
+ phylogenie-2.1.5.dist-info/LICENSE.txt,sha256=NUrDqElK-eD3I0WqC004CJsy6cs0JgsAoebDv_42-pw,1071
29
+ phylogenie-2.1.5.dist-info/METADATA,sha256=BIpsttapT2FwTo_rFg7AALZigoBVms5w9Q_pFTSGSus,5375
30
+ phylogenie-2.1.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
31
+ phylogenie-2.1.5.dist-info/entry_points.txt,sha256=Rt6_usN0FkBX1ZfiqCirjMN9FKOgFLG8rydcQ8kugeE,51
32
+ phylogenie-2.1.5.dist-info/RECORD,,