RNApolis 0.3.13__py3-none-any.whl → 0.3.15__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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