tsalign 2.1.1__tar.gz → 3.0.0__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 (103) hide show
  1. {tsalign-2.1.1 → tsalign-3.0.0}/Cargo.lock +8 -8
  2. tsalign-3.0.0/PKG-INFO +144 -0
  3. {tsalign-2.1.1/python_bindings → tsalign-3.0.0}/README.md +3 -3
  4. {tsalign-2.1.1 → tsalign-3.0.0}/generic_a_star/Cargo.toml +1 -1
  5. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/Cargo.toml +3 -3
  6. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/alignment_result/alignment/stream.rs +19 -16
  7. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/alignment_result/alignment/template_switch_specifics.rs +193 -175
  8. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/alignment_type.rs +22 -20
  9. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/context.rs +70 -69
  10. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/display.rs +30 -28
  11. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/identifier.rs +74 -74
  12. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/lower_bounds/template_switch.rs +11 -11
  13. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/lower_bounds/template_switch_alignment.rs +2 -2
  14. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies/descendant.rs +6 -6
  15. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies/template_switch_min_length.rs +71 -75
  16. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance.rs +66 -65
  17. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/config/io.rs +10 -10
  18. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/config.rs +44 -44
  19. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/Cargo.toml +2 -2
  20. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/error.rs +2 -2
  21. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/plain_text/parse_template_switches.rs +23 -25
  22. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/plain_text.rs +26 -23
  23. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/svg.rs +56 -54
  24. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/ts_arrangement/complement.rs +21 -21
  25. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/ts_arrangement/inner.rs +45 -45
  26. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/ts_arrangement/source.rs +96 -90
  27. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/ts_arrangement/template_switch.rs +5 -5
  28. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/ts_arrangement.rs +10 -12
  29. {tsalign-2.1.1 → tsalign-3.0.0}/pyproject.toml +1 -0
  30. {tsalign-2.1.1 → tsalign-3.0.0}/python/tsalign/_types.py +6 -6
  31. {tsalign-2.1.1 → tsalign-3.0.0}/python_bindings/Cargo.toml +3 -3
  32. tsalign-3.0.0/python_bindings/README.md +134 -0
  33. {tsalign-2.1.1 → tsalign-3.0.0}/seed_chain/Cargo.toml +2 -2
  34. tsalign-2.1.1/PKG-INFO +0 -7
  35. tsalign-2.1.1/lib_tsshow/src/plain_text/alignment_stream.rs +0 -229
  36. {tsalign-2.1.1 → tsalign-3.0.0}/Cargo.toml +0 -0
  37. {tsalign-2.1.1 → tsalign-3.0.0}/generic_a_star/clippy.toml +0 -0
  38. {tsalign-2.1.1 → tsalign-3.0.0}/generic_a_star/src/closed_lists.rs +0 -0
  39. {tsalign-2.1.1 → tsalign-3.0.0}/generic_a_star/src/comparator.rs +0 -0
  40. {tsalign-2.1.1 → tsalign-3.0.0}/generic_a_star/src/cost.rs +0 -0
  41. {tsalign-2.1.1 → tsalign-3.0.0}/generic_a_star/src/lib.rs +0 -0
  42. {tsalign-2.1.1 → tsalign-3.0.0}/generic_a_star/src/open_lists/linear_heap.rs +0 -0
  43. {tsalign-2.1.1 → tsalign-3.0.0}/generic_a_star/src/open_lists.rs +0 -0
  44. {tsalign-2.1.1 → tsalign-3.0.0}/generic_a_star/src/reset.rs +0 -0
  45. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/alignment_geometry.rs +0 -0
  46. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/alignment_result/a_star_sequences.rs +0 -0
  47. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/alignment_result/alignment/iter.rs +0 -0
  48. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/alignment_result/alignment.rs +0 -0
  49. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/alignment_result.rs +0 -0
  50. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/configurable_a_star_align.rs +0 -0
  51. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/gap_affine_edit_distance.rs +0 -0
  52. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/alignment_type/equal_cost_range.rs +0 -0
  53. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/lower_bounds.rs +0 -0
  54. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies/chaining.rs +0 -0
  55. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies/node_ord.rs +0 -0
  56. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies/primary_match.rs +0 -0
  57. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies/primary_range.rs +0 -0
  58. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies/secondary_deletion.rs +0 -0
  59. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies/shortcut.rs +0 -0
  60. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies/template_switch_count.rs +0 -0
  61. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies/template_switch_total_length.rs +0 -0
  62. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/template_switch_distance/strategies.rs +0 -0
  63. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner/tests.rs +0 -0
  64. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/a_star_aligner.rs +0 -0
  65. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/alignment_configuration.rs +0 -0
  66. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/alignment_matrix/index/iterators.rs +0 -0
  67. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/alignment_matrix/index.rs +0 -0
  68. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/alignment_matrix.rs +0 -0
  69. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/costs/cost_function/io.rs +0 -0
  70. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/costs/cost_function.rs +0 -0
  71. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/costs/gap_affine/io/tests.rs +0 -0
  72. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/costs/gap_affine/io.rs +0 -0
  73. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/costs/gap_affine.rs +0 -0
  74. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/costs.rs +0 -0
  75. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/error.rs +0 -0
  76. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/io.rs +0 -0
  77. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/lib.rs +0 -0
  78. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsalign/src/tests.rs +0 -0
  79. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/lib.rs +0 -0
  80. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/plain_text/mutlipair_alignment_renderer/tests.rs +0 -0
  81. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/plain_text/mutlipair_alignment_renderer.rs +0 -0
  82. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/svg/arrows.rs +0 -0
  83. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/svg/font/sans_serif_mono.rs +0 -0
  84. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/svg/font/typewriter.rs +0 -0
  85. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/svg/font.rs +0 -0
  86. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/svg/indexed_str.rs +0 -0
  87. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/svg/labelled_sequence.rs +0 -0
  88. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/svg/numbers.rs +0 -0
  89. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/ts_arrangement/character.rs +0 -0
  90. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/ts_arrangement/index_types.rs +0 -0
  91. {tsalign-2.1.1 → tsalign-3.0.0}/lib_tsshow/src/ts_arrangement/row.rs +0 -0
  92. {tsalign-2.1.1 → tsalign-3.0.0}/python/tsalign/__init__.py +0 -0
  93. {tsalign-2.1.1 → tsalign-3.0.0}/python/tsalign/py.typed +0 -0
  94. {tsalign-2.1.1 → tsalign-3.0.0}/python_bindings/.gitignore +0 -0
  95. {tsalign-2.1.1 → tsalign-3.0.0}/python_bindings/BUILD.md +0 -0
  96. {tsalign-2.1.1 → tsalign-3.0.0}/python_bindings/src/lib.rs +0 -0
  97. {tsalign-2.1.1 → tsalign-3.0.0}/seed_chain/src/chain/context.rs +0 -0
  98. {tsalign-2.1.1 → tsalign-3.0.0}/seed_chain/src/chain/display.rs +0 -0
  99. {tsalign-2.1.1 → tsalign-3.0.0}/seed_chain/src/chain/node/display.rs +0 -0
  100. {tsalign-2.1.1 → tsalign-3.0.0}/seed_chain/src/chain/node.rs +0 -0
  101. {tsalign-2.1.1 → tsalign-3.0.0}/seed_chain/src/chain.rs +0 -0
  102. {tsalign-2.1.1 → tsalign-3.0.0}/seed_chain/src/lib.rs +0 -0
  103. {tsalign-2.1.1 → tsalign-3.0.0}/seed_chain/src/seed.rs +0 -0
@@ -417,7 +417,7 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
417
417
 
418
418
  [[package]]
419
419
  name = "generic_a_star"
420
- version = "2.1.1"
420
+ version = "3.0.0"
421
421
  dependencies = [
422
422
  "binary-heap-plus",
423
423
  "compare",
@@ -548,7 +548,7 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
548
548
 
549
549
  [[package]]
550
550
  name = "lib_ts_chainalign"
551
- version = "2.1.1"
551
+ version = "3.0.0"
552
552
  dependencies = [
553
553
  "binary-heap-plus",
554
554
  "bincode",
@@ -568,7 +568,7 @@ dependencies = [
568
568
 
569
569
  [[package]]
570
570
  name = "lib_tsalign"
571
- version = "2.1.1"
571
+ version = "3.0.0"
572
572
  dependencies = [
573
573
  "binary-heap-plus",
574
574
  "compact-genome",
@@ -589,7 +589,7 @@ dependencies = [
589
589
 
590
590
  [[package]]
591
591
  name = "lib_tsshow"
592
- version = "2.1.1"
592
+ version = "3.0.0"
593
593
  dependencies = [
594
594
  "ena",
595
595
  "itertools",
@@ -804,7 +804,7 @@ dependencies = [
804
804
 
805
805
  [[package]]
806
806
  name = "py_lib_tsalign"
807
- version = "2.1.1"
807
+ version = "3.0.0"
808
808
  dependencies = [
809
809
  "compact-genome",
810
810
  "lib_tsalign",
@@ -1008,7 +1008,7 @@ dependencies = [
1008
1008
 
1009
1009
  [[package]]
1010
1010
  name = "seed_chain"
1011
- version = "2.1.1"
1011
+ version = "3.0.0"
1012
1012
  dependencies = [
1013
1013
  "compact-genome",
1014
1014
  "generic_a_star",
@@ -1360,7 +1360,7 @@ checksum = "2b939c825d0c4295ac520f7b479927c1e5b458c9107a9d6f5ba65bc867bb93a5"
1360
1360
 
1361
1361
  [[package]]
1362
1362
  name = "tsalign"
1363
- version = "2.1.1"
1363
+ version = "3.0.0"
1364
1364
  dependencies = [
1365
1365
  "anyhow",
1366
1366
  "bincode",
@@ -1381,7 +1381,7 @@ dependencies = [
1381
1381
 
1382
1382
  [[package]]
1383
1383
  name = "tsalign-tests"
1384
- version = "2.1.1"
1384
+ version = "3.0.0"
1385
1385
  dependencies = [
1386
1386
  "anyhow",
1387
1387
  "clap",
tsalign-3.0.0/PKG-INFO ADDED
@@ -0,0 +1,144 @@
1
+ Metadata-Version: 2.4
2
+ Name: tsalign
3
+ Version: 3.0.0
4
+ Classifier: Programming Language :: Rust
5
+ Classifier: Programming Language :: Python :: Implementation :: CPython
6
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
7
+ Requires-Python: >=3.8
8
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
9
+
10
+ # Python Bindings for [`lib_tsalign`](https://crates.io/crates/lib_tsalign)
11
+
12
+ [![PyPI](https://img.shields.io/pypi/v/tsalign)](https://pypi.org/project/tsalign/)
13
+
14
+ Python bindings for the template switch aligner. Aligns two DNA sequences
15
+ while detecting template switches — short-range translocations where a query
16
+ region is copied from (or aligns to) a different location, possibly on the
17
+ reverse complement strand.
18
+
19
+ ## Installation
20
+
21
+ ```bash
22
+ pip install tsalign
23
+ ```
24
+
25
+ ## Quick start
26
+
27
+ ```python
28
+ import tsalign
29
+
30
+ result = tsalign.align("ACGTACGT", "ACGACGT")
31
+ print(result.cigar()) # compact alignment string
32
+ print(result.stats()) # cost, duration, node counts, …
33
+ ```
34
+
35
+ ## Aligner options
36
+
37
+ Create an `Aligner` once and reuse it for many sequences:
38
+
39
+ ```python
40
+ aligner = tsalign.Aligner(
41
+ min_length_strategy="preprocess_lookahead", # default: "lookahead"
42
+ chaining_strategy="lower_bound", # default: "none"
43
+ total_length_strategy="maximise", # default: "maximise"
44
+ no_ts=False, # set True for plain gap-affine
45
+ )
46
+
47
+ result = aligner.align("ACGTACGT", "ACGACGT")
48
+ ```
49
+
50
+ ## Custom cost configuration
51
+
52
+ Costs are specified in `.tsa` format. Use `sample_tsa_config/config.tsa`
53
+ as a starting point and consult the [main repository README](../README.md#modifying-the-cost-function) for a description
54
+ of each parameter.
55
+
56
+ ```python
57
+ aligner = tsalign.Aligner(costs_file="sample_tsa_config/config.tsa")
58
+ result = aligner.align("ACGTACGT", "ACGACGT")
59
+ ```
60
+
61
+ You can also pass the cost string directly:
62
+
63
+ ```python
64
+ with open("my_costs.tsa") as f:
65
+ cost_str = f.read()
66
+ aligner = tsalign.Aligner(costs=cost_str)
67
+ ```
68
+
69
+ ## Restricting the alignment range
70
+
71
+ Use `AlignmentRange` to align only a window of the input sequences:
72
+
73
+ ```python
74
+ from tsalign import Aligner, AlignmentRange
75
+
76
+ aligner = Aligner()
77
+ result = aligner.align(
78
+ "NNNACGTACGTNNN",
79
+ "ACGACGT",
80
+ range=AlignmentRange(reference_start=3, reference_end=11),
81
+ )
82
+ print(result.cigar())
83
+ ```
84
+
85
+ Individual start/limit keyword arguments are also accepted when `range` is
86
+ not provided:
87
+
88
+ ```python
89
+ result = aligner.align(
90
+ "NNNACGTACGTNNN",
91
+ "ACGACGT",
92
+ reference_start=3,
93
+ reference_limit=11,
94
+ )
95
+ ```
96
+
97
+ ## Working with alignment operations
98
+
99
+ `alignment.alignments()` returns a typed list of `(count, op)` pairs:
100
+
101
+ ```python
102
+ from tsalign import align, TemplateSwitchEntranceOp, TemplateSwitchExitOp
103
+
104
+ result = align(reference, query)
105
+ for count, op in result.alignments():
106
+ if isinstance(op, TemplateSwitchEntranceOp):
107
+ print(f"Template switch: {op.direction}, descendant={op.descendant}, offset={op.first_offset}")
108
+ elif isinstance(op, TemplateSwitchExitOp):
109
+ print(f"Exit, anti-descendant gap: {op.anti_descendant_gap}")
110
+ else:
111
+ # SimpleAlignmentOp — a basic edit in the primary or secondary track
112
+ print(f"{count}x {op.kind}")
113
+ ```
114
+
115
+ ## Visualisation
116
+
117
+ ```python
118
+ result = tsalign.align(reference, query)
119
+ result.viz_template_switches() # prints ASCII art to stdout
120
+ ```
121
+
122
+ ## Limiting search resources
123
+
124
+ ```python
125
+ result = aligner.align(
126
+ reference,
127
+ query,
128
+ cost_limit=100, # return None if cost would exceed this
129
+ memory_limit=500_000, # return None if memory exceeds this number of bytes
130
+ )
131
+ if result is None:
132
+ print("No alignment found within limits")
133
+ ```
134
+
135
+ ## Accepted sequence types
136
+
137
+ Any object whose `str()` representation is a valid DNA string (ACGTN) is
138
+ accepted — including `Bio.Seq`:
139
+
140
+ ```python
141
+ from Bio.Seq import Seq
142
+ result = tsalign.align(Seq("ACGTACGT"), Seq("ACGACGT"))
143
+ ```
144
+
@@ -41,7 +41,7 @@ result = aligner.align("ACGTACGT", "ACGACGT")
41
41
  ## Custom cost configuration
42
42
 
43
43
  Costs are specified in `.tsa` format. Use `sample_tsa_config/config.tsa`
44
- as a starting point and consult the main repository README for a description
44
+ as a starting point and consult the [main repository README](../README.md#modifying-the-cost-function) for a description
45
45
  of each parameter.
46
46
 
47
47
  ```python
@@ -95,9 +95,9 @@ from tsalign import align, TemplateSwitchEntranceOp, TemplateSwitchExitOp
95
95
  result = align(reference, query)
96
96
  for count, op in result.alignments():
97
97
  if isinstance(op, TemplateSwitchEntranceOp):
98
- print(f"Template switch: {op.direction}, primary={op.primary}, offset={op.first_offset}")
98
+ print(f"Template switch: {op.direction}, descendant={op.descendant}, offset={op.first_offset}")
99
99
  elif isinstance(op, TemplateSwitchExitOp):
100
- print(f"Exit, anti-primary gap: {op.anti_primary_gap}")
100
+ print(f"Exit, anti-descendant gap: {op.anti_descendant_gap}")
101
101
  else:
102
102
  # SimpleAlignmentOp — a basic edit in the primary or secondary track
103
103
  print(f"{count}x {op.kind}")
@@ -1,7 +1,7 @@
1
1
  [package]
2
2
  name = "generic_a_star"
3
3
  description = "A generic implementation of the A* algorithm"
4
- version = "2.1.1"
4
+ version = "3.0.0"
5
5
  edition.workspace = true
6
6
  rust-version.workspace = true
7
7
  license.workspace = true
@@ -2,7 +2,7 @@
2
2
  name = "lib_tsalign"
3
3
  description = "A sequence-to-sequence aligner that accounts for template switches"
4
4
  authors = ["Sebastian Schmidt <sebastian.schmidt@helsinki.fi>"]
5
- version = "2.1.1"
5
+ version = "3.0.0"
6
6
  license.workspace = true
7
7
  edition.workspace = true
8
8
  rust-version.workspace = true
@@ -26,9 +26,9 @@ thiserror = "2.0.3"
26
26
  num-traits.workspace = true
27
27
  serde = { workspace = true, features = ["derive"], optional = true }
28
28
  noisy_float = { version = "0.2.0" }
29
- generic_a_star = { version = "2.1.1", path = "../generic_a_star" }
29
+ generic_a_star = { version = "3.0.0", path = "../generic_a_star" }
30
30
  log.workspace = true
31
31
  rustc-hash = "2.1.1"
32
- seed_chain = { version = "2.1.1", path = "../seed_chain" }
32
+ seed_chain = { version = "3.0.0", path = "../seed_chain" }
33
33
  extend_map = "0.14.3"
34
34
  template-switch-error-free-inners = "0.1.1"
@@ -2,7 +2,7 @@ use std::{collections::VecDeque, iter};
2
2
 
3
3
  use crate::a_star_aligner::{
4
4
  alignment_result::alignment::Alignment,
5
- template_switch_distance::{AlignmentType, TemplateSwitchPrimary},
5
+ template_switch_distance::{AlignmentType, TemplateSwitchDescendant},
6
6
  };
7
7
 
8
8
  #[derive(Debug, Clone)]
@@ -20,7 +20,7 @@ pub struct AlignmentStream {
20
20
  pub struct AlignmentStreamCoordinates {
21
21
  reference: usize,
22
22
  query: usize,
23
- template_switch_primary: Option<TemplateSwitchPrimary>,
23
+ template_switch_descendant: Option<TemplateSwitchDescendant>,
24
24
  }
25
25
 
26
26
  impl AlignmentStream {
@@ -190,7 +190,7 @@ impl AlignmentStreamCoordinates {
190
190
  Self {
191
191
  reference: reference_offset,
192
192
  query: query_offset,
193
- template_switch_primary: None,
193
+ template_switch_descendant: None,
194
194
  }
195
195
  }
196
196
 
@@ -210,34 +210,37 @@ impl AlignmentStreamCoordinates {
210
210
  | AlignmentType::PrimaryMatch
211
211
  | AlignmentType::PrimaryFlankSubstitution
212
212
  | AlignmentType::PrimaryFlankMatch => (1, 1),
213
- AlignmentType::TemplateSwitchEntrance { primary, .. } => {
213
+ AlignmentType::TemplateSwitchEntrance { descendant, .. } => {
214
214
  assert!(
215
- self.template_switch_primary.is_none(),
215
+ self.template_switch_descendant.is_none(),
216
216
  "Encountered template switch entrance within template switch"
217
217
  );
218
- self.template_switch_primary = Some(primary);
218
+ self.template_switch_descendant = Some(descendant);
219
219
  (0, 0)
220
220
  }
221
221
  AlignmentType::SecondaryInsertion
222
222
  | AlignmentType::SecondarySubstitution
223
- | AlignmentType::SecondaryMatch => match self.template_switch_primary.unwrap() {
224
- TemplateSwitchPrimary::Reference => (1, 0),
225
- TemplateSwitchPrimary::Query => (0, 1),
223
+ | AlignmentType::SecondaryMatch => match self.template_switch_descendant.unwrap() {
224
+ TemplateSwitchDescendant::Reference => (1, 0),
225
+ TemplateSwitchDescendant::Query => (0, 1),
226
226
  },
227
- AlignmentType::TemplateSwitchExit { anti_primary_gap } => {
228
- let Some(template_switch_primary) = self.template_switch_primary.take() else {
227
+ AlignmentType::TemplateSwitchExit {
228
+ anti_descendant_gap,
229
+ } => {
230
+ let Some(template_switch_descendant) = self.template_switch_descendant.take()
231
+ else {
229
232
  panic!(
230
233
  "Encountered template switch exit without first encountering a template switch entrance"
231
234
  )
232
235
  };
233
- match template_switch_primary {
234
- TemplateSwitchPrimary::Reference => {
236
+ match template_switch_descendant {
237
+ TemplateSwitchDescendant::Reference => {
235
238
  self.query =
236
- usize::try_from(self.query as isize + anti_primary_gap).unwrap()
239
+ usize::try_from(self.query as isize + anti_descendant_gap).unwrap()
237
240
  }
238
- TemplateSwitchPrimary::Query => {
241
+ TemplateSwitchDescendant::Query => {
239
242
  self.reference =
240
- usize::try_from(self.reference as isize + anti_primary_gap).unwrap()
243
+ usize::try_from(self.reference as isize + anti_descendant_gap).unwrap()
241
244
  }
242
245
  }
243
246
  (0, 0)