napistu 0.3.1.dev1__tar.gz → 0.3.2.dev1__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.
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/PKG-INFO +1 -1
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/setup.cfg +1 -1
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/__main__.py +1 -1
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/precompute.py +64 -16
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu.egg-info/PKG-INFO +1 -1
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu.egg-info/SOURCES.txt +1 -1
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_network_precompute.py +58 -8
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/LICENSE +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/README.md +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/pyproject.toml +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/setup.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/consensus.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/context/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/context/discretize.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/context/filtering.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/gcs/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/gcs/constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/gcs/downloads.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/gcs/utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/identifiers.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/indices.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/bigg.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/gtex.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/hpa.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/identifiers_etl.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/napistu_edgelist.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/obo.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/psi_mi.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/reactome.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/sbml.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/string.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/trrust.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ingestion/yeast.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/matching/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/matching/constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/matching/interactions.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/matching/mount.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/matching/species.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/__main__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/client.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/codebase.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/codebase_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/component_base.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/config.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/documentation.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/documentation_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/execution.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/health.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/profiles.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/server.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/tutorials.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/tutorials_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/mcp/utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/modify/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/modify/constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/modify/curation.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/modify/gaps.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/modify/pathwayannot.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/modify/uncompartmentalize.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/data_handling.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/ig_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/napistu_graph_core.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/neighborhoods.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/net_create.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/net_propagation.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/ng_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/network/paths.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ontologies/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ontologies/constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ontologies/dogma.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ontologies/genodexito.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ontologies/mygene.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/ontologies/renaming.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/rpy2/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/rpy2/callr.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/rpy2/constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/rpy2/rids.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/sbml_dfs_core.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/sbml_dfs_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/scverse/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/scverse/constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/scverse/loading.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/source.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu/utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu.egg-info/dependency_links.txt +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu.egg-info/entry_points.txt +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu.egg-info/requires.txt +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/napistu.egg-info/top_level.txt +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/conftest.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_consensus.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_constants.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_context_discretize.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_context_filtering.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_curation.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_data/__init__.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_gaps.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_gcs.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_identifiers.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_indices.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_ingestion_napistu_edgelist.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_ingestion_obo.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_matching_interactions.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_matching_mount.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_matching_species.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_mcp_config.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_mcp_documentation_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_mcp_server.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_network_data_handling.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_network_ig_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_network_neighborhoods.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_network_net_create.py +0 -0
- /napistu-0.3.1.dev1/src/tests/test_net_propagation.py → /napistu-0.3.2.dev1/src/tests/test_network_net_propagation.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_network_ng_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_network_paths.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_ontologies_genodexito.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_ontologies_mygene.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_ontologies_renaming.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_pathwayannot.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_rpy2_callr.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_rpy2_init.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_sbml.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_sbml_dfs_core.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_sbml_dfs_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_sbo.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_scverse_loading.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_set_coverage.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_source.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_uncompartmentalize.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/test_utils.py +0 -0
- {napistu-0.3.1.dev1 → napistu-0.3.2.dev1}/src/tests/utils.py +0 -0
@@ -753,7 +753,7 @@ def export_precomputed_distances(
|
|
753
753
|
weights_vars=weights_vars_list,
|
754
754
|
)
|
755
755
|
|
756
|
-
|
756
|
+
precompute.save_precomputed_distances(precomputed_distances, output_uri)
|
757
757
|
|
758
758
|
|
759
759
|
@exporter.command(name="export_smbl_dfs_tables")
|
@@ -2,12 +2,16 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
import logging
|
4
4
|
import math
|
5
|
+
from pathlib import Path
|
6
|
+
from typing import Union
|
5
7
|
|
6
8
|
import numpy as np
|
7
9
|
import pandas as pd
|
10
|
+
from fs.errors import ResourceNotFound
|
8
11
|
|
9
12
|
from napistu.network.napistu_graph_core import NapistuGraph
|
10
13
|
from napistu.network.ig_utils import validate_edge_attributes
|
14
|
+
from napistu.utils import load_json, save_json
|
11
15
|
|
12
16
|
logger = logging.getLogger(__name__)
|
13
17
|
|
@@ -75,21 +79,17 @@ def precompute_distances(
|
|
75
79
|
# interate through all partitions of "from" nodes and find their shortest and lowest weighted paths
|
76
80
|
unique_partitions = vs_to_partition.index.unique().tolist()
|
77
81
|
|
78
|
-
precomputed_distances = (
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
)
|
90
|
-
.reset_index(drop=True)
|
91
|
-
.query("sc_id_origin != sc_id_dest")
|
92
|
-
)
|
82
|
+
precomputed_distances = pd.concat(
|
83
|
+
[
|
84
|
+
_calculate_distances_subset(
|
85
|
+
napistu_graph,
|
86
|
+
vs_to_partition,
|
87
|
+
vs_to_partition.loc[uq_part],
|
88
|
+
weights_vars=weights_vars,
|
89
|
+
)
|
90
|
+
for uq_part in unique_partitions
|
91
|
+
]
|
92
|
+
).query("sc_id_origin != sc_id_dest")
|
93
93
|
|
94
94
|
# filter by path length and/or weight
|
95
95
|
filtered_precomputed_distances = _filter_precomputed_distances(
|
@@ -97,11 +97,59 @@ def precompute_distances(
|
|
97
97
|
max_steps=max_steps,
|
98
98
|
max_score_q=max_score_q,
|
99
99
|
path_weights_vars=["path_" + w for w in weights_vars],
|
100
|
-
)
|
100
|
+
).reset_index(drop=True)
|
101
101
|
|
102
102
|
return filtered_precomputed_distances
|
103
103
|
|
104
104
|
|
105
|
+
def save_precomputed_distances(
|
106
|
+
precomputed_distances: pd.DataFrame, uri: Union[str, Path]
|
107
|
+
) -> None:
|
108
|
+
"""
|
109
|
+
Save a precomputed distances DataFrame to a JSON file.
|
110
|
+
|
111
|
+
Parameters
|
112
|
+
----------
|
113
|
+
precomputed_distances : pd.DataFrame
|
114
|
+
The precomputed distances DataFrame to save
|
115
|
+
uri : Union[str, Path]
|
116
|
+
Path where to save the JSON file. Can be a local path or a GCS URI.
|
117
|
+
|
118
|
+
Raises
|
119
|
+
------
|
120
|
+
OSError
|
121
|
+
If the file cannot be written to (permission issues, etc.)
|
122
|
+
"""
|
123
|
+
save_json(str(uri), precomputed_distances.to_dict(orient="index"))
|
124
|
+
|
125
|
+
|
126
|
+
def load_precomputed_distances(uri: Union[str, Path]) -> pd.DataFrame:
|
127
|
+
"""
|
128
|
+
Load a precomputed distances DataFrame from a JSON file.
|
129
|
+
|
130
|
+
Parameters
|
131
|
+
----------
|
132
|
+
uri : Union[str, Path]
|
133
|
+
Path to the JSON file to load
|
134
|
+
|
135
|
+
Returns
|
136
|
+
-------
|
137
|
+
pd.DataFrame
|
138
|
+
The reconstructed precomputed distances DataFrame
|
139
|
+
|
140
|
+
Raises
|
141
|
+
------
|
142
|
+
FileNotFoundError
|
143
|
+
If the specified file does not exist
|
144
|
+
"""
|
145
|
+
try:
|
146
|
+
data_dict = load_json(str(uri))
|
147
|
+
except ResourceNotFound as e:
|
148
|
+
raise FileNotFoundError(f"File not found: {uri}") from e
|
149
|
+
|
150
|
+
return pd.DataFrame.from_dict(data_dict, orient="index").rename(index=int)
|
151
|
+
|
152
|
+
|
105
153
|
def _calculate_distances_subset(
|
106
154
|
napistu_graph: NapistuGraph,
|
107
155
|
vs_to_partition: pd.DataFrame,
|
@@ -111,11 +111,11 @@ src/tests/test_matching_species.py
|
|
111
111
|
src/tests/test_mcp_config.py
|
112
112
|
src/tests/test_mcp_documentation_utils.py
|
113
113
|
src/tests/test_mcp_server.py
|
114
|
-
src/tests/test_net_propagation.py
|
115
114
|
src/tests/test_network_data_handling.py
|
116
115
|
src/tests/test_network_ig_utils.py
|
117
116
|
src/tests/test_network_neighborhoods.py
|
118
117
|
src/tests/test_network_net_create.py
|
118
|
+
src/tests/test_network_net_propagation.py
|
119
119
|
src/tests/test_network_ng_utils.py
|
120
120
|
src/tests/test_network_paths.py
|
121
121
|
src/tests/test_network_precompute.py
|
@@ -1,6 +1,8 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
+
import pytest
|
3
4
|
import os
|
5
|
+
import tempfile
|
4
6
|
|
5
7
|
import numpy as np
|
6
8
|
import pandas as pd
|
@@ -214,11 +216,59 @@ def test_precomputed_distances_neighborhoods():
|
|
214
216
|
assert upstream_disagreement_w_precompute.shape[0] == 0
|
215
217
|
|
216
218
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
219
|
+
@pytest.mark.skip_on_windows
|
220
|
+
def test_precomputed_distances_serialization():
|
221
|
+
"""
|
222
|
+
Test that validates the serialization -> deserialization approach works correctly.
|
223
|
+
|
224
|
+
Notes
|
225
|
+
-----
|
226
|
+
This function creates a sample DataFrame with the structure of precomputed
|
227
|
+
distances data, saves it to a temporary JSON file, loads it back, and
|
228
|
+
validates that all data is preserved correctly through the serialization
|
229
|
+
round-trip.
|
230
|
+
"""
|
231
|
+
# Create a sample DataFrame that mimics the precomputed distances structure
|
232
|
+
sample_data = {
|
233
|
+
"sc_id_origin": {
|
234
|
+
1: "SC00000000",
|
235
|
+
3: "SC00000003",
|
236
|
+
4: "SC00000004",
|
237
|
+
5: "SC00000005",
|
238
|
+
6: "SC00000011",
|
239
|
+
},
|
240
|
+
"sc_id_dest": {
|
241
|
+
1: "SC00000001",
|
242
|
+
3: "SC00000001",
|
243
|
+
4: "SC00000001",
|
244
|
+
5: "SC00000001",
|
245
|
+
6: "SC00000001",
|
246
|
+
},
|
247
|
+
"path_length": {1: 1.0, 3: 4.0, 4: 6.0, 5: 6.0, 6: 1.0},
|
248
|
+
"path_upstream_weights": {1: 1.0, 3: 4.0, 4: 6.0, 5: 6.0, 6: 1.0},
|
249
|
+
"path_weights": {1: 1.0, 3: 4.0, 4: 6.0, 5: 6.0, 6: 1.0},
|
250
|
+
}
|
251
|
+
|
252
|
+
# Create original DataFrame
|
253
|
+
original_df = pd.DataFrame(sample_data)
|
254
|
+
|
255
|
+
# Create a temporary file path
|
256
|
+
with tempfile.NamedTemporaryFile(
|
257
|
+
mode="w", suffix=".json", delete=False
|
258
|
+
) as tmp_file:
|
259
|
+
temp_path = tmp_file.name
|
260
|
+
|
261
|
+
try:
|
262
|
+
# Test serialization
|
263
|
+
precompute.save_precomputed_distances(original_df, temp_path)
|
264
|
+
|
265
|
+
# Test deserialization
|
266
|
+
loaded_df = precompute.load_precomputed_distances(temp_path)
|
267
|
+
|
268
|
+
# Validate that the loaded DataFrame is identical to the original
|
269
|
+
pd.testing.assert_frame_equal(original_df, loaded_df, check_like=True)
|
270
|
+
|
271
|
+
finally:
|
272
|
+
# Clean up the temporary file
|
273
|
+
if os.path.exists(temp_path):
|
274
|
+
os.remove(temp_path)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|