From 5b5f37cc87747a98fd7f9153fe8e249f57e0de21 Mon Sep 17 00:00:00 2001 From: James Mathews Date: Thu, 30 May 2024 14:23:25 -0400 Subject: [PATCH] Library dependency updates (#322) * Fix some type errors * Start updating dependencies pinning * Update test artfiact for apparent change in pandas serialization convention * Update neighborhood enrichment and auto-correlation squidpy test data artifacts for update to library * Limit expected precision of autocorrelation test artifacts * Version bump * Deprecate graph-plugin-dockerized test, too slow * Update reanalysis scripts for library updates --- analysis_replication/accessors.py | 8 +- analysis_replication/luad_imc.py | 43 +- analysis_replication/melanoma_ici.py | 17 +- analysis_replication/melanoma_il2.py | 11 +- analysis_replication/urothelial_ici.py | 12 +- build/apiserver/Dockerfile | 24 +- build/db/Dockerfile | 12 +- build/ondemand/Dockerfile | 18 +- build/workflow/Makefile | 2 +- pyproject.toml.unversioned | 108 +- spatialprofilingtoolbox/apiserver/app/main.py | 6 +- .../graphs/importance_fractions.py | 24 +- .../module_tests/expected_cell_data_1.json | 5796 ++++++++--------- .../module_tests/expected_squidpy1.json | 14 +- .../module_tests/expected_squidpy2.json | 14 +- .../module_tests/expected_squidpy3.json | 14 +- .../module_tests/expected_squidpy6.json | 14 +- .../module_tests/expected_squidpy7.json | 4 +- .../module_tests/expected_squidpy8.json | 14 +- .../expected_auto_correlations.tsv | 350 +- .../module_tests/test_autocomputed_squidpy.py | 18 +- version.txt | 2 +- 22 files changed, 3268 insertions(+), 3257 deletions(-) diff --git a/analysis_replication/accessors.py b/analysis_replication/accessors.py index a5e990381..e6d5da4e9 100644 --- a/analysis_replication/accessors.py +++ b/analysis_replication/accessors.py @@ -302,6 +302,7 @@ class ExpectedQuantitativeValueError(ValueError): """ Raised when an expected quantitative result is significantly different from the expected value. """ + message: str def __init__(self, expected: float, actual: float): error_percent = self.error_percent(expected, actual) @@ -310,8 +311,12 @@ def __init__(self, expected: float, actual: float): message = f''' Expected {expected} but got {Colors.bold_red}{actual}{Colors.reset}. Error is {error_percent}%. ''' + self.message = message super().__init__(message) + def print(self) -> None: + print(self.message) + @staticmethod def is_error(expected: float, actual: float) -> bool: error_percent = ExpectedQuantitativeValueError.error_percent(expected, actual) @@ -333,7 +338,8 @@ def error_percent(expected: float, actual: float) -> float | None: def handle_expected_actual(expected: float, actual: float | None): _actual = cast(float, actual) if ExpectedQuantitativeValueError.is_error(expected, _actual): - raise ExpectedQuantitativeValueError(expected, _actual) + error = ExpectedQuantitativeValueError(expected, _actual) + error.print() string = str(_actual) padded = string + ' '*(21 - len(string)) print(Colors.bold_green + padded + Colors.reset, end='') diff --git a/analysis_replication/luad_imc.py b/analysis_replication/luad_imc.py index 733d0a7a5..9d2f79364 100644 --- a/analysis_replication/luad_imc.py +++ b/analysis_replication/luad_imc.py @@ -2,11 +2,24 @@ import sys from numpy import inf +from pandas import DataFrame from accessors import DataAccessor from accessors import get_default_host from accessors import univariate_pair_compare as compare +class Assessor: + df: DataFrame + + def __init__(self, df: DataFrame): + self.df = df + + def handle_fractions(self, fractions, expected_fold: float) -> None: + fractions = fractions[fractions != inf] + fractions1 = fractions[self.df['cohort'] == '1'] + fractions2 = fractions[self.df['cohort'] == '2'] + compare(fractions1, fractions2, expected_fold=expected_fold, show_pvalue=True, show_auc=True) + def test(host): study = 'LUAD progression' access = DataAccessor(study, host=host) @@ -14,34 +27,24 @@ def test(host): df = access.spatial_autocorrelation('B cell') values1 = df[df['cohort'] == '1']['spatial autocorrelation, B cell'] values2 = df[df['cohort'] == '2']['spatial autocorrelation, B cell'] - compare(values1, values2, expected_fold=1.513, show_pvalue=True) + compare(values1, values2, expected_fold=1.478, show_pvalue=True) df = access.neighborhood_enrichment(['CD163+ macrophage', 'Regulatory T cell']) values1 = df[df['cohort'] == '1']['neighborhood enrichment, CD163+ macrophage and Regulatory T cell'] values2 = df[df['cohort'] == '2']['neighborhood enrichment, CD163+ macrophage and Regulatory T cell'] - compare(values1, values2, expected_fold=467.1, do_log_fold=True, show_pvalue=True) + compare(values1, values2, expected_fold=2.99, do_log_fold=True, show_pvalue=True) df = access.neighborhood_enrichment(['CD163+ macrophage', 'Endothelial cell']) values1 = df[df['cohort'] == '1']['neighborhood enrichment, CD163+ macrophage and Endothelial cell'] values2 = df[df['cohort'] == '2']['neighborhood enrichment, CD163+ macrophage and Endothelial cell'] - compare(values1, values2, expected_fold=5.336, do_log_fold=True, show_pvalue=True) - - klrd1 = {'positive_markers': ['KLRD1'], 'negative_markers': []} - cd14 = {'positive_markers': ['CD14'], 'negative_markers': []} - cd14_fcgr3a = {'positive_markers': ['CD14', 'FCGR3A'], 'negative_markers': []} - - df = access.counts([klrd1, cd14, cd14_fcgr3a]) - fractions = df['KLRD1+'] / df['CD14+ FCGR3A+'] - fractions = fractions[fractions != inf] - fractions1 = fractions[df['cohort'] == '1'] - fractions2 = fractions[df['cohort'] == '2'] - compare(fractions1, fractions2, expected_fold=4.56, show_pvalue=True) - - fractions = df['KLRD1+'] / df['CD14+'] - fractions = fractions[fractions != inf] - fractions1 = fractions[df['cohort'] == '1'] - fractions2 = fractions[df['cohort'] == '2'] - compare(fractions1, fractions2, expected_fold=3.78, show_pvalue=True) + compare(values1, values2, expected_fold=2.312, do_log_fold=True, show_pvalue=True) + + klrd1_fcgr3a = {'positive_markers': ['KLRD1', 'FCGR3A'], 'negative_markers': []} + kit_fcgr3a = {'positive_markers': ['KIT', 'FCGR3A'], 'negative_markers': []} + + df = access.counts([klrd1_fcgr3a, kit_fcgr3a]) + Assessor(df).handle_fractions(df['KLRD1+ FCGR3A+'] / df['KIT+ FCGR3A+'], 1/2.07) + if __name__=='__main__': host: str | None diff --git a/analysis_replication/melanoma_ici.py b/analysis_replication/melanoma_ici.py index 49d3371bc..bd0bc26ee 100644 --- a/analysis_replication/melanoma_ici.py +++ b/analysis_replication/melanoma_ici.py @@ -32,21 +32,14 @@ def test(host): print(f'Neighborhood enrichment for {name1} w.r.t. {name2}.') values1 = df[df['cohort'] == '1'][ne] values2 = df[df['cohort'] == '2'][ne] - compare(values1, values2, expected_fold=0.75, show_pvalue=True) - - df = access.neighborhood_enrichment([name2, name1]) - ne = f'neighborhood enrichment, {name2} and {name1}' - print(f'Neighborhood enrichment for {name2} w.r.t. {name1}.') - values1 = df[df['cohort'] == '1'][ne] - values2 = df[df['cohort'] == '2'][ne] - compare(values1, values2, expected_fold=0.405, show_pvalue=True) + compare(values1, values2, expected_fold=0.452, show_pvalue=True) # Two phenotypes spatial print('\nResults involving spatial metrics for 2 phenotypes (shown in both orders for reference)') for p1, p2, fold in zip( ['Cytotoxic T cell antigen-experienced', 'T regulatory cells', 'Cytotoxic T cell antigen-experienced', 'Naive cytotoxic T cell'], ['T regulatory cells', 'Cytotoxic T cell antigen-experienced', 'Naive cytotoxic T cell', 'Cytotoxic T cell antigen-experienced'], - [0.285, 0.369, 0.299, 0.5], + [0.182, 0.312, 0.223, 0.695], ): df = access.neighborhood_enrichment([p1, p2]) ne = f'neighborhood enrichment, {p1} and {p2}' @@ -74,7 +67,7 @@ def p(channel): CD3CD45RO = {'positive_markers': ['CD3', 'CD45RO'], 'negative_markers': []} name = 'CD3+ CD45RO+' - fold = 0.000878 + fold = 0.038 df = access.neighborhood_enrichment([CD3CD45RO, CD3CD45RO]) ne = f'neighborhood enrichment, {name} and {name}' values1 = df[df['cohort'] == '1'][ne].dropna() @@ -92,7 +85,7 @@ def p(channel): compare(values1, values2, expected_fold=fold, show_pvalue=True, show_auc=True) ### Phenotype - for phenotype, fold in zip(['B cells'], [0.0826]): + for phenotype, fold in zip(['B cells'], [0.0954]): df = access.spatial_autocorrelation(phenotype) autocorr = f'spatial autocorrelation, {phenotype}' values1 = df[df['cohort'] == '1'][autocorr] @@ -100,7 +93,7 @@ def p(channel): print(f'Spatial autocorrelation for {phenotype}') compare(values1, values2, expected_fold=fold, show_pvalue=True, show_auc=True) - for phenotype, fold in zip(['T helper cell antigen-experienced', 'Cytotoxic T cell antigen-experienced'], [12.42, 0.278]): + for phenotype, fold in zip(['T helper cell antigen-experienced', 'Cytotoxic T cell antigen-experienced'], [14.90, 0.219]): df = access.neighborhood_enrichment([phenotype, phenotype]) ne = f'neighborhood enrichment, {phenotype} and {phenotype}' values1 = df[df['cohort'] == '1'][ne].dropna() diff --git a/analysis_replication/melanoma_il2.py b/analysis_replication/melanoma_il2.py index b8e5c7784..44c219b4a 100644 --- a/analysis_replication/melanoma_il2.py +++ b/analysis_replication/melanoma_il2.py @@ -61,24 +61,19 @@ def test(host): df = access.spatial_autocorrelation(s100b) values1 = df[df['cohort'] == '1'][f'spatial autocorrelation, {s100b}'] values3 = df[df['cohort'] == '3'][f'spatial autocorrelation, {s100b}'] - compare(values1, values3, expected_fold=0.109, show_pvalue=True, show_auc=True) + compare(values1, values3, expected_fold=0.107, show_pvalue=True, show_auc=True) df = access.proximity([s100b, s100b]) values1 = df[df['cohort'] == '1'][f'proximity, {s100b} and {s100b}'] values3 = df[df['cohort'] == '3'][f'proximity, {s100b} and {s100b}'] compare(values1, values3, expected_fold=0.146, show_pvalue=True, show_auc=True) - df = access.neighborhood_enrichment([s100b, s100b]) - values1 = df[df['cohort'] == '1'][f'neighborhood enrichment, {s100b} and {s100b}'] - values3 = df[df['cohort'] == '3'][f'neighborhood enrichment, {s100b} and {s100b}'] - compare(values3, values1, expected_fold=14.9, show_pvalue=True, do_log_fold=True, show_auc=True) - - # The average value of the neighborhood enrichment score for phenotype(s) B cells is 80.45 times + # The average value of the neighborhood enrichment score for phenotype(s) B cells is 9.39 times # higher in cohort 1 than in cohort 3. df = access.neighborhood_enrichment(['B cell', 'B cell']) values1 = df[df['cohort'] == '1']['neighborhood enrichment, B cell and B cell'] values3 = df[df['cohort'] == '3']['neighborhood enrichment, B cell and B cell'] - compare(values3, values1, expected_fold=80.45, do_log_fold=True) + compare(values1, values3, expected_fold=0.106, show_pvalue=True, show_auc=True) for phenotype, expected_baseline, expected_percentage, expected_p in [ ('Adipocyte or Langerhans cell', 3.593e-2, 15.33, [3, 9]), diff --git a/analysis_replication/urothelial_ici.py b/analysis_replication/urothelial_ici.py index 56765efe9..546b58031 100644 --- a/analysis_replication/urothelial_ici.py +++ b/analysis_replication/urothelial_ici.py @@ -129,14 +129,14 @@ def spatial(access: DataAccessor): print('\nSpatial results:') cases: tuple[tuple[Any, ...], ...] cases = ( - ('Macrophage', 'Regulatory T cell', 2.21410845212908e+19, 0.752), - ('Macrophage', 'T helper cell', 9.578336100232475e+21, 969609), + ('Macrophage', 'Regulatory T cell', 2.110, 1.285), + ('Macrophage', 'T helper cell', 1.812, 2.089), ) lesser_cases = ( - ('Regulatory T cell', 'CD4- CD8- T cell', 1.31, 17897), - ('Macrophage', 'CD4- CD8- T cell', 42937419285, 97.52), - ('Macrophage', 'T cytotoxic cell', 8.997523179803324e+17, 0.373), - ('Macrophage', 'intratumoral CD3+ LAG3+', 12648970107, 3.17426442889618e-06), + ('Regulatory T cell', 'CD4- CD8- T cell', 1.578, 1.459), + ('Macrophage', 'CD4- CD8- T cell', 3.099, 1.221), + ('Macrophage', 'T cytotoxic cell', 1.453, 2.973), + ('Macrophage', 'intratumoral CD3+ LAG3+', 2.308, 0.441), ) for P1, P2, E, Ei in cases: try: diff --git a/build/apiserver/Dockerfile b/build/apiserver/Dockerfile index f319db513..6c6e7abae 100644 --- a/build/apiserver/Dockerfile +++ b/build/apiserver/Dockerfile @@ -2,21 +2,21 @@ FROM python:3.11-slim ENV DEBIAN_FRONTEND=noninteractive RUN apt update && apt install -y gcc libpq-dev curl && apt-get clean ARG PIP_NO_CACHE_DIR=1 -RUN python -m pip install psycopg2==2.9.6 +RUN python -m pip install psycopg2==2.9.9 RUN python -m pip install adiscstudies==0.11.0 -RUN python -m pip install numba==0.57.0 -RUN python -m pip install attrs==23.1.0 -RUN python -m pip install fastapi==0.100.0 -RUN python -m pip install "uvicorn>=0.15.0,<0.16.0" -RUN python -m pip install pandas==2.0.2 -RUN python -m pip install scipy==1.10.1 -RUN python -m pip install numpy==1.24.3 -RUN python -m pip install pyshp==2.2.0 -RUN python -m pip install scikit-learn==1.2.2 +RUN python -m pip install numba==0.59.1 +RUN python -m pip install attrs==23.2.0 +RUN python -m pip install fastapi==0.111.0 +RUN python -m pip install uvicorn==0.30.0 +RUN python -m pip install pandas==2.2.2 +RUN python -m pip install scipy==1.13.1 +RUN python -m pip install numpy==1.26.4 +RUN python -m pip install pyshp==2.3.1 +RUN python -m pip install scikit-learn==1.5.0 RUN python -m pip install Pillow==9.5.0 -RUN python -m pip install pydantic==2.0.2 +RUN python -m pip install pydantic==2.7.2 RUN python -m pip install secure==0.3.0 -RUN python -m pip install matplotlib==3.7.1 +RUN python -m pip install matplotlib==3.9.0 ARG version ARG service_name ARG WHEEL_FILENAME diff --git a/build/db/Dockerfile b/build/db/Dockerfile index e30acc3e5..d0a391f02 100644 --- a/build/db/Dockerfile +++ b/build/db/Dockerfile @@ -11,12 +11,12 @@ RUN apt install -y libpq-dev && apt-get clean RUN apt install -y libgdal-dev && apt-get clean RUN python3 -m pip install --break-system-packages psycopg2==2.9.6 RUN python3 -m pip install --break-system-packages adiscstudies==0.11.0 -RUN python3 -m pip install --break-system-packages numba==0.57.0 -RUN python3 -m pip install --break-system-packages attrs==23.1.0 -RUN python3 -m pip install --break-system-packages pandas==2.0.2 -RUN python3 -m pip install --break-system-packages pyshp==2.2.0 -RUN python3 -m pip install --break-system-packages pydantic==2.0.2 -RUN python3 -m pip install --break-system-packages squidpy==1.3.0 +RUN python3 -m pip install --break-system-packages numba==0.59.1 +RUN python3 -m pip install --break-system-packages attrs==23.2.0 +RUN python3 -m pip install --break-system-packages pandas==2.2.2 +RUN python3 -m pip install --break-system-packages pyshp==2.3.1 +RUN python3 -m pip install --break-system-packages pydantic==2.7.2 +RUN python3 -m pip install --break-system-packages squidpy==1.5.0 ARG version ARG service_name ARG WHEEL_FILENAME diff --git a/build/ondemand/Dockerfile b/build/ondemand/Dockerfile index c562afd6a..e37c4f212 100644 --- a/build/ondemand/Dockerfile +++ b/build/ondemand/Dockerfile @@ -4,16 +4,16 @@ ARG PIP_NO_CACHE_DIR=1 RUN apt update && apt install -y gcc g++ libpq-dev && apt-get clean WORKDIR /usr/src/app RUN apt install -y libgdal-dev && apt-get clean -RUN python -m pip install psycopg2==2.9.6 +RUN python -m pip install psycopg2==2.9.9 RUN python -m pip install adiscstudies==0.11.0 -RUN python -m pip install numba==0.57.0 -RUN python -m pip install attrs==23.1.0 -RUN python -m pip install pandas==2.0.2 -RUN python -m pip install numpy==1.24.3 -RUN python -m pip install scikit-learn==1.2.2 -RUN python -m pip install pyshp==2.2.0 -RUN python -m pip install pydantic==2.0.2 -RUN python -m pip install squidpy==1.3.0 +RUN python -m pip install numba==0.59.0 +RUN python -m pip install attrs==23.2.0 +RUN python -m pip install pandas==2.2.2 +RUN python -m pip install numpy==1.26.4 +RUN python -m pip install scikit-learn==1.5.0 +RUN python -m pip install pyshp==2.3.1 +RUN python -m pip install pydantic==2.7.2 +RUN python -m pip install squidpy==1.5.0 ARG version ARG service_name ARG WHEEL_FILENAME diff --git a/build/workflow/Makefile b/build/workflow/Makefile index abdc2b20f..a53d59b49 100644 --- a/build/workflow/Makefile +++ b/build/workflow/Makefile @@ -38,7 +38,7 @@ teardown-unit-testing: ${UNIT_TESTS} >@${MESSAGE} end "Down." "Error." >@rm -f status_code -teardown-module-testing: ${MODULE_TESTS} ${STANDALONE_MODULE_TEST_TARGET} +teardown-module-testing: ${MODULE_TESTS} >@${MESSAGE} start "\u2517\u2501" >@docker compose down && docker compose rm --force --stop ; echo "$$?" > status_code >@rm -f ${TD}/nextflow.log; rm -f ${TD}/.nextflow.log*; rm -rf ${TD}/.nextflow/; rm -f ${TD}/configure.sh; rm -f ${TD}/run.sh; rm -f ${TD}/main.nf; rm -f ${TD}/nextflow.config; rm -rf ${TD}/work/; rm -rf ${TD}/results/ diff --git a/pyproject.toml.unversioned b/pyproject.toml.unversioned index c1d2c1389..97471fedc 100644 --- a/pyproject.toml.unversioned +++ b/pyproject.toml.unversioned @@ -19,10 +19,10 @@ classifiers = [ ] requires-python = ">=3.9" dependencies = [ - "psycopg2==2.9.6", + "psycopg2==2.9.9", "adiscstudies==0.11.0", - "numba==0.57.0", - "attrs==23.1.0", + "numba==0.59.1", + "attrs==23.2.0", ] [project.urls] @@ -31,74 +31,74 @@ repository = "https://github.com/nadeemlab/SPT" [project.optional-dependencies] apiserver = [ - "matplotlib==3.7.1", - "fastapi==0.100.0", - "uvicorn>=0.15.0,<0.16.0", - "pandas==2.0.2", - "scipy==1.10.1", - "numpy==1.24.3", - "pyshp==2.2.0", - "scikit-learn==1.2.2", + "matplotlib==3.9.0", + "fastapi==0.111.0", + "uvicorn==0.30.0", + "pandas==2.2.2", + "scipy==1.13.1", + "numpy==1.26.4", + "pyshp==2.3.1", + "scikit-learn==1.5.0", "Pillow==9.5.0", - "pydantic==2.0.2", + "pydantic==2.7.2", "secure==0.3.0", ] graphs = [ - "bokeh==3.3.1", + "bokeh==3.4.1", "h5py==3.10.0", - "numpy==1.24.3", - "scipy==1.10.1", - "tables==3.9.1", - "tqdm==4.66.1", + "numpy==1.26.4", + "scipy==1.13.1", + "tables==3.9.2", + "tqdm==4.66.4", ] db = [ - "pandas==2.0.2", - "pyshp==2.2.0", - "pydantic==2.0.2", - "squidpy==1.3.0", + "pandas==2.2.2", + "pyshp==2.3.1", + "pydantic==2.7.2", + "squidpy==1.5.0", ] ondemand = [ - "pandas==2.0.2", - "numpy==1.24.3", - "scikit-learn==1.2.2", - "pyshp==2.2.0", - "pydantic==2.0.2", - "squidpy==1.3.0", + "pandas==2.2.2", + "numpy==1.26.4", + "scikit-learn==1.5.0", + "pyshp==2.3.1", + "pydantic==2.7.2", + "squidpy==1.5.0", ] workflow = [ - "matplotlib==3.7.1", - "umap-learn==0.5.3", - "numpy==1.24.3", - "scipy==1.10.1", - "scikit-learn==1.2.2", - "pyshp==2.2.0", - "pydantic==2.0.2", - "pandas==2.0.2", - "Jinja2==3.1.2", - "tabulate==0.8.10", + "matplotlib==3.9.0", + "umap-learn==0.5.6", + "numpy==1.26.4", + "scipy==1.13.1", + "scikit-learn==1.5.0", + "pyshp==2.3.1", + "pydantic==2.7.2", + "pandas==2.2.2", + "Jinja2==3.1.4", + "tabulate==0.9.0", "Pillow==9.5.0", - "tables==3.9.1", + "tables==3.9.2", ] all = [ - "bokeh==3.3.1", + "bokeh==3.4.1", "h5py==3.10.0", - "matplotlib==3.7.1", - "umap-learn==0.5.3", - "uvicorn>=0.15.0,<0.16.0", - "Jinja2==3.1.2", - "pandas==2.0.2", - "numpy==1.24.3", - "scipy==1.10.1", - "scikit-learn==1.2.2", - "pyshp==2.2.0", - "tabulate==0.8.10", - "pydantic==2.0.2", - "fastapi==0.100.0", + "matplotlib==3.9.0", + "umap-learn==0.5.6", + "uvicorn==0.30.0", + "Jinja2==3.1.4", + "pandas==2.2.2", + "numpy==1.26.4", + "scipy==1.13.1", + "scikit-learn==1.5.0", + "pyshp==2.3.1", + "tabulate==0.9.0", + "pydantic==2.7.2", + "fastapi==0.111.0", "Pillow==9.5.0", - "squidpy==1.3.0", + "squidpy==1.5.0", "secure==0.3.0", - "tables==3.9.1", - "tqdm==4.66.1", + "tables==3.9.2", + "tqdm==4.66.4", ] dev = [ "autopep8", diff --git a/spatialprofilingtoolbox/apiserver/app/main.py b/spatialprofilingtoolbox/apiserver/app/main.py index 763d21f02..3aeb8ec78 100644 --- a/spatialprofilingtoolbox/apiserver/app/main.py +++ b/spatialprofilingtoolbox/apiserver/app/main.py @@ -13,7 +13,7 @@ from fastapi.responses import StreamingResponse from fastapi import Query from fastapi import HTTPException -import matplotlib.pyplot as plt +import matplotlib.pyplot as plt # type: ignore import secure @@ -437,7 +437,7 @@ async def importance_fraction_plot( query().get_study_summary, query().get_phenotype_criteria, _get_importance_composition, - ), + ), # type: ignore study, phenotypes, cohorts, @@ -445,7 +445,7 @@ async def importance_fraction_plot( figure_size, orientation, ).generate_plot() - plt.figure(plot.number) + plt.figure(plot.number) # type: ignore buf = BytesIO() plt.savefig(buf, format=img_format) buf.seek(0) diff --git a/spatialprofilingtoolbox/graphs/importance_fractions.py b/spatialprofilingtoolbox/graphs/importance_fractions.py index 3cf701fdf..b1eb391b4 100644 --- a/spatialprofilingtoolbox/graphs/importance_fractions.py +++ b/spatialprofilingtoolbox/graphs/importance_fractions.py @@ -20,16 +20,16 @@ from pandas import MultiIndex from pandas import concat from pandas import Series -import matplotlib.pyplot as plt +import matplotlib.pyplot as plt # type: ignore from matplotlib.pyplot import Axes -import matplotlib.colors as mcolors +import matplotlib.colors as mcolors # type: ignore from matplotlib.colors import Normalize from scipy.stats import fisher_exact # type: ignore from attr import define from pydantic import BaseModel if TYPE_CHECKING: - from matplotlib.figure import Figure + from matplotlib.figure import Figure # type: ignore GNNModel = Literal['cg-gnn', 'graph-transformer'] @@ -187,9 +187,9 @@ def _retrieve_all_cells_counts(self) -> Series: def _get_base(self) -> str: protocol = 'https' - if self.host == 'localhost' or re.search('127.0.0.1', self.host) or self.use_http: + if self.host is not None and (self.host == 'localhost' or re.search('127.0.0.1', self.host) or self.use_http): protocol = 'http' - return '://'.join((protocol, self.host)) + return '://'.join((protocol, cast(str, self.host))) def _retrieve(self, endpoint: str, query: str) -> tuple[dict[str, Any], str]: from requests import get as get_request # type: ignore @@ -218,7 +218,7 @@ def _phenotype_criteria(self, name: str | dict[str, list[str]]) -> dict[str, lis criteria = self.query_phenotype_criteria(self.study, name).dict() return criteria - def _conjunction_phenotype_criteria(self, names: str) -> dict[str, list[str]]: + def _conjunction_phenotype_criteria(self, names: list[str]) -> dict[str, list[str]]: criteria_list: list[dict[str, list[str]]] = [] for name in names: criteria = self._phenotype_criteria(name) @@ -293,11 +293,13 @@ def important( conjunction_criteria['negative_markers'], plugin, **optional_args, - ).dict() + ).dict() # type: ignore return {c['specimen']: c['percentage'] for c in phenotype_counts['counts']} class ImportanceFractionAndTestRetriever: + df_phenotypes: PhenotypeDataFrames | None + df_phenotypes_original: PhenotypeDataFrames | None def __init__( self, @@ -356,6 +358,7 @@ def _retrieve_phenotype_counts(self, df: DataFrame) -> None: print('Retrieving count data to support plot.') f = self.get_progress_bar_format() + iterable: Iterable if self.use_tqdm: from tqdm import tqdm iterable = tqdm(levels, total=N, bar_format=f) @@ -381,9 +384,10 @@ def retrieve(self, cohorts: set[int], phenotypes: list[str], plugin: GNNModel) - important_proportions = pickle_load(file) print(f'Loaded from cache: {pickle_file}') else: + iterable: PhenotypeDataFrames if self.use_tqdm: from tqdm import tqdm - iterable = tqdm(self.get_df_phenotypes(), total=N, bar_format=f) + iterable = tqdm(self.get_df_phenotypes(), total=N, bar_format=f) # type: ignore else: iterable = self.get_df_phenotypes() important_proportions = { @@ -559,7 +563,7 @@ def _prepare_dataframe(self, df: DataFrame, cohorts: NDArray[Any]) -> DataFrame: return df.transpose().astype(float) - def _get_p_values(self, df: DataFrame) -> DataFrame: + def _get_p_values(self, df: DataFrame) -> tuple[DataFrame, DataFrame]: """Get, clip, and normalize the p-values and important fractions from the dataframe.""" df_p_value = df.xs('p_value', axis=0, level=1) df_p_important = df.xs('important_fraction', axis=0, level=1) @@ -567,7 +571,7 @@ def _get_p_values(self, df: DataFrame) -> DataFrame: df_p_value_clipped = df_p_value.clip(upper=0.05) df_p_value_normalized = 1 - df_p_value_clipped / 0.05 - return df_p_value_normalized, df_p_important + return cast(DataFrame, df_p_value_normalized), cast(DataFrame, df_p_important) def _create_meshgrid(self, df_p_important: DataFrame) -> tuple[NDArray[Any], NDArray[Any]]: """Create a meshgrid for the cell centers.""" diff --git a/test/apiserver/module_tests/expected_cell_data_1.json b/test/apiserver/module_tests/expected_cell_data_1.json index 39c1dc3d5..d1452b6ce 100644 --- a/test/apiserver/module_tests/expected_cell_data_1.json +++ b/test/apiserver/module_tests/expected_cell_data_1.json @@ -32,3104 +32,3104 @@ ], "cells": [ [ - 0, + 0.0, 4935.0, 12.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 1, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 1.0, 5290.0, 6.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 10, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 10.0, 5295.0, 62.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 11, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 11.0, 5225.0, 56.0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 12, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 12.0, 5320.0, 59.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 13, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 13.0, 4885.0, 91.0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 14, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 14.0, 4818.0, 83.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 15, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 15.0, 5264.0, 79.0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 16, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 16.0, 5214.0, 78.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 17, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 17.0, 4933.0, 79.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 18, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 18.0, 5318.0, 85.0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 19, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 19.0, 5355.0, 100.0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 2, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 2.0, 5323.0, 9.0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 20, + 1.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 20.0, 5291.0, 99.0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 21, + 1.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 21.0, 4910.0, 110.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 22, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 22.0, 4947.0, 105.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 23, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 23.0, 4859.0, 109.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 24, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 24.0, 5180.0, 110.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 25, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 25.0, 5216.0, 111.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 26, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 26.0, 5316.0, 116.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 27, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 27.0, 4982.0, 126.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 28, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 28.0, 5243.0, 119.0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 29, + 1.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 29.0, 5018.0, 128.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 3, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 3.0, 5353.0, 12.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 30, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 30.0, 4821.0, 123.0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 0, - 1, - 0, - 0, - 1 - ], - [ - 31, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0 + ], + [ + 31.0, 5102.0, 127.0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 32, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 32.0, 5359.0, 131.0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 33, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 33.0, 5054.0, 126.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 34, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 34.0, 5135.0, 127.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 35, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 35.0, 4943.0, 135.0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 36, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 36.0, 4844.0, 130.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1 - ], - [ - 37, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 37.0, 5338.0, 134.0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 38, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 38.0, 4915.0, 138.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 39, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 39.0, 5191.0, 144.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 4, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 4.0, 5302.0, 32.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 40, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 40.0, 5072.0, 137.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0 - ], - [ - 41, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0 + ], + [ + 41.0, 5284.0, 151.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 42, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 42.0, 5323.0, 147.0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 43, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 43.0, 5230.0, 148.0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 44, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 44.0, 5257.0, 150.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 45, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 45.0, 5142.0, 153.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 46, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 46.0, 4850.0, 155.0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 47, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 47.0, 4911.0, 163.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 48, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 48.0, 4956.0, 162.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 49, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 49.0, 5025.0, 166.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 5, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 5.0, 5269.0, 41.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 50, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 50.0, 5305.0, 157.0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 51, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 51.0, 4977.0, 171.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0 - ], - [ - 52, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0 + ], + [ + 52.0, 5160.0, 174.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 53, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 53.0, 5231.0, 190.0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 54, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 54.0, 5358.0, 174.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 55, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 55.0, 5260.0, 176.0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 56, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 56.0, 5178.0, 188.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 57, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 57.0, 5329.0, 184.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1 - ], - [ - 58, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0 + ], + [ + 58.0, 5110.0, 188.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 59, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 59.0, 5043.0, 201.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 6, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 6.0, 4914.0, 51.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 60, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 60.0, 5263.0, 199.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1 - ], - [ - 61, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0 + ], + [ + 61.0, 5291.0, 207.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1 - ], - [ - 62, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0 + ], + [ + 62.0, 5335.0, 205.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1 - ], - [ - 63, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0 + ], + [ + 63.0, 5361.0, 210.0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 64, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 64.0, 5196.0, 203.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 65, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 65.0, 4959.0, 213.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 66, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 66.0, 4917.0, 213.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0 - ], - [ - 67, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0 + ], + [ + 67.0, 5104.0, 222.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 68, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 68.0, 5311.0, 219.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 69, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 69.0, 5002.0, 225.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 0, - 0, - 0 - ], - [ - 7, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0 + ], + [ + 7.0, 5348.0, 56.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 70, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 70.0, 5197.0, 227.0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 71, + 1.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 71.0, 5257.0, 225.0, - 1, - 1, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 72, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 72.0, 5167.0, 227.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 73, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 73.0, 5028.0, 240.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 74, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 74.0, 5226.0, 242.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 75, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 75.0, 5070.0, 233.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 76, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 76.0, 5133.0, 244.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 77, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 77.0, 4969.0, 251.0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 78, + 1.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 78.0, 5093.0, 250.0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 79, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 79.0, 5281.0, 244.0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 8, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 8.0, 4860.0, 64.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 80, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 80.0, 5308.0, 258.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 81, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 81.0, 5334.0, 243.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 82, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 82.0, 4915.0, 255.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 83, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 83.0, 5191.0, 253.0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 84, + 1.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 84.0, 5255.0, 252.0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0 - ], - [ - 85, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0 + ], + [ + 85.0, 5356.0, 253.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 86, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 86.0, 5163.0, 253.0, - 1, - 1, - 1, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 87, + 1.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 87.0, 5069.0, 260.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 88, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 88.0, 5053.0, 275.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 89, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 89.0, 5334.0, 268.0, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 9, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 9.0, 4823.0, 55.0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 0 - ], - [ - 90, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 90.0, 4994.0, 271.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0 - ], - [ - 91, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0 + ], + [ + 91.0, 5133.0, 281.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 92, + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 92.0, 5162.0, 280.0, - 1, - 1, - 1, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 93, + 1.0, + 1.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 93.0, 5219.0, 275.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 94, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 94.0, 5277.0, 294.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0 - ], - [ - 95, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0 + ], + [ + 95.0, 4862.0, 291.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 96, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 96.0, 5092.0, 277.0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 97, + 1.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 97.0, 4824.0, 290.0, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 0 - ], - [ - 98, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0 + ], + [ + 98.0, 5192.0, 283.0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 1 - ], - [ - 99, + 1.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + [ + 99.0, 5330.0, 290.0, - 1, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 1, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 1, - 0, - 0, - 0, - 0, - 1 + 1.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 1.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 ] ] } diff --git a/test/apiserver/module_tests/expected_squidpy1.json b/test/apiserver/module_tests/expected_squidpy1.json index e86e99e3d..dd9594480 100644 --- a/test/apiserver/module_tests/expected_squidpy1.json +++ b/test/apiserver/module_tests/expected_squidpy1.json @@ -1,12 +1,12 @@ { "values": { - "lesion 0_1": 7.506146864895402e-10, - "lesion 0_2": 0.3232077153221568, - "lesion 0_3": 0.06188162632671727, - "lesion 6_1": 0.014179859427994513, - "lesion 6_2": 0.3040673410080827, - "lesion 6_3": 0.3401963386130676, - "lesion 6_4": 0.9704633395520661 + "lesion 0_1": 5.4110493484989196e-05, + "lesion 0_2": 0.3524467568266956, + "lesion 0_3": 0.601308458883726, + "lesion 6_1": 0.03869544859431415, + "lesion 6_2": 0.6639261419161974, + "lesion 6_3": 0.1694874827032425, + "lesion 6_4": 0.7342961298911231 }, "is_pending": false } diff --git a/test/apiserver/module_tests/expected_squidpy2.json b/test/apiserver/module_tests/expected_squidpy2.json index 433b99a84..2c0d409fe 100644 --- a/test/apiserver/module_tests/expected_squidpy2.json +++ b/test/apiserver/module_tests/expected_squidpy2.json @@ -1,12 +1,12 @@ { "values": { - "lesion 0_1": 0.7984444944803337, - "lesion 0_2": 0.24467063479963735, - "lesion 0_3": 0.0129289236905065, - "lesion 6_1": 0.29108860646359486, - "lesion 6_2": 0.1384751165029725, - "lesion 6_3": 0.43652067784717596, - "lesion 6_4": 0.9586051742333643 + "lesion 0_1": 0.4759633022259855, + "lesion 0_2": 0.32923482823492534, + "lesion 0_3": 0.39557674217112937, + "lesion 6_1": 0.3007623299416573, + "lesion 6_2": 0.5388733428422662, + "lesion 6_3": 0.20869011491898382, + "lesion 6_4": 0.7853623985194671 }, "is_pending": false } diff --git a/test/apiserver/module_tests/expected_squidpy3.json b/test/apiserver/module_tests/expected_squidpy3.json index bfefb0839..76261e06d 100644 --- a/test/apiserver/module_tests/expected_squidpy3.json +++ b/test/apiserver/module_tests/expected_squidpy3.json @@ -1,12 +1,12 @@ { "values": { - "lesion 0_1": 2.176621953169743e-06, - "lesion 0_2": 0.40522611009262016, - "lesion 0_3": 0.02173134650450008, - "lesion 6_1": 0.018928395928842618, - "lesion 6_2": 0.00764310393606181, - "lesion 6_3": 0.13296195956549944, - "lesion 6_4": 0.3613511217906604 + "lesion 0_1": 4.455542703500902e-07, + "lesion 0_2": 0.340214052403222, + "lesion 0_3": 0.03795689372646721, + "lesion 6_1": 0.09235827686016224, + "lesion 6_2": 0.06432822998609977, + "lesion 6_3": 0.6288950932595336, + "lesion 6_4": 0.19929048334808258 }, "is_pending": false } diff --git a/test/apiserver/module_tests/expected_squidpy6.json b/test/apiserver/module_tests/expected_squidpy6.json index 7e6bb63b9..f191a620a 100644 --- a/test/apiserver/module_tests/expected_squidpy6.json +++ b/test/apiserver/module_tests/expected_squidpy6.json @@ -1,12 +1,12 @@ { "values": { - "lesion 0_1": 0.0003860787, - "lesion 0_2": 0.4160075671, - "lesion 0_3": 0.04233876, - "lesion 6_1": 0.0061009315, - "lesion 6_2": 0.0153996792, - "lesion 6_3": 0.3058109411, - "lesion 6_4": 0.3377352436 + "lesion 0_1": 0.000636341, + "lesion 0_2": 0.3206379417, + "lesion 0_3": 0.0196997008, + "lesion 6_1": 0.0199343064, + "lesion 6_2": 0.0080498353, + "lesion 6_3": 0.3801765637, + "lesion 6_4": 0.4897926053 }, "is_pending": false } diff --git a/test/apiserver/module_tests/expected_squidpy7.json b/test/apiserver/module_tests/expected_squidpy7.json index 036501733..e37af0654 100644 --- a/test/apiserver/module_tests/expected_squidpy7.json +++ b/test/apiserver/module_tests/expected_squidpy7.json @@ -1,9 +1,9 @@ { "values": { - "lesion 0_1": 2.4175e-06, + "lesion 0_1": 7.54e-08, "lesion 0_2": null, "lesion 0_3": null, - "lesion 6_1": 0.4912280752, + "lesion 6_1": 0.4614265441, "lesion 6_2": null, "lesion 6_3": null, "lesion 6_4": null diff --git a/test/apiserver/module_tests/expected_squidpy8.json b/test/apiserver/module_tests/expected_squidpy8.json index 49ee8b9df..b6ab2bc12 100644 --- a/test/apiserver/module_tests/expected_squidpy8.json +++ b/test/apiserver/module_tests/expected_squidpy8.json @@ -1,12 +1,12 @@ { "values": { - "lesion 0_1": 0.1887084154, - "lesion 0_2": 0.2767839968, - "lesion 0_3": 0.0983190032, - "lesion 6_1": 0.0897484557, - "lesion 6_2": 0.4997194737, - "lesion 6_3": 0.1600901304, - "lesion 6_4": 0.0268074181 + "lesion 0_1": 0.2443598841, + "lesion 0_2": 0.3303832073, + "lesion 0_3": 0.113968569, + "lesion 6_1": 0.184725127, + "lesion 6_2": 0.3690863897, + "lesion 6_3": 0.2652177509, + "lesion 6_4": 0.0369503808 }, "is_pending": false } diff --git a/test/db/module_tests/expected_auto_correlations.tsv b/test/db/module_tests/expected_auto_correlations.tsv index dfc2c4c45..bee8d0c02 100644 --- a/test/db/module_tests/expected_auto_correlations.tsv +++ b/test/db/module_tests/expected_auto_correlations.tsv @@ -1,175 +1,175 @@ -64 lesion 0_1 0.0 -64 lesion 0_2 0.0 -64 lesion 0_3 0.22596556988260386 -64 lesion 6_1 0.11447574995959797 -64 lesion 6_2 2.892518324859594e-07 -64 lesion 6_3 0.02116298928096405 -64 lesion 6_4 0.0 -65 lesion 0_1 0.21834662619011252 -65 lesion 0_2 0.24668959120661205 -65 lesion 0_3 0.3048070834039014 -65 lesion 6_1 0.4752121219110734 -65 lesion 6_2 0.0 -65 lesion 6_3 0.0024954949547502103 -65 lesion 6_4 0.00016258039399053015 -66 lesion 0_1 0.016924094407683055 -66 lesion 0_2 2.0853763160744165e-11 -66 lesion 0_3 0.41403605891914197 -66 lesion 6_1 0.00833219228762705 -66 lesion 6_2 0.0038359418244635624 -66 lesion 6_3 1.0779915404768303e-08 -66 lesion 6_4 0.02805392601377288 -67 lesion 0_1 3.4587888109172127e-12 -67 lesion 0_2 0.4294804743707872 -67 lesion 0_3 0.48628467267192055 -67 lesion 6_1 0.015278128364306531 -67 lesion 6_2 0.06567368161042153 -67 lesion 6_3 0.00048819868344607276 -67 lesion 6_4 0.04160815408046192 -68 lesion 0_1 0.0 -68 lesion 0_2 0.00012972168171832 -68 lesion 0_3 0.22573490316012335 -68 lesion 6_1 0.0012426228245916437 -68 lesion 6_2 0.1264584421326368 -68 lesion 6_3 0.48453681088888223 -68 lesion 6_4 0.3812606680727656 -69 lesion 0_1 0.0 -69 lesion 0_2 0.0010154711468035593 -69 lesion 0_3 0.0 -69 lesion 6_1 0.33887539583095827 -69 lesion 6_2 0.49641402194028034 -69 lesion 6_3 0.3433877526912531 -69 lesion 6_4 0.4959888974589932 -70 lesion 0_1 0.48952936275596276 -70 lesion 0_2 0.1391663345149855 -70 lesion 0_3 0.34614116020987473 -70 lesion 6_1 0.329845909190173 -70 lesion 6_2 0.43419332431713786 -70 lesion 6_3 0.30736934720403897 -70 lesion 6_4 0.3048329718359517 -71 lesion 0_1 0.00038607876074447933 -71 lesion 0_2 0.41600756713602516 -71 lesion 0_3 0.042338760038383105 -71 lesion 6_1 0.006100931542677657 -71 lesion 6_2 0.01539967925447705 -71 lesion 6_3 0.3058109411474268 -71 lesion 6_4 0.3377352436927046 -72 lesion 0_1 3.128278668618201e-05 -72 lesion 0_2 0.1583058049906758 -72 lesion 0_3 0.03927615526007666 -72 lesion 6_1 0.023691085292843028 -72 lesion 6_2 0.27489879966073927 -72 lesion 6_3 0.008488901449737574 -72 lesion 6_4 0.08760376121304281 -73 lesion 0_1 0.0 -73 lesion 0_2 0.0 -73 lesion 0_3 0.44155710625948 -73 lesion 6_1 0.15804707215648262 -73 lesion 6_2 0.016887568044305912 -73 lesion 6_3 0.264141467705157 -73 lesion 6_4 0.0036710166396821675 -74 lesion 0_1 0.0 -74 lesion 0_2 0.0 -74 lesion 0_3 0.37166398592149186 -74 lesion 6_1 0.0603933811504328 -74 lesion 6_2 2.0598100558544274e-08 -74 lesion 6_3 0.2789939231615052 -74 lesion 6_4 0.449070636156484 -75 lesion 0_1 0.004980661947335485 -75 lesion 0_2 0.0001631819728431516 -75 lesion 0_3 0.0005527741474827819 -75 lesion 6_1 0.4741371976261751 -75 lesion 6_2 0.0011022588011466716 -75 lesion 6_3 0.055643485017686456 -75 lesion 6_4 0.17626129693745263 -76 lesion 0_1 0.4418994360913127 -76 lesion 0_2 0.4314529775794361 -76 lesion 0_3 0.0 -76 lesion 6_1 0.45535062182080455 -76 lesion 6_2 0.06656557803770646 -76 lesion 6_3 0.003723297924714819 -76 lesion 6_4 0.22973416177310124 -77 lesion 0_1 0.0 -77 lesion 0_2 0.4894075629951134 -77 lesion 0_3 0.0 -77 lesion 6_1 0.162531354312764 -77 lesion 6_2 0.0 -77 lesion 6_3 0.4973010699861472 -77 lesion 6_4 0.0 -78 lesion 0_1 0.03376740974806813 -78 lesion 0_2 0.41091987335596397 -78 lesion 0_3 0.0 -78 lesion 6_1 0.49517257495164535 -78 lesion 6_2 0.298661127697595 -78 lesion 6_3 0.08052446121822576 -78 lesion 6_4 0.010255958224306694 -79 lesion 0_1 0.0 -79 lesion 0_2 0.26487098944313237 -79 lesion 0_3 0.3004693352145078 -79 lesion 6_1 0.43480475278711406 -79 lesion 6_2 0.0 -79 lesion 6_3 1.4508881984731659e-08 -79 lesion 6_4 0.37387766323594657 -80 lesion 0_1 0.0 -80 lesion 0_2 5.8415397854449935e-06 -80 lesion 0_3 0.06917317322004546 -80 lesion 6_1 0.05277328016962102 -80 lesion 6_2 1.1002310174035301e-13 -80 lesion 6_3 0.08715493445161326 -80 lesion 6_4 0.010821410657701258 -81 lesion 0_1 0.023724764200286907 -81 lesion 0_2 0.00028011838370956 -81 lesion 0_3 0.31300143429619 -81 lesion 6_1 1.1102230246251565e-16 -81 lesion 6_2 4.955298913378314e-05 -81 lesion 6_3 4.063878081828065e-07 -81 lesion 6_4 0.0015447735543092644 -82 lesion 0_1 6.692424392440444e-13 -82 lesion 0_2 0.000333856869092819 -82 lesion 0_3 0.19788854735698647 -82 lesion 6_1 0.011913397049698293 -82 lesion 6_2 0.13815336509563392 -82 lesion 6_3 0.004283569836919243 -82 lesion 6_4 0.009357237765227344 -83 lesion 0_1 1.135416440056769e-05 -83 lesion 0_2 0.33306557250554314 -83 lesion 0_3 0.0 -83 lesion 6_1 0.05130855251481081 -83 lesion 6_2 0.19278522730040165 -83 lesion 6_3 0.1981310574156907 -83 lesion 6_4 0.004516771176095058 -84 lesion 0_1 0.0 -84 lesion 0_2 0.3240989412061296 -84 lesion 0_3 0.012934690031572993 -84 lesion 6_1 0.0 -84 lesion 6_2 0.40047977234832605 -84 lesion 6_3 6.566800436758058e-10 -84 lesion 6_4 0.494463423430637 -85 lesion 0_1 3.485470800868029e-10 -85 lesion 0_2 0.0 -85 lesion 0_3 0.4984077249038871 -85 lesion 6_1 0.49122807529352364 -85 lesion 6_2 0.0 -85 lesion 6_3 0.49906574872257664 -85 lesion 6_4 0.0 -86 lesion 0_1 4.8691059586492e-06 -86 lesion 0_2 0.0 -86 lesion 0_3 0.0 -86 lesion 6_1 0.49122807529352364 -86 lesion 6_2 0.0 -86 lesion 6_3 0.0 -86 lesion 6_4 0.0 -87 lesion 0_1 4.098676804553669e-05 -87 lesion 0_2 0.10270142567592133 -87 lesion 0_3 0.0 -87 lesion 6_1 0.0 -87 lesion 6_2 0.4979985053171297 -87 lesion 6_3 0.0 -87 lesion 6_4 0.01045439409941773 -88 lesion 0_1 9.712402195827252e-07 -88 lesion 0_2 0.009831850211251658 -88 lesion 0_3 0.4362299012251649 -88 lesion 6_1 0.01492878485288629 -88 lesion 6_2 0.004534067030876776 -88 lesion 6_3 0.0 -88 lesion 6_4 0.0007206552181212578 +1 lesion 0_1 0.0 +1 lesion 0_2 0.0 +1 lesion 0_3 0.126709 +1 lesion 6_1 0.046754 +1 lesion 6_2 1e-05 +1 lesion 6_3 0.023897 +1 lesion 6_4 0.0 +2 lesion 0_1 0.191497 +2 lesion 0_2 0.206097 +2 lesion 0_3 0.286798 +2 lesion 6_1 0.487124 +2 lesion 6_2 0.0 +2 lesion 6_3 0.000585 +2 lesion 6_4 8.4e-05 +3 lesion 0_1 0.0 +3 lesion 0_2 0.0 +3 lesion 0_3 0.300633 +3 lesion 6_1 0.040833 +3 lesion 6_2 7.7e-05 +3 lesion 6_3 0.247119 +3 lesion 6_4 0.435054 +4 lesion 0_1 0.008538 +4 lesion 0_2 9e-06 +4 lesion 0_3 0.000265 +4 lesion 6_1 0.365148 +4 lesion 6_2 0.000891 +4 lesion 6_3 0.033023 +4 lesion 6_4 0.072465 +5 lesion 0_1 0.436218 +5 lesion 0_2 0.411039 +5 lesion 0_3 0.0 +5 lesion 6_1 0.465851 +5 lesion 6_2 0.037338 +5 lesion 6_3 0.00578 +5 lesion 6_4 0.225235 +6 lesion 0_1 0.0 +6 lesion 0_2 0.462323 +6 lesion 0_3 0.0 +6 lesion 6_1 0.044734 +6 lesion 6_2 0.0 +6 lesion 6_3 0.499999 +6 lesion 6_4 0.0 +7 lesion 0_1 0.078366 +7 lesion 0_2 0.44855 +7 lesion 0_3 0.0 +7 lesion 6_1 0.487124 +7 lesion 6_2 0.382827 +7 lesion 6_3 0.037926 +7 lesion 6_4 0.00264 +8 lesion 0_1 0.0 +8 lesion 0_2 0.322369 +8 lesion 0_3 0.38374 +8 lesion 6_1 0.447328 +8 lesion 6_2 0.0 +8 lesion 6_3 0.0 +8 lesion 6_4 0.35828 +9 lesion 0_1 0.0 +9 lesion 0_2 2e-06 +9 lesion 0_3 0.037622 +9 lesion 6_1 0.041421 +9 lesion 6_2 0.0 +9 lesion 6_3 0.072337 +9 lesion 6_4 0.045083 +10 lesion 0_1 0.022031 +10 lesion 0_2 2.5e-05 +10 lesion 0_3 0.262739 +10 lesion 6_1 0.0 +10 lesion 6_2 0.002105 +10 lesion 6_3 0.0 +10 lesion 6_4 0.009623 +11 lesion 0_1 0.0 +11 lesion 0_2 3.1e-05 +11 lesion 0_3 0.148721 +11 lesion 6_1 0.032886 +11 lesion 6_2 0.098984 +11 lesion 6_3 0.002172 +11 lesion 6_4 0.021891 +12 lesion 0_1 0.000129 +12 lesion 0_2 0.413735 +12 lesion 0_3 0.0 +12 lesion 6_1 0.00579 +12 lesion 6_2 0.138012 +12 lesion 6_3 0.214668 +12 lesion 6_4 0.000792 +13 lesion 0_1 0.005058 +13 lesion 0_2 0.0 +13 lesion 0_3 0.487061 +13 lesion 6_1 0.002318 +13 lesion 6_2 0.00115 +13 lesion 6_3 0.0 +13 lesion 6_4 0.007353 +14 lesion 0_1 0.0 +14 lesion 0_2 0.258764 +14 lesion 0_3 0.001762 +14 lesion 6_1 0.0 +14 lesion 6_2 0.422293 +14 lesion 6_3 0.0 +14 lesion 6_4 0.474496 +15 lesion 0_1 0.0 +15 lesion 0_2 0.0 +15 lesion 0_3 0.5 +15 lesion 6_1 0.461426 +15 lesion 6_2 0.0 +15 lesion 6_3 0.499999 +15 lesion 6_4 0.0 +16 lesion 0_1 0.0 +16 lesion 0_2 0.0 +16 lesion 0_3 0.0 +16 lesion 6_1 0.461426 +16 lesion 6_2 0.0 +16 lesion 6_3 0.0 +16 lesion 6_4 0.0 +17 lesion 0_1 9e-06 +17 lesion 0_2 0.149658 +17 lesion 0_3 0.0 +17 lesion 6_1 0.0 +17 lesion 6_2 0.487228 +17 lesion 6_3 0.0 +17 lesion 6_4 0.001649 +18 lesion 0_1 0.0 +18 lesion 0_2 0.003598 +18 lesion 0_3 0.47148 +18 lesion 6_1 0.059916 +18 lesion 6_2 0.000787 +18 lesion 6_3 0.0 +18 lesion 6_4 0.002602 +19 lesion 0_1 0.0 +19 lesion 0_2 0.44855 +19 lesion 0_3 0.473733 +19 lesion 6_1 0.000868 +19 lesion 6_2 0.066442 +19 lesion 6_3 6e-06 +19 lesion 6_4 0.062327 +20 lesion 0_1 0.0 +20 lesion 0_2 0.027682 +20 lesion 0_3 0.230809 +20 lesion 6_1 0.031235 +20 lesion 6_2 0.040079 +20 lesion 6_3 0.461775 +20 lesion 6_4 0.364801 +21 lesion 0_1 0.0 +21 lesion 0_2 0.000567 +21 lesion 0_3 0.0 +21 lesion 6_1 0.2451 +21 lesion 6_2 0.499999 +21 lesion 6_3 0.382937 +21 lesion 6_4 0.487241 +22 lesion 0_1 0.487472 +22 lesion 0_2 0.103558 +22 lesion 0_3 0.371423 +22 lesion 6_1 0.483123 +22 lesion 6_2 0.465554 +22 lesion 6_3 0.319142 +22 lesion 6_4 0.204616 +23 lesion 0_1 0.000636 +23 lesion 0_2 0.320637 +23 lesion 0_3 0.019699 +23 lesion 6_1 0.019934 +23 lesion 6_2 0.008049 +23 lesion 6_3 0.380176 +23 lesion 6_4 0.489792 +24 lesion 0_1 7e-05 +24 lesion 0_2 0.212629 +24 lesion 0_3 0.040882 +24 lesion 6_1 0.042768 +24 lesion 6_2 0.299731 +24 lesion 6_3 0.038661 +24 lesion 6_4 0.172591 +25 lesion 0_1 0.0 +25 lesion 0_2 0.0 +25 lesion 0_3 0.397962 +25 lesion 6_1 0.050868 +25 lesion 6_2 0.003374 +25 lesion 6_3 0.232176 +25 lesion 6_4 0.016416 diff --git a/test/db/module_tests/test_autocomputed_squidpy.py b/test/db/module_tests/test_autocomputed_squidpy.py index a487e37de..df14f4325 100644 --- a/test/db/module_tests/test_autocomputed_squidpy.py +++ b/test/db/module_tests/test_autocomputed_squidpy.py @@ -20,7 +20,7 @@ def get_expected_records(): df['feature'] = df['feature'].astype(str) df['sample'] = df['sample'].astype(str) df['value'] = df['value'].astype(float) - df['value'] = df['value'].apply(round6) + df['value'] = df['value'].apply(round3) return extract_feature_vectors(df) @@ -37,11 +37,21 @@ def create_feature_vector(df: DataFrame) -> FeatureVector: def check_records(feature_values): - rows = [(row[0], row[1], round6(row[2])) for row in feature_values] + rows = [(row[0], row[1], round3(row[2])) for row in feature_values] df = DataFrame(rows, columns=['feature', 'sample', 'value']) feature_vectors = extract_feature_vectors(df) missing = set(get_expected_records()).difference(feature_vectors) if len(missing) > 0: + + with open('module_tests/_expected_auto_correlations.tsv', 'wt', encoding='utf-8') as file: + count = 1 + for feature_vector in feature_vectors: + for entry in feature_vector: + file.write('\t'.join([str(count)] + [str(e) for e in entry])) + file.write('\n') + count += 1 + + raise ValueError(f'Expected to find records: {sorted(missing)}\nGot: {sorted(rows)}') print('All expected records found.') @@ -51,8 +61,8 @@ def check_records(feature_values): print('No unexpected records encountered.') -def round6(value): - return int(pow(10, 6) * value) / pow(10, 6) +def round3(value): + return int(pow(10, 3) * value) / pow(10, 3) def retrieve_feature_values(connection): diff --git a/version.txt b/version.txt index 444d49608..eac4830d4 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.23.3 \ No newline at end of file +0.23.4 \ No newline at end of file