risk-network 0.0.6b7__py3-none-any.whl → 0.0.6b9__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.
risk/__init__.py CHANGED
@@ -7,4 +7,4 @@ RISK: RISK Infers Spatial Kinships
7
7
 
8
8
  from risk.risk import RISK
9
9
 
10
- __version__ = "0.0.6-beta.7"
10
+ __version__ = "0.0.6-beta.9"
risk/network/graph.py CHANGED
@@ -28,7 +28,7 @@ class NetworkGraph:
28
28
  top_annotations: pd.DataFrame,
29
29
  domains: pd.DataFrame,
30
30
  trimmed_domains: pd.DataFrame,
31
- node_label_to_id_map: Dict[str, Any],
31
+ node_label_to_node_id_map: Dict[str, Any],
32
32
  node_enrichment_sums: np.ndarray,
33
33
  ):
34
34
  """Initialize the NetworkGraph object.
@@ -38,43 +38,48 @@ class NetworkGraph:
38
38
  top_annotations (pd.DataFrame): DataFrame containing annotations data for the network nodes.
39
39
  domains (pd.DataFrame): DataFrame containing domain data for the network nodes.
40
40
  trimmed_domains (pd.DataFrame): DataFrame containing trimmed domain data for the network nodes.
41
- node_label_to_id_map (dict): A dictionary mapping node labels to their corresponding IDs.
41
+ node_label_to_node_id_map (dict): A dictionary mapping node labels to their corresponding IDs.
42
42
  node_enrichment_sums (np.ndarray): Array containing the enrichment sums for the nodes.
43
43
  """
44
44
  self.top_annotations = top_annotations
45
- self.domain_to_nodes_map = self._create_domain_to_nodes_map(domains)
45
+ self.domain_id_to_node_ids_map = self._create_domain_id_to_node_ids_map(domains)
46
46
  self.domains = domains
47
- self.trimmed_domain_to_term = self._create_domain_to_term_map(trimmed_domains)
48
- self.trimmed_domains = trimmed_domains
47
+ self.domain_id_to_domain_terms_map = self._create_domain_id_to_domain_terms_map(
48
+ trimmed_domains
49
+ )
49
50
  self.node_enrichment_sums = node_enrichment_sums
50
- self.node_id_to_label_map = {v: k for k, v in node_label_to_id_map.items()}
51
+ self.node_id_to_node_label_map = {v: k for k, v in node_label_to_node_id_map.items()}
51
52
  self.node_label_to_enrichment_map = dict(
52
- zip(node_label_to_id_map.keys(), node_enrichment_sums)
53
+ zip(node_label_to_node_id_map.keys(), node_enrichment_sums)
53
54
  )
54
- self.node_label_to_id_map = node_label_to_id_map
55
- # NOTE: self.network and self.node_coordinates are declared in _initialize_network
55
+ self.node_label_to_node_id_map = node_label_to_node_id_map
56
+ # NOTE: Below this point, instance attributes (i.e., self) will be used!
57
+ self.domain_id_to_node_labels_map = self._create_domain_id_to_node_labels_map()
58
+ # self.network and self.node_coordinates are properly declared in _initialize_network
56
59
  self.network = None
57
60
  self.node_coordinates = None
58
61
  self._initialize_network(network)
59
62
 
60
- def _create_domain_to_nodes_map(self, domains: pd.DataFrame) -> Dict[str, Any]:
61
- """Create a mapping from domains to the list of nodes belonging to each domain.
63
+ def _create_domain_id_to_node_ids_map(self, domains: pd.DataFrame) -> Dict[str, Any]:
64
+ """Create a mapping from domains to the list of node IDs belonging to each domain.
62
65
 
63
66
  Args:
64
67
  domains (pd.DataFrame): DataFrame containing domain information, including the 'primary domain' for each node.
65
68
 
66
69
  Returns:
67
- dict: A dictionary where keys are domain IDs and values are lists of nodes belonging to each domain.
70
+ dict: A dictionary where keys are domain IDs and values are lists of node IDs belonging to each domain.
68
71
  """
69
72
  cleaned_domains_matrix = domains.reset_index()[["index", "primary domain"]]
70
73
  node_to_domains_map = cleaned_domains_matrix.set_index("index")["primary domain"].to_dict()
71
- domain_to_nodes_map = defaultdict(list)
74
+ domain_id_to_node_ids_map = defaultdict(list)
72
75
  for k, v in node_to_domains_map.items():
73
- domain_to_nodes_map[v].append(k)
76
+ domain_id_to_node_ids_map[v].append(k)
74
77
 
75
- return domain_to_nodes_map
78
+ return domain_id_to_node_ids_map
76
79
 
77
- def _create_domain_to_term_map(self, trimmed_domains: pd.DataFrame) -> Dict[str, Any]:
80
+ def _create_domain_id_to_domain_terms_map(
81
+ self, trimmed_domains: pd.DataFrame
82
+ ) -> Dict[str, Any]:
78
83
  """Create a mapping from domain IDs to their corresponding terms.
79
84
 
80
85
  Args:
@@ -90,6 +95,20 @@ class NetworkGraph:
90
95
  )
91
96
  )
92
97
 
98
+ def _create_domain_id_to_node_labels_map(self) -> Dict[int, List[str]]:
99
+ """Create a map from domain IDs to node labels.
100
+
101
+ Returns:
102
+ dict: A dictionary mapping domain IDs to the corresponding node labels.
103
+ """
104
+ domain_id_to_label_map = {}
105
+ for domain_id, node_ids in self.domain_id_to_node_ids_map.items():
106
+ domain_id_to_label_map[domain_id] = [
107
+ self.node_id_to_node_label_map[node_id] for node_id in node_ids
108
+ ]
109
+
110
+ return domain_id_to_label_map
111
+
93
112
  def _initialize_network(self, G: nx.Graph) -> None:
94
113
  """Initialize the network by unfolding it and extracting node coordinates.
95
114
 
@@ -158,8 +177,8 @@ class NetworkGraph:
158
177
  # Initialize composite colors array with shape (number of nodes, 4) for RGBA
159
178
  composite_colors = np.zeros((num_nodes, 4))
160
179
  # Assign colors to nodes based on domain_colors
161
- for domain_idx, nodes in self.domain_to_nodes_map.items():
162
- color = domain_colors[domain_idx]
180
+ for domain_id, nodes in self.domain_id_to_node_ids_map.items():
181
+ color = domain_colors[domain_id]
163
182
  for node in nodes:
164
183
  composite_colors[node] = color
165
184
 
@@ -189,7 +208,7 @@ class NetworkGraph:
189
208
  domain_colors = _get_colors(
190
209
  num_colors_to_generate=len(domains), cmap=cmap, color=color, random_seed=random_seed
191
210
  )
192
- return dict(zip(self.domain_to_nodes_map.keys(), domain_colors))
211
+ return dict(zip(self.domain_id_to_node_ids_map.keys(), domain_colors))
193
212
 
194
213
 
195
214
  def _transform_colors(
risk/network/plot.py CHANGED
@@ -308,9 +308,9 @@ class NetworkPlotter:
308
308
 
309
309
  # Filter to get node IDs and their coordinates
310
310
  node_ids = [
311
- self.graph.node_label_to_id_map.get(node)
311
+ self.graph.node_label_to_node_id_map.get(node)
312
312
  for node in nodes
313
- if node in self.graph.node_label_to_id_map
313
+ if node in self.graph.node_label_to_node_id_map
314
314
  ]
315
315
  if not node_ids:
316
316
  raise ValueError("No nodes found in the network graph.")
@@ -320,7 +320,7 @@ class NetworkPlotter:
320
320
  node_color = [
321
321
  node_color[nodes.index(node)]
322
322
  for node in nodes
323
- if node in self.graph.node_label_to_id_map
323
+ if node in self.graph.node_label_to_node_id_map
324
324
  ]
325
325
 
326
326
  # Convert colors to RGBA using the _to_rgba helper function
@@ -389,16 +389,16 @@ class NetworkPlotter:
389
389
  )
390
390
 
391
391
  # Ensure color is converted to RGBA with repetition matching the number of domains
392
- color = _to_rgba(color, alpha, num_repeats=len(self.graph.domain_to_nodes_map))
392
+ color = _to_rgba(color, alpha, num_repeats=len(self.graph.domain_id_to_node_ids_map))
393
393
  # Extract node coordinates from the network graph
394
394
  node_coordinates = self.graph.node_coordinates
395
395
  # Draw contours for each domain in the network
396
- for idx, (_, nodes) in enumerate(self.graph.domain_to_nodes_map.items()):
397
- if len(nodes) > 1:
396
+ for idx, (_, node_ids) in enumerate(self.graph.domain_id_to_node_ids_map.items()):
397
+ if len(node_ids) > 1:
398
398
  self._draw_kde_contour(
399
399
  self.ax,
400
400
  node_coordinates,
401
- nodes,
401
+ node_ids,
402
402
  color=color[idx],
403
403
  levels=levels,
404
404
  bandwidth=bandwidth,
@@ -452,9 +452,9 @@ class NetworkPlotter:
452
452
  for sublist in node_groups:
453
453
  # Filter to get node IDs and their coordinates for each sublist
454
454
  node_ids = [
455
- self.graph.node_label_to_id_map.get(node)
455
+ self.graph.node_label_to_node_id_map.get(node)
456
456
  for node in sublist
457
- if node in self.graph.node_label_to_id_map
457
+ if node in self.graph.node_label_to_node_id_map
458
458
  ]
459
459
  if not node_ids or len(node_ids) == 1:
460
460
  raise ValueError(
@@ -569,6 +569,8 @@ class NetworkPlotter:
569
569
  arrow_style: str = "->",
570
570
  arrow_color: Union[str, List, Tuple, np.ndarray] = "black",
571
571
  arrow_alpha: float = 1.0,
572
+ arrow_base_shrink: float = 0.0,
573
+ arrow_tip_shrink: float = 0.0,
572
574
  max_labels: Union[int, None] = None,
573
575
  max_words: int = 10,
574
576
  min_words: int = 1,
@@ -592,6 +594,8 @@ class NetworkPlotter:
592
594
  arrow_style (str, optional): Style of the arrows pointing to centroids. Defaults to "->".
593
595
  arrow_color (str, list, tuple, or np.ndarray, optional): Color of the arrows. Defaults to "black".
594
596
  arrow_alpha (float, optional): Transparency level for the arrow color. Defaults to 1.0.
597
+ arrow_base_shrink (float, optional): Distance between the text and the base of the arrow. Defaults to 0.0.
598
+ arrow_tip_shrink (float, optional): Distance between the arrow tip and the centroid. Defaults to 0.0.
595
599
  max_labels (int, optional): Maximum number of labels to plot. Defaults to None (no limit).
596
600
  max_words (int, optional): Maximum number of words in a label. Defaults to 10.
597
601
  min_words (int, optional): Minimum number of words required to display a label. Defaults to 1.
@@ -622,6 +626,8 @@ class NetworkPlotter:
622
626
  label_arrow_style=arrow_style,
623
627
  label_arrow_color="custom" if isinstance(arrow_color, np.ndarray) else arrow_color,
624
628
  label_arrow_alpha=arrow_alpha,
629
+ label_arrow_base_shrink=arrow_base_shrink,
630
+ label_arrow_tip_shrink=arrow_tip_shrink,
625
631
  label_max_labels=max_labels,
626
632
  label_max_words=max_words,
627
633
  label_min_words=min_words,
@@ -635,12 +641,14 @@ class NetworkPlotter:
635
641
 
636
642
  # Set max_labels to the total number of domains if not provided (None)
637
643
  if max_labels is None:
638
- max_labels = len(self.graph.domain_to_nodes_map)
644
+ max_labels = len(self.graph.domain_id_to_node_ids_map)
639
645
 
640
646
  # Convert colors to RGBA using the _to_rgba helper function
641
- fontcolor = _to_rgba(fontcolor, fontalpha, num_repeats=len(self.graph.domain_to_nodes_map))
647
+ fontcolor = _to_rgba(
648
+ fontcolor, fontalpha, num_repeats=len(self.graph.domain_id_to_node_ids_map)
649
+ )
642
650
  arrow_color = _to_rgba(
643
- arrow_color, arrow_alpha, num_repeats=len(self.graph.domain_to_nodes_map)
651
+ arrow_color, arrow_alpha, num_repeats=len(self.graph.domain_id_to_node_ids_map)
644
652
  )
645
653
 
646
654
  # Normalize words_to_omit to lowercase
@@ -649,9 +657,9 @@ class NetworkPlotter:
649
657
 
650
658
  # Calculate the center and radius of the network
651
659
  domain_centroids = {}
652
- for domain, nodes in self.graph.domain_to_nodes_map.items():
653
- if nodes: # Skip if the domain has no nodes
654
- domain_centroids[domain] = self._calculate_domain_centroid(nodes)
660
+ for domain_id, node_ids in self.graph.domain_id_to_node_ids_map.items():
661
+ if node_ids: # Skip if the domain has no nodes
662
+ domain_centroids[domain_id] = self._calculate_domain_centroid(node_ids)
655
663
 
656
664
  # Initialize dictionaries and lists for valid indices
657
665
  valid_indices = []
@@ -669,12 +677,15 @@ class NetworkPlotter:
669
677
 
670
678
  # Process the specified IDs first
671
679
  for domain in ids_to_keep:
672
- if domain in self.graph.trimmed_domain_to_term and domain in domain_centroids:
680
+ if (
681
+ domain in self.graph.domain_id_to_domain_terms_map
682
+ and domain in domain_centroids
683
+ ):
673
684
  # Handle ids_to_replace logic here for ids_to_keep
674
685
  if ids_to_replace and domain in ids_to_replace:
675
686
  terms = ids_to_replace[domain].split(" ")
676
687
  else:
677
- terms = self.graph.trimmed_domain_to_term[domain].split(" ")
688
+ terms = self.graph.domain_id_to_domain_terms_map[domain].split(" ")
678
689
 
679
690
  # Apply words_to_omit, word length constraints, and max_words
680
691
  if words_to_omit:
@@ -706,7 +717,7 @@ class NetworkPlotter:
706
717
  if ids_to_replace and domain in ids_to_replace:
707
718
  terms = ids_to_replace[domain].split(" ")
708
719
  else:
709
- terms = self.graph.trimmed_domain_to_term[domain].split(" ")
720
+ terms = self.graph.domain_id_to_domain_terms_map[domain].split(" ")
710
721
 
711
722
  # Apply words_to_omit, word length constraints, and max_words
712
723
  if words_to_omit:
@@ -746,7 +757,11 @@ class NetworkPlotter:
746
757
  fontname=font,
747
758
  color=fontcolor[idx],
748
759
  arrowprops=dict(
749
- arrowstyle=arrow_style, color=arrow_color[idx], linewidth=arrow_linewidth
760
+ arrowstyle=arrow_style,
761
+ color=arrow_color[idx],
762
+ linewidth=arrow_linewidth,
763
+ shrinkA=arrow_base_shrink,
764
+ shrinkB=arrow_tip_shrink,
750
765
  ),
751
766
  )
752
767
  # Overlay domain ID at the centroid if requested
@@ -778,6 +793,8 @@ class NetworkPlotter:
778
793
  arrow_style: str = "->",
779
794
  arrow_color: Union[str, List, Tuple, np.ndarray] = "black",
780
795
  arrow_alpha: float = 1.0,
796
+ arrow_base_shrink: float = 0.0,
797
+ arrow_tip_shrink: float = 0.0,
781
798
  ) -> None:
782
799
  """Annotate the network graph with a label for the given nodes, with one arrow pointing to each centroid of sublists of nodes.
783
800
 
@@ -795,6 +812,8 @@ class NetworkPlotter:
795
812
  arrow_style (str, optional): Style of the arrows pointing to the centroid. Defaults to "->".
796
813
  arrow_color (str, list, tuple, or np.ndarray, optional): Color of the arrow. Defaults to "black".
797
814
  arrow_alpha (float, optional): Transparency level for the arrow color. Defaults to 1.0.
815
+ arrow_base_shrink (float, optional): Distance between the text and the base of the arrow. Defaults to 0.0.
816
+ arrow_tip_shrink (float, optional): Distance between the arrow tip and the centroid. Defaults to 0.0.
798
817
  """
799
818
  # Check if nodes is a list of lists or a flat list
800
819
  if any(isinstance(item, (list, tuple, np.ndarray)) for item in nodes):
@@ -821,9 +840,9 @@ class NetworkPlotter:
821
840
  for sublist in node_groups:
822
841
  # Map node labels to IDs
823
842
  node_ids = [
824
- self.graph.node_label_to_id_map.get(node)
843
+ self.graph.node_label_to_node_id_map.get(node)
825
844
  for node in sublist
826
- if node in self.graph.node_label_to_id_map
845
+ if node in self.graph.node_label_to_node_id_map
827
846
  ]
828
847
  if not node_ids or len(node_ids) == 1:
829
848
  raise ValueError(
@@ -844,7 +863,11 @@ class NetworkPlotter:
844
863
  fontname=font,
845
864
  color=fontcolor_rgba,
846
865
  arrowprops=dict(
847
- arrowstyle=arrow_style, color=arrow_color_rgba, linewidth=arrow_linewidth
866
+ arrowstyle=arrow_style,
867
+ color=arrow_color_rgba,
868
+ linewidth=arrow_linewidth,
869
+ shrinkA=arrow_base_shrink,
870
+ shrinkB=arrow_tip_shrink,
848
871
  ),
849
872
  )
850
873
 
@@ -930,10 +953,10 @@ class NetworkPlotter:
930
953
  Returns:
931
954
  np.ndarray: Array of node sizes, with enriched nodes larger than non-enriched ones.
932
955
  """
933
- # Merge all enriched nodes from the domain_to_nodes_map dictionary
956
+ # Merge all enriched nodes from the domain_id_to_node_ids_map dictionary
934
957
  enriched_nodes = set()
935
- for _, nodes in self.graph.domain_to_nodes_map.items():
936
- enriched_nodes.update(nodes)
958
+ for _, node_ids in self.graph.domain_id_to_node_ids_map.items():
959
+ enriched_nodes.update(node_ids)
937
960
 
938
961
  # Initialize all node sizes to the non-enriched size
939
962
  node_sizes = np.full(len(self.graph.network.nodes), nonenriched_size)
@@ -1047,10 +1070,10 @@ class NetworkPlotter:
1047
1070
  random_seed=random_seed,
1048
1071
  )
1049
1072
  annotated_colors = []
1050
- for _, nodes in self.graph.domain_to_nodes_map.items():
1051
- if len(nodes) > 1:
1073
+ for _, node_ids in self.graph.domain_id_to_node_ids_map.items():
1074
+ if len(node_ids) > 1:
1052
1075
  # For multi-node domains, choose the brightest color based on RGB sum
1053
- domain_colors = np.array([node_colors[node] for node in nodes])
1076
+ domain_colors = np.array([node_colors[node] for node in node_ids])
1054
1077
  brightest_color = domain_colors[
1055
1078
  np.argmax(domain_colors[:, :3].sum(axis=1)) # Sum the RGB values
1056
1079
  ]
risk/risk.py CHANGED
@@ -343,7 +343,7 @@ class RISK(NetworkIO, AnnotationsIO):
343
343
  top_annotations=top_annotations,
344
344
  domains=domains,
345
345
  trimmed_domains=trimmed_domains,
346
- node_label_to_id_map=node_label_to_id,
346
+ node_label_to_node_id_map=node_label_to_id,
347
347
  node_enrichment_sums=node_enrichment_sums,
348
348
  )
349
349
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: risk-network
3
- Version: 0.0.6b7
3
+ Version: 0.0.6b9
4
4
  Summary: A Python package for biological network analysis
5
5
  Author: Ira Horecka
6
6
  Author-email: Ira Horecka <ira89@icloud.com>
@@ -1,6 +1,6 @@
1
- risk/__init__.py,sha256=DLDQBVlM5oYOp-S9i1GDq-rRwaNv1dutx241xcHbK3w,112
1
+ risk/__init__.py,sha256=6tlj1gnLhGwFbzT3xQqzWEWhatgBFXGguhpqJMhE5EA,112
2
2
  risk/constants.py,sha256=XInRaH78Slnw_sWgAsBFbUHkyA0h0jL0DKGuQNbOvjM,550
3
- risk/risk.py,sha256=PONl5tzN5DSVUf4MgczfOvzGV-5JoAOLTQ6YWl10mZ8,20697
3
+ risk/risk.py,sha256=-QVVWCBNmu3ho0QDiB5lRqpNsBR5fkpXpWJan3K3YGg,20702
4
4
  risk/annotations/__init__.py,sha256=vUpVvMRE5if01Ic8QY6M2Ae3EFGJHdugEe9PdEkAW4Y,138
5
5
  risk/annotations/annotations.py,sha256=DRUTdGzMdqo62NWSapBUksbvPr9CrzD76qtOcxeNKmo,10554
6
6
  risk/annotations/io.py,sha256=lo7NKqOVkeeBp58JBxWJHtA0xjL5Yoxqe9Ox0daKlZk,9457
@@ -13,9 +13,9 @@ risk/neighborhoods/domains.py,sha256=5V--Nj-TrSdubhD_2PI57ffcn_PMSEgpX_iY5OjT6R8
13
13
  risk/neighborhoods/neighborhoods.py,sha256=sHmjFFl2U5qV9YbQCRbpbI36j7dS7IFfFwwRb1_-AuM,13945
14
14
  risk/network/__init__.py,sha256=iEPeJdZfqp0toxtbElryB8jbz9_t_k4QQ3iDvKE8C_0,126
15
15
  risk/network/geometry.py,sha256=H1yGVVqgbfpzBzJwEheDLfvGLSA284jGQQTn612L4Vc,6759
16
- risk/network/graph.py,sha256=scPFQIJjioup1FjQLyxNrAB17RmskY9MmvoFHrMlqNI,13135
16
+ risk/network/graph.py,sha256=7haHu4M3fleqbrIzs6HC9jnKizSERzmmAYSmUwdoSXA,13953
17
17
  risk/network/io.py,sha256=gG50kOknO-D3HkW1HsbHMkTMvjUtn3l4W4Jwd-rXNr8,21202
18
- risk/network/plot.py,sha256=4zcFJWZgGrj7AG1crRuwGpzzjjHXjQ8Eh5VjlkOQblE,60747
18
+ risk/network/plot.py,sha256=_g5xHolMTAfZCBvYYEX1CYME4s4zA2hTHtN-utaMPik,61978
19
19
  risk/stats/__init__.py,sha256=e-BE_Dr_jgiK6hKM-T-tlG4yvHnId8e5qjnM0pdwNVc,230
20
20
  risk/stats/fisher_exact.py,sha256=-bPwzu76-ob0HzrTV20mXUTot7v-MLuqFaAoab-QxPg,4966
21
21
  risk/stats/hypergeom.py,sha256=lrIFdhCWRjvM4apYw1MlOKqT_IY5OjtCwrjdtJdt6Tg,4954
@@ -23,8 +23,8 @@ risk/stats/stats.py,sha256=kvShov-94W6ffgDUTb522vB9hDJQSyTsYif_UIaFfSM,7059
23
23
  risk/stats/permutation/__init__.py,sha256=neJp7FENC-zg_CGOXqv-iIvz1r5XUKI9Ruxhmq7kDOI,105
24
24
  risk/stats/permutation/permutation.py,sha256=qLWdwxEY6nmkYPxpM8HLDcd2mbqYv9Qr7CKtJvhLqIM,9220
25
25
  risk/stats/permutation/test_functions.py,sha256=HuDIM-V1jkkfE1rlaIqrWWBSKZt3dQ1f-YEDjWpnLSE,2343
26
- risk_network-0.0.6b7.dist-info/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
27
- risk_network-0.0.6b7.dist-info/METADATA,sha256=yiCOKKWr1cByfyrssz1g0LLSYLfvUr7XziphQPe2IkA,43142
28
- risk_network-0.0.6b7.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
29
- risk_network-0.0.6b7.dist-info/top_level.txt,sha256=NX7C2PFKTvC1JhVKv14DFlFAIFnKc6Lpsu1ZfxvQwVw,5
30
- risk_network-0.0.6b7.dist-info/RECORD,,
26
+ risk_network-0.0.6b9.dist-info/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
27
+ risk_network-0.0.6b9.dist-info/METADATA,sha256=xhmfOR_CeYgPfZQ6n5OGN4zkiOJMYZ6j3SXVqt3dWzo,43142
28
+ risk_network-0.0.6b9.dist-info/WHEEL,sha256=5Mi1sN9lKoFv_gxcPtisEVrJZihrm_beibeg5R6xb4I,91
29
+ risk_network-0.0.6b9.dist-info/top_level.txt,sha256=NX7C2PFKTvC1JhVKv14DFlFAIFnKc6Lpsu1ZfxvQwVw,5
30
+ risk_network-0.0.6b9.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.1.2)
2
+ Generator: setuptools (75.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5