risk-network 0.0.4b3__py3-none-any.whl → 0.0.5__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
@@ -2,9 +2,9 @@
2
2
  risk
3
3
  ~~~~
4
4
 
5
- RISK: RISK Infers Spatial Kinship
5
+ RISK: RISK Infers Spatial Kinships
6
6
  """
7
7
 
8
8
  from risk.risk import RISK
9
9
 
10
- __version__ = "0.0.4-beta.3"
10
+ __version__ = "0.0.5"
@@ -207,7 +207,7 @@ def _simplify_word_list(words: List[str], threshold: float = 0.80) -> List[str]:
207
207
  similar_words = [
208
208
  other_word
209
209
  for other_word in word_counts
210
- if _jaccard_index(word_set, set(other_word)) >= threshold
210
+ if _calculate_jaccard_index(word_set, set(other_word)) >= threshold
211
211
  ]
212
212
  # Sort by frequency and choose the most frequent word
213
213
  similar_words.sort(key=lambda w: word_counts[w], reverse=True)
@@ -220,7 +220,7 @@ def _simplify_word_list(words: List[str], threshold: float = 0.80) -> List[str]:
220
220
  return final_words
221
221
 
222
222
 
223
- def _jaccard_index(set1: Set[Any], set2: Set[Any]) -> float:
223
+ def _calculate_jaccard_index(set1: Set[Any], set2: Set[Any]) -> float:
224
224
  """Calculate the Jaccard Index of two sets.
225
225
 
226
226
  Args:
risk/constants.py CHANGED
@@ -3,6 +3,8 @@ risk/constants
3
3
  ~~~~~~~~~~~~~~
4
4
  """
5
5
 
6
+ GROUP_LINKAGE_METHODS = ["single", "complete", "average", "weighted", "centroid", "median", "ward"]
7
+
6
8
  GROUP_DISTANCE_METRICS = [
7
9
  "braycurtis",
8
10
  "canberra",
@@ -27,5 +29,3 @@ GROUP_DISTANCE_METRICS = [
27
29
  "sqeuclidean",
28
30
  "yule",
29
31
  ]
30
-
31
- GROUP_LINKAGE_METHODS = ["single", "complete", "average", "weighted", "centroid", "median", "ward"]
risk/network/graph.py CHANGED
@@ -5,13 +5,12 @@ risk/network/graph
5
5
 
6
6
  import random
7
7
  from collections import defaultdict
8
- from typing import Any, Dict, List, Tuple
8
+ from typing import Any, Dict, List, Tuple, Union
9
9
 
10
10
  import networkx as nx
11
11
  import numpy as np
12
12
  import pandas as pd
13
13
  import matplotlib
14
- import matplotlib.cm as cm
15
14
 
16
15
 
17
16
  class NetworkGraph:
@@ -101,7 +100,12 @@ class NetworkGraph:
101
100
  self.node_coordinates = _extract_node_coordinates(G_2d)
102
101
 
103
102
  def get_domain_colors(
104
- self, min_scale: float = 0.8, max_scale: float = 1.0, random_seed: int = 888, **kwargs
103
+ self,
104
+ min_scale: float = 0.8,
105
+ max_scale: float = 1.0,
106
+ scale_factor: float = 1.0,
107
+ random_seed: int = 888,
108
+ **kwargs,
105
109
  ) -> np.ndarray:
106
110
  """Generate composite colors for domains.
107
111
 
@@ -112,6 +116,8 @@ class NetworkGraph:
112
116
  Args:
113
117
  min_scale (float, optional): Minimum scale for color intensity. Defaults to 0.8.
114
118
  max_scale (float, optional): Maximum scale for color intensity. Defaults to 1.0.
119
+ scale_factor (float, optional): Exponent for scaling, where values > 1 increase contrast by dimming small
120
+ values more. Defaults to 1.0.
115
121
  random_seed (int, optional): Seed for random number generation. Defaults to 888.
116
122
  **kwargs: Additional keyword arguments for color generation.
117
123
 
@@ -119,7 +125,7 @@ class NetworkGraph:
119
125
  np.ndarray: Array of transformed colors.
120
126
  """
121
127
  # Get colors for each domain
122
- domain_colors = self._get_domain_colors(**kwargs, random_seed=random_seed)
128
+ domain_colors = self._get_domain_colors(random_seed=random_seed)
123
129
  # Generate composite colors for nodes
124
130
  node_colors = self._get_composite_node_colors(domain_colors)
125
131
  # Transform colors to ensure proper alpha values and intensity
@@ -128,6 +134,7 @@ class NetworkGraph:
128
134
  self.node_enrichment_sums,
129
135
  min_scale=min_scale,
130
136
  max_scale=max_scale,
137
+ scale_factor=scale_factor,
131
138
  )
132
139
 
133
140
  return transformed_colors
@@ -153,9 +160,15 @@ class NetworkGraph:
153
160
 
154
161
  return composite_colors
155
162
 
156
- def _get_domain_colors(self, **kwargs) -> Dict[str, Any]:
163
+ def _get_domain_colors(
164
+ self, color: Union[str, None] = None, random_seed: int = 888
165
+ ) -> Dict[str, Any]:
157
166
  """Get colors for each domain.
158
167
 
168
+ Args:
169
+ color (Union[str, None], optional): Specific color to use for all domains. If specified, it will overwrite the colormap.
170
+ random_seed (int, optional): Seed for random number generation. Defaults to 888.
171
+
159
172
  Returns:
160
173
  dict: A dictionary mapping domain keys to their corresponding RGBA colors.
161
174
  """
@@ -164,20 +177,28 @@ class NetworkGraph:
164
177
  col for col in self.domains.columns if isinstance(col, (int, np.integer))
165
178
  ]
166
179
  domains = np.sort(numeric_domains)
167
- domain_colors = _get_colors(**kwargs, num_colors_to_generate=len(domains))
180
+ domain_colors = _get_colors(
181
+ num_colors_to_generate=len(domains), color=color, random_seed=random_seed
182
+ )
168
183
  return dict(zip(self.domain_to_nodes.keys(), domain_colors))
169
184
 
170
185
 
171
186
  def _transform_colors(
172
- colors: np.ndarray, enrichment_sums: np.ndarray, min_scale: float = 0.8, max_scale: float = 1.0
187
+ colors: np.ndarray,
188
+ enrichment_sums: np.ndarray,
189
+ min_scale: float = 0.8,
190
+ max_scale: float = 1.0,
191
+ scale_factor: float = 1.0,
173
192
  ) -> np.ndarray:
174
- """Transform colors to ensure proper alpha values and intensity based on enrichment sums.
193
+ """Transform colors using power scaling to emphasize high enrichment sums more.
175
194
 
176
195
  Args:
177
196
  colors (np.ndarray): An array of RGBA colors.
178
197
  enrichment_sums (np.ndarray): An array of enrichment sums corresponding to the colors.
179
198
  min_scale (float, optional): Minimum scale for color intensity. Defaults to 0.8.
180
199
  max_scale (float, optional): Maximum scale for color intensity. Defaults to 1.0.
200
+ scale_factor (float, optional): Exponent for scaling, where values > 1 increase contrast by dimming small
201
+ values more. Defaults to 1.0.
181
202
 
182
203
  Returns:
183
204
  np.ndarray: The transformed array of RGBA colors with adjusted intensities.
@@ -185,11 +206,12 @@ def _transform_colors(
185
206
  if min_scale == max_scale:
186
207
  min_scale = max_scale - 10e-6 # Avoid division by zero
187
208
 
188
- log_enrichment_sums = np.log1p(enrichment_sums) # Use log1p to avoid log(0)
189
- # Normalize the capped enrichment sums to the range [0, 1]
190
- normalized_sums = log_enrichment_sums / np.max(log_enrichment_sums)
191
- # Scale normalized sums to the specified color range [min_scale, max_scale]
192
- scaled_sums = min_scale + (max_scale - min_scale) * normalized_sums
209
+ # Normalize the enrichment sums to the range [0, 1]
210
+ normalized_sums = enrichment_sums / np.max(enrichment_sums)
211
+ # Apply power scaling to dim lower values and emphasize higher values
212
+ scaled_sums = normalized_sums**scale_factor
213
+ # Linearly scale the normalized sums to the range [min_scale, max_scale]
214
+ scaled_sums = min_scale + (max_scale - min_scale) * scaled_sums
193
215
  # Adjust RGB values based on scaled sums
194
216
  for i in range(3): # Only adjust RGB values
195
217
  colors[:, i] = scaled_sums * colors[:, i]
@@ -250,7 +272,10 @@ def _extract_node_coordinates(G: nx.Graph) -> np.ndarray:
250
272
 
251
273
 
252
274
  def _get_colors(
253
- num_colors_to_generate: int = 10, cmap: str = "hsv", random_seed: int = 888, **kwargs
275
+ num_colors_to_generate: int = 10,
276
+ cmap: str = "hsv",
277
+ random_seed: int = 888,
278
+ color: Union[str, None] = None,
254
279
  ) -> List[Tuple]:
255
280
  """Generate a list of RGBA colors from a specified colormap or use a direct color string.
256
281
 
@@ -258,19 +283,20 @@ def _get_colors(
258
283
  num_colors_to_generate (int): The number of colors to generate. Defaults to 10.
259
284
  cmap (str): The name of the colormap to use. Defaults to "hsv".
260
285
  random_seed (int): Seed for random number generation. Defaults to 888.
261
- **kwargs: Additional keyword arguments, such as 'color' for a specific color.
286
+ color (str, optional): Specific color to use for all nodes. If specified, it will overwrite the colormap.
287
+ Defaults to None.
262
288
 
263
289
  Returns:
264
290
  list of tuple: List of RGBA colors.
265
291
  """
266
292
  # Set random seed for reproducibility
267
293
  random.seed(random_seed)
268
- if kwargs.get("color"):
269
- # If a direct color string is provided, generate a list with that color
270
- rgba = matplotlib.colors.to_rgba(kwargs["color"])
294
+ if color:
295
+ # If a direct color is provided, generate a list with that color
296
+ rgba = matplotlib.colors.to_rgba(color)
271
297
  rgbas = [rgba] * num_colors_to_generate
272
298
  else:
273
- colormap = cm.get_cmap(cmap)
299
+ colormap = matplotlib.colormaps.get_cmap(cmap)
274
300
  # Generate evenly distributed color positions
275
301
  color_positions = np.linspace(0, 1, num_colors_to_generate)
276
302
  random.shuffle(color_positions) # Shuffle the positions to randomize colors
risk/network/plot.py CHANGED
@@ -33,6 +33,7 @@ class NetworkPlotter:
33
33
  plot_outline: bool = True,
34
34
  outline_color: str = "black",
35
35
  outline_scale: float = 1.0,
36
+ linestyle: str = "dashed",
36
37
  ) -> None:
37
38
  """Initialize the NetworkPlotter with a NetworkGraph object and plotting parameters.
38
39
 
@@ -43,11 +44,18 @@ class NetworkPlotter:
43
44
  plot_outline (bool, optional): Whether to plot the network perimeter circle. Defaults to True.
44
45
  outline_color (str, optional): Color of the network perimeter circle. Defaults to "black".
45
46
  outline_scale (float, optional): Outline scaling factor for the perimeter diameter. Defaults to 1.0.
47
+ linestyle (str): Line style for the network perimeter circle (e.g., dashed, solid). Defaults to "dashed".
46
48
  """
47
49
  self.graph = graph
48
50
  # Initialize the plot with the specified parameters
49
51
  self.ax = self._initialize_plot(
50
- graph, figsize, background_color, plot_outline, outline_color, outline_scale
52
+ graph,
53
+ figsize,
54
+ background_color,
55
+ plot_outline,
56
+ outline_color,
57
+ outline_scale,
58
+ linestyle,
51
59
  )
52
60
 
53
61
  def _initialize_plot(
@@ -58,6 +66,7 @@ class NetworkPlotter:
58
66
  plot_outline: bool,
59
67
  outline_color: str,
60
68
  outline_scale: float,
69
+ linestyle: str,
61
70
  ) -> plt.Axes:
62
71
  """Set up the plot with figure size, optional circle perimeter, and background color.
63
72
 
@@ -68,6 +77,7 @@ class NetworkPlotter:
68
77
  plot_outline (bool): Whether to plot the network perimeter circle.
69
78
  outline_color (str): Color of the network perimeter circle.
70
79
  outline_scale (float): Outline scaling factor for the perimeter diameter.
80
+ linestyle (str): Line style for the network perimeter circle (e.g., dashed, solid).
71
81
 
72
82
  Returns:
73
83
  plt.Axes: The axis object for the plot.
@@ -87,7 +97,7 @@ class NetworkPlotter:
87
97
  circle = plt.Circle(
88
98
  center,
89
99
  scaled_radius,
90
- linestyle="--",
100
+ linestyle=linestyle, # Use the linestyle argument here
91
101
  color=outline_color,
92
102
  fill=False,
93
103
  linewidth=1.5,
@@ -403,6 +413,8 @@ class NetworkPlotter:
403
413
  max_labels: Union[int, None] = None,
404
414
  max_words: int = 10,
405
415
  min_words: int = 1,
416
+ max_word_length: int = 20,
417
+ min_word_length: int = 1,
406
418
  words_to_omit: Union[List[str], None] = None,
407
419
  ) -> None:
408
420
  """Annotate the network graph with labels for different domains, positioned around the network for clarity.
@@ -418,6 +430,8 @@ class NetworkPlotter:
418
430
  max_labels (int, optional): Maximum number of labels to plot. Defaults to None (no limit).
419
431
  max_words (int, optional): Maximum number of words in a label. Defaults to 10.
420
432
  min_words (int, optional): Minimum number of words required to display a label. Defaults to 1.
433
+ max_word_length (int, optional): Maximum number of characters in a word to display. Defaults to 20.
434
+ min_word_length (int, optional): Minimum number of characters in a word to display. Defaults to 1.
421
435
  words_to_omit (List[str], optional): List of words to omit from the labels. Defaults to None.
422
436
  """
423
437
  # Log the plotting parameters
@@ -432,7 +446,9 @@ class NetworkPlotter:
432
446
  label_max_labels=max_labels,
433
447
  label_max_words=max_words,
434
448
  label_min_words=min_words,
435
- label_words_to_omit=words_to_omit, # Log words_to_omit parameter
449
+ label_max_word_length=max_word_length,
450
+ label_min_word_length=min_word_length,
451
+ label_words_to_omit=words_to_omit,
436
452
  )
437
453
 
438
454
  # Convert color strings to RGBA arrays if necessary
@@ -461,21 +477,24 @@ class NetworkPlotter:
461
477
  # Remove words_to_omit
462
478
  if words_to_omit:
463
479
  terms = [term for term in terms if term.lower() not in words_to_omit]
480
+ # Filter words based on length
481
+ terms = [term for term in terms if min_word_length <= len(term) <= max_word_length]
464
482
  # Trim to max_words
465
483
  terms = terms[:max_words]
466
484
  # Check if the domain passes the word count condition
467
485
  if len(terms) >= min_words:
468
486
  # Add to filtered_domain_centroids
469
487
  filtered_domain_centroids[domain] = centroid
470
- # Store the trimmed terms
488
+ # Store the filtered and trimmed terms
471
489
  filtered_domain_terms[domain] = " ".join(terms)
472
- # Keep track of the valid index
490
+ # Keep track of the valid index - used for fontcolor and arrow_color
473
491
  valid_indices.append(idx)
474
492
 
475
493
  # If max_labels is specified and less than the available labels
476
494
  if max_labels is not None and max_labels < len(filtered_domain_centroids):
477
495
  step = len(filtered_domain_centroids) / max_labels
478
496
  selected_indices = [int(i * step) for i in range(max_labels)]
497
+ # Filter the centroids, terms, and valid_indices to only use the selected indices
479
498
  filtered_domain_centroids = {
480
499
  k: v
481
500
  for i, (k, v) in enumerate(filtered_domain_centroids.items())
@@ -486,25 +505,21 @@ class NetworkPlotter:
486
505
  for i, (k, v) in enumerate(filtered_domain_terms.items())
487
506
  if i in selected_indices
488
507
  }
489
- fontcolor = fontcolor[selected_indices]
490
- arrow_color = arrow_color[selected_indices]
491
-
492
- # Update the terms in the graph after omitting words and filtering
493
- for domain, terms in filtered_domain_terms.items():
494
- self.graph.trimmed_domain_to_term[domain] = terms
508
+ # Update valid_indices to match selected indices
509
+ valid_indices = [valid_indices[i] for i in selected_indices]
495
510
 
496
511
  # Calculate the bounding box around the network
497
512
  center, radius = _calculate_bounding_box(
498
513
  self.graph.node_coordinates, radius_margin=perimeter_scale
499
514
  )
500
515
  # Calculate the best positions for labels around the perimeter
501
- best_label_positions = _best_label_positions(
516
+ best_label_positions = _calculate_best_label_positions(
502
517
  filtered_domain_centroids, center, radius, offset
503
518
  )
504
- # Annotate the network with labels
505
- for idx, (domain, pos) in enumerate(best_label_positions.items()):
519
+ # Annotate the network with labels - valid_indices is used for fontcolor and arrow_color
520
+ for idx, (domain, pos) in zip(valid_indices, best_label_positions.items()):
506
521
  centroid = filtered_domain_centroids[domain]
507
- annotations = self.graph.trimmed_domain_to_term[domain].split(" ")[:max_words]
522
+ annotations = filtered_domain_terms[domain].split(" ")[:max_words]
508
523
  self.ax.annotate(
509
524
  "\n".join(annotations),
510
525
  xy=centroid,
@@ -781,7 +796,7 @@ def _calculate_bounding_box(
781
796
  return center, radius
782
797
 
783
798
 
784
- def _best_label_positions(
799
+ def _calculate_best_label_positions(
785
800
  filtered_domain_centroids: Dict[str, Any], center: np.ndarray, radius: float, offset: float
786
801
  ) -> Dict[str, Any]:
787
802
  """Calculate and optimize label positions for clarity.
@@ -797,7 +812,9 @@ def _best_label_positions(
797
812
  """
798
813
  num_domains = len(filtered_domain_centroids)
799
814
  # Calculate equidistant positions around the center for initial label placement
800
- equidistant_positions = _equidistant_angles_around_center(center, radius, offset, num_domains)
815
+ equidistant_positions = _calculate_equidistant_positions_around_center(
816
+ center, radius, offset, num_domains
817
+ )
801
818
  # Create a mapping of domains to their initial label positions
802
819
  label_positions = {
803
820
  domain: position
@@ -807,7 +824,7 @@ def _best_label_positions(
807
824
  return _optimize_label_positions(label_positions, filtered_domain_centroids)
808
825
 
809
826
 
810
- def _equidistant_angles_around_center(
827
+ def _calculate_equidistant_positions_around_center(
811
828
  center: np.ndarray, radius: float, label_offset: float, num_domains: int
812
829
  ) -> List[np.ndarray]:
813
830
  """Calculate positions around a center at equidistant angles.
risk/risk.py CHANGED
@@ -352,6 +352,7 @@ class RISK(NetworkIO, AnnotationsIO):
352
352
  plot_outline: bool = True,
353
353
  outline_color: str = "black",
354
354
  outline_scale: float = 1.00,
355
+ linestyle: str = "dashed",
355
356
  ) -> NetworkPlotter:
356
357
  """Get a NetworkPlotter object for plotting.
357
358
 
@@ -362,6 +363,7 @@ class RISK(NetworkIO, AnnotationsIO):
362
363
  plot_outline (bool, optional): Whether to plot the network outline. Defaults to True.
363
364
  outline_color (str, optional): Color of the outline. Defaults to "black".
364
365
  outline_scale (float, optional): Scaling factor for the outline. Defaults to 1.00.
366
+ linestyle (str): Line style for the network perimeter circle (e.g., dashed, solid). Defaults to "dashed".
365
367
 
366
368
  Returns:
367
369
  NetworkPlotter: A NetworkPlotter object configured with the given parameters.
@@ -374,6 +376,7 @@ class RISK(NetworkIO, AnnotationsIO):
374
376
  plot_outline=plot_outline,
375
377
  outline_color=outline_color,
376
378
  outline_scale=outline_scale,
379
+ linestyle=linestyle,
377
380
  )
378
381
 
379
382
  # Initialize and return a NetworkPlotter object
@@ -384,6 +387,7 @@ class RISK(NetworkIO, AnnotationsIO):
384
387
  plot_outline=plot_outline,
385
388
  outline_color=outline_color,
386
389
  outline_scale=outline_scale,
390
+ linestyle=linestyle,
387
391
  )
388
392
 
389
393
  def _load_neighborhoods(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: risk-network
3
- Version: 0.0.4b3
3
+ Version: 0.0.5
4
4
  Summary: A Python package for biological network analysis
5
5
  Author: Ira Horecka
6
6
  Author-email: Ira Horecka <ira89@icloud.com>
@@ -710,8 +710,7 @@ Requires-Dist: threadpoolctl
710
710
  Requires-Dist: tqdm
711
711
 
712
712
  <p align="center">
713
- <img src="./docs/github/risk-logo-dark.png#gh-dark-mode-only" width="400" />
714
- <img src="./docs/github/risk-logo-light.png#gh-light-mode-only" width="400" />
713
+ <img src="https://i.imgur.com/Fo9EmnK.png" width="400" />
715
714
  </p>
716
715
 
717
716
  <p align="center">
@@ -736,7 +735,7 @@ RISK is a software tool for visualizing spatial relationships in networks. It ai
736
735
 
737
736
  *Saccharomyces cerevisiae* proteins oriented by physical interactions discovered through affinity enrichment and mass spectrometry (Michaelis et al., 2023).
738
737
 
739
- ![PPI Network Demo](./docs/github/network.png)
738
+ ![PPI Network Demo](https://i.imgur.com/NnyK6nO.png)
740
739
 
741
740
  ## Installation
742
741
 
@@ -1,8 +1,8 @@
1
- risk/__init__.py,sha256=h9TG0BQ8u5D9jZ6S4Hr0GsilUhb1gnrisxLtvMl2mbk,111
2
- risk/constants.py,sha256=AICk3x5qRQhls_ijTb4VdbdxU6mZ1aLGbAjLEdBwfJI,550
3
- risk/risk.py,sha256=4Y-fViqdK9gvxEjJRYsV_7gbN0kh7eiTwD8eesd_M6o,21109
1
+ risk/__init__.py,sha256=aDf9yXugc9MCQ0suSd-wQbWwg4zF277wV0GOTV_ZK00,105
2
+ risk/constants.py,sha256=XInRaH78Slnw_sWgAsBFbUHkyA0h0jL0DKGuQNbOvjM,550
3
+ risk/risk.py,sha256=UYM_Pf2Db-lbf4O5T2v5zKutz_GLXK-f43PgYT6xRyY,21328
4
4
  risk/annotations/__init__.py,sha256=vUpVvMRE5if01Ic8QY6M2Ae3EFGJHdugEe9PdEkAW4Y,138
5
- risk/annotations/annotations.py,sha256=t4aLwROCFHcqk8g-viuwkFG--HqVpVN_2yVVcjhg6wI,10534
5
+ risk/annotations/annotations.py,sha256=DRUTdGzMdqo62NWSapBUksbvPr9CrzD76qtOcxeNKmo,10554
6
6
  risk/annotations/io.py,sha256=TMicRACfY8bNtmbvVrxHoh8zkOVLOIhZwWrpxUlR28Q,7988
7
7
  risk/log/__init__.py,sha256=xuLImfxFlKpnVhzi_gDYlr2_c9cLkrw2c_3iEsXb1as,107
8
8
  risk/log/console.py,sha256=im9DRExwf6wHlcn9fewoDcKIpo3vPcorZIaNAl-0csY,355
@@ -13,9 +13,9 @@ risk/neighborhoods/domains.py,sha256=HwuChmZH0RGD9eQOvk2-ezQDJRUHHn93vhVgHb-kX6I
13
13
  risk/neighborhoods/neighborhoods.py,sha256=SqYJaT49rUj77ts0XsPXb9cURM11aGh2Teks0nBH_4s,13939
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=m3bFWU5528OEm246LPG5XP3l_30vaBiJv4AO4iq0pSA,11552
16
+ risk/network/graph.py,sha256=DTjNRQwgQbt6jJYDBHm7sgrdbZUDLL4HiZpdixkSI7Y,12433
17
17
  risk/network/io.py,sha256=otiRG6uT6HLgbbJql7X2wjYxab8OFJSgRoWJlcDoyu4,20291
18
- risk/network/plot.py,sha256=yGmuQXcju2cWUcyJJALtNmIPPCFS2yusULJXka8263I,40080
18
+ risk/network/plot.py,sha256=XB-fH67SqIm3bonFj_UvbO85725Zp1z0Ug6LblDEUYo,41062
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.4b3.dist-info/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
27
- risk_network-0.0.4b3.dist-info/METADATA,sha256=yjXG21NrHagGZgVl-T1ySHLGsItvM4xBH9j9xiQGGJ4,43236
28
- risk_network-0.0.4b3.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
29
- risk_network-0.0.4b3.dist-info/top_level.txt,sha256=NX7C2PFKTvC1JhVKv14DFlFAIFnKc6Lpsu1ZfxvQwVw,5
30
- risk_network-0.0.4b3.dist-info/RECORD,,
26
+ risk_network-0.0.5.dist-info/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
27
+ risk_network-0.0.5.dist-info/METADATA,sha256=zO98BlU9WGYF8d3UoRIrNirRKKn_LY9Axwhe72DD0IE,43140
28
+ risk_network-0.0.5.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
29
+ risk_network-0.0.5.dist-info/top_level.txt,sha256=NX7C2PFKTvC1JhVKv14DFlFAIFnKc6Lpsu1ZfxvQwVw,5
30
+ risk_network-0.0.5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.0.0)
2
+ Generator: setuptools (74.1.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5