diff --git a/scadnano/scadnano.py b/scadnano/scadnano.py
index 14b96ac..6cc4a22 100644
--- a/scadnano/scadnano.py
+++ b/scadnano/scadnano.py
@@ -1764,15 +1764,32 @@ class Helix(_JSONSerializable):
         angle %= 360
         return angle
 
-    def crossover_addresses(self, allow_intrahelix=True) -> List[Tuple[int, int, bool]]:
+    def crossover_addresses(self,
+                            helices: Dict[int, Helix],
+                            allow_intrahelix: bool = True,
+                            allow_intergroup: bool = True) -> List[Tuple[int, int, bool]]:
         """
+        :param helices:
+            The dict of helices in which this :any:`Helix` is contained, that contains other helices
+            to which it might be connected by crossovers.
         :param allow_intrahelix:
             if ``False``, then do not return crossovers to the same :any:`Helix` as this :any:`Helix`
+        :param allow_intergroup:
+            if ``False``, then do not return crossovers to a :any:`Helix` in a different helix group
+            as this :any:`Helix`
         :return:
             list of triples (`helix_idx`, `offset`, `forward`) of all crossovers incident to this
             :any:`Helix`, where `offset` is the offset of the crossover and `helix_idx` is the
             :data:`Helix.idx` of the other :any:`Helix` incident to the crossover.
         """
+
+        def allow_crossover_to(other_helix: Helix) -> bool:
+            if not allow_intrahelix and other_helix.idx == self.idx:
+                return False
+            if not allow_intergroup and other_helix.group != self.group:
+                return False
+            return True
+
         addresses: List[Tuple[int, int, bool]] = []
         for domain in self.domains:
             strand = domain.strand()
@@ -1790,7 +1807,8 @@ class Helix(_JSONSerializable):
                     other_domain = domains_on_strand[domain_idx - 1]
                     assert previous_substrand == other_domain
                     other_helix_idx = other_domain.helix
-                    if allow_intrahelix or other_helix_idx != self.idx:
+                    other_helix = helices[other_helix_idx]
+                    if allow_crossover_to(other_helix):
                         addresses.append((other_helix_idx, offset, domain.forward))
 
             # if not last domain, then there is a crossover to the next domain
@@ -1802,7 +1820,8 @@ class Helix(_JSONSerializable):
                     other_domain = domains_on_strand[domain_idx + 1]
                     assert next_substrand == other_domain
                     other_helix_idx = other_domain.helix
-                    if allow_intrahelix or other_helix_idx != self.idx:
+                    other_helix = helices[other_helix_idx]
+                    if allow_crossover_to(other_helix):
                         addresses.append((other_helix_idx, offset, domain.forward))
 
         return addresses
@@ -1820,7 +1839,7 @@ class Helix(_JSONSerializable):
         without actually altering the field :data:`Helix.roll`.
         """
         angles = []
-        addresses = self.crossover_addresses(allow_intrahelix=False)
+        addresses = self.crossover_addresses(helices, allow_intrahelix=False)
         for helix_idx, offset, forward in addresses:
             other_helix = helices[helix_idx]
             angle_of_other_helix = angle_from_helix_to_helix(self, other_helix, grid, geometry)

diff --git a/tests/scadnano_tests.py b/tests/scadnano_tests.py
index 7ed6cbd..b50c487 100644
--- a/tests/scadnano_tests.py
+++ b/tests/scadnano_tests.py
@@ -8149,7 +8149,7 @@ class TestHelixRollRelax(unittest.TestCase):
           0123456789012345678901234567890123456789
         0 [---+[--------+[----------+
               |         |           |
-        1 [---+<--------+<----------+
+        1 <---+<--------+<----------+
         '''
         self.design2h = sc.Design(helices=[sc.Helix(max_offset=50) for _ in range(2)])
         # helix 0 forward
@@ -8161,7 +8161,7 @@ class TestHelixRollRelax(unittest.TestCase):
           0123456789012345678901234567890123456789
         0 [---+[--------+[----------+
               |         |           |
-        1 [---+         |<----------+
+        1 <---+         |<----------+
                         |
         2      <--------+
         '''
@@ -8177,7 +8177,7 @@ class TestHelixRollRelax(unittest.TestCase):
           012345678901234
         0 [---+[------+
               |       |
-        1 [---+       |
+        1 <---+       |
                       |
         2      <------+
         '''
@@ -8216,7 +8216,7 @@ class TestHelixRollRelax(unittest.TestCase):
           012345678901234567890
         0 [---+[------+[------+
               |       |        \
-        1 [---+       |        |
+        1 <---+       |        |
                       |        /
         2      <------+<------+
         '''
@@ -8227,9 +8227,9 @@ class TestHelixRollRelax(unittest.TestCase):
         design3h.draw_strand(0, 5).move(8).cross(2).move(-8)
         design3h.draw_strand(0, 13).move(8).loopout(2, 3).move(-8)
 
-        crossover_addresses_h0 = helices[0].crossover_addresses()
-        crossover_addresses_h1 = helices[1].crossover_addresses()
-        crossover_addresses_h2 = helices[2].crossover_addresses()
+        crossover_addresses_h0 = helices[0].crossover_addresses(design3h.helices)
+        crossover_addresses_h1 = helices[1].crossover_addresses(design3h.helices)
+        crossover_addresses_h2 = helices[2].crossover_addresses(design3h.helices)
 
         self.assertEqual(2, len(crossover_addresses_h0))
         self.assertEqual(1, len(crossover_addresses_h1))
@@ -8248,7 +8248,7 @@ class TestHelixRollRelax(unittest.TestCase):
           012345678901234567890
         0 [---+[------+[------+
               |       |        \
-        1 [---+       |        |
+        1 <---+       |        |
                       |        /
         2      <------+<------+
         '''
@@ -8288,7 +8288,7 @@ class TestHelixRollRelax(unittest.TestCase):
           012345678901234567890123456789012345678901234567890123456789
         0 [---+[--------+[----------+[------+[--------+[--------+
               |         |           |       |         |         |
-        1 [---+<--------+<----------+       |         |         |
+        1 <---+<--------+<----------+       |         |         |
                                             |         |         |
         2                            <------+<--------+<--------+
         '''
@@ -8436,7 +8436,7 @@ class TestHelixRollRelax(unittest.TestCase):
         self.assertAlmostEqual(exp_h1_roll, design2h.helices[1].roll)
 
     def test_helix_crossover_addresses_3_helix_3_strand(self) -> None:
-        xs0 = self.design3helix3strand.helices[0].crossover_addresses()
+        xs0 = self.design3helix3strand.helices[0].crossover_addresses(self.design3helix3strand.helices)
         self.assertEqual(len(xs0), 3)
         h0, o0, f0 = xs0[0]
         h1, o1, f1 = xs0[1]
@@ -8451,7 +8451,7 @@ class TestHelixRollRelax(unittest.TestCase):
         self.assertEqual(f1, True)
         self.assertEqual(f2, True)
 
-        xs1 = self.design3helix3strand.helices[1].crossover_addresses()
+        xs1 = self.design3helix3strand.helices[1].crossover_addresses(self.design3helix3strand.helices)
         self.assertEqual(len(xs1), 2)
         h0, o0, f0 = xs1[0]
         h1, o1, f1 = xs1[1]
@@ -8462,7 +8462,7 @@ class TestHelixRollRelax(unittest.TestCase):
         self.assertEqual(f0, False)
         self.assertEqual(f1, False)
 
-        xs2 = self.design3helix3strand.helices[2].crossover_addresses()
+        xs2 = self.design3helix3strand.helices[2].crossover_addresses(self.design3helix3strand.helices)
         self.assertEqual(len(xs2), 1)
         h0, o0, f0 = xs2[0]
         self.assertEqual(o0, 14)
@@ -8470,7 +8470,7 @@ class TestHelixRollRelax(unittest.TestCase):
         self.assertEqual(h0, False)
 
     def test_helix_crossover_addresses_2_helix_3_strand(self) -> None:
-        xs0 = self.design2h.helices[0].crossover_addresses()
+        xs0 = self.design2h.helices[0].crossover_addresses(self.design2h.helices)
         self.assertEqual(len(xs0), 3)
         h0, o0, f0 = xs0[0]
         h1, o1, f1 = xs0[1]
@@ -8485,7 +8485,7 @@ class TestHelixRollRelax(unittest.TestCase):
         self.assertEqual(h1, True)
         self.assertEqual(h2, True)
 
-        xs1 = self.design2h.helices[1].crossover_addresses()
+        xs1 = self.design2h.helices[1].crossover_addresses(self.design2h.helices)
         self.assertEqual(len(xs1), 3)
         h0, o0, f0 = xs1[0]
         h1, o1, f1 = xs1[1]
@@ -8505,12 +8505,64 @@ class TestHelixRollRelax(unittest.TestCase):
           0123456789012345678901234567890123456789
         0 [---+[--------+[----------+[--+c+-->
               |         |           |
-        1 [---+<--------+<----------+<--+c+--]
+        1 <---+<--------+<----------+<--+c+--]
         '''
         self.design2h.draw_strand(0, 27).move(4).cross(0, 32).move(4)
         self.design2h.draw_strand(1, 36).move(-4).cross(1, 31).move(-4)
 
-        xs0 = self.design2h.helices[0].crossover_addresses(allow_intrahelix=False)
+        xs0 = self.design2h.helices[0].crossover_addresses(self.design2h.helices, allow_intrahelix=False)
+        self.assertEqual(len(xs0), 3)
+        h0, o0, f0 = xs0[0]
+        h1, o1, f1 = xs0[1]
+        h2, o2, f2 = xs0[2]
+        self.assertEqual(o0, 4)
+        self.assertEqual(o1, 14)
+        self.assertEqual(o2, 26)
+        self.assertEqual(h0, 1)
+        self.assertEqual(h1, 1)
+        self.assertEqual(h2, 1)
+        self.assertEqual(f0, True)
+        self.assertEqual(f1, True)
+        self.assertEqual(f2, True)
+
+        xs1 = self.design2h.helices[1].crossover_addresses(self.design2h.helices, allow_intrahelix=False)
+        self.assertEqual(len(xs1), 3)
+        h0, o0, f0 = xs1[0]
+        h1, o1, f1 = xs1[1]
+        h2, o2, f2 = xs1[2]
+        self.assertEqual(o0, 4)
+        self.assertEqual(o1, 14)
+        self.assertEqual(o2, 26)
+        self.assertEqual(h0, 0)
+        self.assertEqual(h1, 0)
+        self.assertEqual(h2, 0)
+        self.assertEqual(f0, False)
+        self.assertEqual(f1, False)
+        self.assertEqual(f2, False)
+
+    def test_helix_crossover_addresses_2_helix_disallow_intergroup_crossovers(self) -> None:
+        '''         1         2         3
+          0123456789012345678901234567890123456789
+        0 [---+[--------+[----------+[--+
+              |         |           |   |
+        1 <---+<--------+<----------+   |
+                                        |
+        group 2                         |
+        2                            <--+
+        '''
+        group2name = 'group 2'
+        group2 = sc.HelixGroup(position=sc.Position3D(x=0, y=-10, z=0), grid=sc.square,
+                               helices_view_order=[2])
+        self.design2h.groups[group2name] = group2
+        self.design2h.add_helix(2, sc.Helix(max_offset=50, group=group2name))
+        self.design2h.draw_strand(0, 27).move(4).cross(2).move(-4)
+
+        self.assertEqual(2, len(self.design2h.groups))
+
+        exp_group_names = list(self.design2h.groups.keys())
+        self.assertListEqual([sc.default_group_name, group2name], exp_group_names)
+
+        xs0 = self.design2h.helices[0].crossover_addresses(self.design2h.helices, allow_intergroup=False)
         self.assertEqual(len(xs0), 3)
         h0, o0, f0 = xs0[0]
         h1, o1, f1 = xs0[1]
@@ -8525,7 +8577,7 @@ class TestHelixRollRelax(unittest.TestCase):
         self.assertEqual(f1, True)
         self.assertEqual(f2, True)
 
-        xs1 = self.design2h.helices[1].crossover_addresses(allow_intrahelix=False)
+        xs1 = self.design2h.helices[1].crossover_addresses(self.design2h.helices, allow_intergroup=False)
         self.assertEqual(len(xs1), 3)
         h0, o0, f0 = xs1[0]
         h1, o1, f1 = xs1[1]
@@ -8540,6 +8592,9 @@ class TestHelixRollRelax(unittest.TestCase):
         self.assertEqual(f1, False)
         self.assertEqual(f2, False)
 
+        xs2 = self.design2h.helices[2].crossover_addresses(self.design2h.helices, allow_intergroup=False)
+        self.assertEqual(len(xs2), 0)
+
     def test_helix_crossover_addresses_2_helix_allow_intrahelix_crossovers(self) -> None:
         '''         1         2         3
           0123456789012345678901234567890123456789
@@ -8550,7 +8605,7 @@ class TestHelixRollRelax(unittest.TestCase):
         self.design2h.draw_strand(0, 27).move(4).cross(0, 32).move(4)
         self.design2h.draw_strand(1, 36).move(-4).cross(1, 31).move(-4)
 
-        xs0 = self.design2h.helices[0].crossover_addresses(allow_intrahelix=True)
+        xs0 = self.design2h.helices[0].crossover_addresses(self.design2h.helices, allow_intrahelix=True)
         self.assertEqual(len(xs0), 5)
         h0, o0, f0 = xs0[0]
         h1, o1, f1 = xs0[1]
@@ -8573,7 +8628,7 @@ class TestHelixRollRelax(unittest.TestCase):
         self.assertEqual(f3, True)
         self.assertEqual(f4, True)
 
-        xs1 = self.design2h.helices[1].crossover_addresses(allow_intrahelix=True)
+        xs1 = self.design2h.helices[1].crossover_addresses(self.design2h.helices, allow_intrahelix=True)
         self.assertEqual(len(xs1), 5)
         h0, o0, f0 = xs1[0]
         h1, o1, f1 = xs1[1]

deal with inter-helix-group crossovers when relaxing helix rolls
Currently, when relaxing helix rolls, all inter-helix crossovers are accounted for, but actually the calculation of the relative angle from one helix to another (based on the position of their 0 offset) only makes sense if the helices are in the same helix group, i.e., are parallel. If they are in different helix groups, we should do one of two things (possibly configurable with an option):

1. (easy) ignore those crossovers
2. (hard) do a more detailed calculation of the angle of the other helix, based not only on the helix's origin position, but also on the offsets of the two points on the helices the crossover connects.
tests/scadnano_tests.py::TestHelixRollRelax::test_helix_crossover_addresses_2_helix_allow_intrahelix_crossovers tests/scadnano_tests.py::TestHelixRollRelax::test_helix_crossover_addresses_2_helix_disallow_intergroup_crossovers tests/scadnano_tests.py::TestHelixRollRelax::test_helix_crossover_addresses_2_helix_disallow_intrahelix_crossovers
tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__0_0_to_10_cross_1_to_5 tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__0_0_to_10_cross_1_to_5__reverse tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__3p_extension tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__5p_extension tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__as_circular_with_3p_extension_should_raise_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__as_circular_with_5p_extension_should_raise_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__call_to_then_update_to_legally tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__call_to_twice_decrease_increase_reverse tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__call_to_twice_increase_decrease_forward tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__call_to_twice_legally tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__call_update_to_twice_legally tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__cross_after_3p_extension_should_raise_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__cross_after_5p_extension_should_raise_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__extension_3p_after_extension_should_raise_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__extension_3p_after_loopout_should_raise_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__extension_3p_on_circular_strand_should_raise_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__extension_3p_with_label tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__extension_5p_with_label tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__extension_with_name tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__h0_off0_to_off10_cross_h1_to_off5_loopout_length3_h2_to_off15 tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__loopouts_with_labels tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__loopouts_with_labels_and_colors_to_json tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__move_after_3p_extension_should_raise_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__move_after_5p_extension_ok tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__multiple_strands tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__multiple_strands_other_order tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__multiple_strands_overlap_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__multiple_strands_overlap_no_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__to_after_3p_extension_should_raise_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__two_forward_paranemic_crossovers tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__two_reverse_paranemic_crossovers tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__update_to_after_3p_extension_should_raise_error tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__update_to_after_5p_extension_ok tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__with_domain_sequence_on_extension tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__with_relative_offset tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__with_sequence_on_3p_extension tests/scadnano_tests.py::TestCreateStrandChainedMethods::test_strand__with_sequence_on_5p_extension tests/scadnano_tests.py::TestCreateHelix::test_helix_constructor_no_max_offset_with_major_ticks tests/scadnano_tests.py::TestM13::test_p7249 tests/scadnano_tests.py::TestM13::test_p7560 tests/scadnano_tests.py::TestM13::test_p8064 tests/scadnano_tests.py::TestModifications::test_Cy3 tests/scadnano_tests.py::TestModifications::test_biotin tests/scadnano_tests.py::TestModifications::test_mod_illegal_exceptions_raised tests/scadnano_tests.py::TestModifications::test_to_json__names_not_unique_for_modifications_raises_error tests/scadnano_tests.py::TestModifications::test_to_json__names_unique_for_modifications_raises_no_error tests/scadnano_tests.py::TestModifications::test_to_json_serializable tests/scadnano_tests.py::TestImportCadnanoV2::test_2_stape_2_helix_origami_deletions_insertions tests/scadnano_tests.py::TestImportCadnanoV2::test_32_helix_rectangle tests/scadnano_tests.py::TestImportCadnanoV2::test_Nature09_monolith tests/scadnano_tests.py::TestImportCadnanoV2::test_Science09_prot120_98_v3 tests/scadnano_tests.py::TestImportCadnanoV2::test_circular_auto_staple tests/scadnano_tests.py::TestImportCadnanoV2::test_circular_auto_staple_hex tests/scadnano_tests.py::TestImportCadnanoV2::test_helices_order tests/scadnano_tests.py::TestImportCadnanoV2::test_helices_order2 tests/scadnano_tests.py::TestImportCadnanoV2::test_huge_hex tests/scadnano_tests.py::TestImportCadnanoV2::test_paranemic_crossover tests/scadnano_tests.py::TestImportCadnanoV2::test_same_helix_crossover tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__col_major_3p tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__col_major_5p tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__col_major_5p_or_3p tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__col_major_top_left_domain_start tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__duplicate_names_different_purifications tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__duplicate_names_different_scales tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__duplicate_names_different_sequences tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__duplicate_names_same_sequence tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__row_major_3p tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__row_major_5p tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__row_major_5p_or_3p tests/scadnano_tests.py::TestExportDNASequences::test_to_idt_bulk_input_format__row_major_top_left_domain_start tests/scadnano_tests.py::TestExportDNASequences::test_write_idt_plate_excel_file tests/scadnano_tests.py::TestExportCadnanoV2::test_16_helix_origami_rectangle_no_twist tests/scadnano_tests.py::TestExportCadnanoV2::test_2_staple_2_helix_origami_deletions_insertions tests/scadnano_tests.py::TestExportCadnanoV2::test_2_staple_2_helix_origami_extremely_simple tests/scadnano_tests.py::TestExportCadnanoV2::test_2_staple_2_helix_origami_extremely_simple_2 tests/scadnano_tests.py::TestExportCadnanoV2::test_6_helix_bundle_honeycomb tests/scadnano_tests.py::TestExportCadnanoV2::test_6_helix_origami_rectangle tests/scadnano_tests.py::TestExportCadnanoV2::test_big_circular_staples tests/scadnano_tests.py::TestExportCadnanoV2::test_big_circular_staples_hex tests/scadnano_tests.py::TestExportCadnanoV2::test_circular_strand tests/scadnano_tests.py::TestExportCadnanoV2::test_export_design_with_helix_group tests/scadnano_tests.py::TestExportCadnanoV2::test_export_design_with_helix_group_not_same_grid tests/scadnano_tests.py::TestExportCadnanoV2::test_export_no_whitespace tests/scadnano_tests.py::TestExportCadnanoV2::test_extension tests/scadnano_tests.py::TestExportCadnanoV2::test_loopout tests/scadnano_tests.py::TestExportCadnanoV2::test_paranemic_crossover tests/scadnano_tests.py::TestExportCadnanoV2::test_parity_issue tests/scadnano_tests.py::TestDesignFromJson::test_from_json__from_and_to_file_contents tests/scadnano_tests.py::TestDesignFromJson::test_from_json__helices_non_default_error_if_some_have_idx_not_others tests/scadnano_tests.py::TestDesignFromJson::test_from_json__helices_non_default_error_if_some_have_idx_not_others_mixed_default tests/scadnano_tests.py::TestDesignFromJson::test_from_json__helices_non_default_indices tests/scadnano_tests.py::TestDesignFromJson::test_from_json__helices_non_default_indices_mixed_with_default tests/scadnano_tests.py::TestDesignFromJson::test_from_json__three_strands tests/scadnano_tests.py::TestStrandReversePolarity::test_reverse_all__one_strand tests/scadnano_tests.py::TestStrandReversePolarity::test_reverse_all__three_strands tests/scadnano_tests.py::TestInlineInsDel::test_deletion_above_range tests/scadnano_tests.py::TestInlineInsDel::test_deletion_below_range tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__deletions_insertions_in_multiple_domains tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__deletions_insertions_in_multiple_domains_two_strands tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__one_deletion tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__one_deletion_left_of_major_tick tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__one_deletion_on_major_tick tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__one_deletion_one_insertion tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__one_deletion_right_of_major_tick tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__one_insertion tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__one_insertion_left_of_major_tick tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__one_insertion_on_major_tick tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__one_insertion_right_of_major_tick tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__two_deletions tests/scadnano_tests.py::TestInlineInsDel::test_inline_deletions_insertions__two_insertions tests/scadnano_tests.py::TestInlineInsDel::test_insertion_above_range tests/scadnano_tests.py::TestInlineInsDel::test_insertion_below_range tests/scadnano_tests.py::TestInlineInsDel::test_no_deletion_after_loopout tests/scadnano_tests.py::TestInlineInsDel::test_no_insertion_after_loopout tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_full_crossover__bottom_horizontal_crossover_already_there tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_full_crossover__horizontal_crossovers_already_there tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_full_crossover__small_design_H0_forward tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_full_crossover__small_design_H0_reverse tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_full_crossover__small_design_illegal tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_full_crossover__small_design_illegal_only_one_helix_has_domain tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_full_crossover__top_horizontal_crossover_already_there tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_full_crossover_extension_ok tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_full_crossover_on_extension_error tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__both_scaffolds_preserved tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__bottom_horizontal_crossover_already_there tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__first_scaffold_preserved tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__horizontal_crossovers_already_there tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__neither_scaffold_preserved tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__second_scaffold_preserved tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__small_design_H0_reverse_0 tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__small_design_H0_reverse_15 tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__small_design_H0_reverse_8 tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__small_design_illegal tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover__top_horizontal_crossover_already_there tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover_on_existing_crossover_should_error_3p_case tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover_on_existing_crossover_should_error_5p_case tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover_on_extension_error tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_half_crossover_on_extension_ok tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_nick__6_helix_rectangle tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_nick__small_design_H0_forward tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_nick__small_design_H0_reverse tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_nick__small_design_H1_forward tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_nick__small_design_H1_reverse tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_nick__small_design_no_nicks_added_yet tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_nick__twice_on_same_domain tests/scadnano_tests.py::TestNickLigateAndCrossover::test_add_nick_then_add_crossovers__6_helix_rectangle tests/scadnano_tests.py::TestNickLigateAndCrossover::test_ligate__small_nicked_design_ligate_all tests/scadnano_tests.py::TestNickLigateAndCrossover::test_ligate__small_nicked_design_no_ligation_yet tests/scadnano_tests.py::TestNickLigateAndCrossover::test_ligate__twice_on_same_domain tests/scadnano_tests.py::TestNickLigateAndCrossover::test_ligate_on_extension_side_should_error tests/scadnano_tests.py::TestNickLigateAndCrossover::test_ligate_on_middle_domain_should_error_3p_case tests/scadnano_tests.py::TestNickLigateAndCrossover::test_ligate_on_middle_domain_should_error_5p_case tests/scadnano_tests.py::TestNickLigateAndCrossover::test_ligate_on_non_extension_side_ok tests/scadnano_tests.py::TestNickLigateAndCrossover::test_nick_on_extension tests/scadnano_tests.py::TestAutocalculatedData::test_helix_max_offset tests/scadnano_tests.py::TestAutocalculatedData::test_helix_min_max_offsets tests/scadnano_tests.py::TestAutocalculatedData::test_helix_min_max_offsets_illegal_autocalculated tests/scadnano_tests.py::TestAutocalculatedData::test_helix_min_max_offsets_illegal_explicitly_specified tests/scadnano_tests.py::TestSetHelixIdx::test_set_helix_idx tests/scadnano_tests.py::TestDesignPitchYawRollOfHelix::test_design_pitch_of_helix tests/scadnano_tests.py::TestDesignPitchYawRollOfHelix::test_design_roll_of_helix tests/scadnano_tests.py::TestDesignPitchYawRollOfHelix::test_design_yaw_of_helix tests/scadnano_tests.py::TestHelixGroups::test_JSON_bad_no_groups_but_helices_reference_groups tests/scadnano_tests.py::TestHelixGroups::test_JSON_bad_uses_groups_and_top_level_grid tests/scadnano_tests.py::TestHelixGroups::test_JSON_bad_uses_groups_and_top_level_helices_view_order tests/scadnano_tests.py::TestHelixGroups::test_helix_groups tests/scadnano_tests.py::TestHelixGroups::test_helix_groups_fail_nonexistent tests/scadnano_tests.py::TestHelixGroups::test_helix_groups_to_from_JSON tests/scadnano_tests.py::TestNames::test_strand_domain_names_json tests/scadnano_tests.py::TestNames::test_strand_names_can_be_nonunique tests/scadnano_tests.py::TestJSON::test_Helix_major_tick_periodic_distances tests/scadnano_tests.py::TestJSON::test_Helix_major_tick_start_default_min_offset tests/scadnano_tests.py::TestJSON::test_NoIndent_on_helix_without_position_or_major_ticks_present tests/scadnano_tests.py::TestJSON::test_both_helix_groups_and_helices_do_not_specify_pitch_nor_yaw tests/scadnano_tests.py::TestJSON::test_color_specified_with_integer tests/scadnano_tests.py::TestJSON::test_default_helices_view_order_with_nondefault_helix_idxs_in_default_order tests/scadnano_tests.py::TestJSON::test_default_helices_view_order_with_nondefault_helix_idxs_in_nondefault_order tests/scadnano_tests.py::TestJSON::test_domain_labels tests/scadnano_tests.py::TestJSON::test_error_when_domain_end_missing tests/scadnano_tests.py::TestJSON::test_error_when_domain_forward_and_right_missing tests/scadnano_tests.py::TestJSON::test_error_when_domain_helix_missing tests/scadnano_tests.py::TestJSON::test_error_when_domain_start_missing tests/scadnano_tests.py::TestJSON::test_error_when_grid_missing tests/scadnano_tests.py::TestJSON::test_error_when_strands_missing tests/scadnano_tests.py::TestJSON::test_from_json_extension_design tests/scadnano_tests.py::TestJSON::test_grid_design_level_converted_to_enum_from_string tests/scadnano_tests.py::TestJSON::test_grid_helix_group_level_converted_to_enum_from_string tests/scadnano_tests.py::TestJSON::test_json_tristan_example_issue_32 tests/scadnano_tests.py::TestJSON::test_lack_of_NoIndent_on_helix_if_position_or_major_ticks_present tests/scadnano_tests.py::TestJSON::test_legacy_dna_sequence_key tests/scadnano_tests.py::TestJSON::test_legacy_idt_name_import__no_strand_name tests/scadnano_tests.py::TestJSON::test_legacy_idt_name_import__strand_name_exists tests/scadnano_tests.py::TestJSON::test_legacy_right_key tests/scadnano_tests.py::TestJSON::test_legacy_substrands_key tests/scadnano_tests.py::TestJSON::test_multiple_helix_groups_helices_specify_pitch_and_yaw tests/scadnano_tests.py::TestJSON::test_multiple_helix_groups_helices_specify_pitch_and_yaw_invalid tests/scadnano_tests.py::TestJSON::test_nondefault_geometry tests/scadnano_tests.py::TestJSON::test_nondefault_geometry_some_default tests/scadnano_tests.py::TestJSON::test_only_helix_groups_specify_pitch_and_yaw tests/scadnano_tests.py::TestJSON::test_only_individual_helices_specify_pitch_and_yaw tests/scadnano_tests.py::TestJSON::test_position_specified_with_origin_keyword tests/scadnano_tests.py::TestJSON::test_single_helix_group_and_helices_specify_pitch_and_yaw tests/scadnano_tests.py::TestJSON::test_strand_idt tests/scadnano_tests.py::TestJSON::test_strand_labels tests/scadnano_tests.py::TestJSON::test_to_json__hairpin tests/scadnano_tests.py::TestJSON::test_to_json__roll tests/scadnano_tests.py::TestJSON::test_to_json_extension_design__extension tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_assign_dna__conflicting_sequences_directly_assigned tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_assign_dna__conflicting_sequences_indirectly_assigned tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_consecutive_domains_loopout tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_domains_not_none_in_Strand_constructor tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_four_legally_leapfrogging_strands tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_helices_not_specified_in_Design_constructor tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_major_tick_just_inside_range tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_major_tick_outside_range tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_overlapping_caught_in_strange_counterexample tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_singleton_loopout tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_strand_offset_beyond_maxbases tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_strand_references_nonexistent_helix tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_strands_and_helices_not_specified_in_Design_constructor tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_strands_not_specified_in_Design_constructor tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_two_illegally_overlapping_strands tests/scadnano_tests.py::TestIllegalStructuresPrevented::test_two_nonconsecutive_illegally_overlapping_strands tests/scadnano_tests.py::TestInsertRemoveDomains::test_3_helix_before_design tests/scadnano_tests.py::TestInsertRemoveDomains::test_append_domain_with_sequence tests/scadnano_tests.py::TestInsertRemoveDomains::test_insert_domain_with_sequence tests/scadnano_tests.py::TestInsertRemoveDomains::test_remove_first_domain_with_sequence tests/scadnano_tests.py::TestInsertRemoveDomains::test_remove_last_domain_with_sequence tests/scadnano_tests.py::TestInsertRemoveDomains::test_remove_middle_domain_with_sequence tests/scadnano_tests.py::TestLabels::test_with_domain_label tests/scadnano_tests.py::TestLabels::test_with_domain_label__and__with_label tests/scadnano_tests.py::TestLabels::test_with_label__dict tests/scadnano_tests.py::TestLabels::test_with_label__str tests/scadnano_tests.py::TestCircularStrandsLegalMods::test_add_3p_mod_to_circular_strand tests/scadnano_tests.py::TestCircularStrandsLegalMods::test_add_5p_mod_to_circular_strand tests/scadnano_tests.py::TestCircularStrandsLegalMods::test_can_add_internal_mod_to_circular_strand tests/scadnano_tests.py::TestCircularStrandsLegalMods::test_cannot_make_strand_circular_if_3p_mod tests/scadnano_tests.py::TestCircularStrandsLegalMods::test_cannot_make_strand_circular_if_5p_mod tests/scadnano_tests.py::TestCircularStrandEdits::test_add_crossover_from_linear_strand_to_itself_makes_it_circular tests/scadnano_tests.py::TestCircularStrandEdits::test_add_nick_to_2_domain_circular_strand_makes_it_linear_nick_first_domain tests/scadnano_tests.py::TestCircularStrandEdits::test_add_nick_to_2_domain_circular_strand_makes_it_linear_nick_second_domain tests/scadnano_tests.py::TestCircularStrandEdits::test_add_nick_to_3_domain_circular_strand_makes_it_linear_nick_first_domain tests/scadnano_tests.py::TestCircularStrandEdits::test_add_nick_to_3_domain_circular_strand_makes_it_linear_nick_last_domain tests/scadnano_tests.py::TestCircularStrandEdits::test_add_nick_to_3_domain_circular_strand_makes_it_linear_nick_middle_domain tests/scadnano_tests.py::TestCircularStrandEdits::test_ligate_linear_strand_to_itself_makes_it_circular tests/scadnano_tests.py::TestAddStrand::test_add_strand__illegal_overlapping_domains tests/scadnano_tests.py::TestAddStrand::test_add_strand__with_loopout tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__2helix_with_deletions tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__adapter_assigned_from_scaffold_and_tiles tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__adapter_assigned_from_scaffold_and_tiles_with_deletions tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__adapter_assigned_from_scaffold_and_tiles_with_insertions tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__assign_from_strand_multi_other_single tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__assign_seq_with_wildcards tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__assign_to_strand_multi_other_single tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__dna_sequence_shorter_than_complementary_strand_left_strand_longer tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__dna_sequence_shorter_than_complementary_strand_right_strand_longer tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__dna_sequence_with_uncomplemented_domain_on_different_helix tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__dna_sequence_with_uncomplemented_domain_on_different_helix_wildcards_both_ends tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__from_strand_with_loopout tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__hairpin tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__one_bound_strand__with_deletions__complement_true tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__one_bound_strand__with_insertions__complement_true tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__one_helix_with_one_bottom_strand_and_three_top_strands tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__one_strand_assigned_by_complement_from_two_other_strands tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__other_strand_fully_defined_already tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__other_strand_fully_defined_already_and_other_extends_beyond tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__other_strand_fully_defined_already_and_self_extends_beyond tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__to_strand_with_loopout tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__two_bound_strands__with_deletions__complement_true tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__two_bound_strands__with_insertions__complement_true tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__two_equal_length_strands_on_one_helix tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__two_helices_with_multiple_domain_intersections tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__upper_left_edge_staple_of_16H_origami_rectangle tests/scadnano_tests.py::TestAssignDNA::test_assign_dna__wildcards_simple tests/scadnano_tests.py::TestAssignDNAToDomains::test_assign_dna__domain_sequence_too_long_error tests/scadnano_tests.py::TestAssignDNAToDomains::test_assign_dna__to_individual_domains__wildcards_multiple_overlaps tests/scadnano_tests.py::TestAssignDNAToDomains::test_assign_dna__wildcards_multiple_overlaps tests/scadnano_tests.py::TestAssignDNAToDomains::test_method_chaining_with_domain_sequence tests/scadnano_tests.py::TestSubstrandDNASequenceIn::test_dna_sequence_in__right_then_left tests/scadnano_tests.py::TestSubstrandDNASequenceIn::test_dna_sequence_in__right_then_left_deletions tests/scadnano_tests.py::TestSubstrandDNASequenceIn::test_dna_sequence_in__right_then_left_deletions_and_insertions tests/scadnano_tests.py::TestSubstrandDNASequenceIn::test_dna_sequence_in__right_then_left_insertions tests/scadnano_tests.py::TestOxviewExport::test_bp tests/scadnano_tests.py::TestOxviewExport::test_export tests/scadnano_tests.py::TestOxviewExport::test_export_file tests/scadnano_tests.py::TestOxdnaExport::test_basic_design tests/scadnano_tests.py::TestOxdnaExport::test_deletion_design tests/scadnano_tests.py::TestOxdnaExport::test_file_output tests/scadnano_tests.py::TestOxdnaExport::test_helix_groups tests/scadnano_tests.py::TestOxdnaExport::test_honeycomb_design tests/scadnano_tests.py::TestOxdnaExport::test_insertion_design tests/scadnano_tests.py::TestOxdnaExport::test_loopout_design tests/scadnano_tests.py::TestPlateMaps::test_plate_map_markdown tests/scadnano_tests.py::TestExtension::test_to_json_serializable__display_angle_key_contains_non_default_display_angle tests/scadnano_tests.py::TestExtension::test_to_json_serializable__display_length_key_contains_non_default_display_length tests/scadnano_tests.py::TestExtension::test_to_json_serializable__extension_key_contains_num_bases tests/scadnano_tests.py::TestExtension::test_to_json_serializable__label_key_contains_non_default_name tests/scadnano_tests.py::TestExtension::test_to_json_serializable__name_key_contains_non_default_name tests/scadnano_tests.py::TestExtension::test_to_json_serializable__no_display_angle_key_when_default_display_angle tests/scadnano_tests.py::TestExtension::test_to_json_serializable__no_display_length_key_when_default_display_length tests/scadnano_tests.py::TestExtension::test_to_json_serializable__no_label_key_when_default_label tests/scadnano_tests.py::TestExtension::test_to_json_serializable__no_name_key_when_default_name tests/scadnano_tests.py::TestBasePairs::test_base_pairs_on_forward_strand_ahead_of_reverse_strand tests/scadnano_tests.py::TestBasePairs::test_design_base_pairs_deletions_insertions tests/scadnano_tests.py::TestBasePairs::test_design_base_pairs_deletions_insertions_mismatch_in_insertion tests/scadnano_tests.py::TestBasePairs::test_design_base_pairs_dna_on_some_strands_and_mismatches tests/scadnano_tests.py::TestBasePairs::test_design_base_pairs_mismatches tests/scadnano_tests.py::TestBasePairs::test_design_base_pairs_no_dna tests/scadnano_tests.py::TestBasePairs::test_design_base_pairs_no_mismatches tests/scadnano_tests.py::TestBasePairs::test_find_overlapping_domains tests/scadnano_tests.py::TestBasePairs::test_no_base_pairs tests/scadnano_tests.py::TestBasePairs::test_no_base_pairs_only_forward_strand tests/scadnano_tests.py::TestBasePairs::test_no_base_pairs_only_reverse_strand tests/scadnano_tests.py::TestHelixRollRelax::test_2_helix_2_crossovers_call_relax_twice tests/scadnano_tests.py::TestHelixRollRelax::test_2_helix_3_crossover tests/scadnano_tests.py::TestHelixRollRelax::test_2_helix_3_crossover_and_intrahelix_crossovers tests/scadnano_tests.py::TestHelixRollRelax::test_2_helix_no_crossover tests/scadnano_tests.py::TestHelixRollRelax::test_3_helix_2_crossovers tests/scadnano_tests.py::TestHelixRollRelax::test_3_helix_2_crossovers_1_loopout tests/scadnano_tests.py::TestHelixRollRelax::test_3_helix_2_crossovers_1_loopout_crossovers_method tests/scadnano_tests.py::TestHelixRollRelax::test_3_helix_6_crossover tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_0_0_90 tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_0_10_20 tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_0_10_50 tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_0_10_80 tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_0_45_90 tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_10_350 tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_1_359 tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_30_350 tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_330_40_50 tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_330_40_80 tests/scadnano_tests.py::TestHelixRollRelax::test_average_angle_350_0_40 tests/scadnano_tests.py::TestHelixRollRelax::test_helix_crossover_addresses_2_helix_3_strand tests/scadnano_tests.py::TestHelixRollRelax::test_helix_crossover_addresses_3_helix_3_strand tests/scadnano_tests.py::TestHelixRollRelax::test_minimum_strain_angle_0_10_20_relative_to_0 tests/scadnano_tests.py::TestHelixRollRelax::test_minimum_strain_angle_0_10_50_relative_to_0 tests/scadnano_tests.py::TestHelixRollRelax::test_minimum_strain_angle_0_10_80_relative_to_0 tests/scadnano_tests.py::TestHelixRollRelax::test_minimum_strain_angle_174_179_184_relative_to_0 tests/scadnano_tests.py::TestHelixRollRelax::test_minimum_strain_angle_179_181_relative_to_0 tests/scadnano_tests.py::TestHelixRollRelax::test_minimum_strain_angle_181_183_relative_to_0 tests/scadnano_tests.py::TestHelixRollRelax::test_minimum_strain_angle_350_0_10_relative_to_0 tests/scadnano_tests.py::TestHelixRollRelax::test_minimum_strain_angle_350_0_40_relative_to_0 tests/scadnano_tests.py::TestHelixRollRelax::test_minimum_strain_angle_350_10_60_relative_to_0 tests/scadnano_tests.py::TestHelixRollRelax::test_minimum_strain_angle_350_10_60_relative_to_0_and_20_0_310_relative_to_10