napistu 0.3.3__tar.gz → 0.3.5__tar.gz

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.
Files changed (141) hide show
  1. {napistu-0.3.3 → napistu-0.3.5}/PKG-INFO +2 -2
  2. {napistu-0.3.3 → napistu-0.3.5}/setup.cfg +2 -2
  3. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/constants.py +4 -10
  4. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/ig_utils.py +35 -0
  5. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/precompute.py +11 -4
  6. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/sbml_dfs_core.py +748 -543
  7. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/source.py +1 -1
  8. {napistu-0.3.3 → napistu-0.3.5}/src/napistu.egg-info/PKG-INFO +2 -2
  9. {napistu-0.3.3 → napistu-0.3.5}/src/napistu.egg-info/requires.txt +1 -1
  10. napistu-0.3.5/src/tests/test_network_ig_utils.py +59 -0
  11. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_network_precompute.py +4 -1
  12. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_sbml_dfs_core.py +220 -1
  13. napistu-0.3.5/src/tests/test_sbml_dfs_utils.py +63 -0
  14. napistu-0.3.3/src/tests/test_network_ig_utils.py +0 -23
  15. napistu-0.3.3/src/tests/test_sbml_dfs_utils.py +0 -22
  16. {napistu-0.3.3 → napistu-0.3.5}/LICENSE +0 -0
  17. {napistu-0.3.3 → napistu-0.3.5}/README.md +0 -0
  18. {napistu-0.3.3 → napistu-0.3.5}/pyproject.toml +0 -0
  19. {napistu-0.3.3 → napistu-0.3.5}/setup.py +0 -0
  20. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/__init__.py +0 -0
  21. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/__main__.py +0 -0
  22. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/consensus.py +0 -0
  23. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/context/__init__.py +0 -0
  24. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/context/discretize.py +0 -0
  25. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/context/filtering.py +0 -0
  26. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/gcs/__init__.py +0 -0
  27. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/gcs/constants.py +0 -0
  28. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/gcs/downloads.py +0 -0
  29. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/gcs/utils.py +0 -0
  30. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/identifiers.py +0 -0
  31. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/indices.py +0 -0
  32. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/__init__.py +0 -0
  33. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/bigg.py +0 -0
  34. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/constants.py +0 -0
  35. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/gtex.py +0 -0
  36. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/hpa.py +0 -0
  37. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/identifiers_etl.py +0 -0
  38. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/napistu_edgelist.py +0 -0
  39. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/obo.py +0 -0
  40. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/psi_mi.py +0 -0
  41. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/reactome.py +0 -0
  42. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/sbml.py +0 -0
  43. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/string.py +0 -0
  44. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/trrust.py +0 -0
  45. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ingestion/yeast.py +0 -0
  46. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/matching/__init__.py +0 -0
  47. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/matching/constants.py +0 -0
  48. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/matching/interactions.py +0 -0
  49. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/matching/mount.py +0 -0
  50. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/matching/species.py +0 -0
  51. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/__init__.py +0 -0
  52. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/__main__.py +0 -0
  53. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/client.py +0 -0
  54. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/codebase.py +0 -0
  55. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/codebase_utils.py +0 -0
  56. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/component_base.py +0 -0
  57. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/config.py +0 -0
  58. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/constants.py +0 -0
  59. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/documentation.py +0 -0
  60. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/documentation_utils.py +0 -0
  61. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/execution.py +0 -0
  62. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/health.py +0 -0
  63. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/profiles.py +0 -0
  64. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/server.py +0 -0
  65. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/tutorials.py +0 -0
  66. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/tutorials_utils.py +0 -0
  67. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/mcp/utils.py +0 -0
  68. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/modify/__init__.py +0 -0
  69. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/modify/constants.py +0 -0
  70. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/modify/curation.py +0 -0
  71. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/modify/gaps.py +0 -0
  72. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/modify/pathwayannot.py +0 -0
  73. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/modify/uncompartmentalize.py +0 -0
  74. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/__init__.py +0 -0
  75. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/constants.py +0 -0
  76. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/data_handling.py +0 -0
  77. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/napistu_graph_core.py +0 -0
  78. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/neighborhoods.py +0 -0
  79. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/net_create.py +0 -0
  80. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/net_propagation.py +0 -0
  81. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/ng_utils.py +0 -0
  82. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/network/paths.py +0 -0
  83. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ontologies/__init__.py +0 -0
  84. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ontologies/constants.py +0 -0
  85. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ontologies/dogma.py +0 -0
  86. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ontologies/genodexito.py +0 -0
  87. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ontologies/mygene.py +0 -0
  88. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/ontologies/renaming.py +0 -0
  89. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/rpy2/__init__.py +0 -0
  90. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/rpy2/callr.py +0 -0
  91. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/rpy2/constants.py +0 -0
  92. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/rpy2/rids.py +0 -0
  93. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/sbml_dfs_utils.py +0 -0
  94. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/scverse/__init__.py +0 -0
  95. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/scverse/constants.py +0 -0
  96. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/scverse/loading.py +0 -0
  97. {napistu-0.3.3 → napistu-0.3.5}/src/napistu/utils.py +0 -0
  98. {napistu-0.3.3 → napistu-0.3.5}/src/napistu.egg-info/SOURCES.txt +0 -0
  99. {napistu-0.3.3 → napistu-0.3.5}/src/napistu.egg-info/dependency_links.txt +0 -0
  100. {napistu-0.3.3 → napistu-0.3.5}/src/napistu.egg-info/entry_points.txt +0 -0
  101. {napistu-0.3.3 → napistu-0.3.5}/src/napistu.egg-info/top_level.txt +0 -0
  102. {napistu-0.3.3 → napistu-0.3.5}/src/tests/__init__.py +0 -0
  103. {napistu-0.3.3 → napistu-0.3.5}/src/tests/conftest.py +0 -0
  104. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_consensus.py +0 -0
  105. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_constants.py +0 -0
  106. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_context_discretize.py +0 -0
  107. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_context_filtering.py +0 -0
  108. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_curation.py +0 -0
  109. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_data/__init__.py +0 -0
  110. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_gaps.py +0 -0
  111. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_gcs.py +0 -0
  112. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_identifiers.py +0 -0
  113. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_indices.py +0 -0
  114. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_ingestion_napistu_edgelist.py +0 -0
  115. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_ingestion_obo.py +0 -0
  116. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_matching_interactions.py +0 -0
  117. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_matching_mount.py +0 -0
  118. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_matching_species.py +0 -0
  119. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_mcp_config.py +0 -0
  120. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_mcp_documentation_utils.py +0 -0
  121. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_mcp_server.py +0 -0
  122. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_network_data_handling.py +0 -0
  123. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_network_neighborhoods.py +0 -0
  124. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_network_net_create.py +0 -0
  125. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_network_net_propagation.py +0 -0
  126. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_network_ng_utils.py +0 -0
  127. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_network_paths.py +0 -0
  128. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_ontologies_genodexito.py +0 -0
  129. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_ontologies_mygene.py +0 -0
  130. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_ontologies_renaming.py +0 -0
  131. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_pathwayannot.py +0 -0
  132. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_rpy2_callr.py +0 -0
  133. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_rpy2_init.py +0 -0
  134. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_sbml.py +0 -0
  135. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_sbo.py +0 -0
  136. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_scverse_loading.py +0 -0
  137. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_set_coverage.py +0 -0
  138. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_source.py +0 -0
  139. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_uncompartmentalize.py +0 -0
  140. {napistu-0.3.3 → napistu-0.3.5}/src/tests/test_utils.py +0 -0
  141. {napistu-0.3.3 → napistu-0.3.5}/src/tests/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: napistu
3
- Version: 0.3.3
3
+ Version: 0.3.5
4
4
  Summary: Connecting high-dimensional data to curated pathways
5
5
  Home-page: https://github.com/napistu/napistu-py
6
6
  Author: Sean Hackett
@@ -19,7 +19,7 @@ Requires-Dist: Jinja2
19
19
  Requires-Dist: PyYAML<7.0.0,>=6.0.0
20
20
  Requires-Dist: click<9.0.0,>=8.0.0
21
21
  Requires-Dist: click-logging
22
- Requires-Dist: fs<3.0.0,>=2.4.0
22
+ Requires-Dist: fs<3.0.0,>=2.4.16
23
23
  Requires-Dist: fs-gcsfs<2.0.0,>=1.5.0
24
24
  Requires-Dist: igraph
25
25
  Requires-Dist: matplotlib<4.0.0,>=3.5.0
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = napistu
3
- version = 0.3.3
3
+ version = 0.3.5
4
4
  description = Connecting high-dimensional data to curated pathways
5
5
  long_description = file: README.md
6
6
  long_description_content_type = text/markdown
@@ -25,7 +25,7 @@ install_requires =
25
25
  PyYAML>=6.0.0,<7.0.0
26
26
  click>=8.0.0,<9.0.0
27
27
  click-logging
28
- fs>=2.4.0,<3.0.0
28
+ fs>=2.4.16,<3.0.0
29
29
  fs-gcsfs>=1.5.0,<2.0.0
30
30
  igraph
31
31
  matplotlib>=3.5.0,<4.0.0
@@ -149,10 +149,10 @@ INTERACTION_EDGELIST_EXPECTED_VARS = {
149
149
  "downstream_name",
150
150
  "upstream_compartment",
151
151
  "downstream_compartment",
152
- "r_name",
153
- "sbo_term",
154
- "r_Identifiers",
155
- "r_isreversible",
152
+ SBML_DFS.R_NAME,
153
+ SBML_DFS.SBO_TERM,
154
+ SBML_DFS.R_IDENTIFIERS,
155
+ SBML_DFS.R_ISREVERSIBLE,
156
156
  }
157
157
 
158
158
  BQB_PRIORITIES = pd.DataFrame(
@@ -403,12 +403,6 @@ ONTOLOGIES = SimpleNamespace(
403
403
 
404
404
  ONTOLOGIES_LIST = list(ONTOLOGIES.__dict__.values())
405
405
 
406
- CHARACTERISTIC_COMPLEX_ONTOLOGIES = [
407
- ONTOLOGIES.ENSEMBL_GENE,
408
- ONTOLOGIES.NCBI_ENTREZ_GENE,
409
- ONTOLOGIES.MIRBASE,
410
- ]
411
-
412
406
  ONTOLOGY_SPECIES_ALIASES = {
413
407
  ONTOLOGIES.NCBI_ENTREZ_GENE: {"ncbigene", "ncbi_gene"},
414
408
  ONTOLOGIES.ENSEMBL_GENE: {"ensembl_gene_id"},
@@ -99,6 +99,41 @@ def filter_to_largest_subgraph(graph: ig.Graph) -> ig.Graph:
99
99
  return largest_subgraph
100
100
 
101
101
 
102
+ def filter_to_largest_subgraphs(graph: ig.Graph, top_k: int) -> list[ig.Graph]:
103
+ """
104
+ Filter an igraph to its largest weakly connected components.
105
+
106
+ Parameters
107
+ ----------
108
+ graph : ig.Graph
109
+ The input network.
110
+ top_k : int
111
+ The number of largest components to return.
112
+
113
+ Returns
114
+ -------
115
+ list[ig.Graph]
116
+ A list of the top K largest components as graphs.
117
+ """
118
+ if top_k < 1:
119
+ raise ValueError("top_k must be 1 or greater.")
120
+
121
+ component_members = graph.components(mode="weak")
122
+ if not component_members:
123
+ return []
124
+
125
+ component_sizes = [len(x) for x in component_members]
126
+
127
+ # Sort components by size in descending order
128
+ sorted_components = sorted(
129
+ zip(component_sizes, component_members), key=lambda x: x[0], reverse=True
130
+ )
131
+
132
+ # Return a list of the top K subgraphs
133
+ top_k_components = sorted_components[:top_k]
134
+ return [graph.induced_subgraph(members) for _, members in top_k_components]
135
+
136
+
102
137
  def graph_to_pandas_dfs(graph: ig.Graph) -> tuple[pd.DataFrame, pd.DataFrame]:
103
138
  """
104
139
  Convert an igraph to Pandas DataFrames for vertices and edges.
@@ -4,6 +4,7 @@ import logging
4
4
  import math
5
5
  from pathlib import Path
6
6
  from typing import Union
7
+ import io
7
8
 
8
9
  import numpy as np
9
10
  import pandas as pd
@@ -120,7 +121,7 @@ def save_precomputed_distances(
120
121
  OSError
121
122
  If the file cannot be written to (permission issues, etc.)
122
123
  """
123
- save_json(str(uri), precomputed_distances.to_dict(orient="index"))
124
+ save_json(str(uri), precomputed_distances.to_json())
124
125
 
125
126
 
126
127
  def load_precomputed_distances(uri: Union[str, Path]) -> pd.DataFrame:
@@ -143,12 +144,18 @@ def load_precomputed_distances(uri: Union[str, Path]) -> pd.DataFrame:
143
144
  If the specified file does not exist
144
145
  """
145
146
  try:
146
- data_dict = load_json(str(uri))
147
+ json_string = load_json(str(uri))
148
+ df = pd.read_json(io.StringIO(json_string))
149
+
150
+ # Convert integer columns to float
151
+ for col in df.columns:
152
+ if df[col].dtype in ["int64", "int32", "int16", "int8"]:
153
+ df[col] = df[col].astype(float)
154
+
155
+ return df
147
156
  except ResourceNotFound as e:
148
157
  raise FileNotFoundError(f"File not found: {uri}") from e
149
158
 
150
- return pd.DataFrame.from_dict(data_dict, orient="index").rename(index=int)
151
-
152
159
 
153
160
  def _calculate_distances_subset(
154
161
  napistu_graph: NapistuGraph,