From 639e64c39ceb3e0375b0d668545a9ac41be7ea31 Mon Sep 17 00:00:00 2001 From: Mike Lin Date: Mon, 20 May 2024 20:37:24 -1000 Subject: [PATCH 1/8] squash for PR --- api/python/cellxgene_census/pyproject.toml | 3 + .../cellxgene_census/experimental/__init__.py | 4 + .../experimental/_embedding_search.py | 141 ++++++++++ .../experimental/test_embeddings_search.py | 240 ++++++++++++++++++ 4 files changed, 388 insertions(+) create mode 100644 api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py create mode 100644 api/python/cellxgene_census/tests/experimental/test_embeddings_search.py diff --git a/api/python/cellxgene_census/pyproject.toml b/api/python/cellxgene_census/pyproject.toml index 1ec0b29e1..f96eff037 100644 --- a/api/python/cellxgene_census/pyproject.toml +++ b/api/python/cellxgene_census/pyproject.toml @@ -48,6 +48,9 @@ experimental = [ "psutil~=5.0", "datasets~=2.0", "tdigest~=0.5", + # choose newest version of tiledb-vector-search that doesn't need a newer version of tiledb + # than tiledbsoma: https://github.com/TileDB-Inc/TileDB-Vector-Search/blob/0.2.2/pyproject.toml + "tiledb-vector-search~=0.2", # Not expressible in pyproject.toml: #"git+https://huggingface.co/ctheodoris/Geneformer", # instead, experimental/ml/geneformer_tokenizer.py catches ImportError to ask user to install that. diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/__init__.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/__init__.py index 4a65cb3ab..eabcc74c9 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/__init__.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/__init__.py @@ -7,6 +7,7 @@ get_embedding_metadata, get_embedding_metadata_by_name, ) +from ._embedding_search import NeighborObs, find_nearest_obs, predict_obs_metadata __all__ = [ "get_embedding", @@ -14,4 +15,7 @@ "get_embedding_metadata_by_name", "get_all_available_embeddings", "get_all_census_versions_with_embedding", + "find_nearest_obs", + "NeighborObs", + "predict_obs_metadata", ] diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py new file mode 100644 index 000000000..970b3a77a --- /dev/null +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py @@ -0,0 +1,141 @@ +"""Nearest-neighbor search based on vector index of Census embeddings.""" + +from contextlib import ExitStack +from typing import Any, Dict, List, NamedTuple, Optional, Sequence + +import anndata as ad +import numpy as np +import numpy.typing as npt +import pandas as pd +import tiledb.vector_search as vs +import tiledbsoma as soma + +from .._open import open_soma + +CENSUS_EMBEDDINGS_INDEX_URI_FSTR = ( + "s3://cellxgene-contrib-public/contrib/cell-census/soma/{census_version}/indexes/{embedding_id}" +) +CENSUS_EMBEDDINGS_INDEX_REGION = "us-west-2" + + +class NeighborObs(NamedTuple): + """Results of nearest-neighbor search for Census obs embeddings.""" + + distances: npt.NDArray[np.float32] + """ + Distances to the nearest neighbors for each query obs embedding (q by k, where q is the number + of query embeddings and k is the desired number of neighbors). The distance metric is + implementation-dependent. + """ + + neighbor_ids: npt.NDArray[np.int64] + """ + obs soma_joinid's of the nearest neighbors for each query embedding (q by k). + """ + + +def find_nearest_obs( + embedding_metadata: Dict[str, Any], + query: ad.AnnData, + k: int = 10, + nprobe: int = 100, + memory_GiB: int = 4, + **kwargs: Dict[str, Any], +) -> NeighborObs: + """Search Census for similar obs (cells) based on nearest neighbors in embedding space. + + Args: + embedding_metadata: + Information about the embedding to search, as found by + :func:`get_embedding_metadata_by_name`. + query: + AnnData object with an obsm layer embedding the query cells. The obsm layer name + matches ``embedding_metadata["embedding_name"]`` (e.g. scvi, geneformer). + k: + Number of nearest neighbors to return for each query obs. + nprobe: + Sensitivity parameter; defaults to 100 (roughly N^0.25 where N is the number of Census + cells) for a thorough search. Decrease for faster but less accurate search. + memory_GiB: + Memory budget for the search index, in gibibytes; defaults to 4 GiB. + """ + embedding_name = embedding_metadata["embedding_name"] + n_features = embedding_metadata["n_features"] + + # validate query (expected obsm layer exists with the expected dimensionality) + if embedding_name not in query.obsm: + raise ValueError(f"Query does not have the expected layer {embedding_name}") + if query.obsm[embedding_name].shape[1] != n_features: + raise ValueError( + f"Query embedding {embedding_name} has {query.obsm[embedding_name].shape[1]} features, expected {n_features}" + ) + + # formulate index URI and run query + index_uri = CENSUS_EMBEDDINGS_INDEX_URI_FSTR.format( + census_version=embedding_metadata["census_version"], embedding_id=embedding_metadata["id"] + ) + memory_vectors = memory_GiB * (2**30) // (4 * n_features) # number of float32 vectors + index = vs.ivf_flat_index.IVFFlatIndex( + uri=index_uri, + config={"vfs.s3.region": CENSUS_EMBEDDINGS_INDEX_REGION, "vfs.s3.no_sign_request": "true"}, + memory_budget=memory_vectors, + ) + distances, neighbor_ids = index.query(query.obsm[embedding_name], k=k, nprobe=nprobe, **kwargs) + + return NeighborObs(distances=distances, neighbor_ids=neighbor_ids) + + +def predict_obs_metadata( + embedding_metadata: Dict[str, Any], + neighbors: NeighborObs, + column_names: Sequence[str], + experiment: Optional[soma.Experiment] = None, +) -> pd.DataFrame: + """Predict obs metadata attributes for the query cells based on the embedding nearest neighbors. + + Args: + embedding_metadata: + Information about the embedding searched, as found by + :func:`get_embedding_metadata_by_name`. + neighbors: + Results of a :func:`find_nearest_obs` search. + column_names: + Desired obs metadata column names. The current implementation is suitable for + categorical attributes (e.g. cell_type, tissue_general). + experiment: + Open handle for the relevant SOMAExperiment, if available (otherwise, will be opened + internally). e.g. ``census["census_data"]["homo_sapiens"]`` with the relevant Census + version. + + Returns: + Pandas DataFrame with the desired column predictions. Additionally, for each predicted + column ``col``, an additional column ``col_confidence`` with a confidence score between 0 + and 1. + """ + with ExitStack() as cleanup: + if experiment is None: + # open Census transiently + census = cleanup.enter_context(open_soma(census_version=embedding_metadata["census_version"])) + experiment = census["census_data"][embedding_metadata["experiment_name"]] + + # fetch the desired obs metadata for all of the found neighbors + neighbor_obs = ( + experiment.obs.read( + coords=(neighbors.neighbor_ids.flatten(),), column_names=(["soma_joinid"] + list(column_names)) + ) + .concat() + .to_pandas() + ).set_index("soma_joinid") + + # step through query cells to generate prediction for each column as the plurality value + # found among its neighbors, with a confidence score based on the simple fraction (for now) + # TODO: something more intelligent for numeric columns! also use distances, etc. + out: Dict[str, List[Any]] = {} + for i in range(neighbors.neighbor_ids.shape[0]): + neighbors_i = neighbor_obs.loc[neighbors.neighbor_ids[i]] + for col in column_names: + col_value_counts = neighbors_i[col].value_counts(normalize=True) + out.setdefault(col, []).append(col_value_counts.idxmax()) + out.setdefault(col + "_confidence", []).append(col_value_counts.max()) + + return pd.DataFrame.from_dict(out) diff --git a/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py b/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py new file mode 100644 index 000000000..9049da2fa --- /dev/null +++ b/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py @@ -0,0 +1,240 @@ +import json +from typing import Any, Dict, List + +import anndata as ad +import numpy as np +import pytest +import tiledb + +import cellxgene_census +from cellxgene_census.experimental import ( + NeighborObs, + find_nearest_obs, + get_embedding_metadata_by_name, + predict_obs_metadata, +) + + +@pytest.mark.experimental +@pytest.mark.live_corpus +def test_embeddings_search(true_neighbors: Dict[str, Any], query_result: NeighborObs) -> None: + # check result shapes + rslt = query_result + assert isinstance(rslt.neighbor_ids, np.ndarray) + assert rslt.neighbor_ids.dtype == np.uint64 + assert rslt.neighbor_ids.shape == (len(true_neighbors), TRUE_NEAREST_NEIGHBORS_K) + assert isinstance(rslt.distances, np.ndarray) + assert rslt.distances.dtype == np.float32 + assert rslt.distances.shape == (len(true_neighbors), TRUE_NEAREST_NEIGHBORS_K) + + # compute Jaccard index for the true neighbors & those returned by the query + true_ids = set() + for ns in true_neighbors.values(): + true_ids |= {n["cell_id"] for n in ns} + rslt_ids = set(rslt.neighbor_ids.flatten()) + jaccard = len(true_ids & rslt_ids) / len(true_ids | rslt_ids) + + # Jaccard threshold: the search is approximate, and we set nprobe to a low value to speed up + # the test + assert jaccard >= 0.92 + + return + + +@pytest.mark.experimental +@pytest.mark.live_corpus +def test_embeddings_search_errors(emb_metadata: Dict[str, Any], query_anndata: ad.AnnData) -> None: + # bogus embedding metadata + emb_metadata2 = emb_metadata.copy() + emb_metadata2["id"] = "BOGUS123" + with pytest.raises(tiledb.TileDBError): + find_nearest_obs(emb_metadata2, query_anndata) + # query anndata missing the embedding layer + bogus_ad = query_anndata.copy() + bogus_ad.obsm.pop(TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME) + with pytest.raises(ValueError, match="Query does not have"): + find_nearest_obs(emb_metadata, bogus_ad) + # embedding layer has wrong number of features + bogus_ad = query_anndata.copy() + bogus_ad.obsm[TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME] = np.zeros((len(bogus_ad), 42)) + with pytest.raises(ValueError, match="features, expected"): + find_nearest_obs(emb_metadata, bogus_ad) + return + + +@pytest.mark.experimental +@pytest.mark.live_corpus +def test_predict_obs_metadata( + emb_metadata: Dict[str, Any], query_anndata: ad.AnnData, query_result: NeighborObs +) -> None: + columns = ["cell_type", "tissue_general"] + + with cellxgene_census.open_soma(census_version=TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION) as census: + truth_df = ( + census["census_data"][TRUE_NEAREST_NEIGHBORS_ORGANISM] + .obs.read(coords=(query_anndata.obs["soma_joinid"].values,), column_names=columns) + .concat() + .to_pandas() + ) + + pred_df = predict_obs_metadata(emb_metadata, query_result, columns) + assert len(pred_df) == len(query_anndata.obs) + + for col in columns: + assert col in pred_df.columns + assert f"{col}_confidence" in pred_df.columns + accuracy = (pred_df[col] == truth_df[col]).mean() + assert accuracy > 0.75, f"Accuracy for {col} is {accuracy}" + + +@pytest.fixture(scope="module") +def emb_metadata() -> Dict[str, Any]: + return get_embedding_metadata_by_name( + TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME, + TRUE_NEAREST_NEIGHBORS_ORGANISM, + TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION, + "obs_embedding", + ) + + +@pytest.fixture(scope="module") +def true_neighbors() -> Dict[int, List[Dict[str, Any]]]: + ans = {} + for line in TRUE_NEAREST_NEIGHBORS_JSON.strip().split("\n"): + example = json.loads(line) + ans[example["cell_id"]] = example["neighbors"][:TRUE_NEAREST_NEIGHBORS_K] + return ans + + +@pytest.fixture(scope="module") +def query_anndata(true_neighbors: Dict[str, Any]) -> ad.AnnData: + with cellxgene_census.open_soma(census_version=TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION) as census: + return cellxgene_census.get_anndata( + census, + TRUE_NEAREST_NEIGHBORS_ORGANISM, + obs_coords=sorted(true_neighbors.keys()), + obs_embeddings=[TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME], + ) + + +@pytest.fixture(scope="module") +def query_result(emb_metadata: Dict[str, Any], query_anndata: ad.AnnData) -> NeighborObs: + return find_nearest_obs( + emb_metadata, + query_anndata, + k=TRUE_NEAREST_NEIGHBORS_K, + nprobe=25, + ) + + +""" +The following "truth" data were generated by randomly sampling 100 Census primary cells and their +scVI embeddings (CxG-czi-5). Then, we made an exhaustive pass through the embeddings array to find +their 25 nearest neighbors by Euclidean distance. +""" +TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION = "2023-12-15" +TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME = "scvi" +TRUE_NEAREST_NEIGHBORS_ORGANISM = "homo_sapiens" +TRUE_NEAREST_NEIGHBORS_K = 10 +TRUE_NEAREST_NEIGHBORS_JSON = """ +{"cell_id": 48884266, "neighbors": [{"distance": 0.0, "cell_id": 48884266}, {"distance": 0.36870312719526344, "cell_id": 48882582}, {"distance": 0.45194134685206555, "cell_id": 48904243}, {"distance": 0.4689120465432001, "cell_id": 48883973}, {"distance": 0.4701634704715092, "cell_id": 48883894}, {"distance": 0.4772844749267185, "cell_id": 48881548}, {"distance": 0.47747182817763884, "cell_id": 48883215}, {"distance": 0.5171140271570219, "cell_id": 48882290}, {"distance": 0.5343526701049458, "cell_id": 48905593}, {"distance": 0.5393365808038064, "cell_id": 48896713}, {"distance": 0.5409478030410546, "cell_id": 48906104}, {"distance": 0.5461267613033821, "cell_id": 48905835}, {"distance": 0.5572477334843036, "cell_id": 48896520}, {"distance": 0.5611744042351648, "cell_id": 48885279}, {"distance": 0.5652364617866981, "cell_id": 48882507}, {"distance": 0.5657781269186272, "cell_id": 48907142}, {"distance": 0.5709338004974971, "cell_id": 48599354}, {"distance": 0.5713592066534472, "cell_id": 48904840}, {"distance": 0.5791306505071526, "cell_id": 48905823}, {"distance": 0.5796388325518227, "cell_id": 48907988}, {"distance": 0.5827178977498736, "cell_id": 48906968}, {"distance": 0.5842219992223383, "cell_id": 48905256}, {"distance": 0.5884837832056955, "cell_id": 48907109}, {"distance": 0.5886426284651249, "cell_id": 48610323}, {"distance": 0.5891020805091439, "cell_id": 48906367}]} +{"cell_id": 3285087, "neighbors": [{"distance": 0.0, "cell_id": 3285087}, {"distance": 0.0, "cell_id": 3723278}, {"distance": 0.6446024157279429, "cell_id": 20236001}, {"distance": 0.6446024157279429, "cell_id": 23353329}, {"distance": 0.6446024157279429, "cell_id": 25246595}, {"distance": 0.6643407808380998, "cell_id": 3285053}, {"distance": 0.6643407808380998, "cell_id": 3723267}, {"distance": 0.6716110836369217, "cell_id": 3285058}, {"distance": 0.6716110836369217, "cell_id": 3723484}, {"distance": 0.6989909074224284, "cell_id": 20248724}, {"distance": 0.6989909074224284, "cell_id": 23335331}, {"distance": 0.6989909074224284, "cell_id": 29081778}, {"distance": 0.6995074309524025, "cell_id": 20252505}, {"distance": 0.6995074309524025, "cell_id": 23338866}, {"distance": 0.6995074309524025, "cell_id": 29083186}, {"distance": 0.7114577326312008, "cell_id": 20246681}, {"distance": 0.7114577326312008, "cell_id": 23344825}, {"distance": 0.7114577326312008, "cell_id": 29080630}, {"distance": 0.7287329371320457, "cell_id": 3285105}, {"distance": 0.7287329371320457, "cell_id": 3723290}, {"distance": 0.7380269501365168, "cell_id": 20253327}, {"distance": 0.7380269501365168, "cell_id": 23339993}, {"distance": 0.7380269501365168, "cell_id": 29080521}, {"distance": 0.7415650428518051, "cell_id": 20248884}, {"distance": 0.7415650428518051, "cell_id": 23335308}]} +{"cell_id": 44010765, "neighbors": [{"distance": 0.0, "cell_id": 44010765}, {"distance": 0.4570227796736593, "cell_id": 44126562}, {"distance": 0.48991132196560166, "cell_id": 45608463}, {"distance": 0.48991132196560166, "cell_id": 53050823}, {"distance": 0.49183571311954527, "cell_id": 15171731}, {"distance": 0.5129020377570104, "cell_id": 43877340}, {"distance": 0.5137430792855204, "cell_id": 15369399}, {"distance": 0.5143573085759233, "cell_id": 44402470}, {"distance": 0.5165583253624815, "cell_id": 50959996}, {"distance": 0.5310796622875035, "cell_id": 44062141}, {"distance": 0.5419616322548864, "cell_id": 50923746}, {"distance": 0.5452629175422571, "cell_id": 49985581}, {"distance": 0.549922152296617, "cell_id": 44080104}, {"distance": 0.5509699626225824, "cell_id": 43566024}, {"distance": 0.5620417941913957, "cell_id": 44016658}, {"distance": 0.5647218554055395, "cell_id": 44167855}, {"distance": 0.5669505839214761, "cell_id": 50226648}, {"distance": 0.5777917192400728, "cell_id": 16612512}, {"distance": 0.5878045199961383, "cell_id": 14256077}, {"distance": 0.5968481390701431, "cell_id": 43993358}, {"distance": 0.5970031957669568, "cell_id": 43232018}, {"distance": 0.597117836540424, "cell_id": 36301462}, {"distance": 0.599696952866418, "cell_id": 49383668}, {"distance": 0.5998371978218984, "cell_id": 49305572}, {"distance": 0.6020293495008047, "cell_id": 44083732}]} +{"cell_id": 54593156, "neighbors": [{"distance": 0.0, "cell_id": 54593156}, {"distance": 0.40684991419796035, "cell_id": 39702052}, {"distance": 0.4091920837433136, "cell_id": 54191080}, {"distance": 0.42898864616400934, "cell_id": 43867753}, {"distance": 0.4457620619504269, "cell_id": 53842427}, {"distance": 0.4462893109725141, "cell_id": 61354565}, {"distance": 0.454819493086827, "cell_id": 54233878}, {"distance": 0.46508571459284154, "cell_id": 48000680}, {"distance": 0.47447094231821035, "cell_id": 49335786}, {"distance": 0.4873961122332809, "cell_id": 48493624}, {"distance": 0.4886436932873957, "cell_id": 54194143}, {"distance": 0.48872276461918474, "cell_id": 45034245}, {"distance": 0.4909224675592821, "cell_id": 54365563}, {"distance": 0.4946262368544072, "cell_id": 46642468}, {"distance": 0.5050385955392035, "cell_id": 54186608}, {"distance": 0.5052535533766086, "cell_id": 46431610}, {"distance": 0.505342932652932, "cell_id": 39633433}, {"distance": 0.5102944171747317, "cell_id": 61333555}, {"distance": 0.5118471434841758, "cell_id": 53789514}, {"distance": 0.5147027601535609, "cell_id": 49902772}, {"distance": 0.519211855553082, "cell_id": 46485691}, {"distance": 0.5193234805436283, "cell_id": 54383558}, {"distance": 0.5207687400583412, "cell_id": 50065190}, {"distance": 0.5223131852274471, "cell_id": 53782932}, {"distance": 0.5225511137222412, "cell_id": 54204543}]} +{"cell_id": 49454989, "neighbors": [{"distance": 0.0, "cell_id": 49454989}, {"distance": 0.5651309620287789, "cell_id": 49196338}, {"distance": 0.5790658189328616, "cell_id": 61555029}, {"distance": 0.6358119018825575, "cell_id": 44261450}, {"distance": 0.6452191637719351, "cell_id": 35375516}, {"distance": 0.6483208161115366, "cell_id": 3819425}, {"distance": 0.6627657433551711, "cell_id": 35407515}, {"distance": 0.6681152419436311, "cell_id": 49783022}, {"distance": 0.6928590812438838, "cell_id": 49835917}, {"distance": 0.6929768400694352, "cell_id": 13072273}, {"distance": 0.6929768400694352, "cell_id": 13285326}, {"distance": 0.6942676543274021, "cell_id": 50172165}, {"distance": 0.7081249562541901, "cell_id": 49959583}, {"distance": 0.7117484089464857, "cell_id": 49611789}, {"distance": 0.7134029912676838, "cell_id": 49243741}, {"distance": 0.7207746269057522, "cell_id": 50081883}, {"distance": 0.725391822656998, "cell_id": 35771755}, {"distance": 0.725391822656998, "cell_id": 36110319}, {"distance": 0.7303628933089745, "cell_id": 61570231}, {"distance": 0.7364214270178401, "cell_id": 50289965}, {"distance": 0.7365543235391223, "cell_id": 61429320}, {"distance": 0.7372731447756735, "cell_id": 46851442}, {"distance": 0.7423110707448584, "cell_id": 51328234}, {"distance": 0.750998436167621, "cell_id": 13058884}, {"distance": 0.750998436167621, "cell_id": 13277399}]} +{"cell_id": 26103963, "neighbors": [{"distance": 0.0, "cell_id": 10781646}, {"distance": 0.0, "cell_id": 23881353}, {"distance": 0.0, "cell_id": 26103963}, {"distance": 0.619592659769135, "cell_id": 17736061}, {"distance": 0.619592659769135, "cell_id": 42189319}, {"distance": 0.6489919810741452, "cell_id": 6324230}, {"distance": 0.6489919810741452, "cell_id": 7388047}, {"distance": 0.6732222479959671, "cell_id": 23395}, {"distance": 0.6911732860546104, "cell_id": 1631450}, {"distance": 0.6911732860546104, "cell_id": 2510944}, {"distance": 0.6982662351259253, "cell_id": 10791296}, {"distance": 0.6982662351259253, "cell_id": 23877929}, {"distance": 0.6982662351259253, "cell_id": 24150236}, {"distance": 0.7182665789398123, "cell_id": 1636210}, {"distance": 0.7182665789398123, "cell_id": 2515704}, {"distance": 0.7520928971675964, "cell_id": 137816}, {"distance": 0.7555261454814952, "cell_id": 5719829}, {"distance": 0.7555261454814952, "cell_id": 7396419}, {"distance": 0.7585939977882471, "cell_id": 10791482}, {"distance": 0.7585939977882471, "cell_id": 23789797}, {"distance": 0.7585939977882471, "cell_id": 23867139}, {"distance": 0.7671337844431296, "cell_id": 1603547}, {"distance": 0.7671337844431296, "cell_id": 2251352}, {"distance": 0.7804735398208412, "cell_id": 10769175}, {"distance": 0.7804735398208412, "cell_id": 23899965}]} +{"cell_id": 48403678, "neighbors": [{"distance": 0.0, "cell_id": 48403678}, {"distance": 0.35710639363870667, "cell_id": 45162688}, {"distance": 0.551491405855107, "cell_id": 48216524}, {"distance": 0.5650419558705774, "cell_id": 49143947}, {"distance": 0.7438835677911204, "cell_id": 53988429}, {"distance": 0.7706764170797038, "cell_id": 8881701}, {"distance": 0.8075520431790514, "cell_id": 48147826}, {"distance": 0.8168826090755377, "cell_id": 43802274}, {"distance": 0.8424177203693685, "cell_id": 8881230}, {"distance": 0.8474836807859087, "cell_id": 46862802}, {"distance": 0.8551173717229851, "cell_id": 50827187}, {"distance": 0.8594960922337449, "cell_id": 48265069}, {"distance": 0.863042103716869, "cell_id": 48292616}, {"distance": 0.8672058039273095, "cell_id": 50027013}, {"distance": 0.8672988948905219, "cell_id": 54462677}, {"distance": 0.8763203554833326, "cell_id": 8883234}, {"distance": 0.8833765105762164, "cell_id": 36629863}, {"distance": 0.8863749961068852, "cell_id": 8883048}, {"distance": 0.8871093423506627, "cell_id": 49294629}, {"distance": 0.8877135497885864, "cell_id": 43922548}, {"distance": 0.8885346967652048, "cell_id": 3800394}, {"distance": 0.8992515425956116, "cell_id": 48263226}, {"distance": 0.9041501832203231, "cell_id": 48264984}, {"distance": 0.9050695821671393, "cell_id": 7674974}, {"distance": 0.9056283323559379, "cell_id": 8886159}]} +{"cell_id": 53784183, "neighbors": [{"distance": 0.0, "cell_id": 53784183}, {"distance": 0.5445907191962778, "cell_id": 54257572}, {"distance": 0.6490806955896615, "cell_id": 54260572}, {"distance": 0.6829816533618465, "cell_id": 54206161}, {"distance": 0.6848687435822737, "cell_id": 54261678}, {"distance": 0.7115714355716817, "cell_id": 36443600}, {"distance": 0.7162098549228432, "cell_id": 54179903}, {"distance": 0.732181182320559, "cell_id": 54148657}, {"distance": 0.7442103631247078, "cell_id": 54170399}, {"distance": 0.7487969768486321, "cell_id": 34191743}, {"distance": 0.7487969768486321, "cell_id": 35077854}, {"distance": 0.7521840774454865, "cell_id": 54246667}, {"distance": 0.7640901619851383, "cell_id": 42625768}, {"distance": 0.7640901619851383, "cell_id": 42748843}, {"distance": 0.7646129549030768, "cell_id": 48280904}, {"distance": 0.7646527181299525, "cell_id": 54172016}, {"distance": 0.7651392228681514, "cell_id": 43198687}, {"distance": 0.7676610259375556, "cell_id": 54186247}, {"distance": 0.7682068996363804, "cell_id": 48537074}, {"distance": 0.7728258502966032, "cell_id": 54185718}, {"distance": 0.776029939276966, "cell_id": 36374979}, {"distance": 0.7789787599151069, "cell_id": 39729014}, {"distance": 0.7824193883156972, "cell_id": 43190102}, {"distance": 0.7889891536753498, "cell_id": 54341661}, {"distance": 0.7901072651884996, "cell_id": 54205898}]} +{"cell_id": 50925377, "neighbors": [{"distance": 0.0, "cell_id": 50925377}, {"distance": 0.8102789787877616, "cell_id": 46676049}, {"distance": 0.8725316969621637, "cell_id": 37147644}, {"distance": 0.8804761854918758, "cell_id": 8144627}, {"distance": 0.8896732454365659, "cell_id": 37241385}, {"distance": 0.9444021330571174, "cell_id": 37241629}, {"distance": 0.9478117223022737, "cell_id": 35773477}, {"distance": 0.9478117223022737, "cell_id": 36112041}, {"distance": 0.9633258720098636, "cell_id": 36621610}, {"distance": 0.9771731407037374, "cell_id": 37191068}, {"distance": 0.9786214196277997, "cell_id": 50920501}, {"distance": 0.9797288258551252, "cell_id": 37228287}, {"distance": 0.9838083344160935, "cell_id": 19487254}, {"distance": 0.9870097518300361, "cell_id": 37136940}, {"distance": 0.9877711895812153, "cell_id": 44665386}, {"distance": 0.9983874691237056, "cell_id": 37235939}, {"distance": 1.0063540238140556, "cell_id": 37143245}, {"distance": 1.0122235761964478, "cell_id": 40773960}, {"distance": 1.0350769437154923, "cell_id": 35782675}, {"distance": 1.0350769437154923, "cell_id": 36121239}, {"distance": 1.0380189703490637, "cell_id": 49777017}, {"distance": 1.0540378672178927, "cell_id": 37141340}, {"distance": 1.0568020641310703, "cell_id": 46565056}, {"distance": 1.0609501779707267, "cell_id": 35773367}, {"distance": 1.0609501779707267, "cell_id": 36111931}]} +{"cell_id": 3084688, "neighbors": [{"distance": 0.0, "cell_id": 3084688}, {"distance": 0.7004110180981762, "cell_id": 3045107}, {"distance": 0.7209157619405852, "cell_id": 3050020}, {"distance": 0.7244874167608257, "cell_id": 3136619}, {"distance": 0.7283725965865487, "cell_id": 3072913}, {"distance": 0.7394850462879035, "cell_id": 3053411}, {"distance": 0.7426367056349401, "cell_id": 3015193}, {"distance": 0.7435231586901163, "cell_id": 3084230}, {"distance": 0.7573959361040019, "cell_id": 3089508}, {"distance": 0.7624460114018342, "cell_id": 3091946}, {"distance": 0.7674003389110673, "cell_id": 3049992}, {"distance": 0.7765415489004466, "cell_id": 3068411}, {"distance": 0.7775612968287066, "cell_id": 3083200}, {"distance": 0.7813509527829179, "cell_id": 3020181}, {"distance": 0.7879243324653826, "cell_id": 54857975}, {"distance": 0.7885444994272643, "cell_id": 3073908}, {"distance": 0.7990845129107136, "cell_id": 3015933}, {"distance": 0.8105623415059661, "cell_id": 3086576}, {"distance": 0.8120944713836518, "cell_id": 3071279}, {"distance": 0.8228635153334141, "cell_id": 3049688}, {"distance": 0.8233118505626431, "cell_id": 3015279}, {"distance": 0.8303040323096381, "cell_id": 3088788}, {"distance": 0.8322192712986768, "cell_id": 3132721}, {"distance": 0.8347996516384751, "cell_id": 3081066}, {"distance": 0.8370634997598123, "cell_id": 3073339}]} +{"cell_id": 50259815, "neighbors": [{"distance": 0.0, "cell_id": 50259815}, {"distance": 0.4665665133806972, "cell_id": 49716912}, {"distance": 0.47175960548017654, "cell_id": 42499964}, {"distance": 0.47175960548017654, "cell_id": 42840466}, {"distance": 0.4809471829443771, "cell_id": 43995824}, {"distance": 0.4865533623453324, "cell_id": 44225269}, {"distance": 0.48939609199324396, "cell_id": 54710259}, {"distance": 0.494949990752749, "cell_id": 49342277}, {"distance": 0.502590448347771, "cell_id": 50943424}, {"distance": 0.5127993501353153, "cell_id": 49246822}, {"distance": 0.5267394793981474, "cell_id": 49704118}, {"distance": 0.5280888635951967, "cell_id": 50932555}, {"distance": 0.5298905971322815, "cell_id": 50871035}, {"distance": 0.5327786068714386, "cell_id": 48467427}, {"distance": 0.5335596432556128, "cell_id": 53525132}, {"distance": 0.5358108247730187, "cell_id": 50103449}, {"distance": 0.5360831233691946, "cell_id": 49156482}, {"distance": 0.5390616845009851, "cell_id": 20901404}, {"distance": 0.5433052052385646, "cell_id": 44066172}, {"distance": 0.5483657552007595, "cell_id": 49671597}, {"distance": 0.5491996317549287, "cell_id": 50920539}, {"distance": 0.5500794812712274, "cell_id": 50799304}, {"distance": 0.5509039012381665, "cell_id": 20901918}, {"distance": 0.551881849949525, "cell_id": 44450562}, {"distance": 0.5519225863942564, "cell_id": 16092408}]} +{"cell_id": 42255869, "neighbors": [{"distance": 0.0, "cell_id": 42255869}, {"distance": 0.6211045753609936, "cell_id": 33112638}, {"distance": 0.7598779625893921, "cell_id": 30565883}, {"distance": 0.7598779625893921, "cell_id": 31199441}, {"distance": 0.7746631137785531, "cell_id": 42270997}, {"distance": 0.7772834838460019, "cell_id": 42231794}, {"distance": 0.7778702853227468, "cell_id": 42271557}, {"distance": 0.8122148058827116, "cell_id": 9305231}, {"distance": 0.8122148058827116, "cell_id": 12666939}, {"distance": 0.8367783326280193, "cell_id": 42249522}, {"distance": 0.8476033289907359, "cell_id": 42265359}, {"distance": 0.8534433713351914, "cell_id": 42268649}, {"distance": 0.856168158993878, "cell_id": 30355817}, {"distance": 0.856168158993878, "cell_id": 31131217}, {"distance": 0.8574751750653401, "cell_id": 42250696}, {"distance": 0.8614885298331174, "cell_id": 42298862}, {"distance": 0.8707161943273007, "cell_id": 30355371}, {"distance": 0.8707161943273007, "cell_id": 31130771}, {"distance": 0.8812699414467022, "cell_id": 42255695}, {"distance": 0.8870692837122129, "cell_id": 42271290}, {"distance": 0.889481745697294, "cell_id": 42255290}, {"distance": 0.8961367978071566, "cell_id": 42255497}, {"distance": 0.9065199466702347, "cell_id": 42226055}, {"distance": 0.9098096327807442, "cell_id": 9303787}, {"distance": 0.9098096327807442, "cell_id": 12665495}]} +{"cell_id": 23031496, "neighbors": [{"distance": 0.0, "cell_id": 23031496}, {"distance": 0.7701697667351343, "cell_id": 23032661}, {"distance": 0.939318873987308, "cell_id": 23032024}, {"distance": 1.0283950189372664, "cell_id": 23032130}, {"distance": 1.0506817926835303, "cell_id": 23031259}, {"distance": 1.0515165389695211, "cell_id": 23032925}, {"distance": 1.0805400202158109, "cell_id": 23031012}, {"distance": 1.0902227849365007, "cell_id": 23031672}, {"distance": 1.0930595828645366, "cell_id": 23031823}, {"distance": 1.1152254932177157, "cell_id": 23032404}, {"distance": 1.1566972737787893, "cell_id": 23037053}, {"distance": 1.2017185947020752, "cell_id": 23033423}, {"distance": 1.202108283266181, "cell_id": 23031250}, {"distance": 1.212471755362381, "cell_id": 23035392}, {"distance": 1.2134093202549279, "cell_id": 23031526}, {"distance": 1.2251893385306178, "cell_id": 23032873}, {"distance": 1.2282231330893842, "cell_id": 23032914}, {"distance": 1.2343098205854557, "cell_id": 23032365}, {"distance": 1.2357748354372158, "cell_id": 23031756}, {"distance": 1.2456350904517675, "cell_id": 23032658}, {"distance": 1.2513380609578546, "cell_id": 36269617}, {"distance": 1.253091242844294, "cell_id": 23032138}, {"distance": 1.2587268991231146, "cell_id": 23035313}, {"distance": 1.2628407312490992, "cell_id": 23032921}, {"distance": 1.2658010921113947, "cell_id": 23033364}]} +{"cell_id": 58670169, "neighbors": [{"distance": 0.0, "cell_id": 58670169}, {"distance": 0.0, "cell_id": 59889126}, {"distance": 0.5195104379169908, "cell_id": 58630410}, {"distance": 0.5745081948526636, "cell_id": 58775450}, {"distance": 0.628179654321301, "cell_id": 58779138}, {"distance": 0.6441330992312582, "cell_id": 58670070}, {"distance": 0.6953855639611485, "cell_id": 58736904}, {"distance": 0.6959969547743052, "cell_id": 58688194}, {"distance": 0.6980793956260268, "cell_id": 58733482}, {"distance": 0.7081327142537599, "cell_id": 58653842}, {"distance": 0.7096506258576525, "cell_id": 58711054}, {"distance": 0.7108936818741253, "cell_id": 58727140}, {"distance": 0.7113185023249674, "cell_id": 58638607}, {"distance": 0.7159694417652266, "cell_id": 58633595}, {"distance": 0.7187356721768446, "cell_id": 58709483}, {"distance": 0.7187356721768446, "cell_id": 59898900}, {"distance": 0.7252637432103544, "cell_id": 58680265}, {"distance": 0.7276595238664447, "cell_id": 58615242}, {"distance": 0.7303753206934293, "cell_id": 58698427}, {"distance": 0.7370530332329078, "cell_id": 58704050}, {"distance": 0.7403738092249024, "cell_id": 58711579}, {"distance": 0.7404540390461167, "cell_id": 58602188}, {"distance": 0.7419821772487912, "cell_id": 58707165}, {"distance": 0.7419821772487912, "cell_id": 59898305}, {"distance": 0.7464845205911308, "cell_id": 58689813}]} +{"cell_id": 35197267, "neighbors": [{"distance": 0.0, "cell_id": 35197267}, {"distance": 0.5198027842015553, "cell_id": 44099935}, {"distance": 0.5489923509017703, "cell_id": 35197730}, {"distance": 0.5568397272169866, "cell_id": 35315778}, {"distance": 0.5897740855500684, "cell_id": 35199449}, {"distance": 0.597191445274552, "cell_id": 51324697}, {"distance": 0.6080782342392664, "cell_id": 44921364}, {"distance": 0.6176488256972791, "cell_id": 44104682}, {"distance": 0.6198292137833155, "cell_id": 17239549}, {"distance": 0.6198292137833155, "cell_id": 17294081}, {"distance": 0.6198778827377847, "cell_id": 44327135}, {"distance": 0.6227627669795563, "cell_id": 49194800}, {"distance": 0.6324143487659527, "cell_id": 35844217}, {"distance": 0.6328770571758433, "cell_id": 15666491}, {"distance": 0.644878126602745, "cell_id": 16102971}, {"distance": 0.652758243251866, "cell_id": 33667099}, {"distance": 0.652758243251866, "cell_id": 34559395}, {"distance": 0.6590647852563508, "cell_id": 44060255}, {"distance": 0.6604888096397385, "cell_id": 48519451}, {"distance": 0.6616987707746845, "cell_id": 44026421}, {"distance": 0.6686269054047427, "cell_id": 44386358}, {"distance": 0.6692690364488023, "cell_id": 33653676}, {"distance": 0.6692690364488023, "cell_id": 34545972}, {"distance": 0.6697380665292966, "cell_id": 16746763}, {"distance": 0.6719086927535023, "cell_id": 44450575}]} +{"cell_id": 13409496, "neighbors": [{"distance": 0.0, "cell_id": 13409496}, {"distance": 0.510045869493309, "cell_id": 14090901}, {"distance": 0.635275228096588, "cell_id": 45796658}, {"distance": 0.635275228096588, "cell_id": 53238994}, {"distance": 0.6376851873800936, "cell_id": 45760254}, {"distance": 0.6376851873800936, "cell_id": 53202593}, {"distance": 0.6507549156083132, "cell_id": 14175666}, {"distance": 0.6559347330444714, "cell_id": 14657105}, {"distance": 0.6585403120176514, "cell_id": 35337342}, {"distance": 0.6812754680017791, "cell_id": 15466186}, {"distance": 0.6864043240797892, "cell_id": 13661393}, {"distance": 0.6891794014772352, "cell_id": 13498332}, {"distance": 0.6939239883191547, "cell_id": 14157498}, {"distance": 0.6990654012299233, "cell_id": 14688445}, {"distance": 0.7011192440962893, "cell_id": 44687159}, {"distance": 0.7031724871922469, "cell_id": 35337610}, {"distance": 0.719727147034362, "cell_id": 15635567}, {"distance": 0.7222417722494934, "cell_id": 14022257}, {"distance": 0.7306575395245148, "cell_id": 14154874}, {"distance": 0.7379577776574411, "cell_id": 13682610}, {"distance": 0.7382308628965903, "cell_id": 35353476}, {"distance": 0.7419769652783939, "cell_id": 14689715}, {"distance": 0.7423341028306105, "cell_id": 14228775}, {"distance": 0.7460670313886428, "cell_id": 14328884}, {"distance": 0.7501700108047921, "cell_id": 15563651}]} +{"cell_id": 48900700, "neighbors": [{"distance": 0.0, "cell_id": 48900700}, {"distance": 0.5195598583533968, "cell_id": 48901762}, {"distance": 0.6405607949127488, "cell_id": 39840193}, {"distance": 0.678020526674776, "cell_id": 48633989}, {"distance": 0.7165814325200984, "cell_id": 48901804}, {"distance": 0.7236669022483474, "cell_id": 48901325}, {"distance": 0.7258579785907489, "cell_id": 62618895}, {"distance": 0.7425526663695166, "cell_id": 48903607}, {"distance": 0.7452216596881912, "cell_id": 39257942}, {"distance": 0.7452216596881912, "cell_id": 39506549}, {"distance": 0.7471917385929299, "cell_id": 39315642}, {"distance": 0.7471917385929299, "cell_id": 39567666}, {"distance": 0.7549166918029145, "cell_id": 39828310}, {"distance": 0.7597668516935967, "cell_id": 48901101}, {"distance": 0.7622777843679364, "cell_id": 39826141}, {"distance": 0.7635720904642186, "cell_id": 48901730}, {"distance": 0.7663821926883784, "cell_id": 39829961}, {"distance": 0.7672460931149864, "cell_id": 48901926}, {"distance": 0.7714480708101916, "cell_id": 48900568}, {"distance": 0.7742748781460069, "cell_id": 48901106}, {"distance": 0.7772777812984732, "cell_id": 48901946}, {"distance": 0.777833054503658, "cell_id": 48901162}, {"distance": 0.7788236459958885, "cell_id": 39324828}, {"distance": 0.7788236459958885, "cell_id": 39511459}, {"distance": 0.7817598120270497, "cell_id": 30556022}]} +{"cell_id": 39323340, "neighbors": [{"distance": 0.0, "cell_id": 39323340}, {"distance": 0.0, "cell_id": 39511101}, {"distance": 0.3005629533417228, "cell_id": 30438221}, {"distance": 0.3005629533417228, "cell_id": 31414519}, {"distance": 0.3005629533417228, "cell_id": 31915579}, {"distance": 0.3005629533417228, "cell_id": 32380912}, {"distance": 0.32438595877982856, "cell_id": 39329150}, {"distance": 0.32438595877982856, "cell_id": 39512533}, {"distance": 0.4101281341092939, "cell_id": 39329674}, {"distance": 0.42967780597092486, "cell_id": 30437598}, {"distance": 0.42967780597092486, "cell_id": 31413940}, {"distance": 0.42967780597092486, "cell_id": 31914990}, {"distance": 0.42967780597092486, "cell_id": 32380326}, {"distance": 0.43027609958143526, "cell_id": 39318045}, {"distance": 0.43027609958143526, "cell_id": 39510542}, {"distance": 0.4404446411974253, "cell_id": 39327908}, {"distance": 0.4404446411974253, "cell_id": 39512227}, {"distance": 0.4600006965059356, "cell_id": 30436613}, {"distance": 0.4600006965059356, "cell_id": 31412986}, {"distance": 0.4600006965059356, "cell_id": 31710598}, {"distance": 0.4600006965059356, "cell_id": 31914029}, {"distance": 0.4600006965059356, "cell_id": 32379368}, {"distance": 0.4688550578095917, "cell_id": 30919755}, {"distance": 0.4688550578095917, "cell_id": 31502980}, {"distance": 0.4688550578095917, "cell_id": 31725803}]} +{"cell_id": 37084953, "neighbors": [{"distance": 0.0, "cell_id": 37010884}, {"distance": 0.0, "cell_id": 37084953}, {"distance": 0.6359168140070552, "cell_id": 37019584}, {"distance": 0.6359168140070552, "cell_id": 37093556}, {"distance": 0.7122135977773104, "cell_id": 37019190}, {"distance": 0.7122135977773104, "cell_id": 37093173}, {"distance": 0.7504135368517487, "cell_id": 37020569}, {"distance": 0.7504135368517487, "cell_id": 37094512}, {"distance": 0.7678247187128978, "cell_id": 37019168}, {"distance": 0.7678247187128978, "cell_id": 37093151}, {"distance": 0.7794252093134094, "cell_id": 37017656}, {"distance": 0.7794252093134094, "cell_id": 37091685}, {"distance": 0.7835250403193181, "cell_id": 37010244}, {"distance": 0.7835250403193181, "cell_id": 37084313}, {"distance": 0.7946705374984682, "cell_id": 37020314}, {"distance": 0.7946705374984682, "cell_id": 37094263}, {"distance": 0.8080659293522148, "cell_id": 36990110}, {"distance": 0.8080659293522148, "cell_id": 37064179}, {"distance": 0.8236093755976267, "cell_id": 37017107}, {"distance": 0.8236093755976267, "cell_id": 37091153}, {"distance": 0.8257567553555338, "cell_id": 36990590}, {"distance": 0.8257567553555338, "cell_id": 37064659}, {"distance": 0.8307403551565357, "cell_id": 37000897}, {"distance": 0.8307403551565357, "cell_id": 37074966}, {"distance": 0.8381027459380952, "cell_id": 36992821}]} +{"cell_id": 16210617, "neighbors": [{"distance": 0.0, "cell_id": 16210617}, {"distance": 0.4393396945609946, "cell_id": 16178566}, {"distance": 0.45543238933547, "cell_id": 43449079}, {"distance": 0.491873486502687, "cell_id": 51155780}, {"distance": 0.49816902585945877, "cell_id": 51161564}, {"distance": 0.5040169360703042, "cell_id": 43380077}, {"distance": 0.5189412809569013, "cell_id": 48369847}, {"distance": 0.5214193247005523, "cell_id": 16663348}, {"distance": 0.532814846908902, "cell_id": 44163204}, {"distance": 0.5410817657140069, "cell_id": 43369869}, {"distance": 0.5424447193680219, "cell_id": 43904683}, {"distance": 0.54694259495202, "cell_id": 44929363}, {"distance": 0.5530808698863597, "cell_id": 49943463}, {"distance": 0.561639524749243, "cell_id": 44150753}, {"distance": 0.5653215663275172, "cell_id": 44422089}, {"distance": 0.568019310702453, "cell_id": 46653972}, {"distance": 0.577148746778592, "cell_id": 44083046}, {"distance": 0.5786609517994973, "cell_id": 44466749}, {"distance": 0.5833834342269341, "cell_id": 43764717}, {"distance": 0.5837269186014171, "cell_id": 51205098}, {"distance": 0.5842195313738732, "cell_id": 51300278}, {"distance": 0.5853297140995162, "cell_id": 51164114}, {"distance": 0.5868829810849411, "cell_id": 51145637}, {"distance": 0.5898386744235523, "cell_id": 43563506}, {"distance": 0.5966612728731171, "cell_id": 12834140}]} +{"cell_id": 18089003, "neighbors": [{"distance": 0.0, "cell_id": 18089003}, {"distance": 0.0, "cell_id": 41278049}, {"distance": 0.6826274977146373, "cell_id": 5599504}, {"distance": 0.6826274977146373, "cell_id": 7184989}, {"distance": 0.7078568342130533, "cell_id": 18192387}, {"distance": 0.7078568342130533, "cell_id": 41283853}, {"distance": 0.721103844403711, "cell_id": 18471587}, {"distance": 0.721103844403711, "cell_id": 41300047}, {"distance": 0.7307796896690513, "cell_id": 6063926}, {"distance": 0.7307796896690513, "cell_id": 7168564}, {"distance": 0.7314857652288597, "cell_id": 17795334}, {"distance": 0.7314857652288597, "cell_id": 41277105}, {"distance": 0.7331857130747755, "cell_id": 18654242}, {"distance": 0.7331857130747755, "cell_id": 41279946}, {"distance": 0.7375886019386961, "cell_id": 18585326}, {"distance": 0.7375886019386961, "cell_id": 41282585}, {"distance": 0.7456091054521012, "cell_id": 4637272}, {"distance": 0.7485100253937493, "cell_id": 6216179}, {"distance": 0.7485100253937493, "cell_id": 7181931}, {"distance": 0.7563425338725165, "cell_id": 18018386}, {"distance": 0.7563425338725165, "cell_id": 41285903}, {"distance": 0.7635755242302971, "cell_id": 5336685}, {"distance": 0.7635755242302971, "cell_id": 7184018}, {"distance": 0.7732184113240901, "cell_id": 18214765}, {"distance": 0.7732184113240901, "cell_id": 41276721}]} +{"cell_id": 56635519, "neighbors": [{"distance": 0.0, "cell_id": 56635519}, {"distance": 0.0, "cell_id": 59387692}, {"distance": 0.23060652080341715, "cell_id": 57960344}, {"distance": 0.24386801753154894, "cell_id": 57885759}, {"distance": 0.24386801753154894, "cell_id": 59696003}, {"distance": 0.2580662568238009, "cell_id": 58062936}, {"distance": 0.2629030139447843, "cell_id": 56545137}, {"distance": 0.26408247411725916, "cell_id": 57250126}, {"distance": 0.26408247411725916, "cell_id": 59539356}, {"distance": 0.26896626752693764, "cell_id": 57758835}, {"distance": 0.27118742251194716, "cell_id": 56686217}, {"distance": 0.27200487906062776, "cell_id": 57307362}, {"distance": 0.27200487906062776, "cell_id": 59553419}, {"distance": 0.27866696624437115, "cell_id": 57417452}, {"distance": 0.27866696624437115, "cell_id": 59580406}, {"distance": 0.28383811286575794, "cell_id": 56519897}, {"distance": 0.2864090765052567, "cell_id": 57523099}, {"distance": 0.2875157241488775, "cell_id": 57508396}, {"distance": 0.294659336994404, "cell_id": 56581303}, {"distance": 0.295739142091147, "cell_id": 57346829}, {"distance": 0.2959143502054007, "cell_id": 57651045}, {"distance": 0.3013194980905566, "cell_id": 57590875}, {"distance": 0.30625114878969373, "cell_id": 56953713}, {"distance": 0.3072022397109126, "cell_id": 57671193}, {"distance": 0.3072022397109126, "cell_id": 59643212}]} +{"cell_id": 5986458, "neighbors": [{"distance": 0.0, "cell_id": 4895766}, {"distance": 0.0, "cell_id": 5986458}, {"distance": 0.5896779634230227, "cell_id": 588645}, {"distance": 0.5896779634230227, "cell_id": 2169538}, {"distance": 0.6487781256043479, "cell_id": 592045}, {"distance": 0.6487781256043479, "cell_id": 1659544}, {"distance": 0.6488541826514141, "cell_id": 4897968}, {"distance": 0.6488541826514141, "cell_id": 6026713}, {"distance": 0.6589238496588009, "cell_id": 587978}, {"distance": 0.6589238496588009, "cell_id": 2168871}, {"distance": 0.6872851143394534, "cell_id": 18481495}, {"distance": 0.6872851143394534, "cell_id": 41326403}, {"distance": 0.6889204624752643, "cell_id": 561135}, {"distance": 0.6889204624752643, "cell_id": 1803459}, {"distance": 0.7002973570795211, "cell_id": 587717}, {"distance": 0.7002973570795211, "cell_id": 2168610}, {"distance": 0.7021069404410026, "cell_id": 171402}, {"distance": 0.7021069404410026, "cell_id": 536112}, {"distance": 0.7045976367410797, "cell_id": 588818}, {"distance": 0.7045976367410797, "cell_id": 2169711}, {"distance": 0.7181881271991363, "cell_id": 587932}, {"distance": 0.7181881271991363, "cell_id": 2168825}, {"distance": 0.7214925670978747, "cell_id": 419381}, {"distance": 0.7214925670978747, "cell_id": 555079}, {"distance": 0.7314593852995386, "cell_id": 549231}]} +{"cell_id": 52064871, "neighbors": [{"distance": 0.0, "cell_id": 8599841}, {"distance": 0.0, "cell_id": 52064871}, {"distance": 0.0, "cell_id": 52496544}, {"distance": 0.8772568693748752, "cell_id": 7987439}, {"distance": 1.4161158901216995, "cell_id": 8952432}, {"distance": 1.4161158901216995, "cell_id": 12375515}, {"distance": 1.4305157958079975, "cell_id": 14894385}, {"distance": 1.5257372639575615, "cell_id": 14181927}, {"distance": 1.539206178398257, "cell_id": 18900594}, {"distance": 1.578794697760199, "cell_id": 30596039}, {"distance": 1.578794697760199, "cell_id": 31211984}, {"distance": 1.579524994215551, "cell_id": 7987396}, {"distance": 1.5887482877862082, "cell_id": 8609390}, {"distance": 1.5887482877862082, "cell_id": 52074420}, {"distance": 1.5887482877862082, "cell_id": 52499290}, {"distance": 1.620108693712842, "cell_id": 14244178}, {"distance": 1.637337315813669, "cell_id": 16820306}, {"distance": 1.6431949816354363, "cell_id": 8616020}, {"distance": 1.6431949816354363, "cell_id": 52081050}, {"distance": 1.6431949816354363, "cell_id": 52500372}, {"distance": 1.643473636299484, "cell_id": 8333898}, {"distance": 1.643473636299484, "cell_id": 51981404}, {"distance": 1.643473636299484, "cell_id": 52493246}, {"distance": 1.6799439665145453, "cell_id": 21416721}, {"distance": 1.7044119705356915, "cell_id": 13550463}]} +{"cell_id": 37446172, "neighbors": [{"distance": 0.0, "cell_id": 37446172}, {"distance": 0.49523000538780376, "cell_id": 37702097}, {"distance": 0.49523000538780376, "cell_id": 38694310}, {"distance": 0.5109076507493496, "cell_id": 37684731}, {"distance": 0.5109076507493496, "cell_id": 38642866}, {"distance": 0.5248157151860108, "cell_id": 2733307}, {"distance": 0.5286864343649069, "cell_id": 40301950}, {"distance": 0.5310129800879919, "cell_id": 4053609}, {"distance": 0.5430228380142398, "cell_id": 2773212}, {"distance": 0.5484419329922569, "cell_id": 37593545}, {"distance": 0.5484419329922569, "cell_id": 38357832}, {"distance": 0.5622986115474647, "cell_id": 37443822}, {"distance": 0.5674772642857941, "cell_id": 47226542}, {"distance": 0.5674772642857941, "cell_id": 47531194}, {"distance": 0.5685584905248262, "cell_id": 37647608}, {"distance": 0.5685584905248262, "cell_id": 38521486}, {"distance": 0.5719752175135308, "cell_id": 37275694}, {"distance": 0.5748152274856402, "cell_id": 37308656}, {"distance": 0.578456578453342, "cell_id": 37322970}, {"distance": 0.5847165391202409, "cell_id": 37264861}, {"distance": 0.5847844533895662, "cell_id": 37305293}, {"distance": 0.5887064713081598, "cell_id": 37489331}, {"distance": 0.5887064713081598, "cell_id": 38052927}, {"distance": 0.591024509863269, "cell_id": 37737231}, {"distance": 0.591024509863269, "cell_id": 38796584}]} +{"cell_id": 34645682, "neighbors": [{"distance": 0.0, "cell_id": 33753386}, {"distance": 0.0, "cell_id": 34645682}, {"distance": 0.7017146756715354, "cell_id": 46709943}, {"distance": 0.732632511648059, "cell_id": 48528434}, {"distance": 0.7664481715887002, "cell_id": 61481788}, {"distance": 0.8110620579866086, "cell_id": 44512495}, {"distance": 0.8111247895165715, "cell_id": 21202883}, {"distance": 0.8245483655402699, "cell_id": 46251821}, {"distance": 0.8422265673925369, "cell_id": 16827779}, {"distance": 0.8428521603399897, "cell_id": 62823081}, {"distance": 0.8569441392602393, "cell_id": 44460542}, {"distance": 0.8598681303394557, "cell_id": 43626643}, {"distance": 0.8615336071194224, "cell_id": 43478665}, {"distance": 0.8650526540696472, "cell_id": 49051350}, {"distance": 0.8735912742451409, "cell_id": 44608972}, {"distance": 0.8748581041366331, "cell_id": 43471753}, {"distance": 0.8767503161325088, "cell_id": 61482096}, {"distance": 0.8818404865875288, "cell_id": 46309525}, {"distance": 0.8887048693716855, "cell_id": 50939359}, {"distance": 0.8893193977191719, "cell_id": 43875483}, {"distance": 0.890330356232218, "cell_id": 8633574}, {"distance": 0.890330356232218, "cell_id": 51801601}, {"distance": 0.890330356232218, "cell_id": 52291535}, {"distance": 0.8906700003275675, "cell_id": 33728779}, {"distance": 0.8906700003275675, "cell_id": 34621075}]} +{"cell_id": 53518778, "neighbors": [{"distance": 0.0, "cell_id": 53518778}, {"distance": 0.5269604474744547, "cell_id": 16561628}, {"distance": 0.540712078216867, "cell_id": 16347734}, {"distance": 0.549569995195764, "cell_id": 48109568}, {"distance": 0.5509759488802001, "cell_id": 48109575}, {"distance": 0.5625702080379268, "cell_id": 47561964}, {"distance": 0.5625702080379268, "cell_id": 61925749}, {"distance": 0.5773356431633125, "cell_id": 53518147}, {"distance": 0.5838006731074896, "cell_id": 53915486}, {"distance": 0.5843611297166441, "cell_id": 48110404}, {"distance": 0.5883360757457692, "cell_id": 53629229}, {"distance": 0.5929931355667969, "cell_id": 54655294}, {"distance": 0.5933479212084047, "cell_id": 16347780}, {"distance": 0.5939866738139721, "cell_id": 61997467}, {"distance": 0.6010117722227635, "cell_id": 16508948}, {"distance": 0.6047430492452776, "cell_id": 48157592}, {"distance": 0.6122844492348588, "cell_id": 53894850}, {"distance": 0.6167037094310007, "cell_id": 54679693}, {"distance": 0.6223203516910496, "cell_id": 53537466}, {"distance": 0.624395356992363, "cell_id": 16528080}, {"distance": 0.6269632424042586, "cell_id": 53707651}, {"distance": 0.6302146572740464, "cell_id": 48109372}, {"distance": 0.630317506455148, "cell_id": 54359839}, {"distance": 0.6307726627878651, "cell_id": 53617387}, {"distance": 0.632842996050233, "cell_id": 48108917}]} +{"cell_id": 35966857, "neighbors": [{"distance": 0.0, "cell_id": 35628293}, {"distance": 0.0, "cell_id": 35966857}, {"distance": 0.8272174498198284, "cell_id": 35522001}, {"distance": 0.8272174498198284, "cell_id": 35860565}, {"distance": 0.8419511303786827, "cell_id": 40700195}, {"distance": 0.8419511303786827, "cell_id": 40971074}, {"distance": 0.9143757108354325, "cell_id": 35629904}, {"distance": 0.9143757108354325, "cell_id": 35968468}, {"distance": 0.9332159233592723, "cell_id": 40695806}, {"distance": 0.9332159233592723, "cell_id": 40967356}, {"distance": 0.9540981682881319, "cell_id": 35630323}, {"distance": 0.9540981682881319, "cell_id": 35968887}, {"distance": 0.9801283796145477, "cell_id": 40692687}, {"distance": 0.9801283796145477, "cell_id": 40964699}, {"distance": 1.0094364582588642, "cell_id": 35630215}, {"distance": 1.0094364582588642, "cell_id": 35968779}, {"distance": 1.0230118680493312, "cell_id": 40711072}, {"distance": 1.0230118680493312, "cell_id": 40980305}, {"distance": 1.0336240431729826, "cell_id": 22634641}, {"distance": 1.042881212580461, "cell_id": 40655258}, {"distance": 1.042881212580461, "cell_id": 40932992}, {"distance": 1.0540580901892223, "cell_id": 40695624}, {"distance": 1.0540580901892223, "cell_id": 40967201}, {"distance": 1.0693565263366824, "cell_id": 22634697}, {"distance": 1.0712763073666225, "cell_id": 22634633}]} +{"cell_id": 54154148, "neighbors": [{"distance": 0.0, "cell_id": 54154148}, {"distance": 0.4478351769608494, "cell_id": 54079253}, {"distance": 0.45929296045836243, "cell_id": 54134320}, {"distance": 0.45938080817937876, "cell_id": 54109749}, {"distance": 0.5034229940904263, "cell_id": 54111974}, {"distance": 0.5087423706480712, "cell_id": 54382416}, {"distance": 0.534873263093529, "cell_id": 54128833}, {"distance": 0.5350289541170985, "cell_id": 54134366}, {"distance": 0.5362534901468372, "cell_id": 54153011}, {"distance": 0.5420022197188572, "cell_id": 54137114}, {"distance": 0.542035157796359, "cell_id": 54526466}, {"distance": 0.5534053861655035, "cell_id": 54757469}, {"distance": 0.5586695053136892, "cell_id": 54087652}, {"distance": 0.5640045335719731, "cell_id": 54380765}, {"distance": 0.56407239525692, "cell_id": 54111652}, {"distance": 0.573673606888336, "cell_id": 54382507}, {"distance": 0.5778976841590258, "cell_id": 54798557}, {"distance": 0.5788655620579118, "cell_id": 54087213}, {"distance": 0.5839106668380172, "cell_id": 54108649}, {"distance": 0.5857584663797756, "cell_id": 54151508}, {"distance": 0.5873431164804641, "cell_id": 54114066}, {"distance": 0.5894031472718699, "cell_id": 54144845}, {"distance": 0.5920024564221235, "cell_id": 54110062}, {"distance": 0.5944656508229328, "cell_id": 54111254}, {"distance": 0.5960463596580917, "cell_id": 54115984}]} +{"cell_id": 51840785, "neighbors": [{"distance": 0.0, "cell_id": 8708799}, {"distance": 0.0, "cell_id": 51840785}, {"distance": 0.0, "cell_id": 52317447}, {"distance": 0.43328526508975523, "cell_id": 30127283}, {"distance": 0.5477685545343625, "cell_id": 47674669}, {"distance": 0.5477685545343625, "cell_id": 47734407}, {"distance": 0.5795856247184947, "cell_id": 13168369}, {"distance": 0.5795856247184947, "cell_id": 13346836}, {"distance": 0.5799205416395177, "cell_id": 48287257}, {"distance": 0.5904376769156618, "cell_id": 35466151}, {"distance": 0.5932660636941421, "cell_id": 7848150}, {"distance": 0.5987651196923862, "cell_id": 18907216}, {"distance": 0.6082035709455041, "cell_id": 13154497}, {"distance": 0.6082035709455041, "cell_id": 13339398}, {"distance": 0.6141201795057931, "cell_id": 33912057}, {"distance": 0.6141201795057931, "cell_id": 34804353}, {"distance": 0.6198025149902414, "cell_id": 13896069}, {"distance": 0.623166546495952, "cell_id": 14431555}, {"distance": 0.6363340402576686, "cell_id": 36495167}, {"distance": 0.6409424999721731, "cell_id": 3797550}, {"distance": 0.6487698944682706, "cell_id": 13168141}, {"distance": 0.6487698944682706, "cell_id": 13346608}, {"distance": 0.6638572002576121, "cell_id": 39678324}, {"distance": 0.6638770039448543, "cell_id": 61891360}, {"distance": 0.6638770039448543, "cell_id": 62281511}]} +{"cell_id": 15912605, "neighbors": [{"distance": 0.0, "cell_id": 15912605}, {"distance": 0.4766138639958217, "cell_id": 48405290}, {"distance": 0.520554197439616, "cell_id": 15785776}, {"distance": 0.5217709383464493, "cell_id": 48007209}, {"distance": 0.5365955514483315, "cell_id": 45164523}, {"distance": 0.5431941502506691, "cell_id": 45008041}, {"distance": 0.5447409165729471, "cell_id": 45144013}, {"distance": 0.5559913630308797, "cell_id": 16575266}, {"distance": 0.5562505262827276, "cell_id": 45159734}, {"distance": 0.5566106083072555, "cell_id": 15909391}, {"distance": 0.5579797416375115, "cell_id": 15918214}, {"distance": 0.5614376012105968, "cell_id": 15814875}, {"distance": 0.5615430971091727, "cell_id": 15747560}, {"distance": 0.570679058213769, "cell_id": 48393561}, {"distance": 0.5731844180095674, "cell_id": 48386855}, {"distance": 0.5742215521640215, "cell_id": 16596063}, {"distance": 0.5748008774518668, "cell_id": 46404867}, {"distance": 0.5788804809550151, "cell_id": 46359307}, {"distance": 0.5807776934418497, "cell_id": 15806455}, {"distance": 0.5815155305491535, "cell_id": 45165182}, {"distance": 0.5839469837044045, "cell_id": 15928656}, {"distance": 0.5849399725618516, "cell_id": 15788865}, {"distance": 0.5851227401481093, "cell_id": 15752814}, {"distance": 0.5890413962214553, "cell_id": 45052495}, {"distance": 0.5897295566004632, "cell_id": 15710893}]} +{"cell_id": 49658246, "neighbors": [{"distance": 0.0, "cell_id": 49658246}, {"distance": 0.4904767847829311, "cell_id": 49461551}, {"distance": 0.49596596693487766, "cell_id": 43414584}, {"distance": 0.5147908602855835, "cell_id": 44502819}, {"distance": 0.5300285241084579, "cell_id": 43808827}, {"distance": 0.5522913717274639, "cell_id": 51357414}, {"distance": 0.5568261480018297, "cell_id": 51297526}, {"distance": 0.5583456880917697, "cell_id": 50843558}, {"distance": 0.5590025960543499, "cell_id": 43600746}, {"distance": 0.5678868140654274, "cell_id": 62041199}, {"distance": 0.5755737606728137, "cell_id": 49537518}, {"distance": 0.5804249830403644, "cell_id": 43848214}, {"distance": 0.5843418213658171, "cell_id": 50266556}, {"distance": 0.5844250763107033, "cell_id": 49144887}, {"distance": 0.5859170884210482, "cell_id": 54036075}, {"distance": 0.588054880398494, "cell_id": 50297614}, {"distance": 0.5897267451659528, "cell_id": 44215717}, {"distance": 0.5905720196868144, "cell_id": 49702422}, {"distance": 0.590989632349303, "cell_id": 49567790}, {"distance": 0.592742323584074, "cell_id": 43490429}, {"distance": 0.5971804992314743, "cell_id": 54111806}, {"distance": 0.601433220653065, "cell_id": 50152136}, {"distance": 0.6036783565849106, "cell_id": 49319218}, {"distance": 0.6053040016503823, "cell_id": 53745611}, {"distance": 0.6111210543277551, "cell_id": 54517824}]} +{"cell_id": 4317164, "neighbors": [{"distance": 0.0, "cell_id": 4317164}, {"distance": 0.46702833612516403, "cell_id": 4334225}, {"distance": 0.6351511143750957, "cell_id": 4244518}, {"distance": 0.6418557927183001, "cell_id": 4341796}, {"distance": 0.6647284897398255, "cell_id": 4315197}, {"distance": 0.673365502069879, "cell_id": 4357299}, {"distance": 0.6811906409062776, "cell_id": 4343184}, {"distance": 0.6826823695716288, "cell_id": 4318031}, {"distance": 0.6839221513016241, "cell_id": 4315866}, {"distance": 0.691061004708622, "cell_id": 4317449}, {"distance": 0.692996952784642, "cell_id": 4341673}, {"distance": 0.6977512714004374, "cell_id": 4318019}, {"distance": 0.6977557177265226, "cell_id": 4342652}, {"distance": 0.7036569391378299, "cell_id": 4315354}, {"distance": 0.7069138350101347, "cell_id": 4243882}, {"distance": 0.7199990475688601, "cell_id": 4318097}, {"distance": 0.720829072366339, "cell_id": 4314671}, {"distance": 0.7245093031663518, "cell_id": 4315962}, {"distance": 0.740394745702159, "cell_id": 4314973}, {"distance": 0.7413472315427225, "cell_id": 4318658}, {"distance": 0.7460083948515464, "cell_id": 4355627}, {"distance": 0.7489964191579077, "cell_id": 4250431}, {"distance": 0.7498947559945428, "cell_id": 4355317}, {"distance": 0.7551400848190399, "cell_id": 4342283}, {"distance": 0.7625457022418821, "cell_id": 4342835}]} +{"cell_id": 44034707, "neighbors": [{"distance": 0.0, "cell_id": 44034707}, {"distance": 0.7800307715150112, "cell_id": 35194148}, {"distance": 0.8094016602771666, "cell_id": 44325392}, {"distance": 0.8112879874079513, "cell_id": 46596671}, {"distance": 0.819728528568567, "cell_id": 33830149}, {"distance": 0.819728528568567, "cell_id": 34722445}, {"distance": 0.827602415167194, "cell_id": 49793590}, {"distance": 0.8434253627529301, "cell_id": 21280593}, {"distance": 0.8481973710063165, "cell_id": 20979738}, {"distance": 0.8585721341535882, "cell_id": 21245730}, {"distance": 0.8627173717146395, "cell_id": 49206126}, {"distance": 0.864766154448192, "cell_id": 20954545}, {"distance": 0.8745840517901007, "cell_id": 22308427}, {"distance": 0.8745840517901007, "cell_id": 22340735}, {"distance": 0.8825662807576243, "cell_id": 21288836}, {"distance": 0.8922702315985815, "cell_id": 21263464}, {"distance": 0.8927489255716217, "cell_id": 21268940}, {"distance": 0.9043484559879504, "cell_id": 21273008}, {"distance": 0.9610752775644821, "cell_id": 21272254}, {"distance": 0.9612460953979909, "cell_id": 49107045}, {"distance": 0.9626487144602288, "cell_id": 46142221}, {"distance": 0.9686106071978234, "cell_id": 21244879}, {"distance": 0.969071159847528, "cell_id": 21283651}, {"distance": 0.972835245749066, "cell_id": 33551536}, {"distance": 0.972835245749066, "cell_id": 34443832}]} +{"cell_id": 58373666, "neighbors": [{"distance": 0.0, "cell_id": 58373666}, {"distance": 0.6240690131119087, "cell_id": 54910465}, {"distance": 0.6240690131119087, "cell_id": 58962922}, {"distance": 0.6332818404068007, "cell_id": 58427317}, {"distance": 0.6332818404068007, "cell_id": 59829495}, {"distance": 0.6404174347531458, "cell_id": 54945753}, {"distance": 0.65299444102401, "cell_id": 58335837}, {"distance": 0.65299444102401, "cell_id": 59806718}, {"distance": 0.6569460433667005, "cell_id": 54907390}, {"distance": 0.6670011101664637, "cell_id": 58443545}, {"distance": 0.6780490103416653, "cell_id": 58379245}, {"distance": 0.6887116492916537, "cell_id": 58450273}, {"distance": 0.6926367134581352, "cell_id": 54940131}, {"distance": 0.6926367134581352, "cell_id": 58970190}, {"distance": 0.6940022766493847, "cell_id": 58917740}, {"distance": 0.6943501312388421, "cell_id": 58439231}, {"distance": 0.6960646513278816, "cell_id": 58424452}, {"distance": 0.6960646513278816, "cell_id": 59828774}, {"distance": 0.699982149616709, "cell_id": 47100953}, {"distance": 0.699982149616709, "cell_id": 47405605}, {"distance": 0.7115533886332152, "cell_id": 58480710}, {"distance": 0.7130866366018418, "cell_id": 58535212}, {"distance": 0.720794001126334, "cell_id": 58393643}, {"distance": 0.728255863106289, "cell_id": 58385974}, {"distance": 0.7305608350789272, "cell_id": 54928949}]} +{"cell_id": 16239395, "neighbors": [{"distance": 0.0, "cell_id": 16239395}, {"distance": 0.4500096794328034, "cell_id": 16136473}, {"distance": 0.465456361731817, "cell_id": 16289379}, {"distance": 0.48901883328605855, "cell_id": 16156274}, {"distance": 0.49964053381229073, "cell_id": 16282009}, {"distance": 0.5032728845029087, "cell_id": 51282832}, {"distance": 0.5279911839310052, "cell_id": 16225961}, {"distance": 0.5341833079246434, "cell_id": 16210237}, {"distance": 0.5375350251942752, "cell_id": 16053927}, {"distance": 0.5486769081058682, "cell_id": 16247865}, {"distance": 0.549270770509114, "cell_id": 54425217}, {"distance": 0.5526639473441983, "cell_id": 15863648}, {"distance": 0.553056013480457, "cell_id": 16172481}, {"distance": 0.5552710720488763, "cell_id": 46829754}, {"distance": 0.5574070093653704, "cell_id": 49216161}, {"distance": 0.5619433655868701, "cell_id": 39665422}, {"distance": 0.5645842888680087, "cell_id": 51275140}, {"distance": 0.5666030966537565, "cell_id": 16246017}, {"distance": 0.5680996207372421, "cell_id": 16183695}, {"distance": 0.5736962363520435, "cell_id": 39729388}, {"distance": 0.575322689344505, "cell_id": 46692245}, {"distance": 0.5801539743270763, "cell_id": 15722365}, {"distance": 0.5801885079621569, "cell_id": 16069233}, {"distance": 0.5805399354862696, "cell_id": 61291832}, {"distance": 0.5877571769880094, "cell_id": 45093267}]} +{"cell_id": 46963648, "neighbors": [{"distance": 0.0, "cell_id": 46963648}, {"distance": 0.6999416575067836, "cell_id": 50098225}, {"distance": 0.7021525309132568, "cell_id": 46429084}, {"distance": 0.8384830774230889, "cell_id": 49172202}, {"distance": 0.8411579966156489, "cell_id": 49732833}, {"distance": 0.8419951817233379, "cell_id": 49176020}, {"distance": 0.8496556110292034, "cell_id": 46593741}, {"distance": 0.861402185123392, "cell_id": 50039566}, {"distance": 0.8651852721582705, "cell_id": 46796105}, {"distance": 0.8774329471653868, "cell_id": 50015824}, {"distance": 0.8922652694053707, "cell_id": 62830768}, {"distance": 0.8938805475346893, "cell_id": 49587255}, {"distance": 0.9035041898769194, "cell_id": 49162688}, {"distance": 0.9076073099240455, "cell_id": 49227766}, {"distance": 0.9080644318659475, "cell_id": 49865088}, {"distance": 0.9132082830676402, "cell_id": 46699333}, {"distance": 0.9137180708549526, "cell_id": 62011001}, {"distance": 0.9174439230368272, "cell_id": 62296481}, {"distance": 0.9178398381607951, "cell_id": 53785600}, {"distance": 0.9221594752875616, "cell_id": 46919616}, {"distance": 0.925282226804348, "cell_id": 49928434}, {"distance": 0.9257731511285741, "cell_id": 62830800}, {"distance": 0.9263358263740713, "cell_id": 50253354}, {"distance": 0.9301483908715144, "cell_id": 49600924}, {"distance": 0.9305793942477888, "cell_id": 49850906}]} +{"cell_id": 3116983, "neighbors": [{"distance": 0.0, "cell_id": 3116983}, {"distance": 0.0, "cell_id": 3145879}, {"distance": 0.34416422692309906, "cell_id": 16522338}, {"distance": 0.37863150969695664, "cell_id": 16440457}, {"distance": 0.3812450481930334, "cell_id": 15959550}, {"distance": 0.3819227814635634, "cell_id": 16566957}, {"distance": 0.388372350263063, "cell_id": 16430430}, {"distance": 0.39689741845308646, "cell_id": 16444425}, {"distance": 0.40776138332185324, "cell_id": 16585744}, {"distance": 0.4103411784343723, "cell_id": 16370801}, {"distance": 0.4111234047945965, "cell_id": 16347183}, {"distance": 0.4151597277755343, "cell_id": 16408912}, {"distance": 0.42593327177377405, "cell_id": 16449060}, {"distance": 0.43338782114415925, "cell_id": 16608979}, {"distance": 0.4336451755761541, "cell_id": 16419239}, {"distance": 0.43632108087584165, "cell_id": 16410792}, {"distance": 0.43659622156926337, "cell_id": 16083141}, {"distance": 0.4459626507084446, "cell_id": 16404186}, {"distance": 0.44860367516344163, "cell_id": 16699875}, {"distance": 0.449997609253039, "cell_id": 16348935}, {"distance": 0.45169821157314377, "cell_id": 16365622}, {"distance": 0.4535226319726998, "cell_id": 16718595}, {"distance": 0.4536960751732839, "cell_id": 16487676}, {"distance": 0.45391419173621356, "cell_id": 16414664}, {"distance": 0.4554685107155715, "cell_id": 16514518}]} +{"cell_id": 5361934, "neighbors": [{"distance": 0.0, "cell_id": 5361934}, {"distance": 0.0, "cell_id": 7000010}, {"distance": 0.4197257286452684, "cell_id": 17722971}, {"distance": 0.4197257286452684, "cell_id": 41845495}, {"distance": 0.5268411179985593, "cell_id": 18628511}, {"distance": 0.5268411179985593, "cell_id": 41841968}, {"distance": 0.5271435975525807, "cell_id": 5611836}, {"distance": 0.5271435975525807, "cell_id": 6957346}, {"distance": 0.5415456297870054, "cell_id": 18363268}, {"distance": 0.5415456297870054, "cell_id": 41767636}, {"distance": 0.5503425568051248, "cell_id": 18794895}, {"distance": 0.5503425568051248, "cell_id": 41817322}, {"distance": 0.5541950529975986, "cell_id": 18154785}, {"distance": 0.5541950529975986, "cell_id": 41774019}, {"distance": 0.5618325926309553, "cell_id": 10396134}, {"distance": 0.5618325926309553, "cell_id": 24311990}, {"distance": 0.5618325926309553, "cell_id": 24936467}, {"distance": 0.5803149555042596, "cell_id": 18103556}, {"distance": 0.5803149555042596, "cell_id": 41801283}, {"distance": 0.5983329907971183, "cell_id": 18552151}, {"distance": 0.5983329907971183, "cell_id": 41852414}, {"distance": 0.6054292777073591, "cell_id": 18616708}, {"distance": 0.6054292777073591, "cell_id": 41802313}, {"distance": 0.6066675332389525, "cell_id": 313124}, {"distance": 0.6066675332389525, "cell_id": 399553}]} +{"cell_id": 44315709, "neighbors": [{"distance": 0.0, "cell_id": 44315709}, {"distance": 0.32382232482076134, "cell_id": 50194290}, {"distance": 0.35359579652411277, "cell_id": 43757649}, {"distance": 0.36105556840142533, "cell_id": 49322022}, {"distance": 0.36979371904520403, "cell_id": 49057036}, {"distance": 0.37176888357250887, "cell_id": 49274118}, {"distance": 0.37466483647441945, "cell_id": 45018409}, {"distance": 0.3776370307228959, "cell_id": 49274254}, {"distance": 0.37910657622076666, "cell_id": 49929711}, {"distance": 0.3806772324805423, "cell_id": 49452155}, {"distance": 0.3807080426274856, "cell_id": 50185996}, {"distance": 0.38909397723032874, "cell_id": 44844650}, {"distance": 0.3908252128509743, "cell_id": 49772963}, {"distance": 0.3934773095100418, "cell_id": 54460216}, {"distance": 0.3944778058851891, "cell_id": 49203258}, {"distance": 0.3983746777440161, "cell_id": 49733982}, {"distance": 0.39976118116748954, "cell_id": 4713179}, {"distance": 0.40016610851852336, "cell_id": 49989014}, {"distance": 0.401894357224822, "cell_id": 43182567}, {"distance": 0.4031796403222918, "cell_id": 50242913}, {"distance": 0.4038282791545876, "cell_id": 49293855}, {"distance": 0.40410017613552995, "cell_id": 49754533}, {"distance": 0.404592589134686, "cell_id": 4704853}, {"distance": 0.4070293068725464, "cell_id": 49525279}, {"distance": 0.40898122733476655, "cell_id": 50008108}]} +{"cell_id": 4171108, "neighbors": [{"distance": 0.0, "cell_id": 4171108}, {"distance": 0.3876584215092317, "cell_id": 4162909}, {"distance": 0.392994821990619, "cell_id": 4168885}, {"distance": 0.4281757044593793, "cell_id": 4162936}, {"distance": 0.43141498761712843, "cell_id": 4161215}, {"distance": 0.43763909255180067, "cell_id": 4170608}, {"distance": 0.443481631136373, "cell_id": 4162063}, {"distance": 0.44525588176389724, "cell_id": 4161096}, {"distance": 0.4481236912521408, "cell_id": 4163144}, {"distance": 0.45401503904944734, "cell_id": 4168083}, {"distance": 0.4551421694065302, "cell_id": 4164674}, {"distance": 0.45638723952261673, "cell_id": 4167643}, {"distance": 0.4571851201167885, "cell_id": 4159385}, {"distance": 0.4639898978507569, "cell_id": 4157926}, {"distance": 0.47015441960794263, "cell_id": 4164582}, {"distance": 0.47192235335292215, "cell_id": 4161736}, {"distance": 0.4744699458923746, "cell_id": 4164933}, {"distance": 0.47669738257941624, "cell_id": 4158308}, {"distance": 0.47779967187612404, "cell_id": 4165421}, {"distance": 0.48183029183912285, "cell_id": 4167565}, {"distance": 0.4829712897592237, "cell_id": 4166679}, {"distance": 0.4843809816113329, "cell_id": 4164089}, {"distance": 0.4876832168560228, "cell_id": 4168433}, {"distance": 0.4909144909333049, "cell_id": 4165586}, {"distance": 0.4928681368216281, "cell_id": 4157519}]} +{"cell_id": 2868231, "neighbors": [{"distance": 0.0, "cell_id": 2868231}, {"distance": 0.32317331550681616, "cell_id": 60627466}, {"distance": 0.32317331550681616, "cell_id": 60886901}, {"distance": 0.3355778232105798, "cell_id": 2901348}, {"distance": 0.35196252813800527, "cell_id": 37267179}, {"distance": 0.35555920420632675, "cell_id": 37530679}, {"distance": 0.35555920420632675, "cell_id": 38141079}, {"distance": 0.35555920420632675, "cell_id": 60570288}, {"distance": 0.35555920420632675, "cell_id": 60731643}, {"distance": 0.3635667037937195, "cell_id": 37737212}, {"distance": 0.3635667037937195, "cell_id": 38796556}, {"distance": 0.3635667037937195, "cell_id": 60658155}, {"distance": 0.3635667037937195, "cell_id": 60978958}, {"distance": 0.3642652305801184, "cell_id": 2841460}, {"distance": 0.3653629517047247, "cell_id": 60753403}, {"distance": 0.36591900214676637, "cell_id": 37308703}, {"distance": 0.3760188851639122, "cell_id": 37537011}, {"distance": 0.3760188851639122, "cell_id": 38153523}, {"distance": 0.37708263806922976, "cell_id": 37459176}, {"distance": 0.37708263806922976, "cell_id": 37986912}, {"distance": 0.37916723739671965, "cell_id": 60581345}, {"distance": 0.38197166516744163, "cell_id": 60618108}, {"distance": 0.38197166516744163, "cell_id": 60861028}, {"distance": 0.3822981104306201, "cell_id": 37514373}, {"distance": 0.3822981104306201, "cell_id": 38097493}]} +{"cell_id": 58750419, "neighbors": [{"distance": 0.0, "cell_id": 58750419}, {"distance": 0.0, "cell_id": 59908978}, {"distance": 0.40396137215356387, "cell_id": 58711819}, {"distance": 0.4567686655548558, "cell_id": 58584230}, {"distance": 0.4567686655548558, "cell_id": 59868177}, {"distance": 0.4589838835172835, "cell_id": 58700911}, {"distance": 0.4589838835172835, "cell_id": 59896748}, {"distance": 0.4827247942008069, "cell_id": 58801160}, {"distance": 0.4827247942008069, "cell_id": 59921549}, {"distance": 0.48997378154187426, "cell_id": 58654561}, {"distance": 0.4992601087839751, "cell_id": 58775917}, {"distance": 0.5082938606595735, "cell_id": 58607300}, {"distance": 0.5144610849805823, "cell_id": 58615505}, {"distance": 0.5196712841400687, "cell_id": 58646337}, {"distance": 0.5203525177106222, "cell_id": 58690230}, {"distance": 0.5220563204295209, "cell_id": 58775123}, {"distance": 0.5258586981155171, "cell_id": 58690932}, {"distance": 0.5258586981155171, "cell_id": 59894310}, {"distance": 0.5312698105774705, "cell_id": 58770821}, {"distance": 0.5312698105774705, "cell_id": 59914037}, {"distance": 0.5327783686644778, "cell_id": 58281007}, {"distance": 0.5329956526925081, "cell_id": 58701334}, {"distance": 0.5329956526925081, "cell_id": 59896861}, {"distance": 0.5407044733358726, "cell_id": 58813002}, {"distance": 0.5465625891331506, "cell_id": 58713734}]} +{"cell_id": 55075544, "neighbors": [{"distance": 0.0, "cell_id": 55075544}, {"distance": 0.5284643428074185, "cell_id": 55056925}, {"distance": 0.5431581908415779, "cell_id": 55308351}, {"distance": 0.5431581908415779, "cell_id": 59060971}, {"distance": 0.5508158984973974, "cell_id": 55079281}, {"distance": 0.55919855659575, "cell_id": 55144972}, {"distance": 0.5613985166637556, "cell_id": 55141983}, {"distance": 0.5616101710617316, "cell_id": 55008146}, {"distance": 0.565099123299701, "cell_id": 55087441}, {"distance": 0.5986706347239505, "cell_id": 55102732}, {"distance": 0.5986706347239505, "cell_id": 59010333}, {"distance": 0.6148181612117699, "cell_id": 55035980}, {"distance": 0.6148181612117699, "cell_id": 58993932}, {"distance": 0.6329158942794391, "cell_id": 55064759}, {"distance": 0.6330670388139746, "cell_id": 55066532}, {"distance": 0.6330670388139746, "cell_id": 59001399}, {"distance": 0.634902832845149, "cell_id": 55107021}, {"distance": 0.63546567274548, "cell_id": 55128481}, {"distance": 0.6363516205966235, "cell_id": 55012703}, {"distance": 0.6363516205966235, "cell_id": 58988145}, {"distance": 0.6403125067553184, "cell_id": 55064094}, {"distance": 0.6422110594165181, "cell_id": 55225578}, {"distance": 0.6433087066001669, "cell_id": 55110767}, {"distance": 0.6469120454067767, "cell_id": 55256235}, {"distance": 0.6515664538555447, "cell_id": 55324490}]} +{"cell_id": 13856700, "neighbors": [{"distance": 0.0, "cell_id": 13856700}, {"distance": 0.7166486234071366, "cell_id": 14184123}, {"distance": 0.7257699952113488, "cell_id": 14872466}, {"distance": 0.8642485648009367, "cell_id": 44265417}, {"distance": 0.9180594029867643, "cell_id": 44565900}, {"distance": 0.9236499551514376, "cell_id": 13834958}, {"distance": 0.9284363220465486, "cell_id": 15421765}, {"distance": 0.9427200621507823, "cell_id": 15053041}, {"distance": 0.9440195995336694, "cell_id": 50927083}, {"distance": 0.9442137494851758, "cell_id": 15379369}, {"distance": 0.9500105902739892, "cell_id": 14624967}, {"distance": 0.9543230190548303, "cell_id": 54798398}, {"distance": 0.9614422767897421, "cell_id": 13841606}, {"distance": 0.9704117580507822, "cell_id": 14197926}, {"distance": 0.9740844101486165, "cell_id": 15509000}, {"distance": 0.9755574519245503, "cell_id": 14522192}, {"distance": 0.9762449369222445, "cell_id": 13506868}, {"distance": 0.9772573098074864, "cell_id": 50762020}, {"distance": 0.9781214352224111, "cell_id": 50959573}, {"distance": 0.9796720880409798, "cell_id": 54575557}, {"distance": 0.9811955811907181, "cell_id": 15047459}, {"distance": 0.9883407600149445, "cell_id": 14005506}, {"distance": 0.992070021487939, "cell_id": 14623985}, {"distance": 0.9936680936399894, "cell_id": 14510473}, {"distance": 0.9958923370541647, "cell_id": 13637013}]} +{"cell_id": 29873345, "neighbors": [{"distance": 0.0, "cell_id": 29873345}, {"distance": 0.42686908876403984, "cell_id": 30872789}, {"distance": 0.42686908876403984, "cell_id": 32201262}, {"distance": 0.42686908876403984, "cell_id": 32504313}, {"distance": 0.4276090621927132, "cell_id": 29871991}, {"distance": 0.48587694231714484, "cell_id": 30339290}, {"distance": 0.48587694231714484, "cell_id": 31852402}, {"distance": 0.48587694231714484, "cell_id": 32352330}, {"distance": 0.5509608317678277, "cell_id": 30872596}, {"distance": 0.5509608317678277, "cell_id": 32201074}, {"distance": 0.5509608317678277, "cell_id": 32504227}, {"distance": 0.5531428858727105, "cell_id": 30823082}, {"distance": 0.5531428858727105, "cell_id": 32172253}, {"distance": 0.5531428858727105, "cell_id": 32491763}, {"distance": 0.5572862821313707, "cell_id": 30194444}, {"distance": 0.5572862821313707, "cell_id": 31755246}, {"distance": 0.5572862821313707, "cell_id": 32329493}, {"distance": 0.5646630282359211, "cell_id": 29867337}, {"distance": 0.5683659217215372, "cell_id": 29861519}, {"distance": 0.5718661878525638, "cell_id": 29865231}, {"distance": 0.5868564852127212, "cell_id": 29873551}, {"distance": 0.6038501949491918, "cell_id": 29872606}, {"distance": 0.6088977568591192, "cell_id": 30757058}, {"distance": 0.6088977568591192, "cell_id": 32120208}, {"distance": 0.6088977568591192, "cell_id": 32470754}]} +{"cell_id": 16619580, "neighbors": [{"distance": 0.0, "cell_id": 16619580}, {"distance": 0.30883027334021584, "cell_id": 42377607}, {"distance": 0.30883027334021584, "cell_id": 42651711}, {"distance": 0.4423917957797046, "cell_id": 54435563}, {"distance": 0.4580786045194769, "cell_id": 48566507}, {"distance": 0.45903623273454425, "cell_id": 16618839}, {"distance": 0.46556519050485395, "cell_id": 45003215}, {"distance": 0.47682521565088165, "cell_id": 16684349}, {"distance": 0.4796474948475742, "cell_id": 16348529}, {"distance": 0.48229513209871794, "cell_id": 54443809}, {"distance": 0.49481922117411514, "cell_id": 48555092}, {"distance": 0.5044889627708168, "cell_id": 16699483}, {"distance": 0.5072129756745662, "cell_id": 16662327}, {"distance": 0.5076326060555972, "cell_id": 16573639}, {"distance": 0.5091362127073888, "cell_id": 44467682}, {"distance": 0.5131306222265775, "cell_id": 16589497}, {"distance": 0.5142871839228158, "cell_id": 45330624}, {"distance": 0.5178325260597286, "cell_id": 16692456}, {"distance": 0.5193105780861084, "cell_id": 54533018}, {"distance": 0.523122251183007, "cell_id": 61458066}, {"distance": 0.5267520484904253, "cell_id": 16661033}, {"distance": 0.5312561068129917, "cell_id": 54436297}, {"distance": 0.5349844583924048, "cell_id": 54443667}, {"distance": 0.5359092438159219, "cell_id": 45004465}, {"distance": 0.5371463809284523, "cell_id": 16672121}]} +{"cell_id": 26752022, "neighbors": [{"distance": 0.0, "cell_id": 19778407}, {"distance": 0.0, "cell_id": 26752022}, {"distance": 0.0, "cell_id": 27475353}, {"distance": 0.3383034336923114, "cell_id": 19743456}, {"distance": 0.3383034336923114, "cell_id": 26752591}, {"distance": 0.3383034336923114, "cell_id": 27459206}, {"distance": 0.3726042100677344, "cell_id": 19742505}, {"distance": 0.3726042100677344, "cell_id": 27041921}, {"distance": 0.3726042100677344, "cell_id": 27516133}, {"distance": 0.41487471632939993, "cell_id": 19732903}, {"distance": 0.41487471632939993, "cell_id": 26846870}, {"distance": 0.41487471632939993, "cell_id": 27512136}, {"distance": 0.4211106672446933, "cell_id": 19748386}, {"distance": 0.4211106672446933, "cell_id": 26248945}, {"distance": 0.4211106672446933, "cell_id": 27465105}, {"distance": 0.4496040526863822, "cell_id": 19741479}, {"distance": 0.4496040526863822, "cell_id": 26750426}, {"distance": 0.4496040526863822, "cell_id": 27516591}, {"distance": 0.46421654404543966, "cell_id": 19763201}, {"distance": 0.46421654404543966, "cell_id": 27041552}, {"distance": 0.46421654404543966, "cell_id": 27479869}, {"distance": 0.46885697647834634, "cell_id": 19767732}, {"distance": 0.46885697647834634, "cell_id": 26750810}, {"distance": 0.46885697647834634, "cell_id": 27478450}, {"distance": 0.4730471867916987, "cell_id": 19775307}]} +{"cell_id": 46456148, "neighbors": [{"distance": 0.0, "cell_id": 46456148}, {"distance": 0.42434043190923104, "cell_id": 50924760}, {"distance": 0.42653021032336563, "cell_id": 15927875}, {"distance": 0.43101702058137215, "cell_id": 45208295}, {"distance": 0.434028318575565, "cell_id": 50894597}, {"distance": 0.44922251910113237, "cell_id": 49481514}, {"distance": 0.453568694845602, "cell_id": 50099181}, {"distance": 0.45546190580729357, "cell_id": 50946896}, {"distance": 0.4564892526307414, "cell_id": 49776137}, {"distance": 0.4627424247165942, "cell_id": 49499318}, {"distance": 0.47046313574458004, "cell_id": 45280229}, {"distance": 0.47383224451438727, "cell_id": 48152297}, {"distance": 0.47543169857698975, "cell_id": 49642608}, {"distance": 0.4784149017082414, "cell_id": 49425308}, {"distance": 0.48333771841217155, "cell_id": 46628011}, {"distance": 0.4855443186598186, "cell_id": 61310874}, {"distance": 0.48559240226853695, "cell_id": 50041037}, {"distance": 0.48751762266758636, "cell_id": 53599068}, {"distance": 0.4881396165551369, "cell_id": 49322538}, {"distance": 0.4905358290726284, "cell_id": 49670618}, {"distance": 0.4930710209025863, "cell_id": 46889851}, {"distance": 0.49825317274784575, "cell_id": 61220957}, {"distance": 0.4985188239956207, "cell_id": 53579708}, {"distance": 0.5001958657365527, "cell_id": 46575056}, {"distance": 0.5049767244001178, "cell_id": 49361178}]} +{"cell_id": 40064168, "neighbors": [{"distance": 0.0, "cell_id": 40064168}, {"distance": 0.0, "cell_id": 40091365}, {"distance": 0.08202870482265975, "cell_id": 45381856}, {"distance": 0.30415687107373063, "cell_id": 30716263}, {"distance": 0.30415687107373063, "cell_id": 31251368}, {"distance": 0.44561962235553776, "cell_id": 40064656}, {"distance": 0.44561962235553776, "cell_id": 40091853}, {"distance": 0.4654023632268249, "cell_id": 45382344}, {"distance": 0.49952181446127175, "cell_id": 30716290}, {"distance": 0.49952181446127175, "cell_id": 31251395}, {"distance": 0.5215347230852251, "cell_id": 45383924}, {"distance": 0.5326127045923251, "cell_id": 40066236}, {"distance": 0.5326127045923251, "cell_id": 40093433}, {"distance": 0.6241929900831042, "cell_id": 40062299}, {"distance": 0.6241929900831042, "cell_id": 40089496}, {"distance": 0.6303689054024076, "cell_id": 45379987}, {"distance": 0.6409416380967023, "cell_id": 58470536}, {"distance": 0.6409416380967023, "cell_id": 59840317}, {"distance": 0.6605322661059395, "cell_id": 45381212}, {"distance": 0.6675170955570631, "cell_id": 40063524}, {"distance": 0.6675170955570631, "cell_id": 40090721}, {"distance": 0.6731922704433464, "cell_id": 45380038}, {"distance": 0.6829011178156872, "cell_id": 40062350}, {"distance": 0.6829011178156872, "cell_id": 40089547}, {"distance": 0.6957745019094352, "cell_id": 45379708}]} +{"cell_id": 58165710, "neighbors": [{"distance": 0.0, "cell_id": 58165710}, {"distance": 0.4806728006618061, "cell_id": 55775827}, {"distance": 0.5559324203814531, "cell_id": 55364443}, {"distance": 0.5709767593900313, "cell_id": 55449427}, {"distance": 0.580868471600996, "cell_id": 55927353}, {"distance": 0.5880687574557268, "cell_id": 55731551}, {"distance": 0.5880687574557268, "cell_id": 59164976}, {"distance": 0.6012608953673726, "cell_id": 56181606}, {"distance": 0.6067909533653608, "cell_id": 55483344}, {"distance": 0.6067909533653608, "cell_id": 59103989}, {"distance": 0.610844729768711, "cell_id": 58061575}, {"distance": 0.6118744202562694, "cell_id": 57407465}, {"distance": 0.6141783093680154, "cell_id": 55401545}, {"distance": 0.62174136688353, "cell_id": 55514257}, {"distance": 0.6240476935523013, "cell_id": 56287486}, {"distance": 0.6276634881300556, "cell_id": 56262174}, {"distance": 0.6288142875589956, "cell_id": 56875663}, {"distance": 0.6288142875589956, "cell_id": 59446987}, {"distance": 0.6325433943570552, "cell_id": 55660185}, {"distance": 0.6339541977606589, "cell_id": 3886749}, {"distance": 0.639385262324112, "cell_id": 57481119}, {"distance": 0.639385262324112, "cell_id": 59596112}, {"distance": 0.6427183158186945, "cell_id": 57816360}, {"distance": 0.6427183158186945, "cell_id": 59678922}, {"distance": 0.655602255860601, "cell_id": 55747699}]} +{"cell_id": 47425285, "neighbors": [{"distance": 0.0, "cell_id": 47120633}, {"distance": 0.0, "cell_id": 47425285}, {"distance": 0.5003177524966312, "cell_id": 47154668}, {"distance": 0.5003177524966312, "cell_id": 47459320}, {"distance": 0.5741509119839365, "cell_id": 47145201}, {"distance": 0.5741509119839365, "cell_id": 47449853}, {"distance": 0.5763000469643556, "cell_id": 47148181}, {"distance": 0.5763000469643556, "cell_id": 47452833}, {"distance": 0.5885120208095231, "cell_id": 47149071}, {"distance": 0.5885120208095231, "cell_id": 47453723}, {"distance": 0.5961338389798876, "cell_id": 47149850}, {"distance": 0.5961338389798876, "cell_id": 47454502}, {"distance": 0.6235110355544113, "cell_id": 47119451}, {"distance": 0.6235110355544113, "cell_id": 47424103}, {"distance": 0.6253152296975557, "cell_id": 47154571}, {"distance": 0.6253152296975557, "cell_id": 47459223}, {"distance": 0.6261088536297642, "cell_id": 47148477}, {"distance": 0.6261088536297642, "cell_id": 47453129}, {"distance": 0.6293647844663992, "cell_id": 47147236}, {"distance": 0.6293647844663992, "cell_id": 47451888}, {"distance": 0.6353437593010459, "cell_id": 47146102}, {"distance": 0.6353437593010459, "cell_id": 47450754}, {"distance": 0.6419867592865189, "cell_id": 47116574}, {"distance": 0.6419867592865189, "cell_id": 47421226}, {"distance": 0.6614330041528984, "cell_id": 47146001}]} +{"cell_id": 48280980, "neighbors": [{"distance": 0.0, "cell_id": 48280980}, {"distance": 0.4456995437366307, "cell_id": 54184626}, {"distance": 0.45594743264273996, "cell_id": 54250472}, {"distance": 0.46824323041118504, "cell_id": 54254652}, {"distance": 0.47538380752681525, "cell_id": 54689791}, {"distance": 0.4864847505361041, "cell_id": 42620063}, {"distance": 0.4864847505361041, "cell_id": 42734537}, {"distance": 0.5129916527694796, "cell_id": 54257043}, {"distance": 0.515032581775649, "cell_id": 50830552}, {"distance": 0.5269309221609293, "cell_id": 54159427}, {"distance": 0.539930822103502, "cell_id": 54202310}, {"distance": 0.5454522697087998, "cell_id": 54268561}, {"distance": 0.5461231093276248, "cell_id": 54702962}, {"distance": 0.5509562627573765, "cell_id": 54677106}, {"distance": 0.5558393279091275, "cell_id": 54321286}, {"distance": 0.5678057256565526, "cell_id": 51125617}, {"distance": 0.5688405376369626, "cell_id": 12414831}, {"distance": 0.5688405376369626, "cell_id": 13023692}, {"distance": 0.5768249290340235, "cell_id": 54117800}, {"distance": 0.5832678625609646, "cell_id": 54174051}, {"distance": 0.5867525185274008, "cell_id": 54262374}, {"distance": 0.5895647486089821, "cell_id": 54267491}, {"distance": 0.5943867705943173, "cell_id": 54266571}, {"distance": 0.5975290729083598, "cell_id": 54256177}, {"distance": 0.5984697228997605, "cell_id": 44991487}]} +{"cell_id": 51128384, "neighbors": [{"distance": 0.0, "cell_id": 51128384}, {"distance": 0.5330822797110618, "cell_id": 51086159}, {"distance": 0.5426499198681455, "cell_id": 47588286}, {"distance": 0.5610754280039923, "cell_id": 46506021}, {"distance": 0.5996035160108195, "cell_id": 62305334}, {"distance": 0.6115943913162039, "cell_id": 61916177}, {"distance": 0.6159542005077933, "cell_id": 51215911}, {"distance": 0.626640812226715, "cell_id": 51172042}, {"distance": 0.626764359185783, "cell_id": 61293851}, {"distance": 0.6270258366944148, "cell_id": 51297309}, {"distance": 0.6421507473718634, "cell_id": 51187057}, {"distance": 0.6472245541323476, "cell_id": 51265467}, {"distance": 0.6499746444645556, "cell_id": 51008277}, {"distance": 0.6514586232464279, "cell_id": 50833346}, {"distance": 0.6577445374580887, "cell_id": 15315203}, {"distance": 0.6609281075487169, "cell_id": 61273162}, {"distance": 0.6710929476924035, "cell_id": 51297397}, {"distance": 0.6865427602652984, "cell_id": 47576596}, {"distance": 0.6867673343510245, "cell_id": 51085284}, {"distance": 0.6916483615973952, "cell_id": 51099012}, {"distance": 0.6962877549703703, "cell_id": 52738605}, {"distance": 0.6962877549703703, "cell_id": 61846318}, {"distance": 0.7014993548047893, "cell_id": 51286062}, {"distance": 0.7019647348004947, "cell_id": 51023301}, {"distance": 0.7028882318736206, "cell_id": 52826144}]} +{"cell_id": 56299610, "neighbors": [{"distance": 0.0, "cell_id": 56299610}, {"distance": 0.22412013407684495, "cell_id": 55946670}, {"distance": 0.300888691646403, "cell_id": 55366950}, {"distance": 0.3237013234262007, "cell_id": 55523787}, {"distance": 0.3522598220138071, "cell_id": 55655512}, {"distance": 0.35955874739842647, "cell_id": 55443005}, {"distance": 0.36275712696715146, "cell_id": 56027177}, {"distance": 0.36275712696715146, "cell_id": 59237819}, {"distance": 0.3671914645906413, "cell_id": 55910385}, {"distance": 0.3715538060332994, "cell_id": 55863747}, {"distance": 0.3715538060332994, "cell_id": 59197638}, {"distance": 0.3717375043375579, "cell_id": 55770800}, {"distance": 0.3744741824153991, "cell_id": 55869275}, {"distance": 0.3744741824153991, "cell_id": 59199007}, {"distance": 0.3763809029045532, "cell_id": 55703498}, {"distance": 0.3763809029045532, "cell_id": 59158077}, {"distance": 0.37835828750125755, "cell_id": 55799413}, {"distance": 0.3813813279853934, "cell_id": 56078960}, {"distance": 0.39404201104564535, "cell_id": 55348484}, {"distance": 0.396746788944026, "cell_id": 56412225}, {"distance": 0.39931845203931304, "cell_id": 55963217}, {"distance": 0.39931845203931304, "cell_id": 59222190}, {"distance": 0.3996192012653339, "cell_id": 55524226}, {"distance": 0.4013815041507816, "cell_id": 56073185}, {"distance": 0.40175898041935887, "cell_id": 56041811}]} +{"cell_id": 54104146, "neighbors": [{"distance": 0.0, "cell_id": 54104146}, {"distance": 0.27940849646228877, "cell_id": 54093260}, {"distance": 0.38434375522393355, "cell_id": 54086746}, {"distance": 0.38920031662713267, "cell_id": 54090737}, {"distance": 0.4049608552624881, "cell_id": 54077476}, {"distance": 0.406028195916218, "cell_id": 54149887}, {"distance": 0.4083587258052707, "cell_id": 54094793}, {"distance": 0.4234785802140456, "cell_id": 54086759}, {"distance": 0.4299080394582393, "cell_id": 54108401}, {"distance": 0.4327972220654157, "cell_id": 54098734}, {"distance": 0.43472510665298286, "cell_id": 54141672}, {"distance": 0.43541149877178287, "cell_id": 54097104}, {"distance": 0.4382239740599068, "cell_id": 54081302}, {"distance": 0.4386180314040186, "cell_id": 54101601}, {"distance": 0.4506042211953963, "cell_id": 54097048}, {"distance": 0.4513352336073684, "cell_id": 54079800}, {"distance": 0.4531954588345778, "cell_id": 44959589}, {"distance": 0.45409848278662174, "cell_id": 54080991}, {"distance": 0.45578101103540114, "cell_id": 54144252}, {"distance": 0.4560989505126964, "cell_id": 54082105}, {"distance": 0.45696468608126073, "cell_id": 54092646}, {"distance": 0.45813416703910026, "cell_id": 54097897}, {"distance": 0.4601689823687653, "cell_id": 54099457}, {"distance": 0.460548884684908, "cell_id": 53685492}, {"distance": 0.4608673192075211, "cell_id": 54098379}]} +{"cell_id": 17653009, "neighbors": [{"distance": 0.0, "cell_id": 17653009}, {"distance": 0.0, "cell_id": 41980593}, {"distance": 0.40116537635598865, "cell_id": 5599131}, {"distance": 0.40116537635598865, "cell_id": 7099994}, {"distance": 0.4315947149018875, "cell_id": 821116}, {"distance": 0.4315947149018875, "cell_id": 1951028}, {"distance": 0.4952405172901337, "cell_id": 4972902}, {"distance": 0.4952405172901337, "cell_id": 6285277}, {"distance": 0.5082345656671484, "cell_id": 6209524}, {"distance": 0.5082345656671484, "cell_id": 7055984}, {"distance": 0.5141221834782705, "cell_id": 5644001}, {"distance": 0.5141221834782705, "cell_id": 7050738}, {"distance": 0.5450678313761339, "cell_id": 17728247}, {"distance": 0.5450678313761339, "cell_id": 42015915}, {"distance": 0.5616949279685202, "cell_id": 17660512}, {"distance": 0.5616949279685202, "cell_id": 41960869}, {"distance": 0.5629143440994738, "cell_id": 4464198}, {"distance": 0.5668135730022962, "cell_id": 6497690}, {"distance": 0.5668135730022962, "cell_id": 7042055}, {"distance": 0.5696860110500822, "cell_id": 60044696}, {"distance": 0.5760552820726375, "cell_id": 18339087}, {"distance": 0.5760552820726375, "cell_id": 42003453}, {"distance": 0.5778428430993064, "cell_id": 1261585}, {"distance": 0.5778428430993064, "cell_id": 2236358}, {"distance": 0.5786527469865699, "cell_id": 18560037}]} +{"cell_id": 50018097, "neighbors": [{"distance": 0.0, "cell_id": 50018097}, {"distance": 0.36754692163823643, "cell_id": 49632141}, {"distance": 0.3704397881493938, "cell_id": 50015532}, {"distance": 0.37499431925177673, "cell_id": 50824122}, {"distance": 0.37636855618038595, "cell_id": 53783740}, {"distance": 0.3793436524014941, "cell_id": 54594189}, {"distance": 0.3853050457046409, "cell_id": 50257594}, {"distance": 0.38946371170188876, "cell_id": 50091789}, {"distance": 0.39753011838969476, "cell_id": 49509917}, {"distance": 0.4000804465336348, "cell_id": 49215567}, {"distance": 0.4035365782245917, "cell_id": 49548618}, {"distance": 0.40354945224604016, "cell_id": 50145925}, {"distance": 0.4055827722624526, "cell_id": 49780389}, {"distance": 0.40566057406285055, "cell_id": 49739249}, {"distance": 0.4059219485875922, "cell_id": 49441041}, {"distance": 0.407733278273729, "cell_id": 49689855}, {"distance": 0.41439183224266635, "cell_id": 50090245}, {"distance": 0.41653368385132217, "cell_id": 50242790}, {"distance": 0.4175140832891177, "cell_id": 49471861}, {"distance": 0.42174947672133056, "cell_id": 45224464}, {"distance": 0.4223197480204262, "cell_id": 53772166}, {"distance": 0.42288765487486524, "cell_id": 50281225}, {"distance": 0.42519366473361003, "cell_id": 54522672}, {"distance": 0.425609036567199, "cell_id": 43913943}, {"distance": 0.42568287006678623, "cell_id": 49851431}]} +{"cell_id": 27293760, "neighbors": [{"distance": 0.0, "cell_id": 19902709}, {"distance": 0.0, "cell_id": 27293760}, {"distance": 0.0, "cell_id": 27854485}, {"distance": 0.2806913162075483, "cell_id": 19977186}, {"distance": 0.2806913162075483, "cell_id": 26496131}, {"distance": 0.2806913162075483, "cell_id": 27828027}, {"distance": 0.2850345750973007, "cell_id": 19928500}, {"distance": 0.2850345750973007, "cell_id": 25496666}, {"distance": 0.2850345750973007, "cell_id": 27873912}, {"distance": 0.2967248995878862, "cell_id": 20008775}, {"distance": 0.2967248995878862, "cell_id": 23132401}, {"distance": 0.2967248995878862, "cell_id": 27909967}, {"distance": 0.3126019638261545, "cell_id": 20020896}, {"distance": 0.3126019638261545, "cell_id": 25499726}, {"distance": 0.3126019638261545, "cell_id": 27650268}, {"distance": 0.3205172146595023, "cell_id": 19940936}, {"distance": 0.3205172146595023, "cell_id": 25420904}, {"distance": 0.3205172146595023, "cell_id": 27808127}, {"distance": 0.33598843657958305, "cell_id": 19932037}, {"distance": 0.33598843657958305, "cell_id": 24519638}, {"distance": 0.33598843657958305, "cell_id": 27882978}, {"distance": 0.3418852145057793, "cell_id": 20012343}, {"distance": 0.3418852145057793, "cell_id": 23132892}, {"distance": 0.3418852145057793, "cell_id": 27911667}, {"distance": 0.34190826499802446, "cell_id": 3517251}]} +{"cell_id": 35350506, "neighbors": [{"distance": 0.0, "cell_id": 35350506}, {"distance": 0.48008920461984567, "cell_id": 33885564}, {"distance": 0.48008920461984567, "cell_id": 34777860}, {"distance": 0.495308127624261, "cell_id": 13946853}, {"distance": 0.5691503065187835, "cell_id": 33408312}, {"distance": 0.5691503065187835, "cell_id": 34300608}, {"distance": 0.5921755875695267, "cell_id": 33669210}, {"distance": 0.5921755875695267, "cell_id": 34561506}, {"distance": 0.6197480546364661, "cell_id": 15253305}, {"distance": 0.6285133851189402, "cell_id": 13774473}, {"distance": 0.6546436477746054, "cell_id": 13871287}, {"distance": 0.6635906358606688, "cell_id": 33817679}, {"distance": 0.6635906358606688, "cell_id": 34709975}, {"distance": 0.6692518218427969, "cell_id": 14651542}, {"distance": 0.6812035963965825, "cell_id": 33566835}, {"distance": 0.6812035963965825, "cell_id": 34459131}, {"distance": 0.6832097288215079, "cell_id": 14563474}, {"distance": 0.6883913658289997, "cell_id": 33613953}, {"distance": 0.6883913658289997, "cell_id": 34506249}, {"distance": 0.6884897075112273, "cell_id": 14663719}, {"distance": 0.69282010741597, "cell_id": 33836980}, {"distance": 0.69282010741597, "cell_id": 34729276}, {"distance": 0.7063158977881594, "cell_id": 14445980}, {"distance": 0.7129292737262718, "cell_id": 14703236}, {"distance": 0.7156959325967142, "cell_id": 33405925}]} +{"cell_id": 51201364, "neighbors": [{"distance": 0.0, "cell_id": 51201364}, {"distance": 0.546385146694375, "cell_id": 54371338}, {"distance": 0.5825560446111693, "cell_id": 52669331}, {"distance": 0.5825560446111693, "cell_id": 61733407}, {"distance": 0.5979648526217534, "cell_id": 48168457}, {"distance": 0.6082144490723214, "cell_id": 50824513}, {"distance": 0.6168550460386721, "cell_id": 8857963}, {"distance": 0.6261872056761898, "cell_id": 52819040}, {"distance": 0.6261872056761898, "cell_id": 61798942}, {"distance": 0.6339386043632361, "cell_id": 54493182}, {"distance": 0.638125685404849, "cell_id": 54650229}, {"distance": 0.6537641782337245, "cell_id": 53655920}, {"distance": 0.6580530139779404, "cell_id": 48333170}, {"distance": 0.6677913644511533, "cell_id": 53658466}, {"distance": 0.6836230661459413, "cell_id": 54328681}, {"distance": 0.6871568953229212, "cell_id": 49349389}, {"distance": 0.6871760974876511, "cell_id": 54725082}, {"distance": 0.6919440689371278, "cell_id": 54350088}, {"distance": 0.6935046809476965, "cell_id": 53874273}, {"distance": 0.6937405025635931, "cell_id": 53869839}, {"distance": 0.6956056880683645, "cell_id": 47984551}, {"distance": 0.6992606494434854, "cell_id": 47993105}, {"distance": 0.7001578252257674, "cell_id": 48355075}, {"distance": 0.7028059244696616, "cell_id": 48465919}, {"distance": 0.7034203851383669, "cell_id": 53645990}]} +{"cell_id": 14010505, "neighbors": [{"distance": 0.0, "cell_id": 14010505}, {"distance": 0.6329976410331438, "cell_id": 13893641}, {"distance": 0.8053142758561789, "cell_id": 14390736}, {"distance": 0.8127119933895754, "cell_id": 14923308}, {"distance": 0.835858480931876, "cell_id": 13450505}, {"distance": 0.8420886490311866, "cell_id": 44734876}, {"distance": 0.8653012482323283, "cell_id": 15360542}, {"distance": 0.8906221167734372, "cell_id": 54639963}, {"distance": 0.9093304431166791, "cell_id": 14581869}, {"distance": 0.9461964187876893, "cell_id": 13795873}, {"distance": 0.9575175342483262, "cell_id": 14333790}, {"distance": 0.9685917050657841, "cell_id": 34130508}, {"distance": 0.9685917050657841, "cell_id": 35016619}, {"distance": 0.9759440183582794, "cell_id": 54638695}, {"distance": 0.981070246384781, "cell_id": 34129644}, {"distance": 0.981070246384781, "cell_id": 35015755}, {"distance": 0.9831914483000109, "cell_id": 13596566}, {"distance": 0.9863156426191163, "cell_id": 13936777}, {"distance": 0.9940797632126886, "cell_id": 44861385}, {"distance": 0.9985994654168099, "cell_id": 34130022}, {"distance": 0.9985994654168099, "cell_id": 35016133}, {"distance": 1.0100802002783884, "cell_id": 15469731}, {"distance": 1.0193066601687115, "cell_id": 14514501}, {"distance": 1.024361901723799, "cell_id": 14710053}, {"distance": 1.0303804028294177, "cell_id": 15090370}]} +{"cell_id": 37169151, "neighbors": [{"distance": 0.0, "cell_id": 37169151}, {"distance": 0.4599849691349167, "cell_id": 37151963}, {"distance": 0.46350171842676147, "cell_id": 37188118}, {"distance": 0.4658971139515102, "cell_id": 37177277}, {"distance": 0.4688305028885864, "cell_id": 37165719}, {"distance": 0.4751572030198083, "cell_id": 37160852}, {"distance": 0.48902930075452555, "cell_id": 37232743}, {"distance": 0.49882146571253344, "cell_id": 37221454}, {"distance": 0.5020534959706934, "cell_id": 37234032}, {"distance": 0.5052850528845427, "cell_id": 37166960}, {"distance": 0.5081682100339229, "cell_id": 37234257}, {"distance": 0.5114539814489655, "cell_id": 37167409}, {"distance": 0.5187830415547633, "cell_id": 37167153}, {"distance": 0.5246126394052516, "cell_id": 37190208}, {"distance": 0.5288051021858071, "cell_id": 37217522}, {"distance": 0.5341825101192426, "cell_id": 37167825}, {"distance": 0.5349698677239916, "cell_id": 37168846}, {"distance": 0.5415335403987952, "cell_id": 37197498}, {"distance": 0.5419647552646896, "cell_id": 37222700}, {"distance": 0.5420367701855109, "cell_id": 37141731}, {"distance": 0.5461842675402659, "cell_id": 37170656}, {"distance": 0.5565972914741438, "cell_id": 37169471}, {"distance": 0.5635654289460922, "cell_id": 37175657}, {"distance": 0.57104918531472, "cell_id": 37157158}, {"distance": 0.5737112005222215, "cell_id": 37234049}]} +{"cell_id": 39982196, "neighbors": [{"distance": 0.0, "cell_id": 39982196}, {"distance": 0.2865501296075379, "cell_id": 39958960}, {"distance": 0.30427292621466734, "cell_id": 39982561}, {"distance": 0.3197858176260557, "cell_id": 39982375}, {"distance": 0.32589288334679917, "cell_id": 39960367}, {"distance": 0.3340863777994668, "cell_id": 39996953}, {"distance": 0.33859355638429384, "cell_id": 39985557}, {"distance": 0.34111104277910265, "cell_id": 39963709}, {"distance": 0.34465154420640537, "cell_id": 39980438}, {"distance": 0.3498627056597131, "cell_id": 39980288}, {"distance": 0.3510941431171497, "cell_id": 39963056}, {"distance": 0.35241959994114347, "cell_id": 39960571}, {"distance": 0.35998456692055986, "cell_id": 39983267}, {"distance": 0.3674454946634386, "cell_id": 39950553}, {"distance": 0.3715461400418227, "cell_id": 39980207}, {"distance": 0.371740325049836, "cell_id": 39970970}, {"distance": 0.37454082852399406, "cell_id": 39962120}, {"distance": 0.378802832351994, "cell_id": 39985565}, {"distance": 0.38093399203252276, "cell_id": 39998160}, {"distance": 0.38511927334711477, "cell_id": 39963900}, {"distance": 0.38530156631747636, "cell_id": 39965092}, {"distance": 0.38848608755894026, "cell_id": 39964114}, {"distance": 0.3888410715904984, "cell_id": 39982500}, {"distance": 0.389799315262115, "cell_id": 39976802}, {"distance": 0.3919357425010873, "cell_id": 39963893}]} +{"cell_id": 24077801, "neighbors": [{"distance": 0.0, "cell_id": 11597098}, {"distance": 0.0, "cell_id": 24077801}, {"distance": 0.0, "cell_id": 29635699}, {"distance": 0.5975005687332477, "cell_id": 11515206}, {"distance": 0.5975005687332477, "cell_id": 24073750}, {"distance": 0.5975005687332477, "cell_id": 29687034}, {"distance": 0.6605310799624007, "cell_id": 17961414}, {"distance": 0.6605310799624007, "cell_id": 41401104}, {"distance": 0.673469201896234, "cell_id": 11547266}, {"distance": 0.673469201896234, "cell_id": 24071961}, {"distance": 0.673469201896234, "cell_id": 29668151}, {"distance": 0.6801117980299222, "cell_id": 1184826}, {"distance": 0.6801117980299222, "cell_id": 2474235}, {"distance": 0.7240121506963076, "cell_id": 11585164}, {"distance": 0.7240121506963076, "cell_id": 25448884}, {"distance": 0.7240121506963076, "cell_id": 29622633}, {"distance": 0.7893375779335525, "cell_id": 11583733}, {"distance": 0.7893375779335525, "cell_id": 23214874}, {"distance": 0.7893375779335525, "cell_id": 29621244}, {"distance": 0.7952838412350582, "cell_id": 18331891}, {"distance": 0.7952838412350582, "cell_id": 41535529}, {"distance": 0.8249956004509416, "cell_id": 11550932}, {"distance": 0.8249956004509416, "cell_id": 24072995}, {"distance": 0.8249956004509416, "cell_id": 29676837}, {"distance": 0.8357971314956492, "cell_id": 18635772}]} +{"cell_id": 50234544, "neighbors": [{"distance": 0.0, "cell_id": 50234544}, {"distance": 0.5655563880465526, "cell_id": 49142097}, {"distance": 0.5952097376915361, "cell_id": 50052391}, {"distance": 0.6164298274718124, "cell_id": 33854105}, {"distance": 0.6164298274718124, "cell_id": 34746401}, {"distance": 0.6330381133971346, "cell_id": 44493277}, {"distance": 0.6589978177904394, "cell_id": 44177154}, {"distance": 0.6607934196131711, "cell_id": 44053263}, {"distance": 0.6637304022465164, "cell_id": 43441351}, {"distance": 0.6674545127129248, "cell_id": 49721926}, {"distance": 0.673849509804518, "cell_id": 49798607}, {"distance": 0.6746212289353238, "cell_id": 44243741}, {"distance": 0.6928201449276907, "cell_id": 50260828}, {"distance": 0.6934631788898128, "cell_id": 51168046}, {"distance": 0.6945534821910823, "cell_id": 44259592}, {"distance": 0.7020500463969497, "cell_id": 49954101}, {"distance": 0.7029999926203502, "cell_id": 49423902}, {"distance": 0.7085811333323424, "cell_id": 43632104}, {"distance": 0.7097151795664314, "cell_id": 44053310}, {"distance": 0.7123358108506523, "cell_id": 50173086}, {"distance": 0.7157439669187486, "cell_id": 52663714}, {"distance": 0.7157439669187486, "cell_id": 61729401}, {"distance": 0.7160596698031082, "cell_id": 49109397}, {"distance": 0.7162906747997148, "cell_id": 44269381}, {"distance": 0.7164648610737627, "cell_id": 52725454}]} +{"cell_id": 49749755, "neighbors": [{"distance": 0.0, "cell_id": 49749755}, {"distance": 0.3380231704942982, "cell_id": 49993895}, {"distance": 0.34681492871667435, "cell_id": 44249097}, {"distance": 0.35429853440247344, "cell_id": 44332389}, {"distance": 0.3579279110209156, "cell_id": 49169858}, {"distance": 0.36692381586019757, "cell_id": 49074558}, {"distance": 0.36944780099762314, "cell_id": 51347927}, {"distance": 0.3742720681250952, "cell_id": 43919971}, {"distance": 0.37479651470898007, "cell_id": 43768050}, {"distance": 0.3848720082100776, "cell_id": 43662711}, {"distance": 0.389265721257698, "cell_id": 44331276}, {"distance": 0.3919688881046273, "cell_id": 49630071}, {"distance": 0.3940527027639847, "cell_id": 44386403}, {"distance": 0.394703372480576, "cell_id": 43886125}, {"distance": 0.3990806363182422, "cell_id": 44263943}, {"distance": 0.4029295840125807, "cell_id": 49687458}, {"distance": 0.40348313902683786, "cell_id": 43869591}, {"distance": 0.4042796679684894, "cell_id": 50263229}, {"distance": 0.40440957639488795, "cell_id": 44238741}, {"distance": 0.4053822781031607, "cell_id": 44369049}, {"distance": 0.406578821204347, "cell_id": 49056663}, {"distance": 0.4068721268707113, "cell_id": 44571726}, {"distance": 0.4078477352865377, "cell_id": 43756368}, {"distance": 0.40859722869141113, "cell_id": 43758905}, {"distance": 0.40933459723447313, "cell_id": 43314590}]} +{"cell_id": 12752827, "neighbors": [{"distance": 0.0, "cell_id": 9003437}, {"distance": 0.0, "cell_id": 12752827}, {"distance": 0.6433910875480036, "cell_id": 2593684}, {"distance": 0.6776581126603077, "cell_id": 60409070}, {"distance": 0.6787683842447221, "cell_id": 61158037}, {"distance": 0.7069044486186049, "cell_id": 33573177}, {"distance": 0.7069044486186049, "cell_id": 34465473}, {"distance": 0.7450733865551518, "cell_id": 2558401}, {"distance": 0.7714001414713244, "cell_id": 61096225}, {"distance": 0.7830438812460745, "cell_id": 60370479}, {"distance": 0.783951710875547, "cell_id": 14221222}, {"distance": 0.7969377460879057, "cell_id": 17178441}, {"distance": 0.7969377460879057, "cell_id": 17638046}, {"distance": 0.8028941757376127, "cell_id": 60107682}, {"distance": 0.8162901427397666, "cell_id": 35416550}, {"distance": 0.8181030591113335, "cell_id": 60389712}, {"distance": 0.8181030591113335, "cell_id": 61122303}, {"distance": 0.8183169636025638, "cell_id": 9003924}, {"distance": 0.8183169636025638, "cell_id": 12890046}, {"distance": 0.8271436561799906, "cell_id": 14787352}, {"distance": 0.8535604169343344, "cell_id": 14168289}, {"distance": 0.8785266294278546, "cell_id": 13654531}, {"distance": 0.8801943645829281, "cell_id": 9010496}, {"distance": 0.8801943645829281, "cell_id": 12896618}, {"distance": 0.8913986483537518, "cell_id": 16887967}]} +{"cell_id": 30516539, "neighbors": [{"distance": 0.0, "cell_id": 30516539}, {"distance": 0.0, "cell_id": 31172674}, {"distance": 0.41566914113948433, "cell_id": 30517617}, {"distance": 0.41566914113948433, "cell_id": 31173515}, {"distance": 0.4707566719648022, "cell_id": 30516071}, {"distance": 0.4707566719648022, "cell_id": 31172332}, {"distance": 0.47135937319938465, "cell_id": 30517674}, {"distance": 0.47135937319938465, "cell_id": 31173560}, {"distance": 0.5584377958408098, "cell_id": 30517185}, {"distance": 0.5584377958408098, "cell_id": 31173170}, {"distance": 0.5830515178040379, "cell_id": 30518176}, {"distance": 0.5830515178040379, "cell_id": 31173946}, {"distance": 0.5925655216579877, "cell_id": 21402125}, {"distance": 0.613907591085554, "cell_id": 32993745}, {"distance": 0.6190827429850119, "cell_id": 21402458}, {"distance": 0.6208746763365063, "cell_id": 30516458}, {"distance": 0.6208746763365063, "cell_id": 31172610}, {"distance": 0.6280227773034258, "cell_id": 21404048}, {"distance": 0.628675482460288, "cell_id": 30515199}, {"distance": 0.628675482460288, "cell_id": 31171850}, {"distance": 0.6293399582118641, "cell_id": 47629281}, {"distance": 0.6293399582118641, "cell_id": 47689019}, {"distance": 0.6293399582118641, "cell_id": 47767102}, {"distance": 0.653819184882349, "cell_id": 30514730}, {"distance": 0.653819184882349, "cell_id": 31171637}]} +{"cell_id": 47485287, "neighbors": [{"distance": 0.0, "cell_id": 47180635}, {"distance": 0.0, "cell_id": 47485287}, {"distance": 0.523709926411177, "cell_id": 38450079}, {"distance": 0.523709926411177, "cell_id": 39089954}, {"distance": 0.5453497765624706, "cell_id": 47183766}, {"distance": 0.5453497765624706, "cell_id": 47488418}, {"distance": 0.5819165324883797, "cell_id": 38752913}, {"distance": 0.5819165324883797, "cell_id": 39133232}, {"distance": 0.5907388876117149, "cell_id": 47181494}, {"distance": 0.5907388876117149, "cell_id": 47486146}, {"distance": 0.6057509739008637, "cell_id": 47182735}, {"distance": 0.6057509739008637, "cell_id": 47487387}, {"distance": 0.6078531315165722, "cell_id": 47188272}, {"distance": 0.6078531315165722, "cell_id": 47492924}, {"distance": 0.6209832187884063, "cell_id": 47114209}, {"distance": 0.6209832187884063, "cell_id": 47418861}, {"distance": 0.6372672456883507, "cell_id": 38250353}, {"distance": 0.6372672456883507, "cell_id": 39061709}, {"distance": 0.6408599313401857, "cell_id": 38741728}, {"distance": 0.6408599313401857, "cell_id": 39131236}, {"distance": 0.6513489691612362, "cell_id": 47216117}, {"distance": 0.6513489691612362, "cell_id": 47520769}, {"distance": 0.6524148842371077, "cell_id": 38009557}, {"distance": 0.6524148842371077, "cell_id": 39034765}, {"distance": 0.6557918482638597, "cell_id": 60443335}]} +{"cell_id": 3122583, "neighbors": [{"distance": 0.0, "cell_id": 3122583}, {"distance": 0.9108277854443003, "cell_id": 3016227}, {"distance": 0.9615809863558402, "cell_id": 3117132}, {"distance": 0.9655932701024997, "cell_id": 3080623}, {"distance": 0.9733684844578359, "cell_id": 3121961}, {"distance": 0.9791779943012819, "cell_id": 3072644}, {"distance": 0.992886790306095, "cell_id": 61488809}, {"distance": 1.0045515140478427, "cell_id": 3116932}, {"distance": 1.0119132059500882, "cell_id": 3017052}, {"distance": 1.015043604072504, "cell_id": 3115164}, {"distance": 1.0458843021261282, "cell_id": 3114970}, {"distance": 1.0759790014745445, "cell_id": 53972210}, {"distance": 1.1084088259735176, "cell_id": 3120449}, {"distance": 1.1102860601412083, "cell_id": 3122660}, {"distance": 1.1235962956242465, "cell_id": 3122922}, {"distance": 1.1261132924840553, "cell_id": 13803715}, {"distance": 1.129148661267022, "cell_id": 3049714}, {"distance": 1.1318531628052746, "cell_id": 3116842}, {"distance": 1.1423500700545308, "cell_id": 3117358}, {"distance": 1.1423792341083399, "cell_id": 4436187}, {"distance": 1.1473659596277488, "cell_id": 7691485}, {"distance": 1.1496833248299316, "cell_id": 3121550}, {"distance": 1.1505831044896686, "cell_id": 3117883}, {"distance": 1.1524181402014004, "cell_id": 14608088}, {"distance": 1.1531603525633463, "cell_id": 21406115}]} +{"cell_id": 34836168, "neighbors": [{"distance": 0.0, "cell_id": 33943872}, {"distance": 0.0, "cell_id": 34836168}, {"distance": 0.6180509616150808, "cell_id": 33807102}, {"distance": 0.6180509616150808, "cell_id": 34699398}, {"distance": 0.7317199930603043, "cell_id": 7575972}, {"distance": 0.7820595509973453, "cell_id": 33892857}, {"distance": 0.7820595509973453, "cell_id": 34785153}, {"distance": 0.8029348949301385, "cell_id": 62825133}, {"distance": 0.8192282639108087, "cell_id": 33883592}, {"distance": 0.8192282639108087, "cell_id": 34775888}, {"distance": 0.8549758357513663, "cell_id": 35769319}, {"distance": 0.8549758357513663, "cell_id": 36107883}, {"distance": 0.8588295310632842, "cell_id": 22863797}, {"distance": 0.8719350495527721, "cell_id": 21045400}, {"distance": 0.8771195473015725, "cell_id": 35432249}, {"distance": 0.8778593165313339, "cell_id": 21033747}, {"distance": 0.8781986862957667, "cell_id": 35488216}, {"distance": 0.8799595881386719, "cell_id": 33980804}, {"distance": 0.8799595881386719, "cell_id": 34873100}, {"distance": 0.8881795182949832, "cell_id": 14452597}, {"distance": 0.8977949118028128, "cell_id": 62429626}, {"distance": 0.9040656066720045, "cell_id": 33856849}, {"distance": 0.9040656066720045, "cell_id": 34749145}, {"distance": 0.9080985301126623, "cell_id": 33860851}, {"distance": 0.9080985301126623, "cell_id": 34753147}]} +{"cell_id": 39843725, "neighbors": [{"distance": 0.0, "cell_id": 39843725}, {"distance": 0.5425541874377785, "cell_id": 39829614}, {"distance": 0.6155405995469558, "cell_id": 39835354}, {"distance": 0.6347611124678681, "cell_id": 39838625}, {"distance": 0.6436519454480402, "cell_id": 39813710}, {"distance": 0.6520285371825211, "cell_id": 39832934}, {"distance": 0.6707472189938177, "cell_id": 39844734}, {"distance": 0.6715967399407269, "cell_id": 39860434}, {"distance": 0.7066275407263424, "cell_id": 39819758}, {"distance": 0.7094335787310105, "cell_id": 39838206}, {"distance": 0.7318203689846055, "cell_id": 39857019}, {"distance": 0.7434333664696098, "cell_id": 39861594}, {"distance": 0.7525782108452947, "cell_id": 39378481}, {"distance": 0.7687932621389604, "cell_id": 39855124}, {"distance": 0.7800102900418417, "cell_id": 39798600}, {"distance": 0.7827441236251161, "cell_id": 39859479}, {"distance": 0.7899185965757809, "cell_id": 39840381}, {"distance": 0.7916424758084617, "cell_id": 39793258}, {"distance": 0.7924431897496382, "cell_id": 39796635}, {"distance": 0.7956688619526957, "cell_id": 39856964}, {"distance": 0.80356077371784, "cell_id": 39844928}, {"distance": 0.8047276710085874, "cell_id": 39860385}, {"distance": 0.8057032255174735, "cell_id": 39857447}, {"distance": 0.8211724205319783, "cell_id": 39858922}, {"distance": 0.8295541493332211, "cell_id": 39860494}]} +{"cell_id": 48037203, "neighbors": [{"distance": 0.0, "cell_id": 48037203}, {"distance": 0.4481360430555764, "cell_id": 47990012}, {"distance": 0.4773333866332414, "cell_id": 50888392}, {"distance": 0.5877821943659385, "cell_id": 34117633}, {"distance": 0.5877821943659385, "cell_id": 35003744}, {"distance": 0.5989156165540918, "cell_id": 48534659}, {"distance": 0.59953344584726, "cell_id": 50895908}, {"distance": 0.6146538111697667, "cell_id": 35318409}, {"distance": 0.6343164055857541, "cell_id": 21996808}, {"distance": 0.6393863320274892, "cell_id": 21938563}, {"distance": 0.6422634983770035, "cell_id": 47943801}, {"distance": 0.6457949954812123, "cell_id": 48094314}, {"distance": 0.6541371692668376, "cell_id": 61547278}, {"distance": 0.6579070520417265, "cell_id": 42565339}, {"distance": 0.6579070520417265, "cell_id": 42935815}, {"distance": 0.6691819888961551, "cell_id": 16695279}, {"distance": 0.6752130336442234, "cell_id": 16661398}, {"distance": 0.6794515579873925, "cell_id": 42551354}, {"distance": 0.6794515579873925, "cell_id": 42914654}, {"distance": 0.6803508536917046, "cell_id": 16616355}, {"distance": 0.6825305206773216, "cell_id": 51055013}, {"distance": 0.6843153248740308, "cell_id": 51018794}, {"distance": 0.6843434697551768, "cell_id": 36454280}, {"distance": 0.687568905013323, "cell_id": 42543858}, {"distance": 0.687568905013323, "cell_id": 42903811}]} +{"cell_id": 55711574, "neighbors": [{"distance": 0.0, "cell_id": 55711574}, {"distance": 0.19397145057249116, "cell_id": 56227817}, {"distance": 0.21112432672457324, "cell_id": 56424837}, {"distance": 0.23261964806197527, "cell_id": 56002392}, {"distance": 0.23443214357644107, "cell_id": 56098861}, {"distance": 0.23941030507195948, "cell_id": 55734096}, {"distance": 0.23941030507195948, "cell_id": 59165550}, {"distance": 0.2661298719233359, "cell_id": 56063481}, {"distance": 0.27482578874766783, "cell_id": 55701231}, {"distance": 0.27791155112666804, "cell_id": 55793428}, {"distance": 0.2796592936303854, "cell_id": 55726082}, {"distance": 0.2838133029575541, "cell_id": 56014470}, {"distance": 0.2841938730570972, "cell_id": 56231291}, {"distance": 0.2841938730570972, "cell_id": 59288259}, {"distance": 0.28612572980855105, "cell_id": 56187409}, {"distance": 0.2875859049467252, "cell_id": 56192881}, {"distance": 0.2875859049467252, "cell_id": 59278869}, {"distance": 0.28840908951802235, "cell_id": 57265606}, {"distance": 0.29142643410497737, "cell_id": 56277061}, {"distance": 0.2923621397339766, "cell_id": 56058524}, {"distance": 0.2935465479531829, "cell_id": 55727951}, {"distance": 0.2935465479531829, "cell_id": 59164099}, {"distance": 0.29384588738243533, "cell_id": 56103433}, {"distance": 0.29384588738243533, "cell_id": 59256741}, {"distance": 0.2987187904208402, "cell_id": 55936835}]} +{"cell_id": 22694370, "neighbors": [{"distance": 0.0, "cell_id": 22694370}, {"distance": 0.557692954085267, "cell_id": 22757709}, {"distance": 0.6052461751576552, "cell_id": 22768618}, {"distance": 0.666421967787795, "cell_id": 22722545}, {"distance": 0.6817451681668132, "cell_id": 22684320}, {"distance": 0.7293446715095586, "cell_id": 22697458}, {"distance": 0.7345733346715426, "cell_id": 22743082}, {"distance": 0.7512047166433969, "cell_id": 22730523}, {"distance": 0.7530043122477853, "cell_id": 22768152}, {"distance": 0.7639339258247645, "cell_id": 39285649}, {"distance": 0.7853846288342277, "cell_id": 22687172}, {"distance": 0.8042621486550235, "cell_id": 22723131}, {"distance": 0.8292428536267364, "cell_id": 22718253}, {"distance": 0.8323579049996445, "cell_id": 22761197}, {"distance": 0.8381941933987316, "cell_id": 22762046}, {"distance": 0.8391465376922579, "cell_id": 22705873}, {"distance": 0.8521733760745478, "cell_id": 22684037}, {"distance": 0.8665162018281972, "cell_id": 22713641}, {"distance": 0.8699887447088167, "cell_id": 22737949}, {"distance": 0.8784986287891393, "cell_id": 31042473}, {"distance": 0.8784986287891393, "cell_id": 31540883}, {"distance": 0.8784986287891393, "cell_id": 32319757}, {"distance": 0.8784986287891393, "cell_id": 32559493}, {"distance": 0.879049494990862, "cell_id": 22756166}, {"distance": 0.8807332134201368, "cell_id": 22723138}]} +{"cell_id": 48445734, "neighbors": [{"distance": 0.0, "cell_id": 48445734}, {"distance": 0.14266422715523286, "cell_id": 45305816}, {"distance": 0.5103016879757348, "cell_id": 46146237}, {"distance": 0.5165437376670656, "cell_id": 46379099}, {"distance": 0.5295489243892332, "cell_id": 46448221}, {"distance": 0.5681443663038256, "cell_id": 46505409}, {"distance": 0.577503510364136, "cell_id": 46435370}, {"distance": 0.610300043256313, "cell_id": 46476881}, {"distance": 0.6259917999775867, "cell_id": 46902230}, {"distance": 0.6342038698564192, "cell_id": 48446844}, {"distance": 0.6429828846255478, "cell_id": 46130119}, {"distance": 0.6452759194584379, "cell_id": 46617159}, {"distance": 0.6472810786828043, "cell_id": 44654897}, {"distance": 0.6494842032865813, "cell_id": 45300314}, {"distance": 0.6517753721351695, "cell_id": 50761705}, {"distance": 0.6588125868370622, "cell_id": 44644650}, {"distance": 0.6621440698136403, "cell_id": 54069476}, {"distance": 0.6624490239508671, "cell_id": 46134101}, {"distance": 0.6695089732974265, "cell_id": 45307420}, {"distance": 0.6700804342030138, "cell_id": 46505908}, {"distance": 0.6708658796371132, "cell_id": 54856558}, {"distance": 0.670935229114127, "cell_id": 46313992}, {"distance": 0.6840310704577047, "cell_id": 46519424}, {"distance": 0.685593373761544, "cell_id": 46535047}, {"distance": 0.6879392268080973, "cell_id": 16106862}]} +{"cell_id": 17299529, "neighbors": [{"distance": 0.0, "cell_id": 16892184}, {"distance": 0.0, "cell_id": 17299529}, {"distance": 0.6625251000631652, "cell_id": 40008953}, {"distance": 0.6938208519421697, "cell_id": 17013534}, {"distance": 0.6938208519421697, "cell_id": 17442965}, {"distance": 0.696438237198191, "cell_id": 17009571}, {"distance": 0.696438237198191, "cell_id": 17438251}, {"distance": 0.7126493856664006, "cell_id": 17131493}, {"distance": 0.7126493856664006, "cell_id": 17582436}, {"distance": 0.7361141162939713, "cell_id": 17006631}, {"distance": 0.7361141162939713, "cell_id": 17434809}, {"distance": 0.7392250535905255, "cell_id": 8971282}, {"distance": 0.7392250535905255, "cell_id": 12720672}, {"distance": 0.7401436776039485, "cell_id": 9000927}, {"distance": 0.7401436776039485, "cell_id": 12750317}, {"distance": 0.7425103759176996, "cell_id": 17110330}, {"distance": 0.7425103759176996, "cell_id": 17557393}, {"distance": 0.7427181471407206, "cell_id": 14861345}, {"distance": 0.764238667186175, "cell_id": 16854391}, {"distance": 0.764238667186175, "cell_id": 17254762}, {"distance": 0.7819353072606996, "cell_id": 16883958}, {"distance": 0.7819353072606996, "cell_id": 17289820}, {"distance": 0.7956682992212771, "cell_id": 16939139}, {"distance": 0.7956682992212771, "cell_id": 17355109}, {"distance": 0.8086082863172516, "cell_id": 30097809}]} +{"cell_id": 62573433, "neighbors": [{"distance": 0.0, "cell_id": 62573433}, {"distance": 0.9077001397825986, "cell_id": 62647462}, {"distance": 0.9300370580540218, "cell_id": 62550398}, {"distance": 0.9575100397784202, "cell_id": 35638951}, {"distance": 0.9575100397784202, "cell_id": 35977515}, {"distance": 1.0572288515694381, "cell_id": 62347613}, {"distance": 1.068779877278541, "cell_id": 62647746}, {"distance": 1.1124334950551138, "cell_id": 14717534}, {"distance": 1.115674921170161, "cell_id": 62348527}, {"distance": 1.129007373043334, "cell_id": 54830425}, {"distance": 1.1299623422705019, "cell_id": 62661673}, {"distance": 1.1380173060747383, "cell_id": 54837845}, {"distance": 1.1465753890453332, "cell_id": 35604788}, {"distance": 1.1465753890453332, "cell_id": 35943352}, {"distance": 1.1561825572403484, "cell_id": 17613546}, {"distance": 1.1607612801558709, "cell_id": 35604752}, {"distance": 1.1607612801558709, "cell_id": 35943316}, {"distance": 1.1746461174868859, "cell_id": 62899555}, {"distance": 1.1780865492202117, "cell_id": 62549435}, {"distance": 1.178348571064403, "cell_id": 62550529}, {"distance": 1.17847963617445, "cell_id": 16664640}, {"distance": 1.185403386287579, "cell_id": 35597586}, {"distance": 1.185403386287579, "cell_id": 35936150}, {"distance": 1.1942100470781125, "cell_id": 21776360}, {"distance": 1.1942100470781125, "cell_id": 22009830}]} +{"cell_id": 23167487, "neighbors": [{"distance": 0.0, "cell_id": 10446424}, {"distance": 0.0, "cell_id": 23167487}, {"distance": 0.0, "cell_id": 24992856}, {"distance": 1.070144334189743, "cell_id": 5455740}, {"distance": 1.070144334189743, "cell_id": 6992876}, {"distance": 1.2086444526584714, "cell_id": 10446086}, {"distance": 1.2086444526584714, "cell_id": 24992815}, {"distance": 1.2086444526584714, "cell_id": 28019252}, {"distance": 1.2119927523535812, "cell_id": 6441492}, {"distance": 1.2119927523535812, "cell_id": 7028968}, {"distance": 1.2196439847592229, "cell_id": 10449107}, {"distance": 1.2196439847592229, "cell_id": 24990309}, {"distance": 1.2196439847592229, "cell_id": 27392891}, {"distance": 1.2726567333453047, "cell_id": 10469090}, {"distance": 1.2726567333453047, "cell_id": 23513738}, {"distance": 1.2726567333453047, "cell_id": 24998607}, {"distance": 1.3057979542738523, "cell_id": 10465497}, {"distance": 1.3057979542738523, "cell_id": 25001829}, {"distance": 1.3057979542738523, "cell_id": 28000379}, {"distance": 1.3396206977661, "cell_id": 18372117}, {"distance": 1.3396206977661, "cell_id": 41848842}, {"distance": 1.3402844007663792, "cell_id": 10469427}, {"distance": 1.3402844007663792, "cell_id": 24774931}, {"distance": 1.3402844007663792, "cell_id": 25000669}, {"distance": 1.3478345108887053, "cell_id": 10440362}]} +{"cell_id": 26534000, "neighbors": [{"distance": 0.0, "cell_id": 20127812}, {"distance": 0.0, "cell_id": 26534000}, {"distance": 0.0, "cell_id": 27709669}, {"distance": 0.2660717750815026, "cell_id": 20113505}, {"distance": 0.2660717750815026, "cell_id": 26759111}, {"distance": 0.2660717750815026, "cell_id": 27695386}, {"distance": 0.26672197462873976, "cell_id": 19941773}, {"distance": 0.26672197462873976, "cell_id": 26110611}, {"distance": 0.26672197462873976, "cell_id": 27806932}, {"distance": 0.3216025075699551, "cell_id": 19790476}, {"distance": 0.3216025075699551, "cell_id": 23082950}, {"distance": 0.3216025075699551, "cell_id": 27602514}, {"distance": 0.34244937590100166, "cell_id": 19804782}, {"distance": 0.34244937590100166, "cell_id": 25278307}, {"distance": 0.34244937590100166, "cell_id": 27592252}, {"distance": 0.34314654553842, "cell_id": 20101431}, {"distance": 0.34314654553842, "cell_id": 25253708}, {"distance": 0.34314654553842, "cell_id": 27741181}, {"distance": 0.3622225834926773, "cell_id": 19830600}, {"distance": 0.3622225834926773, "cell_id": 25533553}, {"distance": 0.3622225834926773, "cell_id": 27618094}, {"distance": 0.36337448621378365, "cell_id": 20031421}, {"distance": 0.36337448621378365, "cell_id": 24128693}, {"distance": 0.36337448621378365, "cell_id": 27659343}, {"distance": 0.3704427987934151, "cell_id": 20106105}]} +{"cell_id": 44659388, "neighbors": [{"distance": 0.0, "cell_id": 44659388}, {"distance": 0.5502821583111552, "cell_id": 43148333}, {"distance": 0.7032255999520876, "cell_id": 44655544}, {"distance": 0.7062250747998498, "cell_id": 49893313}, {"distance": 0.7148094666356357, "cell_id": 8887511}, {"distance": 0.7202867606393827, "cell_id": 49731363}, {"distance": 0.7500826286868536, "cell_id": 39927600}, {"distance": 0.7592829717685915, "cell_id": 49312808}, {"distance": 0.7642116946164461, "cell_id": 51181532}, {"distance": 0.7837366841354377, "cell_id": 35410150}, {"distance": 0.7891523455047735, "cell_id": 53662562}, {"distance": 0.7952506216400985, "cell_id": 50984505}, {"distance": 0.8078846957835171, "cell_id": 54046910}, {"distance": 0.8087207559839766, "cell_id": 49242767}, {"distance": 0.8122862279260427, "cell_id": 44631750}, {"distance": 0.8224488682980691, "cell_id": 13570905}, {"distance": 0.8245627293081746, "cell_id": 51278495}, {"distance": 0.8294177918834793, "cell_id": 51149969}, {"distance": 0.8310536597933251, "cell_id": 50853457}, {"distance": 0.8311139100482459, "cell_id": 49326779}, {"distance": 0.8336491383341722, "cell_id": 50063936}, {"distance": 0.8338038325048883, "cell_id": 33390027}, {"distance": 0.8338038325048883, "cell_id": 34282323}, {"distance": 0.8352146396804676, "cell_id": 43158328}, {"distance": 0.8356937996608627, "cell_id": 50768253}]} +{"cell_id": 19305601, "neighbors": [{"distance": 0.0, "cell_id": 19305601}, {"distance": 0.4840845988046707, "cell_id": 62703305}, {"distance": 0.5166404086110352, "cell_id": 33225773}, {"distance": 0.522260956371888, "cell_id": 33114815}, {"distance": 0.5258143916090464, "cell_id": 39224166}, {"distance": 0.5703620210607236, "cell_id": 19297169}, {"distance": 0.5713669851409543, "cell_id": 62760515}, {"distance": 0.5906809795572281, "cell_id": 62760669}, {"distance": 0.5945336044914911, "cell_id": 19369551}, {"distance": 0.5955004765259543, "cell_id": 19355648}, {"distance": 0.5959358299561397, "cell_id": 19355388}, {"distance": 0.6002697109534365, "cell_id": 19372456}, {"distance": 0.6102235260897606, "cell_id": 18983860}, {"distance": 0.611282508275862, "cell_id": 19369459}, {"distance": 0.6173141064836054, "cell_id": 30114200}, {"distance": 0.6246227078753855, "cell_id": 19350432}, {"distance": 0.6247059743368177, "cell_id": 32986984}, {"distance": 0.6255116451565327, "cell_id": 7716100}, {"distance": 0.6285577234002349, "cell_id": 19356474}, {"distance": 0.628764018294095, "cell_id": 62761238}, {"distance": 0.6323479808277176, "cell_id": 18969245}, {"distance": 0.6329443723151437, "cell_id": 19371142}, {"distance": 0.6351559788663683, "cell_id": 19371270}, {"distance": 0.6353059649248224, "cell_id": 19305413}, {"distance": 0.6366393112019486, "cell_id": 33109170}]} +{"cell_id": 28496906, "neighbors": [{"distance": 0.0, "cell_id": 11452800}, {"distance": 0.0, "cell_id": 28496906}, {"distance": 0.0, "cell_id": 29774030}, {"distance": 0.43121253152005296, "cell_id": 11442213}, {"distance": 0.43121253152005296, "cell_id": 26154435}, {"distance": 0.43121253152005296, "cell_id": 29784128}, {"distance": 0.5113800366188728, "cell_id": 11435106}, {"distance": 0.5113800366188728, "cell_id": 23623003}, {"distance": 0.5113800366188728, "cell_id": 29763506}, {"distance": 0.5321562781685168, "cell_id": 11444973}, {"distance": 0.5321562781685168, "cell_id": 28498222}, {"distance": 0.5321562781685168, "cell_id": 29790559}, {"distance": 0.5331849622766083, "cell_id": 11555673}, {"distance": 0.5331849622766083, "cell_id": 26418302}, {"distance": 0.5331849622766083, "cell_id": 29651387}, {"distance": 0.5497468582374582, "cell_id": 11448284}, {"distance": 0.5497468582374582, "cell_id": 27341216}, {"distance": 0.5497468582374582, "cell_id": 29776030}, {"distance": 0.5584001110432851, "cell_id": 11505954}, {"distance": 0.5584001110432851, "cell_id": 23803688}, {"distance": 0.5584001110432851, "cell_id": 29759393}, {"distance": 0.5663025379288813, "cell_id": 11432983}, {"distance": 0.5663025379288813, "cell_id": 28496727}, {"distance": 0.5663025379288813, "cell_id": 29770595}, {"distance": 0.5774471248457805, "cell_id": 11567658}]} +{"cell_id": 50744667, "neighbors": [{"distance": 0.0, "cell_id": 50744667}, {"distance": 0.5188969948522565, "cell_id": 13462806}, {"distance": 0.9224211994986825, "cell_id": 50743946}, {"distance": 0.9836853940363364, "cell_id": 40351643}, {"distance": 1.0226479877963544, "cell_id": 50743899}, {"distance": 1.0353626890184005, "cell_id": 8753937}, {"distance": 1.0353626890184005, "cell_id": 8789557}, {"distance": 1.0655075032371562, "cell_id": 36893800}, {"distance": 1.070413554998173, "cell_id": 50744021}, {"distance": 1.0928246332355074, "cell_id": 37296750}, {"distance": 1.0929946782805957, "cell_id": 36934830}, {"distance": 1.1073224033044071, "cell_id": 13959485}, {"distance": 1.1283591368452974, "cell_id": 50743961}, {"distance": 1.135116370386319, "cell_id": 33007517}, {"distance": 1.1393691910534722, "cell_id": 62150578}, {"distance": 1.1397864429957236, "cell_id": 30888879}, {"distance": 1.1397864429957236, "cell_id": 31315450}, {"distance": 1.1507158678790455, "cell_id": 3217419}, {"distance": 1.1529318058035718, "cell_id": 20691045}, {"distance": 1.153075844694609, "cell_id": 50737724}, {"distance": 1.1668954562929472, "cell_id": 50756667}, {"distance": 1.1689932505329488, "cell_id": 50744008}, {"distance": 1.1734907841793636, "cell_id": 13404331}, {"distance": 1.1740573702109505, "cell_id": 50744784}, {"distance": 1.1749764475037656, "cell_id": 13621563}]} +{"cell_id": 36517874, "neighbors": [{"distance": 0.0, "cell_id": 36517874}, {"distance": 1.1530777582064413, "cell_id": 36205883}, {"distance": 1.211874117524942, "cell_id": 54847311}, {"distance": 1.2138541744645335, "cell_id": 35348727}, {"distance": 1.214192385892637, "cell_id": 45623462}, {"distance": 1.214192385892637, "cell_id": 53065820}, {"distance": 1.2284433136928963, "cell_id": 35749571}, {"distance": 1.2284433136928963, "cell_id": 36088135}, {"distance": 1.2415779797070594, "cell_id": 36525764}, {"distance": 1.245824653389873, "cell_id": 14356693}, {"distance": 1.2545935156419026, "cell_id": 13618570}, {"distance": 1.2600715608709967, "cell_id": 36534261}, {"distance": 1.2638713650924225, "cell_id": 15635982}, {"distance": 1.267242065046192, "cell_id": 45454483}, {"distance": 1.267242065046192, "cell_id": 52896860}, {"distance": 1.2724680097324337, "cell_id": 30647935}, {"distance": 1.2724680097324337, "cell_id": 32062225}, {"distance": 1.2724680097324337, "cell_id": 32687183}, {"distance": 1.2825115536617522, "cell_id": 14165402}, {"distance": 1.2867277742743024, "cell_id": 54846777}, {"distance": 1.2952720305720666, "cell_id": 15553710}, {"distance": 1.295778491650074, "cell_id": 35637096}, {"distance": 1.295778491650074, "cell_id": 35975660}, {"distance": 1.2978979920735896, "cell_id": 36211746}, {"distance": 1.2990194840717584, "cell_id": 54847360}]} +{"cell_id": 48695688, "neighbors": [{"distance": 0.0, "cell_id": 48695688}, {"distance": 0.3791479813668783, "cell_id": 48946645}, {"distance": 0.4384995072870023, "cell_id": 48742468}, {"distance": 0.4446545650223146, "cell_id": 48599973}, {"distance": 0.4629629151719755, "cell_id": 48700720}, {"distance": 0.4890045864773436, "cell_id": 48699828}, {"distance": 0.49925806105338355, "cell_id": 48744319}, {"distance": 0.4997153020133161, "cell_id": 48894958}, {"distance": 0.5006996816530115, "cell_id": 48702577}, {"distance": 0.5100868466527533, "cell_id": 48695216}, {"distance": 0.5113411795275185, "cell_id": 48911627}, {"distance": 0.5123043248642823, "cell_id": 48703000}, {"distance": 0.5147627659687511, "cell_id": 48954185}, {"distance": 0.5158309690138877, "cell_id": 48741185}, {"distance": 0.5231453589755483, "cell_id": 48696661}, {"distance": 0.523709956394548, "cell_id": 48748232}, {"distance": 0.5335615777818543, "cell_id": 48740871}, {"distance": 0.5337717374435174, "cell_id": 48702810}, {"distance": 0.5399563990145667, "cell_id": 48939186}, {"distance": 0.5417999971223761, "cell_id": 48938825}, {"distance": 0.5419779786454277, "cell_id": 48696364}, {"distance": 0.543532314645402, "cell_id": 48747611}, {"distance": 0.5469262355830463, "cell_id": 48912456}, {"distance": 0.5526002274207652, "cell_id": 57190905}, {"distance": 0.5538494094455918, "cell_id": 48746559}]} +{"cell_id": 60813275, "neighbors": [{"distance": 0.0, "cell_id": 60452528}, {"distance": 0.0, "cell_id": 60813275}, {"distance": 0.4784588678866514, "cell_id": 14821415}, {"distance": 0.6036198832743747, "cell_id": 38588310}, {"distance": 0.6036198832743747, "cell_id": 39109596}, {"distance": 0.6475748712112381, "cell_id": 60433907}, {"distance": 0.6475748712112381, "cell_id": 60950885}, {"distance": 0.656708006418707, "cell_id": 21378710}, {"distance": 0.6786835576211582, "cell_id": 38312331}, {"distance": 0.6786835576211582, "cell_id": 39071025}, {"distance": 0.6896347292690185, "cell_id": 60885080}, {"distance": 0.6968484545627439, "cell_id": 2703582}, {"distance": 0.7011205136343381, "cell_id": 2617948}, {"distance": 0.7044681185696495, "cell_id": 60363059}, {"distance": 0.7098117006694632, "cell_id": 38857489}, {"distance": 0.7098117006694632, "cell_id": 39141335}, {"distance": 0.7200703373882384, "cell_id": 21381649}, {"distance": 0.720873662883106, "cell_id": 60455714}, {"distance": 0.720873662883106, "cell_id": 60849246}, {"distance": 0.7219850492730128, "cell_id": 61089762}, {"distance": 0.7258691764282861, "cell_id": 21381896}, {"distance": 0.7264617719089121, "cell_id": 60457937}, {"distance": 0.7277207608273721, "cell_id": 60361256}, {"distance": 0.7277207608273721, "cell_id": 61083760}, {"distance": 0.7281036118155642, "cell_id": 61125297}]} +{"cell_id": 19655252, "neighbors": [{"distance": 0.0, "cell_id": 19655252}, {"distance": 0.6408510031825089, "cell_id": 19655191}, {"distance": 0.6807057987486006, "cell_id": 19670414}, {"distance": 0.7349936437242249, "cell_id": 19646905}, {"distance": 0.7399658967810823, "cell_id": 19670402}, {"distance": 0.7459772919110166, "cell_id": 20974983}, {"distance": 0.7569016964054043, "cell_id": 19664631}, {"distance": 0.7611430466396377, "cell_id": 20966496}, {"distance": 0.7686682394462221, "cell_id": 19655319}, {"distance": 0.7817270547722077, "cell_id": 19655227}, {"distance": 0.781995553960839, "cell_id": 20966070}, {"distance": 0.7853262742394614, "cell_id": 19655440}, {"distance": 0.7879382557709795, "cell_id": 19674867}, {"distance": 0.7888212590141144, "cell_id": 19670425}, {"distance": 0.7912224010954692, "cell_id": 20961890}, {"distance": 0.7922496208864932, "cell_id": 19672328}, {"distance": 0.7924991102010166, "cell_id": 19655215}, {"distance": 0.7927104845336848, "cell_id": 19663464}, {"distance": 0.7981011144794102, "cell_id": 19667663}, {"distance": 0.8055695176766731, "cell_id": 19650135}, {"distance": 0.8059614358493479, "cell_id": 19670476}, {"distance": 0.8102115776525487, "cell_id": 19655190}, {"distance": 0.8166812845563338, "cell_id": 20966754}, {"distance": 0.8224062675680186, "cell_id": 19655643}, {"distance": 0.8287063358029574, "cell_id": 19664098}]} +{"cell_id": 51210730, "neighbors": [{"distance": 0.0, "cell_id": 51210730}, {"distance": 0.4790708278935541, "cell_id": 51088388}, {"distance": 0.6065592205177877, "cell_id": 45029131}, {"distance": 0.6084043573941836, "cell_id": 22723436}, {"distance": 0.6205580787282589, "cell_id": 46815035}, {"distance": 0.6653011530321951, "cell_id": 51187764}, {"distance": 0.6695241350867374, "cell_id": 50050487}, {"distance": 0.6774195082451118, "cell_id": 49812238}, {"distance": 0.680082661194638, "cell_id": 51303732}, {"distance": 0.6859206440600827, "cell_id": 53775296}, {"distance": 0.6901902161475535, "cell_id": 44287719}, {"distance": 0.708249016267652, "cell_id": 51093140}, {"distance": 0.7130685190418454, "cell_id": 22733697}, {"distance": 0.713610800070503, "cell_id": 44191702}, {"distance": 0.715700661542474, "cell_id": 46662188}, {"distance": 0.7171231362532456, "cell_id": 12578155}, {"distance": 0.7171231362532456, "cell_id": 12977778}, {"distance": 0.7173154130408083, "cell_id": 35489637}, {"distance": 0.7180911490243059, "cell_id": 49874876}, {"distance": 0.718205498676463, "cell_id": 45676723}, {"distance": 0.718205498676463, "cell_id": 53119074}, {"distance": 0.7189438638579081, "cell_id": 8447292}, {"distance": 0.7189438638579081, "cell_id": 51653472}, {"distance": 0.7189438638579081, "cell_id": 52216416}, {"distance": 0.7191792593746424, "cell_id": 35424644}]} +{"cell_id": 62713500, "neighbors": [{"distance": 0.0, "cell_id": 62713500}, {"distance": 0.5369514480353094, "cell_id": 62711591}, {"distance": 0.6021829964612607, "cell_id": 62707364}, {"distance": 0.6358859992769841, "cell_id": 62714277}, {"distance": 0.6365235672777158, "cell_id": 62716337}, {"distance": 0.6464027903395765, "cell_id": 62718576}, {"distance": 0.6503877864806157, "cell_id": 62717175}, {"distance": 0.6649456717494066, "cell_id": 62717322}, {"distance": 0.6687284970504356, "cell_id": 62716431}, {"distance": 0.6692722150665886, "cell_id": 62620175}, {"distance": 0.6704517311374469, "cell_id": 62718189}, {"distance": 0.6762758364050578, "cell_id": 62720261}, {"distance": 0.686745915269256, "cell_id": 62633205}, {"distance": 0.6876808555557091, "cell_id": 62713320}, {"distance": 0.6886310097872755, "cell_id": 62712191}, {"distance": 0.6889758440517073, "cell_id": 62621433}, {"distance": 0.6961374416046356, "cell_id": 62709265}, {"distance": 0.705346915490458, "cell_id": 62731456}, {"distance": 0.7093420743904721, "cell_id": 62714820}, {"distance": 0.7201313793712686, "cell_id": 62712294}, {"distance": 0.7206676569936631, "cell_id": 62703539}, {"distance": 0.7219678722822523, "cell_id": 62622155}, {"distance": 0.7262395268071373, "cell_id": 62714042}, {"distance": 0.7274575518949645, "cell_id": 62705073}, {"distance": 0.728599535237919, "cell_id": 62624913}]} +{"cell_id": 14521844, "neighbors": [{"distance": 0.0, "cell_id": 14521844}, {"distance": 0.4359932091259622, "cell_id": 45991350}, {"distance": 0.4359932091259622, "cell_id": 53433672}, {"distance": 0.6468088703291106, "cell_id": 45449897}, {"distance": 0.6468088703291106, "cell_id": 52892275}, {"distance": 0.6592875014930719, "cell_id": 14315997}, {"distance": 0.698665638280336, "cell_id": 717253}, {"distance": 0.698665638280336, "cell_id": 1847165}, {"distance": 0.7048770438857611, "cell_id": 60180183}, {"distance": 0.7048770438857611, "cell_id": 60258116}, {"distance": 0.7302952463917286, "cell_id": 15572496}, {"distance": 0.7368327844061339, "cell_id": 15223637}, {"distance": 0.7408468055680458, "cell_id": 7488183}, {"distance": 0.7408468055680458, "cell_id": 7609387}, {"distance": 0.7492252985445539, "cell_id": 15359600}, {"distance": 0.7513163241595278, "cell_id": 21114557}, {"distance": 0.7546938454237285, "cell_id": 44877170}, {"distance": 0.7676241390447742, "cell_id": 13685232}, {"distance": 0.7689299455779279, "cell_id": 14595758}, {"distance": 0.7785812919140477, "cell_id": 14583483}, {"distance": 0.7862640928381238, "cell_id": 14810117}, {"distance": 0.7866922426429679, "cell_id": 15314229}, {"distance": 0.7914585342540689, "cell_id": 60173092}, {"distance": 0.7914585342540689, "cell_id": 60246859}, {"distance": 0.8132341518097352, "cell_id": 42312387}]} +{"cell_id": 61516728, "neighbors": [{"distance": 0.0, "cell_id": 61516728}, {"distance": 0.3288066889054141, "cell_id": 4730060}, {"distance": 0.40634554050503574, "cell_id": 54140806}, {"distance": 0.4108483945169508, "cell_id": 62038398}, {"distance": 0.4392674767578177, "cell_id": 4717396}, {"distance": 0.44666229144647557, "cell_id": 33549321}, {"distance": 0.44666229144647557, "cell_id": 34441617}, {"distance": 0.4473651388256785, "cell_id": 16098469}, {"distance": 0.44771335396552747, "cell_id": 4691064}, {"distance": 0.4529140867504498, "cell_id": 4731728}, {"distance": 0.46963862092991293, "cell_id": 4693640}, {"distance": 0.4705377030597628, "cell_id": 4728793}, {"distance": 0.4739011957366877, "cell_id": 54129985}, {"distance": 0.4743273219757344, "cell_id": 4686091}, {"distance": 0.4797630370134442, "cell_id": 15966487}, {"distance": 0.48396241924212136, "cell_id": 4720867}, {"distance": 0.4845753775487582, "cell_id": 4705437}, {"distance": 0.4882510664484403, "cell_id": 43007744}, {"distance": 0.49418768244854183, "cell_id": 15971269}, {"distance": 0.4954307301427093, "cell_id": 4713038}, {"distance": 0.49735237520114034, "cell_id": 49721981}, {"distance": 0.5030580360945108, "cell_id": 16080000}, {"distance": 0.5038010562119387, "cell_id": 4710816}, {"distance": 0.5051929338241935, "cell_id": 4685910}, {"distance": 0.5129379132526222, "cell_id": 61561938}]} +{"cell_id": 61427707, "neighbors": [{"distance": 0.0, "cell_id": 61427707}, {"distance": 0.6144649207655538, "cell_id": 16445418}, {"distance": 0.646616889996576, "cell_id": 16553729}, {"distance": 0.7461048480456235, "cell_id": 16596272}, {"distance": 0.7750174222617595, "cell_id": 16634084}, {"distance": 0.7750209411754649, "cell_id": 51051692}, {"distance": 0.7820762792180753, "cell_id": 16703129}, {"distance": 0.7864632516790016, "cell_id": 16678250}, {"distance": 0.8244627892189405, "cell_id": 16528060}, {"distance": 0.8288154962008026, "cell_id": 16634393}, {"distance": 0.8419775960913605, "cell_id": 61459551}, {"distance": 0.8566124028270066, "cell_id": 16666464}, {"distance": 0.8667868011056283, "cell_id": 44982793}, {"distance": 0.871987008625847, "cell_id": 16688420}, {"distance": 0.8746874573776824, "cell_id": 50997365}, {"distance": 0.8936524896238134, "cell_id": 16703390}, {"distance": 0.8937156133375643, "cell_id": 42595476}, {"distance": 0.8937156133375643, "cell_id": 42662151}, {"distance": 0.8975506445328327, "cell_id": 16437613}, {"distance": 0.8987834193452605, "cell_id": 16673434}, {"distance": 0.9054131254342005, "cell_id": 16474232}, {"distance": 0.9096838705706686, "cell_id": 16728463}, {"distance": 0.9107304351805902, "cell_id": 50995410}, {"distance": 0.911125831603279, "cell_id": 50930272}, {"distance": 0.911745422540887, "cell_id": 16719991}]} +{"cell_id": 23813076, "neighbors": [{"distance": 0.0, "cell_id": 20262953}, {"distance": 0.0, "cell_id": 23290779}, {"distance": 0.0, "cell_id": 23813076}, {"distance": 0.4338640210459501, "cell_id": 20274708}, {"distance": 0.4338640210459501, "cell_id": 23304809}, {"distance": 0.4338640210459501, "cell_id": 28017310}, {"distance": 0.47437975949736877, "cell_id": 20260661}, {"distance": 0.47437975949736877, "cell_id": 23296234}, {"distance": 0.47437975949736877, "cell_id": 26539901}, {"distance": 0.4779407484578746, "cell_id": 20242002}, {"distance": 0.4779407484578746, "cell_id": 23343990}, {"distance": 0.4779407484578746, "cell_id": 28977650}, {"distance": 0.5175152539455917, "cell_id": 20241394}, {"distance": 0.5175152539455917, "cell_id": 23344604}, {"distance": 0.5175152539455917, "cell_id": 24533338}, {"distance": 0.5250850514398399, "cell_id": 20190844}, {"distance": 0.5250850514398399, "cell_id": 23320698}, {"distance": 0.5250850514398399, "cell_id": 29176030}, {"distance": 0.5411594976097907, "cell_id": 20258885}, {"distance": 0.5411594976097907, "cell_id": 23294812}, {"distance": 0.5411594976097907, "cell_id": 26115070}, {"distance": 0.5427233883906821, "cell_id": 20269114}, {"distance": 0.5427233883906821, "cell_id": 23293146}, {"distance": 0.5427233883906821, "cell_id": 26976237}, {"distance": 0.5624900033224448, "cell_id": 20242936}]} +{"cell_id": 5254683, "neighbors": [{"distance": 0.0, "cell_id": 5046196}, {"distance": 0.0, "cell_id": 5254683}, {"distance": 0.3799534034823139, "cell_id": 5040587}, {"distance": 0.3799534034823139, "cell_id": 5872339}, {"distance": 0.3999514837859882, "cell_id": 3336226}, {"distance": 0.3999514837859882, "cell_id": 3423140}, {"distance": 0.44074845003104507, "cell_id": 5110924}, {"distance": 0.44074845003104507, "cell_id": 6334266}, {"distance": 0.44981107325761893, "cell_id": 5122034}, {"distance": 0.44981107325761893, "cell_id": 6114451}, {"distance": 0.46992864559243125, "cell_id": 18465753}, {"distance": 0.46992864559243125, "cell_id": 41181465}, {"distance": 0.4805631046645542, "cell_id": 5141713}, {"distance": 0.4805631046645542, "cell_id": 5301465}, {"distance": 0.4879051504579435, "cell_id": 5102954}, {"distance": 0.4879051504579435, "cell_id": 5485673}, {"distance": 0.5009210904922264, "cell_id": 5081349}, {"distance": 0.5009210904922264, "cell_id": 5558699}, {"distance": 0.5021257049236438, "cell_id": 5052677}, {"distance": 0.5021257049236438, "cell_id": 6042699}, {"distance": 0.526170329019862, "cell_id": 5073632}, {"distance": 0.526170329019862, "cell_id": 6210519}, {"distance": 0.5268533612914597, "cell_id": 3335214}, {"distance": 0.5268533612914597, "cell_id": 3422968}, {"distance": 0.5291550581025147, "cell_id": 5080322}]} +{"cell_id": 34710195, "neighbors": [{"distance": 0.0, "cell_id": 33817899}, {"distance": 0.0, "cell_id": 34710195}, {"distance": 0.48189921126737956, "cell_id": 43390954}, {"distance": 0.4879399007350691, "cell_id": 53667562}, {"distance": 0.5054604666655181, "cell_id": 53866735}, {"distance": 0.5130735609642998, "cell_id": 12593081}, {"distance": 0.5130735609642998, "cell_id": 12992704}, {"distance": 0.5159252318976161, "cell_id": 53517154}, {"distance": 0.547669129319318, "cell_id": 45038134}, {"distance": 0.5523441880973903, "cell_id": 44142337}, {"distance": 0.5543826117784394, "cell_id": 16303281}, {"distance": 0.5675362573770159, "cell_id": 52750094}, {"distance": 0.5675362573770159, "cell_id": 61775686}, {"distance": 0.5717852320916406, "cell_id": 51084638}, {"distance": 0.5799731243415738, "cell_id": 15196196}, {"distance": 0.590980767034079, "cell_id": 50913522}, {"distance": 0.6052205527510841, "cell_id": 16312937}, {"distance": 0.6064640888181764, "cell_id": 39736631}, {"distance": 0.6102648803582389, "cell_id": 33669519}, {"distance": 0.6102648803582389, "cell_id": 34561815}, {"distance": 0.6154782518844387, "cell_id": 51152460}, {"distance": 0.616437792007889, "cell_id": 48370110}, {"distance": 0.6200490807930268, "cell_id": 44477773}, {"distance": 0.620121634005225, "cell_id": 51076915}, {"distance": 0.627329696584522, "cell_id": 47949414}]} +{"cell_id": 7802948, "neighbors": [{"distance": 0.0, "cell_id": 7541724}, {"distance": 0.0, "cell_id": 7802948}, {"distance": 0.5451089212603693, "cell_id": 7534742}, {"distance": 0.5451089212603693, "cell_id": 7792225}, {"distance": 0.7633855554912773, "cell_id": 7459811}, {"distance": 0.7633855554912773, "cell_id": 7536458}, {"distance": 0.7633855554912773, "cell_id": 7794825}, {"distance": 0.7809397180065489, "cell_id": 7534435}, {"distance": 0.7809397180065489, "cell_id": 7791768}, {"distance": 0.8076439105514693, "cell_id": 7454413}, {"distance": 0.8076439105514693, "cell_id": 7542063}, {"distance": 0.8076439105514693, "cell_id": 7803506}, {"distance": 0.8202525515287687, "cell_id": 7542277}, {"distance": 0.8202525515287687, "cell_id": 7803820}, {"distance": 0.8211321345285852, "cell_id": 7451945}, {"distance": 0.8211321345285852, "cell_id": 7542700}, {"distance": 0.8211321345285852, "cell_id": 7804501}, {"distance": 0.8223040976076752, "cell_id": 7542111}, {"distance": 0.8223040976076752, "cell_id": 7803573}, {"distance": 0.836553518268298, "cell_id": 7535356}, {"distance": 0.836553518268298, "cell_id": 7793143}, {"distance": 0.8473930859766599, "cell_id": 7453925}, {"distance": 0.8473930859766599, "cell_id": 7532425}, {"distance": 0.8473930859766599, "cell_id": 7788790}, {"distance": 0.8577959016868808, "cell_id": 7537541}]} +{"cell_id": 18284166, "neighbors": [{"distance": 0.0, "cell_id": 18284166}, {"distance": 0.0, "cell_id": 42144748}, {"distance": 0.3326035822458916, "cell_id": 20451256}, {"distance": 0.3326035822458916, "cell_id": 23177298}, {"distance": 0.3326035822458916, "cell_id": 28731395}, {"distance": 0.43826445324080965, "cell_id": 18574135}, {"distance": 0.43826445324080965, "cell_id": 42139586}, {"distance": 0.48130913595508384, "cell_id": 17951147}, {"distance": 0.48130913595508384, "cell_id": 42154093}, {"distance": 0.4995179890879576, "cell_id": 6433031}, {"distance": 0.4995179890879576, "cell_id": 6907347}, {"distance": 0.5114650594445956, "cell_id": 18225670}, {"distance": 0.5114650594445956, "cell_id": 42135181}, {"distance": 0.5166222840856423, "cell_id": 6323368}, {"distance": 0.5166222840856423, "cell_id": 6916137}, {"distance": 0.5217361148585429, "cell_id": 18465232}, {"distance": 0.5217361148585429, "cell_id": 42142867}, {"distance": 0.5233659146979132, "cell_id": 3284009}, {"distance": 0.5233659146979132, "cell_id": 3590573}, {"distance": 0.5312164960898458, "cell_id": 6379922}, {"distance": 0.5312164960898458, "cell_id": 6918437}, {"distance": 0.5421211363480042, "cell_id": 18762359}, {"distance": 0.5421211363480042, "cell_id": 42142529}, {"distance": 0.569803157021861, "cell_id": 17875142}, {"distance": 0.569803157021861, "cell_id": 42158783}]} +{"cell_id": 57719463, "neighbors": [{"distance": 0.0, "cell_id": 57719463}, {"distance": 0.2590955690445496, "cell_id": 57659954}, {"distance": 0.2788042900637496, "cell_id": 57302135}, {"distance": 0.2799455909554843, "cell_id": 58046836}, {"distance": 0.2867939791581781, "cell_id": 56589281}, {"distance": 0.2867939791581781, "cell_id": 59376249}, {"distance": 0.2870699100962709, "cell_id": 58006277}, {"distance": 0.2870699100962709, "cell_id": 59725499}, {"distance": 0.2878982997191029, "cell_id": 56581682}, {"distance": 0.29187919392866013, "cell_id": 58010636}, {"distance": 0.29234357713600245, "cell_id": 56430389}, {"distance": 0.3038371473810605, "cell_id": 56643368}, {"distance": 0.3038371473810605, "cell_id": 59389685}, {"distance": 0.304555805259517, "cell_id": 57367848}, {"distance": 0.3086665163092873, "cell_id": 57395192}, {"distance": 0.3086665163092873, "cell_id": 59575001}, {"distance": 0.30989699734370274, "cell_id": 57292507}, {"distance": 0.30989699734370274, "cell_id": 59549779}, {"distance": 0.31158770564306154, "cell_id": 57142943}, {"distance": 0.31422531137870807, "cell_id": 57599434}, {"distance": 0.31422531137870807, "cell_id": 59625386}, {"distance": 0.3168025464874288, "cell_id": 57178244}, {"distance": 0.3168025464874288, "cell_id": 59521693}, {"distance": 0.31858290146389673, "cell_id": 57190616}, {"distance": 0.31858290146389673, "cell_id": 59524779}]} +""" From 8088f9ed4d43fc7a34dd8f63f9644adba1c5901d Mon Sep 17 00:00:00 2001 From: Mike Lin Date: Sun, 16 Jun 2024 22:27:58 -1000 Subject: [PATCH 2/8] use DEFAULT_TILEDB_CONFIGURATION --- .../cellxgene_census/experimental/_embedding_search.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py index 970b3a77a..67c543eb7 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py @@ -10,7 +10,7 @@ import tiledb.vector_search as vs import tiledbsoma as soma -from .._open import open_soma +from .._open import DEFAULT_TILEDB_CONFIGURATION, open_soma CENSUS_EMBEDDINGS_INDEX_URI_FSTR = ( "s3://cellxgene-contrib-public/contrib/cell-census/soma/{census_version}/indexes/{embedding_id}" @@ -74,12 +74,10 @@ def find_nearest_obs( index_uri = CENSUS_EMBEDDINGS_INDEX_URI_FSTR.format( census_version=embedding_metadata["census_version"], embedding_id=embedding_metadata["id"] ) + config = DEFAULT_TILEDB_CONFIGURATION.copy() + config["vfs.s3.region"] = CENSUS_EMBEDDINGS_INDEX_REGION memory_vectors = memory_GiB * (2**30) // (4 * n_features) # number of float32 vectors - index = vs.ivf_flat_index.IVFFlatIndex( - uri=index_uri, - config={"vfs.s3.region": CENSUS_EMBEDDINGS_INDEX_REGION, "vfs.s3.no_sign_request": "true"}, - memory_budget=memory_vectors, - ) + index = vs.ivf_flat_index.IVFFlatIndex(uri=index_uri, config=config, memory_budget=memory_vectors) distances, neighbor_ids = index.query(query.obsm[embedding_name], k=k, nprobe=nprobe, **kwargs) return NeighborObs(distances=distances, neighbor_ids=neighbor_ids) From fc91d2d1a3d3b002d5a3e9c83bfae8ab291da957 Mon Sep 17 00:00:00 2001 From: Mike Lin Date: Sun, 16 Jun 2024 22:43:31 -1000 Subject: [PATCH 3/8] workaround --- .../src/cellxgene_census/experimental/_embedding.py | 2 +- .../src/cellxgene_census/experimental/_embedding_search.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py index 6b98709b1..58edfcda5 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py @@ -92,7 +92,7 @@ def _get_embedding( raise ValueError("Census and embedding mismatch - measurement_name does not exist") embedding_shape = (len(obs_soma_joinids), E.shape[1]) - embedding = np.full(embedding_shape, np.NaN, dtype=np.float32, order="C") + embedding: npt.NDArray[np.float32] = np.full(embedding_shape, np.NaN, dtype=np.float32, order="C") obs_indexer = soma.IntIndexer(obs_soma_joinids, context=E.context) for tbl in E.read(coords=(obs_soma_joinids,)).tables(): diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py index 67c543eb7..dbb18f923 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py @@ -50,7 +50,8 @@ def find_nearest_obs( :func:`get_embedding_metadata_by_name`. query: AnnData object with an obsm layer embedding the query cells. The obsm layer name - matches ``embedding_metadata["embedding_name"]`` (e.g. scvi, geneformer). + matches ``embedding_metadata["embedding_name"]`` (e.g. scvi, geneformer). The layer + shape matches the number of query cells and the number of features in the embedding. k: Number of nearest neighbors to return for each query obs. nprobe: From c8bb01a70956abb796838c764f168f288b037f5d Mon Sep 17 00:00:00 2001 From: Mike Lin Date: Sun, 16 Jun 2024 22:53:18 -1000 Subject: [PATCH 4/8] workaround --- .../src/cellxgene_census/experimental/_embedding.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py index 58edfcda5..767b74e0b 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding.py @@ -92,7 +92,7 @@ def _get_embedding( raise ValueError("Census and embedding mismatch - measurement_name does not exist") embedding_shape = (len(obs_soma_joinids), E.shape[1]) - embedding: npt.NDArray[np.float32] = np.full(embedding_shape, np.NaN, dtype=np.float32, order="C") + embedding = np.full(embedding_shape, np.nan, dtype=np.float32, order="C") obs_indexer = soma.IntIndexer(obs_soma_joinids, context=E.context) for tbl in E.read(coords=(obs_soma_joinids,)).tables(): From e73102bf4163a243350af92f22a513a60f5f720b Mon Sep 17 00:00:00 2001 From: Mike Lin Date: Mon, 17 Jun 2024 06:56:23 -1000 Subject: [PATCH 5/8] fix --- .../src/cellxgene_census/experimental/_embedding_search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py index dbb18f923..8c7a70774 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py @@ -75,7 +75,7 @@ def find_nearest_obs( index_uri = CENSUS_EMBEDDINGS_INDEX_URI_FSTR.format( census_version=embedding_metadata["census_version"], embedding_id=embedding_metadata["id"] ) - config = DEFAULT_TILEDB_CONFIGURATION.copy() + config = {k: str(v) for k, v in DEFAULT_TILEDB_CONFIGURATION.items()} config["vfs.s3.region"] = CENSUS_EMBEDDINGS_INDEX_REGION memory_vectors = memory_GiB * (2**30) // (4 * n_features) # number of float32 vectors index = vs.ivf_flat_index.IVFFlatIndex(uri=index_uri, config=config, memory_budget=memory_vectors) From ca8d44e0889086bce9e4d900477c609f509b95d0 Mon Sep 17 00:00:00 2001 From: Mike Lin Date: Wed, 26 Jun 2024 13:07:47 -0700 Subject: [PATCH 6/8] resolve indexes through JSONs --- .../cellxgene_census/_release_directory.py | 1 + .../experimental/_embedding_search.py | 35 +++++++++++++------ .../experimental/test_embeddings_search.py | 6 ++-- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/api/python/cellxgene_census/src/cellxgene_census/_release_directory.py b/api/python/cellxgene_census/src/cellxgene_census/_release_directory.py index e0839aab8..e480b0696 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/_release_directory.py +++ b/api/python/cellxgene_census/src/cellxgene_census/_release_directory.py @@ -131,6 +131,7 @@ class CensusMirror(TypedDict): provider: Provider base_uri: str region: Optional[str] + embeddings_base_uri: str CensusMirrors = Dict[CensusMirrorName, Union[CensusMirrorName, CensusMirror]] diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py index 8c7a70774..a92f0074b 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py @@ -1,7 +1,7 @@ """Nearest-neighbor search based on vector index of Census embeddings.""" from contextlib import ExitStack -from typing import Any, Dict, List, NamedTuple, Optional, Sequence +from typing import Any, Dict, List, NamedTuple, Optional, Sequence, Tuple, cast import anndata as ad import numpy as np @@ -11,11 +11,8 @@ import tiledbsoma as soma from .._open import DEFAULT_TILEDB_CONFIGURATION, open_soma - -CENSUS_EMBEDDINGS_INDEX_URI_FSTR = ( - "s3://cellxgene-contrib-public/contrib/cell-census/soma/{census_version}/indexes/{embedding_id}" -) -CENSUS_EMBEDDINGS_INDEX_REGION = "us-west-2" +from .._release_directory import CensusMirror, _get_census_mirrors +from .._util import _uri_join class NeighborObs(NamedTuple): @@ -40,6 +37,7 @@ def find_nearest_obs( k: int = 10, nprobe: int = 100, memory_GiB: int = 4, + mirror: Optional[str] = None, **kwargs: Dict[str, Any], ) -> NeighborObs: """Search Census for similar obs (cells) based on nearest neighbors in embedding space. @@ -72,11 +70,12 @@ def find_nearest_obs( ) # formulate index URI and run query - index_uri = CENSUS_EMBEDDINGS_INDEX_URI_FSTR.format( - census_version=embedding_metadata["census_version"], embedding_id=embedding_metadata["id"] - ) + resolved_index = _resolve_embedding_index(embedding_metadata, mirror=mirror) + if not resolved_index: + raise ValueError("No suitable embedding index found for " + embedding_name) + index_uri, index_region = resolved_index config = {k: str(v) for k, v in DEFAULT_TILEDB_CONFIGURATION.items()} - config["vfs.s3.region"] = CENSUS_EMBEDDINGS_INDEX_REGION + config["vfs.s3.region"] = index_region memory_vectors = memory_GiB * (2**30) // (4 * n_features) # number of float32 vectors index = vs.ivf_flat_index.IVFFlatIndex(uri=index_uri, config=config, memory_budget=memory_vectors) distances, neighbor_ids = index.query(query.obsm[embedding_name], k=k, nprobe=nprobe, **kwargs) @@ -84,6 +83,22 @@ def find_nearest_obs( return NeighborObs(distances=distances, neighbor_ids=neighbor_ids) +def _resolve_embedding_index( + embedding_metadata: Dict[str, Any], + mirror: Optional[str] = None, +) -> Optional[Tuple[str, str]]: + index_metadata = embedding_metadata.get("indexes", None) + if not index_metadata: + return None + # TODO (future): support multiple index [types] + assert index_metadata[0]["type"] == "IVFFlat", "Only IVFFlat index is supported (update cellxgene_census)" + mirrors = _get_census_mirrors() + mirror = mirror or cast(str, mirrors["default"]) + mirror_info = cast(CensusMirror, mirrors[mirror]) + uri = _uri_join(mirror_info["embeddings_base_uri"], index_metadata[0]["relative_uri"]) + return uri, cast(str, mirror_info["region"]) + + def predict_obs_metadata( embedding_metadata: Dict[str, Any], neighbors: NeighborObs, diff --git a/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py b/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py index 9049da2fa..954cd43b9 100644 --- a/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py +++ b/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py @@ -44,10 +44,10 @@ def test_embeddings_search(true_neighbors: Dict[str, Any], query_result: Neighbo @pytest.mark.experimental @pytest.mark.live_corpus def test_embeddings_search_errors(emb_metadata: Dict[str, Any], query_anndata: ad.AnnData) -> None: - # bogus embedding metadata + # no index for the embedding emb_metadata2 = emb_metadata.copy() - emb_metadata2["id"] = "BOGUS123" - with pytest.raises(tiledb.TileDBError): + emb_metadata2["indexes"] = [] + with pytest.raises(ValueError, match="No suitable embedding index"): find_nearest_obs(emb_metadata2, query_anndata) # query anndata missing the embedding layer bogus_ad = query_anndata.copy() From ee6c184ab9717e5a4c819c6ac1f32c8f26b93c43 Mon Sep 17 00:00:00 2001 From: Mike Lin Date: Wed, 26 Jun 2024 13:15:42 -0700 Subject: [PATCH 7/8] lint --- .../tests/experimental/test_embeddings_search.py | 1 - 1 file changed, 1 deletion(-) diff --git a/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py b/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py index 954cd43b9..232526e15 100644 --- a/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py +++ b/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py @@ -4,7 +4,6 @@ import anndata as ad import numpy as np import pytest -import tiledb import cellxgene_census from cellxgene_census.experimental import ( From a1e4daa417d3d4dce6a5f32190306549daeb9df7 Mon Sep 17 00:00:00 2001 From: Mike Lin Date: Wed, 26 Jun 2024 22:37:23 -0700 Subject: [PATCH 8/8] API refactoring --- .../experimental/_embedding_search.py | 34 +++++++++---- .../experimental/test_embeddings_search.py | 51 ++++++++++--------- 2 files changed, 49 insertions(+), 36 deletions(-) diff --git a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py index a92f0074b..6290f418b 100644 --- a/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py +++ b/api/python/cellxgene_census/src/cellxgene_census/experimental/_embedding_search.py @@ -10,9 +10,11 @@ import tiledb.vector_search as vs import tiledbsoma as soma +from .._experiment import _get_experiment_name from .._open import DEFAULT_TILEDB_CONFIGURATION, open_soma from .._release_directory import CensusMirror, _get_census_mirrors from .._util import _uri_join +from ._embedding import get_embedding_metadata_by_name class NeighborObs(NamedTuple): @@ -32,20 +34,23 @@ class NeighborObs(NamedTuple): def find_nearest_obs( - embedding_metadata: Dict[str, Any], + embedding_name: str, + organism: str, + census_version: str, query: ad.AnnData, + *, k: int = 10, nprobe: int = 100, memory_GiB: int = 4, mirror: Optional[str] = None, + embedding_metadata: Optional[Dict[str, Any]] = None, **kwargs: Dict[str, Any], ) -> NeighborObs: """Search Census for similar obs (cells) based on nearest neighbors in embedding space. Args: - embedding_metadata: - Information about the embedding to search, as found by - :func:`get_embedding_metadata_by_name`. + embedding_name, organism, census_version: + Identify the embedding to search, as in :func:`get_embedding_metadata_by_name`. query: AnnData object with an obsm layer embedding the query cells. The obsm layer name matches ``embedding_metadata["embedding_name"]`` (e.g. scvi, geneformer). The layer @@ -57,8 +62,15 @@ def find_nearest_obs( cells) for a thorough search. Decrease for faster but less accurate search. memory_GiB: Memory budget for the search index, in gibibytes; defaults to 4 GiB. + mirror: + Name of the Census mirror to use for the search. + embedding_metadata: + The result of `get_embedding_metadata_by_name(embedding_name, organism, census_version)`. + Supplying this saves a network request for repeated searches. """ - embedding_name = embedding_metadata["embedding_name"] + if embedding_metadata is None: + embedding_metadata = get_embedding_metadata_by_name(embedding_name, organism, census_version) + assert embedding_metadata["embedding_name"] == embedding_name n_features = embedding_metadata["n_features"] # validate query (expected obsm layer exists with the expected dimensionality) @@ -100,7 +112,8 @@ def _resolve_embedding_index( def predict_obs_metadata( - embedding_metadata: Dict[str, Any], + organism: str, + census_version: str, neighbors: NeighborObs, column_names: Sequence[str], experiment: Optional[soma.Experiment] = None, @@ -108,9 +121,8 @@ def predict_obs_metadata( """Predict obs metadata attributes for the query cells based on the embedding nearest neighbors. Args: - embedding_metadata: - Information about the embedding searched, as found by - :func:`get_embedding_metadata_by_name`. + organism, census_version: + Embedding information as supplied to :func:`find_nearest_obs`. neighbors: Results of a :func:`find_nearest_obs` search. column_names: @@ -129,8 +141,8 @@ def predict_obs_metadata( with ExitStack() as cleanup: if experiment is None: # open Census transiently - census = cleanup.enter_context(open_soma(census_version=embedding_metadata["census_version"])) - experiment = census["census_data"][embedding_metadata["experiment_name"]] + census = cleanup.enter_context(open_soma(census_version=census_version)) + experiment = census["census_data"][_get_experiment_name(organism)] # fetch the desired obs metadata for all of the found neighbors neighbor_obs = ( diff --git a/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py b/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py index 232526e15..b3c0f6f77 100644 --- a/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py +++ b/api/python/cellxgene_census/tests/experimental/test_embeddings_search.py @@ -9,7 +9,6 @@ from cellxgene_census.experimental import ( NeighborObs, find_nearest_obs, - get_embedding_metadata_by_name, predict_obs_metadata, ) @@ -42,30 +41,38 @@ def test_embeddings_search(true_neighbors: Dict[str, Any], query_result: Neighbo @pytest.mark.experimental @pytest.mark.live_corpus -def test_embeddings_search_errors(emb_metadata: Dict[str, Any], query_anndata: ad.AnnData) -> None: - # no index for the embedding - emb_metadata2 = emb_metadata.copy() - emb_metadata2["indexes"] = [] - with pytest.raises(ValueError, match="No suitable embedding index"): - find_nearest_obs(emb_metadata2, query_anndata) +def test_embeddings_search_errors(query_anndata: ad.AnnData) -> None: + # bogus embedding name + with pytest.raises(ValueError, match="No embeddings found"): + find_nearest_obs( + "bogus123", TRUE_NEAREST_NEIGHBORS_ORGANISM, TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION, query_anndata + ) # query anndata missing the embedding layer bogus_ad = query_anndata.copy() bogus_ad.obsm.pop(TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME) with pytest.raises(ValueError, match="Query does not have"): - find_nearest_obs(emb_metadata, bogus_ad) + find_nearest_obs( + TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME, + TRUE_NEAREST_NEIGHBORS_ORGANISM, + TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION, + bogus_ad, + ) # embedding layer has wrong number of features bogus_ad = query_anndata.copy() bogus_ad.obsm[TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME] = np.zeros((len(bogus_ad), 42)) with pytest.raises(ValueError, match="features, expected"): - find_nearest_obs(emb_metadata, bogus_ad) + find_nearest_obs( + TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME, + TRUE_NEAREST_NEIGHBORS_ORGANISM, + TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION, + bogus_ad, + ) return @pytest.mark.experimental @pytest.mark.live_corpus -def test_predict_obs_metadata( - emb_metadata: Dict[str, Any], query_anndata: ad.AnnData, query_result: NeighborObs -) -> None: +def test_predict_obs_metadata(query_anndata: ad.AnnData, query_result: NeighborObs) -> None: columns = ["cell_type", "tissue_general"] with cellxgene_census.open_soma(census_version=TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION) as census: @@ -76,7 +83,9 @@ def test_predict_obs_metadata( .to_pandas() ) - pred_df = predict_obs_metadata(emb_metadata, query_result, columns) + pred_df = predict_obs_metadata( + TRUE_NEAREST_NEIGHBORS_ORGANISM, TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION, query_result, columns + ) assert len(pred_df) == len(query_anndata.obs) for col in columns: @@ -86,16 +95,6 @@ def test_predict_obs_metadata( assert accuracy > 0.75, f"Accuracy for {col} is {accuracy}" -@pytest.fixture(scope="module") -def emb_metadata() -> Dict[str, Any]: - return get_embedding_metadata_by_name( - TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME, - TRUE_NEAREST_NEIGHBORS_ORGANISM, - TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION, - "obs_embedding", - ) - - @pytest.fixture(scope="module") def true_neighbors() -> Dict[int, List[Dict[str, Any]]]: ans = {} @@ -117,9 +116,11 @@ def query_anndata(true_neighbors: Dict[str, Any]) -> ad.AnnData: @pytest.fixture(scope="module") -def query_result(emb_metadata: Dict[str, Any], query_anndata: ad.AnnData) -> NeighborObs: +def query_result(query_anndata: ad.AnnData) -> NeighborObs: return find_nearest_obs( - emb_metadata, + TRUE_NEAREST_NEIGHBORS_EMBEDDING_NAME, + TRUE_NEAREST_NEIGHBORS_ORGANISM, + TRUE_NEAREST_NEIGHBORS_CENSUS_VERSION, query_anndata, k=TRUE_NEAREST_NEIGHBORS_K, nprobe=25,