risk-network 0.0.6b5__py3-none-any.whl → 0.0.6b7__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.5"
10
+ __version__ = "0.0.6-beta.7"
risk/network/plot.py CHANGED
@@ -274,7 +274,7 @@ class NetworkPlotter:
274
274
 
275
275
  def plot_subnetwork(
276
276
  self,
277
- nodes: List,
277
+ nodes: Union[List, Tuple, np.ndarray],
278
278
  node_size: Union[int, np.ndarray] = 50,
279
279
  node_shape: str = "o",
280
280
  node_edgewidth: float = 1.0,
@@ -288,20 +288,24 @@ class NetworkPlotter:
288
288
  """Plot a subnetwork of selected nodes with customizable node and edge attributes.
289
289
 
290
290
  Args:
291
- nodes (list): List of node labels to include in the subnetwork.
291
+ nodes (list, tuple, or np.ndarray): List of node labels to include in the subnetwork. Accepts nested lists.
292
292
  node_size (int or np.ndarray, optional): Size of the nodes. Can be a single integer or an array of sizes. Defaults to 50.
293
293
  node_shape (str, optional): Shape of the nodes. Defaults to "o".
294
294
  node_edgewidth (float, optional): Width of the node edges. Defaults to 1.0.
295
295
  edge_width (float, optional): Width of the edges. Defaults to 1.0.
296
- node_color (str, list, tuple, or np.ndarray, optional): Color of the nodes. Can be a single color or an array of colors. Defaults to "white".
296
+ node_color (str, list, tuple, or np.ndarray, optional): Color of the nodes. Defaults to "white".
297
297
  node_edgecolor (str, list, tuple, or np.ndarray, optional): Color of the node edges. Defaults to "black".
298
298
  edge_color (str, list, tuple, or np.ndarray, optional): Color of the edges. Defaults to "black".
299
- node_alpha (float, optional): Alpha value (transparency) for the nodes. Defaults to 1.0.
300
- edge_alpha (float, optional): Alpha value (transparency) for the edges. Defaults to 1.0.
299
+ node_alpha (float, optional): Transparency for the nodes. Defaults to 1.0.
300
+ edge_alpha (float, optional): Transparency for the edges. Defaults to 1.0.
301
301
 
302
302
  Raises:
303
303
  ValueError: If no valid nodes are found in the network graph.
304
304
  """
305
+ # Flatten nested lists of nodes, if necessary
306
+ if any(isinstance(item, (list, tuple, np.ndarray)) for item in nodes):
307
+ nodes = [node for sublist in nodes for node in sublist]
308
+
305
309
  # Filter to get node IDs and their coordinates
306
310
  node_ids = [
307
311
  self.graph.node_label_to_id_map.get(node)
@@ -407,7 +411,7 @@ class NetworkPlotter:
407
411
 
408
412
  def plot_subcontour(
409
413
  self,
410
- nodes: List,
414
+ nodes: Union[List, Tuple, np.ndarray],
411
415
  levels: int = 5,
412
416
  bandwidth: float = 0.8,
413
417
  grid_size: int = 250,
@@ -417,10 +421,10 @@ class NetworkPlotter:
417
421
  alpha: float = 1.0,
418
422
  fill_alpha: float = 0.2,
419
423
  ) -> None:
420
- """Plot a subcontour for a given set of nodes using Kernel Density Estimation (KDE).
424
+ """Plot a subcontour for a given set of nodes or a list of node sets using Kernel Density Estimation (KDE).
421
425
 
422
426
  Args:
423
- nodes (list): List of node labels to plot the contour for.
427
+ nodes (list, tuple, or np.ndarray): List of node labels or list of lists of node labels to plot the contour for.
424
428
  levels (int, optional): Number of contour levels to plot. Defaults to 5.
425
429
  bandwidth (float, optional): Bandwidth for KDE. Controls the smoothness of the contour. Defaults to 0.8.
426
430
  grid_size (int, optional): Resolution of the grid for KDE. Higher values create finer contours. Defaults to 250.
@@ -433,33 +437,45 @@ class NetworkPlotter:
433
437
  Raises:
434
438
  ValueError: If no valid nodes are found in the network graph.
435
439
  """
436
- # Don't log subcontour parameters as they are specific to individual annotations
437
- # Filter to get node IDs and their coordinates
438
- node_ids = [
439
- self.graph.node_label_to_id_map.get(node)
440
- for node in nodes
441
- if node in self.graph.node_label_to_id_map
442
- ]
443
- if not node_ids or len(node_ids) == 1:
444
- raise ValueError("No nodes found in the network graph or insufficient nodes to plot.")
440
+ # Check if nodes is a list of lists or a flat list
441
+ if any(isinstance(item, (list, tuple, np.ndarray)) for item in nodes):
442
+ # If it's a list of lists, iterate over sublists
443
+ node_groups = nodes
444
+ else:
445
+ # If it's a flat list of nodes, treat it as a single group
446
+ node_groups = [nodes]
445
447
 
446
448
  # Convert color to RGBA using the _to_rgba helper function
447
- color = _to_rgba(color, alpha)
448
- # Draw the KDE contour for the specified nodes
449
- node_coordinates = self.graph.node_coordinates
450
- self._draw_kde_contour(
451
- self.ax,
452
- node_coordinates,
453
- node_ids,
454
- color=color,
455
- levels=levels,
456
- bandwidth=bandwidth,
457
- grid_size=grid_size,
458
- linestyle=linestyle,
459
- linewidth=linewidth,
460
- alpha=alpha,
461
- fill_alpha=fill_alpha,
462
- )
449
+ color_rgba = _to_rgba(color, alpha)
450
+
451
+ # Iterate over each group of nodes (either sublists or flat list)
452
+ for sublist in node_groups:
453
+ # Filter to get node IDs and their coordinates for each sublist
454
+ node_ids = [
455
+ self.graph.node_label_to_id_map.get(node)
456
+ for node in sublist
457
+ if node in self.graph.node_label_to_id_map
458
+ ]
459
+ if not node_ids or len(node_ids) == 1:
460
+ raise ValueError(
461
+ "No nodes found in the network graph or insufficient nodes to plot."
462
+ )
463
+
464
+ # Draw the KDE contour for the specified nodes
465
+ node_coordinates = self.graph.node_coordinates
466
+ self._draw_kde_contour(
467
+ self.ax,
468
+ node_coordinates,
469
+ node_ids,
470
+ color=color_rgba,
471
+ levels=levels,
472
+ bandwidth=bandwidth,
473
+ grid_size=grid_size,
474
+ linestyle=linestyle,
475
+ linewidth=linewidth,
476
+ alpha=alpha,
477
+ fill_alpha=fill_alpha,
478
+ )
463
479
 
464
480
  def _draw_kde_contour(
465
481
  self,
@@ -550,6 +566,7 @@ class NetworkPlotter:
550
566
  fontcolor: Union[str, List, Tuple, np.ndarray] = "black",
551
567
  fontalpha: float = 1.0,
552
568
  arrow_linewidth: float = 1,
569
+ arrow_style: str = "->",
553
570
  arrow_color: Union[str, List, Tuple, np.ndarray] = "black",
554
571
  arrow_alpha: float = 1.0,
555
572
  max_labels: Union[int, None] = None,
@@ -557,7 +574,10 @@ class NetworkPlotter:
557
574
  min_words: int = 1,
558
575
  max_word_length: int = 20,
559
576
  min_word_length: int = 1,
560
- words_to_omit: Union[List[str], None] = None,
577
+ words_to_omit: Union[List, None] = None,
578
+ overlay_ids: bool = False,
579
+ ids_to_keep: Union[List, Tuple, np.ndarray, None] = None,
580
+ ids_to_replace: Union[Dict, None] = None,
561
581
  ) -> None:
562
582
  """Annotate the network graph with labels for different domains, positioned around the network for clarity.
563
583
 
@@ -569,6 +589,7 @@ class NetworkPlotter:
569
589
  fontcolor (str, list, tuple, or np.ndarray, optional): Color of the label text. Can be a string or RGBA array. Defaults to "black".
570
590
  fontalpha (float, optional): Transparency level for the font color. Defaults to 1.0.
571
591
  arrow_linewidth (float, optional): Line width of the arrows pointing to centroids. Defaults to 1.
592
+ arrow_style (str, optional): Style of the arrows pointing to centroids. Defaults to "->".
572
593
  arrow_color (str, list, tuple, or np.ndarray, optional): Color of the arrows. Defaults to "black".
573
594
  arrow_alpha (float, optional): Transparency level for the arrow color. Defaults to 1.0.
574
595
  max_labels (int, optional): Maximum number of labels to plot. Defaults to None (no limit).
@@ -576,7 +597,16 @@ class NetworkPlotter:
576
597
  min_words (int, optional): Minimum number of words required to display a label. Defaults to 1.
577
598
  max_word_length (int, optional): Maximum number of characters in a word to display. Defaults to 20.
578
599
  min_word_length (int, optional): Minimum number of characters in a word to display. Defaults to 1.
579
- words_to_omit (List[str], optional): List of words to omit from the labels. Defaults to None.
600
+ words_to_omit (List, optional): List of words to omit from the labels. Defaults to None.
601
+ overlay_ids (bool, optional): Whether to overlay domain IDs in the center of the centroids. Defaults to False.
602
+ ids_to_keep (list, tuple, np.ndarray, or None, optional): IDs of domains that must be labeled. To discover domain IDs,
603
+ you can set `overlay_ids=True`. Defaults to None.
604
+ ids_to_replace (dict, optional): A dictionary mapping domain IDs to custom labels (strings). The labels should be space-separated words.
605
+ If provided, the custom labels will replace the default domain terms. To discover domain IDs, you can set `overlay_ids=True`.
606
+ Defaults to None.
607
+
608
+ Raises:
609
+ ValueError: If the number of provided `ids_to_keep` exceeds `max_labels`.
580
610
  """
581
611
  # Log the plotting parameters
582
612
  params.log_plotter(
@@ -589,6 +619,7 @@ class NetworkPlotter:
589
619
  ), # np.ndarray usually indicates custom colors
590
620
  label_fontalpha=fontalpha,
591
621
  label_arrow_linewidth=arrow_linewidth,
622
+ label_arrow_style=arrow_style,
592
623
  label_arrow_color="custom" if isinstance(arrow_color, np.ndarray) else arrow_color,
593
624
  label_arrow_alpha=arrow_alpha,
594
625
  label_max_labels=max_labels,
@@ -597,9 +628,16 @@ class NetworkPlotter:
597
628
  label_max_word_length=max_word_length,
598
629
  label_min_word_length=min_word_length,
599
630
  label_words_to_omit=words_to_omit,
631
+ label_overlay_ids=overlay_ids,
632
+ label_ids_to_keep=ids_to_keep,
633
+ label_ids_to_replace=ids_to_replace,
600
634
  )
601
635
 
602
- # Convert colors to RGBA using the _to_rgba helper function, applying alpha separately for font and arrow
636
+ # Set max_labels to the total number of domains if not provided (None)
637
+ if max_labels is None:
638
+ max_labels = len(self.graph.domain_to_nodes_map)
639
+
640
+ # Convert colors to RGBA using the _to_rgba helper function
603
641
  fontcolor = _to_rgba(fontcolor, fontalpha, num_repeats=len(self.graph.domain_to_nodes_map))
604
642
  arrow_color = _to_rgba(
605
643
  arrow_color, arrow_alpha, num_repeats=len(self.graph.domain_to_nodes_map)
@@ -615,55 +653,85 @@ class NetworkPlotter:
615
653
  if nodes: # Skip if the domain has no nodes
616
654
  domain_centroids[domain] = self._calculate_domain_centroid(nodes)
617
655
 
618
- # Initialize empty lists to collect valid indices
656
+ # Initialize dictionaries and lists for valid indices
619
657
  valid_indices = []
620
658
  filtered_domain_centroids = {}
621
659
  filtered_domain_terms = {}
622
- # Loop through domain_centroids with index
623
- for idx, (domain, centroid) in enumerate(domain_centroids.items()):
624
- # Process the domain term
625
- terms = self.graph.trimmed_domain_to_term[domain].split(" ")
626
- # Remove words_to_omit
627
- if words_to_omit:
628
- terms = [term for term in terms if term.lower() not in words_to_omit]
629
- # Filter words based on length
630
- terms = [term for term in terms if min_word_length <= len(term) <= max_word_length]
631
- # Trim to max_words
632
- terms = terms[:max_words]
633
- # Check if the domain passes the word count condition
634
- if len(terms) >= min_words:
635
- # Add to filtered_domain_centroids
636
- filtered_domain_centroids[domain] = centroid
637
- # Store the filtered and trimmed terms
638
- filtered_domain_terms[domain] = " ".join(terms)
639
- # Keep track of the valid index - used for fontcolor and arrow_color
640
- valid_indices.append(idx)
641
-
642
- # If max_labels is specified and less than the available labels
643
- if max_labels is not None and max_labels < len(filtered_domain_centroids):
644
- step = len(filtered_domain_centroids) / max_labels
645
- selected_indices = [int(i * step) for i in range(max_labels)]
646
- # Filter the centroids, terms, and valid_indices to only use the selected indices
647
- filtered_domain_centroids = {
648
- k: v
649
- for i, (k, v) in enumerate(filtered_domain_centroids.items())
650
- if i in selected_indices
651
- }
652
- filtered_domain_terms = {
653
- k: v
654
- for i, (k, v) in enumerate(filtered_domain_terms.items())
655
- if i in selected_indices
656
- }
657
- # Update valid_indices to match selected indices
658
- valid_indices = [valid_indices[i] for i in selected_indices]
660
+ # Handle the ids_to_keep logic
661
+ if ids_to_keep:
662
+ # Convert ids_to_keep to remove accidental duplicates
663
+ ids_to_keep = set(ids_to_keep)
664
+ # Check if the number of provided ids_to_keep exceeds max_labels
665
+ if max_labels is not None and len(ids_to_keep) > max_labels:
666
+ raise ValueError(
667
+ f"Number of provided IDs ({len(ids_to_keep)}) exceeds max_labels ({max_labels})."
668
+ )
669
+
670
+ # Process the specified IDs first
671
+ for domain in ids_to_keep:
672
+ if domain in self.graph.trimmed_domain_to_term and domain in domain_centroids:
673
+ # Handle ids_to_replace logic here for ids_to_keep
674
+ if ids_to_replace and domain in ids_to_replace:
675
+ terms = ids_to_replace[domain].split(" ")
676
+ else:
677
+ terms = self.graph.trimmed_domain_to_term[domain].split(" ")
678
+
679
+ # Apply words_to_omit, word length constraints, and max_words
680
+ if words_to_omit:
681
+ terms = [term for term in terms if term.lower() not in words_to_omit]
682
+ terms = [
683
+ term for term in terms if min_word_length <= len(term) <= max_word_length
684
+ ]
685
+ terms = terms[:max_words]
686
+
687
+ # Check if the domain passes the word count condition
688
+ if len(terms) >= min_words:
689
+ filtered_domain_centroids[domain] = domain_centroids[domain]
690
+ filtered_domain_terms[domain] = " ".join(terms)
691
+ valid_indices.append(
692
+ list(domain_centroids.keys()).index(domain)
693
+ ) # Track the valid index
694
+
695
+ # Calculate remaining labels to plot after processing ids_to_keep
696
+ remaining_labels = (
697
+ max_labels - len(ids_to_keep) if ids_to_keep and max_labels else max_labels
698
+ )
699
+ # Process remaining domains to fill in additional labels, if there are slots left
700
+ if remaining_labels and remaining_labels > 0:
701
+ for idx, (domain, centroid) in enumerate(domain_centroids.items()):
702
+ if ids_to_keep and domain in ids_to_keep:
703
+ continue # Skip domains already handled by ids_to_keep
704
+
705
+ # Handle ids_to_replace logic first
706
+ if ids_to_replace and domain in ids_to_replace:
707
+ terms = ids_to_replace[domain].split(" ")
708
+ else:
709
+ terms = self.graph.trimmed_domain_to_term[domain].split(" ")
710
+
711
+ # Apply words_to_omit, word length constraints, and max_words
712
+ if words_to_omit:
713
+ terms = [term for term in terms if term.lower() not in words_to_omit]
714
+
715
+ terms = [term for term in terms if min_word_length <= len(term) <= max_word_length]
716
+ terms = terms[:max_words]
717
+ # Check if the domain passes the word count condition
718
+ if len(terms) >= min_words:
719
+ filtered_domain_centroids[domain] = centroid
720
+ filtered_domain_terms[domain] = " ".join(terms)
721
+ valid_indices.append(idx) # Track the valid index
722
+
723
+ # Stop once we've reached the max_labels limit
724
+ if len(filtered_domain_centroids) >= max_labels:
725
+ break
659
726
 
660
727
  # Calculate the bounding box around the network
661
728
  center, radius = _calculate_bounding_box(self.graph.node_coordinates, radius_margin=scale)
662
- # Calculate the best positions for labels around the perimeter
729
+ # Calculate the best positions for labels
663
730
  best_label_positions = _calculate_best_label_positions(
664
731
  filtered_domain_centroids, center, radius, offset
665
732
  )
666
- # Annotate the network with labels - valid_indices is used for fontcolor and arrow_color
733
+
734
+ # Annotate the network with labels
667
735
  for idx, (domain, pos) in zip(valid_indices, best_label_positions.items()):
668
736
  centroid = filtered_domain_centroids[domain]
669
737
  annotations = filtered_domain_terms[domain].split(" ")[:max_words]
@@ -677,12 +745,27 @@ class NetworkPlotter:
677
745
  fontsize=fontsize,
678
746
  fontname=font,
679
747
  color=fontcolor[idx],
680
- arrowprops=dict(arrowstyle="->", color=arrow_color[idx], linewidth=arrow_linewidth),
748
+ arrowprops=dict(
749
+ arrowstyle=arrow_style, color=arrow_color[idx], linewidth=arrow_linewidth
750
+ ),
681
751
  )
752
+ # Overlay domain ID at the centroid if requested
753
+ if overlay_ids:
754
+ self.ax.text(
755
+ centroid[0],
756
+ centroid[1],
757
+ domain,
758
+ ha="center",
759
+ va="center",
760
+ fontsize=fontsize,
761
+ fontname=font,
762
+ color=fontcolor[idx],
763
+ alpha=fontalpha,
764
+ )
682
765
 
683
766
  def plot_sublabel(
684
767
  self,
685
- nodes: List,
768
+ nodes: Union[List, Tuple, np.ndarray],
686
769
  label: str,
687
770
  radial_position: float = 0.0,
688
771
  scale: float = 1.05,
@@ -692,13 +775,14 @@ class NetworkPlotter:
692
775
  fontcolor: Union[str, List, Tuple, np.ndarray] = "black",
693
776
  fontalpha: float = 1.0,
694
777
  arrow_linewidth: float = 1,
778
+ arrow_style: str = "->",
695
779
  arrow_color: Union[str, List, Tuple, np.ndarray] = "black",
696
780
  arrow_alpha: float = 1.0,
697
781
  ) -> None:
698
- """Annotate the network graph with a single label for the given nodes, positioned at a specified radial angle.
782
+ """Annotate the network graph with a label for the given nodes, with one arrow pointing to each centroid of sublists of nodes.
699
783
 
700
784
  Args:
701
- nodes (List[str]): List of node labels to be used for calculating the centroid.
785
+ nodes (list, tuple, or np.ndarray): List of node labels or list of lists of node labels.
702
786
  label (str): The label to be annotated on the network.
703
787
  radial_position (float, optional): Radial angle for positioning the label, in degrees (0-360). Defaults to 0.0.
704
788
  scale (float, optional): Scale factor for positioning the label around the perimeter. Defaults to 1.05.
@@ -708,24 +792,22 @@ class NetworkPlotter:
708
792
  fontcolor (str, list, tuple, or np.ndarray, optional): Color of the label text. Defaults to "black".
709
793
  fontalpha (float, optional): Transparency level for the font color. Defaults to 1.0.
710
794
  arrow_linewidth (float, optional): Line width of the arrow pointing to the centroid. Defaults to 1.
795
+ arrow_style (str, optional): Style of the arrows pointing to the centroid. Defaults to "->".
711
796
  arrow_color (str, list, tuple, or np.ndarray, optional): Color of the arrow. Defaults to "black".
712
797
  arrow_alpha (float, optional): Transparency level for the arrow color. Defaults to 1.0.
713
798
  """
714
- # Don't log sublabel parameters as they are specific to individual annotations
715
- # Map node labels to IDs
716
- node_ids = [
717
- self.graph.node_label_to_id_map.get(node)
718
- for node in nodes
719
- if node in self.graph.node_label_to_id_map
720
- ]
721
- if not node_ids or len(node_ids) == 1:
722
- raise ValueError("No nodes found in the network graph or insufficient nodes to plot.")
723
-
724
- # Convert fontcolor and arrow_color to RGBA using the _to_rgba helper function
725
- fontcolor = _to_rgba(fontcolor, fontalpha)
726
- arrow_color = _to_rgba(arrow_color, arrow_alpha)
727
- # Calculate the centroid of the provided nodes
728
- centroid = self._calculate_domain_centroid(node_ids)
799
+ # Check if nodes is a list of lists or a flat list
800
+ if any(isinstance(item, (list, tuple, np.ndarray)) for item in nodes):
801
+ # If it's a list of lists, iterate over sublists
802
+ node_groups = nodes
803
+ else:
804
+ # If it's a flat list of nodes, treat it as a single group
805
+ node_groups = [nodes]
806
+
807
+ # Convert fontcolor and arrow_color to RGBA
808
+ fontcolor_rgba = _to_rgba(fontcolor, fontalpha)
809
+ arrow_color_rgba = _to_rgba(arrow_color, arrow_alpha)
810
+
729
811
  # Calculate the bounding box around the network
730
812
  center, radius = _calculate_bounding_box(self.graph.node_coordinates, radius_margin=scale)
731
813
  # Convert radial position to radians, adjusting for a 90-degree rotation
@@ -735,19 +817,36 @@ class NetworkPlotter:
735
817
  center[1] + (radius + offset) * np.sin(radial_radians),
736
818
  )
737
819
 
738
- # Annotate the network with the label
739
- self.ax.annotate(
740
- label,
741
- xy=centroid,
742
- xytext=label_position,
743
- textcoords="data",
744
- ha="center",
745
- va="center",
746
- fontsize=fontsize,
747
- fontname=font,
748
- color=fontcolor,
749
- arrowprops=dict(arrowstyle="->", color=arrow_color, linewidth=arrow_linewidth),
750
- )
820
+ # Iterate over each group of nodes (either sublists or flat list)
821
+ for sublist in node_groups:
822
+ # Map node labels to IDs
823
+ node_ids = [
824
+ self.graph.node_label_to_id_map.get(node)
825
+ for node in sublist
826
+ if node in self.graph.node_label_to_id_map
827
+ ]
828
+ if not node_ids or len(node_ids) == 1:
829
+ raise ValueError(
830
+ "No nodes found in the network graph or insufficient nodes to plot."
831
+ )
832
+
833
+ # Calculate the centroid of the provided nodes in this sublist
834
+ centroid = self._calculate_domain_centroid(node_ids)
835
+ # Annotate the network with the label and an arrow pointing to each centroid
836
+ self.ax.annotate(
837
+ label,
838
+ xy=centroid,
839
+ xytext=label_position,
840
+ textcoords="data",
841
+ ha="center",
842
+ va="center",
843
+ fontsize=fontsize,
844
+ fontname=font,
845
+ color=fontcolor_rgba,
846
+ arrowprops=dict(
847
+ arrowstyle=arrow_style, color=arrow_color_rgba, linewidth=arrow_linewidth
848
+ ),
849
+ )
751
850
 
752
851
  def _calculate_domain_centroid(self, nodes: List) -> tuple:
753
852
  """Calculate the most centrally located node in .
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: risk-network
3
- Version: 0.0.6b5
3
+ Version: 0.0.6b7
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,4 +1,4 @@
1
- risk/__init__.py,sha256=jf5xP5gj27WAK2wVj_hGCCzypgykcOCBS7791xT2wDA,112
1
+ risk/__init__.py,sha256=DLDQBVlM5oYOp-S9i1GDq-rRwaNv1dutx241xcHbK3w,112
2
2
  risk/constants.py,sha256=XInRaH78Slnw_sWgAsBFbUHkyA0h0jL0DKGuQNbOvjM,550
3
3
  risk/risk.py,sha256=PONl5tzN5DSVUf4MgczfOvzGV-5JoAOLTQ6YWl10mZ8,20697
4
4
  risk/annotations/__init__.py,sha256=vUpVvMRE5if01Ic8QY6M2Ae3EFGJHdugEe9PdEkAW4Y,138
@@ -15,7 +15,7 @@ risk/network/__init__.py,sha256=iEPeJdZfqp0toxtbElryB8jbz9_t_k4QQ3iDvKE8C_0,126
15
15
  risk/network/geometry.py,sha256=H1yGVVqgbfpzBzJwEheDLfvGLSA284jGQQTn612L4Vc,6759
16
16
  risk/network/graph.py,sha256=scPFQIJjioup1FjQLyxNrAB17RmskY9MmvoFHrMlqNI,13135
17
17
  risk/network/io.py,sha256=gG50kOknO-D3HkW1HsbHMkTMvjUtn3l4W4Jwd-rXNr8,21202
18
- risk/network/plot.py,sha256=j9e_9kV5VMMpsBwtIx_QqlUJnFHXIFlnO8RLWqNiEog,55852
18
+ risk/network/plot.py,sha256=4zcFJWZgGrj7AG1crRuwGpzzjjHXjQ8Eh5VjlkOQblE,60747
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.6b5.dist-info/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
27
- risk_network-0.0.6b5.dist-info/METADATA,sha256=CNH8nImHfKqJCbvwEApq9r4qIaf2tV8HRU179Jj6njU,43142
28
- risk_network-0.0.6b5.dist-info/WHEEL,sha256=cVxcB9AmuTcXqmwrtPhNK88dr7IR_b6qagTj0UvIEbY,91
29
- risk_network-0.0.6b5.dist-info/top_level.txt,sha256=NX7C2PFKTvC1JhVKv14DFlFAIFnKc6Lpsu1ZfxvQwVw,5
30
- risk_network-0.0.6b5.dist-info/RECORD,,
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,,