RNApolis 0.3.13__py3-none-any.whl → 0.3.15__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: RNApolis
3
- Version: 0.3.13
3
+ Version: 0.3.15
4
4
  Summary: A Python library containing RNA-related bioinformatics functions and classes
5
5
  Home-page: https://github.com/tzok/rnapolis-py
6
6
  Author: Tomasz Zok
@@ -1,6 +1,6 @@
1
1
  rnapolis/annotator.py,sha256=XnjFBeu3P_2UMdkD4Ao7m7K6JfeqYa-13xRzghrLvt8,22086
2
2
  rnapolis/clashfinder.py,sha256=jD3s_UovygWi01NUbQNeAeRRFkARTSRraLXUV43UbAA,8514
3
- rnapolis/common.py,sha256=T13Lqhr8V9nziThUrzh5FFuGazQFF5H_p8avOOdlqpc,29996
3
+ rnapolis/common.py,sha256=tbmKV64nLClmzNN0HyKnvWA0-5aSyf4x8CGpBjpIJ4M,30290
4
4
  rnapolis/metareader.py,sha256=4qtMKRvww2sUStLeV8WVrLEt-ScydHUv4Gxx96tnf-M,1683
5
5
  rnapolis/molecule_filter.py,sha256=NhjuqdCRnXgPefWZPeTq77tifmnAzamQtA0ODqPPG9k,6918
6
6
  rnapolis/motif_extractor.py,sha256=duHvpi9Ulcny9K60E6VBpz5RpJZw-KdTB4_Ph0iP478,774
@@ -9,9 +9,9 @@ rnapolis/rfam_folder.py,sha256=3rgXEJR16uPFy_BOo8qkdClOAOQDVOkidnLE-yoRbeI,11112
9
9
  rnapolis/tertiary.py,sha256=VuATTN2SD7lBL9iUgT-doDwuEYsLodgV2u-SwQsyQcU,19658
10
10
  rnapolis/transformer.py,sha256=V9nOQvdq4-p7yUWo0vQg0CDQMpmyxz9t4TMSRVEKHnw,1817
11
11
  rnapolis/util.py,sha256=IdquFO3PV1_KDqodjupzm0Rqvgy0CeSzxGHaGEHYXVU,543
12
- RNApolis-0.3.13.dist-info/LICENSE,sha256=ZGRu12MzCgbYA-Lt8MyBlmjvPZh7xfiD5u5wBx0enq4,1066
13
- RNApolis-0.3.13.dist-info/METADATA,sha256=DD4VAvMES_WYFSYUi6wzcKlgA1-jIsBHwAnBfy0z7mE,54301
14
- RNApolis-0.3.13.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
15
- RNApolis-0.3.13.dist-info/entry_points.txt,sha256=foN2Pn5e-OzEz0fFmNoX6PnFSZFQntOlY8LbognP5F0,308
16
- RNApolis-0.3.13.dist-info/top_level.txt,sha256=LcO18koxZcWoJ21KDRRRo_tyIbmXL5z61dPitZpy8yc,9
17
- RNApolis-0.3.13.dist-info/RECORD,,
12
+ RNApolis-0.3.15.dist-info/LICENSE,sha256=ZGRu12MzCgbYA-Lt8MyBlmjvPZh7xfiD5u5wBx0enq4,1066
13
+ RNApolis-0.3.15.dist-info/METADATA,sha256=JINDTFBZOiXrJUB3-jnBW8YIHcRUc3mQ2EKoaFDS5zE,54301
14
+ RNApolis-0.3.15.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
15
+ RNApolis-0.3.15.dist-info/entry_points.txt,sha256=foN2Pn5e-OzEz0fFmNoX6PnFSZFQntOlY8LbognP5F0,308
16
+ RNApolis-0.3.15.dist-info/top_level.txt,sha256=LcO18koxZcWoJ21KDRRRo_tyIbmXL5z61dPitZpy8yc,9
17
+ RNApolis-0.3.15.dist-info/RECORD,,
rnapolis/common.py CHANGED
@@ -869,8 +869,12 @@ class BpSeq:
869
869
  graph[i].add(j)
870
870
  graph[j].add(i)
871
871
 
872
- # find all connected components
872
+ # early exit for non-pseudoknotted structures
873
873
  vertices = list(graph.keys())
874
+ if not vertices:
875
+ return [self.fcfs]
876
+
877
+ # find all connected components
874
878
  visited = {vertex: False for vertex in vertices}
875
879
  components = []
876
880
 
@@ -896,33 +900,37 @@ class BpSeq:
896
900
  else:
897
901
  stack.pop()
898
902
 
899
- # permute order of every component
900
- permutations = [
901
- list(itertools.permutations(component)) for component in components
902
- ]
903
- solutions = set()
903
+ # find unique orders for each component
904
+ unique = []
905
+ for component in components:
906
+ unique.append(set())
904
907
 
905
- for permutation in itertools.product(*permutations):
906
- orders = [0 for _ in range(len(regions))]
908
+ for permutation in itertools.permutations(component):
909
+ orders = {region: 0 for region in component}
907
910
 
908
- for component in permutation:
909
- for i in range(1, len(component)):
910
- region_i = component[i]
911
- available = [True for _ in range(len(graph))]
911
+ for i in range(1, len(permutation)):
912
+ available = [True for _ in range(len(component))]
912
913
 
913
914
  for j in range(i):
914
- region_j = component[j]
915
-
916
- if region_j in graph[region_i]:
917
- available[orders[region_j]] = False
915
+ if permutation[j] in graph[permutation[i]]:
916
+ available[orders[permutation[j]]] = False
918
917
 
919
918
  order = next(
920
- filter(lambda i: available[i] is True, range(len(available)))
919
+ filter(lambda k: available[k] is True, range(len(available)))
921
920
  )
922
- orders[region_i] = order
921
+ orders[permutation[i]] = order
922
+
923
+ unique[-1].add(frozenset(orders.items()))
924
+
925
+ # generate all possible dot-brackets
926
+ solutions = set()
927
+ for assignment in itertools.product(*unique):
928
+ orders = {region: 0 for region in range(len(regions))}
923
929
 
924
- solutions.add(self.__make_dot_bracket(regions, orders))
930
+ for order in assignment:
931
+ orders.update(order)
925
932
 
933
+ solutions.add(self.__make_dot_bracket(regions, orders))
926
934
  return list(solutions)
927
935
 
928
936