From f11589358540ecdb5d5988f2386ca10ac10f9456 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 7 Jul 2023 12:40:29 +0100 Subject: [PATCH 01/27] Initial commit --- pandasaurus_cxg/anndata_analyzer.py | 4 +- pandasaurus_cxg/graph_generator/__init__.py | 0 .../graph_generator/graph_generator.py | 62 ++ poetry.lock | 623 ++++++++++-------- pyproject.toml | 1 + 5 files changed, 409 insertions(+), 281 deletions(-) create mode 100644 pandasaurus_cxg/graph_generator/__init__.py create mode 100644 pandasaurus_cxg/graph_generator/graph_generator.py diff --git a/pandasaurus_cxg/anndata_analyzer.py b/pandasaurus_cxg/anndata_analyzer.py index a2960db..1961c7a 100644 --- a/pandasaurus_cxg/anndata_analyzer.py +++ b/pandasaurus_cxg/anndata_analyzer.py @@ -9,7 +9,8 @@ # Check if the DEBUG environment variable is set -debug_mode = os.getenv('DEBUG') +debug_mode = os.getenv("DEBUG") + class AnndataAnalyzer: """ @@ -94,7 +95,6 @@ def co_annotation_report(self): columns=["field_name1", "value1", "predicate", "field_name2", "value2"], ) - @staticmethod def _remove_duplicates(data: List[List[str]]): unique_data = [] diff --git a/pandasaurus_cxg/graph_generator/__init__.py b/pandasaurus_cxg/graph_generator/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py new file mode 100644 index 0000000..1c07b1a --- /dev/null +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -0,0 +1,62 @@ +from typing import List, Optional +import uuid + +import pandas as pd + + +class GraphGenerator: + def __init__(self, dataframe: pd.DataFrame, keys: Optional[List[str]] = None): + """ + Initializes GraphGenerator instance. + + Args: + dataframe (pd.DataFrame): The input DataFrame. + keys (Optional[List[str]]): List of column names to select from the DataFrame. + Defaults to None. + + """ + self.df = dataframe[keys] if keys else dataframe + + def generate_rdf_graph(self): + # preprocess + column_group = ["field_name1", "value1"] + df = self.df.sort_values(by=column_group).reset_index(drop=True) + grouped_df = df[df["predicate"] == "cluster_matches"].groupby(column_group) + # grouped_dict_uuid = { + # str(uuid.uuid4()): { + # **{ + # inner_list[0][0]: inner_list[0][1], + # inner_list[0][3]: inner_list[0][4], + # }, + # outer_key1: outer_key2, + # } + # for (outer_key1, outer_key2), inner_dict in grouped_df + # for inner_list in [inner_dict.values.tolist()] + # } + grouped_dict_uuid = {} + for (outer_key1, outer_key2), inner_dict in grouped_df: + uuid_key = str(uuid.uuid4()) + for inner_list in inner_dict.values.tolist(): + + inner_dict_uuid = { + inner_list[0]: inner_list[1], + inner_list[3]: inner_list[4], + } + + if uuid_key in grouped_dict_uuid: + grouped_dict_uuid[uuid_key].append(inner_dict_uuid) + else: + grouped_dict_uuid[uuid_key] = [inner_dict_uuid] + + + # generate a resource for each free-text cell_type annotation and cell_type_ontology_term annotation + + # add relationship between each resource based on their predicate in the co_annotation_report + + pass + + def save_rdf_graph(self): + pass + + def visualize_rdf_graph(self): + pass diff --git a/poetry.lock b/poetry.lock index 0f95273..1d158f2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -123,20 +123,20 @@ lxml = ["lxml"] [[package]] name = "bioregistry" -version = "0.9.54" +version = "0.9.67" description = "Integrated registry of biological databases and nomenclatures" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bioregistry-0.9.54-py3-none-any.whl", hash = "sha256:a53d6152f5e414d5b5bbc5f24a1de3ad9e0ea0d937628e1879f390bb084000d0"}, - {file = "bioregistry-0.9.54.tar.gz", hash = "sha256:634f125854bd3b3a18810cfe72d904791e2371e797b1afbe26e39776f2fdd477"}, + {file = "bioregistry-0.9.67-py3-none-any.whl", hash = "sha256:fbe8191ef9ca57603d1f48cb87744d2c5e4d833aa2d058a128f4cd9a66809a6c"}, + {file = "bioregistry-0.9.67.tar.gz", hash = "sha256:afd318daa5e40c1bc2932a6ff84efa85397f742d7a7f9d78075840002b6a6053"}, ] [package.dependencies] click = "*" -curies = ">=0.5.1" +curies = ">=0.5.6" more-click = ">=0.1.2" -pydantic = "*" +pydantic = "<2.0" pystow = ">=0.1.13" requests = "*" tqdm = "*" @@ -397,23 +397,23 @@ files = [ [[package]] name = "curies" -version = "0.5.5" +version = "0.5.6" description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "curies-0.5.5-py3-none-any.whl", hash = "sha256:265ab8c95a2a6478ca22a1f9a2fac2902d71fa7737534b6380297e4dc49decd6"}, - {file = "curies-0.5.5.tar.gz", hash = "sha256:4c1ddf6e7be2afdccb8e9dad76e4c22c4f9d506bbe0dbb1cfaf2cf29fc488ce2"}, + {file = "curies-0.5.6-py3-none-any.whl", hash = "sha256:27eee34218bf645fdfb5c457bacfba0274146277bac600d9b9a83d2e5e01abcd"}, + {file = "curies-0.5.6.tar.gz", hash = "sha256:fd9e72ea9b167911057726bd537c9956ed96d88ce71aecf59f9a47c6ca484ffe"}, ] [package.dependencies] -pydantic = "*" +pydantic = "<2.0" pytrie = "*" requests = "*" [package.extras] bioregistry = ["bioregistry (>=0.5.136)"] -docs = ["sphinx", "sphinx-autodoc-typehints", "sphinx-automodapi", "sphinx-rtd-theme"] +docs = ["sphinx (<7.0)", "sphinx-autodoc-typehints", "sphinx-automodapi", "sphinx-rtd-theme"] fastapi = ["defusedxml", "fastapi", "httpx", "python-multipart", "uvicorn"] flask = ["defusedxml", "flask"] pandas = ["pandas"] @@ -505,13 +505,13 @@ dev = ["flake8", "ipython", "mock", "pytest", "pytest-cov", "restview", "setupto [[package]] name = "exceptiongroup" -version = "1.1.1" +version = "1.1.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"}, - {file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"}, + {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, + {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, ] [package.extras] @@ -629,20 +629,19 @@ files = [ [[package]] name = "funowl" -version = "0.1.13" +version = "0.1.12" description = "Python rendering of the OWL Functional syntax" optional = false python-versions = ">=3.7" files = [ - {file = "funowl-0.1.13-py3-none-any.whl", hash = "sha256:81dc273b11cb1b0c9fbf15496a6b85f335ef1694c321fd704267bcd694e3cb26"}, - {file = "funowl-0.1.13.tar.gz", hash = "sha256:49f26a0e9b072ba331914564478a90e99e1d8fa10c4570d600bb3bae9250ea06"}, + {file = "funowl-0.1.12-py3-none-any.whl", hash = "sha256:44f2337d47d21ab6532f8f0e51173c506a0d9dae9efa959cb105b0311e352082"}, + {file = "funowl-0.1.12.tar.gz", hash = "sha256:3316c37ecde08cdfa96ebcbcc02ed53c355dc56845d654a8f37aa7a913ca6f71"}, ] [package.dependencies] bcp47 = "*" -jsonasobj = "*" pyjsg = ">=0.11.6" -rdflib = "6.2.0" +rdflib = ">=5.0.0" rdflib-shim = "*" rfc3987 = "*" @@ -1082,24 +1081,26 @@ files = [ [[package]] name = "jsonschema" -version = "4.17.3" +version = "4.18.0" description = "An implementation of JSON Schema validation for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, - {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, + {file = "jsonschema-4.18.0-py3-none-any.whl", hash = "sha256:b508dd6142bd03f4c3670534c80af68cd7bbff9ea830b9cf2625d4a3c49ddf60"}, + {file = "jsonschema-4.18.0.tar.gz", hash = "sha256:8caf5b57a990a98e9b39832ef3cb35c176fe331414252b6e1b26fd5866f891a4"}, ] [package.dependencies] -attrs = ">=17.4.0" +attrs = ">=22.2.0" fqdn = {version = "*", optional = true, markers = "extra == \"format\""} idna = {version = "*", optional = true, markers = "extra == \"format\""} isoduration = {version = "*", optional = true, markers = "extra == \"format\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} +rpds-py = ">=0.7.1" uri-template = {version = "*", optional = true, markers = "extra == \"format\""} webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format\""} @@ -1107,6 +1108,20 @@ webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format\" format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +[[package]] +name = "jsonschema-specifications" +version = "2023.6.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.6.1-py3-none-any.whl", hash = "sha256:3d2b82663aff01815f744bb5c7887e2121a63399b49b104a3c96145474d091d7"}, + {file = "jsonschema_specifications-2023.6.1.tar.gz", hash = "sha256:ca1c4dd059a9e7b34101cf5b3ab7ff1d18b139f35950d598d629837ef66e8f28"}, +] + +[package.dependencies] +referencing = ">=0.28.0" + [[package]] name = "kgcl-rdflib" version = "0.5.0" @@ -1156,13 +1171,13 @@ regex = ["regex"] [[package]] name = "linkml" -version = "1.5.5" +version = "1.5.6" description = "Linked Open Data Modeling Language" optional = false python-versions = ">=3.7.6,<4.0.0" files = [ - {file = "linkml-1.5.5-py3-none-any.whl", hash = "sha256:0f7463aa71cd9eea25e452727153ba4fea501793a1e34fa58ae3fac461400fbb"}, - {file = "linkml-1.5.5.tar.gz", hash = "sha256:46a335512a849966c6980fedfd57eb9ba32b67045f5e6bf6bb6dfcf5be236240"}, + {file = "linkml-1.5.6-py3-none-any.whl", hash = "sha256:8036d9ead98d0bf61017e5a2db32ca5b752ab32e338c796c4780118f37293d44"}, + {file = "linkml-1.5.6.tar.gz", hash = "sha256:54b34ad376c3146eb714e961118ac2a02720ac315d8ab76ca802e5dc479b25fb"}, ] [package.dependencies] @@ -1175,7 +1190,7 @@ jinja2 = ">=3.1.0" jsonasobj2 = ">=1.0.3,<2.0.0" jsonschema = {version = ">=4.0.0", extras = ["format"]} linkml-dataops = "*" -linkml-runtime = ">=1.5.3" +linkml-runtime = ">=1.5.4" openpyxl = "*" parse = "*" prefixcommons = ">=0.1.7" @@ -1256,95 +1271,99 @@ requests = "*" [[package]] name = "lxml" -version = "4.9.2" +version = "4.9.3" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" files = [ - {file = "lxml-4.9.2-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2"}, - {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892"}, - {file = "lxml-4.9.2-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a"}, - {file = "lxml-4.9.2-cp27-cp27m-win32.whl", hash = "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de"}, - {file = "lxml-4.9.2-cp27-cp27m-win_amd64.whl", hash = "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3"}, - {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50"}, - {file = "lxml-4.9.2-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975"}, - {file = "lxml-4.9.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4"}, - {file = "lxml-4.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4"}, - {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7"}, - {file = "lxml-4.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184"}, - {file = "lxml-4.9.2-cp310-cp310-win32.whl", hash = "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda"}, - {file = "lxml-4.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf"}, - {file = "lxml-4.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380"}, - {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92"}, - {file = "lxml-4.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1"}, - {file = "lxml-4.9.2-cp311-cp311-win32.whl", hash = "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33"}, - {file = "lxml-4.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd"}, - {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0"}, - {file = "lxml-4.9.2-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e"}, - {file = "lxml-4.9.2-cp35-cp35m-win32.whl", hash = "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df"}, - {file = "lxml-4.9.2-cp35-cp35m-win_amd64.whl", hash = "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5"}, - {file = "lxml-4.9.2-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1"}, - {file = "lxml-4.9.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e"}, - {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74"}, - {file = "lxml-4.9.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38"}, - {file = "lxml-4.9.2-cp36-cp36m-win32.whl", hash = "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5"}, - {file = "lxml-4.9.2-cp36-cp36m-win_amd64.whl", hash = "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3"}, - {file = "lxml-4.9.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894"}, - {file = "lxml-4.9.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45"}, - {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e"}, - {file = "lxml-4.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b"}, - {file = "lxml-4.9.2-cp37-cp37m-win32.whl", hash = "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe"}, - {file = "lxml-4.9.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9"}, - {file = "lxml-4.9.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03"}, - {file = "lxml-4.9.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c"}, - {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f"}, - {file = "lxml-4.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457"}, - {file = "lxml-4.9.2-cp38-cp38-win32.whl", hash = "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b"}, - {file = "lxml-4.9.2-cp38-cp38-win_amd64.whl", hash = "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7"}, - {file = "lxml-4.9.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947"}, - {file = "lxml-4.9.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5"}, - {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5"}, - {file = "lxml-4.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2"}, - {file = "lxml-4.9.2-cp39-cp39-win32.whl", hash = "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1"}, - {file = "lxml-4.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f"}, - {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c"}, - {file = "lxml-4.9.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f"}, - {file = "lxml-4.9.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7"}, - {file = "lxml-4.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409"}, - {file = "lxml-4.9.2.tar.gz", hash = "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67"}, + {file = "lxml-4.9.3-cp27-cp27m-macosx_11_0_x86_64.whl", hash = "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d"}, + {file = "lxml-4.9.3-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb"}, + {file = "lxml-4.9.3-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e"}, + {file = "lxml-4.9.3-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8"}, + {file = "lxml-4.9.3-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23"}, + {file = "lxml-4.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f"}, + {file = "lxml-4.9.3-cp310-cp310-win32.whl", hash = "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85"}, + {file = "lxml-4.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d"}, + {file = "lxml-4.9.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f"}, + {file = "lxml-4.9.3-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120"}, + {file = "lxml-4.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6"}, + {file = "lxml-4.9.3-cp311-cp311-win32.whl", hash = "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305"}, + {file = "lxml-4.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc"}, + {file = "lxml-4.9.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be"}, + {file = "lxml-4.9.3-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9"}, + {file = "lxml-4.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5"}, + {file = "lxml-4.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7"}, + {file = "lxml-4.9.3-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2"}, + {file = "lxml-4.9.3-cp35-cp35m-win32.whl", hash = "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d"}, + {file = "lxml-4.9.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833"}, + {file = "lxml-4.9.3-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c"}, + {file = "lxml-4.9.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287"}, + {file = "lxml-4.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458"}, + {file = "lxml-4.9.3-cp36-cp36m-win32.whl", hash = "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477"}, + {file = "lxml-4.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693"}, + {file = "lxml-4.9.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a"}, + {file = "lxml-4.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02"}, + {file = "lxml-4.9.3-cp37-cp37m-win32.whl", hash = "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f"}, + {file = "lxml-4.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42"}, + {file = "lxml-4.9.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40"}, + {file = "lxml-4.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7"}, + {file = "lxml-4.9.3-cp38-cp38-win32.whl", hash = "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574"}, + {file = "lxml-4.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96"}, + {file = "lxml-4.9.3-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d"}, + {file = "lxml-4.9.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69"}, + {file = "lxml-4.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50"}, + {file = "lxml-4.9.3-cp39-cp39-win32.whl", hash = "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2"}, + {file = "lxml-4.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2"}, + {file = "lxml-4.9.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0"}, + {file = "lxml-4.9.3-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b"}, + {file = "lxml-4.9.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4"}, + {file = "lxml-4.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9"}, + {file = "lxml-4.9.3.tar.gz", hash = "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=0.29.7)"] +source = ["Cython (>=0.29.35)"] [[package]] name = "markdown" @@ -1474,13 +1493,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.1.16" +version = "9.1.18" description = "Documentation that simply works" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs_material-9.1.16-py3-none-any.whl", hash = "sha256:f9e62558a6b01ffac314423cbc223d970c25fbc78999860226245b64e64d6751"}, - {file = "mkdocs_material-9.1.16.tar.gz", hash = "sha256:1021bfea20f00a9423530c8c2ae9be3c78b80f5a527b3f822e6de3d872e5ab79"}, + {file = "mkdocs_material-9.1.18-py3-none-any.whl", hash = "sha256:5bcf8fb79ac2f253c0ffe93fa181cba87718c6438f459dc4180ac7418cc9a450"}, + {file = "mkdocs_material-9.1.18.tar.gz", hash = "sha256:981dd39979723d4cda7cfc77bbbe5e54922d5761a7af23fb8ba9edb52f114b13"}, ] [package.dependencies] @@ -1755,36 +1774,36 @@ files = [ [[package]] name = "pandas" -version = "2.0.2" +version = "2.0.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.8" files = [ - {file = "pandas-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ebb9f1c22ddb828e7fd017ea265a59d80461d5a79154b49a4207bd17514d122"}, - {file = "pandas-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eb09a242184092f424b2edd06eb2b99d06dc07eeddff9929e8667d4ed44e181"}, - {file = "pandas-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7319b6e68de14e6209460f72a8d1ef13c09fb3d3ef6c37c1e65b35d50b5c145"}, - {file = "pandas-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd46bde7309088481b1cf9c58e3f0e204b9ff9e3244f441accd220dd3365ce7c"}, - {file = "pandas-2.0.2-cp310-cp310-win32.whl", hash = "sha256:51a93d422fbb1bd04b67639ba4b5368dffc26923f3ea32a275d2cc450f1d1c86"}, - {file = "pandas-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:66d00300f188fa5de73f92d5725ced162488f6dc6ad4cecfe4144ca29debe3b8"}, - {file = "pandas-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02755de164da6827764ceb3bbc5f64b35cb12394b1024fdf88704d0fa06e0e2f"}, - {file = "pandas-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0a1e0576611641acde15c2322228d138258f236d14b749ad9af498ab69089e2d"}, - {file = "pandas-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6b5f14cd24a2ed06e14255ff40fe2ea0cfaef79a8dd68069b7ace74bd6acbba"}, - {file = "pandas-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50e451932b3011b61d2961b4185382c92cc8c6ee4658dcd4f320687bb2d000ee"}, - {file = "pandas-2.0.2-cp311-cp311-win32.whl", hash = "sha256:7b21cb72958fc49ad757685db1919021d99650d7aaba676576c9e88d3889d456"}, - {file = "pandas-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:c4af689352c4fe3d75b2834933ee9d0ccdbf5d7a8a7264f0ce9524e877820c08"}, - {file = "pandas-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:69167693cb8f9b3fc060956a5d0a0a8dbfed5f980d9fd2c306fb5b9c855c814c"}, - {file = "pandas-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:30a89d0fec4263ccbf96f68592fd668939481854d2ff9da709d32a047689393b"}, - {file = "pandas-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a18e5c72b989ff0f7197707ceddc99828320d0ca22ab50dd1b9e37db45b010c0"}, - {file = "pandas-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7376e13d28eb16752c398ca1d36ccfe52bf7e887067af9a0474de6331dd948d2"}, - {file = "pandas-2.0.2-cp38-cp38-win32.whl", hash = "sha256:6d6d10c2142d11d40d6e6c0a190b1f89f525bcf85564707e31b0a39e3b398e08"}, - {file = "pandas-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:e69140bc2d29a8556f55445c15f5794490852af3de0f609a24003ef174528b79"}, - {file = "pandas-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b42b120458636a981077cfcfa8568c031b3e8709701315e2bfa866324a83efa8"}, - {file = "pandas-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f908a77cbeef9bbd646bd4b81214cbef9ac3dda4181d5092a4aa9797d1bc7774"}, - {file = "pandas-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:713f2f70abcdade1ddd68fc91577cb090b3544b07ceba78a12f799355a13ee44"}, - {file = "pandas-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf3f0c361a4270185baa89ec7ab92ecaa355fe783791457077473f974f654df5"}, - {file = "pandas-2.0.2-cp39-cp39-win32.whl", hash = "sha256:598e9020d85a8cdbaa1815eb325a91cfff2bb2b23c1442549b8a3668e36f0f77"}, - {file = "pandas-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:77550c8909ebc23e56a89f91b40ad01b50c42cfbfab49b3393694a50549295ea"}, - {file = "pandas-2.0.2.tar.gz", hash = "sha256:dd5476b6c3fe410ee95926873f377b856dbc4e81a9c605a0dc05aaccc6a7c6c6"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, + {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, + {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, + {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, + {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, + {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, + {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, + {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, + {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, + {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, + {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, + {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, + {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, + {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, + {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, + {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, + {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, + {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, ] [package.dependencies] @@ -1798,7 +1817,7 @@ pytz = ">=2020.1" tzdata = ">=2022.1" [package.extras] -all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] +all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] aws = ["s3fs (>=2021.08.0)"] clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] @@ -1817,7 +1836,7 @@ plot = ["matplotlib (>=3.6.1)"] postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] spss = ["pyreadstat (>=1.1.2)"] sql-other = ["SQLAlchemy (>=1.4.16)"] -test = ["hypothesis (>=6.34.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.6.3)"] [[package]] @@ -1988,47 +2007,47 @@ files = [ [[package]] name = "pydantic" -version = "1.10.9" +version = "1.10.11" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e692dec4a40bfb40ca530e07805b1208c1de071a18d26af4a2a0d79015b352ca"}, - {file = "pydantic-1.10.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3c52eb595db83e189419bf337b59154bdcca642ee4b2a09e5d7797e41ace783f"}, - {file = "pydantic-1.10.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:939328fd539b8d0edf244327398a667b6b140afd3bf7e347cf9813c736211896"}, - {file = "pydantic-1.10.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b48d3d634bca23b172f47f2335c617d3fcb4b3ba18481c96b7943a4c634f5c8d"}, - {file = "pydantic-1.10.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f0b7628fb8efe60fe66fd4adadd7ad2304014770cdc1f4934db41fe46cc8825f"}, - {file = "pydantic-1.10.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e1aa5c2410769ca28aa9a7841b80d9d9a1c5f223928ca8bec7e7c9a34d26b1d4"}, - {file = "pydantic-1.10.9-cp310-cp310-win_amd64.whl", hash = "sha256:eec39224b2b2e861259d6f3c8b6290d4e0fbdce147adb797484a42278a1a486f"}, - {file = "pydantic-1.10.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d111a21bbbfd85c17248130deac02bbd9b5e20b303338e0dbe0faa78330e37e0"}, - {file = "pydantic-1.10.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e9aec8627a1a6823fc62fb96480abe3eb10168fd0d859ee3d3b395105ae19a7"}, - {file = "pydantic-1.10.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07293ab08e7b4d3c9d7de4949a0ea571f11e4557d19ea24dd3ae0c524c0c334d"}, - {file = "pydantic-1.10.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee829b86ce984261d99ff2fd6e88f2230068d96c2a582f29583ed602ef3fc2c"}, - {file = "pydantic-1.10.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4b466a23009ff5cdd7076eb56aca537c745ca491293cc38e72bf1e0e00de5b91"}, - {file = "pydantic-1.10.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7847ca62e581e6088d9000f3c497267868ca2fa89432714e21a4fb33a04d52e8"}, - {file = "pydantic-1.10.9-cp311-cp311-win_amd64.whl", hash = "sha256:7845b31959468bc5b78d7b95ec52fe5be32b55d0d09983a877cca6aedc51068f"}, - {file = "pydantic-1.10.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:517a681919bf880ce1dac7e5bc0c3af1e58ba118fd774da2ffcd93c5f96eaece"}, - {file = "pydantic-1.10.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67195274fd27780f15c4c372f4ba9a5c02dad6d50647b917b6a92bf00b3d301a"}, - {file = "pydantic-1.10.9-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2196c06484da2b3fded1ab6dbe182bdabeb09f6318b7fdc412609ee2b564c49a"}, - {file = "pydantic-1.10.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6257bb45ad78abacda13f15bde5886efd6bf549dd71085e64b8dcf9919c38b60"}, - {file = "pydantic-1.10.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3283b574b01e8dbc982080d8287c968489d25329a463b29a90d4157de4f2baaf"}, - {file = "pydantic-1.10.9-cp37-cp37m-win_amd64.whl", hash = "sha256:5f8bbaf4013b9a50e8100333cc4e3fa2f81214033e05ac5aa44fa24a98670a29"}, - {file = "pydantic-1.10.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b9cd67fb763248cbe38f0593cd8611bfe4b8ad82acb3bdf2b0898c23415a1f82"}, - {file = "pydantic-1.10.9-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f50e1764ce9353be67267e7fd0da08349397c7db17a562ad036aa7c8f4adfdb6"}, - {file = "pydantic-1.10.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73ef93e5e1d3c8e83f1ff2e7fdd026d9e063c7e089394869a6e2985696693766"}, - {file = "pydantic-1.10.9-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:128d9453d92e6e81e881dd7e2484e08d8b164da5507f62d06ceecf84bf2e21d3"}, - {file = "pydantic-1.10.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ad428e92ab68798d9326bb3e5515bc927444a3d71a93b4a2ca02a8a5d795c572"}, - {file = "pydantic-1.10.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fab81a92f42d6d525dd47ced310b0c3e10c416bbfae5d59523e63ea22f82b31e"}, - {file = "pydantic-1.10.9-cp38-cp38-win_amd64.whl", hash = "sha256:963671eda0b6ba6926d8fc759e3e10335e1dc1b71ff2a43ed2efd6996634dafb"}, - {file = "pydantic-1.10.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:970b1bdc6243ef663ba5c7e36ac9ab1f2bfecb8ad297c9824b542d41a750b298"}, - {file = "pydantic-1.10.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7e1d5290044f620f80cf1c969c542a5468f3656de47b41aa78100c5baa2b8276"}, - {file = "pydantic-1.10.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83fcff3c7df7adff880622a98022626f4f6dbce6639a88a15a3ce0f96466cb60"}, - {file = "pydantic-1.10.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0da48717dc9495d3a8f215e0d012599db6b8092db02acac5e0d58a65248ec5bc"}, - {file = "pydantic-1.10.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0a2aabdc73c2a5960e87c3ffebca6ccde88665616d1fd6d3db3178ef427b267a"}, - {file = "pydantic-1.10.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9863b9420d99dfa9c064042304868e8ba08e89081428a1c471858aa2af6f57c4"}, - {file = "pydantic-1.10.9-cp39-cp39-win_amd64.whl", hash = "sha256:e7c9900b43ac14110efa977be3da28931ffc74c27e96ee89fbcaaf0b0fe338e1"}, - {file = "pydantic-1.10.9-py3-none-any.whl", hash = "sha256:6cafde02f6699ce4ff643417d1a9223716ec25e228ddc3b436fe7e2d25a1f305"}, - {file = "pydantic-1.10.9.tar.gz", hash = "sha256:95c70da2cd3b6ddf3b9645ecaa8d98f3d80c606624b6d245558d202cd23ea3be"}, + {file = "pydantic-1.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff44c5e89315b15ff1f7fdaf9853770b810936d6b01a7bcecaa227d2f8fe444f"}, + {file = "pydantic-1.10.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c098d4ab5e2d5b3984d3cb2527e2d6099d3de85630c8934efcfdc348a9760e"}, + {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16928fdc9cb273c6af00d9d5045434c39afba5f42325fb990add2c241402d151"}, + {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0588788a9a85f3e5e9ebca14211a496409cb3deca5b6971ff37c556d581854e7"}, + {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9baf78b31da2dc3d3f346ef18e58ec5f12f5aaa17ac517e2ffd026a92a87588"}, + {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:373c0840f5c2b5b1ccadd9286782852b901055998136287828731868027a724f"}, + {file = "pydantic-1.10.11-cp310-cp310-win_amd64.whl", hash = "sha256:c3339a46bbe6013ef7bdd2844679bfe500347ac5742cd4019a88312aa58a9847"}, + {file = "pydantic-1.10.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08a6c32e1c3809fbc49debb96bf833164f3438b3696abf0fbeceb417d123e6eb"}, + {file = "pydantic-1.10.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a451ccab49971af043ec4e0d207cbc8cbe53dbf148ef9f19599024076fe9c25b"}, + {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b02d24f7b2b365fed586ed73582c20f353a4c50e4be9ba2c57ab96f8091ddae"}, + {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f34739a89260dfa420aa3cbd069fbcc794b25bbe5c0a214f8fb29e363484b66"}, + {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e297897eb4bebde985f72a46a7552a7556a3dd11e7f76acda0c1093e3dbcf216"}, + {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d185819a7a059550ecb85d5134e7d40f2565f3dd94cfd870132c5f91a89cf58c"}, + {file = "pydantic-1.10.11-cp311-cp311-win_amd64.whl", hash = "sha256:4400015f15c9b464c9db2d5d951b6a780102cfa5870f2c036d37c23b56f7fc1b"}, + {file = "pydantic-1.10.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2417de68290434461a266271fc57274a138510dca19982336639484c73a07af6"}, + {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:331c031ba1554b974c98679bd0780d89670d6fd6f53f5d70b10bdc9addee1713"}, + {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8268a735a14c308923e8958363e3a3404f6834bb98c11f5ab43251a4e410170c"}, + {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:44e51ba599c3ef227e168424e220cd3e544288c57829520dc90ea9cb190c3248"}, + {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d7781f1d13b19700b7949c5a639c764a077cbbdd4322ed505b449d3ca8edcb36"}, + {file = "pydantic-1.10.11-cp37-cp37m-win_amd64.whl", hash = "sha256:7522a7666157aa22b812ce14c827574ddccc94f361237ca6ea8bb0d5c38f1629"}, + {file = "pydantic-1.10.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc64eab9b19cd794a380179ac0e6752335e9555d214cfcb755820333c0784cb3"}, + {file = "pydantic-1.10.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8dc77064471780262b6a68fe67e013298d130414d5aaf9b562c33987dbd2cf4f"}, + {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe429898f2c9dd209bd0632a606bddc06f8bce081bbd03d1c775a45886e2c1cb"}, + {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:192c608ad002a748e4a0bed2ddbcd98f9b56df50a7c24d9a931a8c5dd053bd3d"}, + {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ef55392ec4bb5721f4ded1096241e4b7151ba6d50a50a80a2526c854f42e6a2f"}, + {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e0bb6efe86281623abbeeb0be64eab740c865388ee934cd3e6a358784aca6e"}, + {file = "pydantic-1.10.11-cp38-cp38-win_amd64.whl", hash = "sha256:265a60da42f9f27e0b1014eab8acd3e53bd0bad5c5b4884e98a55f8f596b2c19"}, + {file = "pydantic-1.10.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:469adf96c8e2c2bbfa655fc7735a2a82f4c543d9fee97bd113a7fb509bf5e622"}, + {file = "pydantic-1.10.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e6cbfbd010b14c8a905a7b10f9fe090068d1744d46f9e0c021db28daeb8b6de1"}, + {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abade85268cc92dff86d6effcd917893130f0ff516f3d637f50dadc22ae93999"}, + {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9738b0f2e6c70f44ee0de53f2089d6002b10c33264abee07bdb5c7f03038303"}, + {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:787cf23e5a0cde753f2eabac1b2e73ae3844eb873fd1f5bdbff3048d8dbb7604"}, + {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:174899023337b9fc685ac8adaa7b047050616136ccd30e9070627c1aaab53a13"}, + {file = "pydantic-1.10.11-cp39-cp39-win_amd64.whl", hash = "sha256:1954f8778489a04b245a1e7b8b22a9d3ea8ef49337285693cf6959e4b757535e"}, + {file = "pydantic-1.10.11-py3-none-any.whl", hash = "sha256:008c5e266c8aada206d0627a011504e14268a62091450210eda7c07fabe6963e"}, + {file = "pydantic-1.10.11.tar.gz", hash = "sha256:f66d479cf7eb331372c470614be6511eae96f1f120344c25f3f9bb59fb1b5528"}, ] [package.dependencies] @@ -2107,42 +2126,6 @@ files = [ [package.extras] diagrams = ["jinja2", "railroad-diagrams"] -[[package]] -name = "pyrsistent" -version = "0.19.3" -description = "Persistent/Functional/Immutable data structures" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, - {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, - {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, - {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, - {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, - {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, - {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, - {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, - {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, - {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, - {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, - {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, - {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, - {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, -] - [[package]] name = "pyshex" version = "0.8.1" @@ -2226,13 +2209,13 @@ xml = ["lxml"] [[package]] name = "pytest" -version = "7.3.2" +version = "7.4.0" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.3.2-py3-none-any.whl", hash = "sha256:cdcbd012c9312258922f8cd3f1b62a6580fdced17db6014896053d47cddf9295"}, - {file = "pytest-7.3.2.tar.gz", hash = "sha256:ee990a3cc55ba808b80795a79944756f315c67c12b56abd3ac993a7b8c17030b"}, + {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, + {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, ] [package.dependencies] @@ -2372,27 +2355,24 @@ files = [ [[package]] name = "rdflib" -version = "6.2.0" +version = "6.3.2" description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information." optional = false -python-versions = ">=3.7" +python-versions = ">=3.7,<4.0" files = [ - {file = "rdflib-6.2.0-py3-none-any.whl", hash = "sha256:85c34a86dfc517a41e5f2425a41a0aceacc23983462b32e68610b9fad1383bca"}, - {file = "rdflib-6.2.0.tar.gz", hash = "sha256:62dc3c86d1712db0f55785baf8047f63731fa59b2682be03219cb89262065942"}, + {file = "rdflib-6.3.2-py3-none-any.whl", hash = "sha256:36b4e74a32aa1e4fa7b8719876fb192f19ecd45ff932ea5ebbd2e417a0247e63"}, + {file = "rdflib-6.3.2.tar.gz", hash = "sha256:72af591ff704f4caacea7ecc0c5a9056b8553e0489dd4f35a9bc52dbd41522e0"}, ] [package.dependencies] -isodate = "*" -pyparsing = "*" -setuptools = "*" +isodate = ">=0.6.0,<0.7.0" +pyparsing = ">=2.1.0,<4" [package.extras] -berkeleydb = ["berkeleydb"] -dev = ["black (==22.6.0)", "flake8", "flakeheaven", "isort", "mypy", "pep8-naming", "types-setuptools"] -docs = ["myst-parser", "sphinx (<6)", "sphinx-autodoc-typehints", "sphinxcontrib-apidoc", "sphinxcontrib-kroki"] -html = ["html5lib"] -networkx = ["networkx"] -tests = ["html5lib", "pytest", "pytest-cov"] +berkeleydb = ["berkeleydb (>=18.1.0,<19.0.0)"] +html = ["html5lib (>=1.0,<2.0)"] +lxml = ["lxml (>=4.3.0,<5.0.0)"] +networkx = ["networkx (>=2.0.0,<3.0.0)"] [[package]] name = "rdflib-jsonld" @@ -2423,6 +2403,21 @@ files = [ rdflib = ">=5.0.0" rdflib-jsonld = "0.6.1" +[[package]] +name = "referencing" +version = "0.29.1" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.29.1-py3-none-any.whl", hash = "sha256:d3c8f323ee1480095da44d55917cfb8278d73d6b4d5f677e3e40eb21314ac67f"}, + {file = "referencing-0.29.1.tar.gz", hash = "sha256:90cb53782d550ba28d2166ef3f55731f38397def8832baac5d45235f1995e35e"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + [[package]] name = "regex" version = "2023.6.3" @@ -2543,13 +2538,13 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "requests-cache" -version = "1.0.1" +version = "1.1.0" description = "A persistent cache for python requests" optional = false python-versions = ">=3.7,<4.0" files = [ - {file = "requests_cache-1.0.1-py3-none-any.whl", hash = "sha256:55c5765c26fd98a38c633d6e3931a507b7708cdd07c0afb48773d0718ac15969"}, - {file = "requests_cache-1.0.1.tar.gz", hash = "sha256:d42e6c2f11de54e6a134c9a00c5ca2a3c8edde3c3f2bdfd942586fafa8990e14"}, + {file = "requests_cache-1.1.0-py3-none-any.whl", hash = "sha256:178282bce704b912c59e7f88f367c42bddd6cde6bf511b2a3e3cfb7e5332a92a"}, + {file = "requests_cache-1.1.0.tar.gz", hash = "sha256:41b79166aa8e300cc4de982f7ab7c52af914a785160be1eda25c6e9265969a67"}, ] [package.dependencies] @@ -2563,7 +2558,7 @@ urllib3 = ">=1.25.5" [package.extras] all = ["boto3 (>=1.15)", "botocore (>=1.18)", "itsdangerous (>=2.0)", "pymongo (>=3)", "pyyaml (>=5.4)", "redis (>=3)", "ujson (>=5.4)"] bson = ["bson (>=0.5)"] -docs = ["furo (>=2022.12.7,<2023.0.0)", "linkify-it-py (>=2.0,<3.0)", "myst-parser (>=1.0,<2.0)", "sphinx (>=5.0.2,<6.0.0)", "sphinx-autodoc-typehints (>=1.19)", "sphinx-automodapi (>=0.14)", "sphinx-copybutton (>=0.5)", "sphinx-design (>=0.2)", "sphinx-notfound-page (>=0.8)", "sphinxcontrib-apidoc (>=0.3)", "sphinxext-opengraph (>=0.6)"] +docs = ["furo (>=2023.3,<2024.0)", "linkify-it-py (>=2.0,<3.0)", "myst-parser (>=1.0,<2.0)", "sphinx (>=5.0.2,<6.0.0)", "sphinx-autodoc-typehints (>=1.19)", "sphinx-automodapi (>=0.14)", "sphinx-copybutton (>=0.5)", "sphinx-design (>=0.2)", "sphinx-notfound-page (>=0.8)", "sphinxcontrib-apidoc (>=0.3)", "sphinxext-opengraph (>=0.6)"] dynamodb = ["boto3 (>=1.15)", "botocore (>=1.18)"] json = ["ujson (>=5.4)"] mongodb = ["pymongo (>=3)"] @@ -2610,6 +2605,76 @@ files = [ {file = "rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"}, ] +[[package]] +name = "rpds-py" +version = "0.8.6" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.8.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6f694c687ac5eab9bf05dcad872a9e96c83a1aac92b836bc036b59939c9fa013"}, + {file = "rpds_py-0.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23977f5f11ba6d1081b02d0f946025143a5559116f61157dba6a2c5ad5f05001"}, + {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe06d928b9f5f8b106c7b4c8c2fbd7d8f15abe9fa9eaf23963832996be659c3"}, + {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c0b6ae3716c55acdc33ab9849fa1ae8dd4b9639d2d7d1e9c77300afc8a83beb2"}, + {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8575e61ea0a5a7cf203d18cc18a5fdc5dd94ec697b1f7eaa0fa13e404f61dbe6"}, + {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f2f1ef0a5b9288a1856d753875aa0575c4028b91b079839ceb4f79f78f14959"}, + {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d9a0ff3aaff3e8c059d16aa32b9171985f1b5f91fee9537b730e1862cffc44"}, + {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4467c630b3713cc677287687c70263455e82ecf322145f3b53a5bebcac1c71a6"}, + {file = "rpds_py-0.8.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ae9fa5a0326ad08c4b5ff067389d644b34670265a0799c0a10f7d77f2c40fb12"}, + {file = "rpds_py-0.8.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6a562e82b0dd1a111eccd7c8ad29ac0aaeb1a6022e3c1b535460c754b2ad24cb"}, + {file = "rpds_py-0.8.6-cp310-none-win32.whl", hash = "sha256:9947b68eb57666d45474170b7ea443c7c952e6154eb0adac601345b0c6533530"}, + {file = "rpds_py-0.8.6-cp310-none-win_amd64.whl", hash = "sha256:5c0b7a5828359f96ae47a531dda99e3d4172ab75349469c77ed74963d87c37a2"}, + {file = "rpds_py-0.8.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:97eb2d09359a407eb6fe3522836f589e3c57b735d2853ccc950cb18eb1c92c85"}, + {file = "rpds_py-0.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:da05c93a110b03c7160d7c98b111d9c656cc6f8b566e6a1d74aa04e5e903fdb3"}, + {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5292c304ddecb07b9117d503988b5e20e4415bbb1898ed5c68533d0e6e9465a"}, + {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81ff7ef28959cea7cc18b16912e562a858c87b19fe8abd7b5bc46ef479fb2b91"}, + {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a02429b920f7657d98835aaaab595842f77028a82af86934a3ff1341484e088f"}, + {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8849e8f45385539fc7edebef06c220bdbbee24e9aeb34f108b9990ad872e3217"}, + {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e018a22e8ac42eff177768ad2c75ffe680feb417b18c8ea8261f369d3a4b4e2"}, + {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fdcd08742b66a781a2568468bef8eb13d71136787162d908e97294c5cc1a124e"}, + {file = "rpds_py-0.8.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:38a7ec83e29f323c1bf8a8ea2db9b83fc7d90079363b7441d4567c6d6d70ec74"}, + {file = "rpds_py-0.8.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0538a7e076d5e8190b05a92cd5d6db30ce85e3443468855048ed3af0c428270e"}, + {file = "rpds_py-0.8.6-cp311-none-win32.whl", hash = "sha256:d181aaac699b021e88ec547f826dfd2345af99b014469469e7c2d704e185924c"}, + {file = "rpds_py-0.8.6-cp311-none-win_amd64.whl", hash = "sha256:2c0ad16838db5d6b021d1304502e4939e43e1993d13a821cf987ed436575ecee"}, + {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1aa7450d64bf92a82caf9e6dbc547671808093681e60b111c730e03f034502a"}, + {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa5876a0ac38ba26a90621051b64cc8537d0feff344d88217c54c299a9067167"}, + {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c92caae452de2b6e51accad99b4f71b3d9815c8078dfd700671723ef47cbdc0"}, + {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e307cfc77711a9e7c26d42e69a28216c988b4dac569786db66c9bb359f13c81f"}, + {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f4646b35dbd8920a0ad0bb001183765f9a3896ad07f6662c045415b4305290"}, + {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f795a528e1fc33242ccfc2b84bd1f4f297bf4553a23ecd2919b5b43833f5d103"}, + {file = "rpds_py-0.8.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:35a41dc776f2ae9c9aac9cceabf7fb91aee38fcd064adbb7497e42cfd8b3971b"}, + {file = "rpds_py-0.8.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:596887468bdc2c7fa2aec909131ac480437409899d6ae930202f7e3b27144d65"}, + {file = "rpds_py-0.8.6-cp38-none-win32.whl", hash = "sha256:a1b08e42f19bddf77656b39be707ff8408ee8f2bf5b6fff058cfd0dda3dfb945"}, + {file = "rpds_py-0.8.6-cp38-none-win_amd64.whl", hash = "sha256:8da7cc6df70e0e8689678256d1cd380f2efa389e065d8b5403ed6901994c21b4"}, + {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1ad988b033d0fddca3c368ac40bb61b2947e05ae11eb825b48d3f8d50d12f75"}, + {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b29f058d9afb6bbbef4b7593b609e3fea7a735789aa06e04e2987ff7e4d490f"}, + {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0441111efe5e2bb34fd2dc1dac624d420d4d62aeb914bf6085569f607262a9"}, + {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:703110cfbe67fe084a61ecb280d14979f3d83a15895266fe038e976ab5ee668f"}, + {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:864803b4885900177feaa6471cf45d99b73e2267251640ca444386fd2a79056f"}, + {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ae05a9191e36c457c6144e5ae9b3e32af9f68ed35b6cfc15e60b01dca6bfb93f"}, + {file = "rpds_py-0.8.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:b216e3f3363c4dc30351bede88f67e9bb9b98e5753238b37d19ec905c074ffa7"}, + {file = "rpds_py-0.8.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:806fb171949d30189aac1b66f8c0e81ff43d86bcc2a99eae3bd963b94c5df050"}, + {file = "rpds_py-0.8.6-cp39-none-win32.whl", hash = "sha256:fbf1e2a2c078754ca11b05fc6d88baff005cca399d574f26997bebc1a6f2d505"}, + {file = "rpds_py-0.8.6-cp39-none-win_amd64.whl", hash = "sha256:653f5e3789348a872c3a4cefe4ce7199262338bb54a52a7602351f3d57846023"}, + {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d7254be53b4e099a0bfa2ca883f0ab6378e2b530e0408e7884c59e0a538f006"}, + {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ac1ebd98b0468d83e40e85fae662a4e70b2a1fd4012f51c58f9fc3d9a93bf70"}, + {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5810278ca062016edee00e07789af41a32d8b73bdda8d4eb527be2ac55d9e099"}, + {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:571b9c91e7a73f47368018b9eddca498eefe0cdcd520b81150545736b6c68263"}, + {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0723625ed5c6e99734a3fd526a58bbb11a9fbf935189bfa146089a227b112d8"}, + {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5d78dcdff2844365a0507dc12a9cfd72271a1eecc25a316e41fcc571a9702783"}, + {file = "rpds_py-0.8.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:924d5854f16d3dbb4de28ddb76fa426d4c345f940be6024891f70c15342ca500"}, + {file = "rpds_py-0.8.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:aca18c5a4db266b0809dfc95d55b8d1d48662ce540d44c93608b3ec5e639cc17"}, + {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544f56ac58969371a76dd7d7bef464f07be14f41635944186e48f7c61b02e4e8"}, + {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6069217b194d7e9548e67bf74bc9f9414e45269054574699b8d8d21dcbe32403"}, + {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00354bb3480cad06cb17937d6aeed02b212e233a01ec87045c8ceddb71447a46"}, + {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06974ed0a758c63d7133d3592d3316eafdea685a2a3e101886f1f4674ef17191"}, + {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcfc2c5b13f5c9ea702a295160707e210eebb2201be5d7769e795d27a4ff94f6"}, + {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9cf5833a4f5995ecfcad86298b7c87b2f532241f7455b94bde47548765f70519"}, + {file = "rpds_py-0.8.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2f76f136be5ccd8489e524e2c419b181c9144985eb42e39a8e727c4996468c84"}, + {file = "rpds_py-0.8.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5be49ea7bf05269bf262b1316962e257043351bb3d6a82f7c88c47f35b8a5096"}, + {file = "rpds_py-0.8.6.tar.gz", hash = "sha256:816e0f7587cc13ab08cdb2fa8ce5350923ac55d367e758a7e34e5b1c42d5dbd1"}, +] + [[package]] name = "ruamel-yaml" version = "0.17.32" @@ -2872,52 +2937,52 @@ pandas = ["pandas (>=1.3.5)"] [[package]] name = "sqlalchemy" -version = "2.0.16" +version = "2.0.18" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7641f6ed2682de84d77c4894cf2e43700f3cf7a729361d7f9cac98febf3d8614"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8d3cbdb2f07fb0e4b897dc1df39166735e194fb946f28f26f4c9f9801c8b24f7"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08a791c75d6154d46914d1e23bd81d9455f2950ec1de81f2723848c593d2c8b"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91eb8f89fcce8f709f8a4d65d265bc48a80264ee14c7c9e955f3222f19b4b39c"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fc1dae11bd5167f9eb53b3ccad24a79813004612141e76de21cf4c028dc30b34"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b2801f85c5c0293aa710f8aa5262c707a83c1c203962ae5a22b4d9095e71aa9d"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-win32.whl", hash = "sha256:c5e333b81fe10d14efebd4e9429b7bb865ed9463ca8bef07a7136dfa1fd4a37b"}, - {file = "SQLAlchemy-2.0.16-cp310-cp310-win_amd64.whl", hash = "sha256:f387b496a4c9474d8580195bb2660264a3f295a04d3a9d00f4fa15e9e597427e"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7be04dbe3470fe8dd332fdb48c979887c381ef6c635eddf2dec43d2766111be4"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f2938edc512dd1fa48653e14c1655ab46144d4450f0e6b33da7acd8ba77fbfd7"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5a2856e12cf5f54301ddf043bcbf0552561d61555e1bcf348b63f42b8e1eec2"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d320fde566b864adbc19abb40ecb80f4e25d6f084639969bb972d5cca16858"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e85e315725807c127ad8ba3d628fdb861cf9ebfb0e10c39a97c01e257cdd71b"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:63ea36c08792a7a8a08958bc806ecff6b491386feeaf14607c3d9d2d9325e67f"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-win32.whl", hash = "sha256:bdaf89dd82f4a0e1b8b5ffc9cdc0c9551be6175f7eee5af6a838e92ba2e57100"}, - {file = "SQLAlchemy-2.0.16-cp311-cp311-win_amd64.whl", hash = "sha256:5a934eff1a2882137be3384826f997db8441d43b61fda3094923e69fffe474be"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fbcc51fdbc89fafe4f4fe66f59372a8be88ded04de34ef438ab04f980beb12d4"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff6496ad5e9dc8baeb93a151cc2f599d01e5f8928a2aaf0b09a06428fdbaf553"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d6ef848e5afcd1bda3e9a843751f845c0ca888b61e669237680e913d84ec206"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3ef876615ff4b53e2033022195830ec4941a6e21068611f8d77de60203b90a98"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8544c6e62eacb77d5106e2055ef10f2407fc0dbd547e879f8745b2032eefd2bc"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-win32.whl", hash = "sha256:2f3b6c31b915159b96b68372212fa77f69230b0a32acab40cf539d2823954f5a"}, - {file = "SQLAlchemy-2.0.16-cp37-cp37m-win_amd64.whl", hash = "sha256:d0c96592f54edd571e00ba6b1ed5df8263328ca1da9e78088c0ebc93c2e6562c"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a2e9f50a906d0b81292576a9fb458f8cace904c81a67088f4a2ca9ff2856f55d"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dc97238fa44be86971270943a0c21c19ce18b8d1596919048e57912e8abc02cc"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0db6734cb5644c55d0262a813b764c6e2cda1e66e939a488b3d6298cdc7344c2"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:131f0c894c6572cb1bdcf97c92d999d3128c4ff1ca13061296057072f61afe13"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f662cf69484c59f8a3435902c40dfc34d86050bdb15e23d437074ce9f153306b"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b72f4e4def50414164a1d899f2ce4e782a029fad0ed5585981d1611e8ae29a74"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-win32.whl", hash = "sha256:0e4645b260cfe375a0603aa117f0a47680864cf37833129da870919e88b08d8f"}, - {file = "SQLAlchemy-2.0.16-cp38-cp38-win_amd64.whl", hash = "sha256:f409f35a0330ab0cb18ece736b86d8b8233c64f4461fcb10993f67afc0ac7e5a"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e19546924f0cf2ec930d1faf318b7365e5827276410a513340f31a2b423e96a4"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ce1fc3f64fd42d5f763d6b83651471f32920338a1ba107a3186211474861af57"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e2569dac4e3cb85365b91ab569d06a221e0e17e65ce59949d00c3958946282b"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61f2035dea56ff1a429077e481496f813378beb02b823d2e3e7eb05bc1a7a8ca"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:81d867c1be5abd49f7e547c108391f371a9d980ba7ec34666c50d683f782b754"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2de1477af7f48c633b8ecb88245aedd811dca88e88aee9e9d787b388abe74c44"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-win32.whl", hash = "sha256:5e8522b49e0e640287308b68f71cc338446bbe1c226c8f81743baa91b0246e92"}, - {file = "SQLAlchemy-2.0.16-cp39-cp39-win_amd64.whl", hash = "sha256:43e69c8c1cea0188b7094e22fb93ae1a1890aac748628b7e925024a206f75368"}, - {file = "SQLAlchemy-2.0.16-py3-none-any.whl", hash = "sha256:53081c6fce0d49bb36d05f12dc87e008c9b0df58a163b792c5fc4ac638925f98"}, - {file = "SQLAlchemy-2.0.16.tar.gz", hash = "sha256:1e2caba78e7d1f5003e88817b7a1754d4e58f4a8f956dc423bf8e304c568ab09"}, + {file = "SQLAlchemy-2.0.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7ddd6d35c598af872f9a0a5bce7f7c4a1841684a72dab3302e3df7f17d1b5249"}, + {file = "SQLAlchemy-2.0.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:00aa050faf24ce5f2af643e2b86822fa1d7149649995f11bc1e769bbfbf9010b"}, + {file = "SQLAlchemy-2.0.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b52c6741073de5a744d27329f9803938dcad5c9fee7e61690c705f72973f4175"}, + {file = "SQLAlchemy-2.0.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db97eabd440327c35b751d5ebf78a107f505586485159bcc87660da8bb1fdca"}, + {file = "SQLAlchemy-2.0.18-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:589aba9a35869695b319ed76c6f673d896cd01a7ff78054be1596df7ad9b096f"}, + {file = "SQLAlchemy-2.0.18-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9da4ee8f711e077633730955c8f3cd2485c9abf5ea0f80aac23221a3224b9a8c"}, + {file = "SQLAlchemy-2.0.18-cp310-cp310-win32.whl", hash = "sha256:5dd574a37be388512c72fe0d7318cb8e31743a9b2699847a025e0c08c5bf579d"}, + {file = "SQLAlchemy-2.0.18-cp310-cp310-win_amd64.whl", hash = "sha256:6852cd34d96835e4c9091c1e6087325efb5b607b75fd9f7075616197d1c4688a"}, + {file = "SQLAlchemy-2.0.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10e001a84f820fea2640e4500e12322b03afc31d8f4f6b813b44813b2a7c7e0d"}, + {file = "SQLAlchemy-2.0.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bffd6cd47c2e68970039c0d3e355c9ed761d3ca727b204e63cd294cad0e3df90"}, + {file = "SQLAlchemy-2.0.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b7b3ebfa9416c8eafaffa65216e229480c495e305a06ba176dcac32710744e6"}, + {file = "SQLAlchemy-2.0.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79228a7b90d95957354f37b9d46f2cc8926262ae17b0d3ed8f36c892f2a37e06"}, + {file = "SQLAlchemy-2.0.18-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ba633b51835036ff0f402c21f3ff567c565a22ff0a5732b060a68f4660e2a38f"}, + {file = "SQLAlchemy-2.0.18-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8da677135eff43502b7afab5a1e641edfb2dc734ba7fc146e9b1b86817a728e2"}, + {file = "SQLAlchemy-2.0.18-cp311-cp311-win32.whl", hash = "sha256:82edf3a6090554a83942cec79151d6b5eb96e63d143e80e4cf6671e5d772f6be"}, + {file = "SQLAlchemy-2.0.18-cp311-cp311-win_amd64.whl", hash = "sha256:69ae0e9509c43474e33152abe1385b8954922544616426bf793481e1a37e094f"}, + {file = "SQLAlchemy-2.0.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:09397a18733fa2a4c7680b746094f980060666ee549deafdb5e102a99ce4619b"}, + {file = "SQLAlchemy-2.0.18-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45b07470571bda5ee7f5ec471271bbde97267cc8403fce05e280c36ea73f4754"}, + {file = "SQLAlchemy-2.0.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1aac42a21a7fa6c9665392c840b295962992ddf40aecf0a88073bc5c76728117"}, + {file = "SQLAlchemy-2.0.18-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:da46beef0ce882546d92b7b2e8deb9e04dbb8fec72945a8eb28b347ca46bc15a"}, + {file = "SQLAlchemy-2.0.18-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a6f1d8256d06f58e6ece150fbe05c63c7f9510df99ee8ac37423f5476a2cebb4"}, + {file = "SQLAlchemy-2.0.18-cp37-cp37m-win32.whl", hash = "sha256:67fbb40db3985c0cfb942fe8853ad94a5e9702d2987dec03abadc2f3b6a24afb"}, + {file = "SQLAlchemy-2.0.18-cp37-cp37m-win_amd64.whl", hash = "sha256:afb322ca05e2603deedbcd2e9910f11a3fd2f42bdeafe63018e5641945c7491c"}, + {file = "SQLAlchemy-2.0.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:908c850b98cac1e203ababd4ba76868d19ae0d7172cdc75d3f1b7829b16837d2"}, + {file = "SQLAlchemy-2.0.18-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10514adc41fc8f5922728fbac13d401a1aefcf037f009e64ca3b92464e33bf0e"}, + {file = "SQLAlchemy-2.0.18-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b791577c546b6bbd7b43953565fcb0a2fec63643ad605353dd48afbc3c48317"}, + {file = "SQLAlchemy-2.0.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:420bc6d06d4ae7fb6921524334689eebcbea7bf2005efef070a8562cc9527a37"}, + {file = "SQLAlchemy-2.0.18-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ebdd2418ab4e2e26d572d9a1c03877f8514a9b7436729525aa571862507b3fea"}, + {file = "SQLAlchemy-2.0.18-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:556dc18e39b6edb76239acfd1c010e37395a54c7fde8c57481c15819a3ffb13e"}, + {file = "SQLAlchemy-2.0.18-cp38-cp38-win32.whl", hash = "sha256:7b8cba5a25e95041e3413d91f9e50616bcfaec95afa038ce7dc02efefe576745"}, + {file = "SQLAlchemy-2.0.18-cp38-cp38-win_amd64.whl", hash = "sha256:0f7fdcce52cd882b559a57b484efc92e108efeeee89fab6b623aba1ac68aad2e"}, + {file = "SQLAlchemy-2.0.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d7a2c1e711ce59ac9d0bba780318bcd102d2958bb423209f24c6354d8c4da930"}, + {file = "SQLAlchemy-2.0.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5c95e3e7cc6285bf7ff263eabb0d3bfe3def9a1ff98124083d45e5ece72f4579"}, + {file = "SQLAlchemy-2.0.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc44e50f9d5e96af1a561faa36863f9191f27364a4df3eb70bca66e9370480b6"}, + {file = "SQLAlchemy-2.0.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfa1a0f83bdf8061db8d17c2029454722043f1e4dd1b3d3d3120d1b54e75825a"}, + {file = "SQLAlchemy-2.0.18-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:194f2d5a7cb3739875c4d25b3fe288ab0b3dc33f7c857ba2845830c8c51170a0"}, + {file = "SQLAlchemy-2.0.18-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ebc542d2289c0b016d6945fd07a7e2e23f4abc41e731ac8ad18a9e0c2fd0ec2"}, + {file = "SQLAlchemy-2.0.18-cp39-cp39-win32.whl", hash = "sha256:774bd401e7993452ba0596e741c0c4d6d22f882dd2a798993859181dbffadc62"}, + {file = "SQLAlchemy-2.0.18-cp39-cp39-win_amd64.whl", hash = "sha256:2756485f49e7df5c2208bdc64263d19d23eba70666f14ad12d6d8278a2fff65f"}, + {file = "SQLAlchemy-2.0.18-py3-none-any.whl", hash = "sha256:6c5bae4c288bda92a7550fe8de9e068c0a7cd56b1c5d888aae5b40f0e13b40bd"}, + {file = "SQLAlchemy-2.0.18.tar.gz", hash = "sha256:1fb792051db66e09c200e7bc3bda3b1eb18a5b8eb153d2cedb2b14b56a68b8cb"}, ] [package.dependencies] @@ -3056,13 +3121,13 @@ telegram = ["requests"] [[package]] name = "typing-extensions" -version = "4.6.3" +version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, - {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, ] [[package]] @@ -3293,4 +3358,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "fa1710aad106c1f650054816d540e55773bc44f5dee6b4590150b40c6d051005" +content-hash = "84ee661f3bf6c42ee507498df3a7ac8893389ed66024beb8b45d4259ffe64bea" diff --git a/pyproject.toml b/pyproject.toml index 78b6c82..0910c1b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ python = "^3.9" pandas = "^2.0.2" pandasaurus = "0.2.3" anndata = "^0.9.1" +rdflib = "^6.3.2" [tool.poetry.group.dev.dependencies] pytest = "^7.3.1" From 8c3ef0e3021226f0a4fb2585c1ce0c9ff5667da3 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 14 Jul 2023 14:00:51 +0100 Subject: [PATCH 02/27] Refactored anndata_enricher.py --- pandasaurus_cxg/anndata_enricher.py | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/pandasaurus_cxg/anndata_enricher.py b/pandasaurus_cxg/anndata_enricher.py index c4a0570..b6bed6f 100644 --- a/pandasaurus_cxg/anndata_enricher.py +++ b/pandasaurus_cxg/anndata_enricher.py @@ -18,9 +18,9 @@ def __init__( anndata: AnnData, cell_type_field: Optional[str] = "cell_type_ontology_term_id", context_field: Optional[str] = "tissue_ontology_term_id", - ontology_list_for_slims: Optional[List[str]] = ["Cell Ontology"], + ontology_list_for_slims: Optional[List[str]] = None, ): - """Initialize the AnndataEnricher instance. + """Initialize the AnndataEnricher instance with AnnData object. Args: @@ -33,8 +33,9 @@ def __init__( The slim list is used in minimal_slim_enrichment and full_slim_enrichment. Defaults to "Cell Ontology" """ + if ontology_list_for_slims is None: + ontology_list_for_slims = ["Cell Ontology"] # TODO Do we need to keep whole anndata? Would it be enough to keep the obs only? - # file_path: The path to the file containing the anndata object. self._anndata = anndata self.__seed_list = self._anndata.obs[cell_type_field].unique().tolist() self.__enricher = Query(self.__seed_list) @@ -55,8 +56,23 @@ def from_file_path( file_path: str, cell_type_field: Optional[str] = "cell_type_ontology_term_id", context_field: Optional[str] = "tissue_ontology_term_id", - ontology_list_for_slims: Optional[List[str]] = ["Cell Ontology"], + ontology_list_for_slims: Optional[List[str]] = None, ): + """Initialize the AnndataEnricher instance with file path. + + Args: + + file_path: The path to the file containing the anndata object. + cell_type_field: The cell type information in the anndata object. + Defaults to "cell_type_ontology_term_id". + context_field: The context information in the anndata object. + Defaults to "tissue_ontology_term_id". + ontology_list_for_slims: The ontology list for generating the slim list. + The slim list is used in minimal_slim_enrichment and full_slim_enrichment. + Defaults to "Cell Ontology" + """ + if ontology_list_for_slims is None: + ontology_list_for_slims = ["Cell Ontology"] return AnndataEnricher( AnndataLoader.load_from_file(file_path), cell_type_field, @@ -152,3 +168,6 @@ def validate_slim_list(self, slim_list): def get_seed_list(self): return self.__seed_list + + def get_anndata(self): + return self._anndata From 735c33f06eba8543f4dc99b0eea8e03ccdc179d4 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 14 Jul 2023 14:02:03 +0100 Subject: [PATCH 03/27] Added docstring to _assign_predicate and refactored _remove_duplicates --- pandasaurus_cxg/anndata_analyzer.py | 36 ++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/pandasaurus_cxg/anndata_analyzer.py b/pandasaurus_cxg/anndata_analyzer.py index 1961c7a..19c5824 100644 --- a/pandasaurus_cxg/anndata_analyzer.py +++ b/pandasaurus_cxg/anndata_analyzer.py @@ -97,22 +97,46 @@ def co_annotation_report(self): @staticmethod def _remove_duplicates(data: List[List[str]]): + # TODO do a clean up if it is necessary unique_data = [] unique_set = set() for sublist in data: if Predicate.SUPERCLUSTER_OF.value in sublist: continue - sorted_sublist = tuple(sorted(set(sublist))) - if sorted_sublist not in unique_set: - unique_data.append(sublist) - unique_set.add(sorted_sublist) + unique_data.append(sublist) + # sorted_sublist = tuple(sorted(set(sublist))) + # if sorted_sublist not in unique_set: + # unique_data.append(sublist) + # unique_set.add(sorted_sublist) return unique_data @staticmethod def _assign_predicate( - row, field_name_1, field_name_2, field_name_1_dict, field_name_2_dict, debug - ): + row: dict, + field_name_1: str, + field_name_2: str, + field_name_1_dict: dict, + field_name_2_dict: dict, + debug: bool, + ) -> str: + """ + Assigns a predicate based on the values of two fields in a row and dictionaries of field values. + + Used to determine if a cluster matches with the other cluster, or if it is its subclass, or if they overlap with each other. + + Args: + row (dict): The row containing the fields. + field_name_1 (str): The name of the first field. + field_name_2 (str): The name of the second field. + field_name_1_dict (dict): A dictionary mapping field_name_1 values to associated values. + field_name_2_dict (dict): A dictionary mapping field_name_2 values to associated values. + debug (bool): Whether to print debugging information. + + Returns: + str: The assigned predicate. + + """ if debug: print("Debugging row:", row) print("Value of field_name_1:", row[field_name_1]) From 14f1b9fcdf95ae05d8c15eeca42a256278358cfa Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 14 Jul 2023 14:02:39 +0100 Subject: [PATCH 04/27] Implemented missing methods in graph_generator.py --- .../graph_generator/graph_generator.py | 175 ++++++++++++++---- 1 file changed, 144 insertions(+), 31 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 0e96e0f..3ff9420 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -1,60 +1,173 @@ -from typing import List, Optional +from enum import Enum +from typing import List, Dict, Optional import uuid +import networkx as nx +import matplotlib.pyplot as plt import pandas as pd +from rdflib import Graph, Literal, Namespace, RDF, RDFS, URIRef +from rdflib.extras.external_graph_libs import rdflib_to_networkx_multidigraph + +from pandasaurus_cxg.anndata_enricher import AnndataEnricher +from pandasaurus_cxg.utils.exceptions import InvalidGraphFormat, MissingEnrichmentProcess class GraphGenerator: - def __init__(self, dataframe: pd.DataFrame, keys: Optional[List[str]] = None): + def __init__( + self, + co_annotation_report: pd.DataFrame, + enricher: AnndataEnricher, + keys: Optional[List[str]] = None, + ): """ Initializes GraphGenerator instance. Args: - dataframe (pd.DataFrame): The input DataFrame. + co_annotation_report (pd.DataFrame): The input DataFrame to generate rdf graph. + Co-annotation report output. + enricher (AnndataEnricher): Anndata enricher instance. keys (Optional[List[str]]): List of column names to select from the DataFrame. Defaults to None. """ - self.df = dataframe[keys] if keys else dataframe + self.df = co_annotation_report[keys] if keys else co_annotation_report + if enricher.enriched_df.empty: + # TODO or we can just call simple_enrichment method + enrichment_methods = [i for i in dir(AnndataEnricher) if "_enrichment" in i] + enrichment_methods.sort() + raise MissingEnrichmentProcess(enrichment_methods) + else: + self.enriched_df = enricher.enriched_df + self.cell_type_dict = ( + enricher.get_anndata() + .obs[["cell_type_ontology_term_id", "cell_type"]] + .drop_duplicates() + .set_index("cell_type_ontology_term_id")["cell_type"] + .to_dict() + ) + self.ns = Namespace("http://example.org/") + self.graph = Graph() def generate_rdf_graph(self): + """ + Generates rdf graph using co_annotation report + + Returns: + + """ + if len(self.graph) != 0: + return # preprocess column_group = ["field_name1", "value1"] df = self.df.sort_values(by=column_group).reset_index(drop=True) - grouped_df = df[df["predicate"] == "cluster_matches"].groupby(column_group) - # grouped_dict_uuid = { - # str(uuid.uuid4()): { - # **{ - # inner_list[0][0]: inner_list[0][1], - # inner_list[0][3]: inner_list[0][4], - # }, - # outer_key1: outer_key2, - # } - # for (outer_key1, outer_key2), inner_dict in grouped_df - # for inner_list in [inner_dict.values.tolist()] - # } + grouped_df = df.groupby(column_group) grouped_dict_uuid = {} - for (outer_key1, outer_key2), inner_dict in grouped_df: - uuid_key = str(uuid.uuid4()) - for inner_list in inner_dict.values.tolist(): - inner_dict_uuid = { - inner_list[0]: inner_list[1], - inner_list[3]: inner_list[4], - } - - if uuid_key in grouped_dict_uuid: - grouped_dict_uuid[uuid_key].append(inner_dict_uuid) + for (_, _), inner_dict in grouped_df: + temp_dict = {} + for inner_list in list(inner_dict.values.tolist()): + if inner_list[2] == "cluster_matches": + inner_dict_uuid = { + inner_list[0]: inner_list[1], + inner_list[3]: inner_list[4], + } + elif inner_list[2] == "subcluster_of": + inner_dict_uuid = { + inner_list[0]: inner_list[1], + "subcluster_of": { + inner_list[3]: inner_list[4], + }, + } else: - grouped_dict_uuid[uuid_key] = [inner_dict_uuid] + inner_dict_uuid = { + inner_list[0]: inner_list[1], + } + + for key, value in inner_dict_uuid.items(): + if key not in temp_dict.keys(): + temp_dict.update({key: value}) + elif key == "subcluster_of": + temp_dict.get("subcluster_of").update(value) + + if temp_dict not in grouped_dict_uuid.values(): + grouped_dict_uuid[str(uuid.uuid4())] = temp_dict # generate a resource for each free-text cell_type annotation and cell_type_ontology_term annotation + cell_set_class = self.ns["CellSet"] + self.graph.add((cell_set_class, RDF.type, RDFS.Class)) + for _uuid, inner_dict in grouped_dict_uuid.items(): + resource = self.ns[_uuid] + self.graph.add((resource, RDF.type, cell_set_class)) + for k, v in inner_dict.items(): + if k == "subcluster_of": + continue + self.graph.add((resource, self.ns[k], Literal(v))) # add relationship between each resource based on their predicate in the co_annotation_report + for _uuid, inner_dict in grouped_dict_uuid.items(): + resource = URIRef(self.ns + _uuid) + subcluster = self.ns["subcluster_of"] + for ik, iv in inner_dict.get("subcluster_of", {}).items(): + predicate = URIRef(self.ns + ik) + for s, _, _ in self.graph.triples((None, predicate, Literal(iv))): + self.graph.add((resource, subcluster, s)) + + def enrich_rdf_graph(self): + """ + Enrich RDF graph with enriched DataFrame from AnndataEnricher + + Returns: - pass + """ + # add cell_type nodes and consists_of relations + cl_namespace = Namespace("http://purl.obolibrary.org/obo/CL_") + for curie, label in self.cell_type_dict.items(): + resource = cl_namespace[curie.split(":")[-1]] + self.graph.add((resource, RDFS.label, Literal(label))) + for s, _, _ in self.graph.triples((None, self.ns["cell_type"], Literal(label))): + self.graph.add((s, self.ns["consists_of"], resource)) + # add subClassOf between terms in CL enrichment + for _, row in self.enriched_df.iterrows(): + for s, _, _ in self.graph.triples((None, RDFS.label, Literal(row["s_label"]))): + for o, _, _ in self.graph.triples((None, RDFS.label, Literal(row["o_label"]))): + self.graph.add((s, RDFS.subClassOf, o)) + + def save_rdf_graph(self, file_name: str = "mygraph", _format: str = "xml"): + """ + Serializes and saves the RDF graph to a file. + + Args: + file_name (str, optional): The name of the output file without the extension. + Defaults to "mygraph". + _format (str, optional): The format of the RDF serialization. Defaults to "xml". - def save_rdf_graph(self): - pass + Raises: + InvalidGraphFormat: If the provided _format is not valid. + + """ + format_extension = { + RDFFormat.RDF_XML.value: "owl", + RDFFormat.TURTLE.value: "ttl", + RDFFormat.NTRIPLES.value: "nt", + } + + if _format in format_extension: + file_extension = format_extension[_format] + self.graph.serialize(f"{file_name}.{file_extension}", format=_format) + else: + valid_formats = [valid_format.value for valid_format in RDFFormat] + raise InvalidGraphFormat(RDFFormat, valid_formats) def visualize_rdf_graph(self): - pass + nx_graph = rdflib_to_networkx_multidigraph(self.graph) + # Plot Networkx instance of RDF Graph + pos = nx.spring_layout(nx_graph, scale=2, k=2) + edge_labels = nx.get_edge_attributes(nx_graph, "r") + nx.draw_networkx_edge_labels(nx_graph, pos, edge_labels=edge_labels) + nx.draw(nx_graph, with_labels=True) + plt.show() + + +class RDFFormat(Enum): + RDF_XML = "xml" + TURTLE = "ttl" + NTRIPLES = "nt" From 74104823490126ccb13aa1f0ed9648a84d9cae94 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 14 Jul 2023 14:03:15 +0100 Subject: [PATCH 05/27] Added InvalidGraphFormat and MissingEnrichmentProcess exceptions --- pandasaurus_cxg/utils/exceptions.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pandasaurus_cxg/utils/exceptions.py b/pandasaurus_cxg/utils/exceptions.py index d99ee23..41fd239 100644 --- a/pandasaurus_cxg/utils/exceptions.py +++ b/pandasaurus_cxg/utils/exceptions.py @@ -9,3 +9,22 @@ def __init__(self, invalid_slim_list: List[str], valid_slim_list: list[dict[str, f"{', '.join([slim.get('name') for slim in valid_slim_list])}." ) super().__init__(self.message) + + +class InvalidGraphFormat(Exception): + def __int__(self, _format: str, valid_formats: List[str]): + self.message = ( + f"Graph format, {_format}, provided for save_rdf_graph is invalid. " + f"Please use one of {', '.join(valid_formats)}" + ) + super().__init__(self.message) + + +class MissingEnrichmentProcess(Exception): + def __init__(self, enrichment_methods: List[str]): + self.message = ( + f"Any of the following enrichment methods from AnndataEnricher must be used before " + f"using enriched_rdf_graph method: " + f"{', '.join(enrichment_methods)}" + ) + super().__init__(self.message) From 607c9b2f0cd19046b71d5e27e5002f8d71b12349 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 14 Jul 2023 14:05:28 +0100 Subject: [PATCH 06/27] Updated .gitignore --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index b6e4761..17d525c 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,8 @@ dmypy.json # Pyre type checker .pyre/ + +# Ontology files +*.owl +*.ttl +*.nt From aca0f73ad4ebddaeff4be9bca1221da82e3a11ba Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Tue, 18 Jul 2023 17:00:52 +0100 Subject: [PATCH 07/27] Added CellType to nodes that represent CL terms --- pandasaurus_cxg/graph_generator/graph_generator.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 3ff9420..6f595d7 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -1,5 +1,5 @@ from enum import Enum -from typing import List, Dict, Optional +from typing import List, Optional import uuid import networkx as nx @@ -64,7 +64,7 @@ def generate_rdf_graph(self): grouped_dict_uuid = {} for (_, _), inner_dict in grouped_df: temp_dict = {} - for inner_list in list(inner_dict.values.tolist()): + for inner_list in inner_dict.values.tolist(): if inner_list[2] == "cluster_matches": inner_dict_uuid = { inner_list[0]: inner_list[1], @@ -123,6 +123,7 @@ def enrich_rdf_graph(self): for curie, label in self.cell_type_dict.items(): resource = cl_namespace[curie.split(":")[-1]] self.graph.add((resource, RDFS.label, Literal(label))) + self.graph.add((resource, RDF.type, self.ns["CellType"])) for s, _, _ in self.graph.triples((None, self.ns["cell_type"], Literal(label))): self.graph.add((s, self.ns["consists_of"], resource)) # add subClassOf between terms in CL enrichment From 9438edcaaecd3b9751ff6c8910767a769d8985e5 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 21 Jul 2023 15:15:34 +0100 Subject: [PATCH 08/27] Added pygraphviz dependency --- poetry.lock | 690 ++++++++++++++++++++++++++----------------------- pyproject.toml | 6 + 2 files changed, 373 insertions(+), 323 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1d158f2..f6aa8da 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "airium" @@ -123,13 +123,13 @@ lxml = ["lxml"] [[package]] name = "bioregistry" -version = "0.9.67" +version = "0.9.81" description = "Integrated registry of biological databases and nomenclatures" optional = false python-versions = ">=3.8" files = [ - {file = "bioregistry-0.9.67-py3-none-any.whl", hash = "sha256:fbe8191ef9ca57603d1f48cb87744d2c5e4d833aa2d058a128f4cd9a66809a6c"}, - {file = "bioregistry-0.9.67.tar.gz", hash = "sha256:afd318daa5e40c1bc2932a6ff84efa85397f742d7a7f9d78075840002b6a6053"}, + {file = "bioregistry-0.9.81-py3-none-any.whl", hash = "sha256:7b531cd02545e6937425c0ad6aa2b2f367c33868f2fee009cd3cc7c568592620"}, + {file = "bioregistry-0.9.81.tar.gz", hash = "sha256:8528fb043217e0b077f22c41b0a81ae38da4dde34f0f42a15b66c13885a55a70"}, ] [package.dependencies] @@ -153,36 +153,33 @@ web = ["bootstrap-flask (<=2.0.0)", "curies[fastapi]", "fastapi", "flask (<2.2.4 [[package]] name = "black" -version = "23.3.0" +version = "23.7.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, - {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, - {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, - {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, - {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, - {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, - {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, - {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, - {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, - {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, - {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, - {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, - {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, - {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, - {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, - {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, - {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, - {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f"}, + {file = "black-23.7.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be"}, + {file = "black-23.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc"}, + {file = "black-23.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd"}, + {file = "black-23.7.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a"}, + {file = "black-23.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926"}, + {file = "black-23.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3"}, + {file = "black-23.7.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6"}, + {file = "black-23.7.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a"}, + {file = "black-23.7.0-cp38-cp38-win_amd64.whl", hash = "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3"}, + {file = "black-23.7.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087"}, + {file = "black-23.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91"}, + {file = "black-23.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491"}, + {file = "black-23.7.0-py3-none-any.whl", hash = "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96"}, + {file = "black-23.7.0.tar.gz", hash = "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb"}, ] [package.dependencies] @@ -262,86 +259,86 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.1.0" +version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, - {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, - {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, - {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, - {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, - {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, - {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, ] [[package]] @@ -372,13 +369,13 @@ torch-geometric = ["torch", "torch-geometric", "torch-sparse"] [[package]] name = "click" -version = "8.1.3" +version = "8.1.6" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, - {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, + {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, ] [package.dependencies] @@ -895,13 +892,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.7.0" +version = "6.8.0" description = "Read metadata from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, - {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, + {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, + {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, ] [package.dependencies] @@ -910,7 +907,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "iniconfig" @@ -987,12 +984,12 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jsbeautifier" -version = "1.14.8" +version = "1.14.9" description = "JavaScript unobfuscator and beautifier." optional = false python-versions = "*" files = [ - {file = "jsbeautifier-1.14.8.tar.gz", hash = "sha256:d4c4e263a42dd6194afb9dbe54710be3c5604492cbec3e89c92dd98513f98b9f"}, + {file = "jsbeautifier-1.14.9.tar.gz", hash = "sha256:c738ebc36b47bd94e4ca6dd17a9004c3cc74edad582ca1d60e0e5d5945a63cb9"}, ] [package.dependencies] @@ -1081,13 +1078,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.18.0" +version = "4.18.4" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.18.0-py3-none-any.whl", hash = "sha256:b508dd6142bd03f4c3670534c80af68cd7bbff9ea830b9cf2625d4a3c49ddf60"}, - {file = "jsonschema-4.18.0.tar.gz", hash = "sha256:8caf5b57a990a98e9b39832ef3cb35c176fe331414252b6e1b26fd5866f891a4"}, + {file = "jsonschema-4.18.4-py3-none-any.whl", hash = "sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe"}, + {file = "jsonschema-4.18.4.tar.gz", hash = "sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d"}, ] [package.dependencies] @@ -1110,13 +1107,13 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.6.1" +version = "2023.7.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.6.1-py3-none-any.whl", hash = "sha256:3d2b82663aff01815f744bb5c7887e2121a63399b49b104a3c96145474d091d7"}, - {file = "jsonschema_specifications-2023.6.1.tar.gz", hash = "sha256:ca1c4dd059a9e7b34101cf5b3ab7ff1d18b139f35950d598d629837ef66e8f28"}, + {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, + {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, ] [package.dependencies] @@ -1155,17 +1152,18 @@ linkml-runtime = ">=1.1.24" [[package]] name = "lark" -version = "1.1.5" +version = "1.1.7" description = "a modern parsing library" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "lark-1.1.5-py3-none-any.whl", hash = "sha256:8476f9903e93fbde4f6c327f74d79e9b4bd0ed9294c5dfa3164ab8c581b5de2a"}, - {file = "lark-1.1.5.tar.gz", hash = "sha256:4b534eae1f9af5b4ea000bea95776350befe1981658eea3820a01c37e504bb4d"}, + {file = "lark-1.1.7-py3-none-any.whl", hash = "sha256:9e5dc5bbf93fa1840083707285262514a0ef8a6613874af7ea1cec60468d6e92"}, + {file = "lark-1.1.7.tar.gz", hash = "sha256:be7437bf1f37ab08b355f29ff2571d77d777113d0a8c4352b0c513dced6c5a1e"}, ] [package.extras] atomic-cache = ["atomicwrites"] +interegular = ["interegular (>=0.3.1,<0.4.0)"] nearley = ["js2py"] regex = ["regex"] @@ -1245,13 +1243,13 @@ docs = ["myst-parser[docs] (>=0.18.1,<0.19.0)", "sphinx-autodoc-typehints[docs] [[package]] name = "linkml-runtime" -version = "1.5.4" +version = "1.5.5" description = "Runtime environment for LinkML, the Linked open data modeling language" optional = false python-versions = ">=3.7.6,<4.0.0" files = [ - {file = "linkml_runtime-1.5.4-py3-none-any.whl", hash = "sha256:6fa07516474f3ccecb604b09c25382b87b5058ca09ff5e68084fb09095db191f"}, - {file = "linkml_runtime-1.5.4.tar.gz", hash = "sha256:b9a6fc6c2af609b91238bad41d15186e4c3166f85ce79fe7e7b62d5493efebbf"}, + {file = "linkml_runtime-1.5.5-py3-none-any.whl", hash = "sha256:92b0148a107f980a75b5608ece692f7d33f77328c6f61640a4d2e51488be4a3c"}, + {file = "linkml_runtime-1.5.5.tar.gz", hash = "sha256:f0275823c659924c032e88d4084e6fdb9699c0a62c6c62d45cb62e27101cbbff"}, ] [package.dependencies] @@ -1493,13 +1491,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.1.18" +version = "9.1.19" description = "Documentation that simply works" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs_material-9.1.18-py3-none-any.whl", hash = "sha256:5bcf8fb79ac2f253c0ffe93fa181cba87718c6438f459dc4180ac7418cc9a450"}, - {file = "mkdocs_material-9.1.18.tar.gz", hash = "sha256:981dd39979723d4cda7cfc77bbbe5e54922d5761a7af23fb8ba9edb52f114b13"}, + {file = "mkdocs_material-9.1.19-py3-none-any.whl", hash = "sha256:fb0a149294b319aedf36983919d8c40c9e566db21ead16258e20ebd2e6c0961c"}, + {file = "mkdocs_material-9.1.19.tar.gz", hash = "sha256:73b94b08c765e92a80645aac58d6a741fc5f587deec2b715489c714827b15a6f"}, ] [package.dependencies] @@ -1629,36 +1627,36 @@ test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "numpy" -version = "1.25.0" +version = "1.25.1" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.25.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8aa130c3042052d656751df5e81f6d61edff3e289b5994edcf77f54118a8d9f4"}, - {file = "numpy-1.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e3f2b96e3b63c978bc29daaa3700c028fe3f049ea3031b58aa33fe2a5809d24"}, - {file = "numpy-1.25.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6b267f349a99d3908b56645eebf340cb58f01bd1e773b4eea1a905b3f0e4208"}, - {file = "numpy-1.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4aedd08f15d3045a4e9c648f1e04daca2ab1044256959f1f95aafeeb3d794c16"}, - {file = "numpy-1.25.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d183b5c58513f74225c376643234c369468e02947b47942eacbb23c1671f25d"}, - {file = "numpy-1.25.0-cp310-cp310-win32.whl", hash = "sha256:d76a84998c51b8b68b40448ddd02bd1081bb33abcdc28beee6cd284fe11036c6"}, - {file = "numpy-1.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0dc071017bc00abb7d7201bac06fa80333c6314477b3d10b52b58fa6a6e38f6"}, - {file = "numpy-1.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c69fe5f05eea336b7a740e114dec995e2f927003c30702d896892403df6dbf0"}, - {file = "numpy-1.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c7211d7920b97aeca7b3773a6783492b5b93baba39e7c36054f6e749fc7490c"}, - {file = "numpy-1.25.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecc68f11404930e9c7ecfc937aa423e1e50158317bf67ca91736a9864eae0232"}, - {file = "numpy-1.25.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e559c6afbca484072a98a51b6fa466aae785cfe89b69e8b856c3191bc8872a82"}, - {file = "numpy-1.25.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6c284907e37f5e04d2412950960894b143a648dea3f79290757eb878b91acbd1"}, - {file = "numpy-1.25.0-cp311-cp311-win32.whl", hash = "sha256:95367ccd88c07af21b379be1725b5322362bb83679d36691f124a16357390153"}, - {file = "numpy-1.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:b76aa836a952059d70a2788a2d98cb2a533ccd46222558b6970348939e55fc24"}, - {file = "numpy-1.25.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b792164e539d99d93e4e5e09ae10f8cbe5466de7d759fc155e075237e0c274e4"}, - {file = "numpy-1.25.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7cd981ccc0afe49b9883f14761bb57c964df71124dcd155b0cba2b591f0d64b9"}, - {file = "numpy-1.25.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aa48bebfb41f93043a796128854b84407d4df730d3fb6e5dc36402f5cd594c0"}, - {file = "numpy-1.25.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5177310ac2e63d6603f659fadc1e7bab33dd5a8db4e0596df34214eeab0fee3b"}, - {file = "numpy-1.25.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0ac6edfb35d2a99aaf102b509c8e9319c499ebd4978df4971b94419a116d0790"}, - {file = "numpy-1.25.0-cp39-cp39-win32.whl", hash = "sha256:7412125b4f18aeddca2ecd7219ea2d2708f697943e6f624be41aa5f8a9852cc4"}, - {file = "numpy-1.25.0-cp39-cp39-win_amd64.whl", hash = "sha256:26815c6c8498dc49d81faa76d61078c4f9f0859ce7817919021b9eba72b425e3"}, - {file = "numpy-1.25.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5b1b90860bf7d8a8c313b372d4f27343a54f415b20fb69dd601b7efe1029c91e"}, - {file = "numpy-1.25.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85cdae87d8c136fd4da4dad1e48064d700f63e923d5af6c8c782ac0df8044542"}, - {file = "numpy-1.25.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cc3fda2b36482891db1060f00f881c77f9423eead4c3579629940a3e12095fe8"}, - {file = "numpy-1.25.0.tar.gz", hash = "sha256:f1accae9a28dc3cda46a91de86acf69de0d1b5f4edd44a9b0c3ceb8036dfff19"}, + {file = "numpy-1.25.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77d339465dff3eb33c701430bcb9c325b60354698340229e1dff97745e6b3efa"}, + {file = "numpy-1.25.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d736b75c3f2cb96843a5c7f8d8ccc414768d34b0a75f466c05f3a739b406f10b"}, + {file = "numpy-1.25.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a90725800caeaa160732d6b31f3f843ebd45d6b5f3eec9e8cc287e30f2805bf"}, + {file = "numpy-1.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c6c9261d21e617c6dc5eacba35cb68ec36bb72adcff0dee63f8fbc899362588"}, + {file = "numpy-1.25.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0def91f8af6ec4bb94c370e38c575855bf1d0be8a8fbfba42ef9c073faf2cf19"}, + {file = "numpy-1.25.1-cp310-cp310-win32.whl", hash = "sha256:fd67b306320dcadea700a8f79b9e671e607f8696e98ec255915c0c6d6b818503"}, + {file = "numpy-1.25.1-cp310-cp310-win_amd64.whl", hash = "sha256:c1516db588987450b85595586605742879e50dcce923e8973f79529651545b57"}, + {file = "numpy-1.25.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6b82655dd8efeea69dbf85d00fca40013d7f503212bc5259056244961268b66e"}, + {file = "numpy-1.25.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e8f6049c4878cb16960fbbfb22105e49d13d752d4d8371b55110941fb3b17800"}, + {file = "numpy-1.25.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41a56b70e8139884eccb2f733c2f7378af06c82304959e174f8e7370af112e09"}, + {file = "numpy-1.25.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5154b1a25ec796b1aee12ac1b22f414f94752c5f94832f14d8d6c9ac40bcca6"}, + {file = "numpy-1.25.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38eb6548bb91c421261b4805dc44def9ca1a6eef6444ce35ad1669c0f1a3fc5d"}, + {file = "numpy-1.25.1-cp311-cp311-win32.whl", hash = "sha256:791f409064d0a69dd20579345d852c59822c6aa087f23b07b1b4e28ff5880fcb"}, + {file = "numpy-1.25.1-cp311-cp311-win_amd64.whl", hash = "sha256:c40571fe966393b212689aa17e32ed905924120737194b5d5c1b20b9ed0fb171"}, + {file = "numpy-1.25.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d7abcdd85aea3e6cdddb59af2350c7ab1ed764397f8eec97a038ad244d2d105"}, + {file = "numpy-1.25.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a180429394f81c7933634ae49b37b472d343cccb5bb0c4a575ac8bbc433722f"}, + {file = "numpy-1.25.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d412c1697c3853c6fc3cb9751b4915859c7afe6a277c2bf00acf287d56c4e625"}, + {file = "numpy-1.25.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20e1266411120a4f16fad8efa8e0454d21d00b8c7cee5b5ccad7565d95eb42dd"}, + {file = "numpy-1.25.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f76aebc3358ade9eacf9bc2bb8ae589863a4f911611694103af05346637df1b7"}, + {file = "numpy-1.25.1-cp39-cp39-win32.whl", hash = "sha256:247d3ffdd7775bdf191f848be8d49100495114c82c2bd134e8d5d075fb386a1c"}, + {file = "numpy-1.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:1d5d3c68e443c90b38fdf8ef40e60e2538a27548b39b12b73132456847f4b631"}, + {file = "numpy-1.25.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:35a9527c977b924042170a0887de727cd84ff179e478481404c5dc66b4170009"}, + {file = "numpy-1.25.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d3fe3dd0506a28493d82dc3cf254be8cd0d26f4008a417385cbf1ae95b54004"}, + {file = "numpy-1.25.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:012097b5b0d00a11070e8f2e261128c44157a8689f7dedcf35576e525893f4fe"}, + {file = "numpy-1.25.1.tar.gz", hash = "sha256:9a3a9f3a61480cc086117b426a8bd86869c213fc4072e606f01c4e4b66eb92bf"}, ] [[package]] @@ -1899,13 +1897,13 @@ files = [ [[package]] name = "platformdirs" -version = "3.8.0" +version = "3.9.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.8.0-py3-none-any.whl", hash = "sha256:ca9ed98ce73076ba72e092b23d3c93ea6c4e186b3f1c3dad6edd98ff6ffcca2e"}, - {file = "platformdirs-3.8.0.tar.gz", hash = "sha256:b0cabcb11063d21a0b261d557acb0a9d2126350e63b70cdf7db6347baea456dc"}, + {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, + {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, ] [package.extras] @@ -2082,6 +2080,16 @@ files = [ [package.extras] plugins = ["importlib-metadata"] +[[package]] +name = "pygraphviz" +version = "1.11" +description = "Python interface to Graphviz" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pygraphviz-1.11.zip", hash = "sha256:a97eb5ced266f45053ebb1f2c6c6d29091690503e3a5c14be7f908b37b06f2d4"}, +] + [[package]] name = "pyjsg" version = "0.11.10" @@ -2099,13 +2107,13 @@ jsonasobj = ">=1.2.1" [[package]] name = "pymdown-extensions" -version = "10.0.1" +version = "10.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.7" files = [ - {file = "pymdown_extensions-10.0.1-py3-none-any.whl", hash = "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274"}, - {file = "pymdown_extensions-10.0.1.tar.gz", hash = "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb"}, + {file = "pymdown_extensions-10.1-py3-none-any.whl", hash = "sha256:ef25dbbae530e8f67575d222b75ff0649b1e841e22c2ae9a20bad9472c2207dc"}, + {file = "pymdown_extensions-10.1.tar.gz", hash = "sha256:508009b211373058debb8247e168de4cbcb91b1bff7b5e961b2c3e864e00b195"}, ] [package.dependencies] @@ -2282,51 +2290,51 @@ files = [ [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.1" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" files = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, - {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, - {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, - {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, - {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, + {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, + {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, + {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, + {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, + {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, + {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, + {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, + {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, + {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] [[package]] @@ -2405,13 +2413,13 @@ rdflib-jsonld = "0.6.1" [[package]] name = "referencing" -version = "0.29.1" +version = "0.30.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.29.1-py3-none-any.whl", hash = "sha256:d3c8f323ee1480095da44d55917cfb8278d73d6b4d5f677e3e40eb21314ac67f"}, - {file = "referencing-0.29.1.tar.gz", hash = "sha256:90cb53782d550ba28d2166ef3f55731f38397def8832baac5d45235f1995e35e"}, + {file = "referencing-0.30.0-py3-none-any.whl", hash = "sha256:c257b08a399b6c2f5a3510a50d28ab5dbc7bbde049bcaf954d43c446f83ab548"}, + {file = "referencing-0.30.0.tar.gz", hash = "sha256:47237742e990457f7512c7d27486394a9aadaf876cbfaa4be65b27b4f4d47c6b"}, ] [package.dependencies] @@ -2607,72 +2615,108 @@ files = [ [[package]] name = "rpds-py" -version = "0.8.6" +version = "0.9.2" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.8.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6f694c687ac5eab9bf05dcad872a9e96c83a1aac92b836bc036b59939c9fa013"}, - {file = "rpds_py-0.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23977f5f11ba6d1081b02d0f946025143a5559116f61157dba6a2c5ad5f05001"}, - {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe06d928b9f5f8b106c7b4c8c2fbd7d8f15abe9fa9eaf23963832996be659c3"}, - {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c0b6ae3716c55acdc33ab9849fa1ae8dd4b9639d2d7d1e9c77300afc8a83beb2"}, - {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8575e61ea0a5a7cf203d18cc18a5fdc5dd94ec697b1f7eaa0fa13e404f61dbe6"}, - {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f2f1ef0a5b9288a1856d753875aa0575c4028b91b079839ceb4f79f78f14959"}, - {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d9a0ff3aaff3e8c059d16aa32b9171985f1b5f91fee9537b730e1862cffc44"}, - {file = "rpds_py-0.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4467c630b3713cc677287687c70263455e82ecf322145f3b53a5bebcac1c71a6"}, - {file = "rpds_py-0.8.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ae9fa5a0326ad08c4b5ff067389d644b34670265a0799c0a10f7d77f2c40fb12"}, - {file = "rpds_py-0.8.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6a562e82b0dd1a111eccd7c8ad29ac0aaeb1a6022e3c1b535460c754b2ad24cb"}, - {file = "rpds_py-0.8.6-cp310-none-win32.whl", hash = "sha256:9947b68eb57666d45474170b7ea443c7c952e6154eb0adac601345b0c6533530"}, - {file = "rpds_py-0.8.6-cp310-none-win_amd64.whl", hash = "sha256:5c0b7a5828359f96ae47a531dda99e3d4172ab75349469c77ed74963d87c37a2"}, - {file = "rpds_py-0.8.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:97eb2d09359a407eb6fe3522836f589e3c57b735d2853ccc950cb18eb1c92c85"}, - {file = "rpds_py-0.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:da05c93a110b03c7160d7c98b111d9c656cc6f8b566e6a1d74aa04e5e903fdb3"}, - {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5292c304ddecb07b9117d503988b5e20e4415bbb1898ed5c68533d0e6e9465a"}, - {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81ff7ef28959cea7cc18b16912e562a858c87b19fe8abd7b5bc46ef479fb2b91"}, - {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a02429b920f7657d98835aaaab595842f77028a82af86934a3ff1341484e088f"}, - {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8849e8f45385539fc7edebef06c220bdbbee24e9aeb34f108b9990ad872e3217"}, - {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e018a22e8ac42eff177768ad2c75ffe680feb417b18c8ea8261f369d3a4b4e2"}, - {file = "rpds_py-0.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fdcd08742b66a781a2568468bef8eb13d71136787162d908e97294c5cc1a124e"}, - {file = "rpds_py-0.8.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:38a7ec83e29f323c1bf8a8ea2db9b83fc7d90079363b7441d4567c6d6d70ec74"}, - {file = "rpds_py-0.8.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0538a7e076d5e8190b05a92cd5d6db30ce85e3443468855048ed3af0c428270e"}, - {file = "rpds_py-0.8.6-cp311-none-win32.whl", hash = "sha256:d181aaac699b021e88ec547f826dfd2345af99b014469469e7c2d704e185924c"}, - {file = "rpds_py-0.8.6-cp311-none-win_amd64.whl", hash = "sha256:2c0ad16838db5d6b021d1304502e4939e43e1993d13a821cf987ed436575ecee"}, - {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1aa7450d64bf92a82caf9e6dbc547671808093681e60b111c730e03f034502a"}, - {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa5876a0ac38ba26a90621051b64cc8537d0feff344d88217c54c299a9067167"}, - {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c92caae452de2b6e51accad99b4f71b3d9815c8078dfd700671723ef47cbdc0"}, - {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e307cfc77711a9e7c26d42e69a28216c988b4dac569786db66c9bb359f13c81f"}, - {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f4646b35dbd8920a0ad0bb001183765f9a3896ad07f6662c045415b4305290"}, - {file = "rpds_py-0.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f795a528e1fc33242ccfc2b84bd1f4f297bf4553a23ecd2919b5b43833f5d103"}, - {file = "rpds_py-0.8.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:35a41dc776f2ae9c9aac9cceabf7fb91aee38fcd064adbb7497e42cfd8b3971b"}, - {file = "rpds_py-0.8.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:596887468bdc2c7fa2aec909131ac480437409899d6ae930202f7e3b27144d65"}, - {file = "rpds_py-0.8.6-cp38-none-win32.whl", hash = "sha256:a1b08e42f19bddf77656b39be707ff8408ee8f2bf5b6fff058cfd0dda3dfb945"}, - {file = "rpds_py-0.8.6-cp38-none-win_amd64.whl", hash = "sha256:8da7cc6df70e0e8689678256d1cd380f2efa389e065d8b5403ed6901994c21b4"}, - {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1ad988b033d0fddca3c368ac40bb61b2947e05ae11eb825b48d3f8d50d12f75"}, - {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4b29f058d9afb6bbbef4b7593b609e3fea7a735789aa06e04e2987ff7e4d490f"}, - {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c0441111efe5e2bb34fd2dc1dac624d420d4d62aeb914bf6085569f607262a9"}, - {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:703110cfbe67fe084a61ecb280d14979f3d83a15895266fe038e976ab5ee668f"}, - {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:864803b4885900177feaa6471cf45d99b73e2267251640ca444386fd2a79056f"}, - {file = "rpds_py-0.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ae05a9191e36c457c6144e5ae9b3e32af9f68ed35b6cfc15e60b01dca6bfb93f"}, - {file = "rpds_py-0.8.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:b216e3f3363c4dc30351bede88f67e9bb9b98e5753238b37d19ec905c074ffa7"}, - {file = "rpds_py-0.8.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:806fb171949d30189aac1b66f8c0e81ff43d86bcc2a99eae3bd963b94c5df050"}, - {file = "rpds_py-0.8.6-cp39-none-win32.whl", hash = "sha256:fbf1e2a2c078754ca11b05fc6d88baff005cca399d574f26997bebc1a6f2d505"}, - {file = "rpds_py-0.8.6-cp39-none-win_amd64.whl", hash = "sha256:653f5e3789348a872c3a4cefe4ce7199262338bb54a52a7602351f3d57846023"}, - {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d7254be53b4e099a0bfa2ca883f0ab6378e2b530e0408e7884c59e0a538f006"}, - {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4ac1ebd98b0468d83e40e85fae662a4e70b2a1fd4012f51c58f9fc3d9a93bf70"}, - {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5810278ca062016edee00e07789af41a32d8b73bdda8d4eb527be2ac55d9e099"}, - {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:571b9c91e7a73f47368018b9eddca498eefe0cdcd520b81150545736b6c68263"}, - {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0723625ed5c6e99734a3fd526a58bbb11a9fbf935189bfa146089a227b112d8"}, - {file = "rpds_py-0.8.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5d78dcdff2844365a0507dc12a9cfd72271a1eecc25a316e41fcc571a9702783"}, - {file = "rpds_py-0.8.6-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:924d5854f16d3dbb4de28ddb76fa426d4c345f940be6024891f70c15342ca500"}, - {file = "rpds_py-0.8.6-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:aca18c5a4db266b0809dfc95d55b8d1d48662ce540d44c93608b3ec5e639cc17"}, - {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:544f56ac58969371a76dd7d7bef464f07be14f41635944186e48f7c61b02e4e8"}, - {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6069217b194d7e9548e67bf74bc9f9414e45269054574699b8d8d21dcbe32403"}, - {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00354bb3480cad06cb17937d6aeed02b212e233a01ec87045c8ceddb71447a46"}, - {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06974ed0a758c63d7133d3592d3316eafdea685a2a3e101886f1f4674ef17191"}, - {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcfc2c5b13f5c9ea702a295160707e210eebb2201be5d7769e795d27a4ff94f6"}, - {file = "rpds_py-0.8.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9cf5833a4f5995ecfcad86298b7c87b2f532241f7455b94bde47548765f70519"}, - {file = "rpds_py-0.8.6-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2f76f136be5ccd8489e524e2c419b181c9144985eb42e39a8e727c4996468c84"}, - {file = "rpds_py-0.8.6-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5be49ea7bf05269bf262b1316962e257043351bb3d6a82f7c88c47f35b8a5096"}, - {file = "rpds_py-0.8.6.tar.gz", hash = "sha256:816e0f7587cc13ab08cdb2fa8ce5350923ac55d367e758a7e34e5b1c42d5dbd1"}, + {file = "rpds_py-0.9.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7"}, + {file = "rpds_py-0.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f"}, + {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f"}, + {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f"}, + {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe"}, + {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6"}, + {file = "rpds_py-0.9.2-cp310-none-win32.whl", hash = "sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764"}, + {file = "rpds_py-0.9.2-cp310-none-win_amd64.whl", hash = "sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e"}, + {file = "rpds_py-0.9.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3"}, + {file = "rpds_py-0.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f"}, + {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d"}, + {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c"}, + {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae"}, + {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de"}, + {file = "rpds_py-0.9.2-cp311-none-win32.whl", hash = "sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab"}, + {file = "rpds_py-0.9.2-cp311-none-win_amd64.whl", hash = "sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298"}, + {file = "rpds_py-0.9.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386"}, + {file = "rpds_py-0.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238"}, + {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1"}, + {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b"}, + {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90"}, + {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d"}, + {file = "rpds_py-0.9.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d"}, + {file = "rpds_py-0.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55"}, + {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55"}, + {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d"}, + {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32"}, + {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e"}, + {file = "rpds_py-0.9.2-cp38-none-win32.whl", hash = "sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920"}, + {file = "rpds_py-0.9.2-cp38-none-win_amd64.whl", hash = "sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044"}, + {file = "rpds_py-0.9.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260"}, + {file = "rpds_py-0.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f"}, + {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324"}, + {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3"}, + {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535"}, + {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26"}, + {file = "rpds_py-0.9.2-cp39-none-win32.whl", hash = "sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0"}, + {file = "rpds_py-0.9.2-cp39-none-win_amd64.whl", hash = "sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67"}, + {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8"}, + {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03"}, + {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe"}, + {file = "rpds_py-0.9.2.tar.gz", hash = "sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945"}, ] [[package]] @@ -2937,52 +2981,52 @@ pandas = ["pandas (>=1.3.5)"] [[package]] name = "sqlalchemy" -version = "2.0.18" +version = "2.0.19" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7ddd6d35c598af872f9a0a5bce7f7c4a1841684a72dab3302e3df7f17d1b5249"}, - {file = "SQLAlchemy-2.0.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:00aa050faf24ce5f2af643e2b86822fa1d7149649995f11bc1e769bbfbf9010b"}, - {file = "SQLAlchemy-2.0.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b52c6741073de5a744d27329f9803938dcad5c9fee7e61690c705f72973f4175"}, - {file = "SQLAlchemy-2.0.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db97eabd440327c35b751d5ebf78a107f505586485159bcc87660da8bb1fdca"}, - {file = "SQLAlchemy-2.0.18-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:589aba9a35869695b319ed76c6f673d896cd01a7ff78054be1596df7ad9b096f"}, - {file = "SQLAlchemy-2.0.18-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9da4ee8f711e077633730955c8f3cd2485c9abf5ea0f80aac23221a3224b9a8c"}, - {file = "SQLAlchemy-2.0.18-cp310-cp310-win32.whl", hash = "sha256:5dd574a37be388512c72fe0d7318cb8e31743a9b2699847a025e0c08c5bf579d"}, - {file = "SQLAlchemy-2.0.18-cp310-cp310-win_amd64.whl", hash = "sha256:6852cd34d96835e4c9091c1e6087325efb5b607b75fd9f7075616197d1c4688a"}, - {file = "SQLAlchemy-2.0.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:10e001a84f820fea2640e4500e12322b03afc31d8f4f6b813b44813b2a7c7e0d"}, - {file = "SQLAlchemy-2.0.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bffd6cd47c2e68970039c0d3e355c9ed761d3ca727b204e63cd294cad0e3df90"}, - {file = "SQLAlchemy-2.0.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b7b3ebfa9416c8eafaffa65216e229480c495e305a06ba176dcac32710744e6"}, - {file = "SQLAlchemy-2.0.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79228a7b90d95957354f37b9d46f2cc8926262ae17b0d3ed8f36c892f2a37e06"}, - {file = "SQLAlchemy-2.0.18-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ba633b51835036ff0f402c21f3ff567c565a22ff0a5732b060a68f4660e2a38f"}, - {file = "SQLAlchemy-2.0.18-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8da677135eff43502b7afab5a1e641edfb2dc734ba7fc146e9b1b86817a728e2"}, - {file = "SQLAlchemy-2.0.18-cp311-cp311-win32.whl", hash = "sha256:82edf3a6090554a83942cec79151d6b5eb96e63d143e80e4cf6671e5d772f6be"}, - {file = "SQLAlchemy-2.0.18-cp311-cp311-win_amd64.whl", hash = "sha256:69ae0e9509c43474e33152abe1385b8954922544616426bf793481e1a37e094f"}, - {file = "SQLAlchemy-2.0.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:09397a18733fa2a4c7680b746094f980060666ee549deafdb5e102a99ce4619b"}, - {file = "SQLAlchemy-2.0.18-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45b07470571bda5ee7f5ec471271bbde97267cc8403fce05e280c36ea73f4754"}, - {file = "SQLAlchemy-2.0.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1aac42a21a7fa6c9665392c840b295962992ddf40aecf0a88073bc5c76728117"}, - {file = "SQLAlchemy-2.0.18-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:da46beef0ce882546d92b7b2e8deb9e04dbb8fec72945a8eb28b347ca46bc15a"}, - {file = "SQLAlchemy-2.0.18-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:a6f1d8256d06f58e6ece150fbe05c63c7f9510df99ee8ac37423f5476a2cebb4"}, - {file = "SQLAlchemy-2.0.18-cp37-cp37m-win32.whl", hash = "sha256:67fbb40db3985c0cfb942fe8853ad94a5e9702d2987dec03abadc2f3b6a24afb"}, - {file = "SQLAlchemy-2.0.18-cp37-cp37m-win_amd64.whl", hash = "sha256:afb322ca05e2603deedbcd2e9910f11a3fd2f42bdeafe63018e5641945c7491c"}, - {file = "SQLAlchemy-2.0.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:908c850b98cac1e203ababd4ba76868d19ae0d7172cdc75d3f1b7829b16837d2"}, - {file = "SQLAlchemy-2.0.18-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10514adc41fc8f5922728fbac13d401a1aefcf037f009e64ca3b92464e33bf0e"}, - {file = "SQLAlchemy-2.0.18-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b791577c546b6bbd7b43953565fcb0a2fec63643ad605353dd48afbc3c48317"}, - {file = "SQLAlchemy-2.0.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:420bc6d06d4ae7fb6921524334689eebcbea7bf2005efef070a8562cc9527a37"}, - {file = "SQLAlchemy-2.0.18-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ebdd2418ab4e2e26d572d9a1c03877f8514a9b7436729525aa571862507b3fea"}, - {file = "SQLAlchemy-2.0.18-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:556dc18e39b6edb76239acfd1c010e37395a54c7fde8c57481c15819a3ffb13e"}, - {file = "SQLAlchemy-2.0.18-cp38-cp38-win32.whl", hash = "sha256:7b8cba5a25e95041e3413d91f9e50616bcfaec95afa038ce7dc02efefe576745"}, - {file = "SQLAlchemy-2.0.18-cp38-cp38-win_amd64.whl", hash = "sha256:0f7fdcce52cd882b559a57b484efc92e108efeeee89fab6b623aba1ac68aad2e"}, - {file = "SQLAlchemy-2.0.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d7a2c1e711ce59ac9d0bba780318bcd102d2958bb423209f24c6354d8c4da930"}, - {file = "SQLAlchemy-2.0.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5c95e3e7cc6285bf7ff263eabb0d3bfe3def9a1ff98124083d45e5ece72f4579"}, - {file = "SQLAlchemy-2.0.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc44e50f9d5e96af1a561faa36863f9191f27364a4df3eb70bca66e9370480b6"}, - {file = "SQLAlchemy-2.0.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfa1a0f83bdf8061db8d17c2029454722043f1e4dd1b3d3d3120d1b54e75825a"}, - {file = "SQLAlchemy-2.0.18-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:194f2d5a7cb3739875c4d25b3fe288ab0b3dc33f7c857ba2845830c8c51170a0"}, - {file = "SQLAlchemy-2.0.18-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ebc542d2289c0b016d6945fd07a7e2e23f4abc41e731ac8ad18a9e0c2fd0ec2"}, - {file = "SQLAlchemy-2.0.18-cp39-cp39-win32.whl", hash = "sha256:774bd401e7993452ba0596e741c0c4d6d22f882dd2a798993859181dbffadc62"}, - {file = "SQLAlchemy-2.0.18-cp39-cp39-win_amd64.whl", hash = "sha256:2756485f49e7df5c2208bdc64263d19d23eba70666f14ad12d6d8278a2fff65f"}, - {file = "SQLAlchemy-2.0.18-py3-none-any.whl", hash = "sha256:6c5bae4c288bda92a7550fe8de9e068c0a7cd56b1c5d888aae5b40f0e13b40bd"}, - {file = "SQLAlchemy-2.0.18.tar.gz", hash = "sha256:1fb792051db66e09c200e7bc3bda3b1eb18a5b8eb153d2cedb2b14b56a68b8cb"}, + {file = "SQLAlchemy-2.0.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9deaae357edc2091a9ed5d25e9ee8bba98bcfae454b3911adeaf159c2e9ca9e3"}, + {file = "SQLAlchemy-2.0.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0bf0fd65b50a330261ec7fe3d091dfc1c577483c96a9fa1e4323e932961aa1b5"}, + {file = "SQLAlchemy-2.0.19-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d90ccc15ba1baa345796a8fb1965223ca7ded2d235ccbef80a47b85cea2d71a"}, + {file = "SQLAlchemy-2.0.19-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4e688f6784427e5f9479d1a13617f573de8f7d4aa713ba82813bcd16e259d1"}, + {file = "SQLAlchemy-2.0.19-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:584f66e5e1979a7a00f4935015840be627e31ca29ad13f49a6e51e97a3fb8cae"}, + {file = "SQLAlchemy-2.0.19-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c69ce70047b801d2aba3e5ff3cba32014558966109fecab0c39d16c18510f15"}, + {file = "SQLAlchemy-2.0.19-cp310-cp310-win32.whl", hash = "sha256:96f0463573469579d32ad0c91929548d78314ef95c210a8115346271beeeaaa2"}, + {file = "SQLAlchemy-2.0.19-cp310-cp310-win_amd64.whl", hash = "sha256:22bafb1da60c24514c141a7ff852b52f9f573fb933b1e6b5263f0daa28ce6db9"}, + {file = "SQLAlchemy-2.0.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d6894708eeb81f6d8193e996257223b6bb4041cb05a17cd5cf373ed836ef87a2"}, + {file = "SQLAlchemy-2.0.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8f2afd1aafded7362b397581772c670f20ea84d0a780b93a1a1529da7c3d369"}, + {file = "SQLAlchemy-2.0.19-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15afbf5aa76f2241184c1d3b61af1a72ba31ce4161013d7cb5c4c2fca04fd6e"}, + {file = "SQLAlchemy-2.0.19-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc05b59142445a4efb9c1fd75c334b431d35c304b0e33f4fa0ff1ea4890f92e"}, + {file = "SQLAlchemy-2.0.19-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5831138f0cc06b43edf5f99541c64adf0ab0d41f9a4471fd63b54ae18399e4de"}, + {file = "SQLAlchemy-2.0.19-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3afa8a21a9046917b3a12ffe016ba7ebe7a55a6fc0c7d950beb303c735c3c3ad"}, + {file = "SQLAlchemy-2.0.19-cp311-cp311-win32.whl", hash = "sha256:c896d4e6ab2eba2afa1d56be3d0b936c56d4666e789bfc59d6ae76e9fcf46145"}, + {file = "SQLAlchemy-2.0.19-cp311-cp311-win_amd64.whl", hash = "sha256:024d2f67fb3ec697555e48caeb7147cfe2c08065a4f1a52d93c3d44fc8e6ad1c"}, + {file = "SQLAlchemy-2.0.19-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:89bc2b374ebee1a02fd2eae6fd0570b5ad897ee514e0f84c5c137c942772aa0c"}, + {file = "SQLAlchemy-2.0.19-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd4d410a76c3762511ae075d50f379ae09551d92525aa5bb307f8343bf7c2c12"}, + {file = "SQLAlchemy-2.0.19-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f469f15068cd8351826df4080ffe4cc6377c5bf7d29b5a07b0e717dddb4c7ea2"}, + {file = "SQLAlchemy-2.0.19-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cda283700c984e699e8ef0fcc5c61f00c9d14b6f65a4f2767c97242513fcdd84"}, + {file = "SQLAlchemy-2.0.19-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:43699eb3f80920cc39a380c159ae21c8a8924fe071bccb68fc509e099420b148"}, + {file = "SQLAlchemy-2.0.19-cp37-cp37m-win32.whl", hash = "sha256:61ada5831db36d897e28eb95f0f81814525e0d7927fb51145526c4e63174920b"}, + {file = "SQLAlchemy-2.0.19-cp37-cp37m-win_amd64.whl", hash = "sha256:57d100a421d9ab4874f51285c059003292433c648df6abe6c9c904e5bd5b0828"}, + {file = "SQLAlchemy-2.0.19-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:16a310f5bc75a5b2ce7cb656d0e76eb13440b8354f927ff15cbaddd2523ee2d1"}, + {file = "SQLAlchemy-2.0.19-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf7b5e3856cbf1876da4e9d9715546fa26b6e0ba1a682d5ed2fc3ca4c7c3ec5b"}, + {file = "SQLAlchemy-2.0.19-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e7b69d9ced4b53310a87117824b23c509c6fc1f692aa7272d47561347e133b6"}, + {file = "SQLAlchemy-2.0.19-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9eb4575bfa5afc4b066528302bf12083da3175f71b64a43a7c0badda2be365"}, + {file = "SQLAlchemy-2.0.19-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6b54d1ad7a162857bb7c8ef689049c7cd9eae2f38864fc096d62ae10bc100c7d"}, + {file = "SQLAlchemy-2.0.19-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5d6afc41ca0ecf373366fd8e10aee2797128d3ae45eb8467b19da4899bcd1ee0"}, + {file = "SQLAlchemy-2.0.19-cp38-cp38-win32.whl", hash = "sha256:430614f18443b58ceb9dedec323ecddc0abb2b34e79d03503b5a7579cd73a531"}, + {file = "SQLAlchemy-2.0.19-cp38-cp38-win_amd64.whl", hash = "sha256:eb60699de43ba1a1f77363f563bb2c652f7748127ba3a774f7cf2c7804aa0d3d"}, + {file = "SQLAlchemy-2.0.19-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a752b7a9aceb0ba173955d4f780c64ee15a1a991f1c52d307d6215c6c73b3a4c"}, + {file = "SQLAlchemy-2.0.19-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7351c05db355da112e056a7b731253cbeffab9dfdb3be1e895368513c7d70106"}, + {file = "SQLAlchemy-2.0.19-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa51ce4aea583b0c6b426f4b0563d3535c1c75986c4373a0987d84d22376585b"}, + {file = "SQLAlchemy-2.0.19-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae7473a67cd82a41decfea58c0eac581209a0aa30f8bc9190926fbf628bb17f7"}, + {file = "SQLAlchemy-2.0.19-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851a37898a8a39783aab603c7348eb5b20d83c76a14766a43f56e6ad422d1ec8"}, + {file = "SQLAlchemy-2.0.19-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539010665c90e60c4a1650afe4ab49ca100c74e6aef882466f1de6471d414be7"}, + {file = "SQLAlchemy-2.0.19-cp39-cp39-win32.whl", hash = "sha256:f82c310ddf97b04e1392c33cf9a70909e0ae10a7e2ddc1d64495e3abdc5d19fb"}, + {file = "SQLAlchemy-2.0.19-cp39-cp39-win_amd64.whl", hash = "sha256:8e712cfd2e07b801bc6b60fdf64853bc2bd0af33ca8fa46166a23fe11ce0dbb0"}, + {file = "SQLAlchemy-2.0.19-py3-none-any.whl", hash = "sha256:314145c1389b021a9ad5aa3a18bac6f5d939f9087d7fc5443be28cba19d2c972"}, + {file = "SQLAlchemy-2.0.19.tar.gz", hash = "sha256:77a14fa20264af73ddcdb1e2b9c5a829b8cc6b8304d0f093271980e36c200a3f"}, ] [package.dependencies] @@ -3171,13 +3215,13 @@ six = "*" [[package]] name = "urllib3" -version = "2.0.3" +version = "2.0.4" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.7" files = [ - {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, - {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, + {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, + {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, ] [package.extras] @@ -3342,20 +3386,20 @@ files = [ [[package]] name = "zipp" -version = "3.15.0" +version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, - {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, + {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, + {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "84ee661f3bf6c42ee507498df3a7ac8893389ed66024beb8b45d4259ffe64bea" +content-hash = "838ed1fea57cf54d115baca90caaaded0690334ac349a4cebca3f77f47705c33" diff --git a/pyproject.toml b/pyproject.toml index 0910c1b..99cc308 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,6 +13,7 @@ pandas = "^2.0.2" pandasaurus = "0.2.3" anndata = "^0.9.1" rdflib = "^6.3.2" +pygraphviz = "^1.11" [tool.poetry.group.dev.dependencies] pytest = "^7.3.1" @@ -31,6 +32,11 @@ secondary = true requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" +[build-system.config-options] +# Add the custom build options for pygraphviz here +install = ["--use-pep517"] +build_ext = ["--global-option=build_ext", "--build-option=-I$(brew --prefix graphviz)/include/", "--build-option=-L$(brew --prefix graphviz)/lib/"] + [tool.black] line-length = 100 From 0e7248fa1f46209ede331e30c74e6d70afc394c3 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 21 Jul 2023 15:15:47 +0100 Subject: [PATCH 09/27] Refactored visualize_rdf_graph method --- .../graph_generator/graph_generator.py | 57 ++++++++++++++++--- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 6f595d7..1c2777d 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -158,14 +158,57 @@ def save_rdf_graph(self, file_name: str = "mygraph", _format: str = "xml"): valid_formats = [valid_format.value for valid_format in RDFFormat] raise InvalidGraphFormat(RDFFormat, valid_formats) - def visualize_rdf_graph(self): - nx_graph = rdflib_to_networkx_multidigraph(self.graph) - # Plot Networkx instance of RDF Graph - pos = nx.spring_layout(nx_graph, scale=2, k=2) - edge_labels = nx.get_edge_attributes(nx_graph, "r") - nx.draw_networkx_edge_labels(nx_graph, pos, edge_labels=edge_labels) - nx.draw(nx_graph, with_labels=True) + def visualize_rdf_graph(self, start_node): + visited = set() + stack = [URIRef(start_node)] + subgraph = Graph() + + while stack: + node = stack.pop() + if node not in visited: + visited.add(node) + subgraph += self.graph.triples( + (node, None, None) + ) # Add all outgoing edges of the current node + for _, _, next_node in self.graph.triples((node, None, None)): + stack.append(next_node) + + nx_graph = nx.Graph() + edge_labels = {} + for subject, predicate, obj in subgraph: + if isinstance(obj, URIRef): + nx_graph.add_edge(str(subject), str(obj)) + edge_labels[(str(subject), str(obj))] = "is_a" if predicate == RDF.type else str(predicate) + + # Layout the graph as a hierarchical tree + pos = nx.drawing.nx_agraph.graphviz_layout(nx_graph, prog="dot") + + # Plot the graph as a hierarchical tree + plt.figure(figsize=(10, 8)) + nx.draw( + nx_graph, + pos, + with_labels=True, + node_size=1500, + node_color="skyblue", + font_size=8, + font_weight="bold", + ) + + # Draw edge labels on the graph + edge_labels_formatted = {edge: label.split("/")[-1] for edge, label in edge_labels.items()} + nx.draw_networkx_edge_labels( + nx_graph, pos, edge_labels=edge_labels_formatted, font_size=8, font_color="red" + ) + plt.show() + # nx_graph = rdflib_to_networkx_multidigraph(self.graph) + # # Plot Networkx instance of RDF Graph + # pos = nx.spring_layout(nx_graph, scale=2, k=2) + # edge_labels = nx.get_edge_attributes(nx_graph, "r") + # nx.draw_networkx_edge_labels(nx_graph, pos, edge_labels=edge_labels) + # nx.draw(nx_graph, with_labels=True) + # plt.show() class RDFFormat(Enum): From ee69211408261983534b286abe7f9171cc170a7a Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 21 Jul 2023 15:17:04 +0100 Subject: [PATCH 10/27] Added consists_of relations as OWL.Restriction --- .../graph_generator/graph_generator.py | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 1c2777d..32b67d4 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -1,15 +1,18 @@ +import uuid from enum import Enum from typing import List, Optional -import uuid -import networkx as nx import matplotlib.pyplot as plt +import networkx as nx import pandas as pd -from rdflib import Graph, Literal, Namespace, RDF, RDFS, URIRef +from rdflib import OWL, RDF, RDFS, BNode, Graph, Literal, Namespace, URIRef from rdflib.extras.external_graph_libs import rdflib_to_networkx_multidigraph from pandasaurus_cxg.anndata_enricher import AnndataEnricher -from pandasaurus_cxg.utils.exceptions import InvalidGraphFormat, MissingEnrichmentProcess +from pandasaurus_cxg.utils.exceptions import ( + InvalidGraphFormat, + MissingEnrichmentProcess, +) class GraphGenerator: @@ -91,12 +94,13 @@ def generate_rdf_graph(self): if temp_dict not in grouped_dict_uuid.values(): grouped_dict_uuid[str(uuid.uuid4())] = temp_dict + self.graph.add((self.ns["x"], RDF.type, OWL.Ontology)) # generate a resource for each free-text cell_type annotation and cell_type_ontology_term annotation cell_set_class = self.ns["CellSet"] self.graph.add((cell_set_class, RDF.type, RDFS.Class)) for _uuid, inner_dict in grouped_dict_uuid.items(): resource = self.ns[_uuid] - self.graph.add((resource, RDF.type, cell_set_class)) + self.graph.add((resource, RDFS.subClassOf, cell_set_class)) for k, v in inner_dict.items(): if k == "subcluster_of": continue @@ -123,9 +127,15 @@ def enrich_rdf_graph(self): for curie, label in self.cell_type_dict.items(): resource = cl_namespace[curie.split(":")[-1]] self.graph.add((resource, RDFS.label, Literal(label))) - self.graph.add((resource, RDF.type, self.ns["CellType"])) + self.graph.add((resource, RDFS.subClassOf, self.ns["CellType"])) for s, _, _ in self.graph.triples((None, self.ns["cell_type"], Literal(label))): - self.graph.add((s, self.ns["consists_of"], resource)) + # Add the triples to represent the restriction + class_expression_bnode = BNode() + self.graph.add((class_expression_bnode, RDF.type, OWL.Restriction)) + self.graph.add((class_expression_bnode, OWL.onProperty, self.ns["consist_of"])) + self.graph.add((class_expression_bnode, OWL.someValuesFrom, resource)) + # Add the restriction + self.graph.add((s, RDFS.subClassOf, class_expression_bnode)) # add subClassOf between terms in CL enrichment for _, row in self.enriched_df.iterrows(): for s, _, _ in self.graph.triples((None, RDFS.label, Literal(row["s_label"]))): From 95c926a054b382771607776327f071a39133e1de Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 21 Jul 2023 15:17:41 +0100 Subject: [PATCH 11/27] Format changes --- pandasaurus_cxg/anndata_analyzer.py | 3 +-- pandasaurus_cxg/anndata_enricher.py | 2 +- pandasaurus_cxg/graph_generator/graph_generator.py | 4 +++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pandasaurus_cxg/anndata_analyzer.py b/pandasaurus_cxg/anndata_analyzer.py index 19c5824..03cfe4d 100644 --- a/pandasaurus_cxg/anndata_analyzer.py +++ b/pandasaurus_cxg/anndata_analyzer.py @@ -1,5 +1,5 @@ -from enum import Enum import os +from enum import Enum from typing import List import pandas as pd @@ -7,7 +7,6 @@ from pandasaurus_cxg.anndata_loader import AnndataLoader from pandasaurus_cxg.schema.schema_loader import read_json_file - # Check if the DEBUG environment variable is set debug_mode = os.getenv("DEBUG") diff --git a/pandasaurus_cxg/anndata_enricher.py b/pandasaurus_cxg/anndata_enricher.py index b6bed6f..2db8d76 100644 --- a/pandasaurus_cxg/anndata_enricher.py +++ b/pandasaurus_cxg/anndata_enricher.py @@ -1,7 +1,7 @@ from typing import List, Optional -from anndata import AnnData import pandas as pd +from anndata import AnnData from pandasaurus.query import Query from pandasaurus.slim_manager import SlimManager diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 32b67d4..031c1d9 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -188,7 +188,9 @@ def visualize_rdf_graph(self, start_node): for subject, predicate, obj in subgraph: if isinstance(obj, URIRef): nx_graph.add_edge(str(subject), str(obj)) - edge_labels[(str(subject), str(obj))] = "is_a" if predicate == RDF.type else str(predicate) + edge_labels[(str(subject), str(obj))] = ( + "is_a" if predicate == RDF.type else str(predicate) + ) # Layout the graph as a hierarchical tree pos = nx.drawing.nx_agraph.graphviz_layout(nx_graph, prog="dot") From dda2fa24f5985b088615f2a2ffbde6c297449326 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Tue, 25 Jul 2023 12:37:05 +0100 Subject: [PATCH 12/27] Refactored visualize_rdf_graph method --- .../graph_generator/graph_generator.py | 87 +++++++++++-------- 1 file changed, 53 insertions(+), 34 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 031c1d9..9656086 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -6,7 +6,6 @@ import networkx as nx import pandas as pd from rdflib import OWL, RDF, RDFS, BNode, Graph, Literal, Namespace, URIRef -from rdflib.extras.external_graph_libs import rdflib_to_networkx_multidigraph from pandasaurus_cxg.anndata_enricher import AnndataEnricher from pandasaurus_cxg.utils.exceptions import ( @@ -94,22 +93,22 @@ def generate_rdf_graph(self): if temp_dict not in grouped_dict_uuid.values(): grouped_dict_uuid[str(uuid.uuid4())] = temp_dict - self.graph.add((self.ns["x"], RDF.type, OWL.Ontology)) # generate a resource for each free-text cell_type annotation and cell_type_ontology_term annotation cell_set_class = self.ns["CellSet"] self.graph.add((cell_set_class, RDF.type, RDFS.Class)) for _uuid, inner_dict in grouped_dict_uuid.items(): resource = self.ns[_uuid] - self.graph.add((resource, RDFS.subClassOf, cell_set_class)) + self.graph.add((resource, RDF.type, cell_set_class)) for k, v in inner_dict.items(): if k == "subcluster_of": continue self.graph.add((resource, self.ns[k], Literal(v))) # add relationship between each resource based on their predicate in the co_annotation_report + subcluster = self.ns["subcluster_of"] + self.graph.add((subcluster, RDF.type, OWL.ObjectProperty)) for _uuid, inner_dict in grouped_dict_uuid.items(): - resource = URIRef(self.ns + _uuid) - subcluster = self.ns["subcluster_of"] + resource = self.ns[_uuid] for ik, iv in inner_dict.get("subcluster_of", {}).items(): predicate = URIRef(self.ns + ik) for s, _, _ in self.graph.triples((None, predicate, Literal(iv))): @@ -127,7 +126,7 @@ def enrich_rdf_graph(self): for curie, label in self.cell_type_dict.items(): resource = cl_namespace[curie.split(":")[-1]] self.graph.add((resource, RDFS.label, Literal(label))) - self.graph.add((resource, RDFS.subClassOf, self.ns["CellType"])) + self.graph.add((resource, RDF.type, OWL.Class)) for s, _, _ in self.graph.triples((None, self.ns["cell_type"], Literal(label))): # Add the triples to represent the restriction class_expression_bnode = BNode() @@ -135,7 +134,8 @@ def enrich_rdf_graph(self): self.graph.add((class_expression_bnode, OWL.onProperty, self.ns["consist_of"])) self.graph.add((class_expression_bnode, OWL.someValuesFrom, resource)) # Add the restriction - self.graph.add((s, RDFS.subClassOf, class_expression_bnode)) + self.graph.add((s, RDF.type, class_expression_bnode)) + # self.graph.add((s, self.ns["consist_of"], resource)) # add subClassOf between terms in CL enrichment for _, row in self.enriched_df.iterrows(): for s, _, _ in self.graph.triples((None, RDFS.label, Literal(row["s_label"]))): @@ -168,37 +168,60 @@ def save_rdf_graph(self, file_name: str = "mygraph", _format: str = "xml"): valid_formats = [valid_format.value for valid_format in RDFFormat] raise InvalidGraphFormat(RDFFormat, valid_formats) - def visualize_rdf_graph(self, start_node): + def visualize_rdf_graph(self, start_node: List[str], file_path: str): + graph = Graph().parse(file_path, format="ttl") if file_path else self.graph + for node in start_node: + if not URIRef(node) in graph.subjects() or URIRef(node) in graph.objects(): + raise ValueError(f"None of the nodes in the list {node} exist in the RDF graph.") + visited = set() - stack = [URIRef(start_node)] + stack = [URIRef(node) for node in start_node] subgraph = Graph() while stack: node = stack.pop() if node not in visited: visited.add(node) - subgraph += self.graph.triples( - (node, None, None) - ) # Add all outgoing edges of the current node - for _, _, next_node in self.graph.triples((node, None, None)): - stack.append(next_node) - - nx_graph = nx.Graph() - edge_labels = {} + for subject, predicate, obj in graph.triples((node, None, None)): + if predicate != RDF.type: + subgraph.add( + (subject, predicate, obj) + ) # Add all outgoing edges of the current node + for s, p, next_node in graph.triples((node, None, None)): + # stack.append(next_node) + if not isinstance(next_node, BNode): + stack.append(next_node) + else: + subgraph.add( + ( + node, + next(graph.objects(next_node, OWL.onProperty)), + next(graph.objects(next_node, OWL.someValuesFrom)), + ) + ) + + nx_graph = nx.DiGraph() for subject, predicate, obj in subgraph: if isinstance(obj, URIRef): - nx_graph.add_edge(str(subject), str(obj)) - edge_labels[(str(subject), str(obj))] = ( - "is_a" if predicate == RDF.type else str(predicate) - ) + edge_data = { + "label": "is_a" if predicate == RDF.type else str(predicate).split("/")[-1] + } + nx_graph.add_edge(str(subject).split("/")[-1], str(obj).split("/")[-1], **edge_data) + + # Apply transitive reduction to remove redundancy + transitive_reduction_graph = nx.transitive_reduction(nx_graph) + transitive_reduction_graph.add_nodes_from(nx_graph.nodes(data=True)) + transitive_reduction_graph.add_edges_from( + (u, v, nx_graph.edges[u, v]) for u, v in transitive_reduction_graph.edges + ) # Layout the graph as a hierarchical tree - pos = nx.drawing.nx_agraph.graphviz_layout(nx_graph, prog="dot") + pos = nx.drawing.nx_agraph.graphviz_layout(transitive_reduction_graph, prog="dot") # Plot the graph as a hierarchical tree plt.figure(figsize=(10, 8)) nx.draw( - nx_graph, + transitive_reduction_graph, pos, with_labels=True, node_size=1500, @@ -206,21 +229,17 @@ def visualize_rdf_graph(self, start_node): font_size=8, font_weight="bold", ) - # Draw edge labels on the graph - edge_labels_formatted = {edge: label.split("/")[-1] for edge, label in edge_labels.items()} + edge_labels = nx.get_edge_attributes(transitive_reduction_graph, "label") + edge_labels_formatted = {edge: label for edge, label in edge_labels.items()} nx.draw_networkx_edge_labels( - nx_graph, pos, edge_labels=edge_labels_formatted, font_size=8, font_color="red" + transitive_reduction_graph, + pos, + edge_labels=edge_labels_formatted, + font_size=8, + font_color="red", ) - plt.show() - # nx_graph = rdflib_to_networkx_multidigraph(self.graph) - # # Plot Networkx instance of RDF Graph - # pos = nx.spring_layout(nx_graph, scale=2, k=2) - # edge_labels = nx.get_edge_attributes(nx_graph, "r") - # nx.draw_networkx_edge_labels(nx_graph, pos, edge_labels=edge_labels) - # nx.draw(nx_graph, with_labels=True) - # plt.show() class RDFFormat(Enum): From bb04f1e72d5566fa8d9653c74a4338a8a7dd46a6 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Tue, 25 Jul 2023 12:41:31 +0100 Subject: [PATCH 13/27] Updated walkthrough.ipynb --- walkthrough.ipynb | 21961 ++------------------------------------------ 1 file changed, 850 insertions(+), 21111 deletions(-) diff --git a/walkthrough.ipynb b/walkthrough.ipynb index a437be3..27271c2 100644 --- a/walkthrough.ipynb +++ b/walkthrough.ipynb @@ -60,20 +60,22 @@ "outputs": [], "source": [ "# Using Time-resolved Systems Immunology Reveals a Late Juncture Linked to Fatal COVID-19: Adaptive Cells dataset\n", - "ade = AnndataEnricher(\"test/data/test_covid.h5ad\")" + "ade = AnndataEnricher.from_file_path(\"./immune_example.h5ad\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Anndata Obs field details" + "AnnData object loaded into AnnDataEnricher" ] }, { "cell_type": "code", "execution_count": 3, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { @@ -240,274 +242,69 @@ " European\n", " 55-year-old human stage\n", " \n", - " \n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " \n", - " \n", - " TTTGTCACAAGAGGCT-16_4\n", - " UBERON:0000178\n", - " memory B cell\n", - " PATO:0000461\n", - " 73.0\n", - " \n", - " SHD5\n", - " \n", - " NaN\n", - " \n", - " \n", - " ...\n", - " NCBITaxon:9606\n", - " cell\n", - " memory B cell\n", - " 10x 5' v1\n", - " normal\n", - " Homo sapiens\n", - " male\n", - " blood\n", - " unknown\n", - " 73-year-old human stage\n", - " \n", - " \n", - " TTTGTCACACGTCTCT-16_4\n", - " UBERON:0000178\n", - " naive CD8+ T cell\n", - " MONDO:0100096\n", - " 49.0\n", - " 0.0\n", - " HGR0000142\n", - " Critical\n", - " -0.617735\n", - " False\n", - " 12.0\n", - " ...\n", - " NCBITaxon:9606\n", - " cell\n", - " naive thymus-derived CD8-positive, alpha-beta ...\n", - " 10x 5' v1\n", - " COVID-19\n", - " Homo sapiens\n", - " male\n", - " blood\n", - " European\n", - " 49-year-old human stage\n", - " \n", - " \n", - " TTTGTCACAGGTCGTC-16_4\n", - " UBERON:0000178\n", - " naive CD8+ T cell\n", - " MONDO:0100096\n", - " 53.0\n", - " 2.0\n", - " HGR0000134\n", - " Critical\n", - " -1.925448\n", - " False\n", - " 16.0\n", - " ...\n", - " NCBITaxon:9606\n", - " cell\n", - " naive thymus-derived CD8-positive, alpha-beta ...\n", - " 10x 5' v1\n", - " COVID-19\n", - " Homo sapiens\n", - " male\n", - " blood\n", - " European\n", - " 53-year-old human stage\n", - " \n", - " \n", - " TTTGTCAGTAAATGAC-16_4\n", - " UBERON:0000178\n", - " CD4-positive, alpha-beta memory T cell\n", - " PATO:0000461\n", - " 51.0\n", - " \n", - " SHD1\n", - " \n", - " NaN\n", - " \n", - " \n", - " ...\n", - " NCBITaxon:9606\n", - " cell\n", - " CD4-positive, alpha-beta memory T cell\n", - " 10x 5' v1\n", - " normal\n", - " Homo sapiens\n", - " male\n", - " blood\n", - " unknown\n", - " 51-year-old human stage\n", - " \n", - " \n", - " TTTGTCATCTTAACCT-16_4\n", - " UBERON:0000178\n", - " naive B cell\n", - " MONDO:0100096\n", - " 55.0\n", - " 3.0\n", - " HGR0000051\n", - " Critical\n", - " 0.082405\n", - " False\n", - " 10.0\n", - " ...\n", - " NCBITaxon:9606\n", - " cell\n", - " naive B cell\n", - " 10x 5' v1\n", - " COVID-19\n", - " Homo sapiens\n", - " male\n", - " blood\n", - " European\n", - " 55-year-old human stage\n", - " \n", " \n", "\n", - "

246964 rows × 30 columns

\n", + "

5 rows × 30 columns

\n", "" ], "text/plain": [ - " tissue_ontology_term_id \\\n", - "AAACCTGAGACGACGT-1_1 UBERON:0000178 \n", - "AAACCTGAGCTAGTTC-1_1 UBERON:0000178 \n", - "AAACCTGCATAGACTC-1_1 UBERON:0000178 \n", - "AAACCTGCATTAACCG-1_1 UBERON:0000178 \n", - "AAACCTGGTCATCGGC-1_1 UBERON:0000178 \n", - "... ... \n", - "TTTGTCACAAGAGGCT-16_4 UBERON:0000178 \n", - "TTTGTCACACGTCTCT-16_4 UBERON:0000178 \n", - "TTTGTCACAGGTCGTC-16_4 UBERON:0000178 \n", - "TTTGTCAGTAAATGAC-16_4 UBERON:0000178 \n", - "TTTGTCATCTTAACCT-16_4 UBERON:0000178 \n", - "\n", - " author_cell_type \\\n", - "AAACCTGAGACGACGT-1_1 naive B cell \n", - "AAACCTGAGCTAGTTC-1_1 naive B cell \n", - "AAACCTGCATAGACTC-1_1 memory B cell \n", - "AAACCTGCATTAACCG-1_1 naive B cell \n", - "AAACCTGGTCATCGGC-1_1 gamma-delta T cell \n", - "... ... \n", - "TTTGTCACAAGAGGCT-16_4 memory B cell \n", - "TTTGTCACACGTCTCT-16_4 naive CD8+ T cell \n", - "TTTGTCACAGGTCGTC-16_4 naive CD8+ T cell \n", - "TTTGTCAGTAAATGAC-16_4 CD4-positive, alpha-beta memory T cell \n", - "TTTGTCATCTTAACCT-16_4 naive B cell \n", + " tissue_ontology_term_id author_cell_type \\\n", + "AAACCTGAGACGACGT-1_1 UBERON:0000178 naive B cell \n", + "AAACCTGAGCTAGTTC-1_1 UBERON:0000178 naive B cell \n", + "AAACCTGCATAGACTC-1_1 UBERON:0000178 memory B cell \n", + "AAACCTGCATTAACCG-1_1 UBERON:0000178 naive B cell \n", + "AAACCTGGTCATCGGC-1_1 UBERON:0000178 gamma-delta T cell \n", "\n", - " disease_ontology_term_id age days_since_hospitalized \\\n", - "AAACCTGAGACGACGT-1_1 PATO:0000461 32.0 \n", - "AAACCTGAGCTAGTTC-1_1 MONDO:0100096 37.0 6.0 \n", - "AAACCTGCATAGACTC-1_1 PATO:0000461 32.0 \n", - "AAACCTGCATTAACCG-1_1 MONDO:0100096 54.0 1.0 \n", - "AAACCTGGTCATCGGC-1_1 MONDO:0100096 55.0 1.0 \n", - "... ... ... ... \n", - "TTTGTCACAAGAGGCT-16_4 PATO:0000461 73.0 \n", - "TTTGTCACACGTCTCT-16_4 MONDO:0100096 49.0 0.0 \n", - "TTTGTCACAGGTCGTC-16_4 MONDO:0100096 53.0 2.0 \n", - "TTTGTCAGTAAATGAC-16_4 PATO:0000461 51.0 \n", - "TTTGTCATCTTAACCT-16_4 MONDO:0100096 55.0 3.0 \n", + " disease_ontology_term_id age days_since_hospitalized \\\n", + "AAACCTGAGACGACGT-1_1 PATO:0000461 32.0 \n", + "AAACCTGAGCTAGTTC-1_1 MONDO:0100096 37.0 6.0 \n", + "AAACCTGCATAGACTC-1_1 PATO:0000461 32.0 \n", + "AAACCTGCATTAACCG-1_1 MONDO:0100096 54.0 1.0 \n", + "AAACCTGGTCATCGGC-1_1 MONDO:0100096 55.0 1.0 \n", "\n", - " donor_id severity dsm_severity_score \\\n", - "AAACCTGAGACGACGT-1_1 AA220907 NaN \n", - "AAACCTGAGCTAGTTC-1_1 HGR0000079 Critical NaN \n", - "AAACCTGCATAGACTC-1_1 AA220907 NaN \n", - "AAACCTGCATTAACCG-1_1 HGR0000143 Critical 1.674056 \n", - "AAACCTGGTCATCGGC-1_1 HGR0000083 Moderate -1.950858 \n", - "... ... ... ... \n", - "TTTGTCACAAGAGGCT-16_4 SHD5 NaN \n", - "TTTGTCACACGTCTCT-16_4 HGR0000142 Critical -0.617735 \n", - "TTTGTCACAGGTCGTC-16_4 HGR0000134 Critical -1.925448 \n", - "TTTGTCAGTAAATGAC-16_4 SHD1 NaN \n", - "TTTGTCATCTTAACCT-16_4 HGR0000051 Critical 0.082405 \n", + " donor_id severity dsm_severity_score \\\n", + "AAACCTGAGACGACGT-1_1 AA220907 NaN \n", + "AAACCTGAGCTAGTTC-1_1 HGR0000079 Critical NaN \n", + "AAACCTGCATAGACTC-1_1 AA220907 NaN \n", + "AAACCTGCATTAACCG-1_1 HGR0000143 Critical 1.674056 \n", + "AAACCTGGTCATCGGC-1_1 HGR0000083 Moderate -1.950858 \n", "\n", - " ever_admitted_to_icu days_since_onset ... \\\n", - "AAACCTGAGACGACGT-1_1 ... \n", - "AAACCTGAGCTAGTTC-1_1 False 30.0 ... \n", - "AAACCTGCATAGACTC-1_1 ... \n", - "AAACCTGCATTAACCG-1_1 True 8.0 ... \n", - "AAACCTGGTCATCGGC-1_1 False 6.0 ... \n", - "... ... ... ... \n", - "TTTGTCACAAGAGGCT-16_4 ... \n", - "TTTGTCACACGTCTCT-16_4 False 12.0 ... \n", - "TTTGTCACAGGTCGTC-16_4 False 16.0 ... \n", - "TTTGTCAGTAAATGAC-16_4 ... \n", - "TTTGTCATCTTAACCT-16_4 False 10.0 ... \n", + " ever_admitted_to_icu days_since_onset ... \\\n", + "AAACCTGAGACGACGT-1_1 ... \n", + "AAACCTGAGCTAGTTC-1_1 False 30.0 ... \n", + "AAACCTGCATAGACTC-1_1 ... \n", + "AAACCTGCATTAACCG-1_1 True 8.0 ... \n", + "AAACCTGGTCATCGGC-1_1 False 6.0 ... \n", "\n", - " organism_ontology_term_id suspension_type \\\n", - "AAACCTGAGACGACGT-1_1 NCBITaxon:9606 cell \n", - "AAACCTGAGCTAGTTC-1_1 NCBITaxon:9606 cell \n", - "AAACCTGCATAGACTC-1_1 NCBITaxon:9606 cell \n", - "AAACCTGCATTAACCG-1_1 NCBITaxon:9606 cell \n", - "AAACCTGGTCATCGGC-1_1 NCBITaxon:9606 cell \n", - "... ... ... \n", - "TTTGTCACAAGAGGCT-16_4 NCBITaxon:9606 cell \n", - "TTTGTCACACGTCTCT-16_4 NCBITaxon:9606 cell \n", - "TTTGTCACAGGTCGTC-16_4 NCBITaxon:9606 cell \n", - "TTTGTCAGTAAATGAC-16_4 NCBITaxon:9606 cell \n", - "TTTGTCATCTTAACCT-16_4 NCBITaxon:9606 cell \n", + " organism_ontology_term_id suspension_type \\\n", + "AAACCTGAGACGACGT-1_1 NCBITaxon:9606 cell \n", + "AAACCTGAGCTAGTTC-1_1 NCBITaxon:9606 cell \n", + "AAACCTGCATAGACTC-1_1 NCBITaxon:9606 cell \n", + "AAACCTGCATTAACCG-1_1 NCBITaxon:9606 cell \n", + "AAACCTGGTCATCGGC-1_1 NCBITaxon:9606 cell \n", "\n", - " cell_type \\\n", - "AAACCTGAGACGACGT-1_1 naive B cell \n", - "AAACCTGAGCTAGTTC-1_1 naive B cell \n", - "AAACCTGCATAGACTC-1_1 memory B cell \n", - "AAACCTGCATTAACCG-1_1 naive B cell \n", - "AAACCTGGTCATCGGC-1_1 gamma-delta T cell \n", - "... ... \n", - "TTTGTCACAAGAGGCT-16_4 memory B cell \n", - "TTTGTCACACGTCTCT-16_4 naive thymus-derived CD8-positive, alpha-beta ... \n", - "TTTGTCACAGGTCGTC-16_4 naive thymus-derived CD8-positive, alpha-beta ... \n", - "TTTGTCAGTAAATGAC-16_4 CD4-positive, alpha-beta memory T cell \n", - "TTTGTCATCTTAACCT-16_4 naive B cell \n", + " cell_type assay disease organism \\\n", + "AAACCTGAGACGACGT-1_1 naive B cell 10x 5' v1 normal Homo sapiens \n", + "AAACCTGAGCTAGTTC-1_1 naive B cell 10x 5' v1 COVID-19 Homo sapiens \n", + "AAACCTGCATAGACTC-1_1 memory B cell 10x 5' v1 normal Homo sapiens \n", + "AAACCTGCATTAACCG-1_1 naive B cell 10x 5' v1 COVID-19 Homo sapiens \n", + "AAACCTGGTCATCGGC-1_1 gamma-delta T cell 10x 5' v1 COVID-19 Homo sapiens \n", "\n", - " assay disease organism sex tissue \\\n", - "AAACCTGAGACGACGT-1_1 10x 5' v1 normal Homo sapiens female blood \n", - "AAACCTGAGCTAGTTC-1_1 10x 5' v1 COVID-19 Homo sapiens female blood \n", - "AAACCTGCATAGACTC-1_1 10x 5' v1 normal Homo sapiens female blood \n", - "AAACCTGCATTAACCG-1_1 10x 5' v1 COVID-19 Homo sapiens female blood \n", - "AAACCTGGTCATCGGC-1_1 10x 5' v1 COVID-19 Homo sapiens male blood \n", - "... ... ... ... ... ... \n", - "TTTGTCACAAGAGGCT-16_4 10x 5' v1 normal Homo sapiens male blood \n", - "TTTGTCACACGTCTCT-16_4 10x 5' v1 COVID-19 Homo sapiens male blood \n", - "TTTGTCACAGGTCGTC-16_4 10x 5' v1 COVID-19 Homo sapiens male blood \n", - "TTTGTCAGTAAATGAC-16_4 10x 5' v1 normal Homo sapiens male blood \n", - "TTTGTCATCTTAACCT-16_4 10x 5' v1 COVID-19 Homo sapiens male blood \n", + " sex tissue self_reported_ethnicity \\\n", + "AAACCTGAGACGACGT-1_1 female blood unknown \n", + "AAACCTGAGCTAGTTC-1_1 female blood European \n", + "AAACCTGCATAGACTC-1_1 female blood unknown \n", + "AAACCTGCATTAACCG-1_1 female blood East Asian \n", + "AAACCTGGTCATCGGC-1_1 male blood European \n", "\n", - " self_reported_ethnicity development_stage \n", - "AAACCTGAGACGACGT-1_1 unknown 32-year-old human stage \n", - "AAACCTGAGCTAGTTC-1_1 European 37-year-old human stage \n", - "AAACCTGCATAGACTC-1_1 unknown 32-year-old human stage \n", - "AAACCTGCATTAACCG-1_1 East Asian 54-year-old human stage \n", - "AAACCTGGTCATCGGC-1_1 European 55-year-old human stage \n", - "... ... ... \n", - "TTTGTCACAAGAGGCT-16_4 unknown 73-year-old human stage \n", - "TTTGTCACACGTCTCT-16_4 European 49-year-old human stage \n", - "TTTGTCACAGGTCGTC-16_4 European 53-year-old human stage \n", - "TTTGTCAGTAAATGAC-16_4 unknown 51-year-old human stage \n", - "TTTGTCATCTTAACCT-16_4 European 55-year-old human stage \n", + " development_stage \n", + "AAACCTGAGACGACGT-1_1 32-year-old human stage \n", + "AAACCTGAGCTAGTTC-1_1 37-year-old human stage \n", + "AAACCTGCATAGACTC-1_1 32-year-old human stage \n", + "AAACCTGCATTAACCG-1_1 54-year-old human stage \n", + "AAACCTGGTCATCGGC-1_1 55-year-old human stage \n", "\n", - "[246964 rows x 30 columns]" + "[5 rows x 30 columns]" ] }, "execution_count": 3, @@ -516,102 +313,27 @@ } ], "source": [ - "ade._anndata.obs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Avialable slims for minimal and full slim enrichment methods" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'name': 'blood_and_immune_upper_slim',\n", - " 'description': 'a subset of general classes related to blood and the immune system, primarily of hematopoietic origin'},\n", - " {'name': 'eye_upper_slim',\n", - " 'description': 'a subset of general classes related to specific cell types in the eye.'}]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ade.slim_list" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Avialable slims for contextual enrichment methods" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['UBERON:0000178']" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ade._AnndataEnricher__context_list" + "ade._anndata.obs[0:5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Pandas configuration to display all rows" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", + "### Enrichment\n", + "\n", + "Enrichment methods use the structure of the ontology to provide relevant semantic enrichment to cell type ontology annotation in the CxG Anndata file. Results are returned as a simple pandas dataframe.\n", + "\n", + "Users can choose from a range of techniques to limit enrichment to some relevant context.\n", "\n", - "pd.set_option('display.max_rows', None)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Enrichment" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ "#### Simple enrichment\n", - "Returns a DataFrame that is enriched with inferred relationships between terms in the seed. Subject and object terms are members of the seed terms." + "\n", + "In simple enichment the context is just the terms CL terms used in annotation." ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -773,7 +495,7 @@ "11 rdfs:subClassOf CL:0000084 T cell " ] }, - "execution_count": 7, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -782,17 +504,63 @@ "ade.simple_enrichment()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the returned dataframe, terms in the `obs.cell_type` field are listed in columns `s` and `s_label`. Columns `o` an `o_label` show which of these terms classify other terms used in `obs.cell_type`.\n", + "\n", + "We can use this get a list of all T cells in the anndata file.\n", + "\n", + "(TBA)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Using Slim context for enrichment\n", + "\n", + "The cell ontology contains a number of upper slims - sets of high level terms that can be used to summarise annotations with CL terms. To see which slims are available, we can run:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'name': 'blood_and_immune_upper_slim',\n", + " 'description': 'a subset of general classes related to blood and the immune system, primarily of hematopoietic origin'},\n", + " {'name': 'eye_upper_slim',\n", + " 'description': 'a subset of general classes related to specific cell types in the eye.'},\n", + " {'name': 'general_cell_types_upper_slim',\n", + " 'description': 'a subset of general classes of cell types in the cell ontology.'}]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ade.slim_list" + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Minimal slim enrichment\n", - "Returns a DataFrame that is enriched with inferred relationships between terms in the seed list and in an extended seed list. The extended seed list consists of terms from the seed list and terms from given slim lists, classes tagged with some specified ‘subset’ axiom." + "\n", + "As the dataset we are working with consists of immune cells, we will choose the blood_and_immune_upper_slim as context. (The method takes a list of slims, allowing them to be combined.)" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -837,8 +605,8 @@ " CL:0000787\n", " memory B cell\n", " rdfs:subClassOf\n", - " CL:0000842\n", - " mononuclear cell\n", + " CL:0000145\n", + " professional antigen presenting cell\n", " \n", " \n", " 2\n", @@ -853,8 +621,8 @@ " CL:0000787\n", " memory B cell\n", " rdfs:subClassOf\n", - " CL:0000145\n", - " professional antigen presenting cell\n", + " CL:0000842\n", + " mononuclear cell\n", " \n", " \n", " 4\n", @@ -869,32 +637,32 @@ " CL:0000788\n", " naive B cell\n", " rdfs:subClassOf\n", - " CL:0000236\n", - " B cell\n", + " CL:0000145\n", + " professional antigen presenting cell\n", " \n", " \n", " 6\n", " CL:0000788\n", " naive B cell\n", " rdfs:subClassOf\n", - " CL:0000145\n", - " professional antigen presenting cell\n", + " CL:0000236\n", + " B cell\n", " \n", " \n", " 7\n", " CL:0000798\n", " gamma-delta T cell\n", " rdfs:subClassOf\n", - " CL:0000084\n", - " T cell\n", + " CL:0000842\n", + " mononuclear cell\n", " \n", " \n", " 8\n", " CL:0000798\n", " gamma-delta T cell\n", " rdfs:subClassOf\n", - " CL:0000842\n", - " mononuclear cell\n", + " CL:0000084\n", + " T cell\n", " \n", " \n", " 9\n", @@ -909,8 +677,8 @@ " CL:0000809\n", " double-positive, alpha-beta thymocyte\n", " rdfs:subClassOf\n", - " CL:0002420\n", - " immature T cell\n", + " CL:0000789\n", + " alpha-beta T cell\n", " \n", " \n", " 11\n", @@ -925,48 +693,48 @@ " CL:0000809\n", " double-positive, alpha-beta thymocyte\n", " rdfs:subClassOf\n", - " CL:0000789\n", - " alpha-beta T cell\n", + " CL:0002420\n", + " immature T cell\n", " \n", " \n", " 13\n", " CL:0000813\n", " memory T cell\n", " rdfs:subClassOf\n", - " CL:0000842\n", - " mononuclear cell\n", + " CL:0000084\n", + " T cell\n", " \n", " \n", " 14\n", " CL:0000813\n", " memory T cell\n", " rdfs:subClassOf\n", - " CL:0000084\n", - " T cell\n", + " CL:0000842\n", + " mononuclear cell\n", " \n", " \n", " 15\n", " CL:0000815\n", " regulatory T cell\n", " rdfs:subClassOf\n", - " CL:0000842\n", - " mononuclear cell\n", + " CL:0000084\n", + " T cell\n", " \n", " \n", " 16\n", " CL:0000815\n", " regulatory T cell\n", " rdfs:subClassOf\n", - " CL:0000084\n", - " T cell\n", + " CL:0000842\n", + " mononuclear cell\n", " \n", " \n", " 17\n", " CL:0000895\n", " naive thymus-derived CD4-positive, alpha-beta ...\n", " rdfs:subClassOf\n", - " CL:0000789\n", - " alpha-beta T cell\n", + " CL:0000842\n", + " mononuclear cell\n", " \n", " \n", " 18\n", @@ -981,8 +749,8 @@ " CL:0000895\n", " naive thymus-derived CD4-positive, alpha-beta ...\n", " rdfs:subClassOf\n", - " CL:0000842\n", - " mononuclear cell\n", + " CL:0000789\n", + " alpha-beta T cell\n", " \n", " \n", " 20\n", @@ -1021,24 +789,24 @@ " CL:0000900\n", " naive thymus-derived CD8-positive, alpha-beta ...\n", " rdfs:subClassOf\n", - " CL:0000842\n", - " mononuclear cell\n", + " CL:0000084\n", + " T cell\n", " \n", " \n", " 25\n", " CL:0000900\n", " naive thymus-derived CD8-positive, alpha-beta ...\n", " rdfs:subClassOf\n", - " CL:0000084\n", - " T cell\n", + " CL:0000789\n", + " alpha-beta T cell\n", " \n", " \n", " 26\n", " CL:0000900\n", " naive thymus-derived CD8-positive, alpha-beta ...\n", " rdfs:subClassOf\n", - " CL:0000789\n", - " alpha-beta T cell\n", + " CL:0000842\n", + " mononuclear cell\n", " \n", " \n", " 27\n", @@ -1077,64 +845,64 @@ " CL:0000940\n", " mucosal invariant T cell\n", " rdfs:subClassOf\n", - " CL:0000789\n", - " alpha-beta T cell\n", + " CL:0000084\n", + " T cell\n", " \n", " \n", " 32\n", " CL:0000940\n", " mucosal invariant T cell\n", " rdfs:subClassOf\n", - " CL:0000842\n", - " mononuclear cell\n", + " CL:0000789\n", + " alpha-beta T cell\n", " \n", " \n", " 33\n", " CL:0000940\n", " mucosal invariant T cell\n", " rdfs:subClassOf\n", - " CL:0000084\n", - " T cell\n", + " CL:0000842\n", + " mononuclear cell\n", " \n", " \n", " 34\n", " CL:0000980\n", " plasmablast\n", " rdfs:subClassOf\n", - " CL:0000842\n", - " mononuclear cell\n", + " CL:0000236\n", + " B cell\n", " \n", " \n", " 35\n", " CL:0000980\n", " plasmablast\n", " rdfs:subClassOf\n", - " CL:0000236\n", - " B cell\n", + " CL:0000145\n", + " professional antigen presenting cell\n", " \n", " \n", " 36\n", " CL:0000980\n", " plasmablast\n", " rdfs:subClassOf\n", - " CL:0000145\n", - " professional antigen presenting cell\n", + " CL:0000842\n", + " mononuclear cell\n", " \n", " \n", " 37\n", " CL:0002489\n", " double negative thymocyte\n", " rdfs:subClassOf\n", - " CL:0002420\n", - " immature T cell\n", + " CL:0000842\n", + " mononuclear cell\n", " \n", " \n", " 38\n", " CL:0002489\n", " double negative thymocyte\n", " rdfs:subClassOf\n", - " CL:0000842\n", - " mononuclear cell\n", + " CL:0002420\n", + " immature T cell\n", " \n", " \n", " 39\n", @@ -1193,48 +961,48 @@ "\n", " p o o_label \n", "0 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "1 rdfs:subClassOf CL:0000842 mononuclear cell \n", + "1 rdfs:subClassOf CL:0000145 professional antigen presenting cell \n", "2 rdfs:subClassOf CL:0000236 B cell \n", - "3 rdfs:subClassOf CL:0000145 professional antigen presenting cell \n", + "3 rdfs:subClassOf CL:0000842 mononuclear cell \n", "4 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "5 rdfs:subClassOf CL:0000236 B cell \n", - "6 rdfs:subClassOf CL:0000145 professional antigen presenting cell \n", - "7 rdfs:subClassOf CL:0000084 T cell \n", - "8 rdfs:subClassOf CL:0000842 mononuclear cell \n", + "5 rdfs:subClassOf CL:0000145 professional antigen presenting cell \n", + "6 rdfs:subClassOf CL:0000236 B cell \n", + "7 rdfs:subClassOf CL:0000842 mononuclear cell \n", + "8 rdfs:subClassOf CL:0000084 T cell \n", "9 rdfs:subClassOf CL:0000084 T cell \n", - "10 rdfs:subClassOf CL:0002420 immature T cell \n", + "10 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", "11 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "12 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "13 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "14 rdfs:subClassOf CL:0000084 T cell \n", - "15 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "16 rdfs:subClassOf CL:0000084 T cell \n", - "17 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", + "12 rdfs:subClassOf CL:0002420 immature T cell \n", + "13 rdfs:subClassOf CL:0000084 T cell \n", + "14 rdfs:subClassOf CL:0000842 mononuclear cell \n", + "15 rdfs:subClassOf CL:0000084 T cell \n", + "16 rdfs:subClassOf CL:0000842 mononuclear cell \n", + "17 rdfs:subClassOf CL:0000842 mononuclear cell \n", "18 rdfs:subClassOf CL:0000084 T cell \n", - "19 rdfs:subClassOf CL:0000842 mononuclear cell \n", + "19 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", "20 rdfs:subClassOf CL:0000842 mononuclear cell \n", "21 rdfs:subClassOf CL:0000813 memory T cell \n", "22 rdfs:subClassOf CL:0000084 T cell \n", "23 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "24 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "25 rdfs:subClassOf CL:0000084 T cell \n", - "26 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", + "24 rdfs:subClassOf CL:0000084 T cell \n", + "25 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", + "26 rdfs:subClassOf CL:0000842 mononuclear cell \n", "27 rdfs:subClassOf CL:0000813 memory T cell \n", "28 rdfs:subClassOf CL:0000842 mononuclear cell \n", "29 rdfs:subClassOf CL:0000084 T cell \n", "30 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "31 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "32 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "33 rdfs:subClassOf CL:0000084 T cell \n", - "34 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "35 rdfs:subClassOf CL:0000236 B cell \n", - "36 rdfs:subClassOf CL:0000145 professional antigen presenting cell \n", - "37 rdfs:subClassOf CL:0002420 immature T cell \n", - "38 rdfs:subClassOf CL:0000842 mononuclear cell \n", + "31 rdfs:subClassOf CL:0000084 T cell \n", + "32 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", + "33 rdfs:subClassOf CL:0000842 mononuclear cell \n", + "34 rdfs:subClassOf CL:0000236 B cell \n", + "35 rdfs:subClassOf CL:0000145 professional antigen presenting cell \n", + "36 rdfs:subClassOf CL:0000842 mononuclear cell \n", + "37 rdfs:subClassOf CL:0000842 mononuclear cell \n", + "38 rdfs:subClassOf CL:0002420 immature T cell \n", "39 rdfs:subClassOf CL:0000084 T cell " ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -1243,17 +1011,46 @@ "ade.minimal_slim_enrichment([\"blood_and_immune_upper_slim\"])" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `s` column now includes terms from the slim as well as terms used in `obs.cell_type`, so we get mappings up to terms like 'B cell'" + ] + }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Full slim enrichment\n", - "Returns a DataFrame that is enriched with inferred relationships between terms in the seed list and in an extended seed list. The extended seed list consists of terms from the seed list and terms from given slim lists, classes tagged with some specified ‘subset’ axiom, with inferred terms via transitive subClassOf queries." + "\n", + "We can get a more extensive enrichment by using the `full_slim_enrichment` method. In this case we get mappings to all terms on the classification path up to the term in the slim." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "164" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "full_enrichment = ade.full_slim_enrichment([\"blood_and_immune_upper_slim\"])\n", + "len(full_enrichment)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -1306,20855 +1103,797 @@ " CL:0000787\n", " memory B cell\n", " rdfs:subClassOf\n", - " CL:0000785\n", - " mature B cell\n", + " CL:0000236\n", + " B cell\n", " \n", " \n", " 3\n", " CL:0000787\n", " memory B cell\n", " rdfs:subClassOf\n", - " CL:0000236\n", - " B cell\n", + " CL:0001201\n", + " B cell, CD19-positive\n", " \n", " \n", " 4\n", " CL:0000787\n", " memory B cell\n", " rdfs:subClassOf\n", - " CL:0000945\n", - " lymphocyte of B lineage\n", + " CL:0000542\n", + " lymphocyte\n", " \n", - " \n", - " 5\n", - " CL:0000787\n", - " memory B cell\n", - " rdfs:subClassOf\n", - " CL:0000785\n", - " mature B cell\n", + " \n", + "\n", + "" + ], + "text/plain": [ + " s s_label p o \\\n", + "0 CL:0000084 T cell rdfs:subClassOf CL:0000842 \n", + "1 CL:0000084 T cell rdfs:subClassOf CL:0000542 \n", + "2 CL:0000787 memory B cell rdfs:subClassOf CL:0000236 \n", + "3 CL:0000787 memory B cell rdfs:subClassOf CL:0001201 \n", + "4 CL:0000787 memory B cell rdfs:subClassOf CL:0000542 \n", + "\n", + " o_label \n", + "0 mononuclear cell \n", + "1 lymphocyte \n", + "2 B cell \n", + "3 B cell, CD19-positive \n", + "4 lymphocyte " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "full_enrichment[0:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Contextual enrichment\n", + "\n", + "The contextual enrichment method uses the anatomical context (obs.tissue) in the anndata file to define s context in CL.\n", + "\n", + "To demonstrate this we will use a second example in which the anatomical context (contents of the tissuer field) is kidney." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "#Using Integrated Single-nucleus and Single-cell RNA-seq of the Adult Human Kidney dataset\n", + "ade = AnndataEnricher.from_file_path(\"./blue_lake_kidney.h5ad\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ade._AnndataEnricher__context_list # Future versions will look up the name of the anatomical context term(s)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + "
ss_labelpoo_label
6CL:0000787memory B cell0CL:0000653podocyterdfs:subClassOfCL:0001201B cell, CD19-positiveCL:1000612kidney corpuscule cell
7CL:0000787memory B cell1CL:0000653podocyterdfs:subClassOfCL:0000785mature B cellCL:0002681kidney cortical cell
8CL:0000787memory B cell2CL:0000653podocyterdfs:subClassOfCL:0000236B cellCL:0002584renal cortical epithelial cell
9CL:0000787memory B cell3CL:0000653podocyterdfs:subClassOfCL:0000842mononuclear cellCL:0002681kidney cortical cell
10CL:0000787memory B cell4CL:0000653podocyterdfs:subClassOfCL:0001200lymphocyte of B lineage, CD19-positiveCL:1000746glomerular cell
11CL:0000787memory B cell5CL:0000653podocyterdfs:subClassOfCL:0001201B cell, CD19-positiveCL:1000612kidney corpuscule cell
12CL:0000787memory B cell6CL:0000653podocyterdfs:subClassOfCL:0000542lymphocyteCL:0002518kidney epithelial cell
13CL:0000787memory B cell7CL:0000653podocyterdfs:subClassOfCL:0000145professional antigen presenting cellCL:1000510kidney glomerular epithelial cell
14CL:0000788naive B cell8CL:0000653podocyterdfs:subClassOfCL:0000842mononuclear cellCL:1000497kidney cell
15CL:0000788naive B cell9CL:0000653podocyterdfs:subClassOfCL:0000945lymphocyte of B lineageCL:1000746glomerular cell
16CL:0000788naive B cell10CL:0000653podocyterdfs:subClassOfCL:0000542lymphocyteCL:1000450epithelial cell of glomerular capsule
17CL:0000788naive B cell11CL:0000653podocyterdfs:subClassOfCL:0000145professional antigen presenting cellCL:0002584renal cortical epithelial cell
18CL:0000788naive B cell12CL:0000653podocyterdfs:subClassOfCL:0001200lymphocyte of B lineage, CD19-positiveCL:1000449epithelial cell of nephron
19CL:0000788naive B cell13CL:0000653podocyterdfs:subClassOfCL:0000785mature B cellCL:1000510kidney glomerular epithelial cell
20CL:0000788naive B cell14CL:0000653podocyterdfs:subClassOfCL:0000236B cellCL:1000450epithelial cell of glomerular capsule
21CL:0000788naive B cell15CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:0000785mature B cellCL:0002681kidney cortical cell
22CL:0000788naive B cell16CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:0000236B cellCL:1000497kidney cell
23CL:0000788naive B cell17CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:0001201B cell, CD19-positiveCL:0002518kidney epithelial cell
24CL:0000788naive B cell18CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:0000785mature B cellCL:0002584renal cortical epithelial cell
25CL:0000788naive B cell19CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:0001201B cell, CD19-positiveCL:0002681kidney cortical cell
\n", + "
" + ], + "text/plain": [ + " s s_label p \\\n", + "0 CL:0000653 podocyte rdfs:subClassOf \n", + "1 CL:0000653 podocyte rdfs:subClassOf \n", + "2 CL:0000653 podocyte rdfs:subClassOf \n", + "3 CL:0000653 podocyte rdfs:subClassOf \n", + "4 CL:0000653 podocyte rdfs:subClassOf \n", + "5 CL:0000653 podocyte rdfs:subClassOf \n", + "6 CL:0000653 podocyte rdfs:subClassOf \n", + "7 CL:0000653 podocyte rdfs:subClassOf \n", + "8 CL:0000653 podocyte rdfs:subClassOf \n", + "9 CL:0000653 podocyte rdfs:subClassOf \n", + "10 CL:0000653 podocyte rdfs:subClassOf \n", + "11 CL:0000653 podocyte rdfs:subClassOf \n", + "12 CL:0000653 podocyte rdfs:subClassOf \n", + "13 CL:0000653 podocyte rdfs:subClassOf \n", + "14 CL:0000653 podocyte rdfs:subClassOf \n", + "15 CL:0002306 epithelial cell of proximal tubule rdfs:subClassOf \n", + "16 CL:0002306 epithelial cell of proximal tubule rdfs:subClassOf \n", + "17 CL:0002306 epithelial cell of proximal tubule rdfs:subClassOf \n", + "18 CL:0002306 epithelial cell of proximal tubule rdfs:subClassOf \n", + "19 CL:0002306 epithelial cell of proximal tubule rdfs:subClassOf \n", + "\n", + " o o_label \n", + "0 CL:1000612 kidney corpuscule cell \n", + "1 CL:0002681 kidney cortical cell \n", + "2 CL:0002584 renal cortical epithelial cell \n", + "3 CL:0002681 kidney cortical cell \n", + "4 CL:1000746 glomerular cell \n", + "5 CL:1000612 kidney corpuscule cell \n", + "6 CL:0002518 kidney epithelial cell \n", + "7 CL:1000510 kidney glomerular epithelial cell \n", + "8 CL:1000497 kidney cell \n", + "9 CL:1000746 glomerular cell \n", + "10 CL:1000450 epithelial cell of glomerular capsule \n", + "11 CL:0002584 renal cortical epithelial cell \n", + "12 CL:1000449 epithelial cell of nephron \n", + "13 CL:1000510 kidney glomerular epithelial cell \n", + "14 CL:1000450 epithelial cell of glomerular capsule \n", + "15 CL:0002681 kidney cortical cell \n", + "16 CL:1000497 kidney cell \n", + "17 CL:0002518 kidney epithelial cell \n", + "18 CL:0002584 renal cortical epithelial cell \n", + "19 CL:0002681 kidney cortical cell " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ade.contextual_slim_enrichment()[0:20]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "contextual_slim_enrichment enriches using all cell type terms from CL that are defined as part_of the anatomical context. For example, podocyte is classified as an \"epitheliual cell of the glomerular capsule\"." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## AnndataAnalyzer walkthrough" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Initialization\n", + "Let's import the necessary modules and initialize our AnndataAnalyzer" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "from pandasaurus_cxg.anndata_analyzer import AnndataAnalyzer" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "# temporarily using a placeholder schema for free text cell types \n", + "ada = AnndataAnalyzer(\"./immune_example.h5ad\", \"pandasaurus_cxg/schema/schema.json\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Analyzer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Co-annotation report\n", + "Generates a co-annotation report based on the provided schema. Each annotation (obs key:value pair) defines a set of cells in the matrix. If the cell sets defined by two annotations match (contain exactly the same cells), we record this as cluster_matches. If one cell set containts the other, we record this using a subcluster_of relationship. If the two sets partially overlap (intersect) we record this with a cluster_overlaps relationship." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
field_name1value1predicatefield_name2value2
26CL:0000798gamma-delta T cellrdfs:subClassOfCL:0000842mononuclear cell0author_cell_typenaive B cellcluster_matchescell_typenaive B cell
27CL:0000798gamma-delta T cellrdfs:subClassOfCL:0000084T cell1author_cell_typememory B cellcluster_matchescell_typememory B cell
28CL:0000798gamma-delta T cellrdfs:subClassOfCL:0000084T cell
29CL:00007982author_cell_typegamma-delta T cellrdfs:subClassOfCL:0000542lymphocyte
30CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0002420immature T cell
31CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000790immature alpha-beta T cell
32CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000790immature alpha-beta T cell
33CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000790immature alpha-beta T cell
34CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000893thymocyte
35CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000842mononuclear cell
36CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000893thymocyte
37CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0002420immature T cell
38CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0002420immature T cell
39CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000789alpha-beta T cell
40CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000542lymphocyte
41CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000789alpha-beta T cell
42CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000084T cell
43CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000789alpha-beta T cell
44CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000084T cell
45CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000790immature alpha-beta T cell
46CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000893thymocyte
47CL:0000813memory T cellrdfs:subClassOfCL:0000542lymphocyte
48CL:0000813memory T cellrdfs:subClassOfCL:0002419mature T cell
49CL:0000813memory T cellrdfs:subClassOfCL:0000084T cell
50CL:0000813memory T cellrdfs:subClassOfCL:0002419mature T cell
51CL:0000813memory T cellrdfs:subClassOfCL:0000842mononuclear cell
52CL:0000813memory T cellrdfs:subClassOfCL:0000084T cell
53CL:0000815regulatory T cellrdfs:subClassOfCL:0002419mature T cell
54CL:0000815regulatory T cellrdfs:subClassOfCL:0000084T cell
55CL:0000815regulatory T cellrdfs:subClassOfCL:0002419mature T cell
56CL:0000815regulatory T cellrdfs:subClassOfCL:0000842mononuclear cell
57CL:0000815regulatory T cellrdfs:subClassOfCL:0000084T cell
58CL:0000815regulatory T cellrdfs:subClassOfCL:0000542lymphocyte
59CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000789alpha-beta T cell
60CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000624CD4-positive, alpha-beta T cell
61CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000898naive T cell
62CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000898naive T cell
63CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0002419mature T cell
64CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000789alpha-beta T cell
65CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000542lymphocyte
66CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000842mononuclear cell
67CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0002419mature T cell
68CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000789alpha-beta T cell
69CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000624CD4-positive, alpha-beta T cell
70CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000624CD4-positive, alpha-beta T cell
71CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000791mature alpha-beta T cell
72CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000084T cell
73CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000791mature alpha-beta T cell
74CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000084T cell
75CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000791mature alpha-beta T cell
76CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000791mature alpha-beta T cell
77CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0002419mature T cell
78CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000842mononuclear cell
79CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000084T cell
80CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000789alpha-beta T cell
81CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0002419mature T cell
82CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000791mature alpha-beta T cell
83CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000789alpha-beta T cell
84CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000542lymphocyte
85CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000084T cell
86CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000813memory T cell
87CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000791mature alpha-beta T cell
88CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000813memory T cell
89CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000624CD4-positive, alpha-beta T cell
90CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000813memory T cell
91CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000624CD4-positive, alpha-beta T cell
92CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000789alpha-beta T cell
93CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000624CD4-positive, alpha-beta T cell
94CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000625CD8-positive, alpha-beta T cell
95CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0002419mature T cell
96CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000842mononuclear cell
97CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000789alpha-beta T cell
98CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000084T cell
99CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0002419mature T cell
100CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000789alpha-beta T cell
101CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000084T cell
102CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000898naive T cell
103CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000791mature alpha-beta T cell
104CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000898naive T cell
105CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000789alpha-beta T cell
106CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000542lymphocyte
107CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000791mature alpha-beta T cell
108CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000791mature alpha-beta T cell
109CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000625CD8-positive, alpha-beta T cell
110CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000625CD8-positive, alpha-beta T cell
111CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000084T cell
112CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000789alpha-beta T cell
113CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000084T cell
114CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000842mononuclear cell
115CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000789alpha-beta T cell
116CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000791mature alpha-beta T cell
117CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000789alpha-beta T cell
118CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000813memory T cell
119CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0002419mature T cell
120CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000791mature alpha-beta T cell
121CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000813memory T cell
122CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000625CD8-positive, alpha-beta T cell
123CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000813memory T cell
124CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000625CD8-positive, alpha-beta T cell
125CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000625CD8-positive, alpha-beta T cell
126CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000791mature alpha-beta T cell
127CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0002419mature T cell
128CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000542lymphocyte
129CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000789alpha-beta T cell
130CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000791mature alpha-beta T cell
131CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000084T cell
132CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000791mature alpha-beta T cell
133CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000789alpha-beta T cell
134CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000084T cell
135CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000542lymphocyte
136CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0002419mature T cell
137CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0002419mature T cell
138CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000791mature alpha-beta T cell
139CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000789alpha-beta T cell
140CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000842mononuclear cell
141CL:0000980plasmablastrdfs:subClassOfCL:0000542lymphocyte
142CL:0000980plasmablastrdfs:subClassOfCL:0000236B cell
143CL:0000980plasmablastrdfs:subClassOfCL:0000842mononuclear cell
144CL:0000980plasmablastrdfs:subClassOfCL:0000145professional antigen presenting cell
145CL:0000980plasmablastrdfs:subClassOfCL:0001201B cell, CD19-positive
146CL:0000980plasmablastrdfs:subClassOfCL:0000785mature B cell
147CL:0000980plasmablastrdfs:subClassOfCL:0000785mature B cell
148CL:0000980plasmablastrdfs:subClassOfCL:0000236B cell
149CL:0000980plasmablastrdfs:subClassOfCL:0001200lymphocyte of B lineage, CD19-positive
150CL:0000980plasmablastrdfs:subClassOfCL:0000946antibody secreting cell
151CL:0000980plasmablastrdfs:subClassOfCL:0000945lymphocyte of B lineage
152CL:0000980plasmablastrdfs:subClassOfCL:0001201B cell, CD19-positive
153CL:0000980plasmablastrdfs:subClassOfCL:0000785mature B cell
154CL:0002489double negative thymocyterdfs:subClassOfCL:0002420immature T cell
155CL:0002489double negative thymocyterdfs:subClassOfCL:0000084T cell
156CL:0002489double negative thymocyterdfs:subClassOfCL:0000893thymocyte
157CL:0002489double negative thymocyterdfs:subClassOfCL:0000842mononuclear cell
158CL:0002489double negative thymocyterdfs:subClassOfCL:0000542lymphocyte
159CL:0002489double negative thymocyterdfs:subClassOfCL:0000893thymocyte
160CL:0002489double negative thymocyterdfs:subClassOfCL:0002420immature T cell
161CL:0002489double negative thymocyterdfs:subClassOfCL:0000084T cell
162CL:0002489double negative thymocyterdfs:subClassOfCL:0000893thymocyte
163CL:0002489double negative thymocyterdfs:subClassOfCL:0002420immature T cell
\n", - "
" - ], - "text/plain": [ - " s s_label \\\n", - "0 CL:0000084 T cell \n", - "1 CL:0000084 T cell \n", - "2 CL:0000787 memory B cell \n", - "3 CL:0000787 memory B cell \n", - "4 CL:0000787 memory B cell \n", - "5 CL:0000787 memory B cell \n", - "6 CL:0000787 memory B cell \n", - "7 CL:0000787 memory B cell \n", - "8 CL:0000787 memory B cell \n", - "9 CL:0000787 memory B cell \n", - "10 CL:0000787 memory B cell \n", - "11 CL:0000787 memory B cell \n", - "12 CL:0000787 memory B cell \n", - "13 CL:0000787 memory B cell \n", - "14 CL:0000788 naive B cell \n", - "15 CL:0000788 naive B cell \n", - "16 CL:0000788 naive B cell \n", - "17 CL:0000788 naive B cell \n", - "18 CL:0000788 naive B cell \n", - "19 CL:0000788 naive B cell \n", - "20 CL:0000788 naive B cell \n", - "21 CL:0000788 naive B cell \n", - "22 CL:0000788 naive B cell \n", - "23 CL:0000788 naive B cell \n", - "24 CL:0000788 naive B cell \n", - "25 CL:0000788 naive B cell \n", - "26 CL:0000798 gamma-delta T cell \n", - "27 CL:0000798 gamma-delta T cell \n", - "28 CL:0000798 gamma-delta T cell \n", - "29 CL:0000798 gamma-delta T cell \n", - "30 CL:0000809 double-positive, alpha-beta thymocyte \n", - "31 CL:0000809 double-positive, alpha-beta thymocyte \n", - "32 CL:0000809 double-positive, alpha-beta thymocyte \n", - "33 CL:0000809 double-positive, alpha-beta thymocyte \n", - "34 CL:0000809 double-positive, alpha-beta thymocyte \n", - "35 CL:0000809 double-positive, alpha-beta thymocyte \n", - "36 CL:0000809 double-positive, alpha-beta thymocyte \n", - "37 CL:0000809 double-positive, alpha-beta thymocyte \n", - "38 CL:0000809 double-positive, alpha-beta thymocyte \n", - "39 CL:0000809 double-positive, alpha-beta thymocyte \n", - "40 CL:0000809 double-positive, alpha-beta thymocyte \n", - "41 CL:0000809 double-positive, alpha-beta thymocyte \n", - "42 CL:0000809 double-positive, alpha-beta thymocyte \n", - "43 CL:0000809 double-positive, alpha-beta thymocyte \n", - "44 CL:0000809 double-positive, alpha-beta thymocyte \n", - "45 CL:0000809 double-positive, alpha-beta thymocyte \n", - "46 CL:0000809 double-positive, alpha-beta thymocyte \n", - "47 CL:0000813 memory T cell \n", - "48 CL:0000813 memory T cell \n", - "49 CL:0000813 memory T cell \n", - "50 CL:0000813 memory T cell \n", - "51 CL:0000813 memory T cell \n", - "52 CL:0000813 memory T cell \n", - "53 CL:0000815 regulatory T cell \n", - "54 CL:0000815 regulatory T cell \n", - "55 CL:0000815 regulatory T cell \n", - "56 CL:0000815 regulatory T cell \n", - "57 CL:0000815 regulatory T cell \n", - "58 CL:0000815 regulatory T cell \n", - "59 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "60 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "61 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "62 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "63 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "64 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "65 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "66 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "67 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "68 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "69 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "70 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "71 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "72 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "73 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "74 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "75 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "76 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "77 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "78 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "79 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "80 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "81 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "82 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "83 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "84 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "85 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "86 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "87 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "88 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "89 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "90 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "91 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "92 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "93 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "94 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "95 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "96 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "97 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "98 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "99 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "100 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "101 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "102 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "103 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "104 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "105 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "106 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "107 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "108 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "109 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "110 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "111 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "112 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "113 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "114 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "115 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "116 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "117 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "118 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "119 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "120 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "121 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "122 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "123 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "124 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "125 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "126 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "127 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "128 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "129 CL:0000940 mucosal invariant T cell \n", - "130 CL:0000940 mucosal invariant T cell \n", - "131 CL:0000940 mucosal invariant T cell \n", - "132 CL:0000940 mucosal invariant T cell \n", - "133 CL:0000940 mucosal invariant T cell \n", - "134 CL:0000940 mucosal invariant T cell \n", - "135 CL:0000940 mucosal invariant T cell \n", - "136 CL:0000940 mucosal invariant T cell \n", - "137 CL:0000940 mucosal invariant T cell \n", - "138 CL:0000940 mucosal invariant T cell \n", - "139 CL:0000940 mucosal invariant T cell \n", - "140 CL:0000940 mucosal invariant T cell \n", - "141 CL:0000980 plasmablast \n", - "142 CL:0000980 plasmablast \n", - "143 CL:0000980 plasmablast \n", - "144 CL:0000980 plasmablast \n", - "145 CL:0000980 plasmablast \n", - "146 CL:0000980 plasmablast \n", - "147 CL:0000980 plasmablast \n", - "148 CL:0000980 plasmablast \n", - "149 CL:0000980 plasmablast \n", - "150 CL:0000980 plasmablast \n", - "151 CL:0000980 plasmablast \n", - "152 CL:0000980 plasmablast \n", - "153 CL:0000980 plasmablast \n", - "154 CL:0002489 double negative thymocyte \n", - "155 CL:0002489 double negative thymocyte \n", - "156 CL:0002489 double negative thymocyte \n", - "157 CL:0002489 double negative thymocyte \n", - "158 CL:0002489 double negative thymocyte \n", - "159 CL:0002489 double negative thymocyte \n", - "160 CL:0002489 double negative thymocyte \n", - "161 CL:0002489 double negative thymocyte \n", - "162 CL:0002489 double negative thymocyte \n", - "163 CL:0002489 double negative thymocyte \n", - "\n", - " p o o_label \n", - "0 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "1 rdfs:subClassOf CL:0000542 lymphocyte \n", - "2 rdfs:subClassOf CL:0000785 mature B cell \n", - "3 rdfs:subClassOf CL:0000236 B cell \n", - "4 rdfs:subClassOf CL:0000945 lymphocyte of B lineage \n", - "5 rdfs:subClassOf CL:0000785 mature B cell \n", - "6 rdfs:subClassOf CL:0001201 B cell, CD19-positive \n", - "7 rdfs:subClassOf CL:0000785 mature B cell \n", - "8 rdfs:subClassOf CL:0000236 B cell \n", - "9 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "10 rdfs:subClassOf CL:0001200 lymphocyte of B lineage, CD19-positive \n", - "11 rdfs:subClassOf CL:0001201 B cell, CD19-positive \n", - "12 rdfs:subClassOf CL:0000542 lymphocyte \n", - "13 rdfs:subClassOf CL:0000145 professional antigen presenting cell \n", - "14 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "15 rdfs:subClassOf CL:0000945 lymphocyte of B lineage \n", - "16 rdfs:subClassOf CL:0000542 lymphocyte \n", - "17 rdfs:subClassOf CL:0000145 professional antigen presenting cell \n", - "18 rdfs:subClassOf CL:0001200 lymphocyte of B lineage, CD19-positive \n", - "19 rdfs:subClassOf CL:0000785 mature B cell \n", - "20 rdfs:subClassOf CL:0000236 B cell \n", - "21 rdfs:subClassOf CL:0000785 mature B cell \n", - "22 rdfs:subClassOf CL:0000236 B cell \n", - "23 rdfs:subClassOf CL:0001201 B cell, CD19-positive \n", - "24 rdfs:subClassOf CL:0000785 mature B cell \n", - "25 rdfs:subClassOf CL:0001201 B cell, CD19-positive \n", - "26 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "27 rdfs:subClassOf CL:0000084 T cell \n", - "28 rdfs:subClassOf CL:0000084 T cell \n", - "29 rdfs:subClassOf CL:0000542 lymphocyte \n", - "30 rdfs:subClassOf CL:0002420 immature T cell \n", - "31 rdfs:subClassOf CL:0000790 immature alpha-beta T cell \n", - "32 rdfs:subClassOf CL:0000790 immature alpha-beta T cell \n", - "33 rdfs:subClassOf CL:0000790 immature alpha-beta T cell \n", - "34 rdfs:subClassOf CL:0000893 thymocyte \n", - "35 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "36 rdfs:subClassOf CL:0000893 thymocyte \n", - "37 rdfs:subClassOf CL:0002420 immature T cell \n", - "38 rdfs:subClassOf CL:0002420 immature T cell \n", - "39 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "40 rdfs:subClassOf CL:0000542 lymphocyte \n", - "41 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "42 rdfs:subClassOf CL:0000084 T cell \n", - "43 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "44 rdfs:subClassOf CL:0000084 T cell \n", - "45 rdfs:subClassOf CL:0000790 immature alpha-beta T cell \n", - "46 rdfs:subClassOf CL:0000893 thymocyte \n", - "47 rdfs:subClassOf CL:0000542 lymphocyte \n", - "48 rdfs:subClassOf CL:0002419 mature T cell \n", - "49 rdfs:subClassOf CL:0000084 T cell \n", - "50 rdfs:subClassOf CL:0002419 mature T cell \n", - "51 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "52 rdfs:subClassOf CL:0000084 T cell \n", - "53 rdfs:subClassOf CL:0002419 mature T cell \n", - "54 rdfs:subClassOf CL:0000084 T cell \n", - "55 rdfs:subClassOf CL:0002419 mature T cell \n", - "56 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "57 rdfs:subClassOf CL:0000084 T cell \n", - "58 rdfs:subClassOf CL:0000542 lymphocyte \n", - "59 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "60 rdfs:subClassOf CL:0000624 CD4-positive, alpha-beta T cell \n", - "61 rdfs:subClassOf CL:0000898 naive T cell \n", - "62 rdfs:subClassOf CL:0000898 naive T cell \n", - "63 rdfs:subClassOf CL:0002419 mature T cell \n", - "64 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "65 rdfs:subClassOf CL:0000542 lymphocyte \n", - "66 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "67 rdfs:subClassOf CL:0002419 mature T cell \n", - "68 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "69 rdfs:subClassOf CL:0000624 CD4-positive, alpha-beta T cell \n", - "70 rdfs:subClassOf CL:0000624 CD4-positive, alpha-beta T cell \n", - "71 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "72 rdfs:subClassOf CL:0000084 T cell \n", - "73 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "74 rdfs:subClassOf CL:0000084 T cell \n", - "75 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "76 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "77 rdfs:subClassOf CL:0002419 mature T cell \n", - "78 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "79 rdfs:subClassOf CL:0000084 T cell \n", - "80 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "81 rdfs:subClassOf CL:0002419 mature T cell \n", - "82 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "83 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "84 rdfs:subClassOf CL:0000542 lymphocyte \n", - "85 rdfs:subClassOf CL:0000084 T cell \n", - "86 rdfs:subClassOf CL:0000813 memory T cell \n", - "87 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "88 rdfs:subClassOf CL:0000813 memory T cell \n", - "89 rdfs:subClassOf CL:0000624 CD4-positive, alpha-beta T cell \n", - "90 rdfs:subClassOf CL:0000813 memory T cell \n", - "91 rdfs:subClassOf CL:0000624 CD4-positive, alpha-beta T cell \n", - "92 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "93 rdfs:subClassOf CL:0000624 CD4-positive, alpha-beta T cell \n", - "94 rdfs:subClassOf CL:0000625 CD8-positive, alpha-beta T cell \n", - "95 rdfs:subClassOf CL:0002419 mature T cell \n", - "96 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "97 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "98 rdfs:subClassOf CL:0000084 T cell \n", - "99 rdfs:subClassOf CL:0002419 mature T cell \n", - "100 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "101 rdfs:subClassOf CL:0000084 T cell \n", - "102 rdfs:subClassOf CL:0000898 naive T cell \n", - "103 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "104 rdfs:subClassOf CL:0000898 naive T cell \n", - "105 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "106 rdfs:subClassOf CL:0000542 lymphocyte \n", - "107 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "108 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "109 rdfs:subClassOf CL:0000625 CD8-positive, alpha-beta T cell \n", - "110 rdfs:subClassOf CL:0000625 CD8-positive, alpha-beta T cell \n", - "111 rdfs:subClassOf CL:0000084 T cell \n", - "112 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "113 rdfs:subClassOf CL:0000084 T cell \n", - "114 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "115 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "116 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "117 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "118 rdfs:subClassOf CL:0000813 memory T cell \n", - "119 rdfs:subClassOf CL:0002419 mature T cell \n", - "120 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "121 rdfs:subClassOf CL:0000813 memory T cell \n", - "122 rdfs:subClassOf CL:0000625 CD8-positive, alpha-beta T cell \n", - "123 rdfs:subClassOf CL:0000813 memory T cell \n", - "124 rdfs:subClassOf CL:0000625 CD8-positive, alpha-beta T cell \n", - "125 rdfs:subClassOf CL:0000625 CD8-positive, alpha-beta T cell \n", - "126 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "127 rdfs:subClassOf CL:0002419 mature T cell \n", - "128 rdfs:subClassOf CL:0000542 lymphocyte \n", - "129 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "130 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "131 rdfs:subClassOf CL:0000084 T cell \n", - "132 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "133 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "134 rdfs:subClassOf CL:0000084 T cell \n", - "135 rdfs:subClassOf CL:0000542 lymphocyte \n", - "136 rdfs:subClassOf CL:0002419 mature T cell \n", - "137 rdfs:subClassOf CL:0002419 mature T cell \n", - "138 rdfs:subClassOf CL:0000791 mature alpha-beta T cell \n", - "139 rdfs:subClassOf CL:0000789 alpha-beta T cell \n", - "140 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "141 rdfs:subClassOf CL:0000542 lymphocyte \n", - "142 rdfs:subClassOf CL:0000236 B cell \n", - "143 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "144 rdfs:subClassOf CL:0000145 professional antigen presenting cell \n", - "145 rdfs:subClassOf CL:0001201 B cell, CD19-positive \n", - "146 rdfs:subClassOf CL:0000785 mature B cell \n", - "147 rdfs:subClassOf CL:0000785 mature B cell \n", - "148 rdfs:subClassOf CL:0000236 B cell \n", - "149 rdfs:subClassOf CL:0001200 lymphocyte of B lineage, CD19-positive \n", - "150 rdfs:subClassOf CL:0000946 antibody secreting cell \n", - "151 rdfs:subClassOf CL:0000945 lymphocyte of B lineage \n", - "152 rdfs:subClassOf CL:0001201 B cell, CD19-positive \n", - "153 rdfs:subClassOf CL:0000785 mature B cell \n", - "154 rdfs:subClassOf CL:0002420 immature T cell \n", - "155 rdfs:subClassOf CL:0000084 T cell \n", - "156 rdfs:subClassOf CL:0000893 thymocyte \n", - "157 rdfs:subClassOf CL:0000842 mononuclear cell \n", - "158 rdfs:subClassOf CL:0000542 lymphocyte \n", - "159 rdfs:subClassOf CL:0000893 thymocyte \n", - "160 rdfs:subClassOf CL:0002420 immature T cell \n", - "161 rdfs:subClassOf CL:0000084 T cell \n", - "162 rdfs:subClassOf CL:0000893 thymocyte \n", - "163 rdfs:subClassOf CL:0002420 immature T cell " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ade.full_slim_enrichment([\"blood_and_immune_upper_slim\"])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Contextual enrichment\n", - "Returns a DataFrame that is enriched with inferred relationships between terms in the seed list and in an extended seed list. The extended seed list consists of terms from the seed list and all terms satisfied by some set of existential restrictions in the ubergraph (e.g. part_of some 'kidney')." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ss_labelpoo_label
0CL:0000798gamma-delta T cellrdfs:subClassOfCL:0000084T cell
1CL:0000809double-positive, alpha-beta thymocyterdfs:subClassOfCL:0000084T cell
2CL:0000813memory T cellrdfs:subClassOfCL:0000084T cell
3CL:0000815regulatory T cellrdfs:subClassOfCL:0000084T cell
4CL:0000895naive thymus-derived CD4-positive, alpha-beta ...rdfs:subClassOfCL:0000084T cell
5CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000084T cell
6CL:0000897CD4-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000813memory T cell
7CL:0000900naive thymus-derived CD8-positive, alpha-beta ...rdfs:subClassOfCL:0000084T cell
8CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000084T cell
9CL:0000909CD8-positive, alpha-beta memory T cellrdfs:subClassOfCL:0000813memory T cell
10CL:0000940mucosal invariant T cellrdfs:subClassOfCL:0000084T cell
11CL:0002489double negative thymocyterdfs:subClassOfCL:0000084T cell
\n", - "
" - ], - "text/plain": [ - " s s_label \\\n", - "0 CL:0000798 gamma-delta T cell \n", - "1 CL:0000809 double-positive, alpha-beta thymocyte \n", - "2 CL:0000813 memory T cell \n", - "3 CL:0000815 regulatory T cell \n", - "4 CL:0000895 naive thymus-derived CD4-positive, alpha-beta ... \n", - "5 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "6 CL:0000897 CD4-positive, alpha-beta memory T cell \n", - "7 CL:0000900 naive thymus-derived CD8-positive, alpha-beta ... \n", - "8 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "9 CL:0000909 CD8-positive, alpha-beta memory T cell \n", - "10 CL:0000940 mucosal invariant T cell \n", - "11 CL:0002489 double negative thymocyte \n", - "\n", - " p o o_label \n", - "0 rdfs:subClassOf CL:0000084 T cell \n", - "1 rdfs:subClassOf CL:0000084 T cell \n", - "2 rdfs:subClassOf CL:0000084 T cell \n", - "3 rdfs:subClassOf CL:0000084 T cell \n", - "4 rdfs:subClassOf CL:0000084 T cell \n", - "5 rdfs:subClassOf CL:0000084 T cell \n", - "6 rdfs:subClassOf CL:0000813 memory T cell \n", - "7 rdfs:subClassOf CL:0000084 T cell \n", - "8 rdfs:subClassOf CL:0000084 T cell \n", - "9 rdfs:subClassOf CL:0000813 memory T cell \n", - "10 rdfs:subClassOf CL:0000084 T cell \n", - "11 rdfs:subClassOf CL:0000084 T cell " - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ade.contextual_slim_enrichment()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Secondary Example" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Contexts of the dataset from tissue field are \n", - "['UBERON:0000362', 'UBERON:0001225', 'UBERON:0001228', 'UBERON:0002113']\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ss_labelpoo_label
0CL:0000653podocyterdfs:subClassOfCL:0002681kidney cortical cell
1CL:0000653podocyterdfs:subClassOfCL:1000450epithelial cell of glomerular capsule
2CL:0000653podocyterdfs:subClassOfCL:1000449epithelial cell of nephron
3CL:0000653podocyterdfs:subClassOfCL:0002681kidney cortical cell
4CL:0000653podocyterdfs:subClassOfCL:0002584renal cortical epithelial cell
5CL:0000653podocyterdfs:subClassOfCL:1000746glomerular cell
6CL:0000653podocyterdfs:subClassOfCL:1000746glomerular cell
7CL:0000653podocyterdfs:subClassOfCL:1000612kidney corpuscule cell
8CL:0000653podocyterdfs:subClassOfCL:1000510kidney glomerular epithelial cell
9CL:0000653podocyterdfs:subClassOfCL:1000510kidney glomerular epithelial cell
10CL:0000653podocyterdfs:subClassOfCL:1000450epithelial cell of glomerular capsule
11CL:0000653podocyterdfs:subClassOfCL:0002584renal cortical epithelial cell
12CL:0000653podocyterdfs:subClassOfCL:0002518kidney epithelial cell
13CL:0000653podocyterdfs:subClassOfCL:1000497kidney cell
14CL:0000653podocyterdfs:subClassOfCL:1000612kidney corpuscule cell
15CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:1000615kidney cortex tubule cell
16CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:1000494nephron tubule epithelial cell
17CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:1000507kidney tubule cell
18CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:1000449epithelial cell of nephron
19CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:0002518kidney epithelial cell
20CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:0002681kidney cortical cell
21CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:1000497kidney cell
22CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:0002681kidney cortical cell
23CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:0002584renal cortical epithelial cell
24CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:1000615kidney cortex tubule cell
25CL:0002306epithelial cell of proximal tubulerdfs:subClassOfCL:0002584renal cortical epithelial cell
26CL:1000452parietal epithelial cellrdfs:subClassOfCL:0002584renal cortical epithelial cell
27CL:1000452parietal epithelial cellrdfs:subClassOfCL:1000612kidney corpuscule cell
28CL:1000452parietal epithelial cellrdfs:subClassOfCL:0002518kidney epithelial cell
29CL:1000452parietal epithelial cellrdfs:subClassOfCL:0002681kidney cortical cell
30CL:1000452parietal epithelial cellrdfs:subClassOfCL:1000510kidney glomerular epithelial cell
31CL:1000452parietal epithelial cellrdfs:subClassOfCL:1000450epithelial cell of glomerular capsule
32CL:1000452parietal epithelial cellrdfs:subClassOfCL:1000497kidney cell
33CL:1000452parietal epithelial cellrdfs:subClassOfCL:0002584renal cortical epithelial cell
34CL:1000452parietal epithelial cellrdfs:subClassOfCL:1000510kidney glomerular epithelial cell
35CL:1000452parietal epithelial cellrdfs:subClassOfCL:1000746glomerular cell
36CL:1000452parietal epithelial cellrdfs:subClassOfCL:0002681kidney cortical cell
37CL:1000452parietal epithelial cellrdfs:subClassOfCL:1000612kidney corpuscule cell
38CL:1000452parietal epithelial cellrdfs:subClassOfCL:1000449epithelial cell of nephron
39CL:1000452parietal epithelial cellrdfs:subClassOfCL:1000450epithelial cell of glomerular capsule
40CL:1000452parietal epithelial cellrdfs:subClassOfCL:1000746glomerular cell
41CL:1000597papillary tips cellrdfs:subClassOfCL:1000504kidney medulla cell
42CL:1000597papillary tips cellrdfs:subClassOfCL:1000617kidney inner medulla cell
43CL:1000597papillary tips cellrdfs:subClassOfCL:1000497kidney cell
44CL:1000597papillary tips cellrdfs:subClassOfCL:1000505kidney pelvis cell
45CL:1000597papillary tips cellrdfs:subClassOfCL:1000617kidney inner medulla cell
46CL:1000597papillary tips cellrdfs:subClassOfCL:1000504kidney medulla cell
47CL:1000692kidney interstitial fibroblastrdfs:subClassOfCL:1000500kidney interstitial cell
48CL:1000692kidney interstitial fibroblastrdfs:subClassOfCL:1000497kidney cell
49CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:1000507kidney tubule cell
50CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:1000615kidney cortex tubule cell
51CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:0002584renal cortical epithelial cell
52CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:1000494nephron tubule epithelial cell
53CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:1000615kidney cortex tubule cell
54CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:1000497kidney cell
55CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:0002518kidney epithelial cell
56CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:0002584renal cortical epithelial cell
57CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:1000449epithelial cell of nephron
58CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:0002681kidney cortical cell
59CL:1000768kidney connecting tubule epithelial cellrdfs:subClassOfCL:0002681kidney cortical cell
60CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:0002584renal cortical epithelial cell
61CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:1000615kidney cortex tubule cell
62CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:1000497kidney cell
63CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:0002305epithelial cell of distal tubule
64CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:1000507kidney tubule cell
65CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:0002681kidney cortical cell
66CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:0002584renal cortical epithelial cell
67CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:1000615kidney cortex tubule cell
68CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:1000449epithelial cell of nephron
69CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:0002681kidney cortical cell
70CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:1000494nephron tubule epithelial cell
71CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:0002305epithelial cell of distal tubule
72CL:1000849kidney distal convoluted tubule epithelial cellrdfs:subClassOfCL:0002518kidney epithelial cell
73CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1000504kidney medulla cell
74CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1000497kidney cell
75CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:0002584renal cortical epithelial cell
76CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:0002681kidney cortical cell
77CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:0002584renal cortical epithelial cell
78CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:0002305epithelial cell of distal tubule
79CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1000615kidney cortex tubule cell
80CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1000909kidney loop of Henle epithelial cell
81CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:0002305epithelial cell of distal tubule
82CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1000494nephron tubule epithelial cell
83CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1000449epithelial cell of nephron
84CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1000504kidney medulla cell
85CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1001016kidney loop of Henle ascending limb epithelial...
86CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1000615kidney cortex tubule cell
87CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:0002518kidney epithelial cell
88CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1001016kidney loop of Henle ascending limb epithelial...
89CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:1000507kidney tubule cell
90CL:1001106kidney loop of Henle thick ascending limb epit...rdfs:subClassOfCL:0002681kidney cortical cell
91CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000497kidney cell
92CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1001016kidney loop of Henle ascending limb epithelial...
93CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1001016kidney loop of Henle ascending limb epithelial...
94CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:0002518kidney epithelial cell
95CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000909kidney loop of Henle epithelial cell
96CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000615kidney cortex tubule cell
97CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:0002305epithelial cell of distal tubule
98CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000507kidney tubule cell
99CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:0002305epithelial cell of distal tubule
100CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000494nephron tubule epithelial cell
101CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000449epithelial cell of nephron
102CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:0002681kidney cortical cell
103CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:0002584renal cortical epithelial cell
104CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:0002584renal cortical epithelial cell
105CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000617kidney inner medulla cell
106CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000504kidney medulla cell
107CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000615kidney cortex tubule cell
108CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000504kidney medulla cell
109CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:0002681kidney cortical cell
110CL:1001107kidney loop of Henle thin ascending limb epith...rdfs:subClassOfCL:1000617kidney inner medulla cell
111CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1000504kidney medulla cell
112CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:0002518kidney epithelial cell
113CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1000449epithelial cell of nephron
114CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1000616kidney outer medulla cell
115CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1000453epithelial cell of intermediate tubule
116CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1000497kidney cell
117CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1000494nephron tubule epithelial cell
118CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1001021kidney loop of Henle descending limb epithelia...
119CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1000504kidney medulla cell
120CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1000507kidney tubule cell
121CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1000616kidney outer medulla cell
122CL:1001111kidney loop of Henle thin descending limb epit...rdfs:subClassOfCL:1000909kidney loop of Henle epithelial cell
123CL:1001318renal interstitial pericyterdfs:subClassOfCL:1000500kidney interstitial cell
124CL:1001318renal interstitial pericyterdfs:subClassOfCL:1000497kidney cell
125CL:1001431kidney collecting duct principal cellrdfs:subClassOfCL:1000449epithelial cell of nephron
126CL:1001431kidney collecting duct principal cellrdfs:subClassOfCL:0005009renal principal cell
127CL:1001431kidney collecting duct principal cellrdfs:subClassOfCL:1001225kidney collecting duct cell
128CL:1001431kidney collecting duct principal cellrdfs:subClassOfCL:0002518kidney epithelial cell
129CL:1001431kidney collecting duct principal cellrdfs:subClassOfCL:1000454kidney collecting duct epithelial cell
130CL:1001431kidney collecting duct principal cellrdfs:subClassOfCL:1000497kidney cell
131CL:1001432kidney collecting duct intercalated cellrdfs:subClassOfCL:1000454kidney collecting duct epithelial cell
132CL:1001432kidney collecting duct intercalated cellrdfs:subClassOfCL:1000497kidney cell
133CL:1001432kidney collecting duct intercalated cellrdfs:subClassOfCL:1001225kidney collecting duct cell
134CL:1001432kidney collecting duct intercalated cellrdfs:subClassOfCL:0005010renal intercalated cell
135CL:1001432kidney collecting duct intercalated cellrdfs:subClassOfCL:0002518kidney epithelial cell
136CL:1001432kidney collecting duct intercalated cellrdfs:subClassOfCL:1000449epithelial cell of nephron
\n", - "
" - ], - "text/plain": [ - " s s_label \\\n", - "0 CL:0000653 podocyte \n", - "1 CL:0000653 podocyte \n", - "2 CL:0000653 podocyte \n", - "3 CL:0000653 podocyte \n", - "4 CL:0000653 podocyte \n", - "5 CL:0000653 podocyte \n", - "6 CL:0000653 podocyte \n", - "7 CL:0000653 podocyte \n", - "8 CL:0000653 podocyte \n", - "9 CL:0000653 podocyte \n", - "10 CL:0000653 podocyte \n", - "11 CL:0000653 podocyte \n", - "12 CL:0000653 podocyte \n", - "13 CL:0000653 podocyte \n", - "14 CL:0000653 podocyte \n", - "15 CL:0002306 epithelial cell of proximal tubule \n", - "16 CL:0002306 epithelial cell of proximal tubule \n", - "17 CL:0002306 epithelial cell of proximal tubule \n", - "18 CL:0002306 epithelial cell of proximal tubule \n", - "19 CL:0002306 epithelial cell of proximal tubule \n", - "20 CL:0002306 epithelial cell of proximal tubule \n", - "21 CL:0002306 epithelial cell of proximal tubule \n", - "22 CL:0002306 epithelial cell of proximal tubule \n", - "23 CL:0002306 epithelial cell of proximal tubule \n", - "24 CL:0002306 epithelial cell of proximal tubule \n", - "25 CL:0002306 epithelial cell of proximal tubule \n", - "26 CL:1000452 parietal epithelial cell \n", - "27 CL:1000452 parietal epithelial cell \n", - "28 CL:1000452 parietal epithelial cell \n", - "29 CL:1000452 parietal epithelial cell \n", - "30 CL:1000452 parietal epithelial cell \n", - "31 CL:1000452 parietal epithelial cell \n", - "32 CL:1000452 parietal epithelial cell \n", - "33 CL:1000452 parietal epithelial cell \n", - "34 CL:1000452 parietal epithelial cell \n", - "35 CL:1000452 parietal epithelial cell \n", - "36 CL:1000452 parietal epithelial cell \n", - "37 CL:1000452 parietal epithelial cell \n", - "38 CL:1000452 parietal epithelial cell \n", - "39 CL:1000452 parietal epithelial cell \n", - "40 CL:1000452 parietal epithelial cell \n", - "41 CL:1000597 papillary tips cell \n", - "42 CL:1000597 papillary tips cell \n", - "43 CL:1000597 papillary tips cell \n", - "44 CL:1000597 papillary tips cell \n", - "45 CL:1000597 papillary tips cell \n", - "46 CL:1000597 papillary tips cell \n", - "47 CL:1000692 kidney interstitial fibroblast \n", - "48 CL:1000692 kidney interstitial fibroblast \n", - "49 CL:1000768 kidney connecting tubule epithelial cell \n", - "50 CL:1000768 kidney connecting tubule epithelial cell \n", - "51 CL:1000768 kidney connecting tubule epithelial cell \n", - "52 CL:1000768 kidney connecting tubule epithelial cell \n", - "53 CL:1000768 kidney connecting tubule epithelial cell \n", - "54 CL:1000768 kidney connecting tubule epithelial cell \n", - "55 CL:1000768 kidney connecting tubule epithelial cell \n", - "56 CL:1000768 kidney connecting tubule epithelial cell \n", - "57 CL:1000768 kidney connecting tubule epithelial cell \n", - "58 CL:1000768 kidney connecting tubule epithelial cell \n", - "59 CL:1000768 kidney connecting tubule epithelial cell \n", - "60 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "61 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "62 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "63 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "64 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "65 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "66 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "67 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "68 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "69 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "70 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "71 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "72 CL:1000849 kidney distal convoluted tubule epithelial cell \n", - "73 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "74 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "75 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "76 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "77 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "78 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "79 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "80 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "81 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "82 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "83 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "84 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "85 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "86 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "87 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "88 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "89 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "90 CL:1001106 kidney loop of Henle thick ascending limb epit... \n", - "91 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "92 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "93 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "94 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "95 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "96 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "97 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "98 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "99 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "100 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "101 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "102 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "103 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "104 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "105 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "106 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "107 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "108 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "109 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "110 CL:1001107 kidney loop of Henle thin ascending limb epith... \n", - "111 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "112 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "113 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "114 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "115 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "116 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "117 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "118 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "119 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "120 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "121 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "122 CL:1001111 kidney loop of Henle thin descending limb epit... \n", - "123 CL:1001318 renal interstitial pericyte \n", - "124 CL:1001318 renal interstitial pericyte \n", - "125 CL:1001431 kidney collecting duct principal cell \n", - "126 CL:1001431 kidney collecting duct principal cell \n", - "127 CL:1001431 kidney collecting duct principal cell \n", - "128 CL:1001431 kidney collecting duct principal cell \n", - "129 CL:1001431 kidney collecting duct principal cell \n", - "130 CL:1001431 kidney collecting duct principal cell \n", - "131 CL:1001432 kidney collecting duct intercalated cell \n", - "132 CL:1001432 kidney collecting duct intercalated cell \n", - "133 CL:1001432 kidney collecting duct intercalated cell \n", - "134 CL:1001432 kidney collecting duct intercalated cell \n", - "135 CL:1001432 kidney collecting duct intercalated cell \n", - "136 CL:1001432 kidney collecting duct intercalated cell \n", - "\n", - " p o \\\n", - "0 rdfs:subClassOf CL:0002681 \n", - "1 rdfs:subClassOf CL:1000450 \n", - "2 rdfs:subClassOf CL:1000449 \n", - "3 rdfs:subClassOf CL:0002681 \n", - "4 rdfs:subClassOf CL:0002584 \n", - "5 rdfs:subClassOf CL:1000746 \n", - "6 rdfs:subClassOf CL:1000746 \n", - "7 rdfs:subClassOf CL:1000612 \n", - "8 rdfs:subClassOf CL:1000510 \n", - "9 rdfs:subClassOf CL:1000510 \n", - "10 rdfs:subClassOf CL:1000450 \n", - "11 rdfs:subClassOf CL:0002584 \n", - "12 rdfs:subClassOf CL:0002518 \n", - "13 rdfs:subClassOf CL:1000497 \n", - "14 rdfs:subClassOf CL:1000612 \n", - "15 rdfs:subClassOf CL:1000615 \n", - "16 rdfs:subClassOf CL:1000494 \n", - "17 rdfs:subClassOf CL:1000507 \n", - "18 rdfs:subClassOf CL:1000449 \n", - "19 rdfs:subClassOf CL:0002518 \n", - "20 rdfs:subClassOf CL:0002681 \n", - "21 rdfs:subClassOf CL:1000497 \n", - "22 rdfs:subClassOf CL:0002681 \n", - "23 rdfs:subClassOf CL:0002584 \n", - "24 rdfs:subClassOf CL:1000615 \n", - "25 rdfs:subClassOf CL:0002584 \n", - "26 rdfs:subClassOf CL:0002584 \n", - "27 rdfs:subClassOf CL:1000612 \n", - "28 rdfs:subClassOf CL:0002518 \n", - "29 rdfs:subClassOf CL:0002681 \n", - "30 rdfs:subClassOf CL:1000510 \n", - "31 rdfs:subClassOf CL:1000450 \n", - "32 rdfs:subClassOf CL:1000497 \n", - "33 rdfs:subClassOf CL:0002584 \n", - "34 rdfs:subClassOf CL:1000510 \n", - "35 rdfs:subClassOf CL:1000746 \n", - "36 rdfs:subClassOf CL:0002681 \n", - "37 rdfs:subClassOf CL:1000612 \n", - "38 rdfs:subClassOf CL:1000449 \n", - "39 rdfs:subClassOf CL:1000450 \n", - "40 rdfs:subClassOf CL:1000746 \n", - "41 rdfs:subClassOf CL:1000504 \n", - "42 rdfs:subClassOf CL:1000617 \n", - "43 rdfs:subClassOf CL:1000497 \n", - "44 rdfs:subClassOf CL:1000505 \n", - "45 rdfs:subClassOf CL:1000617 \n", - "46 rdfs:subClassOf CL:1000504 \n", - "47 rdfs:subClassOf CL:1000500 \n", - "48 rdfs:subClassOf CL:1000497 \n", - "49 rdfs:subClassOf CL:1000507 \n", - "50 rdfs:subClassOf CL:1000615 \n", - "51 rdfs:subClassOf CL:0002584 \n", - "52 rdfs:subClassOf CL:1000494 \n", - "53 rdfs:subClassOf CL:1000615 \n", - "54 rdfs:subClassOf CL:1000497 \n", - "55 rdfs:subClassOf CL:0002518 \n", - "56 rdfs:subClassOf CL:0002584 \n", - "57 rdfs:subClassOf CL:1000449 \n", - "58 rdfs:subClassOf CL:0002681 \n", - "59 rdfs:subClassOf CL:0002681 \n", - "60 rdfs:subClassOf CL:0002584 \n", - "61 rdfs:subClassOf CL:1000615 \n", - "62 rdfs:subClassOf CL:1000497 \n", - "63 rdfs:subClassOf CL:0002305 \n", - "64 rdfs:subClassOf CL:1000507 \n", - "65 rdfs:subClassOf CL:0002681 \n", - "66 rdfs:subClassOf CL:0002584 \n", - "67 rdfs:subClassOf CL:1000615 \n", - "68 rdfs:subClassOf CL:1000449 \n", - "69 rdfs:subClassOf CL:0002681 \n", - "70 rdfs:subClassOf CL:1000494 \n", - "71 rdfs:subClassOf CL:0002305 \n", - "72 rdfs:subClassOf CL:0002518 \n", - "73 rdfs:subClassOf CL:1000504 \n", - "74 rdfs:subClassOf CL:1000497 \n", - "75 rdfs:subClassOf CL:0002584 \n", - "76 rdfs:subClassOf CL:0002681 \n", - "77 rdfs:subClassOf CL:0002584 \n", - "78 rdfs:subClassOf CL:0002305 \n", - "79 rdfs:subClassOf CL:1000615 \n", - "80 rdfs:subClassOf CL:1000909 \n", - "81 rdfs:subClassOf CL:0002305 \n", - "82 rdfs:subClassOf CL:1000494 \n", - "83 rdfs:subClassOf CL:1000449 \n", - "84 rdfs:subClassOf CL:1000504 \n", - "85 rdfs:subClassOf CL:1001016 \n", - "86 rdfs:subClassOf CL:1000615 \n", - "87 rdfs:subClassOf CL:0002518 \n", - "88 rdfs:subClassOf CL:1001016 \n", - "89 rdfs:subClassOf CL:1000507 \n", - "90 rdfs:subClassOf CL:0002681 \n", - "91 rdfs:subClassOf CL:1000497 \n", - "92 rdfs:subClassOf CL:1001016 \n", - "93 rdfs:subClassOf CL:1001016 \n", - "94 rdfs:subClassOf CL:0002518 \n", - "95 rdfs:subClassOf CL:1000909 \n", - "96 rdfs:subClassOf CL:1000615 \n", - "97 rdfs:subClassOf CL:0002305 \n", - "98 rdfs:subClassOf CL:1000507 \n", - "99 rdfs:subClassOf CL:0002305 \n", - "100 rdfs:subClassOf CL:1000494 \n", - "101 rdfs:subClassOf CL:1000449 \n", - "102 rdfs:subClassOf CL:0002681 \n", - "103 rdfs:subClassOf CL:0002584 \n", - "104 rdfs:subClassOf CL:0002584 \n", - "105 rdfs:subClassOf CL:1000617 \n", - "106 rdfs:subClassOf CL:1000504 \n", - "107 rdfs:subClassOf CL:1000615 \n", - "108 rdfs:subClassOf CL:1000504 \n", - "109 rdfs:subClassOf CL:0002681 \n", - "110 rdfs:subClassOf CL:1000617 \n", - "111 rdfs:subClassOf CL:1000504 \n", - "112 rdfs:subClassOf CL:0002518 \n", - "113 rdfs:subClassOf CL:1000449 \n", - "114 rdfs:subClassOf CL:1000616 \n", - "115 rdfs:subClassOf CL:1000453 \n", - "116 rdfs:subClassOf CL:1000497 \n", - "117 rdfs:subClassOf CL:1000494 \n", - "118 rdfs:subClassOf CL:1001021 \n", - "119 rdfs:subClassOf CL:1000504 \n", - "120 rdfs:subClassOf CL:1000507 \n", - "121 rdfs:subClassOf CL:1000616 \n", - "122 rdfs:subClassOf CL:1000909 \n", - "123 rdfs:subClassOf CL:1000500 \n", - "124 rdfs:subClassOf CL:1000497 \n", - "125 rdfs:subClassOf CL:1000449 \n", - "126 rdfs:subClassOf CL:0005009 \n", - "127 rdfs:subClassOf CL:1001225 \n", - "128 rdfs:subClassOf CL:0002518 \n", - "129 rdfs:subClassOf CL:1000454 \n", - "130 rdfs:subClassOf CL:1000497 \n", - "131 rdfs:subClassOf CL:1000454 \n", - "132 rdfs:subClassOf CL:1000497 \n", - "133 rdfs:subClassOf CL:1001225 \n", - "134 rdfs:subClassOf CL:0005010 \n", - "135 rdfs:subClassOf CL:0002518 \n", - "136 rdfs:subClassOf CL:1000449 \n", - "\n", - " o_label \n", - "0 kidney cortical cell \n", - "1 epithelial cell of glomerular capsule \n", - "2 epithelial cell of nephron \n", - "3 kidney cortical cell \n", - "4 renal cortical epithelial cell \n", - "5 glomerular cell \n", - "6 glomerular cell \n", - "7 kidney corpuscule cell \n", - "8 kidney glomerular epithelial cell \n", - "9 kidney glomerular epithelial cell \n", - "10 epithelial cell of glomerular capsule \n", - "11 renal cortical epithelial cell \n", - "12 kidney epithelial cell \n", - "13 kidney cell \n", - "14 kidney corpuscule cell \n", - "15 kidney cortex tubule cell \n", - "16 nephron tubule epithelial cell \n", - "17 kidney tubule cell \n", - "18 epithelial cell of nephron \n", - "19 kidney epithelial cell \n", - "20 kidney cortical cell \n", - "21 kidney cell \n", - "22 kidney cortical cell \n", - "23 renal cortical epithelial cell \n", - "24 kidney cortex tubule cell \n", - "25 renal cortical epithelial cell \n", - "26 renal cortical epithelial cell \n", - "27 kidney corpuscule cell \n", - "28 kidney epithelial cell \n", - "29 kidney cortical cell \n", - "30 kidney glomerular epithelial cell \n", - "31 epithelial cell of glomerular capsule \n", - "32 kidney cell \n", - "33 renal cortical epithelial cell \n", - "34 kidney glomerular epithelial cell \n", - "35 glomerular cell \n", - "36 kidney cortical cell \n", - "37 kidney corpuscule cell \n", - "38 epithelial cell of nephron \n", - "39 epithelial cell of glomerular capsule \n", - "40 glomerular cell \n", - "41 kidney medulla cell \n", - "42 kidney inner medulla cell \n", - "43 kidney cell \n", - "44 kidney pelvis cell \n", - "45 kidney inner medulla cell \n", - "46 kidney medulla cell \n", - "47 kidney interstitial cell \n", - "48 kidney cell \n", - "49 kidney tubule cell \n", - "50 kidney cortex tubule cell \n", - "51 renal cortical epithelial cell \n", - "52 nephron tubule epithelial cell \n", - "53 kidney cortex tubule cell \n", - "54 kidney cell \n", - "55 kidney epithelial cell \n", - "56 renal cortical epithelial cell \n", - "57 epithelial cell of nephron \n", - "58 kidney cortical cell \n", - "59 kidney cortical cell \n", - "60 renal cortical epithelial cell \n", - "61 kidney cortex tubule cell \n", - "62 kidney cell \n", - "63 epithelial cell of distal tubule \n", - "64 kidney tubule cell \n", - "65 kidney cortical cell \n", - "66 renal cortical epithelial cell \n", - "67 kidney cortex tubule cell \n", - "68 epithelial cell of nephron \n", - "69 kidney cortical cell \n", - "70 nephron tubule epithelial cell \n", - "71 epithelial cell of distal tubule \n", - "72 kidney epithelial cell \n", - "73 kidney medulla cell \n", - "74 kidney cell \n", - "75 renal cortical epithelial cell \n", - "76 kidney cortical cell \n", - "77 renal cortical epithelial cell \n", - "78 epithelial cell of distal tubule \n", - "79 kidney cortex tubule cell \n", - "80 kidney loop of Henle epithelial cell \n", - "81 epithelial cell of distal tubule \n", - "82 nephron tubule epithelial cell \n", - "83 epithelial cell of nephron \n", - "84 kidney medulla cell \n", - "85 kidney loop of Henle ascending limb epithelial... \n", - "86 kidney cortex tubule cell \n", - "87 kidney epithelial cell \n", - "88 kidney loop of Henle ascending limb epithelial... \n", - "89 kidney tubule cell \n", - "90 kidney cortical cell \n", - "91 kidney cell \n", - "92 kidney loop of Henle ascending limb epithelial... \n", - "93 kidney loop of Henle ascending limb epithelial... \n", - "94 kidney epithelial cell \n", - "95 kidney loop of Henle epithelial cell \n", - "96 kidney cortex tubule cell \n", - "97 epithelial cell of distal tubule \n", - "98 kidney tubule cell \n", - "99 epithelial cell of distal tubule \n", - "100 nephron tubule epithelial cell \n", - "101 epithelial cell of nephron \n", - "102 kidney cortical cell \n", - "103 renal cortical epithelial cell \n", - "104 renal cortical epithelial cell \n", - "105 kidney inner medulla cell \n", - "106 kidney medulla cell \n", - "107 kidney cortex tubule cell \n", - "108 kidney medulla cell \n", - "109 kidney cortical cell \n", - "110 kidney inner medulla cell \n", - "111 kidney medulla cell \n", - "112 kidney epithelial cell \n", - "113 epithelial cell of nephron \n", - "114 kidney outer medulla cell \n", - "115 epithelial cell of intermediate tubule \n", - "116 kidney cell \n", - "117 nephron tubule epithelial cell \n", - "118 kidney loop of Henle descending limb epithelia... \n", - "119 kidney medulla cell \n", - "120 kidney tubule cell \n", - "121 kidney outer medulla cell \n", - "122 kidney loop of Henle epithelial cell \n", - "123 kidney interstitial cell \n", - "124 kidney cell \n", - "125 epithelial cell of nephron \n", - "126 renal principal cell \n", - "127 kidney collecting duct cell \n", - "128 kidney epithelial cell \n", - "129 kidney collecting duct epithelial cell \n", - "130 kidney cell \n", - "131 kidney collecting duct epithelial cell \n", - "132 kidney cell \n", - "133 kidney collecting duct cell \n", - "134 renal intercalated cell \n", - "135 kidney epithelial cell \n", - "136 epithelial cell of nephron " - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#Using Integrated Single-nucleus and Single-cell RNA-seq of the Adult Human Kidney dataset\n", - "ade = AnndataEnricher(\"test/data/human_kidney.h5ad\")\n", - "print(f\"\"\"Contexts of the dataset from tissue field are \n", - "{ade._AnndataEnricher__context_list}\"\"\")\n", - "ade.contextual_slim_enrichment()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## AnndataAnalyzer walkthrough" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Initialization\n", - "Let's import the necessary modules and initialize our AnndataAnalyzer" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "from pandasaurus_cxg.anndata_analyzer import AnndataAnalyzer" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "# temporarily using a placeholder schema for free text cell types \n", - "ada = AnndataAnalyzer(\"test/data/test_covid.h5ad\", \"pandasaurus_cxg/schema/schema.json\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Analyzer" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Co-annotation report\n", - "Generates a co-annotation report based on the provided schema." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
field_name1value1predicatefield_name2value2
0author_cell_typenaive B cellcluster_matchescell_typenaive B cell
1author_cell_typememory B cellcluster_matchescell_typememory B cell
2author_cell_typegamma-delta T cellcluster_matchescell_typegamma-delta T cell
3author_cell_typeplasmablastcluster_matchescell_typeplasmablast
4author_cell_typeregulatory T cellcluster_matchescell_typeregulatory T cell
5author_cell_typeCD4-positive, alpha-beta memory T cellcluster_matchescell_typeCD4-positive, alpha-beta memory T cell
6author_cell_typeCD8-positive, alpha-beta memory T cellcluster_matchescell_typeCD8-positive, alpha-beta memory T cell
7author_cell_typenaive CD8+ T cellcluster_matchescell_typenaive thymus-derived CD8-positive, alpha-beta ...
8author_cell_typenaive CD4+ T cellcluster_matchescell_typenaive thymus-derived CD4-positive, alpha-beta ...
9author_cell_typemucosal invariant T cell (MAIT)cluster_matchescell_typemucosal invariant T cell
10author_cell_typeTissueResMemTcluster_matchescell_typememory T cell
11author_cell_typedouble-positive T cell (DPT)cluster_matchescell_typedouble-positive, alpha-beta thymocyte
12author_cell_typedouble negative T cell (DNT)cluster_matchescell_typedouble negative thymocyte
13author_cell_typeTCRVbeta13.1poscluster_matchescell_typeT cell
\n", - "
" - ], - "text/plain": [ - " field_name1 value1 predicate \\\n", - "0 author_cell_type naive B cell cluster_matches \n", - "1 author_cell_type memory B cell cluster_matches \n", - "2 author_cell_type gamma-delta T cell cluster_matches \n", - "3 author_cell_type plasmablast cluster_matches \n", - "4 author_cell_type regulatory T cell cluster_matches \n", - "5 author_cell_type CD4-positive, alpha-beta memory T cell cluster_matches \n", - "6 author_cell_type CD8-positive, alpha-beta memory T cell cluster_matches \n", - "7 author_cell_type naive CD8+ T cell cluster_matches \n", - "8 author_cell_type naive CD4+ T cell cluster_matches \n", - "9 author_cell_type mucosal invariant T cell (MAIT) cluster_matches \n", - "10 author_cell_type TissueResMemT cluster_matches \n", - "11 author_cell_type double-positive T cell (DPT) cluster_matches \n", - "12 author_cell_type double negative T cell (DNT) cluster_matches \n", - "13 author_cell_type TCRVbeta13.1pos cluster_matches \n", - "\n", - " field_name2 value2 \n", - "0 cell_type naive B cell \n", - "1 cell_type memory B cell \n", - "2 cell_type gamma-delta T cell \n", - "3 cell_type plasmablast \n", - "4 cell_type regulatory T cell \n", - "5 cell_type CD4-positive, alpha-beta memory T cell \n", - "6 cell_type CD8-positive, alpha-beta memory T cell \n", - "7 cell_type naive thymus-derived CD8-positive, alpha-beta ... \n", - "8 cell_type naive thymus-derived CD4-positive, alpha-beta ... \n", - "9 cell_type mucosal invariant T cell \n", - "10 cell_type memory T cell \n", - "11 cell_type double-positive, alpha-beta thymocyte \n", - "12 cell_type double negative thymocyte \n", - "13 cell_type T cell " - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ada.co_annotation_report()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Secondary Example" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", + "
field_name1value1predicatefield_name2value2
0subclass.l3dPTcluster_matchessubclass.fullDegenerative Proximal Tubule Epithelial Cell
1subclass.l3aPTcluster_matchessubclass.fullAdaptive / Maladaptive / Repairing Proximal Tu...
2subclass.l3M-FIBcluster_matchessubclass.fullMedullary Fibroblast
3subclass.l3MDcluster_matchessubclass.fullMacula Densa Cell
4subclass.l3NKC/Tcluster_matchessubclass.fullNatural Killer Cell / Natural Killer T Cell
5subclass.l3tPC-ICcluster_matchessubclass.fullTransitional Principal-Intercalated Cell
6subclass.l3EC-DVRcluster_matchessubclass.fullDescending Vasa Recta Endothelial Cell
7subclass.l3M-TALcluster_matchessubclass.fullMedullary Thick Ascending Limb Cell
8subclass.l3CCD-IC-Acluster_matchessubclass.fullCortical Collecting Duct Intercalated Cell Type A
9subclass.l3dM-TALcluster_matchessubclass.fullDegenerative Medullary Thick Ascending Limb Cell
10subclass.l3EC-AVRcluster_matchessubclass.fullAscending Vasa Recta Endothelial Cell
11subclass.l3MAC-M2cluster_matchessubclass.fullM2 Macrophage
12subclass.l3cycPTcluster_matchessubclass.fullCycling Proximal Tubule Epithelial Cell
13subclass.l3OMCD-IC-Acluster_matchessubclass.fullOuter Medullary Collecting Duct Intercalated C...
14subclass.l3aTAL1subcluster_ofsubclass.fullAdaptive / Maladaptive / Repairing Thick Ascen...
15subclass.l3EC-AEAcluster_matchessubclass.fullAfferent / Efferent Arteriole Endothelial Cell
16subclass.l3DTL2cluster_matchessubclass.fullDescending Thin Limb Cell Type 2
17subclass.l3Ncluster_matchessubclass.fullNeutrophil
18subclass.l3PODcluster_matchessubclass.fullPodocyte
19subclass.l3ATLcluster_matchessubclass.fullAscending Thin Limb Cell
20subclass.l3DTL1cluster_matchessubclass.fullDescending Thin Limb Cell Type 1
21subclass.l3MDCcluster_matchessubclass.fullMonocyte-derived Cell
22subclass.l3CCD-PCcluster_matchessubclass.fullCortical Collecting Duct Principal Cell
23subclass.l3EC-PTCcluster_matchessubclass.fullPeritubular Capilary Endothelial Cell
24subclass.l3PT-S1/2cluster_matchessubclass.fullProximal Tubule Epithelial Cell Segment 1 / Se...
25subclass.l3PT-S3cluster_matchessubclass.fullProximal Tubule Epithelial Cell Segment 3
26subclass.l3C-TALcluster_matchessubclass.fullCortical Thick Ascending Limb Cell
27subclass.l3OMCD-PCcluster_matchessubclass.fullOuter Medullary Collecting Duct Principal Cell
28subclass.l3FIBcluster_matchessubclass.fullFibroblast
29subclass.l3dOMCD-PCcluster_matchessubclass.fullDegenerative Outer Medullary Collecting Duct P...
30subclass.l3Tcluster_matchessubclass.fullT Cell
31subclass.l3PLcluster_matchessubclass.fullPlasma Cell
32subclass.l3CNT-PCcluster_matchessubclass.fullConnecting Tubule Principal Cell
33subclass.l3DCT1cluster_matchessubclass.fullDistal Convoluted Tubule Cell Type 1
34subclass.l3dFIBcluster_matchessubclass.fullDegenerative Fibroblast
35subclass.l3dC-TALcluster_matchessubclass.fullDegenerative Cortical Thick Ascending Limb Cell
36subclass.l3VSMCcluster_matchessubclass.fullVascular Smooth Muscle Cell
37subclass.l3SC/NEUcluster_matchessubclass.fullSchwann Cell / Neural
38subclass.l3DTL3cluster_matchessubclass.fullDescending Thin Limb Cell Type 3
39subclass.l3EC-GCcluster_matchessubclass.fullGlomerular Capillary Endothelial Cell
40subclass.l3VSMC/Pcluster_matchessubclass.fullVascular Smooth Muscle Cell / Pericyte
41subclass.l3cycMNPcluster_matchessubclass.fullCycling Mononuclear Phagocyte
42subclass.l3MYOFcluster_matchessubclass.fullMyofibroblast
43subclass.l3dEC-PTCcluster_matchessubclass.fullDegenerative Peritubular Capilary Endothelial ...
44subclass.l3ncMONcluster_matchessubclass.fullNon-classical Monocyte
45subclass.l3cycECcluster_matchessubclass.fullCycling Endothelial Cell
46subclass.l3cDCcluster_matchessubclass.fullClassical Dendritic Cell
47subclass.l3EC-LYMcluster_matchessubclass.fullLymphatic Endothelial Cell
48subclass.l3DCT2cluster_matchessubclass.fullDistal Convoluted Tubule Cell Type 2
49subclass.l3MCcluster_matchessubclass.fullMesangial Cell
50subclass.l3IC-Bcluster_matchessubclass.fullIntercalated Cell Type B
51subclass.l3CNTcluster_matchessubclass.fullConnecting Tubule Cell
52subclass.l3MASTcluster_matchessubclass.fullMast Cell
53subclass.l3dVSMCcluster_matchessubclass.fullDegenerative Vascular Smooth Muscle Cell
54subclass.l3dATLcluster_matchessubclass.fullDegenerative Ascending Thin Limb Cell
55subclass.l3RENcluster_matchessubclass.fullRenin-positive Juxtaglomerular Granular Cell
56subclass.l3Bcluster_matchessubclass.fullB Cell
57subclass.l3aTAL2subcluster_ofsubclass.fullAdaptive / Maladaptive / Repairing Thick Ascen...
58subclass.l3dC-IC-Acluster_matchessubclass.fullDegenerative Cortical Intercalated Cell Type A
59subclass.l3dCNTcluster_matchessubclass.fullDegenerative Connecting Tubule Cell
60subclass.l3aFIBcluster_matchessubclass.fullAdaptive / Maladaptive / Repairing Fibroblast
61subclass.l3PECcluster_matchessubclass.fullParietal Epithelial Cell
62subclass.l3cycCNTcluster_matchessubclass.fullCycling Connecting Tubule Cell
63subclass.l3dIMCDcluster_matchessubclass.fullDegenerative Inner Medullary Collecting Duct Cell
64subclass.l3IMCDcluster_matchessubclass.fullInner Medullary Collecting Duct Cell
65subclass.l3dECcluster_matchessubclass.fullDegenerative Endothelial Cell
66subclass.l3dM-FIBcluster_matchessubclass.fullDegenerative Medullary Fibroblast
67subclass.l3CNT-IC-Acluster_matchessubclass.fullConnecting Tubule Intercalated Cell Type A
68subclass.l3cycDCTcluster_matchessubclass.fullCycling Distal Convoluted Tubule Cell
69subclass.l3dPODcluster_matchessubclass.fullDegenerative Podocyte
70subclass.l3pDCcluster_matchessubclass.fullPlasmacytoid Dendritic Cell
71subclass.l3dDTL3cluster_matchessubclass.fullDegenerative Descending Thin Limb Cell Type 3
72subclass.l3dDCTcluster_matchessubclass.fullDegenerative Distal Convoluted Tubule Cell
73subclass.l3cycMYOFcluster_matchessubclass.fullCycling Myofibroblast
74subclass.l3PapEcluster_matchessubclass.fullPapillary Tip Epithelial Cell
75subclass.l3cycNKC/Tcluster_matchessubclass.fullCycling Natural Killer Cell / Natural Killer T...
76subclass.l2dPTcluster_matchessubclass.fullDegenerative Proximal Tubule Epithelial Cell
77subclass.l2aPTcluster_matchessubclass.fullAdaptive / Maladaptive / Repairing Proximal Tu...
78subclass.l2M-FIBcluster_matchessubclass.fullMedullary Fibroblast
79subclass.l2MDcluster_matchessubclass.fullMacula Densa Cell
80subclass.l2NKC/Tcluster_matchessubclass.fullNatural Killer Cell / Natural Killer T Cell
81subclass.l2tPC-ICcluster_matchessubclass.fullTransitional Principal-Intercalated Cell
82subclass.l2EC-DVRcluster_matchessubclass.fullDescending Vasa Recta Endothelial Cell
83subclass.l2M-TALcluster_matchessubclass.fullMedullary Thick Ascending Limb Cell
84subclass.l2dM-TALcluster_matchessubclass.fullDegenerative Medullary Thick Ascending Limb Cell
85subclass.l2EC-AVRcluster_matchessubclass.fullAscending Vasa Recta Endothelial Cell
86subclass.l2MAC-M2cluster_matchessubclass.fullM2 Macrophage
87subclass.l2cycPTcluster_matchessubclass.fullCycling Proximal Tubule Epithelial Cell
88subclass.l2M-IC-Acluster_matchessubclass.fullOuter Medullary Collecting Duct Intercalated C...
89subclass.l2aTAL1subcluster_ofsubclass.fullAdaptive / Maladaptive / Repairing Thick Ascen...
90subclass.l2EC-AEAcluster_matchessubclass.fullAfferent / Efferent Arteriole Endothelial Cell
91subclass.l2DTL2cluster_matchessubclass.fullDescending Thin Limb Cell Type 2
92subclass.l2Ncluster_matchessubclass.fullNeutrophil
93subclass.l2PODcluster_matchessubclass.fullPodocyte
94subclass.l2ATLcluster_matchessubclass.fullAscending Thin Limb Cell
95subclass.l2DTL1cluster_matchessubclass.fullDescending Thin Limb Cell Type 1
96subclass.l2MDCcluster_matchessubclass.fullMonocyte-derived Cell
97subclass.l2C-PCcluster_matchessubclass.fullCortical Collecting Duct Principal Cell
98subclass.l2EC-PTCcluster_matchessubclass.fullPeritubular Capilary Endothelial Cell
99subclass.l2PT-S1/2cluster_matchessubclass.fullProximal Tubule Epithelial Cell Segment 1 / Se...
100subclass.l2PT-S3cluster_matchessubclass.fullProximal Tubule Epithelial Cell Segment 3
101subclass.l2C-TALcluster_matchessubclass.fullCortical Thick Ascending Limb Cell
102subclass.l2M-PCcluster_matchessubclass.fullOuter Medullary Collecting Duct Principal Cell
103subclass.l2FIBcluster_matchessubclass.fullFibroblast
104subclass.l2dM-PCcluster_matchessubclass.fullDegenerative Outer Medullary Collecting Duct P...
105subclass.l2Tcluster_matchessubclass.fullT Cell
106subclass.l2PLcluster_matchessubclass.fullPlasma Cell
107subclass.l2dFIBcluster_matchessubclass.fullDegenerative Fibroblast
108subclass.l2dC-TALcluster_matchessubclass.fullDegenerative Cortical Thick Ascending Limb Cell
109subclass.l2VSMCcluster_matchessubclass.fullVascular Smooth Muscle Cell
110subclass.l2SC/NEUcluster_matchessubclass.fullSchwann Cell / Neural
111subclass.l2DTL3cluster_matchessubclass.fullDescending Thin Limb Cell Type 3
112subclass.l2EC-GCcluster_matchessubclass.fullGlomerular Capillary Endothelial Cell
113subclass.l2VSMC/Pcluster_matchessubclass.fullVascular Smooth Muscle Cell / Pericyte
114subclass.l2cycMNPcluster_matchessubclass.fullCycling Mononuclear Phagocyte
115subclass.l2MYOFcluster_matchessubclass.fullMyofibroblast
116subclass.l2dEC-PTCcluster_matchessubclass.fullDegenerative Peritubular Capilary Endothelial ...
117subclass.l2ncMONcluster_matchessubclass.fullNon-classical Monocyte
118subclass.l2cycECcluster_matchessubclass.fullCycling Endothelial Cell
119subclass.l2cDCcluster_matchessubclass.fullClassical Dendritic Cell
120subclass.l2EC-LYMcluster_matchessubclass.fullLymphatic Endothelial Cell
121subclass.l2MCcluster_matchessubclass.fullMesangial Cell
122subclass.l2IC-Bcluster_matchessubclass.fullIntercalated Cell Type B
123subclass.l2MASTcluster_matchessubclass.fullMast Cell
124subclass.l2dVSMCcluster_matchessubclass.fullDegenerative Vascular Smooth Muscle Cell
125subclass.l2dATLcluster_matchessubclass.fullDegenerative Ascending Thin Limb Cell
126subclass.l2RENcluster_matchessubclass.fullRenin-positive Juxtaglomerular Granular Cell
127subclass.l2Bcluster_matchessubclass.fullB Cell
128subclass.l2aTAL2subcluster_ofsubclass.fullAdaptive / Maladaptive / Repairing Thick Ascen...
129subclass.l2dC-IC-Acluster_matchessubclass.fullDegenerative Cortical Intercalated Cell Type A
130subclass.l2dCNTcluster_matchessubclass.fullDegenerative Connecting Tubule Cell
131subclass.l2aFIBcluster_matchessubclass.fullAdaptive / Maladaptive / Repairing Fibroblast
132subclass.l2PECcluster_matchessubclass.fullParietal Epithelial Cell
133subclass.l2cycCNTcluster_matchessubclass.fullCycling Connecting Tubule Cell
134subclass.l2dIMCDcluster_matchessubclass.fullDegenerative Inner Medullary Collecting Duct Cell
135subclass.l2IMCDcluster_matchessubclass.fullInner Medullary Collecting Duct Cell
136subclass.l2dECcluster_matchessubclass.fullDegenerative Endothelial Cell
137subclass.l2dM-FIBcluster_matchessubclass.fullDegenerative Medullary Fibroblast
138subclass.l2cycDCTcluster_matchessubclass.fullCycling Distal Convoluted Tubule Cell
139subclass.l2dPODcluster_matchessubclass.fullDegenerative Podocyte
140subclass.l2pDCcluster_matchessubclass.fullPlasmacytoid Dendritic Cell
141subclass.l2dDTL3cluster_matchessubclass.fullDegenerative Descending Thin Limb Cell Type 3
142subclass.l2dDCTcluster_matchessubclass.fullDegenerative Distal Convoluted Tubule Cell
143subclass.l2cycMYOFcluster_matchessubclass.fullCycling Myofibroblast
144subclass.l2PapEcluster_matchessubclass.fullPapillary Tip Epithelial Cell
145subclass.l2cycNKC/Tcluster_matchessubclass.fullCycling Natural Killer Cell / Natural Killer T...
146subclass.l1NEUcluster_matchessubclass.fullSchwann Cell / Neural
147subclass.l1PECcluster_matchessubclass.fullParietal Epithelial Cell
148subclass.l1PapEcluster_matchessubclass.fullPapillary Tip Epithelial Cell
149state.l2transitioningcluster_matchessubclass.fullTransitional Principal-Intercalated Cell
150classneural cellscluster_matchessubclass.fullSchwann Cell / Neural
151cell_typeneural cellcluster_matchessubclass.fullSchwann Cell / Neural
152cell_typeparietal epithelial cellcluster_matchessubclass.fullParietal Epithelial Cell
153cell_typepapillary tips cellcluster_matchessubclass.fullPapillary Tip Epithelial Cell
154subclass.l2dPTcluster_matchessubclass.l3dPT
155subclass.l2aPTcluster_matchessubclass.l3aPT
156subclass.l2M-FIBcluster_matchessubclass.l3M-FIB
157subclass.l2MDcluster_matchessubclass.l3MD
158subclass.l2NKC/Tcluster_matchessubclass.l3NKC/T
159subclass.l2tPC-ICcluster_matchessubclass.l3tPC-IC
160subclass.l2EC-DVRcluster_matchessubclass.l3EC-DVR
161subclass.l2M-TALcluster_matchessubclass.l3M-TAL
162subclass.l2dM-TALcluster_matchessubclass.l3dM-TAL
163subclass.l2EC-AVRcluster_matchessubclass.l3EC-AVR
164subclass.l2MAC-M2cluster_matchessubclass.l3MAC-M2
165subclass.l2cycPTcluster_matchessubclass.l3cycPT
166subclass.l2M-IC-Acluster_matchessubclass.l3OMCD-IC-A
167subclass.l2aTAL1cluster_matchessubclass.l3aTAL1
168subclass.l2EC-AEAcluster_matchessubclass.l3EC-AEA
169subclass.l2DTL2cluster_matchessubclass.l3DTL2
170subclass.l2Ncluster_matchessubclass.l3N
171subclass.l2PODcluster_matchessubclass.l3POD
172subclass.l2ATLcluster_matchessubclass.l3ATL
173subclass.l2DTL1cluster_matchessubclass.l3DTL1
174subclass.l2MDCcluster_matchessubclass.l3MDC
175subclass.l2C-PCcluster_matchessubclass.l3CCD-PC
176subclass.l2EC-PTCcluster_matchessubclass.l3EC-PTC
177subclass.l2PT-S1/2cluster_matchessubclass.l3PT-S1/2
178subclass.l2PT-S3cluster_matchessubclass.l3PT-S3
179subclass.l2C-TALcluster_matchessubclass.l3C-TAL
180subclass.l2M-PCcluster_matchessubclass.l3OMCD-PC
181subclass.l2FIBcluster_matchessubclass.l3FIB
182subclass.l2dM-PCcluster_matchessubclass.l3dOMCD-PC
183subclass.l2Tcluster_matchessubclass.l3T
184subclass.l2PLcluster_matchessubclass.l3PL
185subclass.l2dFIBcluster_matchessubclass.l3dFIB
186subclass.l2dC-TALcluster_matchessubclass.l3dC-TAL
187subclass.l2VSMCcluster_matchessubclass.l3VSMC
188subclass.l2SC/NEUcluster_matchessubclass.l3SC/NEU
189subclass.l2DTL3cluster_matchessubclass.l3DTL3
190subclass.l2EC-GCcluster_matchessubclass.l3EC-GC
191subclass.l2VSMC/Pcluster_matchessubclass.l3VSMC/P
192subclass.l2cycMNPcluster_matchessubclass.l3cycMNP
193subclass.l2MYOFcluster_matchessubclass.l3MYOF
194subclass.l2dEC-PTCcluster_matchessubclass.l3dEC-PTC
195subclass.l2ncMONcluster_matchessubclass.l3ncMON
196subclass.l2cycECcluster_matchessubclass.l3cycEC
197subclass.l2cDCcluster_matchessubclass.l3cDC
198subclass.l2EC-LYMcluster_matchessubclass.l3EC-LYM
199subclass.l2MCcluster_matchessubclass.l3MC
200subclass.l2IC-Bcluster_matchessubclass.l3IC-B
201subclass.l2MASTcluster_matchessubclass.l3MAST
202subclass.l2dVSMCcluster_matchessubclass.l3dVSMC
203subclass.l2dATLcluster_matchessubclass.l3dATL
204subclass.l2RENcluster_matchessubclass.l3REN
205subclass.l2Bcluster_matchessubclass.l3B
206subclass.l2aTAL2cluster_matchessubclass.l3aTAL2
207subclass.l2dC-IC-Acluster_matchessubclass.l3dC-IC-A
208subclass.l2dCNTcluster_matchessubclass.l3dCNT
209subclass.l2aFIBcluster_matchessubclass.l3aFIB
210subclass.l2PECcluster_matchessubclass.l3PEC
211subclass.l2cycCNTcluster_matchessubclass.l3cycCNT
212subclass.l2dIMCDcluster_matchessubclass.l3dIMCD
213subclass.l2IMCDcluster_matchessubclass.l3IMCD
214subclass.l2dECcluster_matchessubclass.l3dEC
215subclass.l2dM-FIBcluster_matchessubclass.l3dM-FIB
216subclass.l2cycDCTcluster_matchessubclass.l3cycDCT
217subclass.l2dPODcluster_matchessubclass.l3dPOD
218subclass.l2pDCcluster_matchessubclass.l3pDC
219subclass.l2dDTL3cluster_matchessubclass.l3dDTL3
220subclass.l2dDCTcluster_matchessubclass.l3dDCT
221subclass.l2cycMYOFcluster_matchessubclass.l3cycMYOF
222subclass.l2PapEcluster_matchessubclass.l3PapE
223subclass.l2cycNKC/Tcluster_matchessubclass.l3cycNKC/T
224subclass.l1NEUcluster_matchessubclass.l3SC/NEU
225subclass.l1PECcluster_matchessubclass.l3PEC
226subclass.l1PapEcluster_matchessubclass.l3PapE
227state.l2transitioningcluster_matchessubclass.l3tPC-IC
228classneural cellscluster_matchessubclass.l3SC/NEU
229cell_typeneural cellcluster_matchessubclass.l3SC/NEU
230cell_typeparietal epithelial cellcluster_matchessubclass.l3PEC
231cell_typepapillary tips cellcluster_matchessubclass.l3PapE
232subclass.fullCortical Collecting Duct Intercalated Cell Type Asubcluster_ofsubclass.l2C-IC-A
233subclass.fullConnecting Tubule Principal Cellsubcluster_ofsubclass.l2CNT
234subclass.fullDistal Convoluted Tubule Cell Type 1subcluster_ofsubclass.l2DCT
235subclass.fullDistal Convoluted Tubule Cell Type 2subcluster_ofsubclass.l2DCT
236subclass.fullConnecting Tubule Cellsubcluster_ofsubclass.l2CNT
237subclass.fullConnecting Tubule Intercalated Cell Type Asubcluster_ofsubclass.l2C-IC-A
238subclass.l3CCD-IC-Asubcluster_ofsubclass.l2C-IC-A
239subclass.l3CNT-PCsubcluster_ofsubclass.l2CNT
240subclass.l3DCT1subcluster_ofsubclass.l2DCT
241subclass.l3DCT2subcluster_ofsubclass.l2DCT
242subclass.l3CNTsubcluster_ofsubclass.l2CNT
243subclass.l3CNT-IC-Asubcluster_ofsubclass.l2C-IC-A
244subclass.l1NEUcluster_matchessubclass.l2SC/NEU
245subclass.l1PECcluster_matchessubclass.l2PEC
246subclass.l1PapEcluster_matchessubclass.l2PapE
247state.l2transitioningcluster_matchessubclass.l2tPC-IC
248classneural cellscluster_matchessubclass.l2SC/NEU
249cell_typeneural cellcluster_matchessubclass.l2SC/NEU
250cell_typeparietal epithelial cellcluster_matchessubclass.l2PEC
251cell_typepapillary tips cellcluster_matchessubclass.l2PapE
252subclass.fullDegenerative Proximal Tubule Epithelial Cellsubcluster_ofsubclass.l1PT
253subclass.fullAdaptive / Maladaptive / Repairing Proximal Tu...subcluster_ofsubclass.l1PT
254subclass.fullMedullary Fibroblastsubcluster_ofsubclass.l1FIB
255subclass.fullMacula Densa Cellsubcluster_ofsubclass.l1TAL
256subclass.fullNatural Killer Cell / Natural Killer T Cellsubcluster_ofsubclass.l1IMM
257subclass.fullTransitional Principal-Intercalated Cellsubcluster_ofsubclass.l1IC
258subclass.fullDescending Vasa Recta Endothelial Cellsubcluster_ofsubclass.l1EC
259subclass.fullMedullary Thick Ascending Limb Cellsubcluster_ofsubclass.l1TAL
260subclass.fullCortical Collecting Duct Intercalated Cell Type Asubcluster_ofsubclass.l1IC
261subclass.fullDegenerative Medullary Thick Ascending Limb Cellsubcluster_ofsubclass.l1TAL
262subclass.fullAscending Vasa Recta Endothelial Cellsubcluster_ofsubclass.l1EC
263subclass.fullM2 Macrophagesubcluster_ofsubclass.l1IMM
264subclass.fullCycling Proximal Tubule Epithelial Cellsubcluster_ofsubclass.l1PT
265subclass.fullOuter Medullary Collecting Duct Intercalated C...subcluster_ofsubclass.l1IC
266subclass.fullAdaptive / Maladaptive / Repairing Thick Ascen...subcluster_ofsubclass.l1TAL
267subclass.fullAfferent / Efferent Arteriole Endothelial Cellsubcluster_ofsubclass.l1EC
268subclass.fullDescending Thin Limb Cell Type 2subcluster_ofsubclass.l1DTL
269subclass.fullNeutrophilsubcluster_ofsubclass.l1IMM
270subclass.fullPodocytesubcluster_ofsubclass.l1POD
271subclass.fullAscending Thin Limb Cellsubcluster_ofsubclass.l1ATL
272subclass.fullDescending Thin Limb Cell Type 1subcluster_ofsubclass.l1DTL
273subclass.fullMonocyte-derived Cellsubcluster_ofsubclass.l1IMM
274subclass.fullCortical Collecting Duct Principal Cellsubcluster_ofsubclass.l1PC
275subclass.fullPeritubular Capilary Endothelial Cellsubcluster_ofsubclass.l1EC
276subclass.fullProximal Tubule Epithelial Cell Segment 1 / Se...subcluster_ofsubclass.l1PT
277subclass.fullProximal Tubule Epithelial Cell Segment 3subcluster_ofsubclass.l1PT
278subclass.fullCortical Thick Ascending Limb Cellsubcluster_ofsubclass.l1TAL
279subclass.fullOuter Medullary Collecting Duct Principal Cellsubcluster_ofsubclass.l1PC
280subclass.fullFibroblastsubcluster_ofsubclass.l1FIB
281subclass.fullDegenerative Outer Medullary Collecting Duct P...subcluster_ofsubclass.l1PC
282subclass.fullT Cellsubcluster_ofsubclass.l1IMM
283subclass.fullPlasma Cellsubcluster_ofsubclass.l1IMM
284subclass.fullConnecting Tubule Principal Cellsubcluster_ofsubclass.l1CNT
285subclass.fullDistal Convoluted Tubule Cell Type 1subcluster_ofsubclass.l1DCT
286subclass.fullDegenerative Fibroblastsubcluster_ofsubclass.l1FIB
287subclass.fullDegenerative Cortical Thick Ascending Limb Cellsubcluster_ofsubclass.l1TAL
288subclass.fullVascular Smooth Muscle Cellsubcluster_ofsubclass.l1VSM/P
289subclass.fullDescending Thin Limb Cell Type 3subcluster_ofsubclass.l1DTL
290subclass.fullGlomerular Capillary Endothelial Cellsubcluster_ofsubclass.l1EC
291subclass.fullVascular Smooth Muscle Cell / Pericytesubcluster_ofsubclass.l1VSM/P
292subclass.fullCycling Mononuclear Phagocytesubcluster_ofsubclass.l1IMM
293subclass.fullMyofibroblastsubcluster_ofsubclass.l1FIB
294subclass.fullDegenerative Peritubular Capilary Endothelial ...subcluster_ofsubclass.l1EC
295subclass.fullNon-classical Monocytesubcluster_ofsubclass.l1IMM
296subclass.fullCycling Endothelial Cellsubcluster_ofsubclass.l1EC
297subclass.fullClassical Dendritic Cellsubcluster_ofsubclass.l1IMM
298subclass.fullLymphatic Endothelial Cellsubcluster_ofsubclass.l1EC
299subclass.fullDistal Convoluted Tubule Cell Type 2subcluster_ofsubclass.l1DCT
300subclass.fullMesangial Cellsubcluster_ofsubclass.l1VSM/P
301subclass.fullIntercalated Cell Type Bsubcluster_ofsubclass.l1IC
302subclass.fullConnecting Tubule Cellsubcluster_ofsubclass.l1CNT
303subclass.fullMast Cellsubcluster_ofsubclass.l1IMM
304subclass.fullDegenerative Vascular Smooth Muscle Cellsubcluster_ofsubclass.l1VSM/P
305subclass.fullDegenerative Ascending Thin Limb Cellsubcluster_ofsubclass.l1ATL
306subclass.fullRenin-positive Juxtaglomerular Granular Cellsubcluster_ofsubclass.l1VSM/P
307subclass.fullB Cellsubcluster_ofsubclass.l1IMM
308subclass.fullDegenerative Cortical Intercalated Cell Type Asubcluster_ofsubclass.l1IC
309subclass.fullDegenerative Connecting Tubule Cellsubcluster_ofsubclass.l1CNT
310subclass.fullAdaptive / Maladaptive / Repairing Fibroblastsubcluster_ofsubclass.l1FIB
311subclass.fullCycling Connecting Tubule Cellsubcluster_ofsubclass.l1CNT
312subclass.fullDegenerative Inner Medullary Collecting Duct Cellsubcluster_ofsubclass.l1PC
313subclass.fullInner Medullary Collecting Duct Cellsubcluster_ofsubclass.l1PC
314subclass.fullDegenerative Endothelial Cellsubcluster_ofsubclass.l1EC
315subclass.fullDegenerative Medullary Fibroblastsubcluster_ofsubclass.l1FIB
316subclass.fullConnecting Tubule Intercalated Cell Type Asubcluster_ofsubclass.l1IC
317subclass.fullCycling Distal Convoluted Tubule Cellsubcluster_ofsubclass.l1DCT
318subclass.fullDegenerative Podocytesubcluster_ofsubclass.l1POD
319subclass.fullPlasmacytoid Dendritic Cellsubcluster_ofsubclass.l1IMM
320subclass.fullDegenerative Descending Thin Limb Cell Type 3subcluster_ofsubclass.l1DTL
321subclass.fullDegenerative Distal Convoluted Tubule Cellsubcluster_ofsubclass.l1DCT
322subclass.fullCycling Myofibroblastsubcluster_ofsubclass.l1FIB
323subclass.fullCycling Natural Killer Cell / Natural Killer T...subcluster_ofsubclass.l1IMM
324subclass.l3dPTsubcluster_ofsubclass.l1PT
325subclass.l3aPTsubcluster_ofsubclass.l1PT
326subclass.l3M-FIBsubcluster_ofsubclass.l1FIB
327subclass.l3MDsubcluster_ofsubclass.l1TAL
328subclass.l3NKC/Tsubcluster_ofsubclass.l1IMM
329subclass.l3tPC-ICsubcluster_ofsubclass.l1IC
330subclass.l3EC-DVRsubcluster_ofsubclass.l1EC
331subclass.l3M-TALsubcluster_ofsubclass.l1TAL
332subclass.l3CCD-IC-Asubcluster_ofsubclass.l1IC
333subclass.l3dM-TALsubcluster_ofsubclass.l1TAL
334subclass.l3EC-AVRsubcluster_ofsubclass.l1EC
335subclass.l3MAC-M2subcluster_ofsubclass.l1IMM
336subclass.l3cycPTsubcluster_ofsubclass.l1PT
337subclass.l3OMCD-IC-Asubcluster_ofsubclass.l1IC
338subclass.l3aTAL1subcluster_ofsubclass.l1TAL
339subclass.l3EC-AEAsubcluster_ofsubclass.l1EC
340subclass.l3DTL2subcluster_ofsubclass.l1DTL
341subclass.l3Nsubcluster_ofsubclass.l1IMM
342subclass.l3PODsubcluster_ofsubclass.l1POD
343subclass.l3ATLsubcluster_ofsubclass.l1ATL
344subclass.l3DTL1subcluster_ofsubclass.l1DTL
345subclass.l3MDCsubcluster_ofsubclass.l1IMM
346subclass.l3CCD-PCsubcluster_ofsubclass.l1PC
347subclass.l3EC-PTCsubcluster_ofsubclass.l1EC
348subclass.l3PT-S1/2subcluster_ofsubclass.l1PT
349subclass.l3PT-S3subcluster_ofsubclass.l1PT
350subclass.l3C-TALsubcluster_ofsubclass.l1TAL
351subclass.l3OMCD-PCsubcluster_ofsubclass.l1PC
352subclass.l3FIBsubcluster_ofsubclass.l1FIB
353subclass.l3dOMCD-PCsubcluster_ofsubclass.l1PC
354subclass.l3Tsubcluster_ofsubclass.l1IMM
355subclass.l3PLsubcluster_ofsubclass.l1IMM
356subclass.l3CNT-PCsubcluster_ofsubclass.l1CNT
357subclass.l3DCT1subcluster_ofsubclass.l1DCT
358subclass.l3dFIBsubcluster_ofsubclass.l1FIB
359subclass.l3dC-TALsubcluster_ofsubclass.l1TAL
360subclass.l3VSMCsubcluster_ofsubclass.l1VSM/P
361subclass.l3DTL3subcluster_ofsubclass.l1DTL
362subclass.l3EC-GCsubcluster_ofsubclass.l1EC
363subclass.l3VSMC/Psubcluster_ofsubclass.l1VSM/P
364subclass.l3cycMNPsubcluster_ofsubclass.l1IMM
365subclass.l3MYOFsubcluster_ofsubclass.l1FIB
366subclass.l3dEC-PTCsubcluster_ofsubclass.l1EC
367subclass.l3ncMONsubcluster_ofsubclass.l1IMM
368subclass.l3cycECsubcluster_ofsubclass.l1EC
369subclass.l3cDCsubcluster_ofsubclass.l1IMM
370subclass.l3EC-LYMsubcluster_ofsubclass.l1EC
371subclass.l3DCT2subcluster_ofsubclass.l1DCT
372subclass.l3MCsubcluster_ofsubclass.l1VSM/P
373subclass.l3IC-Bsubcluster_ofsubclass.l1IC
374subclass.l3CNTsubcluster_ofsubclass.l1CNT
375subclass.l3MASTsubcluster_ofsubclass.l1IMM
376subclass.l3dVSMCsubcluster_ofsubclass.l1VSM/P
377subclass.l3dATLsubcluster_ofsubclass.l1ATL
378subclass.l3RENsubcluster_ofsubclass.l1VSM/P
379subclass.l3Bsubcluster_ofsubclass.l1IMM
380subclass.l3aTAL2subcluster_ofsubclass.l1TAL
381subclass.l3dC-IC-Asubcluster_ofsubclass.l1IC
382subclass.l3dCNTsubcluster_ofsubclass.l1CNT
383subclass.l3aFIBsubcluster_ofsubclass.l1FIB
384subclass.l3cycCNTsubcluster_ofsubclass.l1CNT
385subclass.l3dIMCDsubcluster_ofsubclass.l1PC
386subclass.l3IMCDsubcluster_ofsubclass.l1PC
387subclass.l3dECsubcluster_ofsubclass.l1EC
388subclass.l3dM-FIBsubcluster_ofsubclass.l1FIB
389subclass.l3CNT-IC-Asubcluster_ofsubclass.l1IC
390subclass.l3cycDCTsubcluster_ofsubclass.l1DCT
391subclass.l3dPODsubcluster_ofsubclass.l1POD
392subclass.l3pDCsubcluster_ofsubclass.l1IMM
393subclass.l3dDTL3subcluster_ofsubclass.l1DTL
394subclass.l3dDCTsubcluster_ofsubclass.l1DCT
395subclass.l3cycMYOFsubcluster_ofsubclass.l1FIB
396subclass.l3cycNKC/Tsubcluster_ofsubclass.l1IMM
397subclass.l2dPTsubcluster_ofsubclass.l1PT
398subclass.l2aPTsubcluster_ofsubclass.l1PT
399subclass.l2M-FIBsubcluster_ofsubclass.l1FIB
400subclass.l2MDsubcluster_ofsubclass.l1TAL
401subclass.l2NKC/Tsubcluster_ofsubclass.l1IMM
402subclass.l2tPC-ICsubcluster_ofsubclass.l1IC
403subclass.l2EC-DVRsubcluster_ofsubclass.l1EC
404subclass.l2M-TALsubcluster_ofsubclass.l1TAL
405subclass.l2C-IC-Asubcluster_ofsubclass.l1IC
406subclass.l2dM-TALsubcluster_ofsubclass.l1TAL
407subclass.l2EC-AVRsubcluster_ofsubclass.l1EC
408subclass.l2MAC-M2subcluster_ofsubclass.l1IMM
409subclass.l2cycPTsubcluster_ofsubclass.l1PT
410subclass.l2M-IC-Asubcluster_ofsubclass.l1IC
411subclass.l2aTAL1subcluster_ofsubclass.l1TAL
412subclass.l2EC-AEAsubcluster_ofsubclass.l1EC
413subclass.l2DTL2subcluster_ofsubclass.l1DTL
414subclass.l2Nsubcluster_ofsubclass.l1IMM
415subclass.l2PODsubcluster_ofsubclass.l1POD
416subclass.l2ATLsubcluster_ofsubclass.l1ATL
417subclass.l2DTL1subcluster_ofsubclass.l1DTL
418subclass.l2MDCsubcluster_ofsubclass.l1IMM
419subclass.l2C-PCsubcluster_ofsubclass.l1PC
420subclass.l2EC-PTCsubcluster_ofsubclass.l1EC
421subclass.l2PT-S1/2subcluster_ofsubclass.l1PT
422subclass.l2PT-S3subcluster_ofsubclass.l1PT
423subclass.l2C-TALsubcluster_ofsubclass.l1TAL
424subclass.l2M-PCsubcluster_ofsubclass.l1PC
425subclass.l2FIBsubcluster_ofsubclass.l1FIB
426subclass.l2dM-PCsubcluster_ofsubclass.l1PC
427subclass.l2Tsubcluster_ofsubclass.l1IMM
428subclass.l2PLsubcluster_ofsubclass.l1IMM
429subclass.l2CNTsubcluster_ofsubclass.l1CNT
430subclass.l2DCTsubcluster_ofsubclass.l1DCT
431subclass.l2dFIBsubcluster_ofsubclass.l1FIB
432subclass.l2dC-TALsubcluster_ofsubclass.l1TAL
433subclass.l2VSMCsubcluster_ofsubclass.l1VSM/P
434subclass.l2DTL3subcluster_ofsubclass.l1DTL
435subclass.l2EC-GCsubcluster_ofsubclass.l1EC
436subclass.l2VSMC/Psubcluster_ofsubclass.l1VSM/P
437subclass.l2cycMNPsubcluster_ofsubclass.l1IMM
438subclass.l2MYOFsubcluster_ofsubclass.l1FIB
439subclass.l2dEC-PTCsubcluster_ofsubclass.l1EC
440subclass.l2ncMONsubcluster_ofsubclass.l1IMM
441subclass.l2cycECsubcluster_ofsubclass.l1EC
442subclass.l2cDCsubcluster_ofsubclass.l1IMM
443subclass.l2EC-LYMsubcluster_ofsubclass.l1EC
444subclass.l2MCsubcluster_ofsubclass.l1VSM/P
445subclass.l2IC-Bsubcluster_ofsubclass.l1IC
446subclass.l2MASTsubcluster_ofsubclass.l1IMM
447subclass.l2dVSMCsubcluster_ofsubclass.l1VSM/P
448subclass.l2dATLsubcluster_ofsubclass.l1ATL
449subclass.l2RENsubcluster_ofsubclass.l1VSM/P
450subclass.l2Bsubcluster_ofsubclass.l1IMM
451subclass.l2aTAL2subcluster_ofsubclass.l1TAL
452subclass.l2dC-IC-Asubcluster_ofsubclass.l1IC
453subclass.l2dCNTsubcluster_ofsubclass.l1CNT
454subclass.l2aFIBsubcluster_ofsubclass.l1FIB
455subclass.l2cycCNTsubcluster_ofsubclass.l1CNT
456subclass.l2dIMCDsubcluster_ofsubclass.l1PC
457subclass.l2IMCDsubcluster_ofsubclass.l1PC
458subclass.l2dECsubcluster_ofsubclass.l1EC
459subclass.l2dM-FIBsubcluster_ofsubclass.l1FIB
460subclass.l2cycDCTsubcluster_ofsubclass.l1DCT
461subclass.l2dPODsubcluster_ofsubclass.l1POD
462subclass.l2pDCsubcluster_ofsubclass.l1IMM
463subclass.l2dDTL3subcluster_ofsubclass.l1DTL
464subclass.l2dDCTsubcluster_ofsubclass.l1DCT
465subclass.l2cycMYOFsubcluster_ofsubclass.l1FIB
466subclass.l2cycNKC/Tsubcluster_ofsubclass.l1IMM
467state.l2degenerativecluster_overlapssubclass.l1PT
468state.l2adaptive - epicluster_overlapssubclass.l1PT
469state.l2referencecluster_overlapssubclass.l1FIB
470state.l2referencecluster_overlapssubclass.l1TAL
471state.l2referencecluster_overlapssubclass.l1IMM
472state.l2transitioningsubcluster_ofsubclass.l1IC
473state.l2referencecluster_overlapssubclass.l1EC
474state.l2referencecluster_overlapssubclass.l1IC
475state.l2degenerativecluster_overlapssubclass.l1TAL
476state.l2cyclingcluster_overlapssubclass.l1PT
477state.l2adaptive - epicluster_overlapssubclass.l1TAL
478state.l2referencecluster_overlapssubclass.l1DTL
479state.l2referencecluster_overlapssubclass.l1POD
480state.l2referencecluster_overlapssubclass.l1ATL
481state.l2referencecluster_overlapssubclass.l1PC
482state.l2referencecluster_overlapssubclass.l1PT
483state.l2degenerativecluster_overlapssubclass.l1PC
484state.l2referencecluster_overlapssubclass.l1CNT
485state.l2referencecluster_overlapssubclass.l1DCT
486state.l2degenerativecluster_overlapssubclass.l1FIB
487state.l2referencecluster_overlapssubclass.l1VSM/P
488state.l2cyclingcluster_overlapssubclass.l1IMM
489state.l2adaptive - strsubcluster_ofsubclass.l1FIB
490state.l2degenerativecluster_overlapssubclass.l1EC
491state.l2cyclingcluster_overlapssubclass.l1EC
492state.l2degenerativecluster_overlapssubclass.l1VSM/P
493state.l2degenerativecluster_overlapssubclass.l1ATL
494state.l2degenerativecluster_overlapssubclass.l1IC
495state.l2degenerativecluster_overlapssubclass.l1CNT
496state.l2cyclingcluster_overlapssubclass.l1CNT
497state.l2cyclingcluster_overlapssubclass.l1DCT
498state.l2degenerativecluster_overlapssubclass.l1POD
499state.l2degenerativecluster_overlapssubclass.l1DTL
500state.l2degenerativecluster_overlapssubclass.l1DCT
501state.l2cyclingcluster_overlapssubclass.l1FIB
502statealteredcluster_overlapssubclass.l1PT
503statereferencecluster_overlapssubclass.l1FIB
504statereferencecluster_overlapssubclass.l1TAL
505statealteredcluster_overlapssubclass.l1IC
506statereferencecluster_overlapssubclass.l1EC
507statereferencecluster_overlapssubclass.l1IC
508statealteredcluster_overlapssubclass.l1TAL
509statereferencecluster_overlapssubclass.l1DTL
510statereferencecluster_overlapssubclass.l1POD
511statereferencecluster_overlapssubclass.l1ATL
512statereferencecluster_overlapssubclass.l1PC
513statereferencecluster_overlapssubclass.l1PT
514statealteredcluster_overlapssubclass.l1PC
515statereferencecluster_overlapssubclass.l1CNT
516statereferencecluster_overlapssubclass.l1DCT
517statealteredcluster_overlapssubclass.l1FIB
518statereferencecluster_overlapssubclass.l1VSM/P
519statealteredcluster_overlapssubclass.l1EC
520statealteredcluster_overlapssubclass.l1VSM/P
521statealteredcluster_overlapssubclass.l1ATL
522statealteredcluster_overlapssubclass.l1CNT
523statealteredcluster_overlapssubclass.l1DCT
524statealteredcluster_overlapssubclass.l1POD
525statealteredcluster_overlapssubclass.l1DTL
526classimmune cellscluster_matchessubclass.l1IMM
527classendothelial cellscluster_matchessubclass.l1EC
528classneural cellscluster_matchessubclass.l1NEU
529cell_typeepithelial cell of proximal tubulecluster_matchessubclass.l1PT
530cell_typekidney interstitial fibroblastcluster_matchessubclass.l1FIB
531cell_typekidney loop of Henle thick ascending limb epit...cluster_matchessubclass.l1TAL
532cell_typeleukocytecluster_matchessubclass.l1IMM
533cell_typekidney collecting duct intercalated cellcluster_matchessubclass.l1IC
534cell_typeendothelial cellcluster_matchessubclass.l1EC
535cell_typekidney loop of Henle thin descending limb epit...cluster_matchessubclass.l1DTL
536cell_typepodocytecluster_matchessubclass.l1POD
537cell_typekidney loop of Henle thin ascending limb epith...cluster_matchessubclass.l1ATL
538cell_typekidney collecting duct principal cellcluster_matchessubclass.l1PC
539cell_typekidney connecting tubule epithelial cellcluster_matchessubclass.l1CNT
540cell_typekidney distal convoluted tubule epithelial cellcluster_matchessubclass.l1DCT
541cell_typerenal interstitial pericytecluster_matchessubclass.l1VSM/P
542cell_typeneural cellcluster_matchessubclass.l1NEU
543cell_typeparietal epithelial cellcluster_matchessubclass.l1PEC
544cell_typepapillary tips cellcluster_matchessubclass.l1PapE
545subclass.fullDegenerative Proximal Tubule Epithelial Cellsubcluster_ofstate.l2degenerative
546subclass.fullAdaptive / Maladaptive / Repairing Proximal Tu...subcluster_ofstate.l2adaptive - epi
547subclass.fullMedullary Fibroblastsubcluster_ofstate.l2reference
548subclass.fullMacula Densa Cellsubcluster_ofstate.l2reference
549subclass.fullNatural Killer Cell / Natural Killer T Cellsubcluster_ofstate.l2reference
550subclass.fullDescending Vasa Recta Endothelial Cellsubcluster_ofstate.l2reference
551subclass.fullMedullary Thick Ascending Limb Cellsubcluster_ofstate.l2reference
552subclass.fullCortical Collecting Duct Intercalated Cell Type Asubcluster_ofstate.l2reference
553subclass.fullDegenerative Medullary Thick Ascending Limb Cellsubcluster_ofstate.l2degenerative
554subclass.fullAscending Vasa Recta Endothelial Cellsubcluster_ofstate.l2reference
555subclass.fullM2 Macrophagesubcluster_ofstate.l2reference
556subclass.fullCycling Proximal Tubule Epithelial Cellsubcluster_ofstate.l2cycling
557subclass.fullOuter Medullary Collecting Duct Intercalated C...subcluster_ofstate.l2reference
558subclass.fullAdaptive / Maladaptive / Repairing Thick Ascen...subcluster_ofstate.l2adaptive - epi
559subclass.fullAfferent / Efferent Arteriole Endothelial Cellsubcluster_ofstate.l2reference
560subclass.fullDescending Thin Limb Cell Type 2subcluster_ofstate.l2reference
561subclass.fullNeutrophilsubcluster_ofstate.l2reference
562subclass.fullPodocytesubcluster_ofstate.l2reference
563subclass.fullAscending Thin Limb Cellsubcluster_ofstate.l2reference
564subclass.fullDescending Thin Limb Cell Type 1subcluster_ofstate.l2reference
565subclass.fullMonocyte-derived Cellsubcluster_ofstate.l2reference
566subclass.fullCortical Collecting Duct Principal Cellsubcluster_ofstate.l2reference
567subclass.fullPeritubular Capilary Endothelial Cellsubcluster_ofstate.l2reference
568subclass.fullProximal Tubule Epithelial Cell Segment 1 / Se...subcluster_ofstate.l2reference
569subclass.fullProximal Tubule Epithelial Cell Segment 3subcluster_ofstate.l2reference
570subclass.fullCortical Thick Ascending Limb Cellsubcluster_ofstate.l2reference
571subclass.fullOuter Medullary Collecting Duct Principal Cellsubcluster_ofstate.l2reference
572subclass.fullFibroblastsubcluster_ofstate.l2reference
573subclass.fullDegenerative Outer Medullary Collecting Duct P...subcluster_ofstate.l2degenerative
574subclass.fullT Cellsubcluster_ofstate.l2reference
575subclass.fullPlasma Cellsubcluster_ofstate.l2reference
576subclass.fullConnecting Tubule Principal Cellsubcluster_ofstate.l2reference
577subclass.fullDistal Convoluted Tubule Cell Type 1subcluster_ofstate.l2reference
578subclass.fullDegenerative Fibroblastsubcluster_ofstate.l2degenerative
579subclass.fullDegenerative Cortical Thick Ascending Limb Cellsubcluster_ofstate.l2degenerative
580subclass.fullVascular Smooth Muscle Cellsubcluster_ofstate.l2reference
581subclass.fullSchwann Cell / Neuralsubcluster_ofstate.l2reference
582subclass.fullDescending Thin Limb Cell Type 3subcluster_ofstate.l2reference
583subclass.fullGlomerular Capillary Endothelial Cellsubcluster_ofstate.l2reference
584subclass.fullVascular Smooth Muscle Cell / Pericytesubcluster_ofstate.l2reference
585subclass.fullCycling Mononuclear Phagocytesubcluster_ofstate.l2cycling
586subclass.fullMyofibroblastsubcluster_ofstate.l2adaptive - str
587subclass.fullDegenerative Peritubular Capilary Endothelial ...subcluster_ofstate.l2degenerative
588subclass.fullNon-classical Monocytesubcluster_ofstate.l2reference
589subclass.fullCycling Endothelial Cellsubcluster_ofstate.l2cycling
590subclass.fullClassical Dendritic Cellsubcluster_ofstate.l2reference
591subclass.fullLymphatic Endothelial Cellsubcluster_ofstate.l2reference
592subclass.fullDistal Convoluted Tubule Cell Type 2subcluster_ofstate.l2reference
593subclass.fullMesangial Cellsubcluster_ofstate.l2reference
594subclass.fullIntercalated Cell Type Bsubcluster_ofstate.l2reference
595subclass.fullConnecting Tubule Cellsubcluster_ofstate.l2reference
596subclass.fullMast Cellsubcluster_ofstate.l2reference
597subclass.fullDegenerative Vascular Smooth Muscle Cellsubcluster_ofstate.l2degenerative
598subclass.fullDegenerative Ascending Thin Limb Cellsubcluster_ofstate.l2degenerative
599subclass.fullRenin-positive Juxtaglomerular Granular Cellsubcluster_ofstate.l2reference
600subclass.fullB Cellsubcluster_ofstate.l2reference
601subclass.fullDegenerative Cortical Intercalated Cell Type Asubcluster_ofstate.l2degenerative
602subclass.fullDegenerative Connecting Tubule Cellsubcluster_ofstate.l2degenerative
603subclass.fullAdaptive / Maladaptive / Repairing Fibroblastsubcluster_ofstate.l2adaptive - str
604subclass.fullParietal Epithelial Cellsubcluster_ofstate.l2reference
605subclass.fullCycling Connecting Tubule Cellsubcluster_ofstate.l2cycling
606subclass.fullDegenerative Inner Medullary Collecting Duct Cellsubcluster_ofstate.l2degenerative
607subclass.fullInner Medullary Collecting Duct Cellsubcluster_ofstate.l2reference
608subclass.fullDegenerative Endothelial Cellsubcluster_ofstate.l2degenerative
609subclass.fullDegenerative Medullary Fibroblastsubcluster_ofstate.l2degenerative
610subclass.fullConnecting Tubule Intercalated Cell Type Asubcluster_ofstate.l2reference
611subclass.fullCycling Distal Convoluted Tubule Cellsubcluster_ofstate.l2cycling
612subclass.fullDegenerative Podocytesubcluster_ofstate.l2degenerative
613subclass.fullPlasmacytoid Dendritic Cellsubcluster_ofstate.l2reference
614subclass.fullDegenerative Descending Thin Limb Cell Type 3subcluster_ofstate.l2degenerative
615subclass.fullDegenerative Distal Convoluted Tubule Cellsubcluster_ofstate.l2degenerative
616subclass.fullCycling Myofibroblastsubcluster_ofstate.l2cycling
617subclass.fullPapillary Tip Epithelial Cellsubcluster_ofstate.l2reference
618subclass.fullCycling Natural Killer Cell / Natural Killer T...subcluster_ofstate.l2cycling
619subclass.l3dPTsubcluster_ofstate.l2degenerative
620subclass.l3aPTsubcluster_ofstate.l2adaptive - epi
621subclass.l3M-FIBsubcluster_ofstate.l2reference
622subclass.l3MDsubcluster_ofstate.l2reference
623subclass.l3NKC/Tsubcluster_ofstate.l2reference
624subclass.l3EC-DVRsubcluster_ofstate.l2reference
625subclass.l3M-TALsubcluster_ofstate.l2reference
626subclass.l3CCD-IC-Asubcluster_ofstate.l2reference
627subclass.l3dM-TALsubcluster_ofstate.l2degenerative
628subclass.l3EC-AVRsubcluster_ofstate.l2reference
629subclass.l3MAC-M2subcluster_ofstate.l2reference
630subclass.l3cycPTsubcluster_ofstate.l2cycling
631subclass.l3OMCD-IC-Asubcluster_ofstate.l2reference
632subclass.l3aTAL1subcluster_ofstate.l2adaptive - epi
633subclass.l3EC-AEAsubcluster_ofstate.l2reference
634subclass.l3DTL2subcluster_ofstate.l2reference
635subclass.l3Nsubcluster_ofstate.l2reference
636subclass.l3PODsubcluster_ofstate.l2reference
637subclass.l3ATLsubcluster_ofstate.l2reference
638subclass.l3DTL1subcluster_ofstate.l2reference
639subclass.l3MDCsubcluster_ofstate.l2reference
640subclass.l3CCD-PCsubcluster_ofstate.l2reference
641subclass.l3EC-PTCsubcluster_ofstate.l2reference
642subclass.l3PT-S1/2subcluster_ofstate.l2reference
643subclass.l3PT-S3subcluster_ofstate.l2reference
644subclass.l3C-TALsubcluster_ofstate.l2reference
645subclass.l3OMCD-PCsubcluster_ofstate.l2reference
646subclass.l3FIBsubcluster_ofstate.l2reference
647subclass.l3dOMCD-PCsubcluster_ofstate.l2degenerative
648subclass.l3Tsubcluster_ofstate.l2reference
649subclass.l3PLsubcluster_ofstate.l2reference
650subclass.l3CNT-PCsubcluster_ofstate.l2reference
651subclass.l3DCT1subcluster_ofstate.l2reference
652subclass.l3dFIBsubcluster_ofstate.l2degenerative
653subclass.l3dC-TALsubcluster_ofstate.l2degenerative
654subclass.l3VSMCsubcluster_ofstate.l2reference
655subclass.l3SC/NEUsubcluster_ofstate.l2reference
656subclass.l3DTL3subcluster_ofstate.l2reference
657subclass.l3EC-GCsubcluster_ofstate.l2reference
658subclass.l3VSMC/Psubcluster_ofstate.l2reference
659subclass.l3cycMNPsubcluster_ofstate.l2cycling
660subclass.l3MYOFsubcluster_ofstate.l2adaptive - str
661subclass.l3dEC-PTCsubcluster_ofstate.l2degenerative
662subclass.l3ncMONsubcluster_ofstate.l2reference
663subclass.l3cycECsubcluster_ofstate.l2cycling
664subclass.l3cDCsubcluster_ofstate.l2reference
665subclass.l3EC-LYMsubcluster_ofstate.l2reference
666subclass.l3DCT2subcluster_ofstate.l2reference
667subclass.l3MCsubcluster_ofstate.l2reference
668subclass.l3IC-Bsubcluster_ofstate.l2reference
669subclass.l3CNTsubcluster_ofstate.l2reference
670subclass.l3MASTsubcluster_ofstate.l2reference
671subclass.l3dVSMCsubcluster_ofstate.l2degenerative
672subclass.l3dATLsubcluster_ofstate.l2degenerative
673subclass.l3RENsubcluster_ofstate.l2reference
674subclass.l3Bsubcluster_ofstate.l2reference
675subclass.l3aTAL2subcluster_ofstate.l2adaptive - epi
676subclass.l3dC-IC-Asubcluster_ofstate.l2degenerative
677subclass.l3dCNTsubcluster_ofstate.l2degenerative
678subclass.l3aFIBsubcluster_ofstate.l2adaptive - str
679subclass.l3PECsubcluster_ofstate.l2reference
680subclass.l3cycCNTsubcluster_ofstate.l2cycling
681subclass.l3dIMCDsubcluster_ofstate.l2degenerative
682subclass.l3IMCDsubcluster_ofstate.l2reference
683subclass.l3dECsubcluster_ofstate.l2degenerative
684subclass.l3dM-FIBsubcluster_ofstate.l2degenerative
685subclass.l3CNT-IC-Asubcluster_ofstate.l2reference
686subclass.l3cycDCTsubcluster_ofstate.l2cycling
687subclass.l3dPODsubcluster_ofstate.l2degenerative
688subclass.l3pDCsubcluster_ofstate.l2reference
689subclass.l3dDTL3subcluster_ofstate.l2degenerative
690subclass.l3dDCTsubcluster_ofstate.l2degenerative
691subclass.l3cycMYOFsubcluster_ofstate.l2cycling
692subclass.l3PapEsubcluster_ofstate.l2reference
693subclass.l3cycNKC/Tsubcluster_ofstate.l2cycling
694subclass.l2dPTsubcluster_ofstate.l2degenerative
695subclass.l2aPTsubcluster_ofstate.l2adaptive - epi
696subclass.l2M-FIBsubcluster_ofstate.l2reference
697subclass.l2MDsubcluster_ofstate.l2reference
698subclass.l2NKC/Tsubcluster_ofstate.l2reference
699subclass.l2EC-DVRsubcluster_ofstate.l2reference
700subclass.l2M-TALsubcluster_ofstate.l2reference
701subclass.l2C-IC-Asubcluster_ofstate.l2reference
702subclass.l2dM-TALsubcluster_ofstate.l2degenerative
703subclass.l2EC-AVRsubcluster_ofstate.l2reference
704subclass.l2MAC-M2subcluster_ofstate.l2reference
705subclass.l2cycPTsubcluster_ofstate.l2cycling
706subclass.l2M-IC-Asubcluster_ofstate.l2reference
707subclass.l2aTAL1subcluster_ofstate.l2adaptive - epi
708subclass.l2EC-AEAsubcluster_ofstate.l2reference
709subclass.l2DTL2subcluster_ofstate.l2reference
710subclass.l2Nsubcluster_ofstate.l2reference
711subclass.l2PODsubcluster_ofstate.l2reference
712subclass.l2ATLsubcluster_ofstate.l2reference
713subclass.l2DTL1subcluster_ofstate.l2reference
714subclass.l2MDCsubcluster_ofstate.l2reference
715subclass.l2C-PCsubcluster_ofstate.l2reference
716subclass.l2EC-PTCsubcluster_ofstate.l2reference
717subclass.l2PT-S1/2subcluster_ofstate.l2reference
718subclass.l2PT-S3subcluster_ofstate.l2reference
719subclass.l2C-TALsubcluster_ofstate.l2reference
720subclass.l2M-PCsubcluster_ofstate.l2reference
721subclass.l2FIBsubcluster_ofstate.l2reference
722subclass.l2dM-PCsubcluster_ofstate.l2degenerative
723subclass.l2Tsubcluster_ofstate.l2reference
724subclass.l2PLsubcluster_ofstate.l2reference
725subclass.l2CNTsubcluster_ofstate.l2reference
726subclass.l2DCTsubcluster_ofstate.l2reference
727subclass.l2dFIBsubcluster_ofstate.l2degenerative
728subclass.l2dC-TALsubcluster_ofstate.l2degenerative
729subclass.l2VSMCsubcluster_ofstate.l2reference
730subclass.l2SC/NEUsubcluster_ofstate.l2reference
731subclass.l2DTL3subcluster_ofstate.l2reference
732subclass.l2EC-GCsubcluster_ofstate.l2reference
733subclass.l2VSMC/Psubcluster_ofstate.l2reference
734subclass.l2cycMNPsubcluster_ofstate.l2cycling
735subclass.l2MYOFsubcluster_ofstate.l2adaptive - str
736subclass.l2dEC-PTCsubcluster_ofstate.l2degenerative
737subclass.l2ncMONsubcluster_ofstate.l2reference
738subclass.l2cycECsubcluster_ofstate.l2cycling
739subclass.l2cDCsubcluster_ofstate.l2reference
740subclass.l2EC-LYMsubcluster_ofstate.l2reference
741subclass.l2MCsubcluster_ofstate.l2reference
742subclass.l2IC-Bsubcluster_ofstate.l2reference
743subclass.l2MASTsubcluster_ofstate.l2reference
744subclass.l2dVSMCsubcluster_ofstate.l2degenerative
745subclass.l2dATLsubcluster_ofstate.l2degenerative
746subclass.l2RENsubcluster_ofstate.l2reference
747subclass.l2Bsubcluster_ofstate.l2reference
748subclass.l2aTAL2subcluster_ofstate.l2adaptive - epi
749subclass.l2dC-IC-Asubcluster_ofstate.l2degenerative
750subclass.l2dCNTsubcluster_ofstate.l2degenerative
751subclass.l2aFIBsubcluster_ofstate.l2adaptive - str
752subclass.l2PECsubcluster_ofstate.l2reference
753subclass.l2cycCNTsubcluster_ofstate.l2cycling
754subclass.l2dIMCDsubcluster_ofstate.l2degenerative
755subclass.l2IMCDsubcluster_ofstate.l2reference
756subclass.l2dECsubcluster_ofstate.l2degenerative
757subclass.l2dM-FIBsubcluster_ofstate.l2degenerative
758subclass.l2cycDCTsubcluster_ofstate.l2cycling
759subclass.l2dPODsubcluster_ofstate.l2degenerative
760subclass.l2pDCsubcluster_ofstate.l2reference
761subclass.l2dDTL3subcluster_ofstate.l2degenerative
762subclass.l2dDCTsubcluster_ofstate.l2degenerative
763subclass.l2cycMYOFsubcluster_ofstate.l2cycling
764subclass.l2PapEsubcluster_ofstate.l2reference
765subclass.l2cycNKC/Tsubcluster_ofstate.l2cycling
766subclass.l1NEUsubcluster_ofstate.l2reference
767subclass.l1PECsubcluster_ofstate.l2reference
768subclass.l1PapEsubcluster_ofstate.l2reference
769statealteredcluster_overlapsstate.l2cycling
770statereferencecluster_overlapsstate.l2cycling
771classepithelial cellscluster_overlapsstate.l2degenerative
772classstroma cellscluster_overlapsstate.l2reference
773classepithelial cellscluster_overlapsstate.l2reference
774classimmune cellscluster_overlapsstate.l2reference
775classendothelial cellscluster_overlapsstate.l2reference
776classepithelial cellscluster_overlapsstate.l2cycling
777classstroma cellscluster_overlapsstate.l2degenerative
778classneural cellssubcluster_ofstate.l2reference
779classimmune cellscluster_overlapsstate.l2cycling
780classendothelial cellscluster_overlapsstate.l2degenerative
781classendothelial cellscluster_overlapsstate.l2cycling
782classstroma cellscluster_overlapsstate.l2cycling
783cell_typeepithelial cell of proximal tubulecluster_overlapsstate.l2degenerative
784cell_typeepithelial cell of proximal tubulecluster_overlapsstate.l2adaptive - epi
785cell_typekidney interstitial fibroblastcluster_overlapsstate.l2reference
786cell_typekidney loop of Henle thick ascending limb epit...cluster_overlapsstate.l2reference
787cell_typeleukocytecluster_overlapsstate.l2reference
788cell_typeendothelial cellcluster_overlapsstate.l2reference
789cell_typekidney collecting duct intercalated cellcluster_overlapsstate.l2reference
790cell_typekidney loop of Henle thick ascending limb epit...cluster_overlapsstate.l2degenerative
791cell_typeepithelial cell of proximal tubulecluster_overlapsstate.l2cycling
792cell_typekidney loop of Henle thick ascending limb epit...cluster_overlapsstate.l2adaptive - epi
793cell_typekidney loop of Henle thin descending limb epit...cluster_overlapsstate.l2reference
794cell_typepodocytecluster_overlapsstate.l2reference
795cell_typekidney loop of Henle thin ascending limb epith...cluster_overlapsstate.l2reference
796cell_typekidney collecting duct principal cellcluster_overlapsstate.l2reference
797cell_typeepithelial cell of proximal tubulecluster_overlapsstate.l2reference
798cell_typekidney collecting duct principal cellcluster_overlapsstate.l2degenerative
799cell_typekidney connecting tubule epithelial cellcluster_overlapsstate.l2reference
800cell_typekidney distal convoluted tubule epithelial cellcluster_overlapsstate.l2reference
801cell_typekidney interstitial fibroblastcluster_overlapsstate.l2degenerative
802cell_typerenal interstitial pericytecluster_overlapsstate.l2reference
803cell_typeneural cellsubcluster_ofstate.l2reference
804cell_typeleukocytecluster_overlapsstate.l2cycling
805cell_typeendothelial cellcluster_overlapsstate.l2degenerative
806cell_typeendothelial cellcluster_overlapsstate.l2cycling
807cell_typerenal interstitial pericytecluster_overlapsstate.l2degenerative
808cell_typekidney loop of Henle thin ascending limb epith...cluster_overlapsstate.l2degenerative
809cell_typekidney collecting duct intercalated cellcluster_overlapsstate.l2degenerative
810cell_typekidney connecting tubule epithelial cellcluster_overlapsstate.l2degenerative
811cell_typeparietal epithelial cellsubcluster_ofstate.l2reference
812cell_typekidney connecting tubule epithelial cellcluster_overlapsstate.l2cycling
813cell_typekidney distal convoluted tubule epithelial cellcluster_overlapsstate.l2cycling
814cell_typepodocytecluster_overlapsstate.l2degenerative
815cell_typekidney loop of Henle thin descending limb epit...cluster_overlapsstate.l2degenerative
816cell_typekidney distal convoluted tubule epithelial cellcluster_overlapsstate.l2degenerative
817cell_typekidney interstitial fibroblastcluster_overlapsstate.l2cycling
818cell_typepapillary tips cellsubcluster_ofstate.l2reference
819subclass.fullDegenerative Proximal Tubule Epithelial Cellsubcluster_ofstatealtered
820subclass.fullAdaptive / Maladaptive / Repairing Proximal Tu...subcluster_ofstatealtered
821subclass.fullMedullary Fibroblastsubcluster_ofstatereference
822subclass.fullMacula Densa Cellsubcluster_ofstatereference
823subclass.fullNatural Killer Cell / Natural Killer T Cellsubcluster_ofstatereference
824subclass.fullTransitional Principal-Intercalated Cellsubcluster_ofstatealtered
825subclass.fullDescending Vasa Recta Endothelial Cellsubcluster_ofstatereference
826subclass.fullMedullary Thick Ascending Limb Cellsubcluster_ofstatereference
827subclass.fullCortical Collecting Duct Intercalated Cell Type Asubcluster_ofstatereference
828subclass.fullDegenerative Medullary Thick Ascending Limb Cellsubcluster_ofstatealtered
829subclass.fullAscending Vasa Recta Endothelial Cellsubcluster_ofstatereference
830subclass.fullM2 Macrophagesubcluster_ofstatereference
831subclass.fullCycling Proximal Tubule Epithelial Cellsubcluster_ofstatealtered
832subclass.fullOuter Medullary Collecting Duct Intercalated C...subcluster_ofstatereference
833subclass.fullAdaptive / Maladaptive / Repairing Thick Ascen...subcluster_ofstatealtered
834subclass.fullAfferent / Efferent Arteriole Endothelial Cellsubcluster_ofstatereference
835subclass.fullDescending Thin Limb Cell Type 2subcluster_ofstatereference
836subclass.fullNeutrophilsubcluster_ofstatereference
837subclass.fullPodocytesubcluster_ofstatereference
838subclass.fullAscending Thin Limb Cellsubcluster_ofstatereference
839subclass.fullDescending Thin Limb Cell Type 1subcluster_ofstatereference
840subclass.fullMonocyte-derived Cellsubcluster_ofstatereference
841subclass.fullCortical Collecting Duct Principal Cellsubcluster_ofstatereference
842subclass.fullPeritubular Capilary Endothelial Cellsubcluster_ofstatereference
843subclass.fullProximal Tubule Epithelial Cell Segment 1 / Se...subcluster_ofstatereference
844subclass.fullProximal Tubule Epithelial Cell Segment 3subcluster_ofstatereference
845subclass.fullCortical Thick Ascending Limb Cellsubcluster_ofstatereference
846subclass.fullOuter Medullary Collecting Duct Principal Cellsubcluster_ofstatereference
847subclass.fullFibroblastsubcluster_ofstatereference
848subclass.fullDegenerative Outer Medullary Collecting Duct P...subcluster_ofstatealtered
849subclass.fullT Cellsubcluster_ofstatereference
850subclass.fullPlasma Cellsubcluster_ofstatereference
851subclass.fullConnecting Tubule Principal Cellsubcluster_ofstatereference
852subclass.fullDistal Convoluted Tubule Cell Type 1subcluster_ofstatereference
853subclass.fullDegenerative Fibroblastsubcluster_ofstatealtered
854subclass.fullDegenerative Cortical Thick Ascending Limb Cellsubcluster_ofstatealtered
855subclass.fullVascular Smooth Muscle Cellsubcluster_ofstatereference
856subclass.fullSchwann Cell / Neuralsubcluster_ofstatereference
857subclass.fullDescending Thin Limb Cell Type 3subcluster_ofstatereference
858subclass.fullGlomerular Capillary Endothelial Cellsubcluster_ofstatereference
859subclass.fullVascular Smooth Muscle Cell / Pericytesubcluster_ofstatereference
860subclass.fullCycling Mononuclear Phagocytesubcluster_ofstatereference
861subclass.fullMyofibroblastsubcluster_ofstatealtered
862subclass.fullDegenerative Peritubular Capilary Endothelial ...subcluster_ofstatealtered
863subclass.fullNon-classical Monocytesubcluster_ofstatereference
864subclass.fullCycling Endothelial Cellsubcluster_ofstatealtered
865subclass.fullClassical Dendritic Cellsubcluster_ofstatereference
866subclass.fullLymphatic Endothelial Cellsubcluster_ofstatereference
867subclass.fullDistal Convoluted Tubule Cell Type 2subcluster_ofstatereference
868subclass.fullMesangial Cellsubcluster_ofstatereference
869subclass.fullIntercalated Cell Type Bsubcluster_ofstatereference
870subclass.fullConnecting Tubule Cellsubcluster_ofstatereference
871subclass.fullMast Cellsubcluster_ofstatereference
872subclass.fullDegenerative Vascular Smooth Muscle Cellsubcluster_ofstatealtered
873subclass.fullDegenerative Ascending Thin Limb Cellsubcluster_ofstatealtered
874subclass.fullRenin-positive Juxtaglomerular Granular Cellsubcluster_ofstatereference
875subclass.fullB Cellsubcluster_ofstatereference
876subclass.fullDegenerative Cortical Intercalated Cell Type Asubcluster_ofstatealtered
877subclass.fullDegenerative Connecting Tubule Cellsubcluster_ofstatealtered
878subclass.fullAdaptive / Maladaptive / Repairing Fibroblastsubcluster_ofstatealtered
879subclass.fullParietal Epithelial Cellsubcluster_ofstatereference
880subclass.fullCycling Connecting Tubule Cellsubcluster_ofstatealtered
881subclass.fullDegenerative Inner Medullary Collecting Duct Cellsubcluster_ofstatealtered
882subclass.fullInner Medullary Collecting Duct Cellsubcluster_ofstatereference
883subclass.fullDegenerative Endothelial Cellsubcluster_ofstatealtered
884subclass.fullDegenerative Medullary Fibroblastsubcluster_ofstatealtered
885subclass.fullConnecting Tubule Intercalated Cell Type Asubcluster_ofstatereference
886subclass.fullCycling Distal Convoluted Tubule Cellsubcluster_ofstatealtered
887subclass.fullDegenerative Podocytesubcluster_ofstatealtered
888subclass.fullPlasmacytoid Dendritic Cellsubcluster_ofstatereference
889subclass.fullDegenerative Descending Thin Limb Cell Type 3subcluster_ofstatealtered
890subclass.fullDegenerative Distal Convoluted Tubule Cellsubcluster_ofstatealtered
891subclass.fullCycling Myofibroblastsubcluster_ofstatealtered
892subclass.fullPapillary Tip Epithelial Cellsubcluster_ofstatereference
893subclass.fullCycling Natural Killer Cell / Natural Killer T...subcluster_ofstatereference
894subclass.l3dPTsubcluster_ofstatealtered
895subclass.l3aPTsubcluster_ofstatealtered
896subclass.l3M-FIBsubcluster_ofstatereference
897subclass.l3MDsubcluster_ofstatereference
898subclass.l3NKC/Tsubcluster_ofstatereference
899subclass.l3tPC-ICsubcluster_ofstatealtered
900subclass.l3EC-DVRsubcluster_ofstatereference
901subclass.l3M-TALsubcluster_ofstatereference
902subclass.l3CCD-IC-Asubcluster_ofstatereference
903subclass.l3dM-TALsubcluster_ofstatealtered
904subclass.l3EC-AVRsubcluster_ofstatereference
905subclass.l3MAC-M2subcluster_ofstatereference
906subclass.l3cycPTsubcluster_ofstatealtered
907subclass.l3OMCD-IC-Asubcluster_ofstatereference
908subclass.l3aTAL1subcluster_ofstatealtered
909subclass.l3EC-AEAsubcluster_ofstatereference
910subclass.l3DTL2subcluster_ofstatereference
911subclass.l3Nsubcluster_ofstatereference
912subclass.l3PODsubcluster_ofstatereference
913subclass.l3ATLsubcluster_ofstatereference
914subclass.l3DTL1subcluster_ofstatereference
915subclass.l3MDCsubcluster_ofstatereference
916subclass.l3CCD-PCsubcluster_ofstatereference
917subclass.l3EC-PTCsubcluster_ofstatereference
918subclass.l3PT-S1/2subcluster_ofstatereference
919subclass.l3PT-S3subcluster_ofstatereference
920subclass.l3C-TALsubcluster_ofstatereference
921subclass.l3OMCD-PCsubcluster_ofstatereference
922subclass.l3FIBsubcluster_ofstatereference
923subclass.l3dOMCD-PCsubcluster_ofstatealtered
924subclass.l3Tsubcluster_ofstatereference
925subclass.l3PLsubcluster_ofstatereference
926subclass.l3CNT-PCsubcluster_ofstatereference
927subclass.l3DCT1subcluster_ofstatereference
928subclass.l3dFIBsubcluster_ofstatealtered
929subclass.l3dC-TALsubcluster_ofstatealtered
930subclass.l3VSMCsubcluster_ofstatereference
931subclass.l3SC/NEUsubcluster_ofstatereference
932subclass.l3DTL3subcluster_ofstatereference
933subclass.l3EC-GCsubcluster_ofstatereference
934subclass.l3VSMC/Psubcluster_ofstatereference
935subclass.l3cycMNPsubcluster_ofstatereference
936subclass.l3MYOFsubcluster_ofstatealtered
937subclass.l3dEC-PTCsubcluster_ofstatealtered
938subclass.l3ncMONsubcluster_ofstatereference
939subclass.l3cycECsubcluster_ofstatealtered
940subclass.l3cDCsubcluster_ofstatereference
941subclass.l3EC-LYMsubcluster_ofstatereference
942subclass.l3DCT2subcluster_ofstatereference
943subclass.l3MCsubcluster_ofstatereference
944subclass.l3IC-Bsubcluster_ofstatereference
945subclass.l3CNTsubcluster_ofstatereference
946subclass.l3MASTsubcluster_ofstatereference
947subclass.l3dVSMCsubcluster_ofstatealtered
948subclass.l3dATLsubcluster_ofstatealtered
949subclass.l3RENsubcluster_ofstatereference
950subclass.l3Bsubcluster_ofstatereference
951subclass.l3aTAL2subcluster_ofstatealtered
952subclass.l3dC-IC-Asubcluster_ofstatealtered
953subclass.l3dCNTsubcluster_ofstatealtered
954subclass.l3aFIBsubcluster_ofstatealtered
955subclass.l3PECsubcluster_ofstatereference
956subclass.l3cycCNTsubcluster_ofstatealtered
957subclass.l3dIMCDsubcluster_ofstatealtered
958subclass.l3IMCDsubcluster_ofstatereference
959subclass.l3dECsubcluster_ofstatealtered
960subclass.l3dM-FIBsubcluster_ofstatealtered
961subclass.l3CNT-IC-Asubcluster_ofstatereference
962subclass.l3cycDCTsubcluster_ofstatealtered
963subclass.l3dPODsubcluster_ofstatealtered
964subclass.l3pDCsubcluster_ofstatereference
965subclass.l3dDTL3subcluster_ofstatealtered
966subclass.l3dDCTsubcluster_ofstatealtered
967subclass.l3cycMYOFsubcluster_ofstatealtered
968subclass.l3PapEsubcluster_ofstatereference
969subclass.l3cycNKC/Tsubcluster_ofstatereference
970subclass.l2dPTsubcluster_ofstatealtered
971subclass.l2aPTsubcluster_ofstatealtered
972subclass.l2M-FIBsubcluster_ofstatereference
973subclass.l2MDsubcluster_ofstatereference
974subclass.l2NKC/Tsubcluster_ofstatereference
975subclass.l2tPC-ICsubcluster_ofstatealtered
976subclass.l2EC-DVRsubcluster_ofstatereference
977subclass.l2M-TALsubcluster_ofstatereference
978subclass.l2C-IC-Asubcluster_ofstatereference
979subclass.l2dM-TALsubcluster_ofstatealtered
980subclass.l2EC-AVRsubcluster_ofstatereference
981subclass.l2MAC-M2subcluster_ofstatereference
982subclass.l2cycPTsubcluster_ofstatealtered
983subclass.l2M-IC-Asubcluster_ofstatereference
984subclass.l2aTAL1subcluster_ofstatealtered
985subclass.l2EC-AEAsubcluster_ofstatereference
986subclass.l2DTL2subcluster_ofstatereference
987subclass.l2Nsubcluster_ofstatereference
988subclass.l2PODsubcluster_ofstatereference
989subclass.l2ATLsubcluster_ofstatereference
990subclass.l2DTL1subcluster_ofstatereference
991subclass.l2MDCsubcluster_ofstatereference
992subclass.l2C-PCsubcluster_ofstatereference
993subclass.l2EC-PTCsubcluster_ofstatereference
994subclass.l2PT-S1/2subcluster_ofstatereference
995subclass.l2PT-S3subcluster_ofstatereference
996subclass.l2C-TALsubcluster_ofstatereference
997subclass.l2M-PCsubcluster_ofstatereference
998subclass.l2FIBsubcluster_ofstatereference
999subclass.l2dM-PCsubcluster_ofstatealtered
1000subclass.l2Tsubcluster_ofstatereference
1001subclass.l2PLsubcluster_ofstatereference
1002subclass.l2CNTsubcluster_ofstatereference
1003subclass.l2DCTsubcluster_ofstatereference
1004subclass.l2dFIBsubcluster_ofstatealtered
1005subclass.l2dC-TALsubcluster_ofstatealtered
1006subclass.l2VSMCsubcluster_ofstatereference
1007subclass.l2SC/NEUsubcluster_ofstatereference
1008subclass.l2DTL3subcluster_ofstatereference
1009subclass.l2EC-GCsubcluster_ofstatereference
1010subclass.l2VSMC/Psubcluster_ofstatereference
1011subclass.l2cycMNPsubcluster_ofstatereference
1012subclass.l2MYOFsubcluster_ofstatealtered
1013subclass.l2dEC-PTCsubcluster_ofstatealtered
1014subclass.l2ncMONsubcluster_ofstatereference
1015subclass.l2cycECsubcluster_ofstatealtered
1016subclass.l2cDCsubcluster_ofstatereference
1017subclass.l2EC-LYMsubcluster_ofstatereference
1018subclass.l2MCsubcluster_ofstatereference
1019subclass.l2IC-Bsubcluster_ofstatereference
1020subclass.l2MASTsubcluster_ofstatereference
1021subclass.l2dVSMCsubcluster_ofstatealtered
1022subclass.l2dATLsubcluster_ofstatealtered
1023subclass.l2RENsubcluster_ofstatereference
1024subclass.l2Bsubcluster_ofstatereference
1025subclass.l2aTAL2subcluster_ofstatealtered
1026subclass.l2dC-IC-Asubcluster_ofstatealtered
1027subclass.l2dCNTsubcluster_ofstatealtered
1028subclass.l2aFIBsubcluster_ofstatealtered
1029subclass.l2PECsubcluster_ofstatereference
1030subclass.l2cycCNTsubcluster_ofstatealtered
1031subclass.l2dIMCDsubcluster_ofstatealtered
1032subclass.l2IMCDsubcluster_ofstatereference
1033subclass.l2dECsubcluster_ofstatealtered
1034subclass.l2dM-FIBsubcluster_ofstatealtered
1035subclass.l2cycDCTsubcluster_ofstatealtered
1036subclass.l2dPODsubcluster_ofstatealtered
1037subclass.l2pDCsubcluster_ofstatereference
1038subclass.l2dDTL3subcluster_ofstatealtered
1039subclass.l2dDCTsubcluster_ofstatealtered
1040subclass.l2cycMYOFsubcluster_ofstatealtered
1041subclass.l2PapEsubcluster_ofstatereference
1042subclass.l2cycNKC/Tsubcluster_ofstatereference
1043subclass.l1IMMsubcluster_ofstatereference
1044subclass.l1NEUsubcluster_ofstatereference
1045subclass.l1PECsubcluster_ofstatereference
1046subclass.l1PapEsubcluster_ofstatereference
1047state.l2degenerativesubcluster_ofstatealtered
1048state.l2adaptive - episubcluster_ofstatealtered
1049state.l2referencesubcluster_ofstatereference
1050state.l2transitioningsubcluster_ofstatealtered
1051state.l2adaptive - strsubcluster_ofstatealtered
1052classepithelial cellscluster_overlapsstatealtered
1053classstroma cellscluster_overlapsstatereference
1054classepithelial cellscluster_overlapsstatereference
1055classimmune cellssubcluster_ofstatereference
1056classendothelial cellscluster_overlapsstatereference
1057classstroma cellscluster_overlapsstatealtered
1058classneural cellssubcluster_ofstatereference
1059classendothelial cellscluster_overlapsstatealtered
1060cell_typeepithelial cell of proximal tubulecluster_overlapsstatealtered
1061cell_typekidney interstitial fibroblastcluster_overlapsstatereference
1062cell_typekidney loop of Henle thick ascending limb epit...cluster_overlapsstatereference
1063cell_typeleukocytesubcluster_ofstatereference
1064cell_typekidney collecting duct intercalated cellcluster_overlapsstatealtered
1065cell_typeendothelial cellcluster_overlapsstatereference
1066cell_typekidney collecting duct intercalated cellcluster_overlapsstatereference
1067cell_typekidney loop of Henle thick ascending limb epit...cluster_overlapsstatealtered
1068cell_typekidney loop of Henle thin descending limb epit...cluster_overlapsstatereference
1069cell_typepodocytecluster_overlapsstatereference
1070cell_typekidney loop of Henle thin ascending limb epith...cluster_overlapsstatereference
1071cell_typekidney collecting duct principal cellcluster_overlapsstatereference
1072cell_typeepithelial cell of proximal tubulecluster_overlapsstatereference
1073cell_typekidney collecting duct principal cellcluster_overlapsstatealtered
1074cell_typekidney connecting tubule epithelial cellcluster_overlapsstatereference
1075cell_typekidney distal convoluted tubule epithelial cellcluster_overlapsstatereference
1076cell_typekidney interstitial fibroblastcluster_overlapsstatealtered
1077cell_typerenal interstitial pericytecluster_overlapsstatereference
1078cell_typeneural cellsubcluster_ofstatereference
1079cell_typeendothelial cellcluster_overlapsstatealtered
1080cell_typerenal interstitial pericytecluster_overlapsstatealtered
1081cell_typekidney loop of Henle thin ascending limb epith...cluster_overlapsstatealtered
1082cell_typekidney connecting tubule epithelial cellcluster_overlapsstatealtered
1083cell_typeparietal epithelial cellsubcluster_ofstatereference
1084cell_typekidney distal convoluted tubule epithelial cellcluster_overlapsstatealtered
1085cell_typepodocytecluster_overlapsstatealtered
1086cell_typekidney loop of Henle thin descending limb epit...cluster_overlapsstatealtered
1087cell_typepapillary tips cellsubcluster_ofstatereference
1088subclass.fullDegenerative Proximal Tubule Epithelial Cellsubcluster_ofclassepithelial cells
1089subclass.fullAdaptive / Maladaptive / Repairing Proximal Tu...subcluster_ofclassepithelial cells
1090subclass.fullMedullary Fibroblastsubcluster_ofclassstroma cells
1091subclass.fullMacula Densa Cellsubcluster_ofclassepithelial cells
1092subclass.fullNatural Killer Cell / Natural Killer T Cellsubcluster_ofclassimmune cells
1093subclass.fullTransitional Principal-Intercalated Cellsubcluster_ofclassepithelial cells
1094subclass.fullDescending Vasa Recta Endothelial Cellsubcluster_ofclassendothelial cells
1095subclass.fullMedullary Thick Ascending Limb Cellsubcluster_ofclassepithelial cells
1096subclass.fullCortical Collecting Duct Intercalated Cell Type Asubcluster_ofclassepithelial cells
1097subclass.fullDegenerative Medullary Thick Ascending Limb Cellsubcluster_ofclassepithelial cells
1098subclass.fullAscending Vasa Recta Endothelial Cellsubcluster_ofclassendothelial cells
1099subclass.fullM2 Macrophagesubcluster_ofclassimmune cells
1100subclass.fullCycling Proximal Tubule Epithelial Cellsubcluster_ofclassepithelial cells
1101subclass.fullOuter Medullary Collecting Duct Intercalated C...subcluster_ofclassepithelial cells
1102subclass.fullAdaptive / Maladaptive / Repairing Thick Ascen...subcluster_ofclassepithelial cells
1103subclass.fullAfferent / Efferent Arteriole Endothelial Cellsubcluster_ofclassendothelial cells
1104subclass.fullDescending Thin Limb Cell Type 2subcluster_ofclassepithelial cells
1105subclass.fullNeutrophilsubcluster_ofclassimmune cells
1106subclass.fullPodocytesubcluster_ofclassepithelial cells
1107subclass.fullAscending Thin Limb Cellsubcluster_ofclassepithelial cells
1108subclass.fullDescending Thin Limb Cell Type 1subcluster_ofclassepithelial cells
1109subclass.fullMonocyte-derived Cellsubcluster_ofclassimmune cells
1110subclass.fullCortical Collecting Duct Principal Cellsubcluster_ofclassepithelial cells
1111subclass.fullPeritubular Capilary Endothelial Cellsubcluster_ofclassendothelial cells
1112subclass.fullProximal Tubule Epithelial Cell Segment 1 / Se...subcluster_ofclassepithelial cells
1113subclass.fullProximal Tubule Epithelial Cell Segment 3subcluster_ofclassepithelial cells
1114subclass.fullCortical Thick Ascending Limb Cellsubcluster_ofclassepithelial cells
1115subclass.fullOuter Medullary Collecting Duct Principal Cellsubcluster_ofclassepithelial cells
1116subclass.fullFibroblastsubcluster_ofclassstroma cells
1117subclass.fullDegenerative Outer Medullary Collecting Duct P...subcluster_ofclassepithelial cells
1118subclass.fullT Cellsubcluster_ofclassimmune cells
1119subclass.fullPlasma Cellsubcluster_ofclassimmune cells
1120subclass.fullConnecting Tubule Principal Cellsubcluster_ofclassepithelial cells
1121subclass.fullDistal Convoluted Tubule Cell Type 1subcluster_ofclassepithelial cells
1122subclass.fullDegenerative Fibroblastsubcluster_ofclassstroma cells
1123subclass.fullDegenerative Cortical Thick Ascending Limb Cellsubcluster_ofclassepithelial cells
1124subclass.fullVascular Smooth Muscle Cellsubcluster_ofclassstroma cells
1125subclass.fullDescending Thin Limb Cell Type 3subcluster_ofclassepithelial cells
1126subclass.fullGlomerular Capillary Endothelial Cellsubcluster_ofclassendothelial cells
1127subclass.fullVascular Smooth Muscle Cell / Pericytesubcluster_ofclassstroma cells
1128subclass.fullCycling Mononuclear Phagocytesubcluster_ofclassimmune cells
1129subclass.fullMyofibroblastsubcluster_ofclassstroma cells
1130subclass.fullDegenerative Peritubular Capilary Endothelial ...subcluster_ofclassendothelial cells
1131subclass.fullNon-classical Monocytesubcluster_ofclassimmune cells
1132subclass.fullCycling Endothelial Cellsubcluster_ofclassendothelial cells
1133subclass.fullClassical Dendritic Cellsubcluster_ofclassimmune cells
1134subclass.fullLymphatic Endothelial Cellsubcluster_ofclassendothelial cells
1135subclass.fullDistal Convoluted Tubule Cell Type 2subcluster_ofclassepithelial cells
1136subclass.fullMesangial Cellsubcluster_ofclassstroma cells
1137subclass.fullIntercalated Cell Type Bsubcluster_ofclassepithelial cells
1138subclass.fullConnecting Tubule Cellsubcluster_ofclassepithelial cells
1139subclass.fullMast Cellsubcluster_ofclassimmune cells
1140subclass.fullDegenerative Vascular Smooth Muscle Cellsubcluster_ofclassstroma cells
1141subclass.fullDegenerative Ascending Thin Limb Cellsubcluster_ofclassepithelial cells
1142subclass.fullRenin-positive Juxtaglomerular Granular Cellsubcluster_ofclassstroma cells
1143subclass.fullB Cellsubcluster_ofclassimmune cells
1144subclass.fullDegenerative Cortical Intercalated Cell Type Asubcluster_ofclassepithelial cells
1145subclass.fullDegenerative Connecting Tubule Cellsubcluster_ofclassepithelial cells
1146subclass.fullAdaptive / Maladaptive / Repairing Fibroblastsubcluster_ofclassstroma cells
1147subclass.fullParietal Epithelial Cellsubcluster_ofclassepithelial cells
1148subclass.fullCycling Connecting Tubule Cellsubcluster_ofclassepithelial cells
1149subclass.fullDegenerative Inner Medullary Collecting Duct Cellsubcluster_ofclassepithelial cells
1150subclass.fullInner Medullary Collecting Duct Cellsubcluster_ofclassepithelial cells
1151subclass.fullDegenerative Endothelial Cellsubcluster_ofclassendothelial cells
1152subclass.fullDegenerative Medullary Fibroblastsubcluster_ofclassstroma cells
1153subclass.fullConnecting Tubule Intercalated Cell Type Asubcluster_ofclassepithelial cells
1154subclass.fullCycling Distal Convoluted Tubule Cellsubcluster_ofclassepithelial cells
1155subclass.fullDegenerative Podocytesubcluster_ofclassepithelial cells
1156subclass.fullPlasmacytoid Dendritic Cellsubcluster_ofclassimmune cells
1157subclass.fullDegenerative Descending Thin Limb Cell Type 3subcluster_ofclassepithelial cells
1158subclass.fullDegenerative Distal Convoluted Tubule Cellsubcluster_ofclassepithelial cells
1159subclass.fullCycling Myofibroblastsubcluster_ofclassstroma cells
1160subclass.fullPapillary Tip Epithelial Cellsubcluster_ofclassepithelial cells
1161subclass.fullCycling Natural Killer Cell / Natural Killer T...subcluster_ofclassimmune cells
1162subclass.l3dPTsubcluster_ofclassepithelial cells
1163subclass.l3aPTsubcluster_ofclassepithelial cells
1164subclass.l3M-FIBsubcluster_ofclassstroma cells
1165subclass.l3MDsubcluster_ofclassepithelial cells
1166subclass.l3NKC/Tsubcluster_ofclassimmune cells
1167subclass.l3tPC-ICsubcluster_ofclassepithelial cells
1168subclass.l3EC-DVRsubcluster_ofclassendothelial cells
1169subclass.l3M-TALsubcluster_ofclassepithelial cells
1170subclass.l3CCD-IC-Asubcluster_ofclassepithelial cells
1171subclass.l3dM-TALsubcluster_ofclassepithelial cells
1172subclass.l3EC-AVRsubcluster_ofclassendothelial cells
1173subclass.l3MAC-M2subcluster_ofclassimmune cells
1174subclass.l3cycPTsubcluster_ofclassepithelial cells
1175subclass.l3OMCD-IC-Asubcluster_ofclassepithelial cells
1176subclass.l3aTAL1subcluster_ofclassepithelial cells
1177subclass.l3EC-AEAsubcluster_ofclassendothelial cells
1178subclass.l3DTL2subcluster_ofclassepithelial cells
1179subclass.l3Nsubcluster_ofclassimmune cells
1180subclass.l3PODsubcluster_ofclassepithelial cells
1181subclass.l3ATLsubcluster_ofclassepithelial cells
1182subclass.l3DTL1subcluster_ofclassepithelial cells
1183subclass.l3MDCsubcluster_ofclassimmune cells
1184subclass.l3CCD-PCsubcluster_ofclassepithelial cells
1185subclass.l3EC-PTCsubcluster_ofclassendothelial cells
1186subclass.l3PT-S1/2subcluster_ofclassepithelial cells
1187subclass.l3PT-S3subcluster_ofclassepithelial cells
1188subclass.l3C-TALsubcluster_ofclassepithelial cells
1189subclass.l3OMCD-PCsubcluster_ofclassepithelial cells
1190subclass.l3FIBsubcluster_ofclassstroma cells
1191subclass.l3dOMCD-PCsubcluster_ofclassepithelial cells
1192subclass.l3Tsubcluster_ofclassimmune cells
1193subclass.l3PLsubcluster_ofclassimmune cells
1194subclass.l3CNT-PCsubcluster_ofclassepithelial cells
1195subclass.l3DCT1subcluster_ofclassepithelial cells
1196subclass.l3dFIBsubcluster_ofclassstroma cells
1197subclass.l3dC-TALsubcluster_ofclassepithelial cells
1198subclass.l3VSMCsubcluster_ofclassstroma cells
1199subclass.l3DTL3subcluster_ofclassepithelial cells
1200subclass.l3EC-GCsubcluster_ofclassendothelial cells
1201subclass.l3VSMC/Psubcluster_ofclassstroma cells
1202subclass.l3cycMNPsubcluster_ofclassimmune cells
1203subclass.l3MYOFsubcluster_ofclassstroma cells
1204subclass.l3dEC-PTCsubcluster_ofclassendothelial cells
1205subclass.l3ncMONsubcluster_ofclassimmune cells
1206subclass.l3cycECsubcluster_ofclassendothelial cells
1207subclass.l3cDCsubcluster_ofclassimmune cells
1208subclass.l3EC-LYMsubcluster_ofclassendothelial cells
1209subclass.l3DCT2subcluster_ofclassepithelial cells
1210subclass.l3MCsubcluster_ofclassstroma cells
1211subclass.l3IC-Bsubcluster_ofclassepithelial cells
1212subclass.l3CNTsubcluster_ofclassepithelial cells
1213subclass.l3MASTsubcluster_ofclassimmune cells
1214subclass.l3dVSMCsubcluster_ofclassstroma cells
1215subclass.l3dATLsubcluster_ofclassepithelial cells
1216subclass.l3RENsubcluster_ofclassstroma cells
1217subclass.l3Bsubcluster_ofclassimmune cells
1218subclass.l3aTAL2subcluster_ofclassepithelial cells
1219subclass.l3dC-IC-Asubcluster_ofclassepithelial cells
1220subclass.l3dCNTsubcluster_ofclassepithelial cells
1221subclass.l3aFIBsubcluster_ofclassstroma cells
1222subclass.l3PECsubcluster_ofclassepithelial cells
1223subclass.l3cycCNTsubcluster_ofclassepithelial cells
1224subclass.l3dIMCDsubcluster_ofclassepithelial cells
1225subclass.l3IMCDsubcluster_ofclassepithelial cells
1226subclass.l3dECsubcluster_ofclassendothelial cells
1227subclass.l3dM-FIBsubcluster_ofclassstroma cells
1228subclass.l3CNT-IC-Asubcluster_ofclassepithelial cells
1229subclass.l3cycDCTsubcluster_ofclassepithelial cells
1230subclass.l3dPODsubcluster_ofclassepithelial cells
1231subclass.l3pDCsubcluster_ofclassimmune cells
1232subclass.l3dDTL3subcluster_ofclassepithelial cells
1233subclass.l3dDCTsubcluster_ofclassepithelial cells
1234subclass.l3cycMYOFsubcluster_ofclassstroma cells
1235subclass.l3PapEsubcluster_ofclassepithelial cells
1236subclass.l3cycNKC/Tsubcluster_ofclassimmune cells
1237subclass.l2dPTsubcluster_ofclassepithelial cells
1238subclass.l2aPTsubcluster_ofclassepithelial cells
1239subclass.l2M-FIBsubcluster_ofclassstroma cells
1240subclass.l2MDsubcluster_ofclassepithelial cells
1241subclass.l2NKC/Tsubcluster_ofclassimmune cells
1242subclass.l2tPC-ICsubcluster_ofclassepithelial cells
1243subclass.l2EC-DVRsubcluster_ofclassendothelial cells
1244subclass.l2M-TALsubcluster_ofclassepithelial cells
1245subclass.l2C-IC-Asubcluster_ofclassepithelial cells
1246subclass.l2dM-TALsubcluster_ofclassepithelial cells
1247subclass.l2EC-AVRsubcluster_ofclassendothelial cells
1248subclass.l2MAC-M2subcluster_ofclassimmune cells
1249subclass.l2cycPTsubcluster_ofclassepithelial cells
1250subclass.l2M-IC-Asubcluster_ofclassepithelial cells
1251subclass.l2aTAL1subcluster_ofclassepithelial cells
1252subclass.l2EC-AEAsubcluster_ofclassendothelial cells
1253subclass.l2DTL2subcluster_ofclassepithelial cells
1254subclass.l2Nsubcluster_ofclassimmune cells
1255subclass.l2PODsubcluster_ofclassepithelial cells
1256subclass.l2ATLsubcluster_ofclassepithelial cells
1257subclass.l2DTL1subcluster_ofclassepithelial cells
1258subclass.l2MDCsubcluster_ofclassimmune cells
1259subclass.l2C-PCsubcluster_ofclassepithelial cells
1260subclass.l2EC-PTCsubcluster_ofclassendothelial cells
1261subclass.l2PT-S1/2subcluster_ofclassepithelial cells
1262subclass.l2PT-S3subcluster_ofclassepithelial cells
1263subclass.l2C-TALsubcluster_ofclassepithelial cells
1264subclass.l2M-PCsubcluster_ofclassepithelial cells
1265subclass.l2FIBsubcluster_ofclassstroma cells
1266subclass.l2dM-PCsubcluster_ofclassepithelial cells
1267subclass.l2Tsubcluster_ofclassimmune cells
1268subclass.l2PLsubcluster_ofclassimmune cells
1269subclass.l2CNTsubcluster_ofclassepithelial cells
1270subclass.l2DCTsubcluster_ofclassepithelial cells
1271subclass.l2dFIBsubcluster_ofclassstroma cells
1272subclass.l2dC-TALsubcluster_ofclassepithelial cells
1273subclass.l2VSMCsubcluster_ofclassstroma cells
1274subclass.l2DTL3subcluster_ofclassepithelial cells
1275subclass.l2EC-GCsubcluster_ofclassendothelial cells
1276subclass.l2VSMC/Psubcluster_ofclassstroma cells
1277subclass.l2cycMNPsubcluster_ofclassimmune cells
1278subclass.l2MYOFsubcluster_ofclassstroma cells
1279subclass.l2dEC-PTCsubcluster_ofclassendothelial cells
1280subclass.l2ncMONsubcluster_ofclassimmune cells
1281subclass.l2cycECsubcluster_ofclassendothelial cells
1282subclass.l2cDCsubcluster_ofclassimmune cells
1283subclass.l2EC-LYMsubcluster_ofclassendothelial cells
1284subclass.l2MCsubcluster_ofclassstroma cells
1285subclass.l2IC-Bsubcluster_ofclassepithelial cells
1286subclass.l2MASTsubcluster_ofclassimmune cells
1287subclass.l2dVSMCsubcluster_ofclassstroma cells
1288subclass.l2dATLsubcluster_ofclassepithelial cells
1289subclass.l2RENsubcluster_ofclassstroma cells
1290subclass.l2Bsubcluster_ofclassimmune cells
1291subclass.l2aTAL2subcluster_ofclassepithelial cells
1292subclass.l2dC-IC-Asubcluster_ofclassepithelial cells
1293subclass.l2dCNTsubcluster_ofclassepithelial cells
1294subclass.l2aFIBsubcluster_ofclassstroma cells
1295subclass.l2PECsubcluster_ofclassepithelial cells
1296subclass.l2cycCNTsubcluster_ofclassepithelial cells
1297subclass.l2dIMCDsubcluster_ofclassepithelial cells
1298subclass.l2IMCDsubcluster_ofclassepithelial cells
1299subclass.l2dECsubcluster_ofclassendothelial cells
1300subclass.l2dM-FIBsubcluster_ofclassstroma cells
1301subclass.l2cycDCTsubcluster_ofclassepithelial cells
1302subclass.l2dPODsubcluster_ofclassepithelial cells
1303subclass.l2pDCsubcluster_ofclassimmune cells
1304subclass.l2dDTL3subcluster_ofclassepithelial cells
1305subclass.l2dDCTsubcluster_ofclassepithelial cells
1306subclass.l2cycMYOFsubcluster_ofclassstroma cells
1307subclass.l2PapEsubcluster_ofclassepithelial cells
1308subclass.l2cycNKC/Tsubcluster_ofclassimmune cells
1309subclass.l1PTsubcluster_ofclassepithelial cells
1310subclass.l1FIBsubcluster_ofclassstroma cells
1311subclass.l1TALsubcluster_ofclassepithelial cells
1312subclass.l1ICsubcluster_ofclassepithelial cells
1313subclass.l1DTLsubcluster_ofclassepithelial cells
1314subclass.l1PODsubcluster_ofclassepithelial cells
1315subclass.l1ATLsubcluster_ofclassepithelial cells
1316subclass.l1PCsubcluster_ofclassepithelial cells
1317subclass.l1CNTsubcluster_ofclassepithelial cells
1318subclass.l1DCTsubcluster_ofclassepithelial cells
1319subclass.l1VSM/Psubcluster_ofclassstroma cells
1320subclass.l1PECsubcluster_ofclassepithelial cells
1321subclass.l1PapEsubcluster_ofclassepithelial cells
1322state.l2adaptive - episubcluster_ofclassepithelial cells
1323state.l2transitioningsubcluster_ofclassepithelial cells
1324state.l2adaptive - strsubcluster_ofclassstroma cells
1325cell_typeepithelial cell of proximal tubulesubcluster_ofclassepithelial cells
1326cell_typekidney interstitial fibroblastsubcluster_ofclassstroma cells
1327cell_typekidney loop of Henle thick ascending limb epit...subcluster_ofclassepithelial cells
1328cell_typeleukocytecluster_matchesclassimmune cells
1329cell_typekidney collecting duct intercalated cellsubcluster_ofclassepithelial cells
1330cell_typeendothelial cellcluster_matchesclassendothelial cells
1331cell_typekidney loop of Henle thin descending limb epit...subcluster_ofclassepithelial cells
1332cell_typepodocytesubcluster_ofclassepithelial cells
1333cell_typekidney loop of Henle thin ascending limb epith...subcluster_ofclassepithelial cells
1334cell_typekidney collecting duct principal cellsubcluster_ofclassepithelial cells
1335cell_typekidney connecting tubule epithelial cellsubcluster_ofclassepithelial cells
1336cell_typekidney distal convoluted tubule epithelial cellsubcluster_ofclassepithelial cells
1337cell_typerenal interstitial pericytesubcluster_ofclassstroma cells
1338cell_typeneural cellcluster_matchesclassneural cells
1339cell_typeparietal epithelial cellsubcluster_ofclassepithelial cells
1340cell_typepapillary tips cellsubcluster_ofclassepithelial cells
1341subclass.fullDegenerative Proximal Tubule Epithelial Cellsubcluster_ofcell_typeepithelial cell of proximal tubule
1342subclass.fullAdaptive / Maladaptive / Repairing Proximal Tu...subcluster_ofcell_typeepithelial cell of proximal tubule
1343subclass.fullMedullary Fibroblastsubcluster_ofcell_typekidney interstitial fibroblast
1344subclass.fullMacula Densa Cellsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1345subclass.fullNatural Killer Cell / Natural Killer T Cellsubcluster_ofcell_typeleukocyte
1346subclass.fullTransitional Principal-Intercalated Cellsubcluster_ofcell_typekidney collecting duct intercalated cell
1347subclass.fullDescending Vasa Recta Endothelial Cellsubcluster_ofcell_typeendothelial cell
1348subclass.fullMedullary Thick Ascending Limb Cellsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1349subclass.fullCortical Collecting Duct Intercalated Cell Type Asubcluster_ofcell_typekidney collecting duct intercalated cell
1350subclass.fullDegenerative Medullary Thick Ascending Limb Cellsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1351subclass.fullAscending Vasa Recta Endothelial Cellsubcluster_ofcell_typeendothelial cell
1352subclass.fullM2 Macrophagesubcluster_ofcell_typeleukocyte
1353subclass.fullCycling Proximal Tubule Epithelial Cellsubcluster_ofcell_typeepithelial cell of proximal tubule
1354subclass.fullOuter Medullary Collecting Duct Intercalated C...subcluster_ofcell_typekidney collecting duct intercalated cell
1355subclass.fullAdaptive / Maladaptive / Repairing Thick Ascen...subcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1356subclass.fullAfferent / Efferent Arteriole Endothelial Cellsubcluster_ofcell_typeendothelial cell
1357subclass.fullDescending Thin Limb Cell Type 2subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1358subclass.fullNeutrophilsubcluster_ofcell_typeleukocyte
1359subclass.fullPodocytesubcluster_ofcell_typepodocyte
1360subclass.fullAscending Thin Limb Cellsubcluster_ofcell_typekidney loop of Henle thin ascending limb epith...
1361subclass.fullDescending Thin Limb Cell Type 1subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1362subclass.fullMonocyte-derived Cellsubcluster_ofcell_typeleukocyte
1363subclass.fullCortical Collecting Duct Principal Cellsubcluster_ofcell_typekidney collecting duct principal cell
1364subclass.fullPeritubular Capilary Endothelial Cellsubcluster_ofcell_typeendothelial cell
1365subclass.fullProximal Tubule Epithelial Cell Segment 1 / Se...subcluster_ofcell_typeepithelial cell of proximal tubule
1366subclass.fullProximal Tubule Epithelial Cell Segment 3subcluster_ofcell_typeepithelial cell of proximal tubule
1367subclass.fullCortical Thick Ascending Limb Cellsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1368subclass.fullOuter Medullary Collecting Duct Principal Cellsubcluster_ofcell_typekidney collecting duct principal cell
1369subclass.fullFibroblastsubcluster_ofcell_typekidney interstitial fibroblast
1370subclass.fullDegenerative Outer Medullary Collecting Duct P...subcluster_ofcell_typekidney collecting duct principal cell
1371subclass.fullT Cellsubcluster_ofcell_typeleukocyte
1372subclass.fullPlasma Cellsubcluster_ofcell_typeleukocyte
1373subclass.fullConnecting Tubule Principal Cellsubcluster_ofcell_typekidney connecting tubule epithelial cell
1374subclass.fullDistal Convoluted Tubule Cell Type 1subcluster_ofcell_typekidney distal convoluted tubule epithelial cell
1375subclass.fullDegenerative Fibroblastsubcluster_ofcell_typekidney interstitial fibroblast
1376subclass.fullDegenerative Cortical Thick Ascending Limb Cellsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1377subclass.fullVascular Smooth Muscle Cellsubcluster_ofcell_typerenal interstitial pericyte
1378subclass.fullDescending Thin Limb Cell Type 3subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1379subclass.fullGlomerular Capillary Endothelial Cellsubcluster_ofcell_typeendothelial cell
1380subclass.fullVascular Smooth Muscle Cell / Pericytesubcluster_ofcell_typerenal interstitial pericyte
1381subclass.fullCycling Mononuclear Phagocytesubcluster_ofcell_typeleukocyte
1382subclass.fullMyofibroblastsubcluster_ofcell_typekidney interstitial fibroblast
1383subclass.fullDegenerative Peritubular Capilary Endothelial ...subcluster_ofcell_typeendothelial cell
1384subclass.fullNon-classical Monocytesubcluster_ofcell_typeleukocyte
1385subclass.fullCycling Endothelial Cellsubcluster_ofcell_typeendothelial cell
1386subclass.fullClassical Dendritic Cellsubcluster_ofcell_typeleukocyte
1387subclass.fullLymphatic Endothelial Cellsubcluster_ofcell_typeendothelial cell
1388subclass.fullDistal Convoluted Tubule Cell Type 2subcluster_ofcell_typekidney distal convoluted tubule epithelial cell
1389subclass.fullMesangial Cellsubcluster_ofcell_typerenal interstitial pericyte
1390subclass.fullIntercalated Cell Type Bsubcluster_ofcell_typekidney collecting duct intercalated cell
1391subclass.fullConnecting Tubule Cellsubcluster_ofcell_typekidney connecting tubule epithelial cell
1392subclass.fullMast Cellsubcluster_ofcell_typeleukocyte
1393subclass.fullDegenerative Vascular Smooth Muscle Cellsubcluster_ofcell_typerenal interstitial pericyte
1394subclass.fullDegenerative Ascending Thin Limb Cellsubcluster_ofcell_typekidney loop of Henle thin ascending limb epith...
1395subclass.fullRenin-positive Juxtaglomerular Granular Cellsubcluster_ofcell_typerenal interstitial pericyte
1396subclass.fullB Cellsubcluster_ofcell_typeleukocyte
1397subclass.fullDegenerative Cortical Intercalated Cell Type Asubcluster_ofcell_typekidney collecting duct intercalated cell
1398subclass.fullDegenerative Connecting Tubule Cellsubcluster_ofcell_typekidney connecting tubule epithelial cell
1399subclass.fullAdaptive / Maladaptive / Repairing Fibroblastsubcluster_ofcell_typekidney interstitial fibroblast
1400subclass.fullCycling Connecting Tubule Cellsubcluster_ofcell_typekidney connecting tubule epithelial cell
1401subclass.fullDegenerative Inner Medullary Collecting Duct Cellsubcluster_ofcell_typekidney collecting duct principal cell
1402subclass.fullInner Medullary Collecting Duct Cellsubcluster_ofcell_typekidney collecting duct principal cell
1403subclass.fullDegenerative Endothelial Cellsubcluster_ofcell_typeendothelial cell
1404subclass.fullDegenerative Medullary Fibroblastsubcluster_ofcell_typekidney interstitial fibroblast
1405subclass.fullConnecting Tubule Intercalated Cell Type Asubcluster_ofcell_typekidney collecting duct intercalated cell
1406subclass.fullCycling Distal Convoluted Tubule Cellsubcluster_ofcell_typekidney distal convoluted tubule epithelial cell
1407subclass.fullDegenerative Podocytesubcluster_ofcell_typepodocyte
1408subclass.fullPlasmacytoid Dendritic Cellsubcluster_ofcell_typeleukocyte
1409subclass.fullDegenerative Descending Thin Limb Cell Type 3subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1410subclass.fullDegenerative Distal Convoluted Tubule Cellsubcluster_ofcell_typekidney distal convoluted tubule epithelial cell
1411subclass.fullCycling Myofibroblastsubcluster_ofcell_typekidney interstitial fibroblast
1412subclass.fullCycling Natural Killer Cell / Natural Killer T...subcluster_ofcell_typeleukocyte
1413subclass.l3dPTsubcluster_ofcell_typeepithelial cell of proximal tubule
1414subclass.l3aPTsubcluster_ofcell_typeepithelial cell of proximal tubule
1415subclass.l3M-FIBsubcluster_ofcell_typekidney interstitial fibroblast
1416subclass.l3MDsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1417subclass.l3NKC/Tsubcluster_ofcell_typeleukocyte
1418subclass.l3tPC-ICsubcluster_ofcell_typekidney collecting duct intercalated cell
1419subclass.l3EC-DVRsubcluster_ofcell_typeendothelial cell
1420subclass.l3M-TALsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1421subclass.l3CCD-IC-Asubcluster_ofcell_typekidney collecting duct intercalated cell
1422subclass.l3dM-TALsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1423subclass.l3EC-AVRsubcluster_ofcell_typeendothelial cell
1424subclass.l3MAC-M2subcluster_ofcell_typeleukocyte
1425subclass.l3cycPTsubcluster_ofcell_typeepithelial cell of proximal tubule
1426subclass.l3OMCD-IC-Asubcluster_ofcell_typekidney collecting duct intercalated cell
1427subclass.l3aTAL1subcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1428subclass.l3EC-AEAsubcluster_ofcell_typeendothelial cell
1429subclass.l3DTL2subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1430subclass.l3Nsubcluster_ofcell_typeleukocyte
1431subclass.l3PODsubcluster_ofcell_typepodocyte
1432subclass.l3ATLsubcluster_ofcell_typekidney loop of Henle thin ascending limb epith...
1433subclass.l3DTL1subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1434subclass.l3MDCsubcluster_ofcell_typeleukocyte
1435subclass.l3CCD-PCsubcluster_ofcell_typekidney collecting duct principal cell
1436subclass.l3EC-PTCsubcluster_ofcell_typeendothelial cell
1437subclass.l3PT-S1/2subcluster_ofcell_typeepithelial cell of proximal tubule
1438subclass.l3PT-S3subcluster_ofcell_typeepithelial cell of proximal tubule
1439subclass.l3C-TALsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1440subclass.l3OMCD-PCsubcluster_ofcell_typekidney collecting duct principal cell
1441subclass.l3FIBsubcluster_ofcell_typekidney interstitial fibroblast
1442subclass.l3dOMCD-PCsubcluster_ofcell_typekidney collecting duct principal cell
1443subclass.l3Tsubcluster_ofcell_typeleukocyte
1444subclass.l3PLsubcluster_ofcell_typeleukocyte
1445subclass.l3CNT-PCsubcluster_ofcell_typekidney connecting tubule epithelial cell
1446subclass.l3DCT1subcluster_ofcell_typekidney distal convoluted tubule epithelial cell
1447subclass.l3dFIBsubcluster_ofcell_typekidney interstitial fibroblast
1448subclass.l3dC-TALsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1449subclass.l3VSMCsubcluster_ofcell_typerenal interstitial pericyte
1450subclass.l3DTL3subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1451subclass.l3EC-GCsubcluster_ofcell_typeendothelial cell
1452subclass.l3VSMC/Psubcluster_ofcell_typerenal interstitial pericyte
1453subclass.l3cycMNPsubcluster_ofcell_typeleukocyte
1454subclass.l3MYOFsubcluster_ofcell_typekidney interstitial fibroblast
1455subclass.l3dEC-PTCsubcluster_ofcell_typeendothelial cell
1456subclass.l3ncMONsubcluster_ofcell_typeleukocyte
1457subclass.l3cycECsubcluster_ofcell_typeendothelial cell
1458subclass.l3cDCsubcluster_ofcell_typeleukocyte
1459subclass.l3EC-LYMsubcluster_ofcell_typeendothelial cell
1460subclass.l3DCT2subcluster_ofcell_typekidney distal convoluted tubule epithelial cell
1461subclass.l3MCsubcluster_ofcell_typerenal interstitial pericyte
1462subclass.l3IC-Bsubcluster_ofcell_typekidney collecting duct intercalated cell
1463subclass.l3CNTsubcluster_ofcell_typekidney connecting tubule epithelial cell
1464subclass.l3MASTsubcluster_ofcell_typeleukocyte
1465subclass.l3dVSMCsubcluster_ofcell_typerenal interstitial pericyte
1466subclass.l3dATLsubcluster_ofcell_typekidney loop of Henle thin ascending limb epith...
1467subclass.l3RENsubcluster_ofcell_typerenal interstitial pericyte
1468subclass.l3Bsubcluster_ofcell_typeleukocyte
1469subclass.l3aTAL2subcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1470subclass.l3dC-IC-Asubcluster_ofcell_typekidney collecting duct intercalated cell
1471subclass.l3dCNTsubcluster_ofcell_typekidney connecting tubule epithelial cell
1472subclass.l3aFIBsubcluster_ofcell_typekidney interstitial fibroblast
1473subclass.l3cycCNTsubcluster_ofcell_typekidney connecting tubule epithelial cell
1474subclass.l3dIMCDsubcluster_ofcell_typekidney collecting duct principal cell
1475subclass.l3IMCDsubcluster_ofcell_typekidney collecting duct principal cell
1476subclass.l3dECsubcluster_ofcell_typeendothelial cell
1477subclass.l3dM-FIBsubcluster_ofcell_typekidney interstitial fibroblast
1478subclass.l3CNT-IC-Asubcluster_ofcell_typekidney collecting duct intercalated cell
1479subclass.l3cycDCTsubcluster_ofcell_typekidney distal convoluted tubule epithelial cell
1480subclass.l3dPODsubcluster_ofcell_typepodocyte
1481subclass.l3pDCsubcluster_ofcell_typeleukocyte
1482subclass.l3dDTL3subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1483subclass.l3dDCTsubcluster_ofcell_typekidney distal convoluted tubule epithelial cell
1484subclass.l3cycMYOFsubcluster_ofcell_typekidney interstitial fibroblast
1485subclass.l3cycNKC/Tsubcluster_ofcell_typeleukocyte
1486subclass.l2dPTsubcluster_ofcell_typeepithelial cell of proximal tubule
1487subclass.l2aPTsubcluster_ofcell_typeepithelial cell of proximal tubule
1488subclass.l2M-FIBsubcluster_ofcell_typekidney interstitial fibroblast
1489subclass.l2MDsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1490subclass.l2NKC/Tsubcluster_ofcell_typeleukocyte
1491subclass.l2tPC-ICsubcluster_ofcell_typekidney collecting duct intercalated cell
1492subclass.l2EC-DVRsubcluster_ofcell_typeendothelial cell
1493subclass.l2M-TALsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1494subclass.l2C-IC-Asubcluster_ofcell_typekidney collecting duct intercalated cell
1495subclass.l2dM-TALsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1496subclass.l2EC-AVRsubcluster_ofcell_typeendothelial cell
1497subclass.l2MAC-M2subcluster_ofcell_typeleukocyte
1498subclass.l2cycPTsubcluster_ofcell_typeepithelial cell of proximal tubule
1499subclass.l2M-IC-Asubcluster_ofcell_typekidney collecting duct intercalated cell
1500subclass.l2aTAL1subcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1501subclass.l2EC-AEAsubcluster_ofcell_typeendothelial cell
1502subclass.l2DTL2subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1503subclass.l2Nsubcluster_ofcell_typeleukocyte
1504subclass.l2PODsubcluster_ofcell_typepodocyte
1505subclass.l2ATLsubcluster_ofcell_typekidney loop of Henle thin ascending limb epith...
1506subclass.l2DTL1subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1507subclass.l2MDCsubcluster_ofcell_typeleukocyte
1508subclass.l2C-PCsubcluster_ofcell_typekidney collecting duct principal cell
1509subclass.l2EC-PTCsubcluster_ofcell_typeendothelial cell
1510subclass.l2PT-S1/2subcluster_ofcell_typeepithelial cell of proximal tubule
1511subclass.l2PT-S3subcluster_ofcell_typeepithelial cell of proximal tubule
1512subclass.l2C-TALsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1513subclass.l2M-PCsubcluster_ofcell_typekidney collecting duct principal cell
1514subclass.l2FIBsubcluster_ofcell_typekidney interstitial fibroblast
1515subclass.l2dM-PCsubcluster_ofcell_typekidney collecting duct principal cell
1516subclass.l2Tsubcluster_ofcell_typeleukocyte
1517subclass.l2PLsubcluster_ofcell_typeleukocyte
1518subclass.l2CNTsubcluster_ofcell_typekidney connecting tubule epithelial cell
1519subclass.l2DCTsubcluster_ofcell_typekidney distal convoluted tubule epithelial cell
1520subclass.l2dFIBsubcluster_ofcell_typekidney interstitial fibroblast
1521subclass.l2dC-TALsubcluster_ofcell_typekidney loop of Henle thick ascending limb epit...
1522subclass.l2VSMCsubcluster_ofcell_typerenal interstitial pericyte
1523subclass.l2DTL3subcluster_ofcell_typekidney loop of Henle thin descending limb epit...
1524subclass.l2EC-GCsubcluster_ofcell_typeendothelial cell
1525subclass.l2VSMC/Psubcluster_ofcell_typerenal interstitial pericyte
1526subclass.l2cycMNPsubcluster_ofcell_typeleukocyte
1527subclass.l2MYOFsubcluster_ofcell_typekidney interstitial fibroblast
1528subclass.l2dEC-PTCsubcluster_ofcell_typeendothelial cell
1529subclass.l2ncMONsubcluster_ofcell_typeleukocyte
1530subclass.l2cycECsubcluster_ofcell_typeendothelial cell
1531subclass.l2cDCsubcluster_ofcell_typeleukocyte
1532subclass.l2EC-LYMsubcluster_ofcell_typeendothelial cell
1533subclass.l2MCsubcluster_ofcell_typerenal interstitial pericyte
1534subclass.l2IC-Bsubcluster_ofcell_typekidney collecting duct intercalated cell
1535subclass.l2MASTsubcluster_ofcluster_matchescell_typeleukocytegamma-delta T cell
1536subclass.l2dVSMCsubcluster_of3author_cell_typeplasmablastcluster_matchescell_typerenal interstitial pericyteplasmablast
1537subclass.l2dATLsubcluster_of4author_cell_typeregulatory T cellcluster_matchescell_typekidney loop of Henle thin ascending limb epith...regulatory T cell
1538subclass.l2RENsubcluster_of5author_cell_typeCD4-positive, alpha-beta memory T cellcluster_matchescell_typerenal interstitial pericyteCD4-positive, alpha-beta memory T cell
1539subclass.l2Bsubcluster_of6author_cell_typeCD8-positive, alpha-beta memory T cellcluster_matchescell_typeleukocyteCD8-positive, alpha-beta memory T cell
1540subclass.l2aTAL2subcluster_of7author_cell_typenaive CD8+ T cellcluster_matchescell_typekidney loop of Henle thick ascending limb epit...naive thymus-derived CD8-positive, alpha-beta ...
1541subclass.l2dC-IC-Asubcluster_of8author_cell_typenaive CD4+ T cellcluster_matchescell_typekidney collecting duct intercalated cellnaive thymus-derived CD4-positive, alpha-beta ...
1542subclass.l2dCNTsubcluster_of9author_cell_typemucosal invariant T cell (MAIT)cluster_matchescell_typekidney connecting tubule epithelial cellmucosal invariant T cell
1543subclass.l2aFIBsubcluster_of10author_cell_typeTissueResMemTcluster_matchescell_typekidney interstitial fibroblastmemory T cell
1544subclass.l2cycCNTsubcluster_of11author_cell_typedouble-positive T cell (DPT)cluster_matchescell_typekidney connecting tubule epithelial celldouble-positive, alpha-beta thymocyte
1545subclass.l2dIMCDsubcluster_of12author_cell_typedouble negative T cell (DNT)cluster_matchescell_typekidney collecting duct principal celldouble negative thymocyte
1546subclass.l2IMCDsubcluster_of13author_cell_typeTCRVbeta13.1poscluster_matchescell_typekidney collecting duct principal cellT cell
\n", + "
" + ], + "text/plain": [ + " field_name1 value1 predicate \\\n", + "0 author_cell_type naive B cell cluster_matches \n", + "1 author_cell_type memory B cell cluster_matches \n", + "2 author_cell_type gamma-delta T cell cluster_matches \n", + "3 author_cell_type plasmablast cluster_matches \n", + "4 author_cell_type regulatory T cell cluster_matches \n", + "5 author_cell_type CD4-positive, alpha-beta memory T cell cluster_matches \n", + "6 author_cell_type CD8-positive, alpha-beta memory T cell cluster_matches \n", + "7 author_cell_type naive CD8+ T cell cluster_matches \n", + "8 author_cell_type naive CD4+ T cell cluster_matches \n", + "9 author_cell_type mucosal invariant T cell (MAIT) cluster_matches \n", + "10 author_cell_type TissueResMemT cluster_matches \n", + "11 author_cell_type double-positive T cell (DPT) cluster_matches \n", + "12 author_cell_type double negative T cell (DNT) cluster_matches \n", + "13 author_cell_type TCRVbeta13.1pos cluster_matches \n", + "\n", + " field_name2 value2 \n", + "0 cell_type naive B cell \n", + "1 cell_type memory B cell \n", + "2 cell_type gamma-delta T cell \n", + "3 cell_type plasmablast \n", + "4 cell_type regulatory T cell \n", + "5 cell_type CD4-positive, alpha-beta memory T cell \n", + "6 cell_type CD8-positive, alpha-beta memory T cell \n", + "7 cell_type naive thymus-derived CD8-positive, alpha-beta ... \n", + "8 cell_type naive thymus-derived CD4-positive, alpha-beta ... \n", + "9 cell_type mucosal invariant T cell \n", + "10 cell_type memory T cell \n", + "11 cell_type double-positive, alpha-beta thymocyte \n", + "12 cell_type double negative thymocyte \n", + "13 cell_type T cell " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ada.co_annotation_report()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, each cell set defined by an 'author_cell_type' value has a matching cell set defined by the cell_type field (which contains a cell ontology term)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Secondary Example" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", "
field_name1value1predicatefield_name2value2
1547subclass.l2dECsubcluster_ofcell_typeendothelial cell0subclass.l3dPTcluster_matchessubclass.fullDegenerative Proximal Tubule Epithelial Cell
1548subclass.l2dM-FIBsubcluster_ofcell_typekidney interstitial fibroblast1subclass.l3aPTcluster_matchessubclass.fullAdaptive / Maladaptive / Repairing Proximal Tu...
1549subclass.l2cycDCTsubcluster_ofcell_typekidney distal convoluted tubule epithelial cell2subclass.l3M-FIBcluster_matchessubclass.fullMedullary Fibroblast
1550subclass.l2dPODsubcluster_ofcell_typepodocyte3subclass.l3MDcluster_matchessubclass.fullMacula Densa Cell
1551subclass.l2pDCsubcluster_ofcell_typeleukocyte4subclass.l3NKC/Tcluster_matchessubclass.fullNatural Killer Cell / Natural Killer T Cell
1552subclass.l2dDTL3subcluster_ofcell_typekidney loop of Henle thin descending limb epit.....................
1553subclass.l2dDCTsubcluster_of415cell_typekidney distal convoluted tubule epithelial cellsubcluster_ofclassepithelial cells
1554subclass.l2cycMYOFsubcluster_of416cell_typekidney interstitial fibroblastrenal interstitial pericytesubcluster_ofclassstroma cells
1555subclass.l2cycNKC/Tsubcluster_of417cell_typeleukocyteneural cellcluster_matchesclassneural cells
1556state.l2transitioningsubcluster_of418cell_typekidney collecting duct intercalated cellparietal epithelial cellsubcluster_ofclassepithelial cells
1557state.l2adaptive - strsubcluster_of419cell_typekidney interstitial fibroblastpapillary tips cellsubcluster_ofclassepithelial cells
\n", + "

420 rows × 5 columns

\n", "
" ], "text/plain": [ - " field_name1 value1 \\\n", - "0 subclass.l3 dPT \n", - "1 subclass.l3 aPT \n", - "2 subclass.l3 M-FIB \n", - "3 subclass.l3 MD \n", - "4 subclass.l3 NKC/T \n", - "5 subclass.l3 tPC-IC \n", - "6 subclass.l3 EC-DVR \n", - "7 subclass.l3 M-TAL \n", - "8 subclass.l3 CCD-IC-A \n", - "9 subclass.l3 dM-TAL \n", - "10 subclass.l3 EC-AVR \n", - "11 subclass.l3 MAC-M2 \n", - "12 subclass.l3 cycPT \n", - "13 subclass.l3 OMCD-IC-A \n", - "14 subclass.l3 aTAL1 \n", - "15 subclass.l3 EC-AEA \n", - "16 subclass.l3 DTL2 \n", - "17 subclass.l3 N \n", - "18 subclass.l3 POD \n", - "19 subclass.l3 ATL \n", - "20 subclass.l3 DTL1 \n", - "21 subclass.l3 MDC \n", - "22 subclass.l3 CCD-PC \n", - "23 subclass.l3 EC-PTC \n", - "24 subclass.l3 PT-S1/2 \n", - "25 subclass.l3 PT-S3 \n", - "26 subclass.l3 C-TAL \n", - "27 subclass.l3 OMCD-PC \n", - "28 subclass.l3 FIB \n", - "29 subclass.l3 dOMCD-PC \n", - "30 subclass.l3 T \n", - "31 subclass.l3 PL \n", - "32 subclass.l3 CNT-PC \n", - "33 subclass.l3 DCT1 \n", - "34 subclass.l3 dFIB \n", - "35 subclass.l3 dC-TAL \n", - "36 subclass.l3 VSMC \n", - "37 subclass.l3 SC/NEU \n", - "38 subclass.l3 DTL3 \n", - "39 subclass.l3 EC-GC \n", - "40 subclass.l3 VSMC/P \n", - "41 subclass.l3 cycMNP \n", - "42 subclass.l3 MYOF \n", - "43 subclass.l3 dEC-PTC \n", - "44 subclass.l3 ncMON \n", - "45 subclass.l3 cycEC \n", - "46 subclass.l3 cDC \n", - "47 subclass.l3 EC-LYM \n", - "48 subclass.l3 DCT2 \n", - "49 subclass.l3 MC \n", - "50 subclass.l3 IC-B \n", - "51 subclass.l3 CNT \n", - "52 subclass.l3 MAST \n", - "53 subclass.l3 dVSMC \n", - "54 subclass.l3 dATL \n", - "55 subclass.l3 REN \n", - "56 subclass.l3 B \n", - "57 subclass.l3 aTAL2 \n", - "58 subclass.l3 dC-IC-A \n", - "59 subclass.l3 dCNT \n", - "60 subclass.l3 aFIB \n", - "61 subclass.l3 PEC \n", - "62 subclass.l3 cycCNT \n", - "63 subclass.l3 dIMCD \n", - "64 subclass.l3 IMCD \n", - "65 subclass.l3 dEC \n", - "66 subclass.l3 dM-FIB \n", - "67 subclass.l3 CNT-IC-A \n", - "68 subclass.l3 cycDCT \n", - "69 subclass.l3 dPOD \n", - "70 subclass.l3 pDC \n", - "71 subclass.l3 dDTL3 \n", - "72 subclass.l3 dDCT \n", - "73 subclass.l3 cycMYOF \n", - "74 subclass.l3 PapE \n", - "75 subclass.l3 cycNKC/T \n", - "76 subclass.l2 dPT \n", - "77 subclass.l2 aPT \n", - "78 subclass.l2 M-FIB \n", - "79 subclass.l2 MD \n", - "80 subclass.l2 NKC/T \n", - "81 subclass.l2 tPC-IC \n", - "82 subclass.l2 EC-DVR \n", - "83 subclass.l2 M-TAL \n", - "84 subclass.l2 dM-TAL \n", - "85 subclass.l2 EC-AVR \n", - "86 subclass.l2 MAC-M2 \n", - "87 subclass.l2 cycPT \n", - "88 subclass.l2 M-IC-A \n", - "89 subclass.l2 aTAL1 \n", - "90 subclass.l2 EC-AEA \n", - "91 subclass.l2 DTL2 \n", - "92 subclass.l2 N \n", - "93 subclass.l2 POD \n", - "94 subclass.l2 ATL \n", - "95 subclass.l2 DTL1 \n", - "96 subclass.l2 MDC \n", - "97 subclass.l2 C-PC \n", - "98 subclass.l2 EC-PTC \n", - "99 subclass.l2 PT-S1/2 \n", - "100 subclass.l2 PT-S3 \n", - "101 subclass.l2 C-TAL \n", - "102 subclass.l2 M-PC \n", - "103 subclass.l2 FIB \n", - "104 subclass.l2 dM-PC \n", - "105 subclass.l2 T \n", - "106 subclass.l2 PL \n", - "107 subclass.l2 dFIB \n", - "108 subclass.l2 dC-TAL \n", - "109 subclass.l2 VSMC \n", - "110 subclass.l2 SC/NEU \n", - "111 subclass.l2 DTL3 \n", - "112 subclass.l2 EC-GC \n", - "113 subclass.l2 VSMC/P \n", - "114 subclass.l2 cycMNP \n", - "115 subclass.l2 MYOF \n", - "116 subclass.l2 dEC-PTC \n", - "117 subclass.l2 ncMON \n", - "118 subclass.l2 cycEC \n", - "119 subclass.l2 cDC \n", - "120 subclass.l2 EC-LYM \n", - "121 subclass.l2 MC \n", - "122 subclass.l2 IC-B \n", - "123 subclass.l2 MAST \n", - "124 subclass.l2 dVSMC \n", - "125 subclass.l2 dATL \n", - "126 subclass.l2 REN \n", - "127 subclass.l2 B \n", - "128 subclass.l2 aTAL2 \n", - "129 subclass.l2 dC-IC-A \n", - "130 subclass.l2 dCNT \n", - "131 subclass.l2 aFIB \n", - "132 subclass.l2 PEC \n", - "133 subclass.l2 cycCNT \n", - "134 subclass.l2 dIMCD \n", - "135 subclass.l2 IMCD \n", - "136 subclass.l2 dEC \n", - "137 subclass.l2 dM-FIB \n", - "138 subclass.l2 cycDCT \n", - "139 subclass.l2 dPOD \n", - "140 subclass.l2 pDC \n", - "141 subclass.l2 dDTL3 \n", - "142 subclass.l2 dDCT \n", - "143 subclass.l2 cycMYOF \n", - "144 subclass.l2 PapE \n", - "145 subclass.l2 cycNKC/T \n", - "146 subclass.l1 NEU \n", - "147 subclass.l1 PEC \n", - "148 subclass.l1 PapE \n", - "149 state.l2 transitioning \n", - "150 class neural cells \n", - "151 cell_type neural cell \n", - "152 cell_type parietal epithelial cell \n", - "153 cell_type papillary tips cell \n", - "154 subclass.l2 dPT \n", - "155 subclass.l2 aPT \n", - "156 subclass.l2 M-FIB \n", - "157 subclass.l2 MD \n", - "158 subclass.l2 NKC/T \n", - "159 subclass.l2 tPC-IC \n", - "160 subclass.l2 EC-DVR \n", - "161 subclass.l2 M-TAL \n", - "162 subclass.l2 dM-TAL \n", - "163 subclass.l2 EC-AVR \n", - "164 subclass.l2 MAC-M2 \n", - "165 subclass.l2 cycPT \n", - "166 subclass.l2 M-IC-A \n", - "167 subclass.l2 aTAL1 \n", - "168 subclass.l2 EC-AEA \n", - "169 subclass.l2 DTL2 \n", - "170 subclass.l2 N \n", - "171 subclass.l2 POD \n", - "172 subclass.l2 ATL \n", - "173 subclass.l2 DTL1 \n", - "174 subclass.l2 MDC \n", - "175 subclass.l2 C-PC \n", - "176 subclass.l2 EC-PTC \n", - "177 subclass.l2 PT-S1/2 \n", - "178 subclass.l2 PT-S3 \n", - "179 subclass.l2 C-TAL \n", - "180 subclass.l2 M-PC \n", - "181 subclass.l2 FIB \n", - "182 subclass.l2 dM-PC \n", - "183 subclass.l2 T \n", - "184 subclass.l2 PL \n", - "185 subclass.l2 dFIB \n", - "186 subclass.l2 dC-TAL \n", - "187 subclass.l2 VSMC \n", - "188 subclass.l2 SC/NEU \n", - "189 subclass.l2 DTL3 \n", - "190 subclass.l2 EC-GC \n", - "191 subclass.l2 VSMC/P \n", - "192 subclass.l2 cycMNP \n", - "193 subclass.l2 MYOF \n", - "194 subclass.l2 dEC-PTC \n", - "195 subclass.l2 ncMON \n", - "196 subclass.l2 cycEC \n", - "197 subclass.l2 cDC \n", - "198 subclass.l2 EC-LYM \n", - "199 subclass.l2 MC \n", - "200 subclass.l2 IC-B \n", - "201 subclass.l2 MAST \n", - "202 subclass.l2 dVSMC \n", - "203 subclass.l2 dATL \n", - "204 subclass.l2 REN \n", - "205 subclass.l2 B \n", - "206 subclass.l2 aTAL2 \n", - "207 subclass.l2 dC-IC-A \n", - "208 subclass.l2 dCNT \n", - "209 subclass.l2 aFIB \n", - "210 subclass.l2 PEC \n", - "211 subclass.l2 cycCNT \n", - "212 subclass.l2 dIMCD \n", - "213 subclass.l2 IMCD \n", - "214 subclass.l2 dEC \n", - "215 subclass.l2 dM-FIB \n", - "216 subclass.l2 cycDCT \n", - "217 subclass.l2 dPOD \n", - "218 subclass.l2 pDC \n", - "219 subclass.l2 dDTL3 \n", - "220 subclass.l2 dDCT \n", - "221 subclass.l2 cycMYOF \n", - "222 subclass.l2 PapE \n", - "223 subclass.l2 cycNKC/T \n", - "224 subclass.l1 NEU \n", - "225 subclass.l1 PEC \n", - "226 subclass.l1 PapE \n", - "227 state.l2 transitioning \n", - "228 class neural cells \n", - "229 cell_type neural cell \n", - "230 cell_type parietal epithelial cell \n", - "231 cell_type papillary tips cell \n", - "232 subclass.full Cortical Collecting Duct Intercalated Cell Type A \n", - "233 subclass.full Connecting Tubule Principal Cell \n", - "234 subclass.full Distal Convoluted Tubule Cell Type 1 \n", - "235 subclass.full Distal Convoluted Tubule Cell Type 2 \n", - "236 subclass.full Connecting Tubule Cell \n", - "237 subclass.full Connecting Tubule Intercalated Cell Type A \n", - "238 subclass.l3 CCD-IC-A \n", - "239 subclass.l3 CNT-PC \n", - "240 subclass.l3 DCT1 \n", - "241 subclass.l3 DCT2 \n", - "242 subclass.l3 CNT \n", - "243 subclass.l3 CNT-IC-A \n", - "244 subclass.l1 NEU \n", - "245 subclass.l1 PEC \n", - "246 subclass.l1 PapE \n", - "247 state.l2 transitioning \n", - "248 class neural cells \n", - "249 cell_type neural cell \n", - "250 cell_type parietal epithelial cell \n", - "251 cell_type papillary tips cell \n", - "252 subclass.full Degenerative Proximal Tubule Epithelial Cell \n", - "253 subclass.full Adaptive / Maladaptive / Repairing Proximal Tu... \n", - "254 subclass.full Medullary Fibroblast \n", - "255 subclass.full Macula Densa Cell \n", - "256 subclass.full Natural Killer Cell / Natural Killer T Cell \n", - "257 subclass.full Transitional Principal-Intercalated Cell \n", - "258 subclass.full Descending Vasa Recta Endothelial Cell \n", - "259 subclass.full Medullary Thick Ascending Limb Cell \n", - "260 subclass.full Cortical Collecting Duct Intercalated Cell Type A \n", - "261 subclass.full Degenerative Medullary Thick Ascending Limb Cell \n", - "262 subclass.full Ascending Vasa Recta Endothelial Cell \n", - "263 subclass.full M2 Macrophage \n", - "264 subclass.full Cycling Proximal Tubule Epithelial Cell \n", - "265 subclass.full Outer Medullary Collecting Duct Intercalated C... \n", - "266 subclass.full Adaptive / Maladaptive / Repairing Thick Ascen... \n", - "267 subclass.full Afferent / Efferent Arteriole Endothelial Cell \n", - "268 subclass.full Descending Thin Limb Cell Type 2 \n", - "269 subclass.full Neutrophil \n", - "270 subclass.full Podocyte \n", - "271 subclass.full Ascending Thin Limb Cell \n", - "272 subclass.full Descending Thin Limb Cell Type 1 \n", - "273 subclass.full Monocyte-derived Cell \n", - "274 subclass.full Cortical Collecting Duct Principal Cell \n", - "275 subclass.full Peritubular Capilary Endothelial Cell \n", - "276 subclass.full Proximal Tubule Epithelial Cell Segment 1 / Se... \n", - "277 subclass.full Proximal Tubule Epithelial Cell Segment 3 \n", - "278 subclass.full Cortical Thick Ascending Limb Cell \n", - "279 subclass.full Outer Medullary Collecting Duct Principal Cell \n", - "280 subclass.full Fibroblast \n", - "281 subclass.full Degenerative Outer Medullary Collecting Duct P... \n", - "282 subclass.full T Cell \n", - "283 subclass.full Plasma Cell \n", - "284 subclass.full Connecting Tubule Principal Cell \n", - "285 subclass.full Distal Convoluted Tubule Cell Type 1 \n", - "286 subclass.full Degenerative Fibroblast \n", - "287 subclass.full Degenerative Cortical Thick Ascending Limb Cell \n", - "288 subclass.full Vascular Smooth Muscle Cell \n", - "289 subclass.full Descending Thin Limb Cell Type 3 \n", - "290 subclass.full Glomerular Capillary Endothelial Cell \n", - "291 subclass.full Vascular Smooth Muscle Cell / Pericyte \n", - "292 subclass.full Cycling Mononuclear Phagocyte \n", - "293 subclass.full Myofibroblast \n", - "294 subclass.full Degenerative Peritubular Capilary Endothelial ... \n", - "295 subclass.full Non-classical Monocyte \n", - "296 subclass.full Cycling Endothelial Cell \n", - "297 subclass.full Classical Dendritic Cell \n", - "298 subclass.full Lymphatic Endothelial Cell \n", - "299 subclass.full Distal Convoluted Tubule Cell Type 2 \n", - "300 subclass.full Mesangial Cell \n", - "301 subclass.full Intercalated Cell Type B \n", - "302 subclass.full Connecting Tubule Cell \n", - "303 subclass.full Mast Cell \n", - "304 subclass.full Degenerative Vascular Smooth Muscle Cell \n", - "305 subclass.full Degenerative Ascending Thin Limb Cell \n", - "306 subclass.full Renin-positive Juxtaglomerular Granular Cell \n", - "307 subclass.full B Cell \n", - "308 subclass.full Degenerative Cortical Intercalated Cell Type A \n", - "309 subclass.full Degenerative Connecting Tubule Cell \n", - "310 subclass.full Adaptive / Maladaptive / Repairing Fibroblast \n", - "311 subclass.full Cycling Connecting Tubule Cell \n", - "312 subclass.full Degenerative Inner Medullary Collecting Duct Cell \n", - "313 subclass.full Inner Medullary Collecting Duct Cell \n", - "314 subclass.full Degenerative Endothelial Cell \n", - "315 subclass.full Degenerative Medullary Fibroblast \n", - "316 subclass.full Connecting Tubule Intercalated Cell Type A \n", - "317 subclass.full Cycling Distal Convoluted Tubule Cell \n", - "318 subclass.full Degenerative Podocyte \n", - "319 subclass.full Plasmacytoid Dendritic Cell \n", - "320 subclass.full Degenerative Descending Thin Limb Cell Type 3 \n", - "321 subclass.full Degenerative Distal Convoluted Tubule Cell \n", - "322 subclass.full Cycling Myofibroblast \n", - "323 subclass.full Cycling Natural Killer Cell / Natural Killer T... \n", - "324 subclass.l3 dPT \n", - "325 subclass.l3 aPT \n", - "326 subclass.l3 M-FIB \n", - "327 subclass.l3 MD \n", - "328 subclass.l3 NKC/T \n", - "329 subclass.l3 tPC-IC \n", - "330 subclass.l3 EC-DVR \n", - "331 subclass.l3 M-TAL \n", - "332 subclass.l3 CCD-IC-A \n", - "333 subclass.l3 dM-TAL \n", - "334 subclass.l3 EC-AVR \n", - "335 subclass.l3 MAC-M2 \n", - "336 subclass.l3 cycPT \n", - "337 subclass.l3 OMCD-IC-A \n", - "338 subclass.l3 aTAL1 \n", - "339 subclass.l3 EC-AEA \n", - "340 subclass.l3 DTL2 \n", - "341 subclass.l3 N \n", - "342 subclass.l3 POD \n", - "343 subclass.l3 ATL \n", - "344 subclass.l3 DTL1 \n", - "345 subclass.l3 MDC \n", - "346 subclass.l3 CCD-PC \n", - "347 subclass.l3 EC-PTC \n", - "348 subclass.l3 PT-S1/2 \n", - "349 subclass.l3 PT-S3 \n", - "350 subclass.l3 C-TAL \n", - "351 subclass.l3 OMCD-PC \n", - "352 subclass.l3 FIB \n", - "353 subclass.l3 dOMCD-PC \n", - "354 subclass.l3 T \n", - "355 subclass.l3 PL \n", - "356 subclass.l3 CNT-PC \n", - "357 subclass.l3 DCT1 \n", - "358 subclass.l3 dFIB \n", - "359 subclass.l3 dC-TAL \n", - "360 subclass.l3 VSMC \n", - "361 subclass.l3 DTL3 \n", - "362 subclass.l3 EC-GC \n", - "363 subclass.l3 VSMC/P \n", - "364 subclass.l3 cycMNP \n", - "365 subclass.l3 MYOF \n", - "366 subclass.l3 dEC-PTC \n", - "367 subclass.l3 ncMON \n", - "368 subclass.l3 cycEC \n", - "369 subclass.l3 cDC \n", - "370 subclass.l3 EC-LYM \n", - "371 subclass.l3 DCT2 \n", - "372 subclass.l3 MC \n", - "373 subclass.l3 IC-B \n", - "374 subclass.l3 CNT \n", - "375 subclass.l3 MAST \n", - "376 subclass.l3 dVSMC \n", - "377 subclass.l3 dATL \n", - "378 subclass.l3 REN \n", - "379 subclass.l3 B \n", - "380 subclass.l3 aTAL2 \n", - "381 subclass.l3 dC-IC-A \n", - "382 subclass.l3 dCNT \n", - "383 subclass.l3 aFIB \n", - "384 subclass.l3 cycCNT \n", - "385 subclass.l3 dIMCD \n", - "386 subclass.l3 IMCD \n", - "387 subclass.l3 dEC \n", - "388 subclass.l3 dM-FIB \n", - "389 subclass.l3 CNT-IC-A \n", - "390 subclass.l3 cycDCT \n", - "391 subclass.l3 dPOD \n", - "392 subclass.l3 pDC \n", - "393 subclass.l3 dDTL3 \n", - "394 subclass.l3 dDCT \n", - "395 subclass.l3 cycMYOF \n", - "396 subclass.l3 cycNKC/T \n", - "397 subclass.l2 dPT \n", - "398 subclass.l2 aPT \n", - "399 subclass.l2 M-FIB \n", - "400 subclass.l2 MD \n", - "401 subclass.l2 NKC/T \n", - "402 subclass.l2 tPC-IC \n", - "403 subclass.l2 EC-DVR \n", - "404 subclass.l2 M-TAL \n", - "405 subclass.l2 C-IC-A \n", - "406 subclass.l2 dM-TAL \n", - "407 subclass.l2 EC-AVR \n", - "408 subclass.l2 MAC-M2 \n", - "409 subclass.l2 cycPT \n", - "410 subclass.l2 M-IC-A \n", - "411 subclass.l2 aTAL1 \n", - "412 subclass.l2 EC-AEA \n", - "413 subclass.l2 DTL2 \n", - "414 subclass.l2 N \n", - "415 subclass.l2 POD \n", - "416 subclass.l2 ATL \n", - "417 subclass.l2 DTL1 \n", - "418 subclass.l2 MDC \n", - "419 subclass.l2 C-PC \n", - "420 subclass.l2 EC-PTC \n", - "421 subclass.l2 PT-S1/2 \n", - "422 subclass.l2 PT-S3 \n", - "423 subclass.l2 C-TAL \n", - "424 subclass.l2 M-PC \n", - "425 subclass.l2 FIB \n", - "426 subclass.l2 dM-PC \n", - "427 subclass.l2 T \n", - "428 subclass.l2 PL \n", - "429 subclass.l2 CNT \n", - "430 subclass.l2 DCT \n", - "431 subclass.l2 dFIB \n", - "432 subclass.l2 dC-TAL \n", - "433 subclass.l2 VSMC \n", - "434 subclass.l2 DTL3 \n", - "435 subclass.l2 EC-GC \n", - "436 subclass.l2 VSMC/P \n", - "437 subclass.l2 cycMNP \n", - "438 subclass.l2 MYOF \n", - "439 subclass.l2 dEC-PTC \n", - "440 subclass.l2 ncMON \n", - "441 subclass.l2 cycEC \n", - "442 subclass.l2 cDC \n", - "443 subclass.l2 EC-LYM \n", - "444 subclass.l2 MC \n", - "445 subclass.l2 IC-B \n", - "446 subclass.l2 MAST \n", - "447 subclass.l2 dVSMC \n", - "448 subclass.l2 dATL \n", - "449 subclass.l2 REN \n", - "450 subclass.l2 B \n", - "451 subclass.l2 aTAL2 \n", - "452 subclass.l2 dC-IC-A \n", - "453 subclass.l2 dCNT \n", - "454 subclass.l2 aFIB \n", - "455 subclass.l2 cycCNT \n", - "456 subclass.l2 dIMCD \n", - "457 subclass.l2 IMCD \n", - "458 subclass.l2 dEC \n", - "459 subclass.l2 dM-FIB \n", - "460 subclass.l2 cycDCT \n", - "461 subclass.l2 dPOD \n", - "462 subclass.l2 pDC \n", - "463 subclass.l2 dDTL3 \n", - "464 subclass.l2 dDCT \n", - "465 subclass.l2 cycMYOF \n", - "466 subclass.l2 cycNKC/T \n", - "467 state.l2 degenerative \n", - "468 state.l2 adaptive - epi \n", - "469 state.l2 reference \n", - "470 state.l2 reference \n", - "471 state.l2 reference \n", - "472 state.l2 transitioning \n", - "473 state.l2 reference \n", - "474 state.l2 reference \n", - "475 state.l2 degenerative \n", - "476 state.l2 cycling \n", - "477 state.l2 adaptive - epi \n", - "478 state.l2 reference \n", - "479 state.l2 reference \n", - "480 state.l2 reference \n", - "481 state.l2 reference \n", - "482 state.l2 reference \n", - "483 state.l2 degenerative \n", - "484 state.l2 reference \n", - "485 state.l2 reference \n", - "486 state.l2 degenerative \n", - "487 state.l2 reference \n", - "488 state.l2 cycling \n", - "489 state.l2 adaptive - str \n", - "490 state.l2 degenerative \n", - "491 state.l2 cycling \n", - "492 state.l2 degenerative \n", - "493 state.l2 degenerative \n", - "494 state.l2 degenerative \n", - "495 state.l2 degenerative \n", - "496 state.l2 cycling \n", - "497 state.l2 cycling \n", - "498 state.l2 degenerative \n", - "499 state.l2 degenerative \n", - "500 state.l2 degenerative \n", - "501 state.l2 cycling \n", - "502 state altered \n", - "503 state reference \n", - "504 state reference \n", - "505 state altered \n", - "506 state reference \n", - "507 state reference \n", - "508 state altered \n", - "509 state reference \n", - "510 state reference \n", - "511 state reference \n", - "512 state reference \n", - "513 state reference \n", - "514 state altered \n", - "515 state reference \n", - "516 state reference \n", - "517 state altered \n", - "518 state reference \n", - "519 state altered \n", - "520 state altered \n", - "521 state altered \n", - "522 state altered \n", - "523 state altered \n", - "524 state altered \n", - "525 state altered \n", - "526 class immune cells \n", - "527 class endothelial cells \n", - "528 class neural cells \n", - "529 cell_type epithelial cell of proximal tubule \n", - "530 cell_type kidney interstitial fibroblast \n", - "531 cell_type kidney loop of Henle thick ascending limb epit... \n", - "532 cell_type leukocyte \n", - "533 cell_type kidney collecting duct intercalated cell \n", - "534 cell_type endothelial cell \n", - "535 cell_type kidney loop of Henle thin descending limb epit... \n", - "536 cell_type podocyte \n", - "537 cell_type kidney loop of Henle thin ascending limb epith... \n", - "538 cell_type kidney collecting duct principal cell \n", - "539 cell_type kidney connecting tubule epithelial cell \n", - "540 cell_type kidney distal convoluted tubule epithelial cell \n", - "541 cell_type renal interstitial pericyte \n", - "542 cell_type neural cell \n", - "543 cell_type parietal epithelial cell \n", - "544 cell_type papillary tips cell \n", - "545 subclass.full Degenerative Proximal Tubule Epithelial Cell \n", - "546 subclass.full Adaptive / Maladaptive / Repairing Proximal Tu... \n", - "547 subclass.full Medullary Fibroblast \n", - "548 subclass.full Macula Densa Cell \n", - "549 subclass.full Natural Killer Cell / Natural Killer T Cell \n", - "550 subclass.full Descending Vasa Recta Endothelial Cell \n", - "551 subclass.full Medullary Thick Ascending Limb Cell \n", - "552 subclass.full Cortical Collecting Duct Intercalated Cell Type A \n", - "553 subclass.full Degenerative Medullary Thick Ascending Limb Cell \n", - "554 subclass.full Ascending Vasa Recta Endothelial Cell \n", - "555 subclass.full M2 Macrophage \n", - "556 subclass.full Cycling Proximal Tubule Epithelial Cell \n", - "557 subclass.full Outer Medullary Collecting Duct Intercalated C... \n", - "558 subclass.full Adaptive / Maladaptive / Repairing Thick Ascen... \n", - "559 subclass.full Afferent / Efferent Arteriole Endothelial Cell \n", - "560 subclass.full Descending Thin Limb Cell Type 2 \n", - "561 subclass.full Neutrophil \n", - "562 subclass.full Podocyte \n", - "563 subclass.full Ascending Thin Limb Cell \n", - "564 subclass.full Descending Thin Limb Cell Type 1 \n", - "565 subclass.full Monocyte-derived Cell \n", - "566 subclass.full Cortical Collecting Duct Principal Cell \n", - "567 subclass.full Peritubular Capilary Endothelial Cell \n", - "568 subclass.full Proximal Tubule Epithelial Cell Segment 1 / Se... \n", - "569 subclass.full Proximal Tubule Epithelial Cell Segment 3 \n", - "570 subclass.full Cortical Thick Ascending Limb Cell \n", - "571 subclass.full Outer Medullary Collecting Duct Principal Cell \n", - "572 subclass.full Fibroblast \n", - "573 subclass.full Degenerative Outer Medullary Collecting Duct P... \n", - "574 subclass.full T Cell \n", - "575 subclass.full Plasma Cell \n", - "576 subclass.full Connecting Tubule Principal Cell \n", - "577 subclass.full Distal Convoluted Tubule Cell Type 1 \n", - "578 subclass.full Degenerative Fibroblast \n", - "579 subclass.full Degenerative Cortical Thick Ascending Limb Cell \n", - "580 subclass.full Vascular Smooth Muscle Cell \n", - "581 subclass.full Schwann Cell / Neural \n", - "582 subclass.full Descending Thin Limb Cell Type 3 \n", - "583 subclass.full Glomerular Capillary Endothelial Cell \n", - "584 subclass.full Vascular Smooth Muscle Cell / Pericyte \n", - "585 subclass.full Cycling Mononuclear Phagocyte \n", - "586 subclass.full Myofibroblast \n", - "587 subclass.full Degenerative Peritubular Capilary Endothelial ... \n", - "588 subclass.full Non-classical Monocyte \n", - "589 subclass.full Cycling Endothelial Cell \n", - "590 subclass.full Classical Dendritic Cell \n", - "591 subclass.full Lymphatic Endothelial Cell \n", - "592 subclass.full Distal Convoluted Tubule Cell Type 2 \n", - "593 subclass.full Mesangial Cell \n", - "594 subclass.full Intercalated Cell Type B \n", - "595 subclass.full Connecting Tubule Cell \n", - "596 subclass.full Mast Cell \n", - "597 subclass.full Degenerative Vascular Smooth Muscle Cell \n", - "598 subclass.full Degenerative Ascending Thin Limb Cell \n", - "599 subclass.full Renin-positive Juxtaglomerular Granular Cell \n", - "600 subclass.full B Cell \n", - "601 subclass.full Degenerative Cortical Intercalated Cell Type A \n", - "602 subclass.full Degenerative Connecting Tubule Cell \n", - "603 subclass.full Adaptive / Maladaptive / Repairing Fibroblast \n", - "604 subclass.full Parietal Epithelial Cell \n", - "605 subclass.full Cycling Connecting Tubule Cell \n", - "606 subclass.full Degenerative Inner Medullary Collecting Duct Cell \n", - "607 subclass.full Inner Medullary Collecting Duct Cell \n", - "608 subclass.full Degenerative Endothelial Cell \n", - "609 subclass.full Degenerative Medullary Fibroblast \n", - "610 subclass.full Connecting Tubule Intercalated Cell Type A \n", - "611 subclass.full Cycling Distal Convoluted Tubule Cell \n", - "612 subclass.full Degenerative Podocyte \n", - "613 subclass.full Plasmacytoid Dendritic Cell \n", - "614 subclass.full Degenerative Descending Thin Limb Cell Type 3 \n", - "615 subclass.full Degenerative Distal Convoluted Tubule Cell \n", - "616 subclass.full Cycling Myofibroblast \n", - "617 subclass.full Papillary Tip Epithelial Cell \n", - "618 subclass.full Cycling Natural Killer Cell / Natural Killer T... \n", - "619 subclass.l3 dPT \n", - "620 subclass.l3 aPT \n", - "621 subclass.l3 M-FIB \n", - "622 subclass.l3 MD \n", - "623 subclass.l3 NKC/T \n", - "624 subclass.l3 EC-DVR \n", - "625 subclass.l3 M-TAL \n", - "626 subclass.l3 CCD-IC-A \n", - "627 subclass.l3 dM-TAL \n", - "628 subclass.l3 EC-AVR \n", - "629 subclass.l3 MAC-M2 \n", - "630 subclass.l3 cycPT \n", - "631 subclass.l3 OMCD-IC-A \n", - "632 subclass.l3 aTAL1 \n", - "633 subclass.l3 EC-AEA \n", - "634 subclass.l3 DTL2 \n", - "635 subclass.l3 N \n", - "636 subclass.l3 POD \n", - "637 subclass.l3 ATL \n", - "638 subclass.l3 DTL1 \n", - "639 subclass.l3 MDC \n", - "640 subclass.l3 CCD-PC \n", - "641 subclass.l3 EC-PTC \n", - "642 subclass.l3 PT-S1/2 \n", - "643 subclass.l3 PT-S3 \n", - "644 subclass.l3 C-TAL \n", - "645 subclass.l3 OMCD-PC \n", - "646 subclass.l3 FIB \n", - "647 subclass.l3 dOMCD-PC \n", - "648 subclass.l3 T \n", - "649 subclass.l3 PL \n", - "650 subclass.l3 CNT-PC \n", - "651 subclass.l3 DCT1 \n", - "652 subclass.l3 dFIB \n", - "653 subclass.l3 dC-TAL \n", - "654 subclass.l3 VSMC \n", - "655 subclass.l3 SC/NEU \n", - "656 subclass.l3 DTL3 \n", - "657 subclass.l3 EC-GC \n", - "658 subclass.l3 VSMC/P \n", - "659 subclass.l3 cycMNP \n", - "660 subclass.l3 MYOF \n", - "661 subclass.l3 dEC-PTC \n", - "662 subclass.l3 ncMON \n", - "663 subclass.l3 cycEC \n", - "664 subclass.l3 cDC \n", - "665 subclass.l3 EC-LYM \n", - "666 subclass.l3 DCT2 \n", - "667 subclass.l3 MC \n", - "668 subclass.l3 IC-B \n", - "669 subclass.l3 CNT \n", - "670 subclass.l3 MAST \n", - "671 subclass.l3 dVSMC \n", - "672 subclass.l3 dATL \n", - "673 subclass.l3 REN \n", - "674 subclass.l3 B \n", - "675 subclass.l3 aTAL2 \n", - "676 subclass.l3 dC-IC-A \n", - "677 subclass.l3 dCNT \n", - "678 subclass.l3 aFIB \n", - "679 subclass.l3 PEC \n", - "680 subclass.l3 cycCNT \n", - "681 subclass.l3 dIMCD \n", - "682 subclass.l3 IMCD \n", - "683 subclass.l3 dEC \n", - "684 subclass.l3 dM-FIB \n", - "685 subclass.l3 CNT-IC-A \n", - "686 subclass.l3 cycDCT \n", - "687 subclass.l3 dPOD \n", - "688 subclass.l3 pDC \n", - "689 subclass.l3 dDTL3 \n", - "690 subclass.l3 dDCT \n", - "691 subclass.l3 cycMYOF \n", - "692 subclass.l3 PapE \n", - "693 subclass.l3 cycNKC/T \n", - "694 subclass.l2 dPT \n", - "695 subclass.l2 aPT \n", - "696 subclass.l2 M-FIB \n", - "697 subclass.l2 MD \n", - "698 subclass.l2 NKC/T \n", - "699 subclass.l2 EC-DVR \n", - "700 subclass.l2 M-TAL \n", - "701 subclass.l2 C-IC-A \n", - "702 subclass.l2 dM-TAL \n", - "703 subclass.l2 EC-AVR \n", - "704 subclass.l2 MAC-M2 \n", - "705 subclass.l2 cycPT \n", - "706 subclass.l2 M-IC-A \n", - "707 subclass.l2 aTAL1 \n", - "708 subclass.l2 EC-AEA \n", - "709 subclass.l2 DTL2 \n", - "710 subclass.l2 N \n", - "711 subclass.l2 POD \n", - "712 subclass.l2 ATL \n", - "713 subclass.l2 DTL1 \n", - "714 subclass.l2 MDC \n", - "715 subclass.l2 C-PC \n", - "716 subclass.l2 EC-PTC \n", - "717 subclass.l2 PT-S1/2 \n", - "718 subclass.l2 PT-S3 \n", - "719 subclass.l2 C-TAL \n", - "720 subclass.l2 M-PC \n", - "721 subclass.l2 FIB \n", - "722 subclass.l2 dM-PC \n", - "723 subclass.l2 T \n", - "724 subclass.l2 PL \n", - "725 subclass.l2 CNT \n", - "726 subclass.l2 DCT \n", - "727 subclass.l2 dFIB \n", - "728 subclass.l2 dC-TAL \n", - "729 subclass.l2 VSMC \n", - "730 subclass.l2 SC/NEU \n", - "731 subclass.l2 DTL3 \n", - "732 subclass.l2 EC-GC \n", - "733 subclass.l2 VSMC/P \n", - "734 subclass.l2 cycMNP \n", - "735 subclass.l2 MYOF \n", - "736 subclass.l2 dEC-PTC \n", - "737 subclass.l2 ncMON \n", - "738 subclass.l2 cycEC \n", - "739 subclass.l2 cDC \n", - "740 subclass.l2 EC-LYM \n", - "741 subclass.l2 MC \n", - "742 subclass.l2 IC-B \n", - "743 subclass.l2 MAST \n", - "744 subclass.l2 dVSMC \n", - "745 subclass.l2 dATL \n", - "746 subclass.l2 REN \n", - "747 subclass.l2 B \n", - "748 subclass.l2 aTAL2 \n", - "749 subclass.l2 dC-IC-A \n", - "750 subclass.l2 dCNT \n", - "751 subclass.l2 aFIB \n", - "752 subclass.l2 PEC \n", - "753 subclass.l2 cycCNT \n", - "754 subclass.l2 dIMCD \n", - "755 subclass.l2 IMCD \n", - "756 subclass.l2 dEC \n", - "757 subclass.l2 dM-FIB \n", - "758 subclass.l2 cycDCT \n", - "759 subclass.l2 dPOD \n", - "760 subclass.l2 pDC \n", - "761 subclass.l2 dDTL3 \n", - "762 subclass.l2 dDCT \n", - "763 subclass.l2 cycMYOF \n", - "764 subclass.l2 PapE \n", - "765 subclass.l2 cycNKC/T \n", - "766 subclass.l1 NEU \n", - "767 subclass.l1 PEC \n", - "768 subclass.l1 PapE \n", - "769 state altered \n", - "770 state reference \n", - "771 class epithelial cells \n", - "772 class stroma cells \n", - "773 class epithelial cells \n", - "774 class immune cells \n", - "775 class endothelial cells \n", - "776 class epithelial cells \n", - "777 class stroma cells \n", - "778 class neural cells \n", - "779 class immune cells \n", - "780 class endothelial cells \n", - "781 class endothelial cells \n", - "782 class stroma cells \n", - "783 cell_type epithelial cell of proximal tubule \n", - "784 cell_type epithelial cell of proximal tubule \n", - "785 cell_type kidney interstitial fibroblast \n", - "786 cell_type kidney loop of Henle thick ascending limb epit... \n", - "787 cell_type leukocyte \n", - "788 cell_type endothelial cell \n", - "789 cell_type kidney collecting duct intercalated cell \n", - "790 cell_type kidney loop of Henle thick ascending limb epit... \n", - "791 cell_type epithelial cell of proximal tubule \n", - "792 cell_type kidney loop of Henle thick ascending limb epit... \n", - "793 cell_type kidney loop of Henle thin descending limb epit... \n", - "794 cell_type podocyte \n", - "795 cell_type kidney loop of Henle thin ascending limb epith... \n", - "796 cell_type kidney collecting duct principal cell \n", - "797 cell_type epithelial cell of proximal tubule \n", - "798 cell_type kidney collecting duct principal cell \n", - "799 cell_type kidney connecting tubule epithelial cell \n", - "800 cell_type kidney distal convoluted tubule epithelial cell \n", - "801 cell_type kidney interstitial fibroblast \n", - "802 cell_type renal interstitial pericyte \n", - "803 cell_type neural cell \n", - "804 cell_type leukocyte \n", - "805 cell_type endothelial cell \n", - "806 cell_type endothelial cell \n", - "807 cell_type renal interstitial pericyte \n", - "808 cell_type kidney loop of Henle thin ascending limb epith... \n", - "809 cell_type kidney collecting duct intercalated cell \n", - "810 cell_type kidney connecting tubule epithelial cell \n", - "811 cell_type parietal epithelial cell \n", - "812 cell_type kidney connecting tubule epithelial cell \n", - "813 cell_type kidney distal convoluted tubule epithelial cell \n", - "814 cell_type podocyte \n", - "815 cell_type kidney loop of Henle thin descending limb epit... \n", - "816 cell_type kidney distal convoluted tubule epithelial cell \n", - "817 cell_type kidney interstitial fibroblast \n", - "818 cell_type papillary tips cell \n", - "819 subclass.full Degenerative Proximal Tubule Epithelial Cell \n", - "820 subclass.full Adaptive / Maladaptive / Repairing Proximal Tu... \n", - "821 subclass.full Medullary Fibroblast \n", - "822 subclass.full Macula Densa Cell \n", - "823 subclass.full Natural Killer Cell / Natural Killer T Cell \n", - "824 subclass.full Transitional Principal-Intercalated Cell \n", - "825 subclass.full Descending Vasa Recta Endothelial Cell \n", - "826 subclass.full Medullary Thick Ascending Limb Cell \n", - "827 subclass.full Cortical Collecting Duct Intercalated Cell Type A \n", - "828 subclass.full Degenerative Medullary Thick Ascending Limb Cell \n", - "829 subclass.full Ascending Vasa Recta Endothelial Cell \n", - "830 subclass.full M2 Macrophage \n", - "831 subclass.full Cycling Proximal Tubule Epithelial Cell \n", - "832 subclass.full Outer Medullary Collecting Duct Intercalated C... \n", - "833 subclass.full Adaptive / Maladaptive / Repairing Thick Ascen... \n", - "834 subclass.full Afferent / Efferent Arteriole Endothelial Cell \n", - "835 subclass.full Descending Thin Limb Cell Type 2 \n", - "836 subclass.full Neutrophil \n", - "837 subclass.full Podocyte \n", - "838 subclass.full Ascending Thin Limb Cell \n", - "839 subclass.full Descending Thin Limb Cell Type 1 \n", - "840 subclass.full Monocyte-derived Cell \n", - "841 subclass.full Cortical Collecting Duct Principal Cell \n", - "842 subclass.full Peritubular Capilary Endothelial Cell \n", - "843 subclass.full Proximal Tubule Epithelial Cell Segment 1 / Se... \n", - "844 subclass.full Proximal Tubule Epithelial Cell Segment 3 \n", - "845 subclass.full Cortical Thick Ascending Limb Cell \n", - "846 subclass.full Outer Medullary Collecting Duct Principal Cell \n", - "847 subclass.full Fibroblast \n", - "848 subclass.full Degenerative Outer Medullary Collecting Duct P... \n", - "849 subclass.full T Cell \n", - "850 subclass.full Plasma Cell \n", - "851 subclass.full Connecting Tubule Principal Cell \n", - "852 subclass.full Distal Convoluted Tubule Cell Type 1 \n", - "853 subclass.full Degenerative Fibroblast \n", - "854 subclass.full Degenerative Cortical Thick Ascending Limb Cell \n", - "855 subclass.full Vascular Smooth Muscle Cell \n", - "856 subclass.full Schwann Cell / Neural \n", - "857 subclass.full Descending Thin Limb Cell Type 3 \n", - "858 subclass.full Glomerular Capillary Endothelial Cell \n", - "859 subclass.full Vascular Smooth Muscle Cell / Pericyte \n", - "860 subclass.full Cycling Mononuclear Phagocyte \n", - "861 subclass.full Myofibroblast \n", - "862 subclass.full Degenerative Peritubular Capilary Endothelial ... \n", - "863 subclass.full Non-classical Monocyte \n", - "864 subclass.full Cycling Endothelial Cell \n", - "865 subclass.full Classical Dendritic Cell \n", - "866 subclass.full Lymphatic Endothelial Cell \n", - "867 subclass.full Distal Convoluted Tubule Cell Type 2 \n", - "868 subclass.full Mesangial Cell \n", - "869 subclass.full Intercalated Cell Type B \n", - "870 subclass.full Connecting Tubule Cell \n", - "871 subclass.full Mast Cell \n", - "872 subclass.full Degenerative Vascular Smooth Muscle Cell \n", - "873 subclass.full Degenerative Ascending Thin Limb Cell \n", - "874 subclass.full Renin-positive Juxtaglomerular Granular Cell \n", - "875 subclass.full B Cell \n", - "876 subclass.full Degenerative Cortical Intercalated Cell Type A \n", - "877 subclass.full Degenerative Connecting Tubule Cell \n", - "878 subclass.full Adaptive / Maladaptive / Repairing Fibroblast \n", - "879 subclass.full Parietal Epithelial Cell \n", - "880 subclass.full Cycling Connecting Tubule Cell \n", - "881 subclass.full Degenerative Inner Medullary Collecting Duct Cell \n", - "882 subclass.full Inner Medullary Collecting Duct Cell \n", - "883 subclass.full Degenerative Endothelial Cell \n", - "884 subclass.full Degenerative Medullary Fibroblast \n", - "885 subclass.full Connecting Tubule Intercalated Cell Type A \n", - "886 subclass.full Cycling Distal Convoluted Tubule Cell \n", - "887 subclass.full Degenerative Podocyte \n", - "888 subclass.full Plasmacytoid Dendritic Cell \n", - "889 subclass.full Degenerative Descending Thin Limb Cell Type 3 \n", - "890 subclass.full Degenerative Distal Convoluted Tubule Cell \n", - "891 subclass.full Cycling Myofibroblast \n", - "892 subclass.full Papillary Tip Epithelial Cell \n", - "893 subclass.full Cycling Natural Killer Cell / Natural Killer T... \n", - "894 subclass.l3 dPT \n", - "895 subclass.l3 aPT \n", - "896 subclass.l3 M-FIB \n", - "897 subclass.l3 MD \n", - "898 subclass.l3 NKC/T \n", - "899 subclass.l3 tPC-IC \n", - "900 subclass.l3 EC-DVR \n", - "901 subclass.l3 M-TAL \n", - "902 subclass.l3 CCD-IC-A \n", - "903 subclass.l3 dM-TAL \n", - "904 subclass.l3 EC-AVR \n", - "905 subclass.l3 MAC-M2 \n", - "906 subclass.l3 cycPT \n", - "907 subclass.l3 OMCD-IC-A \n", - "908 subclass.l3 aTAL1 \n", - "909 subclass.l3 EC-AEA \n", - "910 subclass.l3 DTL2 \n", - "911 subclass.l3 N \n", - "912 subclass.l3 POD \n", - "913 subclass.l3 ATL \n", - "914 subclass.l3 DTL1 \n", - "915 subclass.l3 MDC \n", - "916 subclass.l3 CCD-PC \n", - "917 subclass.l3 EC-PTC \n", - "918 subclass.l3 PT-S1/2 \n", - "919 subclass.l3 PT-S3 \n", - "920 subclass.l3 C-TAL \n", - "921 subclass.l3 OMCD-PC \n", - "922 subclass.l3 FIB \n", - "923 subclass.l3 dOMCD-PC \n", - "924 subclass.l3 T \n", - "925 subclass.l3 PL \n", - "926 subclass.l3 CNT-PC \n", - "927 subclass.l3 DCT1 \n", - "928 subclass.l3 dFIB \n", - "929 subclass.l3 dC-TAL \n", - "930 subclass.l3 VSMC \n", - "931 subclass.l3 SC/NEU \n", - "932 subclass.l3 DTL3 \n", - "933 subclass.l3 EC-GC \n", - "934 subclass.l3 VSMC/P \n", - "935 subclass.l3 cycMNP \n", - "936 subclass.l3 MYOF \n", - "937 subclass.l3 dEC-PTC \n", - "938 subclass.l3 ncMON \n", - "939 subclass.l3 cycEC \n", - "940 subclass.l3 cDC \n", - "941 subclass.l3 EC-LYM \n", - "942 subclass.l3 DCT2 \n", - "943 subclass.l3 MC \n", - "944 subclass.l3 IC-B \n", - "945 subclass.l3 CNT \n", - "946 subclass.l3 MAST \n", - "947 subclass.l3 dVSMC \n", - "948 subclass.l3 dATL \n", - "949 subclass.l3 REN \n", - "950 subclass.l3 B \n", - "951 subclass.l3 aTAL2 \n", - "952 subclass.l3 dC-IC-A \n", - "953 subclass.l3 dCNT \n", - "954 subclass.l3 aFIB \n", - "955 subclass.l3 PEC \n", - "956 subclass.l3 cycCNT \n", - "957 subclass.l3 dIMCD \n", - "958 subclass.l3 IMCD \n", - "959 subclass.l3 dEC \n", - "960 subclass.l3 dM-FIB \n", - "961 subclass.l3 CNT-IC-A \n", - "962 subclass.l3 cycDCT \n", - "963 subclass.l3 dPOD \n", - "964 subclass.l3 pDC \n", - "965 subclass.l3 dDTL3 \n", - "966 subclass.l3 dDCT \n", - "967 subclass.l3 cycMYOF \n", - "968 subclass.l3 PapE \n", - "969 subclass.l3 cycNKC/T \n", - "970 subclass.l2 dPT \n", - "971 subclass.l2 aPT \n", - "972 subclass.l2 M-FIB \n", - "973 subclass.l2 MD \n", - "974 subclass.l2 NKC/T \n", - "975 subclass.l2 tPC-IC \n", - "976 subclass.l2 EC-DVR \n", - "977 subclass.l2 M-TAL \n", - "978 subclass.l2 C-IC-A \n", - "979 subclass.l2 dM-TAL \n", - "980 subclass.l2 EC-AVR \n", - "981 subclass.l2 MAC-M2 \n", - "982 subclass.l2 cycPT \n", - "983 subclass.l2 M-IC-A \n", - "984 subclass.l2 aTAL1 \n", - "985 subclass.l2 EC-AEA \n", - "986 subclass.l2 DTL2 \n", - "987 subclass.l2 N \n", - "988 subclass.l2 POD \n", - "989 subclass.l2 ATL \n", - "990 subclass.l2 DTL1 \n", - "991 subclass.l2 MDC \n", - "992 subclass.l2 C-PC \n", - "993 subclass.l2 EC-PTC \n", - "994 subclass.l2 PT-S1/2 \n", - "995 subclass.l2 PT-S3 \n", - "996 subclass.l2 C-TAL \n", - "997 subclass.l2 M-PC \n", - "998 subclass.l2 FIB \n", - "999 subclass.l2 dM-PC \n", - "1000 subclass.l2 T \n", - "1001 subclass.l2 PL \n", - "1002 subclass.l2 CNT \n", - "1003 subclass.l2 DCT \n", - "1004 subclass.l2 dFIB \n", - "1005 subclass.l2 dC-TAL \n", - "1006 subclass.l2 VSMC \n", - "1007 subclass.l2 SC/NEU \n", - "1008 subclass.l2 DTL3 \n", - "1009 subclass.l2 EC-GC \n", - "1010 subclass.l2 VSMC/P \n", - "1011 subclass.l2 cycMNP \n", - "1012 subclass.l2 MYOF \n", - "1013 subclass.l2 dEC-PTC \n", - "1014 subclass.l2 ncMON \n", - "1015 subclass.l2 cycEC \n", - "1016 subclass.l2 cDC \n", - "1017 subclass.l2 EC-LYM \n", - "1018 subclass.l2 MC \n", - "1019 subclass.l2 IC-B \n", - "1020 subclass.l2 MAST \n", - "1021 subclass.l2 dVSMC \n", - "1022 subclass.l2 dATL \n", - "1023 subclass.l2 REN \n", - "1024 subclass.l2 B \n", - "1025 subclass.l2 aTAL2 \n", - "1026 subclass.l2 dC-IC-A \n", - "1027 subclass.l2 dCNT \n", - "1028 subclass.l2 aFIB \n", - "1029 subclass.l2 PEC \n", - "1030 subclass.l2 cycCNT \n", - "1031 subclass.l2 dIMCD \n", - "1032 subclass.l2 IMCD \n", - "1033 subclass.l2 dEC \n", - "1034 subclass.l2 dM-FIB \n", - "1035 subclass.l2 cycDCT \n", - "1036 subclass.l2 dPOD \n", - "1037 subclass.l2 pDC \n", - "1038 subclass.l2 dDTL3 \n", - "1039 subclass.l2 dDCT \n", - "1040 subclass.l2 cycMYOF \n", - "1041 subclass.l2 PapE \n", - "1042 subclass.l2 cycNKC/T \n", - "1043 subclass.l1 IMM \n", - "1044 subclass.l1 NEU \n", - "1045 subclass.l1 PEC \n", - "1046 subclass.l1 PapE \n", - "1047 state.l2 degenerative \n", - "1048 state.l2 adaptive - epi \n", - "1049 state.l2 reference \n", - "1050 state.l2 transitioning \n", - "1051 state.l2 adaptive - str \n", - "1052 class epithelial cells \n", - "1053 class stroma cells \n", - "1054 class epithelial cells \n", - "1055 class immune cells \n", - "1056 class endothelial cells \n", - "1057 class stroma cells \n", - "1058 class neural cells \n", - "1059 class endothelial cells \n", - "1060 cell_type epithelial cell of proximal tubule \n", - "1061 cell_type kidney interstitial fibroblast \n", - "1062 cell_type kidney loop of Henle thick ascending limb epit... \n", - "1063 cell_type leukocyte \n", - "1064 cell_type kidney collecting duct intercalated cell \n", - "1065 cell_type endothelial cell \n", - "1066 cell_type kidney collecting duct intercalated cell \n", - "1067 cell_type kidney loop of Henle thick ascending limb epit... \n", - "1068 cell_type kidney loop of Henle thin descending limb epit... \n", - "1069 cell_type podocyte \n", - "1070 cell_type kidney loop of Henle thin ascending limb epith... \n", - "1071 cell_type kidney collecting duct principal cell \n", - "1072 cell_type epithelial cell of proximal tubule \n", - "1073 cell_type kidney collecting duct principal cell \n", - "1074 cell_type kidney connecting tubule epithelial cell \n", - "1075 cell_type kidney distal convoluted tubule epithelial cell \n", - "1076 cell_type kidney interstitial fibroblast \n", - "1077 cell_type renal interstitial pericyte \n", - "1078 cell_type neural cell \n", - "1079 cell_type endothelial cell \n", - "1080 cell_type renal interstitial pericyte \n", - "1081 cell_type kidney loop of Henle thin ascending limb epith... \n", - "1082 cell_type kidney connecting tubule epithelial cell \n", - "1083 cell_type parietal epithelial cell \n", - "1084 cell_type kidney distal convoluted tubule epithelial cell \n", - "1085 cell_type podocyte \n", - "1086 cell_type kidney loop of Henle thin descending limb epit... \n", - "1087 cell_type papillary tips cell \n", - "1088 subclass.full Degenerative Proximal Tubule Epithelial Cell \n", - "1089 subclass.full Adaptive / Maladaptive / Repairing Proximal Tu... \n", - "1090 subclass.full Medullary Fibroblast \n", - "1091 subclass.full Macula Densa Cell \n", - "1092 subclass.full Natural Killer Cell / Natural Killer T Cell \n", - "1093 subclass.full Transitional Principal-Intercalated Cell \n", - "1094 subclass.full Descending Vasa Recta Endothelial Cell \n", - "1095 subclass.full Medullary Thick Ascending Limb Cell \n", - "1096 subclass.full Cortical Collecting Duct Intercalated Cell Type A \n", - "1097 subclass.full Degenerative Medullary Thick Ascending Limb Cell \n", - "1098 subclass.full Ascending Vasa Recta Endothelial Cell \n", - "1099 subclass.full M2 Macrophage \n", - "1100 subclass.full Cycling Proximal Tubule Epithelial Cell \n", - "1101 subclass.full Outer Medullary Collecting Duct Intercalated C... \n", - "1102 subclass.full Adaptive / Maladaptive / Repairing Thick Ascen... \n", - "1103 subclass.full Afferent / Efferent Arteriole Endothelial Cell \n", - "1104 subclass.full Descending Thin Limb Cell Type 2 \n", - "1105 subclass.full Neutrophil \n", - "1106 subclass.full Podocyte \n", - "1107 subclass.full Ascending Thin Limb Cell \n", - "1108 subclass.full Descending Thin Limb Cell Type 1 \n", - "1109 subclass.full Monocyte-derived Cell \n", - "1110 subclass.full Cortical Collecting Duct Principal Cell \n", - "1111 subclass.full Peritubular Capilary Endothelial Cell \n", - "1112 subclass.full Proximal Tubule Epithelial Cell Segment 1 / Se... \n", - "1113 subclass.full Proximal Tubule Epithelial Cell Segment 3 \n", - "1114 subclass.full Cortical Thick Ascending Limb Cell \n", - "1115 subclass.full Outer Medullary Collecting Duct Principal Cell \n", - "1116 subclass.full Fibroblast \n", - "1117 subclass.full Degenerative Outer Medullary Collecting Duct P... \n", - "1118 subclass.full T Cell \n", - "1119 subclass.full Plasma Cell \n", - "1120 subclass.full Connecting Tubule Principal Cell \n", - "1121 subclass.full Distal Convoluted Tubule Cell Type 1 \n", - "1122 subclass.full Degenerative Fibroblast \n", - "1123 subclass.full Degenerative Cortical Thick Ascending Limb Cell \n", - "1124 subclass.full Vascular Smooth Muscle Cell \n", - "1125 subclass.full Descending Thin Limb Cell Type 3 \n", - "1126 subclass.full Glomerular Capillary Endothelial Cell \n", - "1127 subclass.full Vascular Smooth Muscle Cell / Pericyte \n", - "1128 subclass.full Cycling Mononuclear Phagocyte \n", - "1129 subclass.full Myofibroblast \n", - "1130 subclass.full Degenerative Peritubular Capilary Endothelial ... \n", - "1131 subclass.full Non-classical Monocyte \n", - "1132 subclass.full Cycling Endothelial Cell \n", - "1133 subclass.full Classical Dendritic Cell \n", - "1134 subclass.full Lymphatic Endothelial Cell \n", - "1135 subclass.full Distal Convoluted Tubule Cell Type 2 \n", - "1136 subclass.full Mesangial Cell \n", - "1137 subclass.full Intercalated Cell Type B \n", - "1138 subclass.full Connecting Tubule Cell \n", - "1139 subclass.full Mast Cell \n", - "1140 subclass.full Degenerative Vascular Smooth Muscle Cell \n", - "1141 subclass.full Degenerative Ascending Thin Limb Cell \n", - "1142 subclass.full Renin-positive Juxtaglomerular Granular Cell \n", - "1143 subclass.full B Cell \n", - "1144 subclass.full Degenerative Cortical Intercalated Cell Type A \n", - "1145 subclass.full Degenerative Connecting Tubule Cell \n", - "1146 subclass.full Adaptive / Maladaptive / Repairing Fibroblast \n", - "1147 subclass.full Parietal Epithelial Cell \n", - "1148 subclass.full Cycling Connecting Tubule Cell \n", - "1149 subclass.full Degenerative Inner Medullary Collecting Duct Cell \n", - "1150 subclass.full Inner Medullary Collecting Duct Cell \n", - "1151 subclass.full Degenerative Endothelial Cell \n", - "1152 subclass.full Degenerative Medullary Fibroblast \n", - "1153 subclass.full Connecting Tubule Intercalated Cell Type A \n", - "1154 subclass.full Cycling Distal Convoluted Tubule Cell \n", - "1155 subclass.full Degenerative Podocyte \n", - "1156 subclass.full Plasmacytoid Dendritic Cell \n", - "1157 subclass.full Degenerative Descending Thin Limb Cell Type 3 \n", - "1158 subclass.full Degenerative Distal Convoluted Tubule Cell \n", - "1159 subclass.full Cycling Myofibroblast \n", - "1160 subclass.full Papillary Tip Epithelial Cell \n", - "1161 subclass.full Cycling Natural Killer Cell / Natural Killer T... \n", - "1162 subclass.l3 dPT \n", - "1163 subclass.l3 aPT \n", - "1164 subclass.l3 M-FIB \n", - "1165 subclass.l3 MD \n", - "1166 subclass.l3 NKC/T \n", - "1167 subclass.l3 tPC-IC \n", - "1168 subclass.l3 EC-DVR \n", - "1169 subclass.l3 M-TAL \n", - "1170 subclass.l3 CCD-IC-A \n", - "1171 subclass.l3 dM-TAL \n", - "1172 subclass.l3 EC-AVR \n", - "1173 subclass.l3 MAC-M2 \n", - "1174 subclass.l3 cycPT \n", - "1175 subclass.l3 OMCD-IC-A \n", - "1176 subclass.l3 aTAL1 \n", - "1177 subclass.l3 EC-AEA \n", - "1178 subclass.l3 DTL2 \n", - "1179 subclass.l3 N \n", - "1180 subclass.l3 POD \n", - "1181 subclass.l3 ATL \n", - "1182 subclass.l3 DTL1 \n", - "1183 subclass.l3 MDC \n", - "1184 subclass.l3 CCD-PC \n", - "1185 subclass.l3 EC-PTC \n", - "1186 subclass.l3 PT-S1/2 \n", - "1187 subclass.l3 PT-S3 \n", - "1188 subclass.l3 C-TAL \n", - "1189 subclass.l3 OMCD-PC \n", - "1190 subclass.l3 FIB \n", - "1191 subclass.l3 dOMCD-PC \n", - "1192 subclass.l3 T \n", - "1193 subclass.l3 PL \n", - "1194 subclass.l3 CNT-PC \n", - "1195 subclass.l3 DCT1 \n", - "1196 subclass.l3 dFIB \n", - "1197 subclass.l3 dC-TAL \n", - "1198 subclass.l3 VSMC \n", - "1199 subclass.l3 DTL3 \n", - "1200 subclass.l3 EC-GC \n", - "1201 subclass.l3 VSMC/P \n", - "1202 subclass.l3 cycMNP \n", - "1203 subclass.l3 MYOF \n", - "1204 subclass.l3 dEC-PTC \n", - "1205 subclass.l3 ncMON \n", - "1206 subclass.l3 cycEC \n", - "1207 subclass.l3 cDC \n", - "1208 subclass.l3 EC-LYM \n", - "1209 subclass.l3 DCT2 \n", - "1210 subclass.l3 MC \n", - "1211 subclass.l3 IC-B \n", - "1212 subclass.l3 CNT \n", - "1213 subclass.l3 MAST \n", - "1214 subclass.l3 dVSMC \n", - "1215 subclass.l3 dATL \n", - "1216 subclass.l3 REN \n", - "1217 subclass.l3 B \n", - "1218 subclass.l3 aTAL2 \n", - "1219 subclass.l3 dC-IC-A \n", - "1220 subclass.l3 dCNT \n", - "1221 subclass.l3 aFIB \n", - "1222 subclass.l3 PEC \n", - "1223 subclass.l3 cycCNT \n", - "1224 subclass.l3 dIMCD \n", - "1225 subclass.l3 IMCD \n", - "1226 subclass.l3 dEC \n", - "1227 subclass.l3 dM-FIB \n", - "1228 subclass.l3 CNT-IC-A \n", - "1229 subclass.l3 cycDCT \n", - "1230 subclass.l3 dPOD \n", - "1231 subclass.l3 pDC \n", - "1232 subclass.l3 dDTL3 \n", - "1233 subclass.l3 dDCT \n", - "1234 subclass.l3 cycMYOF \n", - "1235 subclass.l3 PapE \n", - "1236 subclass.l3 cycNKC/T \n", - "1237 subclass.l2 dPT \n", - "1238 subclass.l2 aPT \n", - "1239 subclass.l2 M-FIB \n", - "1240 subclass.l2 MD \n", - "1241 subclass.l2 NKC/T \n", - "1242 subclass.l2 tPC-IC \n", - "1243 subclass.l2 EC-DVR \n", - "1244 subclass.l2 M-TAL \n", - "1245 subclass.l2 C-IC-A \n", - "1246 subclass.l2 dM-TAL \n", - "1247 subclass.l2 EC-AVR \n", - "1248 subclass.l2 MAC-M2 \n", - "1249 subclass.l2 cycPT \n", - "1250 subclass.l2 M-IC-A \n", - "1251 subclass.l2 aTAL1 \n", - "1252 subclass.l2 EC-AEA \n", - "1253 subclass.l2 DTL2 \n", - "1254 subclass.l2 N \n", - "1255 subclass.l2 POD \n", - "1256 subclass.l2 ATL \n", - "1257 subclass.l2 DTL1 \n", - "1258 subclass.l2 MDC \n", - "1259 subclass.l2 C-PC \n", - "1260 subclass.l2 EC-PTC \n", - "1261 subclass.l2 PT-S1/2 \n", - "1262 subclass.l2 PT-S3 \n", - "1263 subclass.l2 C-TAL \n", - "1264 subclass.l2 M-PC \n", - "1265 subclass.l2 FIB \n", - "1266 subclass.l2 dM-PC \n", - "1267 subclass.l2 T \n", - "1268 subclass.l2 PL \n", - "1269 subclass.l2 CNT \n", - "1270 subclass.l2 DCT \n", - "1271 subclass.l2 dFIB \n", - "1272 subclass.l2 dC-TAL \n", - "1273 subclass.l2 VSMC \n", - "1274 subclass.l2 DTL3 \n", - "1275 subclass.l2 EC-GC \n", - "1276 subclass.l2 VSMC/P \n", - "1277 subclass.l2 cycMNP \n", - "1278 subclass.l2 MYOF \n", - "1279 subclass.l2 dEC-PTC \n", - "1280 subclass.l2 ncMON \n", - "1281 subclass.l2 cycEC \n", - "1282 subclass.l2 cDC \n", - "1283 subclass.l2 EC-LYM \n", - "1284 subclass.l2 MC \n", - "1285 subclass.l2 IC-B \n", - "1286 subclass.l2 MAST \n", - "1287 subclass.l2 dVSMC \n", - "1288 subclass.l2 dATL \n", - "1289 subclass.l2 REN \n", - "1290 subclass.l2 B \n", - "1291 subclass.l2 aTAL2 \n", - "1292 subclass.l2 dC-IC-A \n", - "1293 subclass.l2 dCNT \n", - "1294 subclass.l2 aFIB \n", - "1295 subclass.l2 PEC \n", - "1296 subclass.l2 cycCNT \n", - "1297 subclass.l2 dIMCD \n", - "1298 subclass.l2 IMCD \n", - "1299 subclass.l2 dEC \n", - "1300 subclass.l2 dM-FIB \n", - "1301 subclass.l2 cycDCT \n", - "1302 subclass.l2 dPOD \n", - "1303 subclass.l2 pDC \n", - "1304 subclass.l2 dDTL3 \n", - "1305 subclass.l2 dDCT \n", - "1306 subclass.l2 cycMYOF \n", - "1307 subclass.l2 PapE \n", - "1308 subclass.l2 cycNKC/T \n", - "1309 subclass.l1 PT \n", - "1310 subclass.l1 FIB \n", - "1311 subclass.l1 TAL \n", - "1312 subclass.l1 IC \n", - "1313 subclass.l1 DTL \n", - "1314 subclass.l1 POD \n", - "1315 subclass.l1 ATL \n", - "1316 subclass.l1 PC \n", - "1317 subclass.l1 CNT \n", - "1318 subclass.l1 DCT \n", - "1319 subclass.l1 VSM/P \n", - "1320 subclass.l1 PEC \n", - "1321 subclass.l1 PapE \n", - "1322 state.l2 adaptive - epi \n", - "1323 state.l2 transitioning \n", - "1324 state.l2 adaptive - str \n", - "1325 cell_type epithelial cell of proximal tubule \n", - "1326 cell_type kidney interstitial fibroblast \n", - "1327 cell_type kidney loop of Henle thick ascending limb epit... \n", - "1328 cell_type leukocyte \n", - "1329 cell_type kidney collecting duct intercalated cell \n", - "1330 cell_type endothelial cell \n", - "1331 cell_type kidney loop of Henle thin descending limb epit... \n", - "1332 cell_type podocyte \n", - "1333 cell_type kidney loop of Henle thin ascending limb epith... \n", - "1334 cell_type kidney collecting duct principal cell \n", - "1335 cell_type kidney connecting tubule epithelial cell \n", - "1336 cell_type kidney distal convoluted tubule epithelial cell \n", - "1337 cell_type renal interstitial pericyte \n", - "1338 cell_type neural cell \n", - "1339 cell_type parietal epithelial cell \n", - "1340 cell_type papillary tips cell \n", - "1341 subclass.full Degenerative Proximal Tubule Epithelial Cell \n", - "1342 subclass.full Adaptive / Maladaptive / Repairing Proximal Tu... \n", - "1343 subclass.full Medullary Fibroblast \n", - "1344 subclass.full Macula Densa Cell \n", - "1345 subclass.full Natural Killer Cell / Natural Killer T Cell \n", - "1346 subclass.full Transitional Principal-Intercalated Cell \n", - "1347 subclass.full Descending Vasa Recta Endothelial Cell \n", - "1348 subclass.full Medullary Thick Ascending Limb Cell \n", - "1349 subclass.full Cortical Collecting Duct Intercalated Cell Type A \n", - "1350 subclass.full Degenerative Medullary Thick Ascending Limb Cell \n", - "1351 subclass.full Ascending Vasa Recta Endothelial Cell \n", - "1352 subclass.full M2 Macrophage \n", - "1353 subclass.full Cycling Proximal Tubule Epithelial Cell \n", - "1354 subclass.full Outer Medullary Collecting Duct Intercalated C... \n", - "1355 subclass.full Adaptive / Maladaptive / Repairing Thick Ascen... \n", - "1356 subclass.full Afferent / Efferent Arteriole Endothelial Cell \n", - "1357 subclass.full Descending Thin Limb Cell Type 2 \n", - "1358 subclass.full Neutrophil \n", - "1359 subclass.full Podocyte \n", - "1360 subclass.full Ascending Thin Limb Cell \n", - "1361 subclass.full Descending Thin Limb Cell Type 1 \n", - "1362 subclass.full Monocyte-derived Cell \n", - "1363 subclass.full Cortical Collecting Duct Principal Cell \n", - "1364 subclass.full Peritubular Capilary Endothelial Cell \n", - "1365 subclass.full Proximal Tubule Epithelial Cell Segment 1 / Se... \n", - "1366 subclass.full Proximal Tubule Epithelial Cell Segment 3 \n", - "1367 subclass.full Cortical Thick Ascending Limb Cell \n", - "1368 subclass.full Outer Medullary Collecting Duct Principal Cell \n", - "1369 subclass.full Fibroblast \n", - "1370 subclass.full Degenerative Outer Medullary Collecting Duct P... \n", - "1371 subclass.full T Cell \n", - "1372 subclass.full Plasma Cell \n", - "1373 subclass.full Connecting Tubule Principal Cell \n", - "1374 subclass.full Distal Convoluted Tubule Cell Type 1 \n", - "1375 subclass.full Degenerative Fibroblast \n", - "1376 subclass.full Degenerative Cortical Thick Ascending Limb Cell \n", - "1377 subclass.full Vascular Smooth Muscle Cell \n", - "1378 subclass.full Descending Thin Limb Cell Type 3 \n", - "1379 subclass.full Glomerular Capillary Endothelial Cell \n", - "1380 subclass.full Vascular Smooth Muscle Cell / Pericyte \n", - "1381 subclass.full Cycling Mononuclear Phagocyte \n", - "1382 subclass.full Myofibroblast \n", - "1383 subclass.full Degenerative Peritubular Capilary Endothelial ... \n", - "1384 subclass.full Non-classical Monocyte \n", - "1385 subclass.full Cycling Endothelial Cell \n", - "1386 subclass.full Classical Dendritic Cell \n", - "1387 subclass.full Lymphatic Endothelial Cell \n", - "1388 subclass.full Distal Convoluted Tubule Cell Type 2 \n", - "1389 subclass.full Mesangial Cell \n", - "1390 subclass.full Intercalated Cell Type B \n", - "1391 subclass.full Connecting Tubule Cell \n", - "1392 subclass.full Mast Cell \n", - "1393 subclass.full Degenerative Vascular Smooth Muscle Cell \n", - "1394 subclass.full Degenerative Ascending Thin Limb Cell \n", - "1395 subclass.full Renin-positive Juxtaglomerular Granular Cell \n", - "1396 subclass.full B Cell \n", - "1397 subclass.full Degenerative Cortical Intercalated Cell Type A \n", - "1398 subclass.full Degenerative Connecting Tubule Cell \n", - "1399 subclass.full Adaptive / Maladaptive / Repairing Fibroblast \n", - "1400 subclass.full Cycling Connecting Tubule Cell \n", - "1401 subclass.full Degenerative Inner Medullary Collecting Duct Cell \n", - "1402 subclass.full Inner Medullary Collecting Duct Cell \n", - "1403 subclass.full Degenerative Endothelial Cell \n", - "1404 subclass.full Degenerative Medullary Fibroblast \n", - "1405 subclass.full Connecting Tubule Intercalated Cell Type A \n", - "1406 subclass.full Cycling Distal Convoluted Tubule Cell \n", - "1407 subclass.full Degenerative Podocyte \n", - "1408 subclass.full Plasmacytoid Dendritic Cell \n", - "1409 subclass.full Degenerative Descending Thin Limb Cell Type 3 \n", - "1410 subclass.full Degenerative Distal Convoluted Tubule Cell \n", - "1411 subclass.full Cycling Myofibroblast \n", - "1412 subclass.full Cycling Natural Killer Cell / Natural Killer T... \n", - "1413 subclass.l3 dPT \n", - "1414 subclass.l3 aPT \n", - "1415 subclass.l3 M-FIB \n", - "1416 subclass.l3 MD \n", - "1417 subclass.l3 NKC/T \n", - "1418 subclass.l3 tPC-IC \n", - "1419 subclass.l3 EC-DVR \n", - "1420 subclass.l3 M-TAL \n", - "1421 subclass.l3 CCD-IC-A \n", - "1422 subclass.l3 dM-TAL \n", - "1423 subclass.l3 EC-AVR \n", - "1424 subclass.l3 MAC-M2 \n", - "1425 subclass.l3 cycPT \n", - "1426 subclass.l3 OMCD-IC-A \n", - "1427 subclass.l3 aTAL1 \n", - "1428 subclass.l3 EC-AEA \n", - "1429 subclass.l3 DTL2 \n", - "1430 subclass.l3 N \n", - "1431 subclass.l3 POD \n", - "1432 subclass.l3 ATL \n", - "1433 subclass.l3 DTL1 \n", - "1434 subclass.l3 MDC \n", - "1435 subclass.l3 CCD-PC \n", - "1436 subclass.l3 EC-PTC \n", - "1437 subclass.l3 PT-S1/2 \n", - "1438 subclass.l3 PT-S3 \n", - "1439 subclass.l3 C-TAL \n", - "1440 subclass.l3 OMCD-PC \n", - "1441 subclass.l3 FIB \n", - "1442 subclass.l3 dOMCD-PC \n", - "1443 subclass.l3 T \n", - "1444 subclass.l3 PL \n", - "1445 subclass.l3 CNT-PC \n", - "1446 subclass.l3 DCT1 \n", - "1447 subclass.l3 dFIB \n", - "1448 subclass.l3 dC-TAL \n", - "1449 subclass.l3 VSMC \n", - "1450 subclass.l3 DTL3 \n", - "1451 subclass.l3 EC-GC \n", - "1452 subclass.l3 VSMC/P \n", - "1453 subclass.l3 cycMNP \n", - "1454 subclass.l3 MYOF \n", - "1455 subclass.l3 dEC-PTC \n", - "1456 subclass.l3 ncMON \n", - "1457 subclass.l3 cycEC \n", - "1458 subclass.l3 cDC \n", - "1459 subclass.l3 EC-LYM \n", - "1460 subclass.l3 DCT2 \n", - "1461 subclass.l3 MC \n", - "1462 subclass.l3 IC-B \n", - "1463 subclass.l3 CNT \n", - "1464 subclass.l3 MAST \n", - "1465 subclass.l3 dVSMC \n", - "1466 subclass.l3 dATL \n", - "1467 subclass.l3 REN \n", - "1468 subclass.l3 B \n", - "1469 subclass.l3 aTAL2 \n", - "1470 subclass.l3 dC-IC-A \n", - "1471 subclass.l3 dCNT \n", - "1472 subclass.l3 aFIB \n", - "1473 subclass.l3 cycCNT \n", - "1474 subclass.l3 dIMCD \n", - "1475 subclass.l3 IMCD \n", - "1476 subclass.l3 dEC \n", - "1477 subclass.l3 dM-FIB \n", - "1478 subclass.l3 CNT-IC-A \n", - "1479 subclass.l3 cycDCT \n", - "1480 subclass.l3 dPOD \n", - "1481 subclass.l3 pDC \n", - "1482 subclass.l3 dDTL3 \n", - "1483 subclass.l3 dDCT \n", - "1484 subclass.l3 cycMYOF \n", - "1485 subclass.l3 cycNKC/T \n", - "1486 subclass.l2 dPT \n", - "1487 subclass.l2 aPT \n", - "1488 subclass.l2 M-FIB \n", - "1489 subclass.l2 MD \n", - "1490 subclass.l2 NKC/T \n", - "1491 subclass.l2 tPC-IC \n", - "1492 subclass.l2 EC-DVR \n", - "1493 subclass.l2 M-TAL \n", - "1494 subclass.l2 C-IC-A \n", - "1495 subclass.l2 dM-TAL \n", - "1496 subclass.l2 EC-AVR \n", - "1497 subclass.l2 MAC-M2 \n", - "1498 subclass.l2 cycPT \n", - "1499 subclass.l2 M-IC-A \n", - "1500 subclass.l2 aTAL1 \n", - "1501 subclass.l2 EC-AEA \n", - "1502 subclass.l2 DTL2 \n", - "1503 subclass.l2 N \n", - "1504 subclass.l2 POD \n", - "1505 subclass.l2 ATL \n", - "1506 subclass.l2 DTL1 \n", - "1507 subclass.l2 MDC \n", - "1508 subclass.l2 C-PC \n", - "1509 subclass.l2 EC-PTC \n", - "1510 subclass.l2 PT-S1/2 \n", - "1511 subclass.l2 PT-S3 \n", - "1512 subclass.l2 C-TAL \n", - "1513 subclass.l2 M-PC \n", - "1514 subclass.l2 FIB \n", - "1515 subclass.l2 dM-PC \n", - "1516 subclass.l2 T \n", - "1517 subclass.l2 PL \n", - "1518 subclass.l2 CNT \n", - "1519 subclass.l2 DCT \n", - "1520 subclass.l2 dFIB \n", - "1521 subclass.l2 dC-TAL \n", - "1522 subclass.l2 VSMC \n", - "1523 subclass.l2 DTL3 \n", - "1524 subclass.l2 EC-GC \n", - "1525 subclass.l2 VSMC/P \n", - "1526 subclass.l2 cycMNP \n", - "1527 subclass.l2 MYOF \n", - "1528 subclass.l2 dEC-PTC \n", - "1529 subclass.l2 ncMON \n", - "1530 subclass.l2 cycEC \n", - "1531 subclass.l2 cDC \n", - "1532 subclass.l2 EC-LYM \n", - "1533 subclass.l2 MC \n", - "1534 subclass.l2 IC-B \n", - "1535 subclass.l2 MAST \n", - "1536 subclass.l2 dVSMC \n", - "1537 subclass.l2 dATL \n", - "1538 subclass.l2 REN \n", - "1539 subclass.l2 B \n", - "1540 subclass.l2 aTAL2 \n", - "1541 subclass.l2 dC-IC-A \n", - "1542 subclass.l2 dCNT \n", - "1543 subclass.l2 aFIB \n", - "1544 subclass.l2 cycCNT \n", - "1545 subclass.l2 dIMCD \n", - "1546 subclass.l2 IMCD \n", - "1547 subclass.l2 dEC \n", - "1548 subclass.l2 dM-FIB \n", - "1549 subclass.l2 cycDCT \n", - "1550 subclass.l2 dPOD \n", - "1551 subclass.l2 pDC \n", - "1552 subclass.l2 dDTL3 \n", - "1553 subclass.l2 dDCT \n", - "1554 subclass.l2 cycMYOF \n", - "1555 subclass.l2 cycNKC/T \n", - "1556 state.l2 transitioning \n", - "1557 state.l2 adaptive - str \n", + " field_name1 value1 \\\n", + "0 subclass.l3 dPT \n", + "1 subclass.l3 aPT \n", + "2 subclass.l3 M-FIB \n", + "3 subclass.l3 MD \n", + "4 subclass.l3 NKC/T \n", + ".. ... ... \n", + "415 cell_type kidney distal convoluted tubule epithelial cell \n", + "416 cell_type renal interstitial pericyte \n", + "417 cell_type neural cell \n", + "418 cell_type parietal epithelial cell \n", + "419 cell_type papillary tips cell \n", + "\n", + " predicate field_name2 \\\n", + "0 cluster_matches subclass.full \n", + "1 cluster_matches subclass.full \n", + "2 cluster_matches subclass.full \n", + "3 cluster_matches subclass.full \n", + "4 cluster_matches subclass.full \n", + ".. ... ... \n", + "415 subcluster_of class \n", + "416 subcluster_of class \n", + "417 cluster_matches class \n", + "418 subcluster_of class \n", + "419 subcluster_of class \n", "\n", - " predicate field_name2 \\\n", - "0 cluster_matches subclass.full \n", - "1 cluster_matches subclass.full \n", - "2 cluster_matches subclass.full \n", - "3 cluster_matches subclass.full \n", - "4 cluster_matches subclass.full \n", - "5 cluster_matches subclass.full \n", - "6 cluster_matches subclass.full \n", - "7 cluster_matches subclass.full \n", - "8 cluster_matches subclass.full \n", - "9 cluster_matches subclass.full \n", - "10 cluster_matches subclass.full \n", - "11 cluster_matches subclass.full \n", - "12 cluster_matches subclass.full \n", - "13 cluster_matches subclass.full \n", - "14 subcluster_of subclass.full \n", - "15 cluster_matches subclass.full \n", - "16 cluster_matches subclass.full \n", - "17 cluster_matches subclass.full \n", - "18 cluster_matches subclass.full \n", - "19 cluster_matches subclass.full \n", - "20 cluster_matches subclass.full \n", - "21 cluster_matches subclass.full \n", - "22 cluster_matches subclass.full \n", - "23 cluster_matches subclass.full \n", - "24 cluster_matches subclass.full \n", - "25 cluster_matches subclass.full \n", - "26 cluster_matches subclass.full \n", - "27 cluster_matches subclass.full \n", - "28 cluster_matches subclass.full \n", - "29 cluster_matches subclass.full \n", - "30 cluster_matches subclass.full \n", - "31 cluster_matches subclass.full \n", - "32 cluster_matches subclass.full \n", - "33 cluster_matches subclass.full \n", - "34 cluster_matches subclass.full \n", - "35 cluster_matches subclass.full \n", - "36 cluster_matches subclass.full \n", - "37 cluster_matches subclass.full \n", - "38 cluster_matches subclass.full \n", - "39 cluster_matches subclass.full \n", - "40 cluster_matches subclass.full \n", - "41 cluster_matches subclass.full \n", - "42 cluster_matches subclass.full \n", - "43 cluster_matches subclass.full \n", - "44 cluster_matches subclass.full \n", - "45 cluster_matches subclass.full \n", - "46 cluster_matches subclass.full \n", - "47 cluster_matches subclass.full \n", - "48 cluster_matches subclass.full \n", - "49 cluster_matches subclass.full \n", - "50 cluster_matches subclass.full \n", - "51 cluster_matches subclass.full \n", - "52 cluster_matches subclass.full \n", - "53 cluster_matches subclass.full \n", - "54 cluster_matches subclass.full \n", - "55 cluster_matches subclass.full \n", - "56 cluster_matches subclass.full \n", - "57 subcluster_of subclass.full \n", - "58 cluster_matches subclass.full \n", - "59 cluster_matches subclass.full \n", - "60 cluster_matches subclass.full \n", - "61 cluster_matches subclass.full \n", - "62 cluster_matches subclass.full \n", - "63 cluster_matches subclass.full \n", - "64 cluster_matches subclass.full \n", - "65 cluster_matches subclass.full \n", - "66 cluster_matches subclass.full \n", - "67 cluster_matches subclass.full \n", - "68 cluster_matches subclass.full \n", - "69 cluster_matches subclass.full \n", - "70 cluster_matches subclass.full \n", - "71 cluster_matches subclass.full \n", - "72 cluster_matches subclass.full \n", - "73 cluster_matches subclass.full \n", - "74 cluster_matches subclass.full \n", - "75 cluster_matches subclass.full \n", - "76 cluster_matches subclass.full \n", - "77 cluster_matches subclass.full \n", - "78 cluster_matches subclass.full \n", - "79 cluster_matches subclass.full \n", - "80 cluster_matches subclass.full \n", - "81 cluster_matches subclass.full \n", - "82 cluster_matches subclass.full \n", - "83 cluster_matches subclass.full \n", - "84 cluster_matches subclass.full \n", - "85 cluster_matches subclass.full \n", - "86 cluster_matches subclass.full \n", - "87 cluster_matches subclass.full \n", - "88 cluster_matches subclass.full \n", - "89 subcluster_of subclass.full \n", - "90 cluster_matches subclass.full \n", - "91 cluster_matches subclass.full \n", - "92 cluster_matches subclass.full \n", - "93 cluster_matches subclass.full \n", - "94 cluster_matches subclass.full \n", - "95 cluster_matches subclass.full \n", - "96 cluster_matches subclass.full \n", - "97 cluster_matches subclass.full \n", - "98 cluster_matches subclass.full \n", - "99 cluster_matches subclass.full \n", - "100 cluster_matches subclass.full \n", - "101 cluster_matches subclass.full \n", - "102 cluster_matches subclass.full \n", - "103 cluster_matches subclass.full \n", - "104 cluster_matches subclass.full \n", - "105 cluster_matches subclass.full \n", - "106 cluster_matches subclass.full \n", - "107 cluster_matches subclass.full \n", - "108 cluster_matches subclass.full \n", - "109 cluster_matches subclass.full \n", - "110 cluster_matches subclass.full \n", - "111 cluster_matches subclass.full \n", - "112 cluster_matches subclass.full \n", - "113 cluster_matches subclass.full \n", - "114 cluster_matches subclass.full \n", - "115 cluster_matches subclass.full \n", - "116 cluster_matches subclass.full \n", - "117 cluster_matches subclass.full \n", - "118 cluster_matches subclass.full \n", - "119 cluster_matches subclass.full \n", - "120 cluster_matches subclass.full \n", - "121 cluster_matches subclass.full \n", - "122 cluster_matches subclass.full \n", - "123 cluster_matches subclass.full \n", - "124 cluster_matches subclass.full \n", - "125 cluster_matches subclass.full \n", - "126 cluster_matches subclass.full \n", - "127 cluster_matches subclass.full \n", - "128 subcluster_of subclass.full \n", - "129 cluster_matches subclass.full \n", - "130 cluster_matches subclass.full \n", - "131 cluster_matches subclass.full \n", - "132 cluster_matches subclass.full \n", - "133 cluster_matches subclass.full \n", - "134 cluster_matches subclass.full \n", - "135 cluster_matches subclass.full \n", - "136 cluster_matches subclass.full \n", - "137 cluster_matches subclass.full \n", - "138 cluster_matches subclass.full \n", - "139 cluster_matches subclass.full \n", - "140 cluster_matches subclass.full \n", - "141 cluster_matches subclass.full \n", - "142 cluster_matches subclass.full \n", - "143 cluster_matches subclass.full \n", - "144 cluster_matches subclass.full \n", - "145 cluster_matches subclass.full \n", - "146 cluster_matches subclass.full \n", - "147 cluster_matches subclass.full \n", - "148 cluster_matches subclass.full \n", - "149 cluster_matches subclass.full \n", - "150 cluster_matches subclass.full \n", - "151 cluster_matches subclass.full \n", - "152 cluster_matches subclass.full \n", - "153 cluster_matches subclass.full \n", - "154 cluster_matches subclass.l3 \n", - "155 cluster_matches subclass.l3 \n", - "156 cluster_matches subclass.l3 \n", - "157 cluster_matches subclass.l3 \n", - "158 cluster_matches subclass.l3 \n", - "159 cluster_matches subclass.l3 \n", - "160 cluster_matches subclass.l3 \n", - "161 cluster_matches subclass.l3 \n", - "162 cluster_matches subclass.l3 \n", - "163 cluster_matches subclass.l3 \n", - "164 cluster_matches subclass.l3 \n", - "165 cluster_matches subclass.l3 \n", - "166 cluster_matches subclass.l3 \n", - "167 cluster_matches subclass.l3 \n", - "168 cluster_matches subclass.l3 \n", - "169 cluster_matches subclass.l3 \n", - "170 cluster_matches subclass.l3 \n", - "171 cluster_matches subclass.l3 \n", - "172 cluster_matches subclass.l3 \n", - "173 cluster_matches subclass.l3 \n", - "174 cluster_matches subclass.l3 \n", - "175 cluster_matches subclass.l3 \n", - "176 cluster_matches subclass.l3 \n", - "177 cluster_matches subclass.l3 \n", - "178 cluster_matches subclass.l3 \n", - "179 cluster_matches subclass.l3 \n", - "180 cluster_matches subclass.l3 \n", - "181 cluster_matches subclass.l3 \n", - "182 cluster_matches subclass.l3 \n", - "183 cluster_matches subclass.l3 \n", - "184 cluster_matches subclass.l3 \n", - "185 cluster_matches subclass.l3 \n", - "186 cluster_matches subclass.l3 \n", - "187 cluster_matches subclass.l3 \n", - "188 cluster_matches subclass.l3 \n", - "189 cluster_matches subclass.l3 \n", - "190 cluster_matches subclass.l3 \n", - "191 cluster_matches subclass.l3 \n", - "192 cluster_matches subclass.l3 \n", - "193 cluster_matches subclass.l3 \n", - "194 cluster_matches subclass.l3 \n", - "195 cluster_matches subclass.l3 \n", - "196 cluster_matches subclass.l3 \n", - "197 cluster_matches subclass.l3 \n", - "198 cluster_matches subclass.l3 \n", - "199 cluster_matches subclass.l3 \n", - "200 cluster_matches subclass.l3 \n", - "201 cluster_matches subclass.l3 \n", - "202 cluster_matches subclass.l3 \n", - "203 cluster_matches subclass.l3 \n", - "204 cluster_matches subclass.l3 \n", - "205 cluster_matches subclass.l3 \n", - "206 cluster_matches subclass.l3 \n", - "207 cluster_matches subclass.l3 \n", - "208 cluster_matches subclass.l3 \n", - "209 cluster_matches subclass.l3 \n", - "210 cluster_matches subclass.l3 \n", - "211 cluster_matches subclass.l3 \n", - "212 cluster_matches subclass.l3 \n", - "213 cluster_matches subclass.l3 \n", - "214 cluster_matches subclass.l3 \n", - "215 cluster_matches subclass.l3 \n", - "216 cluster_matches subclass.l3 \n", - "217 cluster_matches subclass.l3 \n", - "218 cluster_matches subclass.l3 \n", - "219 cluster_matches subclass.l3 \n", - "220 cluster_matches subclass.l3 \n", - "221 cluster_matches subclass.l3 \n", - "222 cluster_matches subclass.l3 \n", - "223 cluster_matches subclass.l3 \n", - "224 cluster_matches subclass.l3 \n", - "225 cluster_matches subclass.l3 \n", - "226 cluster_matches subclass.l3 \n", - "227 cluster_matches subclass.l3 \n", - "228 cluster_matches subclass.l3 \n", - "229 cluster_matches subclass.l3 \n", - "230 cluster_matches subclass.l3 \n", - "231 cluster_matches subclass.l3 \n", - "232 subcluster_of subclass.l2 \n", - "233 subcluster_of subclass.l2 \n", - "234 subcluster_of subclass.l2 \n", - "235 subcluster_of subclass.l2 \n", - "236 subcluster_of subclass.l2 \n", - "237 subcluster_of subclass.l2 \n", - "238 subcluster_of subclass.l2 \n", - "239 subcluster_of subclass.l2 \n", - "240 subcluster_of subclass.l2 \n", - "241 subcluster_of subclass.l2 \n", - "242 subcluster_of subclass.l2 \n", - "243 subcluster_of subclass.l2 \n", - "244 cluster_matches subclass.l2 \n", - "245 cluster_matches subclass.l2 \n", - "246 cluster_matches subclass.l2 \n", - "247 cluster_matches subclass.l2 \n", - "248 cluster_matches subclass.l2 \n", - "249 cluster_matches subclass.l2 \n", - "250 cluster_matches subclass.l2 \n", - "251 cluster_matches subclass.l2 \n", - "252 subcluster_of subclass.l1 \n", - "253 subcluster_of subclass.l1 \n", - "254 subcluster_of subclass.l1 \n", - "255 subcluster_of subclass.l1 \n", - "256 subcluster_of subclass.l1 \n", - "257 subcluster_of subclass.l1 \n", - "258 subcluster_of subclass.l1 \n", - "259 subcluster_of subclass.l1 \n", - "260 subcluster_of subclass.l1 \n", - "261 subcluster_of subclass.l1 \n", - "262 subcluster_of subclass.l1 \n", - "263 subcluster_of subclass.l1 \n", - "264 subcluster_of subclass.l1 \n", - "265 subcluster_of subclass.l1 \n", - "266 subcluster_of subclass.l1 \n", - "267 subcluster_of subclass.l1 \n", - "268 subcluster_of subclass.l1 \n", - "269 subcluster_of subclass.l1 \n", - "270 subcluster_of subclass.l1 \n", - "271 subcluster_of subclass.l1 \n", - "272 subcluster_of subclass.l1 \n", - "273 subcluster_of subclass.l1 \n", - "274 subcluster_of subclass.l1 \n", - "275 subcluster_of subclass.l1 \n", - "276 subcluster_of subclass.l1 \n", - "277 subcluster_of subclass.l1 \n", - "278 subcluster_of subclass.l1 \n", - "279 subcluster_of subclass.l1 \n", - "280 subcluster_of subclass.l1 \n", - "281 subcluster_of subclass.l1 \n", - "282 subcluster_of subclass.l1 \n", - "283 subcluster_of subclass.l1 \n", - "284 subcluster_of subclass.l1 \n", - "285 subcluster_of subclass.l1 \n", - "286 subcluster_of subclass.l1 \n", - "287 subcluster_of subclass.l1 \n", - "288 subcluster_of subclass.l1 \n", - "289 subcluster_of subclass.l1 \n", - "290 subcluster_of subclass.l1 \n", - "291 subcluster_of subclass.l1 \n", - "292 subcluster_of subclass.l1 \n", - "293 subcluster_of subclass.l1 \n", - "294 subcluster_of subclass.l1 \n", - "295 subcluster_of subclass.l1 \n", - "296 subcluster_of subclass.l1 \n", - "297 subcluster_of subclass.l1 \n", - "298 subcluster_of subclass.l1 \n", - "299 subcluster_of subclass.l1 \n", - "300 subcluster_of subclass.l1 \n", - "301 subcluster_of subclass.l1 \n", - "302 subcluster_of subclass.l1 \n", - "303 subcluster_of subclass.l1 \n", - "304 subcluster_of subclass.l1 \n", - "305 subcluster_of subclass.l1 \n", - "306 subcluster_of subclass.l1 \n", - "307 subcluster_of subclass.l1 \n", - "308 subcluster_of subclass.l1 \n", - "309 subcluster_of subclass.l1 \n", - "310 subcluster_of subclass.l1 \n", - "311 subcluster_of subclass.l1 \n", - "312 subcluster_of subclass.l1 \n", - "313 subcluster_of subclass.l1 \n", - "314 subcluster_of subclass.l1 \n", - "315 subcluster_of subclass.l1 \n", - "316 subcluster_of subclass.l1 \n", - "317 subcluster_of subclass.l1 \n", - "318 subcluster_of subclass.l1 \n", - "319 subcluster_of subclass.l1 \n", - "320 subcluster_of subclass.l1 \n", - "321 subcluster_of subclass.l1 \n", - "322 subcluster_of subclass.l1 \n", - "323 subcluster_of subclass.l1 \n", - "324 subcluster_of subclass.l1 \n", - "325 subcluster_of subclass.l1 \n", - "326 subcluster_of subclass.l1 \n", - "327 subcluster_of subclass.l1 \n", - "328 subcluster_of subclass.l1 \n", - "329 subcluster_of subclass.l1 \n", - "330 subcluster_of subclass.l1 \n", - "331 subcluster_of subclass.l1 \n", - "332 subcluster_of subclass.l1 \n", - "333 subcluster_of subclass.l1 \n", - "334 subcluster_of subclass.l1 \n", - "335 subcluster_of subclass.l1 \n", - "336 subcluster_of subclass.l1 \n", - "337 subcluster_of subclass.l1 \n", - "338 subcluster_of subclass.l1 \n", - "339 subcluster_of subclass.l1 \n", - "340 subcluster_of subclass.l1 \n", - "341 subcluster_of subclass.l1 \n", - "342 subcluster_of subclass.l1 \n", - "343 subcluster_of subclass.l1 \n", - "344 subcluster_of subclass.l1 \n", - "345 subcluster_of subclass.l1 \n", - "346 subcluster_of subclass.l1 \n", - "347 subcluster_of subclass.l1 \n", - "348 subcluster_of subclass.l1 \n", - "349 subcluster_of subclass.l1 \n", - "350 subcluster_of subclass.l1 \n", - "351 subcluster_of subclass.l1 \n", - "352 subcluster_of subclass.l1 \n", - "353 subcluster_of subclass.l1 \n", - "354 subcluster_of subclass.l1 \n", - "355 subcluster_of subclass.l1 \n", - "356 subcluster_of subclass.l1 \n", - "357 subcluster_of subclass.l1 \n", - "358 subcluster_of subclass.l1 \n", - "359 subcluster_of subclass.l1 \n", - "360 subcluster_of subclass.l1 \n", - "361 subcluster_of subclass.l1 \n", - "362 subcluster_of subclass.l1 \n", - "363 subcluster_of subclass.l1 \n", - "364 subcluster_of subclass.l1 \n", - "365 subcluster_of subclass.l1 \n", - "366 subcluster_of subclass.l1 \n", - "367 subcluster_of subclass.l1 \n", - "368 subcluster_of subclass.l1 \n", - "369 subcluster_of subclass.l1 \n", - "370 subcluster_of subclass.l1 \n", - "371 subcluster_of subclass.l1 \n", - "372 subcluster_of subclass.l1 \n", - "373 subcluster_of subclass.l1 \n", - "374 subcluster_of subclass.l1 \n", - "375 subcluster_of subclass.l1 \n", - "376 subcluster_of subclass.l1 \n", - "377 subcluster_of subclass.l1 \n", - "378 subcluster_of subclass.l1 \n", - "379 subcluster_of subclass.l1 \n", - "380 subcluster_of subclass.l1 \n", - "381 subcluster_of subclass.l1 \n", - "382 subcluster_of subclass.l1 \n", - "383 subcluster_of subclass.l1 \n", - "384 subcluster_of subclass.l1 \n", - "385 subcluster_of subclass.l1 \n", - "386 subcluster_of subclass.l1 \n", - "387 subcluster_of subclass.l1 \n", - "388 subcluster_of subclass.l1 \n", - "389 subcluster_of subclass.l1 \n", - "390 subcluster_of subclass.l1 \n", - "391 subcluster_of subclass.l1 \n", - "392 subcluster_of subclass.l1 \n", - "393 subcluster_of subclass.l1 \n", - "394 subcluster_of subclass.l1 \n", - "395 subcluster_of subclass.l1 \n", - "396 subcluster_of subclass.l1 \n", - "397 subcluster_of subclass.l1 \n", - "398 subcluster_of subclass.l1 \n", - "399 subcluster_of subclass.l1 \n", - "400 subcluster_of subclass.l1 \n", - "401 subcluster_of subclass.l1 \n", - "402 subcluster_of subclass.l1 \n", - "403 subcluster_of subclass.l1 \n", - "404 subcluster_of subclass.l1 \n", - "405 subcluster_of subclass.l1 \n", - "406 subcluster_of subclass.l1 \n", - "407 subcluster_of subclass.l1 \n", - "408 subcluster_of subclass.l1 \n", - "409 subcluster_of subclass.l1 \n", - "410 subcluster_of subclass.l1 \n", - "411 subcluster_of subclass.l1 \n", - "412 subcluster_of subclass.l1 \n", - "413 subcluster_of subclass.l1 \n", - "414 subcluster_of subclass.l1 \n", - "415 subcluster_of subclass.l1 \n", - "416 subcluster_of subclass.l1 \n", - "417 subcluster_of subclass.l1 \n", - "418 subcluster_of subclass.l1 \n", - "419 subcluster_of subclass.l1 \n", - "420 subcluster_of subclass.l1 \n", - "421 subcluster_of subclass.l1 \n", - "422 subcluster_of subclass.l1 \n", - "423 subcluster_of subclass.l1 \n", - "424 subcluster_of subclass.l1 \n", - "425 subcluster_of subclass.l1 \n", - "426 subcluster_of subclass.l1 \n", - "427 subcluster_of subclass.l1 \n", - "428 subcluster_of subclass.l1 \n", - "429 subcluster_of subclass.l1 \n", - "430 subcluster_of subclass.l1 \n", - "431 subcluster_of subclass.l1 \n", - "432 subcluster_of subclass.l1 \n", - "433 subcluster_of subclass.l1 \n", - "434 subcluster_of subclass.l1 \n", - "435 subcluster_of subclass.l1 \n", - "436 subcluster_of subclass.l1 \n", - "437 subcluster_of subclass.l1 \n", - "438 subcluster_of subclass.l1 \n", - "439 subcluster_of subclass.l1 \n", - "440 subcluster_of subclass.l1 \n", - "441 subcluster_of subclass.l1 \n", - "442 subcluster_of subclass.l1 \n", - "443 subcluster_of subclass.l1 \n", - "444 subcluster_of subclass.l1 \n", - "445 subcluster_of subclass.l1 \n", - "446 subcluster_of subclass.l1 \n", - "447 subcluster_of subclass.l1 \n", - "448 subcluster_of subclass.l1 \n", - "449 subcluster_of subclass.l1 \n", - "450 subcluster_of subclass.l1 \n", - "451 subcluster_of subclass.l1 \n", - "452 subcluster_of subclass.l1 \n", - "453 subcluster_of subclass.l1 \n", - "454 subcluster_of subclass.l1 \n", - "455 subcluster_of subclass.l1 \n", - "456 subcluster_of subclass.l1 \n", - "457 subcluster_of subclass.l1 \n", - "458 subcluster_of subclass.l1 \n", - "459 subcluster_of subclass.l1 \n", - "460 subcluster_of subclass.l1 \n", - "461 subcluster_of subclass.l1 \n", - "462 subcluster_of subclass.l1 \n", - "463 subcluster_of subclass.l1 \n", - "464 subcluster_of subclass.l1 \n", - "465 subcluster_of subclass.l1 \n", - "466 subcluster_of subclass.l1 \n", - "467 cluster_overlaps subclass.l1 \n", - "468 cluster_overlaps subclass.l1 \n", - "469 cluster_overlaps subclass.l1 \n", - "470 cluster_overlaps subclass.l1 \n", - "471 cluster_overlaps subclass.l1 \n", - "472 subcluster_of subclass.l1 \n", - "473 cluster_overlaps subclass.l1 \n", - "474 cluster_overlaps subclass.l1 \n", - "475 cluster_overlaps subclass.l1 \n", - "476 cluster_overlaps subclass.l1 \n", - "477 cluster_overlaps subclass.l1 \n", - "478 cluster_overlaps subclass.l1 \n", - "479 cluster_overlaps subclass.l1 \n", - "480 cluster_overlaps subclass.l1 \n", - "481 cluster_overlaps subclass.l1 \n", - "482 cluster_overlaps subclass.l1 \n", - "483 cluster_overlaps subclass.l1 \n", - "484 cluster_overlaps subclass.l1 \n", - "485 cluster_overlaps subclass.l1 \n", - "486 cluster_overlaps subclass.l1 \n", - "487 cluster_overlaps subclass.l1 \n", - "488 cluster_overlaps subclass.l1 \n", - "489 subcluster_of subclass.l1 \n", - "490 cluster_overlaps subclass.l1 \n", - "491 cluster_overlaps subclass.l1 \n", - "492 cluster_overlaps subclass.l1 \n", - "493 cluster_overlaps subclass.l1 \n", - "494 cluster_overlaps subclass.l1 \n", - "495 cluster_overlaps subclass.l1 \n", - "496 cluster_overlaps subclass.l1 \n", - "497 cluster_overlaps subclass.l1 \n", - "498 cluster_overlaps subclass.l1 \n", - "499 cluster_overlaps subclass.l1 \n", - "500 cluster_overlaps subclass.l1 \n", - "501 cluster_overlaps subclass.l1 \n", - "502 cluster_overlaps subclass.l1 \n", - "503 cluster_overlaps subclass.l1 \n", - "504 cluster_overlaps subclass.l1 \n", - "505 cluster_overlaps subclass.l1 \n", - "506 cluster_overlaps subclass.l1 \n", - "507 cluster_overlaps subclass.l1 \n", - "508 cluster_overlaps subclass.l1 \n", - "509 cluster_overlaps subclass.l1 \n", - "510 cluster_overlaps subclass.l1 \n", - "511 cluster_overlaps subclass.l1 \n", - "512 cluster_overlaps subclass.l1 \n", - "513 cluster_overlaps subclass.l1 \n", - "514 cluster_overlaps subclass.l1 \n", - "515 cluster_overlaps subclass.l1 \n", - "516 cluster_overlaps subclass.l1 \n", - "517 cluster_overlaps subclass.l1 \n", - "518 cluster_overlaps subclass.l1 \n", - "519 cluster_overlaps subclass.l1 \n", - "520 cluster_overlaps subclass.l1 \n", - "521 cluster_overlaps subclass.l1 \n", - "522 cluster_overlaps subclass.l1 \n", - "523 cluster_overlaps subclass.l1 \n", - "524 cluster_overlaps subclass.l1 \n", - "525 cluster_overlaps subclass.l1 \n", - "526 cluster_matches subclass.l1 \n", - "527 cluster_matches subclass.l1 \n", - "528 cluster_matches subclass.l1 \n", - "529 cluster_matches subclass.l1 \n", - "530 cluster_matches subclass.l1 \n", - "531 cluster_matches subclass.l1 \n", - "532 cluster_matches subclass.l1 \n", - "533 cluster_matches subclass.l1 \n", - "534 cluster_matches subclass.l1 \n", - "535 cluster_matches subclass.l1 \n", - "536 cluster_matches subclass.l1 \n", - "537 cluster_matches subclass.l1 \n", - "538 cluster_matches subclass.l1 \n", - "539 cluster_matches subclass.l1 \n", - "540 cluster_matches subclass.l1 \n", - "541 cluster_matches subclass.l1 \n", - "542 cluster_matches subclass.l1 \n", - "543 cluster_matches subclass.l1 \n", - "544 cluster_matches subclass.l1 \n", - "545 subcluster_of state.l2 \n", - "546 subcluster_of state.l2 \n", - "547 subcluster_of state.l2 \n", - "548 subcluster_of state.l2 \n", - "549 subcluster_of state.l2 \n", - "550 subcluster_of state.l2 \n", - "551 subcluster_of state.l2 \n", - "552 subcluster_of state.l2 \n", - "553 subcluster_of state.l2 \n", - "554 subcluster_of state.l2 \n", - "555 subcluster_of state.l2 \n", - "556 subcluster_of state.l2 \n", - "557 subcluster_of state.l2 \n", - "558 subcluster_of state.l2 \n", - "559 subcluster_of state.l2 \n", - "560 subcluster_of state.l2 \n", - "561 subcluster_of state.l2 \n", - "562 subcluster_of state.l2 \n", - "563 subcluster_of state.l2 \n", - "564 subcluster_of state.l2 \n", - "565 subcluster_of state.l2 \n", - "566 subcluster_of state.l2 \n", - "567 subcluster_of state.l2 \n", - "568 subcluster_of state.l2 \n", - "569 subcluster_of state.l2 \n", - "570 subcluster_of state.l2 \n", - "571 subcluster_of state.l2 \n", - "572 subcluster_of state.l2 \n", - "573 subcluster_of state.l2 \n", - "574 subcluster_of state.l2 \n", - "575 subcluster_of state.l2 \n", - "576 subcluster_of state.l2 \n", - "577 subcluster_of state.l2 \n", - "578 subcluster_of state.l2 \n", - "579 subcluster_of state.l2 \n", - "580 subcluster_of state.l2 \n", - "581 subcluster_of state.l2 \n", - "582 subcluster_of state.l2 \n", - "583 subcluster_of state.l2 \n", - "584 subcluster_of state.l2 \n", - "585 subcluster_of state.l2 \n", - "586 subcluster_of state.l2 \n", - "587 subcluster_of state.l2 \n", - "588 subcluster_of state.l2 \n", - "589 subcluster_of state.l2 \n", - "590 subcluster_of state.l2 \n", - "591 subcluster_of state.l2 \n", - "592 subcluster_of state.l2 \n", - "593 subcluster_of state.l2 \n", - "594 subcluster_of state.l2 \n", - "595 subcluster_of state.l2 \n", - "596 subcluster_of state.l2 \n", - "597 subcluster_of state.l2 \n", - "598 subcluster_of state.l2 \n", - "599 subcluster_of state.l2 \n", - "600 subcluster_of state.l2 \n", - "601 subcluster_of state.l2 \n", - "602 subcluster_of state.l2 \n", - "603 subcluster_of state.l2 \n", - "604 subcluster_of state.l2 \n", - "605 subcluster_of state.l2 \n", - "606 subcluster_of state.l2 \n", - "607 subcluster_of state.l2 \n", - "608 subcluster_of state.l2 \n", - "609 subcluster_of state.l2 \n", - "610 subcluster_of state.l2 \n", - "611 subcluster_of state.l2 \n", - "612 subcluster_of state.l2 \n", - "613 subcluster_of state.l2 \n", - "614 subcluster_of state.l2 \n", - "615 subcluster_of state.l2 \n", - "616 subcluster_of state.l2 \n", - "617 subcluster_of state.l2 \n", - "618 subcluster_of state.l2 \n", - "619 subcluster_of state.l2 \n", - "620 subcluster_of state.l2 \n", - "621 subcluster_of state.l2 \n", - "622 subcluster_of state.l2 \n", - "623 subcluster_of state.l2 \n", - "624 subcluster_of state.l2 \n", - "625 subcluster_of state.l2 \n", - "626 subcluster_of state.l2 \n", - "627 subcluster_of state.l2 \n", - "628 subcluster_of state.l2 \n", - "629 subcluster_of state.l2 \n", - "630 subcluster_of state.l2 \n", - "631 subcluster_of state.l2 \n", - "632 subcluster_of state.l2 \n", - "633 subcluster_of state.l2 \n", - "634 subcluster_of state.l2 \n", - "635 subcluster_of state.l2 \n", - "636 subcluster_of state.l2 \n", - "637 subcluster_of state.l2 \n", - "638 subcluster_of state.l2 \n", - "639 subcluster_of state.l2 \n", - "640 subcluster_of state.l2 \n", - "641 subcluster_of state.l2 \n", - "642 subcluster_of state.l2 \n", - "643 subcluster_of state.l2 \n", - "644 subcluster_of state.l2 \n", - "645 subcluster_of state.l2 \n", - "646 subcluster_of state.l2 \n", - "647 subcluster_of state.l2 \n", - "648 subcluster_of state.l2 \n", - "649 subcluster_of state.l2 \n", - "650 subcluster_of state.l2 \n", - "651 subcluster_of state.l2 \n", - "652 subcluster_of state.l2 \n", - "653 subcluster_of state.l2 \n", - "654 subcluster_of state.l2 \n", - "655 subcluster_of state.l2 \n", - "656 subcluster_of state.l2 \n", - "657 subcluster_of state.l2 \n", - "658 subcluster_of state.l2 \n", - "659 subcluster_of state.l2 \n", - "660 subcluster_of state.l2 \n", - "661 subcluster_of state.l2 \n", - "662 subcluster_of state.l2 \n", - "663 subcluster_of state.l2 \n", - "664 subcluster_of state.l2 \n", - "665 subcluster_of state.l2 \n", - "666 subcluster_of state.l2 \n", - "667 subcluster_of state.l2 \n", - "668 subcluster_of state.l2 \n", - "669 subcluster_of state.l2 \n", - "670 subcluster_of state.l2 \n", - "671 subcluster_of state.l2 \n", - "672 subcluster_of state.l2 \n", - "673 subcluster_of state.l2 \n", - "674 subcluster_of state.l2 \n", - "675 subcluster_of state.l2 \n", - "676 subcluster_of state.l2 \n", - "677 subcluster_of state.l2 \n", - "678 subcluster_of state.l2 \n", - "679 subcluster_of state.l2 \n", - "680 subcluster_of state.l2 \n", - "681 subcluster_of state.l2 \n", - "682 subcluster_of state.l2 \n", - "683 subcluster_of state.l2 \n", - "684 subcluster_of state.l2 \n", - "685 subcluster_of state.l2 \n", - "686 subcluster_of state.l2 \n", - "687 subcluster_of state.l2 \n", - "688 subcluster_of state.l2 \n", - "689 subcluster_of state.l2 \n", - "690 subcluster_of state.l2 \n", - "691 subcluster_of state.l2 \n", - "692 subcluster_of state.l2 \n", - "693 subcluster_of state.l2 \n", - "694 subcluster_of state.l2 \n", - "695 subcluster_of state.l2 \n", - "696 subcluster_of state.l2 \n", - "697 subcluster_of state.l2 \n", - "698 subcluster_of state.l2 \n", - "699 subcluster_of state.l2 \n", - "700 subcluster_of state.l2 \n", - "701 subcluster_of state.l2 \n", - "702 subcluster_of state.l2 \n", - "703 subcluster_of state.l2 \n", - "704 subcluster_of state.l2 \n", - "705 subcluster_of state.l2 \n", - "706 subcluster_of state.l2 \n", - "707 subcluster_of state.l2 \n", - "708 subcluster_of state.l2 \n", - "709 subcluster_of state.l2 \n", - "710 subcluster_of state.l2 \n", - "711 subcluster_of state.l2 \n", - "712 subcluster_of state.l2 \n", - "713 subcluster_of state.l2 \n", - "714 subcluster_of state.l2 \n", - "715 subcluster_of state.l2 \n", - "716 subcluster_of state.l2 \n", - "717 subcluster_of state.l2 \n", - "718 subcluster_of state.l2 \n", - "719 subcluster_of state.l2 \n", - "720 subcluster_of state.l2 \n", - "721 subcluster_of state.l2 \n", - "722 subcluster_of state.l2 \n", - "723 subcluster_of state.l2 \n", - "724 subcluster_of state.l2 \n", - "725 subcluster_of state.l2 \n", - "726 subcluster_of state.l2 \n", - "727 subcluster_of state.l2 \n", - "728 subcluster_of state.l2 \n", - "729 subcluster_of state.l2 \n", - "730 subcluster_of state.l2 \n", - "731 subcluster_of state.l2 \n", - "732 subcluster_of state.l2 \n", - "733 subcluster_of state.l2 \n", - "734 subcluster_of state.l2 \n", - "735 subcluster_of state.l2 \n", - "736 subcluster_of state.l2 \n", - "737 subcluster_of state.l2 \n", - "738 subcluster_of state.l2 \n", - "739 subcluster_of state.l2 \n", - "740 subcluster_of state.l2 \n", - "741 subcluster_of state.l2 \n", - "742 subcluster_of state.l2 \n", - "743 subcluster_of state.l2 \n", - "744 subcluster_of state.l2 \n", - "745 subcluster_of state.l2 \n", - "746 subcluster_of state.l2 \n", - "747 subcluster_of state.l2 \n", - "748 subcluster_of state.l2 \n", - "749 subcluster_of state.l2 \n", - "750 subcluster_of state.l2 \n", - "751 subcluster_of state.l2 \n", - "752 subcluster_of state.l2 \n", - "753 subcluster_of state.l2 \n", - "754 subcluster_of state.l2 \n", - "755 subcluster_of state.l2 \n", - "756 subcluster_of state.l2 \n", - "757 subcluster_of state.l2 \n", - "758 subcluster_of state.l2 \n", - "759 subcluster_of state.l2 \n", - "760 subcluster_of state.l2 \n", - "761 subcluster_of state.l2 \n", - "762 subcluster_of state.l2 \n", - "763 subcluster_of state.l2 \n", - "764 subcluster_of state.l2 \n", - "765 subcluster_of state.l2 \n", - "766 subcluster_of state.l2 \n", - "767 subcluster_of state.l2 \n", - "768 subcluster_of state.l2 \n", - "769 cluster_overlaps state.l2 \n", - "770 cluster_overlaps state.l2 \n", - "771 cluster_overlaps state.l2 \n", - "772 cluster_overlaps state.l2 \n", - "773 cluster_overlaps state.l2 \n", - "774 cluster_overlaps state.l2 \n", - "775 cluster_overlaps state.l2 \n", - "776 cluster_overlaps state.l2 \n", - "777 cluster_overlaps state.l2 \n", - "778 subcluster_of state.l2 \n", - "779 cluster_overlaps state.l2 \n", - "780 cluster_overlaps state.l2 \n", - "781 cluster_overlaps state.l2 \n", - "782 cluster_overlaps state.l2 \n", - "783 cluster_overlaps state.l2 \n", - "784 cluster_overlaps state.l2 \n", - "785 cluster_overlaps state.l2 \n", - "786 cluster_overlaps state.l2 \n", - "787 cluster_overlaps state.l2 \n", - "788 cluster_overlaps state.l2 \n", - "789 cluster_overlaps state.l2 \n", - "790 cluster_overlaps state.l2 \n", - "791 cluster_overlaps state.l2 \n", - "792 cluster_overlaps state.l2 \n", - "793 cluster_overlaps state.l2 \n", - "794 cluster_overlaps state.l2 \n", - "795 cluster_overlaps state.l2 \n", - "796 cluster_overlaps state.l2 \n", - "797 cluster_overlaps state.l2 \n", - "798 cluster_overlaps state.l2 \n", - "799 cluster_overlaps state.l2 \n", - "800 cluster_overlaps state.l2 \n", - "801 cluster_overlaps state.l2 \n", - "802 cluster_overlaps state.l2 \n", - "803 subcluster_of state.l2 \n", - "804 cluster_overlaps state.l2 \n", - "805 cluster_overlaps state.l2 \n", - "806 cluster_overlaps state.l2 \n", - "807 cluster_overlaps state.l2 \n", - "808 cluster_overlaps state.l2 \n", - "809 cluster_overlaps state.l2 \n", - "810 cluster_overlaps state.l2 \n", - "811 subcluster_of state.l2 \n", - "812 cluster_overlaps state.l2 \n", - "813 cluster_overlaps state.l2 \n", - "814 cluster_overlaps state.l2 \n", - "815 cluster_overlaps state.l2 \n", - "816 cluster_overlaps state.l2 \n", - "817 cluster_overlaps state.l2 \n", - "818 subcluster_of state.l2 \n", - "819 subcluster_of state \n", - "820 subcluster_of state \n", - "821 subcluster_of state \n", - "822 subcluster_of state \n", - "823 subcluster_of state \n", - "824 subcluster_of state \n", - "825 subcluster_of state \n", - "826 subcluster_of state \n", - "827 subcluster_of state \n", - "828 subcluster_of state \n", - "829 subcluster_of state \n", - "830 subcluster_of state \n", - "831 subcluster_of state \n", - "832 subcluster_of state \n", - "833 subcluster_of state \n", - "834 subcluster_of state \n", - "835 subcluster_of state \n", - "836 subcluster_of state \n", - "837 subcluster_of state \n", - "838 subcluster_of state \n", - "839 subcluster_of state \n", - "840 subcluster_of state \n", - "841 subcluster_of state \n", - "842 subcluster_of state \n", - "843 subcluster_of state \n", - "844 subcluster_of state \n", - "845 subcluster_of state \n", - "846 subcluster_of state \n", - "847 subcluster_of state \n", - "848 subcluster_of state \n", - "849 subcluster_of state \n", - "850 subcluster_of state \n", - "851 subcluster_of state \n", - "852 subcluster_of state \n", - "853 subcluster_of state \n", - "854 subcluster_of state \n", - "855 subcluster_of state \n", - "856 subcluster_of state \n", - "857 subcluster_of state \n", - "858 subcluster_of state \n", - "859 subcluster_of state \n", - "860 subcluster_of state \n", - "861 subcluster_of state \n", - "862 subcluster_of state \n", - "863 subcluster_of state \n", - "864 subcluster_of state \n", - "865 subcluster_of state \n", - "866 subcluster_of state \n", - "867 subcluster_of state \n", - "868 subcluster_of state \n", - "869 subcluster_of state \n", - "870 subcluster_of state \n", - "871 subcluster_of state \n", - "872 subcluster_of state \n", - "873 subcluster_of state \n", - "874 subcluster_of state \n", - "875 subcluster_of state \n", - "876 subcluster_of state \n", - "877 subcluster_of state \n", - "878 subcluster_of state \n", - "879 subcluster_of state \n", - "880 subcluster_of state \n", - "881 subcluster_of state \n", - "882 subcluster_of state \n", - "883 subcluster_of state \n", - "884 subcluster_of state \n", - "885 subcluster_of state \n", - "886 subcluster_of state \n", - "887 subcluster_of state \n", - "888 subcluster_of state \n", - "889 subcluster_of state \n", - "890 subcluster_of state \n", - "891 subcluster_of state \n", - "892 subcluster_of state \n", - "893 subcluster_of state \n", - "894 subcluster_of state \n", - "895 subcluster_of state \n", - "896 subcluster_of state \n", - "897 subcluster_of state \n", - "898 subcluster_of state \n", - "899 subcluster_of state \n", - "900 subcluster_of state \n", - "901 subcluster_of state \n", - "902 subcluster_of state \n", - "903 subcluster_of state \n", - "904 subcluster_of state \n", - "905 subcluster_of state \n", - "906 subcluster_of state \n", - "907 subcluster_of state \n", - "908 subcluster_of state \n", - "909 subcluster_of state \n", - "910 subcluster_of state \n", - "911 subcluster_of state \n", - "912 subcluster_of state \n", - "913 subcluster_of state \n", - "914 subcluster_of state \n", - "915 subcluster_of state \n", - "916 subcluster_of state \n", - "917 subcluster_of state \n", - "918 subcluster_of state \n", - "919 subcluster_of state \n", - "920 subcluster_of state \n", - "921 subcluster_of state \n", - "922 subcluster_of state \n", - "923 subcluster_of state \n", - "924 subcluster_of state \n", - "925 subcluster_of state \n", - "926 subcluster_of state \n", - "927 subcluster_of state \n", - "928 subcluster_of state \n", - "929 subcluster_of state \n", - "930 subcluster_of state \n", - "931 subcluster_of state \n", - "932 subcluster_of state \n", - "933 subcluster_of state \n", - "934 subcluster_of state \n", - "935 subcluster_of state \n", - "936 subcluster_of state \n", - "937 subcluster_of state \n", - "938 subcluster_of state \n", - "939 subcluster_of state \n", - "940 subcluster_of state \n", - "941 subcluster_of state \n", - "942 subcluster_of state \n", - "943 subcluster_of state \n", - "944 subcluster_of state \n", - "945 subcluster_of state \n", - "946 subcluster_of state \n", - "947 subcluster_of state \n", - "948 subcluster_of state \n", - "949 subcluster_of state \n", - "950 subcluster_of state \n", - "951 subcluster_of state \n", - "952 subcluster_of state \n", - "953 subcluster_of state \n", - "954 subcluster_of state \n", - "955 subcluster_of state \n", - "956 subcluster_of state \n", - "957 subcluster_of state \n", - "958 subcluster_of state \n", - "959 subcluster_of state \n", - "960 subcluster_of state \n", - "961 subcluster_of state \n", - "962 subcluster_of state \n", - "963 subcluster_of state \n", - "964 subcluster_of state \n", - "965 subcluster_of state \n", - "966 subcluster_of state \n", - "967 subcluster_of state \n", - "968 subcluster_of state \n", - "969 subcluster_of state \n", - "970 subcluster_of state \n", - "971 subcluster_of state \n", - "972 subcluster_of state \n", - "973 subcluster_of state \n", - "974 subcluster_of state \n", - "975 subcluster_of state \n", - "976 subcluster_of state \n", - "977 subcluster_of state \n", - "978 subcluster_of state \n", - "979 subcluster_of state \n", - "980 subcluster_of state \n", - "981 subcluster_of state \n", - "982 subcluster_of state \n", - "983 subcluster_of state \n", - "984 subcluster_of state \n", - "985 subcluster_of state \n", - "986 subcluster_of state \n", - "987 subcluster_of state \n", - "988 subcluster_of state \n", - "989 subcluster_of state \n", - "990 subcluster_of state \n", - "991 subcluster_of state \n", - "992 subcluster_of state \n", - "993 subcluster_of state \n", - "994 subcluster_of state \n", - "995 subcluster_of state \n", - "996 subcluster_of state \n", - "997 subcluster_of state \n", - "998 subcluster_of state \n", - "999 subcluster_of state \n", - "1000 subcluster_of state \n", - "1001 subcluster_of state \n", - "1002 subcluster_of state \n", - "1003 subcluster_of state \n", - "1004 subcluster_of state \n", - "1005 subcluster_of state \n", - "1006 subcluster_of state \n", - "1007 subcluster_of state \n", - "1008 subcluster_of state \n", - "1009 subcluster_of state \n", - "1010 subcluster_of state \n", - "1011 subcluster_of state \n", - "1012 subcluster_of state \n", - "1013 subcluster_of state \n", - "1014 subcluster_of state \n", - "1015 subcluster_of state \n", - "1016 subcluster_of state \n", - "1017 subcluster_of state \n", - "1018 subcluster_of state \n", - "1019 subcluster_of state \n", - "1020 subcluster_of state \n", - "1021 subcluster_of state \n", - "1022 subcluster_of state \n", - "1023 subcluster_of state \n", - "1024 subcluster_of state \n", - "1025 subcluster_of state \n", - "1026 subcluster_of state \n", - "1027 subcluster_of state \n", - "1028 subcluster_of state \n", - "1029 subcluster_of state \n", - "1030 subcluster_of state \n", - "1031 subcluster_of state \n", - "1032 subcluster_of state \n", - "1033 subcluster_of state \n", - "1034 subcluster_of state \n", - "1035 subcluster_of state \n", - "1036 subcluster_of state \n", - "1037 subcluster_of state \n", - "1038 subcluster_of state \n", - "1039 subcluster_of state \n", - "1040 subcluster_of state \n", - "1041 subcluster_of state \n", - "1042 subcluster_of state \n", - "1043 subcluster_of state \n", - "1044 subcluster_of state \n", - "1045 subcluster_of state \n", - "1046 subcluster_of state \n", - "1047 subcluster_of state \n", - "1048 subcluster_of state \n", - "1049 subcluster_of state \n", - "1050 subcluster_of state \n", - "1051 subcluster_of state \n", - "1052 cluster_overlaps state \n", - "1053 cluster_overlaps state \n", - "1054 cluster_overlaps state \n", - "1055 subcluster_of state \n", - "1056 cluster_overlaps state \n", - "1057 cluster_overlaps state \n", - "1058 subcluster_of state \n", - "1059 cluster_overlaps state \n", - "1060 cluster_overlaps state \n", - "1061 cluster_overlaps state \n", - "1062 cluster_overlaps state \n", - "1063 subcluster_of state \n", - "1064 cluster_overlaps state \n", - "1065 cluster_overlaps state \n", - "1066 cluster_overlaps state \n", - "1067 cluster_overlaps state \n", - "1068 cluster_overlaps state \n", - "1069 cluster_overlaps state \n", - "1070 cluster_overlaps state \n", - "1071 cluster_overlaps state \n", - "1072 cluster_overlaps state \n", - "1073 cluster_overlaps state \n", - "1074 cluster_overlaps state \n", - "1075 cluster_overlaps state \n", - "1076 cluster_overlaps state \n", - "1077 cluster_overlaps state \n", - "1078 subcluster_of state \n", - "1079 cluster_overlaps state \n", - "1080 cluster_overlaps state \n", - "1081 cluster_overlaps state \n", - "1082 cluster_overlaps state \n", - "1083 subcluster_of state \n", - "1084 cluster_overlaps state \n", - "1085 cluster_overlaps state \n", - "1086 cluster_overlaps state \n", - "1087 subcluster_of state \n", - "1088 subcluster_of class \n", - "1089 subcluster_of class \n", - "1090 subcluster_of class \n", - "1091 subcluster_of class \n", - "1092 subcluster_of class \n", - "1093 subcluster_of class \n", - "1094 subcluster_of class \n", - "1095 subcluster_of class \n", - "1096 subcluster_of class \n", - "1097 subcluster_of class \n", - "1098 subcluster_of class \n", - "1099 subcluster_of class \n", - "1100 subcluster_of class \n", - "1101 subcluster_of class \n", - "1102 subcluster_of class \n", - "1103 subcluster_of class \n", - "1104 subcluster_of class \n", - "1105 subcluster_of class \n", - "1106 subcluster_of class \n", - "1107 subcluster_of class \n", - "1108 subcluster_of class \n", - "1109 subcluster_of class \n", - "1110 subcluster_of class \n", - "1111 subcluster_of class \n", - "1112 subcluster_of class \n", - "1113 subcluster_of class \n", - "1114 subcluster_of class \n", - "1115 subcluster_of class \n", - "1116 subcluster_of class \n", - "1117 subcluster_of class \n", - "1118 subcluster_of class \n", - "1119 subcluster_of class \n", - "1120 subcluster_of class \n", - "1121 subcluster_of class \n", - "1122 subcluster_of class \n", - "1123 subcluster_of class \n", - "1124 subcluster_of class \n", - "1125 subcluster_of class \n", - "1126 subcluster_of class \n", - "1127 subcluster_of class \n", - "1128 subcluster_of class \n", - "1129 subcluster_of class \n", - "1130 subcluster_of class \n", - "1131 subcluster_of class \n", - "1132 subcluster_of class \n", - "1133 subcluster_of class \n", - "1134 subcluster_of class \n", - "1135 subcluster_of class \n", - "1136 subcluster_of class \n", - "1137 subcluster_of class \n", - "1138 subcluster_of class \n", - "1139 subcluster_of class \n", - "1140 subcluster_of class \n", - "1141 subcluster_of class \n", - "1142 subcluster_of class \n", - "1143 subcluster_of class \n", - "1144 subcluster_of class \n", - "1145 subcluster_of class \n", - "1146 subcluster_of class \n", - "1147 subcluster_of class \n", - "1148 subcluster_of class \n", - "1149 subcluster_of class \n", - "1150 subcluster_of class \n", - "1151 subcluster_of class \n", - "1152 subcluster_of class \n", - "1153 subcluster_of class \n", - "1154 subcluster_of class \n", - "1155 subcluster_of class \n", - "1156 subcluster_of class \n", - "1157 subcluster_of class \n", - "1158 subcluster_of class \n", - "1159 subcluster_of class \n", - "1160 subcluster_of class \n", - "1161 subcluster_of class \n", - "1162 subcluster_of class \n", - "1163 subcluster_of class \n", - "1164 subcluster_of class \n", - "1165 subcluster_of class \n", - "1166 subcluster_of class \n", - "1167 subcluster_of class \n", - "1168 subcluster_of class \n", - "1169 subcluster_of class \n", - "1170 subcluster_of class \n", - "1171 subcluster_of class \n", - "1172 subcluster_of class \n", - "1173 subcluster_of class \n", - "1174 subcluster_of class \n", - "1175 subcluster_of class \n", - "1176 subcluster_of class \n", - "1177 subcluster_of class \n", - "1178 subcluster_of class \n", - "1179 subcluster_of class \n", - "1180 subcluster_of class \n", - "1181 subcluster_of class \n", - "1182 subcluster_of class \n", - "1183 subcluster_of class \n", - "1184 subcluster_of class \n", - "1185 subcluster_of class \n", - "1186 subcluster_of class \n", - "1187 subcluster_of class \n", - "1188 subcluster_of class \n", - "1189 subcluster_of class \n", - "1190 subcluster_of class \n", - "1191 subcluster_of class \n", - "1192 subcluster_of class \n", - "1193 subcluster_of class \n", - "1194 subcluster_of class \n", - "1195 subcluster_of class \n", - "1196 subcluster_of class \n", - "1197 subcluster_of class \n", - "1198 subcluster_of class \n", - "1199 subcluster_of class \n", - "1200 subcluster_of class \n", - "1201 subcluster_of class \n", - "1202 subcluster_of class \n", - "1203 subcluster_of class \n", - "1204 subcluster_of class \n", - "1205 subcluster_of class \n", - "1206 subcluster_of class \n", - "1207 subcluster_of class \n", - "1208 subcluster_of class \n", - "1209 subcluster_of class \n", - "1210 subcluster_of class \n", - "1211 subcluster_of class \n", - "1212 subcluster_of class \n", - "1213 subcluster_of class \n", - "1214 subcluster_of class \n", - "1215 subcluster_of class \n", - "1216 subcluster_of class \n", - "1217 subcluster_of class \n", - "1218 subcluster_of class \n", - "1219 subcluster_of class \n", - "1220 subcluster_of class \n", - "1221 subcluster_of class \n", - "1222 subcluster_of class \n", - "1223 subcluster_of class \n", - "1224 subcluster_of class \n", - "1225 subcluster_of class \n", - "1226 subcluster_of class \n", - "1227 subcluster_of class \n", - "1228 subcluster_of class \n", - "1229 subcluster_of class \n", - "1230 subcluster_of class \n", - "1231 subcluster_of class \n", - "1232 subcluster_of class \n", - "1233 subcluster_of class \n", - "1234 subcluster_of class \n", - "1235 subcluster_of class \n", - "1236 subcluster_of class \n", - "1237 subcluster_of class \n", - "1238 subcluster_of class \n", - "1239 subcluster_of class \n", - "1240 subcluster_of class \n", - "1241 subcluster_of class \n", - "1242 subcluster_of class \n", - "1243 subcluster_of class \n", - "1244 subcluster_of class \n", - "1245 subcluster_of class \n", - "1246 subcluster_of class \n", - "1247 subcluster_of class \n", - "1248 subcluster_of class \n", - "1249 subcluster_of class \n", - "1250 subcluster_of class \n", - "1251 subcluster_of class \n", - "1252 subcluster_of class \n", - "1253 subcluster_of class \n", - "1254 subcluster_of class \n", - "1255 subcluster_of class \n", - "1256 subcluster_of class \n", - "1257 subcluster_of class \n", - "1258 subcluster_of class \n", - "1259 subcluster_of class \n", - "1260 subcluster_of class \n", - "1261 subcluster_of class \n", - "1262 subcluster_of class \n", - "1263 subcluster_of class \n", - "1264 subcluster_of class \n", - "1265 subcluster_of class \n", - "1266 subcluster_of class \n", - "1267 subcluster_of class \n", - "1268 subcluster_of class \n", - "1269 subcluster_of class \n", - "1270 subcluster_of class \n", - "1271 subcluster_of class \n", - "1272 subcluster_of class \n", - "1273 subcluster_of class \n", - "1274 subcluster_of class \n", - "1275 subcluster_of class \n", - "1276 subcluster_of class \n", - "1277 subcluster_of class \n", - "1278 subcluster_of class \n", - "1279 subcluster_of class \n", - "1280 subcluster_of class \n", - "1281 subcluster_of class \n", - "1282 subcluster_of class \n", - "1283 subcluster_of class \n", - "1284 subcluster_of class \n", - "1285 subcluster_of class \n", - "1286 subcluster_of class \n", - "1287 subcluster_of class \n", - "1288 subcluster_of class \n", - "1289 subcluster_of class \n", - "1290 subcluster_of class \n", - "1291 subcluster_of class \n", - "1292 subcluster_of class \n", - "1293 subcluster_of class \n", - "1294 subcluster_of class \n", - "1295 subcluster_of class \n", - "1296 subcluster_of class \n", - "1297 subcluster_of class \n", - "1298 subcluster_of class \n", - "1299 subcluster_of class \n", - "1300 subcluster_of class \n", - "1301 subcluster_of class \n", - "1302 subcluster_of class \n", - "1303 subcluster_of class \n", - "1304 subcluster_of class \n", - "1305 subcluster_of class \n", - "1306 subcluster_of class \n", - "1307 subcluster_of class \n", - "1308 subcluster_of class \n", - "1309 subcluster_of class \n", - "1310 subcluster_of class \n", - "1311 subcluster_of class \n", - "1312 subcluster_of class \n", - "1313 subcluster_of class \n", - "1314 subcluster_of class \n", - "1315 subcluster_of class \n", - "1316 subcluster_of class \n", - "1317 subcluster_of class \n", - "1318 subcluster_of class \n", - "1319 subcluster_of class \n", - "1320 subcluster_of class \n", - "1321 subcluster_of class \n", - "1322 subcluster_of class \n", - "1323 subcluster_of class \n", - "1324 subcluster_of class \n", - "1325 subcluster_of class \n", - "1326 subcluster_of class \n", - "1327 subcluster_of class \n", - "1328 cluster_matches class \n", - "1329 subcluster_of class \n", - "1330 cluster_matches class \n", - "1331 subcluster_of class \n", - "1332 subcluster_of class \n", - "1333 subcluster_of class \n", - "1334 subcluster_of class \n", - "1335 subcluster_of class \n", - "1336 subcluster_of class \n", - "1337 subcluster_of class \n", - "1338 cluster_matches class \n", - "1339 subcluster_of class \n", - "1340 subcluster_of class \n", - "1341 subcluster_of cell_type \n", - "1342 subcluster_of cell_type \n", - "1343 subcluster_of cell_type \n", - "1344 subcluster_of cell_type \n", - "1345 subcluster_of cell_type \n", - "1346 subcluster_of cell_type \n", - "1347 subcluster_of cell_type \n", - "1348 subcluster_of cell_type \n", - "1349 subcluster_of cell_type \n", - "1350 subcluster_of cell_type \n", - "1351 subcluster_of cell_type \n", - "1352 subcluster_of cell_type \n", - "1353 subcluster_of cell_type \n", - "1354 subcluster_of cell_type \n", - "1355 subcluster_of cell_type \n", - "1356 subcluster_of cell_type \n", - "1357 subcluster_of cell_type \n", - "1358 subcluster_of cell_type \n", - "1359 subcluster_of cell_type \n", - "1360 subcluster_of cell_type \n", - "1361 subcluster_of cell_type \n", - "1362 subcluster_of cell_type \n", - "1363 subcluster_of cell_type \n", - "1364 subcluster_of cell_type \n", - "1365 subcluster_of cell_type \n", - "1366 subcluster_of cell_type \n", - "1367 subcluster_of cell_type \n", - "1368 subcluster_of cell_type \n", - "1369 subcluster_of cell_type \n", - "1370 subcluster_of cell_type \n", - "1371 subcluster_of cell_type \n", - "1372 subcluster_of cell_type \n", - "1373 subcluster_of cell_type \n", - "1374 subcluster_of cell_type \n", - "1375 subcluster_of cell_type \n", - "1376 subcluster_of cell_type \n", - "1377 subcluster_of cell_type \n", - "1378 subcluster_of cell_type \n", - "1379 subcluster_of cell_type \n", - "1380 subcluster_of cell_type \n", - "1381 subcluster_of cell_type \n", - "1382 subcluster_of cell_type \n", - "1383 subcluster_of cell_type \n", - "1384 subcluster_of cell_type \n", - "1385 subcluster_of cell_type \n", - "1386 subcluster_of cell_type \n", - "1387 subcluster_of cell_type \n", - "1388 subcluster_of cell_type \n", - "1389 subcluster_of cell_type \n", - "1390 subcluster_of cell_type \n", - "1391 subcluster_of cell_type \n", - "1392 subcluster_of cell_type \n", - "1393 subcluster_of cell_type \n", - "1394 subcluster_of cell_type \n", - "1395 subcluster_of cell_type \n", - "1396 subcluster_of cell_type \n", - "1397 subcluster_of cell_type \n", - "1398 subcluster_of cell_type \n", - "1399 subcluster_of cell_type \n", - "1400 subcluster_of cell_type \n", - "1401 subcluster_of cell_type \n", - "1402 subcluster_of cell_type \n", - "1403 subcluster_of cell_type \n", - "1404 subcluster_of cell_type \n", - "1405 subcluster_of cell_type \n", - "1406 subcluster_of cell_type \n", - "1407 subcluster_of cell_type \n", - "1408 subcluster_of cell_type \n", - "1409 subcluster_of cell_type \n", - "1410 subcluster_of cell_type \n", - "1411 subcluster_of cell_type \n", - "1412 subcluster_of cell_type \n", - "1413 subcluster_of cell_type \n", - "1414 subcluster_of cell_type \n", - "1415 subcluster_of cell_type \n", - "1416 subcluster_of cell_type \n", - "1417 subcluster_of cell_type \n", - "1418 subcluster_of cell_type \n", - "1419 subcluster_of cell_type \n", - "1420 subcluster_of cell_type \n", - "1421 subcluster_of cell_type \n", - "1422 subcluster_of cell_type \n", - "1423 subcluster_of cell_type \n", - "1424 subcluster_of cell_type \n", - "1425 subcluster_of cell_type \n", - "1426 subcluster_of cell_type \n", - "1427 subcluster_of cell_type \n", - "1428 subcluster_of cell_type \n", - "1429 subcluster_of cell_type \n", - "1430 subcluster_of cell_type \n", - "1431 subcluster_of cell_type \n", - "1432 subcluster_of cell_type \n", - "1433 subcluster_of cell_type \n", - "1434 subcluster_of cell_type \n", - "1435 subcluster_of cell_type \n", - "1436 subcluster_of cell_type \n", - "1437 subcluster_of cell_type \n", - "1438 subcluster_of cell_type \n", - "1439 subcluster_of cell_type \n", - "1440 subcluster_of cell_type \n", - "1441 subcluster_of cell_type \n", - "1442 subcluster_of cell_type \n", - "1443 subcluster_of cell_type \n", - "1444 subcluster_of cell_type \n", - "1445 subcluster_of cell_type \n", - "1446 subcluster_of cell_type \n", - "1447 subcluster_of cell_type \n", - "1448 subcluster_of cell_type \n", - "1449 subcluster_of cell_type \n", - "1450 subcluster_of cell_type \n", - "1451 subcluster_of cell_type \n", - "1452 subcluster_of cell_type \n", - "1453 subcluster_of cell_type \n", - "1454 subcluster_of cell_type \n", - "1455 subcluster_of cell_type \n", - "1456 subcluster_of cell_type \n", - "1457 subcluster_of cell_type \n", - "1458 subcluster_of cell_type \n", - "1459 subcluster_of cell_type \n", - "1460 subcluster_of cell_type \n", - "1461 subcluster_of cell_type \n", - "1462 subcluster_of cell_type \n", - "1463 subcluster_of cell_type \n", - "1464 subcluster_of cell_type \n", - "1465 subcluster_of cell_type \n", - "1466 subcluster_of cell_type \n", - "1467 subcluster_of cell_type \n", - "1468 subcluster_of cell_type \n", - "1469 subcluster_of cell_type \n", - "1470 subcluster_of cell_type \n", - "1471 subcluster_of cell_type \n", - "1472 subcluster_of cell_type \n", - "1473 subcluster_of cell_type \n", - "1474 subcluster_of cell_type \n", - "1475 subcluster_of cell_type \n", - "1476 subcluster_of cell_type \n", - "1477 subcluster_of cell_type \n", - "1478 subcluster_of cell_type \n", - "1479 subcluster_of cell_type \n", - "1480 subcluster_of cell_type \n", - "1481 subcluster_of cell_type \n", - "1482 subcluster_of cell_type \n", - "1483 subcluster_of cell_type \n", - "1484 subcluster_of cell_type \n", - "1485 subcluster_of cell_type \n", - "1486 subcluster_of cell_type \n", - "1487 subcluster_of cell_type \n", - "1488 subcluster_of cell_type \n", - "1489 subcluster_of cell_type \n", - "1490 subcluster_of cell_type \n", - "1491 subcluster_of cell_type \n", - "1492 subcluster_of cell_type \n", - "1493 subcluster_of cell_type \n", - "1494 subcluster_of cell_type \n", - "1495 subcluster_of cell_type \n", - "1496 subcluster_of cell_type \n", - "1497 subcluster_of cell_type \n", - "1498 subcluster_of cell_type \n", - "1499 subcluster_of cell_type \n", - "1500 subcluster_of cell_type \n", - "1501 subcluster_of cell_type \n", - "1502 subcluster_of cell_type \n", - "1503 subcluster_of cell_type \n", - "1504 subcluster_of cell_type \n", - "1505 subcluster_of cell_type \n", - "1506 subcluster_of cell_type \n", - "1507 subcluster_of cell_type \n", - "1508 subcluster_of cell_type \n", - "1509 subcluster_of cell_type \n", - "1510 subcluster_of cell_type \n", - "1511 subcluster_of cell_type \n", - "1512 subcluster_of cell_type \n", - "1513 subcluster_of cell_type \n", - "1514 subcluster_of cell_type \n", - "1515 subcluster_of cell_type \n", - "1516 subcluster_of cell_type \n", - "1517 subcluster_of cell_type \n", - "1518 subcluster_of cell_type \n", - "1519 subcluster_of cell_type \n", - "1520 subcluster_of cell_type \n", - "1521 subcluster_of cell_type \n", - "1522 subcluster_of cell_type \n", - "1523 subcluster_of cell_type \n", - "1524 subcluster_of cell_type \n", - "1525 subcluster_of cell_type \n", - "1526 subcluster_of cell_type \n", - "1527 subcluster_of cell_type \n", - "1528 subcluster_of cell_type \n", - "1529 subcluster_of cell_type \n", - "1530 subcluster_of cell_type \n", - "1531 subcluster_of cell_type \n", - "1532 subcluster_of cell_type \n", - "1533 subcluster_of cell_type \n", - "1534 subcluster_of cell_type \n", - "1535 subcluster_of cell_type \n", - "1536 subcluster_of cell_type \n", - "1537 subcluster_of cell_type \n", - "1538 subcluster_of cell_type \n", - "1539 subcluster_of cell_type \n", - "1540 subcluster_of cell_type \n", - "1541 subcluster_of cell_type \n", - "1542 subcluster_of cell_type \n", - "1543 subcluster_of cell_type \n", - "1544 subcluster_of cell_type \n", - "1545 subcluster_of cell_type \n", - "1546 subcluster_of cell_type \n", - "1547 subcluster_of cell_type \n", - "1548 subcluster_of cell_type \n", - "1549 subcluster_of cell_type \n", - "1550 subcluster_of cell_type \n", - "1551 subcluster_of cell_type \n", - "1552 subcluster_of cell_type \n", - "1553 subcluster_of cell_type \n", - "1554 subcluster_of cell_type \n", - "1555 subcluster_of cell_type \n", - "1556 subcluster_of cell_type \n", - "1557 subcluster_of cell_type \n", + " value2 \n", + "0 Degenerative Proximal Tubule Epithelial Cell \n", + "1 Adaptive / Maladaptive / Repairing Proximal Tu... \n", + "2 Medullary Fibroblast \n", + "3 Macula Densa Cell \n", + "4 Natural Killer Cell / Natural Killer T Cell \n", + ".. ... \n", + "415 epithelial cells \n", + "416 stroma cells \n", + "417 neural cells \n", + "418 epithelial cells \n", + "419 epithelial cells \n", "\n", - " value2 \n", - "0 Degenerative Proximal Tubule Epithelial Cell \n", - "1 Adaptive / Maladaptive / Repairing Proximal Tu... \n", - "2 Medullary Fibroblast \n", - "3 Macula Densa Cell \n", - "4 Natural Killer Cell / Natural Killer T Cell \n", - "5 Transitional Principal-Intercalated Cell \n", - "6 Descending Vasa Recta Endothelial Cell \n", - "7 Medullary Thick Ascending Limb Cell \n", - "8 Cortical Collecting Duct Intercalated Cell Type A \n", - "9 Degenerative Medullary Thick Ascending Limb Cell \n", - "10 Ascending Vasa Recta Endothelial Cell \n", - "11 M2 Macrophage \n", - "12 Cycling Proximal Tubule Epithelial Cell \n", - "13 Outer Medullary Collecting Duct Intercalated C... \n", - "14 Adaptive / Maladaptive / Repairing Thick Ascen... \n", - "15 Afferent / Efferent Arteriole Endothelial Cell \n", - "16 Descending Thin Limb Cell Type 2 \n", - "17 Neutrophil \n", - "18 Podocyte \n", - "19 Ascending Thin Limb Cell \n", - "20 Descending Thin Limb Cell Type 1 \n", - "21 Monocyte-derived Cell \n", - "22 Cortical Collecting Duct Principal Cell \n", - "23 Peritubular Capilary Endothelial Cell \n", - "24 Proximal Tubule Epithelial Cell Segment 1 / Se... \n", - "25 Proximal Tubule Epithelial Cell Segment 3 \n", - "26 Cortical Thick Ascending Limb Cell \n", - "27 Outer Medullary Collecting Duct Principal Cell \n", - "28 Fibroblast \n", - "29 Degenerative Outer Medullary Collecting Duct P... \n", - "30 T Cell \n", - "31 Plasma Cell \n", - "32 Connecting Tubule Principal Cell \n", - "33 Distal Convoluted Tubule Cell Type 1 \n", - "34 Degenerative Fibroblast \n", - "35 Degenerative Cortical Thick Ascending Limb Cell \n", - "36 Vascular Smooth Muscle Cell \n", - "37 Schwann Cell / Neural \n", - "38 Descending Thin Limb Cell Type 3 \n", - "39 Glomerular Capillary Endothelial Cell \n", - "40 Vascular Smooth Muscle Cell / Pericyte \n", - "41 Cycling Mononuclear Phagocyte \n", - "42 Myofibroblast \n", - "43 Degenerative Peritubular Capilary Endothelial ... \n", - "44 Non-classical Monocyte \n", - "45 Cycling Endothelial Cell \n", - "46 Classical Dendritic Cell \n", - "47 Lymphatic Endothelial Cell \n", - "48 Distal Convoluted Tubule Cell Type 2 \n", - "49 Mesangial Cell \n", - "50 Intercalated Cell Type B \n", - "51 Connecting Tubule Cell \n", - "52 Mast Cell \n", - "53 Degenerative Vascular Smooth Muscle Cell \n", - "54 Degenerative Ascending Thin Limb Cell \n", - "55 Renin-positive Juxtaglomerular Granular Cell \n", - "56 B Cell \n", - "57 Adaptive / Maladaptive / Repairing Thick Ascen... \n", - "58 Degenerative Cortical Intercalated Cell Type A \n", - "59 Degenerative Connecting Tubule Cell \n", - "60 Adaptive / Maladaptive / Repairing Fibroblast \n", - "61 Parietal Epithelial Cell \n", - "62 Cycling Connecting Tubule Cell \n", - "63 Degenerative Inner Medullary Collecting Duct Cell \n", - "64 Inner Medullary Collecting Duct Cell \n", - "65 Degenerative Endothelial Cell \n", - "66 Degenerative Medullary Fibroblast \n", - "67 Connecting Tubule Intercalated Cell Type A \n", - "68 Cycling Distal Convoluted Tubule Cell \n", - "69 Degenerative Podocyte \n", - "70 Plasmacytoid Dendritic Cell \n", - "71 Degenerative Descending Thin Limb Cell Type 3 \n", - "72 Degenerative Distal Convoluted Tubule Cell \n", - "73 Cycling Myofibroblast \n", - "74 Papillary Tip Epithelial Cell \n", - "75 Cycling Natural Killer Cell / Natural Killer T... \n", - "76 Degenerative Proximal Tubule Epithelial Cell \n", - "77 Adaptive / Maladaptive / Repairing Proximal Tu... \n", - "78 Medullary Fibroblast \n", - "79 Macula Densa Cell \n", - "80 Natural Killer Cell / Natural Killer T Cell \n", - "81 Transitional Principal-Intercalated Cell \n", - "82 Descending Vasa Recta Endothelial Cell \n", - "83 Medullary Thick Ascending Limb Cell \n", - "84 Degenerative Medullary Thick Ascending Limb Cell \n", - "85 Ascending Vasa Recta Endothelial Cell \n", - "86 M2 Macrophage \n", - "87 Cycling Proximal Tubule Epithelial Cell \n", - "88 Outer Medullary Collecting Duct Intercalated C... \n", - "89 Adaptive / Maladaptive / Repairing Thick Ascen... \n", - "90 Afferent / Efferent Arteriole Endothelial Cell \n", - "91 Descending Thin Limb Cell Type 2 \n", - "92 Neutrophil \n", - "93 Podocyte \n", - "94 Ascending Thin Limb Cell \n", - "95 Descending Thin Limb Cell Type 1 \n", - "96 Monocyte-derived Cell \n", - "97 Cortical Collecting Duct Principal Cell \n", - "98 Peritubular Capilary Endothelial Cell \n", - "99 Proximal Tubule Epithelial Cell Segment 1 / Se... \n", - "100 Proximal Tubule Epithelial Cell Segment 3 \n", - "101 Cortical Thick Ascending Limb Cell \n", - "102 Outer Medullary Collecting Duct Principal Cell \n", - "103 Fibroblast \n", - "104 Degenerative Outer Medullary Collecting Duct P... \n", - "105 T Cell \n", - "106 Plasma Cell \n", - "107 Degenerative Fibroblast \n", - "108 Degenerative Cortical Thick Ascending Limb Cell \n", - "109 Vascular Smooth Muscle Cell \n", - "110 Schwann Cell / Neural \n", - "111 Descending Thin Limb Cell Type 3 \n", - "112 Glomerular Capillary Endothelial Cell \n", - "113 Vascular Smooth Muscle Cell / Pericyte \n", - "114 Cycling Mononuclear Phagocyte \n", - "115 Myofibroblast \n", - "116 Degenerative Peritubular Capilary Endothelial ... \n", - "117 Non-classical Monocyte \n", - "118 Cycling Endothelial Cell \n", - "119 Classical Dendritic Cell \n", - "120 Lymphatic Endothelial Cell \n", - "121 Mesangial Cell \n", - "122 Intercalated Cell Type B \n", - "123 Mast Cell \n", - "124 Degenerative Vascular Smooth Muscle Cell \n", - "125 Degenerative Ascending Thin Limb Cell \n", - "126 Renin-positive Juxtaglomerular Granular Cell \n", - "127 B Cell \n", - "128 Adaptive / Maladaptive / Repairing Thick Ascen... \n", - "129 Degenerative Cortical Intercalated Cell Type A \n", - "130 Degenerative Connecting Tubule Cell \n", - "131 Adaptive / Maladaptive / Repairing Fibroblast \n", - "132 Parietal Epithelial Cell \n", - "133 Cycling Connecting Tubule Cell \n", - "134 Degenerative Inner Medullary Collecting Duct Cell \n", - "135 Inner Medullary Collecting Duct Cell \n", - "136 Degenerative Endothelial Cell \n", - "137 Degenerative Medullary Fibroblast \n", - "138 Cycling Distal Convoluted Tubule Cell \n", - "139 Degenerative Podocyte \n", - "140 Plasmacytoid Dendritic Cell \n", - "141 Degenerative Descending Thin Limb Cell Type 3 \n", - "142 Degenerative Distal Convoluted Tubule Cell \n", - "143 Cycling Myofibroblast \n", - "144 Papillary Tip Epithelial Cell \n", - "145 Cycling Natural Killer Cell / Natural Killer T... \n", - "146 Schwann Cell / Neural \n", - "147 Parietal Epithelial Cell \n", - "148 Papillary Tip Epithelial Cell \n", - "149 Transitional Principal-Intercalated Cell \n", - "150 Schwann Cell / Neural \n", - "151 Schwann Cell / Neural \n", - "152 Parietal Epithelial Cell \n", - "153 Papillary Tip Epithelial Cell \n", - "154 dPT \n", - "155 aPT \n", - "156 M-FIB \n", - "157 MD \n", - "158 NKC/T \n", - "159 tPC-IC \n", - "160 EC-DVR \n", - "161 M-TAL \n", - "162 dM-TAL \n", - "163 EC-AVR \n", - "164 MAC-M2 \n", - "165 cycPT \n", - "166 OMCD-IC-A \n", - "167 aTAL1 \n", - "168 EC-AEA \n", - "169 DTL2 \n", - "170 N \n", - "171 POD \n", - "172 ATL \n", - "173 DTL1 \n", - "174 MDC \n", - "175 CCD-PC \n", - "176 EC-PTC \n", - "177 PT-S1/2 \n", - "178 PT-S3 \n", - "179 C-TAL \n", - "180 OMCD-PC \n", - "181 FIB \n", - "182 dOMCD-PC \n", - "183 T \n", - "184 PL \n", - "185 dFIB \n", - "186 dC-TAL \n", - "187 VSMC \n", - "188 SC/NEU \n", - "189 DTL3 \n", - "190 EC-GC \n", - "191 VSMC/P \n", - "192 cycMNP \n", - "193 MYOF \n", - "194 dEC-PTC \n", - "195 ncMON \n", - "196 cycEC \n", - "197 cDC \n", - "198 EC-LYM \n", - "199 MC \n", - "200 IC-B \n", - "201 MAST \n", - "202 dVSMC \n", - "203 dATL \n", - "204 REN \n", - "205 B \n", - "206 aTAL2 \n", - "207 dC-IC-A \n", - "208 dCNT \n", - "209 aFIB \n", - "210 PEC \n", - "211 cycCNT \n", - "212 dIMCD \n", - "213 IMCD \n", - "214 dEC \n", - "215 dM-FIB \n", - "216 cycDCT \n", - "217 dPOD \n", - "218 pDC \n", - "219 dDTL3 \n", - "220 dDCT \n", - "221 cycMYOF \n", - "222 PapE \n", - "223 cycNKC/T \n", - "224 SC/NEU \n", - "225 PEC \n", - "226 PapE \n", - "227 tPC-IC \n", - "228 SC/NEU \n", - "229 SC/NEU \n", - "230 PEC \n", - "231 PapE \n", - "232 C-IC-A \n", - "233 CNT \n", - "234 DCT \n", - "235 DCT \n", - "236 CNT \n", - "237 C-IC-A \n", - "238 C-IC-A \n", - "239 CNT \n", - "240 DCT \n", - "241 DCT \n", - "242 CNT \n", - "243 C-IC-A \n", - "244 SC/NEU \n", - "245 PEC \n", - "246 PapE \n", - "247 tPC-IC \n", - "248 SC/NEU \n", - "249 SC/NEU \n", - "250 PEC \n", - "251 PapE \n", - "252 PT \n", - "253 PT \n", - "254 FIB \n", - "255 TAL \n", - "256 IMM \n", - "257 IC \n", - "258 EC \n", - "259 TAL \n", - "260 IC \n", - "261 TAL \n", - "262 EC \n", - "263 IMM \n", - "264 PT \n", - "265 IC \n", - "266 TAL \n", - "267 EC \n", - "268 DTL \n", - "269 IMM \n", - "270 POD \n", - "271 ATL \n", - "272 DTL \n", - "273 IMM \n", - "274 PC \n", - "275 EC \n", - "276 PT \n", - "277 PT \n", - "278 TAL \n", - "279 PC \n", - "280 FIB \n", - "281 PC \n", - "282 IMM \n", - "283 IMM \n", - "284 CNT \n", - "285 DCT \n", - "286 FIB \n", - "287 TAL \n", - "288 VSM/P \n", - "289 DTL \n", - "290 EC \n", - "291 VSM/P \n", - "292 IMM \n", - "293 FIB \n", - "294 EC \n", - "295 IMM \n", - "296 EC \n", - "297 IMM \n", - "298 EC \n", - "299 DCT \n", - "300 VSM/P \n", - "301 IC \n", - "302 CNT \n", - "303 IMM \n", - "304 VSM/P \n", - "305 ATL \n", - "306 VSM/P \n", - "307 IMM \n", - "308 IC \n", - "309 CNT \n", - "310 FIB \n", - "311 CNT \n", - "312 PC \n", - "313 PC \n", - "314 EC \n", - "315 FIB \n", - "316 IC \n", - "317 DCT \n", - "318 POD \n", - "319 IMM \n", - "320 DTL \n", - "321 DCT \n", - "322 FIB \n", - "323 IMM \n", - "324 PT \n", - "325 PT \n", - "326 FIB \n", - "327 TAL \n", - "328 IMM \n", - "329 IC \n", - "330 EC \n", - "331 TAL \n", - "332 IC \n", - "333 TAL \n", - "334 EC \n", - "335 IMM \n", - "336 PT \n", - "337 IC \n", - "338 TAL \n", - "339 EC \n", - "340 DTL \n", - "341 IMM \n", - "342 POD \n", - "343 ATL \n", - "344 DTL \n", - "345 IMM \n", - "346 PC \n", - "347 EC \n", - "348 PT \n", - "349 PT \n", - "350 TAL \n", - "351 PC \n", - "352 FIB \n", - "353 PC \n", - "354 IMM \n", - "355 IMM \n", - "356 CNT \n", - "357 DCT \n", - "358 FIB \n", - "359 TAL \n", - "360 VSM/P \n", - "361 DTL \n", - "362 EC \n", - "363 VSM/P \n", - "364 IMM \n", - "365 FIB \n", - "366 EC \n", - "367 IMM \n", - "368 EC \n", - "369 IMM \n", - "370 EC \n", - "371 DCT \n", - "372 VSM/P \n", - "373 IC \n", - "374 CNT \n", - "375 IMM \n", - "376 VSM/P \n", - "377 ATL \n", - "378 VSM/P \n", - "379 IMM \n", - "380 TAL \n", - "381 IC \n", - "382 CNT \n", - "383 FIB \n", - "384 CNT \n", - "385 PC \n", - "386 PC \n", - "387 EC \n", - "388 FIB \n", - "389 IC \n", - "390 DCT \n", - "391 POD \n", - "392 IMM \n", - "393 DTL \n", - "394 DCT \n", - "395 FIB \n", - "396 IMM \n", - "397 PT \n", - "398 PT \n", - "399 FIB \n", - "400 TAL \n", - "401 IMM \n", - "402 IC \n", - "403 EC \n", - "404 TAL \n", - "405 IC \n", - "406 TAL \n", - "407 EC \n", - "408 IMM \n", - "409 PT \n", - "410 IC \n", - "411 TAL \n", - "412 EC \n", - "413 DTL \n", - "414 IMM \n", - "415 POD \n", - "416 ATL \n", - "417 DTL \n", - "418 IMM \n", - "419 PC \n", - "420 EC \n", - "421 PT \n", - "422 PT \n", - "423 TAL \n", - "424 PC \n", - "425 FIB \n", - "426 PC \n", - "427 IMM \n", - "428 IMM \n", - "429 CNT \n", - "430 DCT \n", - "431 FIB \n", - "432 TAL \n", - "433 VSM/P \n", - "434 DTL \n", - "435 EC \n", - "436 VSM/P \n", - "437 IMM \n", - "438 FIB \n", - "439 EC \n", - "440 IMM \n", - "441 EC \n", - "442 IMM \n", - "443 EC \n", - "444 VSM/P \n", - "445 IC \n", - "446 IMM \n", - "447 VSM/P \n", - "448 ATL \n", - "449 VSM/P \n", - "450 IMM \n", - "451 TAL \n", - "452 IC \n", - "453 CNT \n", - "454 FIB \n", - "455 CNT \n", - "456 PC \n", - "457 PC \n", - "458 EC \n", - "459 FIB \n", - "460 DCT \n", - "461 POD \n", - "462 IMM \n", - "463 DTL \n", - "464 DCT \n", - "465 FIB \n", - "466 IMM \n", - "467 PT \n", - "468 PT \n", - "469 FIB \n", - "470 TAL \n", - "471 IMM \n", - "472 IC \n", - "473 EC \n", - "474 IC \n", - "475 TAL \n", - "476 PT \n", - "477 TAL \n", - "478 DTL \n", - "479 POD \n", - "480 ATL \n", - "481 PC \n", - "482 PT \n", - "483 PC \n", - "484 CNT \n", - "485 DCT \n", - "486 FIB \n", - "487 VSM/P \n", - "488 IMM \n", - "489 FIB \n", - "490 EC \n", - "491 EC \n", - "492 VSM/P \n", - "493 ATL \n", - "494 IC \n", - "495 CNT \n", - "496 CNT \n", - "497 DCT \n", - "498 POD \n", - "499 DTL \n", - "500 DCT \n", - "501 FIB \n", - "502 PT \n", - "503 FIB \n", - "504 TAL \n", - "505 IC \n", - "506 EC \n", - "507 IC \n", - "508 TAL \n", - "509 DTL \n", - "510 POD \n", - "511 ATL \n", - "512 PC \n", - "513 PT \n", - "514 PC \n", - "515 CNT \n", - "516 DCT \n", - "517 FIB \n", - "518 VSM/P \n", - "519 EC \n", - "520 VSM/P \n", - "521 ATL \n", - "522 CNT \n", - "523 DCT \n", - "524 POD \n", - "525 DTL \n", - "526 IMM \n", - "527 EC \n", - "528 NEU \n", - "529 PT \n", - "530 FIB \n", - "531 TAL \n", - "532 IMM \n", - "533 IC \n", - "534 EC \n", - "535 DTL \n", - "536 POD \n", - "537 ATL \n", - "538 PC \n", - "539 CNT \n", - "540 DCT \n", - "541 VSM/P \n", - "542 NEU \n", - "543 PEC \n", - "544 PapE \n", - "545 degenerative \n", - "546 adaptive - epi \n", - "547 reference \n", - "548 reference \n", - "549 reference \n", - "550 reference \n", - "551 reference \n", - "552 reference \n", - "553 degenerative \n", - "554 reference \n", - "555 reference \n", - "556 cycling \n", - "557 reference \n", - "558 adaptive - epi \n", - "559 reference \n", - "560 reference \n", - "561 reference \n", - "562 reference \n", - "563 reference \n", - "564 reference \n", - "565 reference \n", - "566 reference \n", - "567 reference \n", - "568 reference \n", - "569 reference \n", - "570 reference \n", - "571 reference \n", - "572 reference \n", - "573 degenerative \n", - "574 reference \n", - "575 reference \n", - "576 reference \n", - "577 reference \n", - "578 degenerative \n", - "579 degenerative \n", - "580 reference \n", - "581 reference \n", - "582 reference \n", - "583 reference \n", - "584 reference \n", - "585 cycling \n", - "586 adaptive - str \n", - "587 degenerative \n", - "588 reference \n", - "589 cycling \n", - "590 reference \n", - "591 reference \n", - "592 reference \n", - "593 reference \n", - "594 reference \n", - "595 reference \n", - "596 reference \n", - "597 degenerative \n", - "598 degenerative \n", - "599 reference \n", - "600 reference \n", - "601 degenerative \n", - "602 degenerative \n", - "603 adaptive - str \n", - "604 reference \n", - "605 cycling \n", - "606 degenerative \n", - "607 reference \n", - "608 degenerative \n", - "609 degenerative \n", - "610 reference \n", - "611 cycling \n", - "612 degenerative \n", - "613 reference \n", - "614 degenerative \n", - "615 degenerative \n", - "616 cycling \n", - "617 reference \n", - "618 cycling \n", - "619 degenerative \n", - "620 adaptive - epi \n", - "621 reference \n", - "622 reference \n", - "623 reference \n", - "624 reference \n", - "625 reference \n", - "626 reference \n", - "627 degenerative \n", - "628 reference \n", - "629 reference \n", - "630 cycling \n", - "631 reference \n", - "632 adaptive - epi \n", - "633 reference \n", - "634 reference \n", - "635 reference \n", - "636 reference \n", - "637 reference \n", - "638 reference \n", - "639 reference \n", - "640 reference \n", - "641 reference \n", - "642 reference \n", - "643 reference \n", - "644 reference \n", - "645 reference \n", - "646 reference \n", - "647 degenerative \n", - "648 reference \n", - "649 reference \n", - "650 reference \n", - "651 reference \n", - "652 degenerative \n", - "653 degenerative \n", - "654 reference \n", - "655 reference \n", - "656 reference \n", - "657 reference \n", - "658 reference \n", - "659 cycling \n", - "660 adaptive - str \n", - "661 degenerative \n", - "662 reference \n", - "663 cycling \n", - "664 reference \n", - "665 reference \n", - "666 reference \n", - "667 reference \n", - "668 reference \n", - "669 reference \n", - "670 reference \n", - "671 degenerative \n", - "672 degenerative \n", - "673 reference \n", - "674 reference \n", - "675 adaptive - epi \n", - "676 degenerative \n", - "677 degenerative \n", - "678 adaptive - str \n", - "679 reference \n", - "680 cycling \n", - "681 degenerative \n", - "682 reference \n", - "683 degenerative \n", - "684 degenerative \n", - "685 reference \n", - "686 cycling \n", - "687 degenerative \n", - "688 reference \n", - "689 degenerative \n", - "690 degenerative \n", - "691 cycling \n", - "692 reference \n", - "693 cycling \n", - "694 degenerative \n", - "695 adaptive - epi \n", - "696 reference \n", - "697 reference \n", - "698 reference \n", - "699 reference \n", - "700 reference \n", - "701 reference \n", - "702 degenerative \n", - "703 reference \n", - "704 reference \n", - "705 cycling \n", - "706 reference \n", - "707 adaptive - epi \n", - "708 reference \n", - "709 reference \n", - "710 reference \n", - "711 reference \n", - "712 reference \n", - "713 reference \n", - "714 reference \n", - "715 reference \n", - "716 reference \n", - "717 reference \n", - "718 reference \n", - "719 reference \n", - "720 reference \n", - "721 reference \n", - "722 degenerative \n", - "723 reference \n", - "724 reference \n", - "725 reference \n", - "726 reference \n", - "727 degenerative \n", - "728 degenerative \n", - "729 reference \n", - "730 reference \n", - "731 reference \n", - "732 reference \n", - "733 reference \n", - "734 cycling \n", - "735 adaptive - str \n", - "736 degenerative \n", - "737 reference \n", - "738 cycling \n", - "739 reference \n", - "740 reference \n", - "741 reference \n", - "742 reference \n", - "743 reference \n", - "744 degenerative \n", - "745 degenerative \n", - "746 reference \n", - "747 reference \n", - "748 adaptive - epi \n", - "749 degenerative \n", - "750 degenerative \n", - "751 adaptive - str \n", - "752 reference \n", - "753 cycling \n", - "754 degenerative \n", - "755 reference \n", - "756 degenerative \n", - "757 degenerative \n", - "758 cycling \n", - "759 degenerative \n", - "760 reference \n", - "761 degenerative \n", - "762 degenerative \n", - "763 cycling \n", - "764 reference \n", - "765 cycling \n", - "766 reference \n", - "767 reference \n", - "768 reference \n", - "769 cycling \n", - "770 cycling \n", - "771 degenerative \n", - "772 reference \n", - "773 reference \n", - "774 reference \n", - "775 reference \n", - "776 cycling \n", - "777 degenerative \n", - "778 reference \n", - "779 cycling \n", - "780 degenerative \n", - "781 cycling \n", - "782 cycling \n", - "783 degenerative \n", - "784 adaptive - epi \n", - "785 reference \n", - "786 reference \n", - "787 reference \n", - "788 reference \n", - "789 reference \n", - "790 degenerative \n", - "791 cycling \n", - "792 adaptive - epi \n", - "793 reference \n", - "794 reference \n", - "795 reference \n", - "796 reference \n", - "797 reference \n", - "798 degenerative \n", - "799 reference \n", - "800 reference \n", - "801 degenerative \n", - "802 reference \n", - "803 reference \n", - "804 cycling \n", - "805 degenerative \n", - "806 cycling \n", - "807 degenerative \n", - "808 degenerative \n", - "809 degenerative \n", - "810 degenerative \n", - "811 reference \n", - "812 cycling \n", - "813 cycling \n", - "814 degenerative \n", - "815 degenerative \n", - "816 degenerative \n", - "817 cycling \n", - "818 reference \n", - "819 altered \n", - "820 altered \n", - "821 reference \n", - "822 reference \n", - "823 reference \n", - "824 altered \n", - "825 reference \n", - "826 reference \n", - "827 reference \n", - "828 altered \n", - "829 reference \n", - "830 reference \n", - "831 altered \n", - "832 reference \n", - "833 altered \n", - "834 reference \n", - "835 reference \n", - "836 reference \n", - "837 reference \n", - "838 reference \n", - "839 reference \n", - "840 reference \n", - "841 reference \n", - "842 reference \n", - "843 reference \n", - "844 reference \n", - "845 reference \n", - "846 reference \n", - "847 reference \n", - "848 altered \n", - "849 reference \n", - "850 reference \n", - "851 reference \n", - "852 reference \n", - "853 altered \n", - "854 altered \n", - "855 reference \n", - "856 reference \n", - "857 reference \n", - "858 reference \n", - "859 reference \n", - "860 reference \n", - "861 altered \n", - "862 altered \n", - "863 reference \n", - "864 altered \n", - "865 reference \n", - "866 reference \n", - "867 reference \n", - "868 reference \n", - "869 reference \n", - "870 reference \n", - "871 reference \n", - "872 altered \n", - "873 altered \n", - "874 reference \n", - "875 reference \n", - "876 altered \n", - "877 altered \n", - "878 altered \n", - "879 reference \n", - "880 altered \n", - "881 altered \n", - "882 reference \n", - "883 altered \n", - "884 altered \n", - "885 reference \n", - "886 altered \n", - "887 altered \n", - "888 reference \n", - "889 altered \n", - "890 altered \n", - "891 altered \n", - "892 reference \n", - "893 reference \n", - "894 altered \n", - "895 altered \n", - "896 reference \n", - "897 reference \n", - "898 reference \n", - "899 altered \n", - "900 reference \n", - "901 reference \n", - "902 reference \n", - "903 altered \n", - "904 reference \n", - "905 reference \n", - "906 altered \n", - "907 reference \n", - "908 altered \n", - "909 reference \n", - "910 reference \n", - "911 reference \n", - "912 reference \n", - "913 reference \n", - "914 reference \n", - "915 reference \n", - "916 reference \n", - "917 reference \n", - "918 reference \n", - "919 reference \n", - "920 reference \n", - "921 reference \n", - "922 reference \n", - "923 altered \n", - "924 reference \n", - "925 reference \n", - "926 reference \n", - "927 reference \n", - "928 altered \n", - "929 altered \n", - "930 reference \n", - "931 reference \n", - "932 reference \n", - "933 reference \n", - "934 reference \n", - "935 reference \n", - "936 altered \n", - "937 altered \n", - "938 reference \n", - "939 altered \n", - "940 reference \n", - "941 reference \n", - "942 reference \n", - "943 reference \n", - "944 reference \n", - "945 reference \n", - "946 reference \n", - "947 altered \n", - "948 altered \n", - "949 reference \n", - "950 reference \n", - "951 altered \n", - "952 altered \n", - "953 altered \n", - "954 altered \n", - "955 reference \n", - "956 altered \n", - "957 altered \n", - "958 reference \n", - "959 altered \n", - "960 altered \n", - "961 reference \n", - "962 altered \n", - "963 altered \n", - "964 reference \n", - "965 altered \n", - "966 altered \n", - "967 altered \n", - "968 reference \n", - "969 reference \n", - "970 altered \n", - "971 altered \n", - "972 reference \n", - "973 reference \n", - "974 reference \n", - "975 altered \n", - "976 reference \n", - "977 reference \n", - "978 reference \n", - "979 altered \n", - "980 reference \n", - "981 reference \n", - "982 altered \n", - "983 reference \n", - "984 altered \n", - "985 reference \n", - "986 reference \n", - "987 reference \n", - "988 reference \n", - "989 reference \n", - "990 reference \n", - "991 reference \n", - "992 reference \n", - "993 reference \n", - "994 reference \n", - "995 reference \n", - "996 reference \n", - "997 reference \n", - "998 reference \n", - "999 altered \n", - "1000 reference \n", - "1001 reference \n", - "1002 reference \n", - "1003 reference \n", - "1004 altered \n", - "1005 altered \n", - "1006 reference \n", - "1007 reference \n", - "1008 reference \n", - "1009 reference \n", - "1010 reference \n", - "1011 reference \n", - "1012 altered \n", - "1013 altered \n", - "1014 reference \n", - "1015 altered \n", - "1016 reference \n", - "1017 reference \n", - "1018 reference \n", - "1019 reference \n", - "1020 reference \n", - "1021 altered \n", - "1022 altered \n", - "1023 reference \n", - "1024 reference \n", - "1025 altered \n", - "1026 altered \n", - "1027 altered \n", - "1028 altered \n", - "1029 reference \n", - "1030 altered \n", - "1031 altered \n", - "1032 reference \n", - "1033 altered \n", - "1034 altered \n", - "1035 altered \n", - "1036 altered \n", - "1037 reference \n", - "1038 altered \n", - "1039 altered \n", - "1040 altered \n", - "1041 reference \n", - "1042 reference \n", - "1043 reference \n", - "1044 reference \n", - "1045 reference \n", - "1046 reference \n", - "1047 altered \n", - "1048 altered \n", - "1049 reference \n", - "1050 altered \n", - "1051 altered \n", - "1052 altered \n", - "1053 reference \n", - "1054 reference \n", - "1055 reference \n", - "1056 reference \n", - "1057 altered \n", - "1058 reference \n", - "1059 altered \n", - "1060 altered \n", - "1061 reference \n", - "1062 reference \n", - "1063 reference \n", - "1064 altered \n", - "1065 reference \n", - "1066 reference \n", - "1067 altered \n", - "1068 reference \n", - "1069 reference \n", - "1070 reference \n", - "1071 reference \n", - "1072 reference \n", - "1073 altered \n", - "1074 reference \n", - "1075 reference \n", - "1076 altered \n", - "1077 reference \n", - "1078 reference \n", - "1079 altered \n", - "1080 altered \n", - "1081 altered \n", - "1082 altered \n", - "1083 reference \n", - "1084 altered \n", - "1085 altered \n", - "1086 altered \n", - "1087 reference \n", - "1088 epithelial cells \n", - "1089 epithelial cells \n", - "1090 stroma cells \n", - "1091 epithelial cells \n", - "1092 immune cells \n", - "1093 epithelial cells \n", - "1094 endothelial cells \n", - "1095 epithelial cells \n", - "1096 epithelial cells \n", - "1097 epithelial cells \n", - "1098 endothelial cells \n", - "1099 immune cells \n", - "1100 epithelial cells \n", - "1101 epithelial cells \n", - "1102 epithelial cells \n", - "1103 endothelial cells \n", - "1104 epithelial cells \n", - "1105 immune cells \n", - "1106 epithelial cells \n", - "1107 epithelial cells \n", - "1108 epithelial cells \n", - "1109 immune cells \n", - "1110 epithelial cells \n", - "1111 endothelial cells \n", - "1112 epithelial cells \n", - "1113 epithelial cells \n", - "1114 epithelial cells \n", - "1115 epithelial cells \n", - "1116 stroma cells \n", - "1117 epithelial cells \n", - "1118 immune cells \n", - "1119 immune cells \n", - "1120 epithelial cells \n", - "1121 epithelial cells \n", - "1122 stroma cells \n", - "1123 epithelial cells \n", - "1124 stroma cells \n", - "1125 epithelial cells \n", - "1126 endothelial cells \n", - "1127 stroma cells \n", - "1128 immune cells \n", - "1129 stroma cells \n", - "1130 endothelial cells \n", - "1131 immune cells \n", - "1132 endothelial cells \n", - "1133 immune cells \n", - "1134 endothelial cells \n", - "1135 epithelial cells \n", - "1136 stroma cells \n", - "1137 epithelial cells \n", - "1138 epithelial cells \n", - "1139 immune cells \n", - "1140 stroma cells \n", - "1141 epithelial cells \n", - "1142 stroma cells \n", - "1143 immune cells \n", - "1144 epithelial cells \n", - "1145 epithelial cells \n", - "1146 stroma cells \n", - "1147 epithelial cells \n", - "1148 epithelial cells \n", - "1149 epithelial cells \n", - "1150 epithelial cells \n", - "1151 endothelial cells \n", - "1152 stroma cells \n", - "1153 epithelial cells \n", - "1154 epithelial cells \n", - "1155 epithelial cells \n", - "1156 immune cells \n", - "1157 epithelial cells \n", - "1158 epithelial cells \n", - "1159 stroma cells \n", - "1160 epithelial cells \n", - "1161 immune cells \n", - "1162 epithelial cells \n", - "1163 epithelial cells \n", - "1164 stroma cells \n", - "1165 epithelial cells \n", - "1166 immune cells \n", - "1167 epithelial cells \n", - "1168 endothelial cells \n", - "1169 epithelial cells \n", - "1170 epithelial cells \n", - "1171 epithelial cells \n", - "1172 endothelial cells \n", - "1173 immune cells \n", - "1174 epithelial cells \n", - "1175 epithelial cells \n", - "1176 epithelial cells \n", - "1177 endothelial cells \n", - "1178 epithelial cells \n", - "1179 immune cells \n", - "1180 epithelial cells \n", - "1181 epithelial cells \n", - "1182 epithelial cells \n", - "1183 immune cells \n", - "1184 epithelial cells \n", - "1185 endothelial cells \n", - "1186 epithelial cells \n", - "1187 epithelial cells \n", - "1188 epithelial cells \n", - "1189 epithelial cells \n", - "1190 stroma cells \n", - "1191 epithelial cells \n", - "1192 immune cells \n", - "1193 immune cells \n", - "1194 epithelial cells \n", - "1195 epithelial cells \n", - "1196 stroma cells \n", - "1197 epithelial cells \n", - "1198 stroma cells \n", - "1199 epithelial cells \n", - "1200 endothelial cells \n", - "1201 stroma cells \n", - "1202 immune cells \n", - "1203 stroma cells \n", - "1204 endothelial cells \n", - "1205 immune cells \n", - "1206 endothelial cells \n", - "1207 immune cells \n", - "1208 endothelial cells \n", - "1209 epithelial cells \n", - "1210 stroma cells \n", - "1211 epithelial cells \n", - "1212 epithelial cells \n", - "1213 immune cells \n", - "1214 stroma cells \n", - "1215 epithelial cells \n", - "1216 stroma cells \n", - "1217 immune cells \n", - "1218 epithelial cells \n", - "1219 epithelial cells \n", - "1220 epithelial cells \n", - "1221 stroma cells \n", - "1222 epithelial cells \n", - "1223 epithelial cells \n", - "1224 epithelial cells \n", - "1225 epithelial cells \n", - "1226 endothelial cells \n", - "1227 stroma cells \n", - "1228 epithelial cells \n", - "1229 epithelial cells \n", - "1230 epithelial cells \n", - "1231 immune cells \n", - "1232 epithelial cells \n", - "1233 epithelial cells \n", - "1234 stroma cells \n", - "1235 epithelial cells \n", - "1236 immune cells \n", - "1237 epithelial cells \n", - "1238 epithelial cells \n", - "1239 stroma cells \n", - "1240 epithelial cells \n", - "1241 immune cells \n", - "1242 epithelial cells \n", - "1243 endothelial cells \n", - "1244 epithelial cells \n", - "1245 epithelial cells \n", - "1246 epithelial cells \n", - "1247 endothelial cells \n", - "1248 immune cells \n", - "1249 epithelial cells \n", - "1250 epithelial cells \n", - "1251 epithelial cells \n", - "1252 endothelial cells \n", - "1253 epithelial cells \n", - "1254 immune cells \n", - "1255 epithelial cells \n", - "1256 epithelial cells \n", - "1257 epithelial cells \n", - "1258 immune cells \n", - "1259 epithelial cells \n", - "1260 endothelial cells \n", - "1261 epithelial cells \n", - "1262 epithelial cells \n", - "1263 epithelial cells \n", - "1264 epithelial cells \n", - "1265 stroma cells \n", - "1266 epithelial cells \n", - "1267 immune cells \n", - "1268 immune cells \n", - "1269 epithelial cells \n", - "1270 epithelial cells \n", - "1271 stroma cells \n", - "1272 epithelial cells \n", - "1273 stroma cells \n", - "1274 epithelial cells \n", - "1275 endothelial cells \n", - "1276 stroma cells \n", - "1277 immune cells \n", - "1278 stroma cells \n", - "1279 endothelial cells \n", - "1280 immune cells \n", - "1281 endothelial cells \n", - "1282 immune cells \n", - "1283 endothelial cells \n", - "1284 stroma cells \n", - "1285 epithelial cells \n", - "1286 immune cells \n", - "1287 stroma cells \n", - "1288 epithelial cells \n", - "1289 stroma cells \n", - "1290 immune cells \n", - "1291 epithelial cells \n", - "1292 epithelial cells \n", - "1293 epithelial cells \n", - "1294 stroma cells \n", - "1295 epithelial cells \n", - "1296 epithelial cells \n", - "1297 epithelial cells \n", - "1298 epithelial cells \n", - "1299 endothelial cells \n", - "1300 stroma cells \n", - "1301 epithelial cells \n", - "1302 epithelial cells \n", - "1303 immune cells \n", - "1304 epithelial cells \n", - "1305 epithelial cells \n", - "1306 stroma cells \n", - "1307 epithelial cells \n", - "1308 immune cells \n", - "1309 epithelial cells \n", - "1310 stroma cells \n", - "1311 epithelial cells \n", - "1312 epithelial cells \n", - "1313 epithelial cells \n", - "1314 epithelial cells \n", - "1315 epithelial cells \n", - "1316 epithelial cells \n", - "1317 epithelial cells \n", - "1318 epithelial cells \n", - "1319 stroma cells \n", - "1320 epithelial cells \n", - "1321 epithelial cells \n", - "1322 epithelial cells \n", - "1323 epithelial cells \n", - "1324 stroma cells \n", - "1325 epithelial cells \n", - "1326 stroma cells \n", - "1327 epithelial cells \n", - "1328 immune cells \n", - "1329 epithelial cells \n", - "1330 endothelial cells \n", - "1331 epithelial cells \n", - "1332 epithelial cells \n", - "1333 epithelial cells \n", - "1334 epithelial cells \n", - "1335 epithelial cells \n", - "1336 epithelial cells \n", - "1337 stroma cells \n", - "1338 neural cells \n", - "1339 epithelial cells \n", - "1340 epithelial cells \n", - "1341 epithelial cell of proximal tubule \n", - "1342 epithelial cell of proximal tubule \n", - "1343 kidney interstitial fibroblast \n", - "1344 kidney loop of Henle thick ascending limb epit... \n", - "1345 leukocyte \n", - "1346 kidney collecting duct intercalated cell \n", - "1347 endothelial cell \n", - "1348 kidney loop of Henle thick ascending limb epit... \n", - "1349 kidney collecting duct intercalated cell \n", - "1350 kidney loop of Henle thick ascending limb epit... \n", - "1351 endothelial cell \n", - "1352 leukocyte \n", - "1353 epithelial cell of proximal tubule \n", - "1354 kidney collecting duct intercalated cell \n", - "1355 kidney loop of Henle thick ascending limb epit... \n", - "1356 endothelial cell \n", - "1357 kidney loop of Henle thin descending limb epit... \n", - "1358 leukocyte \n", - "1359 podocyte \n", - "1360 kidney loop of Henle thin ascending limb epith... \n", - "1361 kidney loop of Henle thin descending limb epit... \n", - "1362 leukocyte \n", - "1363 kidney collecting duct principal cell \n", - "1364 endothelial cell \n", - "1365 epithelial cell of proximal tubule \n", - "1366 epithelial cell of proximal tubule \n", - "1367 kidney loop of Henle thick ascending limb epit... \n", - "1368 kidney collecting duct principal cell \n", - "1369 kidney interstitial fibroblast \n", - "1370 kidney collecting duct principal cell \n", - "1371 leukocyte \n", - "1372 leukocyte \n", - "1373 kidney connecting tubule epithelial cell \n", - "1374 kidney distal convoluted tubule epithelial cell \n", - "1375 kidney interstitial fibroblast \n", - "1376 kidney loop of Henle thick ascending limb epit... \n", - "1377 renal interstitial pericyte \n", - "1378 kidney loop of Henle thin descending limb epit... \n", - "1379 endothelial cell \n", - "1380 renal interstitial pericyte \n", - "1381 leukocyte \n", - "1382 kidney interstitial fibroblast \n", - "1383 endothelial cell \n", - "1384 leukocyte \n", - "1385 endothelial cell \n", - "1386 leukocyte \n", - "1387 endothelial cell \n", - "1388 kidney distal convoluted tubule epithelial cell \n", - "1389 renal interstitial pericyte \n", - "1390 kidney collecting duct intercalated cell \n", - "1391 kidney connecting tubule epithelial cell \n", - "1392 leukocyte \n", - "1393 renal interstitial pericyte \n", - "1394 kidney loop of Henle thin ascending limb epith... \n", - "1395 renal interstitial pericyte \n", - "1396 leukocyte \n", - "1397 kidney collecting duct intercalated cell \n", - "1398 kidney connecting tubule epithelial cell \n", - "1399 kidney interstitial fibroblast \n", - "1400 kidney connecting tubule epithelial cell \n", - "1401 kidney collecting duct principal cell \n", - "1402 kidney collecting duct principal cell \n", - "1403 endothelial cell \n", - "1404 kidney interstitial fibroblast \n", - "1405 kidney collecting duct intercalated cell \n", - "1406 kidney distal convoluted tubule epithelial cell \n", - "1407 podocyte \n", - "1408 leukocyte \n", - "1409 kidney loop of Henle thin descending limb epit... \n", - "1410 kidney distal convoluted tubule epithelial cell \n", - "1411 kidney interstitial fibroblast \n", - "1412 leukocyte \n", - "1413 epithelial cell of proximal tubule \n", - "1414 epithelial cell of proximal tubule \n", - "1415 kidney interstitial fibroblast \n", - "1416 kidney loop of Henle thick ascending limb epit... \n", - "1417 leukocyte \n", - "1418 kidney collecting duct intercalated cell \n", - "1419 endothelial cell \n", - "1420 kidney loop of Henle thick ascending limb epit... \n", - "1421 kidney collecting duct intercalated cell \n", - "1422 kidney loop of Henle thick ascending limb epit... \n", - "1423 endothelial cell \n", - "1424 leukocyte \n", - "1425 epithelial cell of proximal tubule \n", - "1426 kidney collecting duct intercalated cell \n", - "1427 kidney loop of Henle thick ascending limb epit... \n", - "1428 endothelial cell \n", - "1429 kidney loop of Henle thin descending limb epit... \n", - "1430 leukocyte \n", - "1431 podocyte \n", - "1432 kidney loop of Henle thin ascending limb epith... \n", - "1433 kidney loop of Henle thin descending limb epit... \n", - "1434 leukocyte \n", - "1435 kidney collecting duct principal cell \n", - "1436 endothelial cell \n", - "1437 epithelial cell of proximal tubule \n", - "1438 epithelial cell of proximal tubule \n", - "1439 kidney loop of Henle thick ascending limb epit... \n", - "1440 kidney collecting duct principal cell \n", - "1441 kidney interstitial fibroblast \n", - "1442 kidney collecting duct principal cell \n", - "1443 leukocyte \n", - "1444 leukocyte \n", - "1445 kidney connecting tubule epithelial cell \n", - "1446 kidney distal convoluted tubule epithelial cell \n", - "1447 kidney interstitial fibroblast \n", - "1448 kidney loop of Henle thick ascending limb epit... \n", - "1449 renal interstitial pericyte \n", - "1450 kidney loop of Henle thin descending limb epit... \n", - "1451 endothelial cell \n", - "1452 renal interstitial pericyte \n", - "1453 leukocyte \n", - "1454 kidney interstitial fibroblast \n", - "1455 endothelial cell \n", - "1456 leukocyte \n", - "1457 endothelial cell \n", - "1458 leukocyte \n", - "1459 endothelial cell \n", - "1460 kidney distal convoluted tubule epithelial cell \n", - "1461 renal interstitial pericyte \n", - "1462 kidney collecting duct intercalated cell \n", - "1463 kidney connecting tubule epithelial cell \n", - "1464 leukocyte \n", - "1465 renal interstitial pericyte \n", - "1466 kidney loop of Henle thin ascending limb epith... \n", - "1467 renal interstitial pericyte \n", - "1468 leukocyte \n", - "1469 kidney loop of Henle thick ascending limb epit... \n", - "1470 kidney collecting duct intercalated cell \n", - "1471 kidney connecting tubule epithelial cell \n", - "1472 kidney interstitial fibroblast \n", - "1473 kidney connecting tubule epithelial cell \n", - "1474 kidney collecting duct principal cell \n", - "1475 kidney collecting duct principal cell \n", - "1476 endothelial cell \n", - "1477 kidney interstitial fibroblast \n", - "1478 kidney collecting duct intercalated cell \n", - "1479 kidney distal convoluted tubule epithelial cell \n", - "1480 podocyte \n", - "1481 leukocyte \n", - "1482 kidney loop of Henle thin descending limb epit... \n", - "1483 kidney distal convoluted tubule epithelial cell \n", - "1484 kidney interstitial fibroblast \n", - "1485 leukocyte \n", - "1486 epithelial cell of proximal tubule \n", - "1487 epithelial cell of proximal tubule \n", - "1488 kidney interstitial fibroblast \n", - "1489 kidney loop of Henle thick ascending limb epit... \n", - "1490 leukocyte \n", - "1491 kidney collecting duct intercalated cell \n", - "1492 endothelial cell \n", - "1493 kidney loop of Henle thick ascending limb epit... \n", - "1494 kidney collecting duct intercalated cell \n", - "1495 kidney loop of Henle thick ascending limb epit... \n", - "1496 endothelial cell \n", - "1497 leukocyte \n", - "1498 epithelial cell of proximal tubule \n", - "1499 kidney collecting duct intercalated cell \n", - "1500 kidney loop of Henle thick ascending limb epit... \n", - "1501 endothelial cell \n", - "1502 kidney loop of Henle thin descending limb epit... \n", - "1503 leukocyte \n", - "1504 podocyte \n", - "1505 kidney loop of Henle thin ascending limb epith... \n", - "1506 kidney loop of Henle thin descending limb epit... \n", - "1507 leukocyte \n", - "1508 kidney collecting duct principal cell \n", - "1509 endothelial cell \n", - "1510 epithelial cell of proximal tubule \n", - "1511 epithelial cell of proximal tubule \n", - "1512 kidney loop of Henle thick ascending limb epit... \n", - "1513 kidney collecting duct principal cell \n", - "1514 kidney interstitial fibroblast \n", - "1515 kidney collecting duct principal cell \n", - "1516 leukocyte \n", - "1517 leukocyte \n", - "1518 kidney connecting tubule epithelial cell \n", - "1519 kidney distal convoluted tubule epithelial cell \n", - "1520 kidney interstitial fibroblast \n", - "1521 kidney loop of Henle thick ascending limb epit... \n", - "1522 renal interstitial pericyte \n", - "1523 kidney loop of Henle thin descending limb epit... \n", - "1524 endothelial cell \n", - "1525 renal interstitial pericyte \n", - "1526 leukocyte \n", - "1527 kidney interstitial fibroblast \n", - "1528 endothelial cell \n", - "1529 leukocyte \n", - "1530 endothelial cell \n", - "1531 leukocyte \n", - "1532 endothelial cell \n", - "1533 renal interstitial pericyte \n", - "1534 kidney collecting duct intercalated cell \n", - "1535 leukocyte \n", - "1536 renal interstitial pericyte \n", - "1537 kidney loop of Henle thin ascending limb epith... \n", - "1538 renal interstitial pericyte \n", - "1539 leukocyte \n", - "1540 kidney loop of Henle thick ascending limb epit... \n", - "1541 kidney collecting duct intercalated cell \n", - "1542 kidney connecting tubule epithelial cell \n", - "1543 kidney interstitial fibroblast \n", - "1544 kidney connecting tubule epithelial cell \n", - "1545 kidney collecting duct principal cell \n", - "1546 kidney collecting duct principal cell \n", - "1547 endothelial cell \n", - "1548 kidney interstitial fibroblast \n", - "1549 kidney distal convoluted tubule epithelial cell \n", - "1550 podocyte \n", - "1551 leukocyte \n", - "1552 kidney loop of Henle thin descending limb epit... \n", - "1553 kidney distal convoluted tubule epithelial cell \n", - "1554 kidney interstitial fibroblast \n", - "1555 leukocyte \n", - "1556 kidney collecting duct intercalated cell \n", - "1557 kidney interstitial fibroblast " + "[420 rows x 5 columns]" ] }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ada = AnndataAnalyzer(\"test/data/human_kidney.h5ad\", \"pandasaurus_cxg/schema/schema.json\")\n", + "ada = AnndataAnalyzer(\"./blue_lake_kidney.h5ad\", \"pandasaurus_cxg/schema/schema.json\")\n", "ada.co_annotation_report()" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], - "source": [] + "source": [ + "In this case, we have many subcluster_of relationships. In many cases these define more granular cell type/state annotations than those recorded using a cell ontology term in the cell_type field, e.g.\n", + "\n", + "| field_name1\t| value1 |\tpredicate| field_name2\t| value2\n", + "| -- | -- | -- | -- | -- |\n", + "| Cycling Natural Killer Cell / Natural Killer T... |\tsubcluster_of |\tcell_type | leukocyte`|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visualising co-annotation and enrichment as a graph\n", + "\n", + "The subcluster_of relationships in a co-annotation define a hierarchy from more general set sets (epithelial cells, lymphocyte) to more granular ones (podocyte, T cell). These in turn nest under the cell type heirarchy" + ] } ], "metadata": { @@ -22173,7 +1912,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.9.17" } }, "nbformat": 4, From 1c3fb91983f47177f93b8dddfe0e69d47478dcc9 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 28 Jul 2023 12:07:46 +0100 Subject: [PATCH 14/27] Merged from main --- pandasaurus_cxg/anndata_analyzer.py | 162 ++++++++++++++++------------ 1 file changed, 93 insertions(+), 69 deletions(-) diff --git a/pandasaurus_cxg/anndata_analyzer.py b/pandasaurus_cxg/anndata_analyzer.py index 03cfe4d..d27c8c2 100644 --- a/pandasaurus_cxg/anndata_analyzer.py +++ b/pandasaurus_cxg/anndata_analyzer.py @@ -1,9 +1,11 @@ +import itertools import os from enum import Enum -from typing import List +from typing import List, Optional import pandas as pd +from pandasaurus_cxg.anndata_enricher import AnndataEnricher from pandasaurus_cxg.anndata_loader import AnndataLoader from pandasaurus_cxg.schema.schema_loader import read_json_file @@ -20,7 +22,7 @@ class AnndataAnalyzer: schema_path (str): The path to the schema file. Attributes: - _anndata_obs (pd.DataFrame): The observation data from the AnnData object. + _anndata (pd.DataFrame): The observation data from the AnnData object. _schema (dict): The schema data loaded from the schema file. """ @@ -34,17 +36,21 @@ def __init__(self, file_path: str, schema_path: str): schema_path (str): The path to the schema file. """ - self._anndata_obs = AnndataLoader.load_from_file(file_path).obs + self.file_path = file_path + self._anndata = AnndataLoader.load_from_file(file_path) self._schema = read_json_file(schema_path) - def co_annotation_report(self): + def co_annotation_report(self, disease: Optional[str] = None, enrich: bool = False): """ Generates a co-annotation report based on the provided schema. - Examples: - | subclass.l3, dPT, cluster_matches, subclass.full, Degenerative Proximal Tubule Epithelial Cell - | subclass.l3, aTAL1, subcluster_of, subclass.full, Adaptive / Maladaptive / Repairing Thick Ascending Limb Cell - | class, epithelial cells, cluster_matches, cell_type, kidney collecting duct intercalated cell + Args: + disease (Optional[str]): A valid disease CURIE used to filter the rows based on the + given disease. If provided, only the rows matching the specified disease will be + included in the filtering process. Defaults to None if no disease filtering is + desired. + enrich: Flag to either enable or disable enrichment in co_annotation report. + Defaults to False. Returns: pd.DataFrame: The co-annotation report. @@ -52,90 +58,108 @@ def co_annotation_report(self): """ free_text_cell_type = [key for key, value in self._schema.items() if value] temp_result = [] - for field_name_2 in free_text_cell_type: - for field_name_1 in free_text_cell_type: - if ( - field_name_1 != field_name_2 - and field_name_1 in self._anndata_obs.columns - and field_name_2 in self._anndata_obs.columns - ): - co_oc = ( - self._anndata_obs[[field_name_1, field_name_2]] - .drop_duplicates() - .reset_index(drop=True) - ) - field_name_2_dict = ( - co_oc.groupby(field_name_2)[field_name_1].apply(list).to_dict() - ) - field_name_1_dict = ( - co_oc.groupby(field_name_1)[field_name_2].apply(list).to_dict() - ) - co_oc["predicate"] = co_oc.apply( - self._assign_predicate, - args=( - field_name_1, - field_name_2, - field_name_1_dict, - field_name_2_dict, - debug_mode, - ), - axis=1, - ) - - temp_result.extend(co_oc.to_dict(orient="records")) + cell_type_combinations = list(itertools.combinations(free_text_cell_type, 2)) + for combination in cell_type_combinations: + field_name_1 = combination[1] + field_name_2 = combination[0] + if ( + field_name_1 in self._anndata.obs.columns + and field_name_2 in self._anndata.obs.columns + ): + co_oc = self._filter_data_and_remove_duplicates(field_name_1, field_name_2, disease) + + if enrich: + co_oc = self._enrich_co_annotation(co_oc, field_name_1, field_name_2) + + AnndataAnalyzer._assign_predicate_column(co_oc, field_name_1, field_name_2) + temp_result.extend(co_oc.to_dict(orient="records")) result = [ [item for sublist in [[k, v] for k, v in record.items()] for item in sublist] for record in temp_result ] - unique_result = self._remove_duplicates(result) + unique_result = AnndataAnalyzer._remove_duplicates(result) return pd.DataFrame( [inner_list[:2] + inner_list[5:6] + inner_list[2:4] for inner_list in unique_result], columns=["field_name1", "value1", "predicate", "field_name2", "value2"], ) + def enriched_co_annotation_report(self, disease: Optional[str] = None): + """ + Generates an enriched co-annotation report based on the provided schema. The enrichment + process will be performed by checking if any of the CL terms in the initial seed + (the set of CL terms used to initialize the Pandasaurus object) are also present in the + object column of the enrichment table. If a match is found, the co-annotation analysis + will be repeated, including everything that maps to this term, either directly or via + the enrichment table. + + Args: + disease (Optional[str]): A valid disease CURIE used to filter the rows based on the + given disease. If provided, only the rows matching the specified disease will be + included in the filtering process. Defaults to None if no disease filtering is + desired. + + Returns: + pd.DataFrame: The co-annotation report. + + """ + return self.co_annotation_report(self, disease, True) + + def _enrich_co_annotation(self, co_oc, field_name_1, field_name_2): + enricher = AnndataEnricher(self._anndata) + simple = enricher.simple_enrichment() + df = simple[simple["o"].isin(enricher.get_seed_list())][["s_label", "o_label"]].rename( + columns={"s_label": field_name_1, "o_label": field_name_2} + ) + co_oc = pd.concat([co_oc, df], axis=0).reset_index(drop=True) + return co_oc + + def _filter_data_and_remove_duplicates(self, field_name_1, field_name_2, disease): + # Filter the data based on the disease condition + co_oc = ( + self._anndata.obs[ + (self._anndata.obs["disease_ontology_term_id"].str.lower() == disease.lower()) + ][[field_name_1, field_name_2]] + if disease + else self._anndata.obs[[field_name_1, field_name_2]] + ) + # Drop duplicates + co_oc = co_oc.drop_duplicates().reset_index(drop=True) + return co_oc + @staticmethod def _remove_duplicates(data: List[List[str]]): # TODO do a clean up if it is necessary unique_data = [] - unique_set = set() for sublist in data: if Predicate.SUPERCLUSTER_OF.value in sublist: continue unique_data.append(sublist) - # sorted_sublist = tuple(sorted(set(sublist))) - # if sorted_sublist not in unique_set: - # unique_data.append(sublist) - # unique_set.add(sorted_sublist) return unique_data @staticmethod - def _assign_predicate( - row: dict, - field_name_1: str, - field_name_2: str, - field_name_1_dict: dict, - field_name_2_dict: dict, - debug: bool, - ) -> str: - """ - Assigns a predicate based on the values of two fields in a row and dictionaries of field values. - - Used to determine if a cluster matches with the other cluster, or if it is its subclass, or if they overlap with each other. - - Args: - row (dict): The row containing the fields. - field_name_1 (str): The name of the first field. - field_name_2 (str): The name of the second field. - field_name_1_dict (dict): A dictionary mapping field_name_1 values to associated values. - field_name_2_dict (dict): A dictionary mapping field_name_2 values to associated values. - debug (bool): Whether to print debugging information. - - Returns: - str: The assigned predicate. + def _assign_predicate_column(co_oc, field_name_1, field_name_2): + # Group by field_name_2 and field_name_1 to create dictionaries + field_name_2_dict = co_oc.groupby(field_name_2)[field_name_1].apply(list).to_dict() + field_name_1_dict = co_oc.groupby(field_name_1)[field_name_2].apply(list).to_dict() + # Assign the "predicate" column using self._assign_predicate method + co_oc["predicate"] = co_oc.apply( + AnndataAnalyzer._assign_predicate, + args=( + field_name_1, + field_name_2, + field_name_1_dict, + field_name_2_dict, + debug_mode, + ), + axis=1, + ) - """ + @staticmethod + def _assign_predicate( + row, field_name_1, field_name_2, field_name_1_dict, field_name_2_dict, debug + ): if debug: print("Debugging row:", row) print("Value of field_name_1:", row[field_name_1]) From 4684594adda239339110c0550386b584c813d7dc Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 28 Jul 2023 13:38:27 +0100 Subject: [PATCH 15/27] Updated anndata_analyzer.py --- pandasaurus_cxg/anndata_analyzer.py | 34 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/pandasaurus_cxg/anndata_analyzer.py b/pandasaurus_cxg/anndata_analyzer.py index d27c8c2..2a920c7 100644 --- a/pandasaurus_cxg/anndata_analyzer.py +++ b/pandasaurus_cxg/anndata_analyzer.py @@ -58,21 +58,20 @@ def co_annotation_report(self, disease: Optional[str] = None, enrich: bool = Fal """ free_text_cell_type = [key for key, value in self._schema.items() if value] temp_result = [] - cell_type_combinations = list(itertools.combinations(free_text_cell_type, 2)) - for combination in cell_type_combinations: - field_name_1 = combination[1] - field_name_2 = combination[0] - if ( - field_name_1 in self._anndata.obs.columns - and field_name_2 in self._anndata.obs.columns - ): - co_oc = self._filter_data_and_remove_duplicates(field_name_1, field_name_2, disease) - - if enrich: - co_oc = self._enrich_co_annotation(co_oc, field_name_1, field_name_2) - - AnndataAnalyzer._assign_predicate_column(co_oc, field_name_1, field_name_2) - temp_result.extend(co_oc.to_dict(orient="records")) + for field_name_2 in free_text_cell_type: + for field_name_1 in free_text_cell_type: + if ( + field_name_1 != field_name_2 + and field_name_1 in self._anndata.obs.columns + and field_name_2 in self._anndata.obs.columns + ): + co_oc = self._filter_data_and_drop_duplicates(field_name_1, field_name_2, disease) + + if enrich: + co_oc = self._enrich_co_annotation(co_oc, field_name_1, field_name_2) + + AnndataAnalyzer._assign_predicate_column(co_oc, field_name_1, field_name_2) + temp_result.extend(co_oc.to_dict(orient="records")) result = [ [item for sublist in [[k, v] for k, v in record.items()] for item in sublist] @@ -114,7 +113,7 @@ def _enrich_co_annotation(self, co_oc, field_name_1, field_name_2): co_oc = pd.concat([co_oc, df], axis=0).reset_index(drop=True) return co_oc - def _filter_data_and_remove_duplicates(self, field_name_1, field_name_2, disease): + def _filter_data_and_drop_duplicates(self, field_name_1, field_name_2, disease): # Filter the data based on the disease condition co_oc = ( self._anndata.obs[ @@ -129,7 +128,8 @@ def _filter_data_and_remove_duplicates(self, field_name_1, field_name_2, disease @staticmethod def _remove_duplicates(data: List[List[str]]): - # TODO do a clean up if it is necessary + # TODO do a clean up/rename if it is necessary + # Currently used only to clean up supercluster_of relations unique_data = [] for sublist in data: From 45312caaa1e3db9f6a475611d8115771caa1d025 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 28 Jul 2023 13:38:58 +0100 Subject: [PATCH 16/27] Removed state and state.l2 from free-text annotations --- pandasaurus_cxg/schema/schema.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandasaurus_cxg/schema/schema.json b/pandasaurus_cxg/schema/schema.json index 76e7e96..a038cc9 100644 --- a/pandasaurus_cxg/schema/schema.json +++ b/pandasaurus_cxg/schema/schema.json @@ -31,8 +31,8 @@ "subclass.l3": true, "subclass.l2": true, "subclass.l1": true, - "state.l2": true, - "state": true, + "state.l2": false, + "state": false, "class": true, "structure": false, "disease_ontology_term_id": false, From 54da01d7149c0bc85c6567b8c63cbca648682cf9 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 28 Jul 2023 13:39:17 +0100 Subject: [PATCH 17/27] Refactored visualize_rdf_graph method --- .../graph_generator/graph_generator.py | 42 +++++++++++++------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 9656086..8ac47f5 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -169,14 +169,19 @@ def save_rdf_graph(self, file_name: str = "mygraph", _format: str = "xml"): raise InvalidGraphFormat(RDFFormat, valid_formats) def visualize_rdf_graph(self, start_node: List[str], file_path: str): - graph = Graph().parse(file_path, format="ttl") if file_path else self.graph - for node in start_node: - if not URIRef(node) in graph.subjects() or URIRef(node) in graph.objects(): - raise ValueError(f"None of the nodes in the list {node} exist in the RDF graph.") - + # TODO visualize all graph, with parametric annotation properties to better visualize the nodes. + # TODO apply redundancy striping to owl directly + stack = [] visited = set() - stack = [URIRef(node) for node in start_node] subgraph = Graph() + graph = Graph().parse(file_path, format="ttl") if file_path else self.graph + if start_node: + for node in start_node: + if not URIRef(node) in graph.subjects(): + raise ValueError( + f"None of the nodes in the list {node} exist in the RDF graph." + ) + stack = [URIRef(node) for node in start_node] while stack: node = stack.pop() @@ -184,9 +189,8 @@ def visualize_rdf_graph(self, start_node: List[str], file_path: str): visited.add(node) for subject, predicate, obj in graph.triples((node, None, None)): if predicate != RDF.type: - subgraph.add( - (subject, predicate, obj) - ) # Add all outgoing edges of the current node + # Add all outgoing edges of the current node # and not isinstance(obj, Literal) + subgraph.add((subject, predicate, obj)) for s, p, next_node in graph.triples((node, None, None)): # stack.append(next_node) if not isinstance(next_node, BNode): @@ -202,11 +206,25 @@ def visualize_rdf_graph(self, start_node: List[str], file_path: str): nx_graph = nx.DiGraph() for subject, predicate, obj in subgraph: - if isinstance(obj, URIRef): + if isinstance(obj, URIRef) and predicate != RDF.type: edge_data = { "label": "is_a" if predicate == RDF.type else str(predicate).split("/")[-1] } - nx_graph.add_edge(str(subject).split("/")[-1], str(obj).split("/")[-1], **edge_data) + nx_graph.add_edge( + str(subject).split("/")[-1], + str(obj).split("/")[-1], + **edge_data, + ) + # str([o for s, p, o in graph.triples((subject, None, None)) if isinstance(o, Literal)][-1]) + # nx_graph.add_edge( + # str(subgraph.value(subject=subject, predicate=self.ns["cell_type"])) + # if subgraph.value(subject=subject, predicate=self.ns["cell_type"]) + # else str(subject).split("/")[-1], + # subgraph.value(subject=obj, predicate=self.ns["cell_type"]) + # if subgraph.value(subject=obj, predicate=self.ns["cell_type"]) + # else str(obj).split("/")[-1], + # **edge_data, + # ) # Apply transitive reduction to remove redundancy transitive_reduction_graph = nx.transitive_reduction(nx_graph) @@ -224,7 +242,7 @@ def visualize_rdf_graph(self, start_node: List[str], file_path: str): transitive_reduction_graph, pos, with_labels=True, - node_size=1500, + node_size=1000, node_color="skyblue", font_size=8, font_weight="bold", From 786c68191e007f5fd23dd2de25b6e1af6775e65c Mon Sep 17 00:00:00 2001 From: Ismail Ugur Bayindir Date: Tue, 1 Aug 2023 08:40:03 +0100 Subject: [PATCH 18/27] Added transitive_reduction method (#29) * Merged from main * Updated anndata_analyzer.py * Removed state and state.l2 from free-text annotations * Refactored visualize_rdf_graph method * Refactored save_rdf_graph, visualize_rdf_graph method and added transitive_reduction method * Format changes in co_annotation_report * Added state and state.l2 to free-text annotations --- .gitignore | 3 +- pandasaurus_cxg/anndata_analyzer.py | 150 ++++++++++-------- .../graph_generator/graph_generator.py | 133 ++++++++++++---- 3 files changed, 188 insertions(+), 98 deletions(-) diff --git a/.gitignore b/.gitignore index 760d150..51c4f3a 100644 --- a/.gitignore +++ b/.gitignore @@ -133,8 +133,7 @@ dmypy.json *.ttl *.nt -# pycharm/mac1 +# pycharm/mac .DS_Store .idea/ .DS_Store -.DS_Store \ No newline at end of file diff --git a/pandasaurus_cxg/anndata_analyzer.py b/pandasaurus_cxg/anndata_analyzer.py index 03cfe4d..e419ae2 100644 --- a/pandasaurus_cxg/anndata_analyzer.py +++ b/pandasaurus_cxg/anndata_analyzer.py @@ -1,9 +1,11 @@ +import itertools import os from enum import Enum -from typing import List +from typing import List, Optional import pandas as pd +from pandasaurus_cxg.anndata_enricher import AnndataEnricher from pandasaurus_cxg.anndata_loader import AnndataLoader from pandasaurus_cxg.schema.schema_loader import read_json_file @@ -20,7 +22,7 @@ class AnndataAnalyzer: schema_path (str): The path to the schema file. Attributes: - _anndata_obs (pd.DataFrame): The observation data from the AnnData object. + _anndata (pd.DataFrame): The observation data from the AnnData object. _schema (dict): The schema data loaded from the schema file. """ @@ -34,17 +36,21 @@ def __init__(self, file_path: str, schema_path: str): schema_path (str): The path to the schema file. """ - self._anndata_obs = AnndataLoader.load_from_file(file_path).obs + self.file_path = file_path + self._anndata = AnndataLoader.load_from_file(file_path) self._schema = read_json_file(schema_path) - def co_annotation_report(self): + def co_annotation_report(self, disease: Optional[str] = None, enrich: bool = False): """ Generates a co-annotation report based on the provided schema. - Examples: - | subclass.l3, dPT, cluster_matches, subclass.full, Degenerative Proximal Tubule Epithelial Cell - | subclass.l3, aTAL1, subcluster_of, subclass.full, Adaptive / Maladaptive / Repairing Thick Ascending Limb Cell - | class, epithelial cells, cluster_matches, cell_type, kidney collecting duct intercalated cell + Args: + disease (Optional[str]): A valid disease CURIE used to filter the rows based on the + given disease. If provided, only the rows matching the specified disease will be + included in the filtering process. Defaults to None if no disease filtering is + desired. + enrich: Flag to either enable or disable enrichment in co_annotation report. + Defaults to False. Returns: pd.DataFrame: The co-annotation report. @@ -56,86 +62,106 @@ def co_annotation_report(self): for field_name_1 in free_text_cell_type: if ( field_name_1 != field_name_2 - and field_name_1 in self._anndata_obs.columns - and field_name_2 in self._anndata_obs.columns + and field_name_1 in self._anndata.obs.columns + and field_name_2 in self._anndata.obs.columns ): - co_oc = ( - self._anndata_obs[[field_name_1, field_name_2]] - .drop_duplicates() - .reset_index(drop=True) - ) - field_name_2_dict = ( - co_oc.groupby(field_name_2)[field_name_1].apply(list).to_dict() - ) - field_name_1_dict = ( - co_oc.groupby(field_name_1)[field_name_2].apply(list).to_dict() - ) - co_oc["predicate"] = co_oc.apply( - self._assign_predicate, - args=( - field_name_1, - field_name_2, - field_name_1_dict, - field_name_2_dict, - debug_mode, - ), - axis=1, + co_oc = self._filter_data_and_drop_duplicates( + field_name_1, field_name_2, disease ) + if enrich: + co_oc = self._enrich_co_annotation(co_oc, field_name_1, field_name_2) + + AnndataAnalyzer._assign_predicate_column(co_oc, field_name_1, field_name_2) temp_result.extend(co_oc.to_dict(orient="records")) result = [ [item for sublist in [[k, v] for k, v in record.items()] for item in sublist] for record in temp_result ] - unique_result = self._remove_duplicates(result) + unique_result = AnndataAnalyzer._remove_duplicates(result) return pd.DataFrame( [inner_list[:2] + inner_list[5:6] + inner_list[2:4] for inner_list in unique_result], columns=["field_name1", "value1", "predicate", "field_name2", "value2"], ) + def enriched_co_annotation_report(self, disease: Optional[str] = None): + """ + Generates an enriched co-annotation report based on the provided schema. The enrichment + process will be performed by checking if any of the CL terms in the initial seed + (the set of CL terms used to initialize the Pandasaurus object) are also present in the + object column of the enrichment table. If a match is found, the co-annotation analysis + will be repeated, including everything that maps to this term, either directly or via + the enrichment table. + + Args: + disease (Optional[str]): A valid disease CURIE used to filter the rows based on the + given disease. If provided, only the rows matching the specified disease will be + included in the filtering process. Defaults to None if no disease filtering is + desired. + + Returns: + pd.DataFrame: The co-annotation report. + + """ + return self.co_annotation_report(self, disease, True) + + def _enrich_co_annotation(self, co_oc, field_name_1, field_name_2): + enricher = AnndataEnricher(self._anndata) + simple = enricher.simple_enrichment() + df = simple[simple["o"].isin(enricher.get_seed_list())][["s_label", "o_label"]].rename( + columns={"s_label": field_name_1, "o_label": field_name_2} + ) + co_oc = pd.concat([co_oc, df], axis=0).reset_index(drop=True) + return co_oc + + def _filter_data_and_drop_duplicates(self, field_name_1, field_name_2, disease): + # Filter the data based on the disease condition + co_oc = ( + self._anndata.obs[ + (self._anndata.obs["disease_ontology_term_id"].str.lower() == disease.lower()) + ][[field_name_1, field_name_2]] + if disease + else self._anndata.obs[[field_name_1, field_name_2]] + ) + # Drop duplicates + co_oc = co_oc.drop_duplicates().reset_index(drop=True) + return co_oc + @staticmethod def _remove_duplicates(data: List[List[str]]): - # TODO do a clean up if it is necessary + # TODO do a clean up/rename if it is necessary + # Currently used only to clean up supercluster_of relations unique_data = [] - unique_set = set() for sublist in data: if Predicate.SUPERCLUSTER_OF.value in sublist: continue unique_data.append(sublist) - # sorted_sublist = tuple(sorted(set(sublist))) - # if sorted_sublist not in unique_set: - # unique_data.append(sublist) - # unique_set.add(sorted_sublist) return unique_data @staticmethod - def _assign_predicate( - row: dict, - field_name_1: str, - field_name_2: str, - field_name_1_dict: dict, - field_name_2_dict: dict, - debug: bool, - ) -> str: - """ - Assigns a predicate based on the values of two fields in a row and dictionaries of field values. - - Used to determine if a cluster matches with the other cluster, or if it is its subclass, or if they overlap with each other. - - Args: - row (dict): The row containing the fields. - field_name_1 (str): The name of the first field. - field_name_2 (str): The name of the second field. - field_name_1_dict (dict): A dictionary mapping field_name_1 values to associated values. - field_name_2_dict (dict): A dictionary mapping field_name_2 values to associated values. - debug (bool): Whether to print debugging information. - - Returns: - str: The assigned predicate. + def _assign_predicate_column(co_oc, field_name_1, field_name_2): + # Group by field_name_2 and field_name_1 to create dictionaries + field_name_2_dict = co_oc.groupby(field_name_2)[field_name_1].apply(list).to_dict() + field_name_1_dict = co_oc.groupby(field_name_1)[field_name_2].apply(list).to_dict() + # Assign the "predicate" column using self._assign_predicate method + co_oc["predicate"] = co_oc.apply( + AnndataAnalyzer._assign_predicate, + args=( + field_name_1, + field_name_2, + field_name_1_dict, + field_name_2_dict, + debug_mode, + ), + axis=1, + ) - """ + @staticmethod + def _assign_predicate( + row, field_name_1, field_name_2, field_name_1_dict, field_name_2_dict, debug + ): if debug: print("Debugging row:", row) print("Value of field_name_1:", row[field_name_1]) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 9656086..8743f36 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -142,19 +142,28 @@ def enrich_rdf_graph(self): for o, _, _ in self.graph.triples((None, RDFS.label, Literal(row["o_label"]))): self.graph.add((s, RDFS.subClassOf, o)) - def save_rdf_graph(self, file_name: str = "mygraph", _format: str = "xml"): + def save_rdf_graph( + self, + graph: Optional[Graph], + file_name: Optional[str] = "mygraph", + _format: Optional[str] = "xml", + ): """ Serializes and saves the RDF graph to a file. Args: - file_name (str, optional): The name of the output file without the extension. + graph: An optional RDF graph that will be serialized. + If provided, this graph will be used for serialization. + If not provided, the graph inside the GraphGenerator instance will be used. + file_name: The name of the output file without the extension. Defaults to "mygraph". - _format (str, optional): The format of the RDF serialization. Defaults to "xml". + _format: The format of the RDF serialization. Defaults to "xml". Raises: InvalidGraphFormat: If the provided _format is not valid. """ + graph = graph if graph else self.graph format_extension = { RDFFormat.RDF_XML.value: "owl", RDFFormat.TURTLE.value: "ttl", @@ -163,50 +172,65 @@ def save_rdf_graph(self, file_name: str = "mygraph", _format: str = "xml"): if _format in format_extension: file_extension = format_extension[_format] - self.graph.serialize(f"{file_name}.{file_extension}", format=_format) + graph.serialize(f"{file_name}.{file_extension}", format=_format) else: valid_formats = [valid_format.value for valid_format in RDFFormat] raise InvalidGraphFormat(RDFFormat, valid_formats) - def visualize_rdf_graph(self, start_node: List[str], file_path: str): + def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: str): + # TODO visualize all graph, with parametric annotation properties to better visualize the nodes. + # TODO apply redundancy striping to owl directly graph = Graph().parse(file_path, format="ttl") if file_path else self.graph - for node in start_node: - if not URIRef(node) in graph.subjects() or URIRef(node) in graph.objects(): - raise ValueError(f"None of the nodes in the list {node} exist in the RDF graph.") - + if predicate and not graph.query(f"ASK {{ ?s {self.ns[predicate].n3()} ?o }}"): + raise ValueError(f"The {self.ns[predicate]} relation does not exist in the graph") + if start_node: + for node in start_node: + if not URIRef(node) in graph.subjects(): + raise ValueError( + f"None of the nodes in the list {node} exist in the RDF graph." + ) visited = set() - stack = [URIRef(node) for node in start_node] subgraph = Graph() + stack = [URIRef(node) for node in start_node] if start_node else None while stack: node = stack.pop() if node not in visited: visited.add(node) - for subject, predicate, obj in graph.triples((node, None, None)): - if predicate != RDF.type: - subgraph.add( - (subject, predicate, obj) - ) # Add all outgoing edges of the current node - for s, p, next_node in graph.triples((node, None, None)): - # stack.append(next_node) - if not isinstance(next_node, BNode): - stack.append(next_node) - else: - subgraph.add( - ( - node, - next(graph.objects(next_node, OWL.onProperty)), - next(graph.objects(next_node, OWL.someValuesFrom)), - ) - ) + for s, p, o in graph.triples((node, self.ns[predicate] if predicate else None, None)): + # Add all outgoing edges of the current node + subgraph.add((s, p, o)) + for s, p, next_node in graph.triples( + (node, self.ns[predicate] if predicate else None, None) + ): + if not isinstance(next_node, BNode): + stack.append(next_node) + # else: + # subgraph.add( + # ( + # node, + # next(graph.objects(next_node, OWL.onProperty)), + # next(graph.objects(next_node, OWL.someValuesFrom)), + # ) + # ) + # TODO not sure if we need this else or not + + if not start_node: + for s, p, o in graph.triples((None, self.ns[predicate] if predicate else None, None)): + # Add all outgoing edges of the current node + subgraph.add((s, p, o)) nx_graph = nx.DiGraph() for subject, predicate, obj in subgraph: - if isinstance(obj, URIRef): - edge_data = { - "label": "is_a" if predicate == RDF.type else str(predicate).split("/")[-1] - } - nx_graph.add_edge(str(subject).split("/")[-1], str(obj).split("/")[-1], **edge_data) + if isinstance(obj, URIRef) and predicate != RDF.type: + edge_data = {"label": str(predicate).split("/")[-1]} + nx_graph.add_edge( + str(subject).split("/")[-1], + str(obj).split("/")[-1], + **edge_data, + ) + elif predicate != RDF.type: + nx_graph.add_node(str(subject).split("/")[-1], label=str(obj)) # Apply transitive reduction to remove redundancy transitive_reduction_graph = nx.transitive_reduction(nx_graph) @@ -219,12 +243,14 @@ def visualize_rdf_graph(self, start_node: List[str], file_path: str): pos = nx.drawing.nx_agraph.graphviz_layout(transitive_reduction_graph, prog="dot") # Plot the graph as a hierarchical tree - plt.figure(figsize=(10, 8)) + node_labels = nx.get_node_attributes(transitive_reduction_graph, "label") + plt.figure(figsize=(10, 10)) nx.draw( transitive_reduction_graph, pos, with_labels=True, - node_size=1500, + labels=node_labels, + node_size=1000, node_color="skyblue", font_size=8, font_weight="bold", @@ -241,6 +267,45 @@ def visualize_rdf_graph(self, start_node: List[str], file_path: str): ) plt.show() + def transitive_reduction(self, predicate: str, file_path: str, _format: str = "xml"): + graph = Graph().parse(file_path, format="ttl") if file_path else self.graph + if predicate and not graph.query(f"ASK {{ ?s {self.ns[predicate].n3()} ?o }}"): + raise ValueError(f"The {self.ns[predicate]} relation does not exist in the graph") + + subgraph = Graph() + for s, p, o in graph.triples((None, self.ns[predicate] if predicate else None, None)): + # Add all outgoing edges of the current node + subgraph.add((s, p, o)) + + nx_graph = nx.DiGraph() + for subject, _predicate, obj in subgraph: + if isinstance(obj, URIRef) and _predicate != RDF.type: + edge_data = { + "label": "is_a" if _predicate == RDF.type else str(predicate).split("/")[-1] + } + nx_graph.add_edge( + str(subject).split("/")[-1], + str(obj).split("/")[-1], + **edge_data, + ) + + # Apply transitive reduction to remove redundancy + transitive_reduction_graph = nx.transitive_reduction(nx_graph) + transitive_reduction_graph.add_edges_from( + (u, v, nx_graph.edges[u, v]) for u, v in transitive_reduction_graph.edges + ) + + # Remove redundant triples using nx graph + edge_diff = list(set(nx_graph.edges) - set(transitive_reduction_graph.edges)) + + for edge in edge_diff: + if graph.query( + f"ASK {{ {self.ns[edge[0]].n3()} {self.ns[predicate].n3()} {self.ns[edge[1]].n3()} }}" + ): + graph.remove((self.ns[edge[0]], self.ns[predicate], self.ns[edge[1]])) + + self.save_rdf_graph(graph, f"{file_path.split('.')[0]}_non_redundant", _format) + class RDFFormat(Enum): RDF_XML = "xml" From 625b2375744e12eef358a564ac1d3afeae3e07a6 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Wed, 2 Aug 2023 09:46:24 +0100 Subject: [PATCH 19/27] Refactored cell_type_dict initialization --- .../graph_generator/graph_generator.py | 79 +++++++++++-------- 1 file changed, 44 insertions(+), 35 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index d1c06f2..e83ef1b 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -40,13 +40,16 @@ def __init__( raise MissingEnrichmentProcess(enrichment_methods) else: self.enriched_df = enricher.enriched_df - self.cell_type_dict = ( - enricher.get_anndata() - .obs[["cell_type_ontology_term_id", "cell_type"]] + self.cell_type_dict = { + **enricher.enriched_df[["s", "s_label"]] .drop_duplicates() - .set_index("cell_type_ontology_term_id")["cell_type"] - .to_dict() - ) + .set_index("s")["s_label"] + .to_dict(), + **enricher.enriched_df[["o", "o_label"]] + .drop_duplicates() + .set_index("o")["o_label"] + .to_dict(), + } self.ns = Namespace("http://example.org/") self.graph = Graph() @@ -143,7 +146,7 @@ def enrich_rdf_graph(self): def save_rdf_graph( self, - graph: Optional[Graph], + graph: Optional[Graph] = None, file_name: Optional[str] = "mygraph", _format: Optional[str] = "xml", ): @@ -178,7 +181,7 @@ def save_rdf_graph( def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: str): # TODO visualize all graph, with parametric annotation properties to better visualize the nodes. - # TODO apply redundancy striping to owl directly + # TODO better handle format parameter graph = Graph().parse(file_path, format="ttl") if file_path else self.graph if predicate and not graph.query(f"ASK {{ ?s {self.ns[predicate].n3()} ?o }}"): raise ValueError(f"The {self.ns[predicate]} relation does not exist in the graph") @@ -204,19 +207,21 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: ): if not isinstance(next_node, BNode): stack.append(next_node) - # else: - # subgraph.add( - # ( - # node, - # next(graph.objects(next_node, OWL.onProperty)), - # next(graph.objects(next_node, OWL.someValuesFrom)), - # ) - # ) + else: + _p = next(graph.objects(next_node, OWL.onProperty)) + _o = next(graph.objects(next_node, OWL.someValuesFrom)) + subgraph.add( + ( + node, + _p, + _o, + ) + ) + stack.append(_o) # TODO not sure if we need this else or not if not start_node: for s, p, o in graph.triples((None, self.ns[predicate] if predicate else None, None)): - # Add all outgoing edges of the current node subgraph.add((s, p, o)) nx_graph = nx.DiGraph() @@ -228,6 +233,9 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: str(obj).split("/")[-1], **edge_data, ) + elif predicate != RDF.type: + nx_graph.add_node(str(subject).split("/")[-1], label=str(obj)) + # TODO not sure if we need this else or not, related with previous else # Apply transitive reduction to remove redundancy transitive_reduction_graph = nx.transitive_reduction(nx_graph) @@ -235,10 +243,8 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: transitive_reduction_graph.add_edges_from( (u, v, nx_graph.edges[u, v]) for u, v in transitive_reduction_graph.edges ) - # Layout the graph as a hierarchical tree pos = nx.drawing.nx_agraph.graphviz_layout(transitive_reduction_graph, prog="dot") - # Plot the graph as a hierarchical tree node_labels = nx.get_node_attributes(transitive_reduction_graph, "label") plt.figure(figsize=(10, 10)) @@ -265,24 +271,31 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: plt.show() def transitive_reduction(self, predicate: str, file_path: str, _format: str = "xml"): + # TODO better handle format parameter graph = Graph().parse(file_path, format="ttl") if file_path else self.graph - if predicate and not graph.query(f"ASK {{ ?s {self.ns[predicate].n3()} ?o }}"): + # SPARQL query to list all object properties in the RDF graph + query = """ + SELECT DISTINCT ?property + WHERE { + ?subject ?property ?object . + FILTER (isIRI(?object)) + } + """ + predicate_list = [str(r["property"]) for r in graph.query(query)] + if predicate and not graph.query(f"ASK {{ ?s <{predicate}> ?o }}"): raise ValueError(f"The {self.ns[predicate]} relation does not exist in the graph") subgraph = Graph() - for s, p, o in graph.triples((None, self.ns[predicate] if predicate else None, None)): - # Add all outgoing edges of the current node + for s, p, o in graph.triples((None, URIRef(predicate) if predicate else None, None)): subgraph.add((s, p, o)) nx_graph = nx.DiGraph() - for subject, _predicate, obj in subgraph: - if isinstance(obj, URIRef) and _predicate != RDF.type: - edge_data = { - "label": "is_a" if _predicate == RDF.type else str(predicate).split("/")[-1] - } + for s, p, o in subgraph: + if isinstance(o, URIRef) and p != RDF.type: + edge_data = {"label": str(predicate).split("/")[-1]} nx_graph.add_edge( - str(subject).split("/")[-1], - str(obj).split("/")[-1], + s, + o, **edge_data, ) @@ -291,15 +304,11 @@ def transitive_reduction(self, predicate: str, file_path: str, _format: str = "x transitive_reduction_graph.add_edges_from( (u, v, nx_graph.edges[u, v]) for u, v in transitive_reduction_graph.edges ) - # Remove redundant triples using nx graph edge_diff = list(set(nx_graph.edges) - set(transitive_reduction_graph.edges)) - for edge in edge_diff: - if graph.query( - f"ASK {{ {self.ns[edge[0]].n3()} {self.ns[predicate].n3()} {self.ns[edge[1]].n3()} }}" - ): - graph.remove((self.ns[edge[0]], self.ns[predicate], self.ns[edge[1]])) + if graph.query(f"ASK {{ <{edge[0]}> <{predicate}> <{edge[1]}> }}"): + graph.remove((edge[0], URIRef(predicate), edge[1])) self.save_rdf_graph(graph, f"{file_path.split('.')[0]}_non_redundant", _format) From 0ad1b4e872e4f376e6e48bec13ca4e7b73a38f39 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Wed, 2 Aug 2023 10:52:44 +0100 Subject: [PATCH 20/27] Revert "Refactored cell_type_dict initialization" This reverts commit 625b2375744e12eef358a564ac1d3afeae3e07a6. --- .../graph_generator/graph_generator.py | 79 ++++++++----------- 1 file changed, 35 insertions(+), 44 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index e83ef1b..d1c06f2 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -40,16 +40,13 @@ def __init__( raise MissingEnrichmentProcess(enrichment_methods) else: self.enriched_df = enricher.enriched_df - self.cell_type_dict = { - **enricher.enriched_df[["s", "s_label"]] + self.cell_type_dict = ( + enricher.get_anndata() + .obs[["cell_type_ontology_term_id", "cell_type"]] .drop_duplicates() - .set_index("s")["s_label"] - .to_dict(), - **enricher.enriched_df[["o", "o_label"]] - .drop_duplicates() - .set_index("o")["o_label"] - .to_dict(), - } + .set_index("cell_type_ontology_term_id")["cell_type"] + .to_dict() + ) self.ns = Namespace("http://example.org/") self.graph = Graph() @@ -146,7 +143,7 @@ def enrich_rdf_graph(self): def save_rdf_graph( self, - graph: Optional[Graph] = None, + graph: Optional[Graph], file_name: Optional[str] = "mygraph", _format: Optional[str] = "xml", ): @@ -181,7 +178,7 @@ def save_rdf_graph( def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: str): # TODO visualize all graph, with parametric annotation properties to better visualize the nodes. - # TODO better handle format parameter + # TODO apply redundancy striping to owl directly graph = Graph().parse(file_path, format="ttl") if file_path else self.graph if predicate and not graph.query(f"ASK {{ ?s {self.ns[predicate].n3()} ?o }}"): raise ValueError(f"The {self.ns[predicate]} relation does not exist in the graph") @@ -207,21 +204,19 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: ): if not isinstance(next_node, BNode): stack.append(next_node) - else: - _p = next(graph.objects(next_node, OWL.onProperty)) - _o = next(graph.objects(next_node, OWL.someValuesFrom)) - subgraph.add( - ( - node, - _p, - _o, - ) - ) - stack.append(_o) + # else: + # subgraph.add( + # ( + # node, + # next(graph.objects(next_node, OWL.onProperty)), + # next(graph.objects(next_node, OWL.someValuesFrom)), + # ) + # ) # TODO not sure if we need this else or not if not start_node: for s, p, o in graph.triples((None, self.ns[predicate] if predicate else None, None)): + # Add all outgoing edges of the current node subgraph.add((s, p, o)) nx_graph = nx.DiGraph() @@ -233,9 +228,6 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: str(obj).split("/")[-1], **edge_data, ) - elif predicate != RDF.type: - nx_graph.add_node(str(subject).split("/")[-1], label=str(obj)) - # TODO not sure if we need this else or not, related with previous else # Apply transitive reduction to remove redundancy transitive_reduction_graph = nx.transitive_reduction(nx_graph) @@ -243,8 +235,10 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: transitive_reduction_graph.add_edges_from( (u, v, nx_graph.edges[u, v]) for u, v in transitive_reduction_graph.edges ) + # Layout the graph as a hierarchical tree pos = nx.drawing.nx_agraph.graphviz_layout(transitive_reduction_graph, prog="dot") + # Plot the graph as a hierarchical tree node_labels = nx.get_node_attributes(transitive_reduction_graph, "label") plt.figure(figsize=(10, 10)) @@ -271,31 +265,24 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: plt.show() def transitive_reduction(self, predicate: str, file_path: str, _format: str = "xml"): - # TODO better handle format parameter graph = Graph().parse(file_path, format="ttl") if file_path else self.graph - # SPARQL query to list all object properties in the RDF graph - query = """ - SELECT DISTINCT ?property - WHERE { - ?subject ?property ?object . - FILTER (isIRI(?object)) - } - """ - predicate_list = [str(r["property"]) for r in graph.query(query)] - if predicate and not graph.query(f"ASK {{ ?s <{predicate}> ?o }}"): + if predicate and not graph.query(f"ASK {{ ?s {self.ns[predicate].n3()} ?o }}"): raise ValueError(f"The {self.ns[predicate]} relation does not exist in the graph") subgraph = Graph() - for s, p, o in graph.triples((None, URIRef(predicate) if predicate else None, None)): + for s, p, o in graph.triples((None, self.ns[predicate] if predicate else None, None)): + # Add all outgoing edges of the current node subgraph.add((s, p, o)) nx_graph = nx.DiGraph() - for s, p, o in subgraph: - if isinstance(o, URIRef) and p != RDF.type: - edge_data = {"label": str(predicate).split("/")[-1]} + for subject, _predicate, obj in subgraph: + if isinstance(obj, URIRef) and _predicate != RDF.type: + edge_data = { + "label": "is_a" if _predicate == RDF.type else str(predicate).split("/")[-1] + } nx_graph.add_edge( - s, - o, + str(subject).split("/")[-1], + str(obj).split("/")[-1], **edge_data, ) @@ -304,11 +291,15 @@ def transitive_reduction(self, predicate: str, file_path: str, _format: str = "x transitive_reduction_graph.add_edges_from( (u, v, nx_graph.edges[u, v]) for u, v in transitive_reduction_graph.edges ) + # Remove redundant triples using nx graph edge_diff = list(set(nx_graph.edges) - set(transitive_reduction_graph.edges)) + for edge in edge_diff: - if graph.query(f"ASK {{ <{edge[0]}> <{predicate}> <{edge[1]}> }}"): - graph.remove((edge[0], URIRef(predicate), edge[1])) + if graph.query( + f"ASK {{ {self.ns[edge[0]].n3()} {self.ns[predicate].n3()} {self.ns[edge[1]].n3()} }}" + ): + graph.remove((self.ns[edge[0]], self.ns[predicate], self.ns[edge[1]])) self.save_rdf_graph(graph, f"{file_path.split('.')[0]}_non_redundant", _format) From a38e12d54aba68967b83619dc31f60dbecfe0710 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Wed, 2 Aug 2023 10:56:47 +0100 Subject: [PATCH 21/27] Refactored cell_type_dict initialization --- pandasaurus_cxg/graph_generator/graph_generator.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index d1c06f2..e63a40b 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -41,10 +41,18 @@ def __init__( else: self.enriched_df = enricher.enriched_df self.cell_type_dict = ( - enricher.get_anndata() - .obs[["cell_type_ontology_term_id", "cell_type"]] + pd.concat( + [ + self.enriched_df[["s", "s_label"]], + self.enriched_df[["o", "o_label"]].rename( + columns={"o": "s", "o_label": "s_label"} + ), + ], + axis=0, + ignore_index=True, + ) .drop_duplicates() - .set_index("cell_type_ontology_term_id")["cell_type"] + .set_index("s")["s_label"] .to_dict() ) self.ns = Namespace("http://example.org/") From 227f1375469b8b37d3470f63c5ebcc0a42f9b24c Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 4 Aug 2023 12:08:46 +0100 Subject: [PATCH 22/27] Added oaklib --- poetry.lock | 932 ++++++++++++++----------------------------------- pyproject.toml | 1 + 2 files changed, 270 insertions(+), 663 deletions(-) diff --git a/poetry.lock b/poetry.lock index f6aa8da..73d086c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -17,13 +17,13 @@ parse = ["beautifulsoup4 (>=4.10,<5.0)", "requests (>=2.12,<3)"] [[package]] name = "anndata" -version = "0.9.1" +version = "0.9.2" description = "Annotated data." optional = false python-versions = ">=3.8" files = [ - {file = "anndata-0.9.1-py3-none-any.whl", hash = "sha256:6666a39f9d6c4645a70115f38c17ccc2e2ffd9c0d08a1636c395253d73de26f1"}, - {file = "anndata-0.9.1.tar.gz", hash = "sha256:1f28f2c427e67b0b99bdd2b281717c92a12660dfd23e0694939b6e733f0eb2c4"}, + {file = "anndata-0.9.2-py3-none-any.whl", hash = "sha256:badab44bf0b4d598ae49403ee634a6ffc8896d9aa21db52f0f6af98d6fe1fceb"}, + {file = "anndata-0.9.2.tar.gz", hash = "sha256:e5b8383d09723af674cae7ad0c2ef53eb1f8c73949b7f4c182a6e30f42196327"}, ] [package.dependencies] @@ -31,13 +31,13 @@ h5py = ">=3" natsort = "*" numpy = ">=1.16.5" packaging = ">=20" -pandas = ">=1.1.1" +pandas = ">=1.1.1,<2.0.1 || >2.0.1" scipy = ">1.4" [package.extras] -dev = ["black (>=20.8b1)", "docutils", "setuptools_scm"] -doc = ["IPython", "awkward (>=2.0.7)", "myst_parser", "nbsphinx", "scanpydoc (>=0.7.7)", "sphinx (>=4.4)", "sphinx-autodoc-typehints (>=1.11.0)", "sphinx-rtd-theme (>=1.1.1)", "sphinx_issues", "sphinxext.opengraph", "zarr"] -test = ["awkward (>=2.0.6)", "boltons", "dask[array]", "joblib", "loompy (>=3.0.5)", "matplotlib", "openpyxl", "pytest (>=6.0)", "pytest-cov (>=2.10)", "pytest_memray", "scanpy", "scikit-learn", "zarr"] +dev = ["pytest-xdist", "setuptools_scm"] +doc = ["IPython", "awkward (>=2.0.7)", "myst_parser", "nbsphinx", "scanpydoc[theme] (>=0.9)", "sphinx (>=4.4)", "sphinx-autodoc-typehints (>=1.11.0)", "sphinx-rtd-theme (>=1.1.1)", "sphinx_issues", "sphinxext.opengraph", "zarr"] +test = ["awkward (>=2.3)", "boltons", "dask[array]", "joblib", "loompy (>=3.0.5)", "matplotlib", "openpyxl", "pytest (>=6.0)", "pytest-cov (>=2.10)", "pytest_memray", "scanpy", "scikit-learn", "zarr"] [[package]] name = "antlr4-python3-runtime" @@ -60,20 +60,6 @@ files = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] -[[package]] -name = "arrow" -version = "1.2.3" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" - [[package]] name = "attrs" version = "23.1.0" @@ -123,13 +109,13 @@ lxml = ["lxml"] [[package]] name = "bioregistry" -version = "0.9.81" +version = "0.9.93" description = "Integrated registry of biological databases and nomenclatures" optional = false python-versions = ">=3.8" files = [ - {file = "bioregistry-0.9.81-py3-none-any.whl", hash = "sha256:7b531cd02545e6937425c0ad6aa2b2f367c33868f2fee009cd3cc7c568592620"}, - {file = "bioregistry-0.9.81.tar.gz", hash = "sha256:8528fb043217e0b077f22c41b0a81ae38da4dde34f0f42a15b66c13885a55a70"}, + {file = "bioregistry-0.9.93-py3-none-any.whl", hash = "sha256:0aa8824990dc22866b7f4da8d7cc1ba2209f33e2bd4f14dc36a5bd9fa542a03e"}, + {file = "bioregistry-0.9.93.tar.gz", hash = "sha256:0b9fce1e9bc11802797769a3fc5d381c22ad8ce40fc61426918dd72e6cdaaab4"}, ] [package.dependencies] @@ -224,37 +210,24 @@ ujson = ["ujson (>=5.4.0,<6.0.0)"] [[package]] name = "certifi" -version = "2023.5.7" +version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, - {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, -] - -[[package]] -name = "cfgraph" -version = "0.2.1" -description = "rdflib collections flattening graph" -optional = false -python-versions = "*" -files = [ - {file = "CFGraph-0.2.1.tar.gz", hash = "sha256:b57fe7044a10b8ff65aa3a8a8ddc7d4cd77bf511b42e57289cd52cbc29f8fe74"}, + {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, + {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, ] -[package.dependencies] -rdflib = ">=0.4.2" - [[package]] name = "chardet" -version = "5.1.0" +version = "5.2.0" description = "Universal encoding detector for Python 3" optional = false python-versions = ">=3.7" files = [ - {file = "chardet-5.1.0-py3-none-any.whl", hash = "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9"}, - {file = "chardet-5.1.0.tar.gz", hash = "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5"}, + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, ] [[package]] @@ -394,13 +367,13 @@ files = [ [[package]] name = "curies" -version = "0.5.6" +version = "0.5.7" description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." optional = false python-versions = ">=3.8" files = [ - {file = "curies-0.5.6-py3-none-any.whl", hash = "sha256:27eee34218bf645fdfb5c457bacfba0274146277bac600d9b9a83d2e5e01abcd"}, - {file = "curies-0.5.6.tar.gz", hash = "sha256:fd9e72ea9b167911057726bd537c9956ed96d88ce71aecf59f9a47c6ca484ffe"}, + {file = "curies-0.5.7-py3-none-any.whl", hash = "sha256:74fc743e2c41c3bcd2ecb1178cce72236018f245e970c88faf452b89694b475a"}, + {file = "curies-0.5.7.tar.gz", hash = "sha256:eb984c51dcd04187fec88074a43070ae6f96467887fd502fa5547377722c9a4a"}, ] [package.dependencies] @@ -470,17 +443,6 @@ files = [ {file = "EditorConfig-0.12.3.tar.gz", hash = "sha256:57f8ce78afcba15c8b18d46b5170848c88d56fd38f05c2ec60dbbfcb8996e89e"}, ] -[[package]] -name = "et-xmlfile" -version = "1.1.0" -description = "An implementation of lxml.xmlfile for the standard library" -optional = false -python-versions = ">=3.6" -files = [ - {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, - {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, -] - [[package]] name = "eutils" version = "0.6.0" @@ -562,19 +524,19 @@ files = [ [[package]] name = "flake8" -version = "6.0.0" +version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" files = [ - {file = "flake8-6.0.0-py2.py3-none-any.whl", hash = "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7"}, - {file = "flake8-6.0.0.tar.gz", hash = "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"}, + {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, + {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, ] [package.dependencies] mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.10.0,<2.11.0" -pyflakes = ">=3.0.0,<3.1.0" +pycodestyle = ">=2.11.0,<2.12.0" +pyflakes = ">=3.1.0,<3.2.0" [[package]] name = "flake8-black" @@ -613,17 +575,6 @@ isort = ">=5.0.0,<6" [package.extras] test = ["pytest"] -[[package]] -name = "fqdn" -version = "1.5.1" -description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -optional = false -python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -files = [ - {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, - {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, -] - [[package]] name = "funowl" version = "0.1.12" @@ -659,22 +610,6 @@ python-dateutil = ">=2.8.1" [package.extras] dev = ["flake8", "markdown", "twine", "wheel"] -[[package]] -name = "graphviz" -version = "0.20.1" -description = "Simple Python interface for Graphviz" -optional = false -python-versions = ">=3.7" -files = [ - {file = "graphviz-0.20.1-py3-none-any.whl", hash = "sha256:587c58a223b51611c0cf461132da386edd896a029524ca61a1462b880bf97977"}, - {file = "graphviz-0.20.1.zip", hash = "sha256:8c58f14adaa3b947daf26c19bc1e98c4e0702cdc31cf99153e6f06904d492bf8"}, -] - -[package.extras] -dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] -docs = ["sphinx (>=5)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] -test = ["coverage", "mock (>=4)", "pytest (>=7)", "pytest-cov", "pytest-mock (>=3)"] - [[package]] name = "greenlet" version = "2.0.1" @@ -805,89 +740,89 @@ files = [ [[package]] name = "ijson" -version = "3.2.2" +version = "3.2.3" description = "Iterative JSON parser with standard Python iterator interfaces" optional = false python-versions = "*" files = [ - {file = "ijson-3.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ac48d9b11782ed6198efedae29761a1f4fb0a87485c7a7fdecf790825629c1c8"}, - {file = "ijson-3.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:afb95a065eb3179a4e0765e9c48e2ffb5a43aba583ceae3891d52e75ee94f01c"}, - {file = "ijson-3.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:34126c5c8027116d94a6725ba0bbd12727e4d5a0c5592f5ba636bd141fc7ed70"}, - {file = "ijson-3.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:861d15df0783e8a96311b6bcbd45b1a738bf938fd2240eeec4e84a2def0dd16a"}, - {file = "ijson-3.2.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5356b7776951756a7a7e310f12cf525c516d60b7f834c946844ce2dfef58a0a"}, - {file = "ijson-3.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60289cadada7e3d4499730e6340d493ef9ca7de31fae9e5381809f99bada38f5"}, - {file = "ijson-3.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:77ca22acd49f1e6cf9e1747a82cfec2a919f00c93c882218e4773aa7f9121dff"}, - {file = "ijson-3.2.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f677ce65733e385c049ef90d527c4d7312120e0f68fd9bf0d33021c374398576"}, - {file = "ijson-3.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:faabf7789769ac73b8be3ca7baf76e9fce3901bfeeebc9682edb2a5f0314b9d3"}, - {file = "ijson-3.2.2-cp310-cp310-win32.whl", hash = "sha256:27d2383190cbe0560fe91a99e7c35aa8e46c41283fc6fcb8d00a08d19cfc3ff0"}, - {file = "ijson-3.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:737384969a1e94c508be4109fda4bb060d81aa2f21d52cdfd32568ace98bec5d"}, - {file = "ijson-3.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0199456b6b3d830d8850c99327da5fad293ead515e656768941263e8c588ff28"}, - {file = "ijson-3.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:580c6635d3cf3c591b43e6c70e70b945bb947d23b1651cf7e8c0bb770b25852f"}, - {file = "ijson-3.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e51cbf1c3659ae88ebeae597a7e8a4f5b92be9678a235dd5317ff76b3b3017e5"}, - {file = "ijson-3.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edbc3fdfcba8c68437d9799e2ebe36f338e2149b546fc6b0de7dbb4067980fca"}, - {file = "ijson-3.2.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e62b879d85d3000541997244bbaa45eccbaf50e4bbde8239ba2011fec9ce1f9c"}, - {file = "ijson-3.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f3c95f8694ccd018159d51e25dd87f8021880ef49a52a5a91ea946d8e18d35e"}, - {file = "ijson-3.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:97b7ee99be6f564b4bab7317a060469d5a18bcfa0ae85f9be3db1c2146694977"}, - {file = "ijson-3.2.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0cf5911658aa102a6c726bca58a72a08b910cc97e4168ae3a9b308b826f95194"}, - {file = "ijson-3.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b75592e9196294eb4e19cde4d4f39dcdc3eefddcdfbc96ae7ec8843d0817e802"}, - {file = "ijson-3.2.2-cp311-cp311-win32.whl", hash = "sha256:d9c3919a2f937b9771d6e4d2e4dfd5ab9596c9cc63ba06471ad612525e13eef2"}, - {file = "ijson-3.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:ba97de4442c031181581f16695308528380fd0ba904adc7ed1799b077fc61a15"}, - {file = "ijson-3.2.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3f1d3979951288000534b258461ce5d9388078c306d9c12af04153bb6a5f36f3"}, - {file = "ijson-3.2.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eec9d145d6ea6bd24ca147c07a49f80a9feadbe3d0b665d6144f2f94d6bf06f"}, - {file = "ijson-3.2.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3d8b55e6bc5e1e079a834f5bbfc30b0cc49444e1e9a33f1e4bede933dfecdabc"}, - {file = "ijson-3.2.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13957abec999a5961cd046125e667c33c79feb8e876efea6f2f86b188c3172f2"}, - {file = "ijson-3.2.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:7b93a76ac6f07c1f32323cde2ab90758d2dd229f3cf193c09616de211be25bb3"}, - {file = "ijson-3.2.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:07151b4d83763a5e3ee8f61c1dcd350f6a955c60200cd1d8f9989049667fa3c4"}, - {file = "ijson-3.2.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:759397feea371ac757033884896a92b881fbba284a93751681c2d2397aa82634"}, - {file = "ijson-3.2.2-cp36-cp36m-win32.whl", hash = "sha256:af0ff99cbdb0fb2d176d3fba1035a957bb52e1f7c3b579d06159f78e7520801d"}, - {file = "ijson-3.2.2-cp36-cp36m-win_amd64.whl", hash = "sha256:53092b6408a1671b2ed10a153b277bd718d76fed311a34643792a488dea6a6eb"}, - {file = "ijson-3.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dd591fb5d8e86c4e79be5a48d4489af064f10de679fe4697842c4812ff678628"}, - {file = "ijson-3.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b65ea9b9932d9baa716188914c8b40d677f4e23bd94a45f42da45d064cb69677"}, - {file = "ijson-3.2.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d809f8ba3295c2d91bdc4f4a522c93973481a6d09232481e5b056fe88294bf0"}, - {file = "ijson-3.2.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a3972531b04e86725f5c0e9b55a91024278235b40d1a80fee53edc5e0b73634"}, - {file = "ijson-3.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:938ef367eef58287b65b721e7f769346f8e5bcc6726330dcb11ffd131ef633f8"}, - {file = "ijson-3.2.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:68bc6e4d0bdb1afcdbc7747ea75859f784942d82d359d1b2d5a88d18a7ac0cca"}, - {file = "ijson-3.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4faca5c72ab53462f2f688ac9cfc5e31974bb46a539bca78d0830e5b28635b63"}, - {file = "ijson-3.2.2-cp37-cp37m-win32.whl", hash = "sha256:e5e103494cb05fc814c00eda9e5e32f6a0ddc0a85fd9763df41548946bd04c0f"}, - {file = "ijson-3.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:a5ff3714342262a748d21f55ebff350247c2ad64c506f9361cd2204d5fe390d7"}, - {file = "ijson-3.2.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8febaa3d81d0c62ba16ae10bd112edfa2e2b24a481a9952ba56770b6f1947d4a"}, - {file = "ijson-3.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:360c234f2759103fc024ae6e257f92689e0d48d96346dbcacbbbe81fbad7712e"}, - {file = "ijson-3.2.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e96631f4dd97a1f9ff9bb8c816a7794a202753d34048ecb9d5a4b0bf7a55c5e3"}, - {file = "ijson-3.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3700d5d9d196ce4b9da40a09f49e05e75d64f45765dbebe5cb4af74ec6dc039b"}, - {file = "ijson-3.2.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72007e353e00292a8b9d7a2558b1360d4351fae806fddc31832964228ce20698"}, - {file = "ijson-3.2.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f03c1b1285743e6b688d2927105d1e6c5e6837832db88c9d57550219e757ae8"}, - {file = "ijson-3.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ab56d4f8e40ebb4004ffcddeeab982900dabfa7fef4b58a6654da3ca678d339a"}, - {file = "ijson-3.2.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:dd4f9a69c0aef16f088804beb2d2c7e9e430b388f628de9116f2874440ffb45d"}, - {file = "ijson-3.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ed0de6b9a3082b28ecc5e5ae72dac8a5378ef1b50cf11f21d65a5d5343c0327d"}, - {file = "ijson-3.2.2-cp38-cp38-win32.whl", hash = "sha256:88b3547a702a5c5038dd1b99ebf2116af6c40c9dba246d51662e8c9f739e25f7"}, - {file = "ijson-3.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:1c3643092a7895a7ffc21b6188d79de4ed0f4f4052eb278c6d7e20387f7d7074"}, - {file = "ijson-3.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40cbd9d14ff6fd4d6dd047cbec31e0c25466c91489378753c9c5feb78bfd23ba"}, - {file = "ijson-3.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2a47e44dd758304e88b679eed6d322a1ad6feffb124d74d9f59071003243c9c9"}, - {file = "ijson-3.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:54df86de05de3a1cf1269a1cd161468df542765720b5717d0740048fc0d57363"}, - {file = "ijson-3.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac7c78f99003e340b0d4c2465ecaf75505686c7fd4abbb21187ad009823ecd33"}, - {file = "ijson-3.2.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c0c7ad1df5ce587815dbfa2db09e110ebe43ada287736a1bf00e783e9d6bcc14"}, - {file = "ijson-3.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08debb0373ff86dd912b3d8fd4e40b759fc2d474191754beb72ea1044edb8947"}, - {file = "ijson-3.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:68aecc259ec213e2af9ce9472e7cc7f8158420229c8dcf0338528bf4261dbaf9"}, - {file = "ijson-3.2.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8d4cf867c3fe88981bac3094e0842047811e5bf3894abb6d8b3408a25cd8a177"}, - {file = "ijson-3.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a86c05d08f6f122e60dc391859144bd61d2d9be880d257f61bb267a4b2556b0d"}, - {file = "ijson-3.2.2-cp39-cp39-win32.whl", hash = "sha256:f1dbb2f38a816066669875ef0ac5f65389e9678ee922301e05d411404b443dc5"}, - {file = "ijson-3.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:4f206866b90ff79702b82aee5910e52a6a1a2a8d91333ad3454d17cde996eea2"}, - {file = "ijson-3.2.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b21ad922095a6bdc3d284680f601367de8ccafdde1c6f1515ac1004499b58939"}, - {file = "ijson-3.2.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f6debf5f06d628ae43a680d6ecd0e26d2c3c54b0b1e1c3a103a7085545e5dd1"}, - {file = "ijson-3.2.2-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d2a4fafcddb0dc7a716df7e68fa4bb8b226d8cf54af27c2e614ca2249989950"}, - {file = "ijson-3.2.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3575ccf1119ed5d373fa7de882978e8e6172ffe16bae9dbb4ca708caf45bcee0"}, - {file = "ijson-3.2.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:48e0925dea7a4357cd824ef71834f1e444fd9d9536b076a304e4e3219c0133d5"}, - {file = "ijson-3.2.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a5001813b8d6558bda9af6bb24a3fae99377d92eb6b41ddd1ec4df548683d604"}, - {file = "ijson-3.2.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95a16530f07fd576a70cc3482f9935d1b5f7207e87cf62facfa19b9d027977c4"}, - {file = "ijson-3.2.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a981d22b8f89be2db50def8a9e92d87c3b86f4e36be5d93130962654f5baa3f"}, - {file = "ijson-3.2.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1d59dfc5cb2f0c9ba756b0a63070e8e3f015318a56fb396f3046f9df0b48042"}, - {file = "ijson-3.2.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:bfa3d2fa57225d90af42c436a23c1829c6b8c40ce105534266f81a98755d6fb2"}, - {file = "ijson-3.2.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8eddcf9a7d08e404231d8457b856ba9b62aa0b4cdcf2bf64b3bac2e8eca73743"}, - {file = "ijson-3.2.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fee77bbdf86d3c64219479a06f95bd737bce376c2ab04df36c8c386505ada678"}, - {file = "ijson-3.2.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:822f2fe7a3c1e2ff62b2578159a7b4bf752db308eb907276a528dd6b919a232e"}, - {file = "ijson-3.2.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:163fe391bfb7a024063d7020b0afc0db615d5bf112e92acc87d93b627c53c7b1"}, - {file = "ijson-3.2.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0aa0e0bbd205ee8ad4f64443f002cc23f668492c96d19d3181d1904fc9a46eb6"}, - {file = "ijson-3.2.2.tar.gz", hash = "sha256:b9883c8716001d7a5c8185905208e40a77eef9b2a73dbce4d189ceb092aa93bd"}, + {file = "ijson-3.2.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0a4ae076bf97b0430e4e16c9cb635a6b773904aec45ed8dcbc9b17211b8569ba"}, + {file = "ijson-3.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cfced0a6ec85916eb8c8e22415b7267ae118eaff2a860c42d2cc1261711d0d31"}, + {file = "ijson-3.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0b9d1141cfd1e6d6643aa0b4876730d0d28371815ce846d2e4e84a2d4f471cf3"}, + {file = "ijson-3.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e0a27db6454edd6013d40a956d008361aac5bff375a9c04ab11fc8c214250b5"}, + {file = "ijson-3.2.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0d526ccb335c3c13063c273637d8611f32970603dfb182177b232d01f14c23"}, + {file = "ijson-3.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:545a30b3659df2a3481593d30d60491d1594bc8005f99600e1bba647bb44cbb5"}, + {file = "ijson-3.2.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9680e37a10fedb3eab24a4a7e749d8a73f26f1a4c901430e7aa81b5da15f7307"}, + {file = "ijson-3.2.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2a80c0bb1053055d1599e44dc1396f713e8b3407000e6390add72d49633ff3bb"}, + {file = "ijson-3.2.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f05ed49f434ce396ddcf99e9fd98245328e99f991283850c309f5e3182211a79"}, + {file = "ijson-3.2.3-cp310-cp310-win32.whl", hash = "sha256:b4eb2304573c9fdf448d3fa4a4fdcb727b93002b5c5c56c14a5ffbbc39f64ae4"}, + {file = "ijson-3.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:923131f5153c70936e8bd2dd9dcfcff43c67a3d1c789e9c96724747423c173eb"}, + {file = "ijson-3.2.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:904f77dd3d87736ff668884fe5197a184748eb0c3e302ded61706501d0327465"}, + {file = "ijson-3.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0974444c1f416e19de1e9f567a4560890095e71e81623c509feff642114c1e53"}, + {file = "ijson-3.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c1a4b8eb69b6d7b4e94170aa991efad75ba156b05f0de2a6cd84f991def12ff9"}, + {file = "ijson-3.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d052417fd7ce2221114f8d3b58f05a83c1a2b6b99cafe0b86ac9ed5e2fc889df"}, + {file = "ijson-3.2.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b8064a85ec1b0beda7dd028e887f7112670d574db606f68006c72dd0bb0e0e2"}, + {file = "ijson-3.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaac293853f1342a8d2a45ac1f723c860f700860e7743fb97f7b76356df883a8"}, + {file = "ijson-3.2.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6c32c18a934c1dc8917455b0ce478fd7a26c50c364bd52c5a4fb0fc6bb516af7"}, + {file = "ijson-3.2.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:713a919e0220ac44dab12b5fed74f9130f3480e55e90f9d80f58de129ea24f83"}, + {file = "ijson-3.2.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a3a6a2fbbe7550ffe52d151cf76065e6b89cfb3e9d0463e49a7e322a25d0426"}, + {file = "ijson-3.2.3-cp311-cp311-win32.whl", hash = "sha256:6a4db2f7fb9acfb855c9ae1aae602e4648dd1f88804a0d5cfb78c3639bcf156c"}, + {file = "ijson-3.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:ccd6be56335cbb845f3d3021b1766299c056c70c4c9165fb2fbe2d62258bae3f"}, + {file = "ijson-3.2.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:eeb286639649fb6bed37997a5e30eefcacddac79476d24128348ec890b2a0ccb"}, + {file = "ijson-3.2.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:396338a655fb9af4ac59dd09c189885b51fa0eefc84d35408662031023c110d1"}, + {file = "ijson-3.2.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e0243d166d11a2a47c17c7e885debf3b19ed136be2af1f5d1c34212850236ac"}, + {file = "ijson-3.2.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85afdb3f3a5d0011584d4fa8e6dccc5936be51c27e84cd2882fe904ca3bd04c5"}, + {file = "ijson-3.2.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:4fc35d569eff3afa76bfecf533f818ecb9390105be257f3f83c03204661ace70"}, + {file = "ijson-3.2.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:455d7d3b7a6aacfb8ab1ebcaf697eedf5be66e044eac32508fccdc633d995f0e"}, + {file = "ijson-3.2.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:c63f3d57dbbac56cead05b12b81e8e1e259f14ce7f233a8cbe7fa0996733b628"}, + {file = "ijson-3.2.3-cp36-cp36m-win32.whl", hash = "sha256:a4d7fe3629de3ecb088bff6dfe25f77be3e8261ed53d5e244717e266f8544305"}, + {file = "ijson-3.2.3-cp36-cp36m-win_amd64.whl", hash = "sha256:96190d59f015b5a2af388a98446e411f58ecc6a93934e036daa75f75d02386a0"}, + {file = "ijson-3.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:35194e0b8a2bda12b4096e2e792efa5d4801a0abb950c48ade351d479cd22ba5"}, + {file = "ijson-3.2.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1053fb5f0b010ee76ca515e6af36b50d26c1728ad46be12f1f147a835341083"}, + {file = "ijson-3.2.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:211124cff9d9d139dd0dfced356f1472860352c055d2481459038b8205d7d742"}, + {file = "ijson-3.2.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:92dc4d48e9f6a271292d6079e9fcdce33c83d1acf11e6e12696fb05c5889fe74"}, + {file = "ijson-3.2.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3dcc33ee56f92a77f48776014ddb47af67c33dda361e84371153c4f1ed4434e1"}, + {file = "ijson-3.2.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:98c6799925a5d1988da4cd68879b8eeab52c6e029acc45e03abb7921a4715c4b"}, + {file = "ijson-3.2.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4252e48c95cd8ceefc2caade310559ab61c37d82dfa045928ed05328eb5b5f65"}, + {file = "ijson-3.2.3-cp37-cp37m-win32.whl", hash = "sha256:644f4f03349ff2731fd515afd1c91b9e439e90c9f8c28292251834154edbffca"}, + {file = "ijson-3.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:ba33c764afa9ecef62801ba7ac0319268a7526f50f7601370d9f8f04e77fc02b"}, + {file = "ijson-3.2.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:4b2ec8c2a3f1742cbd5f36b65e192028e541b5fd8c7fd97c1fc0ca6c427c704a"}, + {file = "ijson-3.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7dc357da4b4ebd8903e77dbcc3ce0555ee29ebe0747c3c7f56adda423df8ec89"}, + {file = "ijson-3.2.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bcc51c84bb220ac330122468fe526a7777faa6464e3b04c15b476761beea424f"}, + {file = "ijson-3.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8d54b624629f9903005c58d9321a036c72f5c212701bbb93d1a520ecd15e370"}, + {file = "ijson-3.2.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6ea7c7e3ec44742e867c72fd750c6a1e35b112f88a917615332c4476e718d40"}, + {file = "ijson-3.2.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:916acdc5e504f8b66c3e287ada5d4b39a3275fc1f2013c4b05d1ab9933671a6c"}, + {file = "ijson-3.2.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81815b4184b85ce124bfc4c446d5f5e5e643fc119771c5916f035220ada29974"}, + {file = "ijson-3.2.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b49fd5fe1cd9c1c8caf6c59f82b08117dd6bea2ec45b641594e25948f48f4169"}, + {file = "ijson-3.2.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:86b3c91fdcb8ffb30556c9669930f02b7642de58ca2987845b04f0d7fe46d9a8"}, + {file = "ijson-3.2.3-cp38-cp38-win32.whl", hash = "sha256:a729b0c8fb935481afe3cf7e0dadd0da3a69cc7f145dbab8502e2f1e01d85a7c"}, + {file = "ijson-3.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:d34e049992d8a46922f96483e96b32ac4c9cffd01a5c33a928e70a283710cd58"}, + {file = "ijson-3.2.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9c2a12dcdb6fa28f333bf10b3a0f80ec70bc45280d8435be7e19696fab2bc706"}, + {file = "ijson-3.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1844c5b57da21466f255a0aeddf89049e730d7f3dfc4d750f0e65c36e6a61a7c"}, + {file = "ijson-3.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2ec3e5ff2515f1c40ef6a94983158e172f004cd643b9e4b5302017139b6c96e4"}, + {file = "ijson-3.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46bafb1b9959872a1f946f8dd9c6f1a30a970fc05b7bfae8579da3f1f988e598"}, + {file = "ijson-3.2.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab4db9fee0138b60e31b3c02fff8a4c28d7b152040553b6a91b60354aebd4b02"}, + {file = "ijson-3.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4bc87e69d1997c6a55fff5ee2af878720801ff6ab1fb3b7f94adda050651e37"}, + {file = "ijson-3.2.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e9fd906f0c38e9f0bfd5365e1bed98d649f506721f76bb1a9baa5d7374f26f19"}, + {file = "ijson-3.2.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e84d27d1acb60d9102728d06b9650e5b7e5cb0631bd6e3dfadba8fb6a80d6c2f"}, + {file = "ijson-3.2.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2cc04fc0a22bb945cd179f614845c8b5106c0b3939ee0d84ce67c7a61ac1a936"}, + {file = "ijson-3.2.3-cp39-cp39-win32.whl", hash = "sha256:e641814793a037175f7ec1b717ebb68f26d89d82cfd66f36e588f32d7e488d5f"}, + {file = "ijson-3.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:6bd3e7e91d031f1e8cea7ce53f704ab74e61e505e8072467e092172422728b22"}, + {file = "ijson-3.2.3-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06f9707da06a19b01013f8c65bf67db523662a9b4a4ff027e946e66c261f17f0"}, + {file = "ijson-3.2.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be8495f7c13fa1f622a2c6b64e79ac63965b89caf664cc4e701c335c652d15f2"}, + {file = "ijson-3.2.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7596b42f38c3dcf9d434dddd50f46aeb28e96f891444c2b4b1266304a19a2c09"}, + {file = "ijson-3.2.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbac4e9609a1086bbad075beb2ceec486a3b138604e12d2059a33ce2cba93051"}, + {file = "ijson-3.2.3-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:db2d6341f9cb538253e7fe23311d59252f124f47165221d3c06a7ed667ecd595"}, + {file = "ijson-3.2.3-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fa8b98be298efbb2588f883f9953113d8a0023ab39abe77fe734b71b46b1220a"}, + {file = "ijson-3.2.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:674e585361c702fad050ab4c153fd168dc30f5980ef42b64400bc84d194e662d"}, + {file = "ijson-3.2.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd12e42b9cb9c0166559a3ffa276b4f9fc9d5b4c304e5a13668642d34b48b634"}, + {file = "ijson-3.2.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d31e0d771d82def80cd4663a66de277c3b44ba82cd48f630526b52f74663c639"}, + {file = "ijson-3.2.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7ce4c70c23521179d6da842bb9bc2e36bb9fad1e0187e35423ff0f282890c9ca"}, + {file = "ijson-3.2.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:39f551a6fbeed4433c85269c7c8778e2aaea2501d7ebcb65b38f556030642c17"}, + {file = "ijson-3.2.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b14d322fec0de7af16f3ef920bf282f0dd747200b69e0b9628117f381b7775b"}, + {file = "ijson-3.2.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7851a341429b12d4527ca507097c959659baf5106c7074d15c17c387719ffbcd"}, + {file = "ijson-3.2.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db3bf1b42191b5cc9b6441552fdcb3b583594cb6b19e90d1578b7cbcf80d0fae"}, + {file = "ijson-3.2.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6f662dc44362a53af3084d3765bb01cd7b4734d1f484a6095cad4cb0cbfe5374"}, + {file = "ijson-3.2.3.tar.gz", hash = "sha256:10294e9bf89cb713da05bc4790bdff616610432db561964827074898e174f917"}, ] [[package]] @@ -934,20 +869,6 @@ files = [ [package.dependencies] six = "*" -[[package]] -name = "isoduration" -version = "20.11.0" -description = "Operations with ISO 8601 durations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, - {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, -] - -[package.dependencies] -arrow = ">=0.15.0" - [[package]] name = "isort" version = "5.12.0" @@ -1036,70 +957,22 @@ files = [ [package.dependencies] hbreader = "*" -[[package]] -name = "jsonpatch" -version = "1.33" -description = "Apply JSON-Patches (RFC 6902)" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -files = [ - {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, -] - -[package.dependencies] -jsonpointer = ">=1.9" - -[[package]] -name = "jsonpath-ng" -version = "1.5.3" -description = "A final implementation of JSONPath for Python that aims to be standard compliant, including arithmetic and binary comparison operators and providing clear AST for metaprogramming." -optional = false -python-versions = "*" -files = [ - {file = "jsonpath-ng-1.5.3.tar.gz", hash = "sha256:a273b182a82c1256daab86a313b937059261b5c5f8c4fa3fc38b882b344dd567"}, - {file = "jsonpath_ng-1.5.3-py2-none-any.whl", hash = "sha256:f75b95dbecb8a0f3b86fd2ead21c2b022c3f5770957492b9b6196ecccfeb10aa"}, - {file = "jsonpath_ng-1.5.3-py3-none-any.whl", hash = "sha256:292a93569d74029ba75ac2dc3d3630fc0e17b2df26119a165fa1d498ca47bf65"}, -] - -[package.dependencies] -decorator = "*" -ply = "*" -six = "*" - -[[package]] -name = "jsonpointer" -version = "2.4" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -files = [ - {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, -] - [[package]] name = "jsonschema" -version = "4.18.4" +version = "4.18.6" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.18.4-py3-none-any.whl", hash = "sha256:971be834317c22daaa9132340a51c01b50910724082c2c1a2ac87eeec153a3fe"}, - {file = "jsonschema-4.18.4.tar.gz", hash = "sha256:fb3642735399fa958c0d2aad7057901554596c63349f4f6b283c493cf692a25d"}, + {file = "jsonschema-4.18.6-py3-none-any.whl", hash = "sha256:dc274409c36175aad949c68e5ead0853aaffbe8e88c830ae66bb3c7a1728ad2d"}, + {file = "jsonschema-4.18.6.tar.gz", hash = "sha256:ce71d2f8c7983ef75a756e568317bf54bc531dc3ad7e66a128eae0d51623d8a3"}, ] [package.dependencies] attrs = ">=22.2.0" -fqdn = {version = "*", optional = true, markers = "extra == \"format\""} -idna = {version = "*", optional = true, markers = "extra == \"format\""} -isoduration = {version = "*", optional = true, markers = "extra == \"format\""} -jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} jsonschema-specifications = ">=2023.03.6" referencing = ">=0.28.4" -rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} -rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} rpds-py = ">=0.7.1" -uri-template = {version = "*", optional = true, markers = "extra == \"format\""} -webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] @@ -1167,61 +1040,6 @@ interegular = ["interegular (>=0.3.1,<0.4.0)"] nearley = ["js2py"] regex = ["regex"] -[[package]] -name = "linkml" -version = "1.5.6" -description = "Linked Open Data Modeling Language" -optional = false -python-versions = ">=3.7.6,<4.0.0" -files = [ - {file = "linkml-1.5.6-py3-none-any.whl", hash = "sha256:8036d9ead98d0bf61017e5a2db32ca5b752ab32e338c796c4780118f37293d44"}, - {file = "linkml-1.5.6.tar.gz", hash = "sha256:54b34ad376c3146eb714e961118ac2a02720ac315d8ab76ca802e5dc479b25fb"}, -] - -[package.dependencies] -antlr4-python3-runtime = ">=4.9.0,<4.10" -click = ">=7.0" -graphviz = ">=0.10.1" -hbreader = "*" -isodate = ">=0.6.0" -jinja2 = ">=3.1.0" -jsonasobj2 = ">=1.0.3,<2.0.0" -jsonschema = {version = ">=4.0.0", extras = ["format"]} -linkml-dataops = "*" -linkml-runtime = ">=1.5.4" -openpyxl = "*" -parse = "*" -prefixcommons = ">=0.1.7" -prefixmaps = ">=0.1.3" -pydantic = "*" -pyjsg = ">=0.11.6" -pyshex = ">=0.7.20" -pyshexc = ">=0.8.3" -python-dateutil = "*" -pyyaml = "*" -rdflib = ">=6.0.0" -requests = ">=2.22" -sqlalchemy = ">=1.4.31" -watchdog = ">=0.9.0" - -[[package]] -name = "linkml-dataops" -version = "0.1.0" -description = "LinkML Data Operations API" -optional = false -python-versions = ">=3.7" -files = [ - {file = "linkml_dataops-0.1.0-py3-none-any.whl", hash = "sha256:193cf7f659e5f07946d2c2761896910d5f7151d91282543b1363801f68307f4c"}, - {file = "linkml_dataops-0.1.0.tar.gz", hash = "sha256:4550eab65e78b70dc3b9c651724a94ac2b1d1edb2fbe576465f1d6951a54ed04"}, -] - -[package.dependencies] -jinja2 = "*" -jsonpatch = "*" -jsonpath-ng = "*" -linkml-runtime = ">=1.1.6" -"ruamel.yaml" = "*" - [[package]] name = "linkml-renderer" version = "0.2.0" @@ -1365,19 +1183,20 @@ source = ["Cython (>=0.29.35)"] [[package]] name = "markdown" -version = "3.3.7" -description = "Python implementation of Markdown." +version = "3.4.4" +description = "Python implementation of John Gruber's Markdown." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"}, - {file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"}, + {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"}, + {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"}, ] [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] testing = ["coverage", "pyyaml"] [[package]] @@ -1463,13 +1282,13 @@ files = [ [[package]] name = "mkdocs" -version = "1.4.3" +version = "1.5.2" description = "Project documentation with Markdown." optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"}, - {file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"}, + {file = "mkdocs-1.5.2-py3-none-any.whl", hash = "sha256:60a62538519c2e96fe8426654a67ee177350451616118a41596ae7c876bb7eac"}, + {file = "mkdocs-1.5.2.tar.gz", hash = "sha256:70d0da09c26cff288852471be03c23f0f521fc15cf16ac89c7a3bfb9ae8d24f9"}, ] [package.dependencies] @@ -1478,33 +1297,36 @@ colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" -markdown = ">=3.2.1,<3.4" +markdown = ">=3.2.1" +markupsafe = ">=2.0.1" mergedeep = ">=1.3.4" packaging = ">=20.5" +pathspec = ">=0.11.1" +platformdirs = ">=2.2.0" pyyaml = ">=5.1" pyyaml-env-tag = ">=0.1" watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] [[package]] name = "mkdocs-material" -version = "9.1.19" +version = "9.1.21" description = "Documentation that simply works" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs_material-9.1.19-py3-none-any.whl", hash = "sha256:fb0a149294b319aedf36983919d8c40c9e566db21ead16258e20ebd2e6c0961c"}, - {file = "mkdocs_material-9.1.19.tar.gz", hash = "sha256:73b94b08c765e92a80645aac58d6a741fc5f587deec2b715489c714827b15a6f"}, + {file = "mkdocs_material-9.1.21-py3-none-any.whl", hash = "sha256:58bb2f11ef240632e176d6f0f7d1cff06be1d11c696a5a1b553b808b4280ed47"}, + {file = "mkdocs_material-9.1.21.tar.gz", hash = "sha256:71940cdfca84ab296b6362889c25395b1621273fb16c93deda257adb7ff44ec8"}, ] [package.dependencies] colorama = ">=0.4" jinja2 = ">=3.0" markdown = ">=3.2" -mkdocs = ">=1.4.2" +mkdocs = ">=1.5.0" mkdocs-material-extensions = ">=1.1" pygments = ">=2.14" pymdown-extensions = ">=9.9.1" @@ -1627,47 +1449,47 @@ test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "numpy" -version = "1.25.1" +version = "1.25.2" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.25.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77d339465dff3eb33c701430bcb9c325b60354698340229e1dff97745e6b3efa"}, - {file = "numpy-1.25.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d736b75c3f2cb96843a5c7f8d8ccc414768d34b0a75f466c05f3a739b406f10b"}, - {file = "numpy-1.25.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a90725800caeaa160732d6b31f3f843ebd45d6b5f3eec9e8cc287e30f2805bf"}, - {file = "numpy-1.25.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c6c9261d21e617c6dc5eacba35cb68ec36bb72adcff0dee63f8fbc899362588"}, - {file = "numpy-1.25.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0def91f8af6ec4bb94c370e38c575855bf1d0be8a8fbfba42ef9c073faf2cf19"}, - {file = "numpy-1.25.1-cp310-cp310-win32.whl", hash = "sha256:fd67b306320dcadea700a8f79b9e671e607f8696e98ec255915c0c6d6b818503"}, - {file = "numpy-1.25.1-cp310-cp310-win_amd64.whl", hash = "sha256:c1516db588987450b85595586605742879e50dcce923e8973f79529651545b57"}, - {file = "numpy-1.25.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6b82655dd8efeea69dbf85d00fca40013d7f503212bc5259056244961268b66e"}, - {file = "numpy-1.25.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e8f6049c4878cb16960fbbfb22105e49d13d752d4d8371b55110941fb3b17800"}, - {file = "numpy-1.25.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41a56b70e8139884eccb2f733c2f7378af06c82304959e174f8e7370af112e09"}, - {file = "numpy-1.25.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5154b1a25ec796b1aee12ac1b22f414f94752c5f94832f14d8d6c9ac40bcca6"}, - {file = "numpy-1.25.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38eb6548bb91c421261b4805dc44def9ca1a6eef6444ce35ad1669c0f1a3fc5d"}, - {file = "numpy-1.25.1-cp311-cp311-win32.whl", hash = "sha256:791f409064d0a69dd20579345d852c59822c6aa087f23b07b1b4e28ff5880fcb"}, - {file = "numpy-1.25.1-cp311-cp311-win_amd64.whl", hash = "sha256:c40571fe966393b212689aa17e32ed905924120737194b5d5c1b20b9ed0fb171"}, - {file = "numpy-1.25.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3d7abcdd85aea3e6cdddb59af2350c7ab1ed764397f8eec97a038ad244d2d105"}, - {file = "numpy-1.25.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1a180429394f81c7933634ae49b37b472d343cccb5bb0c4a575ac8bbc433722f"}, - {file = "numpy-1.25.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d412c1697c3853c6fc3cb9751b4915859c7afe6a277c2bf00acf287d56c4e625"}, - {file = "numpy-1.25.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20e1266411120a4f16fad8efa8e0454d21d00b8c7cee5b5ccad7565d95eb42dd"}, - {file = "numpy-1.25.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f76aebc3358ade9eacf9bc2bb8ae589863a4f911611694103af05346637df1b7"}, - {file = "numpy-1.25.1-cp39-cp39-win32.whl", hash = "sha256:247d3ffdd7775bdf191f848be8d49100495114c82c2bd134e8d5d075fb386a1c"}, - {file = "numpy-1.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:1d5d3c68e443c90b38fdf8ef40e60e2538a27548b39b12b73132456847f4b631"}, - {file = "numpy-1.25.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:35a9527c977b924042170a0887de727cd84ff179e478481404c5dc66b4170009"}, - {file = "numpy-1.25.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d3fe3dd0506a28493d82dc3cf254be8cd0d26f4008a417385cbf1ae95b54004"}, - {file = "numpy-1.25.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:012097b5b0d00a11070e8f2e261128c44157a8689f7dedcf35576e525893f4fe"}, - {file = "numpy-1.25.1.tar.gz", hash = "sha256:9a3a9f3a61480cc086117b426a8bd86869c213fc4072e606f01c4e4b66eb92bf"}, + {file = "numpy-1.25.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db3ccc4e37a6873045580d413fe79b68e47a681af8db2e046f1dacfa11f86eb3"}, + {file = "numpy-1.25.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:90319e4f002795ccfc9050110bbbaa16c944b1c37c0baeea43c5fb881693ae1f"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4a913e29b418d096e696ddd422d8a5d13ffba4ea91f9f60440a3b759b0187"}, + {file = "numpy-1.25.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f08f2e037bba04e707eebf4bc934f1972a315c883a9e0ebfa8a7756eabf9e357"}, + {file = "numpy-1.25.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bec1e7213c7cb00d67093247f8c4db156fd03075f49876957dca4711306d39c9"}, + {file = "numpy-1.25.2-cp310-cp310-win32.whl", hash = "sha256:7dc869c0c75988e1c693d0e2d5b26034644399dd929bc049db55395b1379e044"}, + {file = "numpy-1.25.2-cp310-cp310-win_amd64.whl", hash = "sha256:834b386f2b8210dca38c71a6e0f4fd6922f7d3fcff935dbe3a570945acb1b545"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5462d19336db4560041517dbb7759c21d181a67cb01b36ca109b2ae37d32418"}, + {file = "numpy-1.25.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5652ea24d33585ea39eb6a6a15dac87a1206a692719ff45d53c5282e66d4a8f"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d60fbae8e0019865fc4784745814cff1c421df5afee233db6d88ab4f14655a2"}, + {file = "numpy-1.25.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e7f0f7f6d0eee8364b9a6304c2845b9c491ac706048c7e8cf47b83123b8dbf"}, + {file = "numpy-1.25.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bb33d5a1cf360304754913a350edda36d5b8c5331a8237268c48f91253c3a364"}, + {file = "numpy-1.25.2-cp311-cp311-win32.whl", hash = "sha256:5883c06bb92f2e6c8181df7b39971a5fb436288db58b5a1c3967702d4278691d"}, + {file = "numpy-1.25.2-cp311-cp311-win_amd64.whl", hash = "sha256:5c97325a0ba6f9d041feb9390924614b60b99209a71a69c876f71052521d42a4"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3"}, + {file = "numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca"}, + {file = "numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295"}, + {file = "numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f"}, + {file = "numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01"}, + {file = "numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901"}, + {file = "numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf"}, + {file = "numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760"}, ] [[package]] name = "oaklib" -version = "0.5.12" +version = "0.5.13" description = "Ontology Access Kit: Python library for common ontology operations over a variety of backends" optional = false python-versions = ">=3.9,<4.0.0" files = [ - {file = "oaklib-0.5.12-py3-none-any.whl", hash = "sha256:38e809fda807be62606296d554ef8582f6b41764fc6ab48f377f1f39b591df29"}, - {file = "oaklib-0.5.12.tar.gz", hash = "sha256:6cd1a02ced4d400cf600b3553386761d664a42138321b506e8468540d7a81dab"}, + {file = "oaklib-0.5.13-py3-none-any.whl", hash = "sha256:254330bba3182e930ae341b177c8595bc55deea167a87a6639e87782084242c9"}, + {file = "oaklib-0.5.13.tar.gz", hash = "sha256:ee2efdd8868ca81aa9bf556e4e6ede08e07646b5dc37b4834a37c8fe358af0a4"}, ] [package.dependencies] @@ -1702,7 +1524,7 @@ sssom = ">=0.3.31" sssom-schema = ">=0.11.0" [package.extras] -gilda = ["gilda (>=0.10.1,<0.11.0)"] +gilda = ["gilda (>=1.0.0)", "urllib3 (<2)"] [[package]] name = "ols-client" @@ -1745,20 +1567,6 @@ typing-extensions = "*" docs = ["sphinx", "sphinx-autodoc-typehints", "sphinx-automodapi", "sphinx-rtd-theme"] tests = ["coverage", "pytest", "unittest-templates"] -[[package]] -name = "openpyxl" -version = "3.1.2" -description = "A Python library to read/write Excel 2010 xlsx/xlsm files" -optional = false -python-versions = ">=3.6" -files = [ - {file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"}, - {file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"}, -] - -[package.dependencies] -et-xmlfile = "*" - [[package]] name = "packaging" version = "23.1" @@ -1873,42 +1681,31 @@ numpy = "*" pandas = "*" sqlalchemy = "*" -[[package]] -name = "parse" -version = "1.19.1" -description = "parse() is the opposite of format()" -optional = false -python-versions = "*" -files = [ - {file = "parse-1.19.1-py2.py3-none-any.whl", hash = "sha256:371ed3800dc63983832159cc9373156613947707bc448b5215473a219dbd4362"}, - {file = "parse-1.19.1.tar.gz", hash = "sha256:cc3a47236ff05da377617ddefa867b7ba983819c664e1afe46249e5b469be464"}, -] - [[package]] name = "pathspec" -version = "0.11.1" +version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.7" files = [ - {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, - {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, + {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, + {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, ] [[package]] name = "platformdirs" -version = "3.9.1" +version = "3.10.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.9.1-py3-none-any.whl", hash = "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f"}, - {file = "platformdirs-3.9.1.tar.gz", hash = "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421"}, + {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, + {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] [[package]] name = "pluggy" @@ -1925,17 +1722,6 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] -[[package]] -name = "ply" -version = "3.11" -description = "Python Lex & Yacc" -optional = false -python-versions = "*" -files = [ - {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, - {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, -] - [[package]] name = "prefixcommons" version = "0.1.12" @@ -1994,58 +1780,58 @@ python-dateutil = ">=2.8,<3.0" [[package]] name = "pycodestyle" -version = "2.10.0" +version = "2.11.0" description = "Python style guide checker" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pycodestyle-2.10.0-py2.py3-none-any.whl", hash = "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"}, - {file = "pycodestyle-2.10.0.tar.gz", hash = "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053"}, + {file = "pycodestyle-2.11.0-py2.py3-none-any.whl", hash = "sha256:5d1013ba8dc7895b548be5afb05740ca82454fd899971563d2ef625d090326f8"}, + {file = "pycodestyle-2.11.0.tar.gz", hash = "sha256:259bcc17857d8a8b3b4a2327324b79e5f020a13c16074670f9c8c8f872ea76d0"}, ] [[package]] name = "pydantic" -version = "1.10.11" +version = "1.10.12" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff44c5e89315b15ff1f7fdaf9853770b810936d6b01a7bcecaa227d2f8fe444f"}, - {file = "pydantic-1.10.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c098d4ab5e2d5b3984d3cb2527e2d6099d3de85630c8934efcfdc348a9760e"}, - {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16928fdc9cb273c6af00d9d5045434c39afba5f42325fb990add2c241402d151"}, - {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0588788a9a85f3e5e9ebca14211a496409cb3deca5b6971ff37c556d581854e7"}, - {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9baf78b31da2dc3d3f346ef18e58ec5f12f5aaa17ac517e2ffd026a92a87588"}, - {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:373c0840f5c2b5b1ccadd9286782852b901055998136287828731868027a724f"}, - {file = "pydantic-1.10.11-cp310-cp310-win_amd64.whl", hash = "sha256:c3339a46bbe6013ef7bdd2844679bfe500347ac5742cd4019a88312aa58a9847"}, - {file = "pydantic-1.10.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08a6c32e1c3809fbc49debb96bf833164f3438b3696abf0fbeceb417d123e6eb"}, - {file = "pydantic-1.10.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a451ccab49971af043ec4e0d207cbc8cbe53dbf148ef9f19599024076fe9c25b"}, - {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b02d24f7b2b365fed586ed73582c20f353a4c50e4be9ba2c57ab96f8091ddae"}, - {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f34739a89260dfa420aa3cbd069fbcc794b25bbe5c0a214f8fb29e363484b66"}, - {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e297897eb4bebde985f72a46a7552a7556a3dd11e7f76acda0c1093e3dbcf216"}, - {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d185819a7a059550ecb85d5134e7d40f2565f3dd94cfd870132c5f91a89cf58c"}, - {file = "pydantic-1.10.11-cp311-cp311-win_amd64.whl", hash = "sha256:4400015f15c9b464c9db2d5d951b6a780102cfa5870f2c036d37c23b56f7fc1b"}, - {file = "pydantic-1.10.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2417de68290434461a266271fc57274a138510dca19982336639484c73a07af6"}, - {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:331c031ba1554b974c98679bd0780d89670d6fd6f53f5d70b10bdc9addee1713"}, - {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8268a735a14c308923e8958363e3a3404f6834bb98c11f5ab43251a4e410170c"}, - {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:44e51ba599c3ef227e168424e220cd3e544288c57829520dc90ea9cb190c3248"}, - {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d7781f1d13b19700b7949c5a639c764a077cbbdd4322ed505b449d3ca8edcb36"}, - {file = "pydantic-1.10.11-cp37-cp37m-win_amd64.whl", hash = "sha256:7522a7666157aa22b812ce14c827574ddccc94f361237ca6ea8bb0d5c38f1629"}, - {file = "pydantic-1.10.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc64eab9b19cd794a380179ac0e6752335e9555d214cfcb755820333c0784cb3"}, - {file = "pydantic-1.10.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8dc77064471780262b6a68fe67e013298d130414d5aaf9b562c33987dbd2cf4f"}, - {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe429898f2c9dd209bd0632a606bddc06f8bce081bbd03d1c775a45886e2c1cb"}, - {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:192c608ad002a748e4a0bed2ddbcd98f9b56df50a7c24d9a931a8c5dd053bd3d"}, - {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ef55392ec4bb5721f4ded1096241e4b7151ba6d50a50a80a2526c854f42e6a2f"}, - {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e0bb6efe86281623abbeeb0be64eab740c865388ee934cd3e6a358784aca6e"}, - {file = "pydantic-1.10.11-cp38-cp38-win_amd64.whl", hash = "sha256:265a60da42f9f27e0b1014eab8acd3e53bd0bad5c5b4884e98a55f8f596b2c19"}, - {file = "pydantic-1.10.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:469adf96c8e2c2bbfa655fc7735a2a82f4c543d9fee97bd113a7fb509bf5e622"}, - {file = "pydantic-1.10.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e6cbfbd010b14c8a905a7b10f9fe090068d1744d46f9e0c021db28daeb8b6de1"}, - {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abade85268cc92dff86d6effcd917893130f0ff516f3d637f50dadc22ae93999"}, - {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9738b0f2e6c70f44ee0de53f2089d6002b10c33264abee07bdb5c7f03038303"}, - {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:787cf23e5a0cde753f2eabac1b2e73ae3844eb873fd1f5bdbff3048d8dbb7604"}, - {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:174899023337b9fc685ac8adaa7b047050616136ccd30e9070627c1aaab53a13"}, - {file = "pydantic-1.10.11-cp39-cp39-win_amd64.whl", hash = "sha256:1954f8778489a04b245a1e7b8b22a9d3ea8ef49337285693cf6959e4b757535e"}, - {file = "pydantic-1.10.11-py3-none-any.whl", hash = "sha256:008c5e266c8aada206d0627a011504e14268a62091450210eda7c07fabe6963e"}, - {file = "pydantic-1.10.11.tar.gz", hash = "sha256:f66d479cf7eb331372c470614be6511eae96f1f120344c25f3f9bb59fb1b5528"}, + {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, + {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, + {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, + {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, + {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, + {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, + {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, + {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, + {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, + {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, + {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, + {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, + {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, + {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, + {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, + {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, + {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, + {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, + {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, + {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, + {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, + {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, + {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, + {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, + {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, + {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, + {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, + {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, + {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, + {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, + {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, + {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, + {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, + {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, + {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, + {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, ] [package.dependencies] @@ -2057,13 +1843,13 @@ email = ["email-validator (>=1.0.3)"] [[package]] name = "pyflakes" -version = "3.0.1" +version = "3.1.0" description = "passive checker of Python programs" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "pyflakes-3.0.1-py2.py3-none-any.whl", hash = "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf"}, - {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, + {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, + {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, ] [[package]] @@ -2122,59 +1908,18 @@ pyyaml = "*" [[package]] name = "pyparsing" -version = "3.1.0" +version = "3.1.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.1.0-py3-none-any.whl", hash = "sha256:d554a96d1a7d3ddaf7183104485bc19fd80543ad6ac5bdb6426719d766fb06c1"}, - {file = "pyparsing-3.1.0.tar.gz", hash = "sha256:edb662d6fe322d6e990b1594b5feaeadf806803359e3d4d42f11e295e588f0ea"}, + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, ] [package.extras] diagrams = ["jinja2", "railroad-diagrams"] -[[package]] -name = "pyshex" -version = "0.8.1" -description = "Python ShEx Implementation" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyShEx-0.8.1-py3-none-any.whl", hash = "sha256:6da1b10123e191abf8dcb6bf3e54aa3e1fcf771df5d1a0ed453217c8900c8e6a"}, - {file = "PyShEx-0.8.1.tar.gz", hash = "sha256:3c5c4d45fe27faaadae803cb008c41acf8ee784da7868b04fd84967e75be70d0"}, -] - -[package.dependencies] -cfgraph = ">=0.2.1" -chardet = "*" -pyshexc = "0.9.1" -rdflib-shim = "*" -requests = ">=2.22.0" -shexjsg = ">=0.8.2" -sparqlslurper = ">=0.5.1" -sparqlwrapper = ">=1.8.5" -urllib3 = "*" - -[[package]] -name = "pyshexc" -version = "0.9.1" -description = "PyShExC - Python ShEx compiler" -optional = false -python-versions = ">=3.7" -files = [ - {file = "PyShExC-0.9.1-py2.py3-none-any.whl", hash = "sha256:efc55ed5cb2453e9df569b03e282505e96bb06597934288f3b23dd980ef10028"}, - {file = "PyShExC-0.9.1.tar.gz", hash = "sha256:35a9975d4b9afeb20ef710fb6680871756381d0c39fbb5470b3b506581a304d3"}, -] - -[package.dependencies] -antlr4-python3-runtime = ">=4.9.3,<4.10.0" -chardet = "*" -jsonasobj = ">=1.2.1" -pyjsg = ">=0.11.10" -rdflib-shim = "*" -shexjsg = ">=0.8.1" - [[package]] name = "pysolr" version = "3.9.0" @@ -2588,20 +2333,6 @@ files = [ [package.dependencies] requests = ">=2.0.1,<3.0.0" -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -description = "A pure python RFC3339 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, - {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, -] - -[package.dependencies] -six = "*" - [[package]] name = "rfc3987" version = "1.3.8" @@ -2719,69 +2450,6 @@ files = [ {file = "rpds_py-0.9.2.tar.gz", hash = "sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945"}, ] -[[package]] -name = "ruamel-yaml" -version = "0.17.32" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -optional = false -python-versions = ">=3" -files = [ - {file = "ruamel.yaml-0.17.32-py3-none-any.whl", hash = "sha256:23cd2ed620231677564646b0c6a89d138b6822a0d78656df7abda5879ec4f447"}, - {file = "ruamel.yaml-0.17.32.tar.gz", hash = "sha256:ec939063761914e14542972a5cba6d33c23b0859ab6342f61cf070cfc600efc2"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.12\""} - -[package.extras] -docs = ["ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.7" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -optional = false -python-versions = ">=3.5" -files = [ - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d5859983f26d8cd7bb5c287ef452e8aacc86501487634573d260968f753e1d71"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:debc87a9516b237d0466a711b18b6ebeb17ba9f391eb7f91c649c5c4ec5006c7"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:df5828871e6648db72d1c19b4bd24819b80a755c4541d3409f0f7acd0f335c80"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:efa08d63ef03d079dcae1dfe334f6c8847ba8b645d08df286358b1f5293d24ab"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win32.whl", hash = "sha256:763d65baa3b952479c4e972669f679fe490eee058d5aa85da483ebae2009d231"}, - {file = "ruamel.yaml.clib-0.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:d000f258cf42fec2b1bbf2863c61d7b8918d31ffee905da62dede869254d3b8a"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:045e0626baf1c52e5527bd5db361bc83180faaba2ff586e763d3d5982a876a9e"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-macosx_12_6_arm64.whl", hash = "sha256:721bc4ba4525f53f6a611ec0967bdcee61b31df5a56801281027a3a6d1c2daf5"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:41d0f1fa4c6830176eef5b276af04c89320ea616655d01327d5ce65e50575c94"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win32.whl", hash = "sha256:f6d3d39611ac2e4f62c3128a9eed45f19a6608670c5a2f4f07f24e8de3441d38"}, - {file = "ruamel.yaml.clib-0.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:da538167284de58a52109a9b89b8f6a53ff8437dd6dc26d33b57bf6699153122"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:4b3a93bb9bc662fc1f99c5c3ea8e623d8b23ad22f861eb6fce9377ac07ad6072"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-macosx_12_0_arm64.whl", hash = "sha256:a234a20ae07e8469da311e182e70ef6b199d0fbeb6c6cc2901204dd87fb867e8"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:15910ef4f3e537eea7fe45f8a5d19997479940d9196f357152a09031c5be59f3"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:370445fd795706fd291ab00c9df38a0caed0f17a6fb46b0f607668ecb16ce763"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win32.whl", hash = "sha256:ecdf1a604009bd35c674b9225a8fa609e0282d9b896c03dd441a91e5f53b534e"}, - {file = "ruamel.yaml.clib-0.2.7-cp36-cp36m-win_amd64.whl", hash = "sha256:f34019dced51047d6f70cb9383b2ae2853b7fc4dce65129a5acd49f4f9256646"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aa261c29a5545adfef9296b7e33941f46aa5bbd21164228e833412af4c9c75f"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f01da5790e95815eb5a8a138508c01c758e5f5bc0ce4286c4f7028b8dd7ac3d0"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:40d030e2329ce5286d6b231b8726959ebbe0404c92f0a578c0e2482182e38282"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c3ca1fbba4ae962521e5eb66d72998b51f0f4d0f608d3c0347a48e1af262efa7"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win32.whl", hash = "sha256:7bdb4c06b063f6fd55e472e201317a3bb6cdeeee5d5a38512ea5c01e1acbdd93"}, - {file = "ruamel.yaml.clib-0.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:be2a7ad8fd8f7442b24323d24ba0b56c51219513cfa45b9ada3b87b76c374d4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91a789b4aa0097b78c93e3dc4b40040ba55bef518f84a40d4442f713b4094acb"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:99e77daab5d13a48a4054803d052ff40780278240a902b880dd37a51ba01a307"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:3243f48ecd450eddadc2d11b5feb08aca941b5cd98c9b1db14b2fd128be8c697"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8831a2cedcd0f0927f788c5bdf6567d9dc9cc235646a434986a852af1cb54b4b"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win32.whl", hash = "sha256:3110a99e0f94a4a3470ff67fc20d3f96c25b13d24c6980ff841e82bafe827cac"}, - {file = "ruamel.yaml.clib-0.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:92460ce908546ab69770b2e576e4f99fbb4ce6ab4b245345a3869a0a0410488f"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5bc0667c1eb8f83a3752b71b9c4ba55ef7c7058ae57022dd9b29065186a113d9"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:4a4d8d417868d68b979076a9be6a38c676eca060785abaa6709c7b31593c35d1"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf9a6bc4a0221538b1a7de3ed7bca4c93c02346853f44e1cd764be0023cd3640"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a7b301ff08055d73223058b5c46c55638917f04d21577c95e00e0c4d79201a6b"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win32.whl", hash = "sha256:d5e51e2901ec2366b79f16c2299a03e74ba4531ddcfacc1416639c557aef0ad8"}, - {file = "ruamel.yaml.clib-0.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:184faeaec61dbaa3cace407cffc5819f7b977e75360e8d5ca19461cd851a5fc5"}, - {file = "ruamel.yaml.clib-0.2.7.tar.gz", hash = "sha256:1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497"}, -] - [[package]] name = "scipy" version = "1.9.3" @@ -2822,46 +2490,46 @@ test = ["asv", "gmpy2", "mpmath", "pytest", "pytest-cov", "pytest-xdist", "sciki [[package]] name = "semsimian" -version = "0.1.16" +version = "0.1.18" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "semsimian-0.1.16-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:0c4660d788ee683e0979063ac888dab91614361c6e4b56a648abf79ee5c32e3d"}, - {file = "semsimian-0.1.16-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:3b4d5a8e6ab79c692a73c06274b55c0b479fd05a1d338a7a99ff23b2997f3b44"}, - {file = "semsimian-0.1.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c0038aebdb671d0dc057c2e4fe59064027be05780db54495b706cfc3a9d95dc"}, - {file = "semsimian-0.1.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d753cfed9c95bbe1f86cbdbe4d8a599a270b9930a3c3eee73ea7a9c22865416"}, - {file = "semsimian-0.1.16-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9a73aa83cd75ed08e375327e784290a40b2b40b4d44c81ed4a2f804d68f262d5"}, - {file = "semsimian-0.1.16-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2681b4d72f7034771ef7e84347fa3ca64ebb5d4a50e7e6746e6866c6ea4e02e3"}, - {file = "semsimian-0.1.16-cp310-none-win_amd64.whl", hash = "sha256:2e7a77de24b4d2fcd320afde6eb7cfd6b0d48ef22988535a7d64dec1890e1e6b"}, - {file = "semsimian-0.1.16-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:259389b7b48ae44c27576cd507f43cc8b711e7a8ad6e011a1b1f0b872eb7e7bb"}, - {file = "semsimian-0.1.16-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:f1895abaa2c526b77ad40a50daced2adaf7aab6f7f40dcbaee99e1487354d870"}, - {file = "semsimian-0.1.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57e760acc6a8f89c69fe4481a229b440f9a47f050a8b2b60b58ded5e78c305b1"}, - {file = "semsimian-0.1.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1af2a8b3d089ba19ee0c825cbc21af49263de2835538231996903047ea60461"}, - {file = "semsimian-0.1.16-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f7aa937ec57bb51e8a5aa45b2dcf9eb7427c1392167e45628120516755961da7"}, - {file = "semsimian-0.1.16-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:52d0c5cec9c47fa02eb43317003dfd44a8b6a05e9d811377eeaced2ba55a7f0d"}, - {file = "semsimian-0.1.16-cp311-none-win_amd64.whl", hash = "sha256:8e79cd4a1eabc5f64561b2f30abbaaed06b3a69501505abbd589b9fc071deac3"}, - {file = "semsimian-0.1.16-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:dd1d1b1373e5bfaed6956fc8aeb79471e52f4a00e26835290652303f53a725f6"}, - {file = "semsimian-0.1.16-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:d1c8b57d894067a6bc8c24d106eb025f1c8e1ad34ebce8874eed42c73c8b5f6b"}, - {file = "semsimian-0.1.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4943f5e96ba2931a11b925d0841f5f78789fcc8ed3f2c5400c01a620f4577b88"}, - {file = "semsimian-0.1.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad0a0acbc93c6978565e2493aa625f57b3c66e30b05e97706ab1933c4247cab"}, - {file = "semsimian-0.1.16-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:522a3379201017460a0b2f420c148ab03c56ec1c2f9b875f859eeaf0ae8a427b"}, - {file = "semsimian-0.1.16-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:f16289373452214bd1e7dc5e827680867cc5ba476e96aea9bd643d3e5f89612a"}, - {file = "semsimian-0.1.16-cp37-none-win_amd64.whl", hash = "sha256:5cb40d3ea6bcca88cf63bb99da547cd021d3da4c64f2325b92660a806d284247"}, - {file = "semsimian-0.1.16-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:8c8b6dbe91b44511d91383f0ccf163a58d3335d10d7f382183356a17627fe1c7"}, - {file = "semsimian-0.1.16-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:7ab20fabf9d56b9b1b843d4a22c84b9ab03c2e81fbe54ecac3f239ff2727fa89"}, - {file = "semsimian-0.1.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:870f194574d03d31b0054b3225f48cf4adc67534ab8c48d8d9c4517516deafe3"}, - {file = "semsimian-0.1.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfc6ae183343fb300dd55691a8c6470f708e72b7f7fd50f1130c2cd5484b779f"}, - {file = "semsimian-0.1.16-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:15b2b7cb017d19a711f6d2340a797642ba09fe4a20526b2dc52f9f8f0dcc5c25"}, - {file = "semsimian-0.1.16-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3ddf282191cb610b7b3097f7106caa33e343a2ffa52549b520ae6562e64fd696"}, - {file = "semsimian-0.1.16-cp38-none-win_amd64.whl", hash = "sha256:eb4d45af0509828f1f606328ffbcc55669e99e0ee96f1dcba721a26defe87f06"}, - {file = "semsimian-0.1.16-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:ba1cf580a322928bae98106489a236f059d55e36942f1e1eadee897f214e67e6"}, - {file = "semsimian-0.1.16-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:86f9022a296c4e2c46632fe15cd74fe7c3ae8f60eb86b1f994588445ce613ada"}, - {file = "semsimian-0.1.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12b13dfcc590b8ef60fd97577a9d2ec293b05d9bb99a6972c492617bd610b995"}, - {file = "semsimian-0.1.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00d45bedf4fbd77df74780d07b1c74ad711fe5b965c40fbf92ad5514abb1998b"}, - {file = "semsimian-0.1.16-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fccf064019d96bb492369d0a8f20b64637b8033e03fe9bc8aff9b4b094ed9f96"}, - {file = "semsimian-0.1.16-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:be0c1c4e2d33b2e4890bfb72b3f0af5e73b50500f27a893a789858f51c43452d"}, - {file = "semsimian-0.1.16-cp39-none-win_amd64.whl", hash = "sha256:55de113e331b48314d668dcdc59bcc6b9cbaf66553ab155327c9d0bd250eaf7e"}, + {file = "semsimian-0.1.18-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6186ff665f609c8a9f72e9a6abb95ee2f5712011b37401fc31d5196a914c011b"}, + {file = "semsimian-0.1.18-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:5c5c0054f441cf7c1e61b5f215177115fccd30bc84496e32bc646ced1deaa3b8"}, + {file = "semsimian-0.1.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b4c1f8c101f902640c43018c2711036c0d0a7d03dffa5111102ba0dc616d59"}, + {file = "semsimian-0.1.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146b817c260eca46eac8d961ee79665941275c45c97f18c13b793b281d68a1b4"}, + {file = "semsimian-0.1.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7ee5cc40d97467d0aac14c190dea04f8298e6f46b7715fb3718a3ecfc27dbf79"}, + {file = "semsimian-0.1.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8a8db126bc5281e40a8c6c94469ad7fa59e681cfd4c024d66ff180ea70540c52"}, + {file = "semsimian-0.1.18-cp310-none-win_amd64.whl", hash = "sha256:69519f44e565ad0d433dc3b4a66a75ebb03ca77c3a77229284069746ef98439c"}, + {file = "semsimian-0.1.18-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:ba8931dacc1285bc808b1ec587aaa1689b3938eb7062d6175edf231e2a6de027"}, + {file = "semsimian-0.1.18-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:3179d307885bc94ee9151627829aa7c7616dcf75dd15b2097a49374e1316bb52"}, + {file = "semsimian-0.1.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c81015da97daf2498eb7a55dd83229140a8ed0be8e45c3cbbb412b9572e019fd"}, + {file = "semsimian-0.1.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b451b4aec6ca6c1f03fa2ba94e45e8ed9b4accd2026fa1fc63b76d41b009e5a4"}, + {file = "semsimian-0.1.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5ff75b162697be71316ede9351a0149d5cb55a9b9635c24e672f66e6dd9fd0d5"}, + {file = "semsimian-0.1.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4d8db46b200763150f55db121cd2f95b44adfb6ccbeef5eadec83807cccea68a"}, + {file = "semsimian-0.1.18-cp311-none-win_amd64.whl", hash = "sha256:0372855dcc29f068b31f35ad876d4f25e407facaa0d15203663fd11313af1bfb"}, + {file = "semsimian-0.1.18-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:35f7caeb4a65a86c1cfe51266c72a29163bfa20c59c7b7fba13e2407538e725c"}, + {file = "semsimian-0.1.18-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e80e1ed13bbd845c4dfa61c6f2efa60a35f4406455575ca292003a0678ad2d3e"}, + {file = "semsimian-0.1.18-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b53152f29cfe4d038b7060110a46bf3a6facd7886f477ee03b3172a65781000b"}, + {file = "semsimian-0.1.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19d338b174d2f86d4456ee96dfd9f1be7d4cbd4b69f4c032d5338c3642486aa8"}, + {file = "semsimian-0.1.18-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:272dfafe8f8ae165c4036e2fb799ab12657683b64856ebe344ee20056aacf691"}, + {file = "semsimian-0.1.18-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:535031a8f3ac482b40ea97b6162d00a6a98f30c0cdffabd32b6b1c95563f8822"}, + {file = "semsimian-0.1.18-cp37-none-win_amd64.whl", hash = "sha256:3dbce8d4d5b80b5ff4f20e6aa4715ddaba52489868d942e2eb83198de55d2268"}, + {file = "semsimian-0.1.18-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:080986bcecf384f2dea7b590830c0b4fcc2422a307d8f2c1335e952efd8f255b"}, + {file = "semsimian-0.1.18-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:b70951e297c79aace08b91bd924e9b5a5744677acaf285057d8355bfe3dcb03a"}, + {file = "semsimian-0.1.18-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f02ba7a11b26572563fee12d919ab76fee39f372c8507f919b396f52a825bf79"}, + {file = "semsimian-0.1.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216823e64ae825bd569671a4afb6d9f44b50837cdb44e5ad7535eb5eb420e84f"}, + {file = "semsimian-0.1.18-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:633c032db096b7afbb049c9ae8f91a1a7a4cfc077607d47f855d908569c19045"}, + {file = "semsimian-0.1.18-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5d1a13042384f376b122d05a43db97f5fcc9e0a435fb96fee448ceff4229c740"}, + {file = "semsimian-0.1.18-cp38-none-win_amd64.whl", hash = "sha256:a63e1bcdc043d78e59f8a77f62c8f10e079406e9ff641bc357ab7db149548885"}, + {file = "semsimian-0.1.18-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:a32c83e6041eb015f87cfd6b594346a34df464bd123d692fb1f1d0c0b21006ce"}, + {file = "semsimian-0.1.18-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:59cb09905fda7c184bb45db332310034b1d08dc453676c3a4ae303a3d9100176"}, + {file = "semsimian-0.1.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ff5c5090c3c7418d189e85fc5bbcf550734c782f7406a374c13727ffd7a09c8"}, + {file = "semsimian-0.1.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba396ef4db8334fb048d79f6e7ead4568dc060454dc731f6a2449752f8ca457c"}, + {file = "semsimian-0.1.18-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c09002c4ac0de980a354a96ec8def2ffa2ac080cbaddee299b58eab66ff3ad51"}, + {file = "semsimian-0.1.18-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0f6657cedea047f55a1e68f353e21c30a1e0e81e6675f424ec5b02f0d74c0884"}, + {file = "semsimian-0.1.18-cp39-none-win_amd64.whl", hash = "sha256:2c37c8b5165c00953395a9f6195931dd6767f37fc755a352bd5107856138e8be"}, ] [[package]] @@ -2896,20 +2564,6 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-g testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] -[[package]] -name = "shexjsg" -version = "0.8.2" -description = "ShExJSG - Astract Syntax Tree for the ShEx 2.0 language" -optional = false -python-versions = "*" -files = [ - {file = "ShExJSG-0.8.2-py2.py3-none-any.whl", hash = "sha256:3b0d8432dd313bee9e1343382c5e02e9908dd941a7dd7342bf8c0200fe523766"}, - {file = "ShExJSG-0.8.2.tar.gz", hash = "sha256:f17a629fc577fa344382bdee143cd9ff86588537f9f811f66cea6f63cdbcd0b6"}, -] - -[package.dependencies] -pyjsg = ">=0.11.10" - [[package]] name = "six" version = "1.16.0" @@ -2943,22 +2597,6 @@ files = [ {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, ] -[[package]] -name = "sparqlslurper" -version = "0.5.1" -description = "SPARQL Slurper for rdflib" -optional = false -python-versions = ">=3.7.4" -files = [ - {file = "sparqlslurper-0.5.1-py3-none-any.whl", hash = "sha256:ae49b2d8ce3dd38df7a40465b228ad5d33fb7e11b3f248d195f9cadfc9cfff87"}, - {file = "sparqlslurper-0.5.1.tar.gz", hash = "sha256:9282ebb064fc6152a58269d194cb1e7b275b0f095425a578d75b96dcc851f546"}, -] - -[package.dependencies] -rdflib = ">=5.0.0" -rdflib-shim = "*" -sparqlwrapper = ">=1.8.2" - [[package]] name = "sparqlwrapper" version = "2.0.0" @@ -3087,45 +2725,42 @@ url = ["furl (>=0.4.1)"] [[package]] name = "sssom" -version = "0.3.32" +version = "0.3.36" description = "Operations on SSSOM mapping tables" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8,<4.0" files = [ - {file = "sssom-0.3.32.tar.gz", hash = "sha256:a3b38008ab2f4bd5519cf2c2b47786898e749d3d7e6cb7c71427ee533c10396c"}, + {file = "sssom-0.3.36-py3-none-any.whl", hash = "sha256:796dd2b4877c6df0895d38d7e107820c7678584c0652d5ad5cee2352142f5505"}, + {file = "sssom-0.3.36.tar.gz", hash = "sha256:d38d3479aba79edfc3823e823121792205522307c1d47cfa906a8aedbcddae3c"}, ] [package.dependencies] -bioregistry = "*" +bioregistry = ">=0.9.43" click = "*" -deprecation = "*" -linkml = "*" -networkx = "*" -numpy = "*" -pandas = "*" -pansql = "*" -pyparsing = "*" -pyyaml = "*" -rdflib = ">=6" -scipy = "*" -setuptools = "*" -sparqlwrapper = "*" -sssom-schema = "*" -validators = ">=0.0" - -[package.extras] -docs = ["recommonmark", "sphinx", "sphinx-autodoc-typehints", "sphinx-click", "sphinx-rtd-theme"] -test = ["pytest"] +curies = ">=0.5.7" +deprecation = ">=2.1.0" +importlib-metadata = ">=4.8.0" +linkml-runtime = ">=1.5.3" +networkx = ">=3.1" +pandas = ">=2.0.2" +pansql = ">=0.0.1,<0.0.2" +pyparsing = ">=3.0.9,<4.0.0" +pyyaml = ">=6.0" +rdflib = ">=6.3.2" +scipy = {version = "*", extras = ["scipy"]} +sparqlwrapper = ">=2.0.0" +sssom-schema = ">=0.14.0" +validators = ">=0.20.0" [[package]] name = "sssom-schema" -version = "0.13.0" +version = "0.15.0" description = "SSSOM is a Simple Standard for Sharing Ontology Mappings." optional = false python-versions = ">=3.7.6,<4.0.0" files = [ - {file = "sssom_schema-0.13.0-py3-none-any.whl", hash = "sha256:0414433746c9d09c1eff17552081fe3af02c57ad63833f9a439f8ad5f281099a"}, - {file = "sssom_schema-0.13.0.tar.gz", hash = "sha256:1e15c346afbe3bde10d340206c884f5a5ff8428c7604e05e5f94c589d12227d9"}, + {file = "sssom_schema-0.15.0-py3-none-any.whl", hash = "sha256:0ba81a0fe76d28a2c65d65a99e0cd17d8dd08274f9735776a70c8d2f3734e901"}, + {file = "sssom_schema-0.15.0.tar.gz", hash = "sha256:35d56ba6d0350b1e07df2789aebac9c5c70b0888bf88ec3c0592c89e9c13d228"}, ] [package.dependencies] @@ -3185,20 +2820,6 @@ files = [ {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, ] -[[package]] -name = "uri-template" -version = "1.3.0" -description = "RFC 6570 URI Template Processor" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, - {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, -] - -[package.extras] -dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] - [[package]] name = "url-normalize" version = "1.4.3" @@ -3285,21 +2906,6 @@ files = [ [package.extras] watchmedo = ["PyYAML (>=3.10)"] -[[package]] -name = "webcolors" -version = "1.13" -description = "A library for working with the color formats defined by HTML and CSS." -optional = false -python-versions = ">=3.7" -files = [ - {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, - {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, -] - -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["pytest", "pytest-cov"] - [[package]] name = "wrapt" version = "1.15.0" @@ -3402,4 +3008,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "838ed1fea57cf54d115baca90caaaded0690334ac349a4cebca3f77f47705c33" +content-hash = "0cc9a22eb63bfc29227e1d4c97336edce65a673b90d48d0bf68a64265b6562cb" diff --git a/pyproject.toml b/pyproject.toml index 99cc308..88e625a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,7 @@ pandasaurus = "0.2.3" anndata = "^0.9.1" rdflib = "^6.3.2" pygraphviz = "^1.11" +oaklib = "^0.5.13" [tool.poetry.group.dev.dependencies] pytest = "^7.3.1" From ecb8b88424636c31e89535f86cbce4e9fb71a98a Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 4 Aug 2023 12:09:41 +0100 Subject: [PATCH 23/27] Added logging to transitive_reduction and refactored visualize_rdf_graph, transitive_reduction methods --- .../graph_generator/graph_generator.py | 132 +++++++++--------- .../graph_generator/graph_generator_utils.py | 54 +++++++ pandasaurus_cxg/utils/logging_config.py | 31 ++++ 3 files changed, 154 insertions(+), 63 deletions(-) create mode 100644 pandasaurus_cxg/graph_generator/graph_generator_utils.py create mode 100644 pandasaurus_cxg/utils/logging_config.py diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index e63a40b..968d486 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -1,3 +1,4 @@ +import logging import uuid from enum import Enum from typing import List, Optional @@ -8,11 +9,20 @@ from rdflib import OWL, RDF, RDFS, BNode, Graph, Literal, Namespace, URIRef from pandasaurus_cxg.anndata_enricher import AnndataEnricher +from pandasaurus_cxg.graph_generator.graph_generator_utils import ( + add_edge, + add_outgoing_edges_to_subgraph, + find_and_rotate_center_layout, +) +from pandasaurus_cxg.utils.logging_config import configure_logger from pandasaurus_cxg.utils.exceptions import ( InvalidGraphFormat, MissingEnrichmentProcess, ) +# Set up logger +logger = configure_logger() + class GraphGenerator: def __init__( @@ -103,7 +113,7 @@ def generate_rdf_graph(self): # generate a resource for each free-text cell_type annotation and cell_type_ontology_term annotation cell_set_class = self.ns["CellSet"] - self.graph.add((cell_set_class, RDF.type, RDFS.Class)) + self.graph.add((cell_set_class, RDF.type, OWL.Class)) for _uuid, inner_dict in grouped_dict_uuid.items(): resource = self.ns[_uuid] self.graph.add((resource, RDF.type, cell_set_class)) @@ -151,7 +161,7 @@ def enrich_rdf_graph(self): def save_rdf_graph( self, - graph: Optional[Graph], + graph: Optional[Graph] = None, file_name: Optional[str] = "mygraph", _format: Optional[str] = "xml", ): @@ -199,43 +209,40 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: visited = set() subgraph = Graph() stack = [URIRef(node) for node in start_node] if start_node else None + predicate_uri = URIRef(predicate) if predicate else None while stack: node = stack.pop() if node not in visited: visited.add(node) - for s, p, o in graph.triples((node, self.ns[predicate] if predicate else None, None)): + for s, p, o in graph.triples((node, predicate_uri, None)): # Add all outgoing edges of the current node subgraph.add((s, p, o)) - for s, p, next_node in graph.triples( - (node, self.ns[predicate] if predicate else None, None) - ): + for s, p, next_node in graph.triples((node, predicate_uri, None)): if not isinstance(next_node, BNode): stack.append(next_node) - # else: - # subgraph.add( - # ( - # node, - # next(graph.objects(next_node, OWL.onProperty)), - # next(graph.objects(next_node, OWL.someValuesFrom)), - # ) - # ) + else: + _p = next(graph.objects(next_node, OWL.onProperty)) + _o = next(graph.objects(next_node, OWL.someValuesFrom)) + subgraph.add( + ( + node, + _p, + _o, + ) + ) + stack.append(_o) # TODO not sure if we need this else or not if not start_node: - for s, p, o in graph.triples((None, self.ns[predicate] if predicate else None, None)): - # Add all outgoing edges of the current node - subgraph.add((s, p, o)) + subgraph = add_outgoing_edges_to_subgraph(graph, predicate_uri) nx_graph = nx.DiGraph() - for subject, predicate, obj in subgraph: - if isinstance(obj, URIRef) and predicate != RDF.type: - edge_data = {"label": str(predicate).split("/")[-1]} - nx_graph.add_edge( - str(subject).split("/")[-1], - str(obj).split("/")[-1], - **edge_data, - ) + for s, p, o in subgraph: + if isinstance(o, URIRef) and p != RDF.type: + add_edge(nx_graph, o, p, s) + elif p != RDF.type: + nx_graph.add_node(str(s).split("/")[-1], label=str(o)) # Apply transitive reduction to remove redundancy transitive_reduction_graph = nx.transitive_reduction(nx_graph) @@ -244,12 +251,11 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: (u, v, nx_graph.edges[u, v]) for u, v in transitive_reduction_graph.edges ) - # Layout the graph as a hierarchical tree - pos = nx.drawing.nx_agraph.graphviz_layout(transitive_reduction_graph, prog="dot") + pos = find_and_rotate_center_layout(transitive_reduction_graph) + plt.figure(figsize=(10, 10)) # Plot the graph as a hierarchical tree node_labels = nx.get_node_attributes(transitive_reduction_graph, "label") - plt.figure(figsize=(10, 10)) nx.draw( transitive_reduction_graph, pos, @@ -272,44 +278,44 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: ) plt.show() - def transitive_reduction(self, predicate: str, file_path: str, _format: str = "xml"): + def transitive_reduction(self, predicate_list: List[str], file_path: str, _format: str = "xml"): graph = Graph().parse(file_path, format="ttl") if file_path else self.graph - if predicate and not graph.query(f"ASK {{ ?s {self.ns[predicate].n3()} ?o }}"): - raise ValueError(f"The {self.ns[predicate]} relation does not exist in the graph") - - subgraph = Graph() - for s, p, o in graph.triples((None, self.ns[predicate] if predicate else None, None)): - # Add all outgoing edges of the current node - subgraph.add((s, p, o)) - - nx_graph = nx.DiGraph() - for subject, _predicate, obj in subgraph: - if isinstance(obj, URIRef) and _predicate != RDF.type: - edge_data = { - "label": "is_a" if _predicate == RDF.type else str(predicate).split("/")[-1] - } - nx_graph.add_edge( - str(subject).split("/")[-1], - str(obj).split("/")[-1], - **edge_data, - ) - - # Apply transitive reduction to remove redundancy - transitive_reduction_graph = nx.transitive_reduction(nx_graph) - transitive_reduction_graph.add_edges_from( - (u, v, nx_graph.edges[u, v]) for u, v in transitive_reduction_graph.edges - ) - - # Remove redundant triples using nx graph - edge_diff = list(set(nx_graph.edges) - set(transitive_reduction_graph.edges)) - - for edge in edge_diff: - if graph.query( - f"ASK {{ {self.ns[edge[0]].n3()} {self.ns[predicate].n3()} {self.ns[edge[1]].n3()} }}" - ): - graph.remove((self.ns[edge[0]], self.ns[predicate], self.ns[edge[1]])) + invalid_predicates = [] + for predicate in predicate_list: + if predicate and not graph.query(f"ASK {{ ?s <{predicate}> ?o }}"): + invalid_predicates.append(predicate) + continue + + predicate_uri = URIRef(predicate) if predicate else None + subgraph = add_outgoing_edges_to_subgraph(graph, predicate_uri) + + nx_graph = nx.DiGraph() + for s, p, o in subgraph: + if isinstance(o, URIRef) and p != RDF.type: + add_edge(nx_graph, s, predicate, o) + + # Apply transitive reduction to remove redundancy + transitive_reduction_graph = nx.transitive_reduction(nx_graph) + transitive_reduction_graph.add_edges_from( + (u, v, nx_graph.edges[u, v]) for u, v in transitive_reduction_graph.edges + ) + # Remove redundant triples using nx graph + edge_diff = list(set(nx_graph.edges) - set(transitive_reduction_graph.edges)) + for edge in edge_diff: + if graph.query(f"ASK {{ <{edge[0]}> <{predicate}> <{edge[1]}> }}"): + graph.remove((URIRef(edge[0]), URIRef(predicate), URIRef(edge[1]))) + logger.info(f"Transitive reduction has been applied on {predicate}.") self.save_rdf_graph(graph, f"{file_path.split('.')[0]}_non_redundant", _format) + logger.info(f"{file_path.split('.')[0]}_non_redundant has been saved.") + + if invalid_predicates: + error_msg = ( + f"The predicate '{invalid_predicates[0]}' do not exist in the graph" + if len(invalid_predicates) == 1 + else f"The predicates {' ,'.join(invalid_predicates)} does not exist in the graph" + ) + logger.error(error_msg) class RDFFormat(Enum): diff --git a/pandasaurus_cxg/graph_generator/graph_generator_utils.py b/pandasaurus_cxg/graph_generator/graph_generator_utils.py new file mode 100644 index 0000000..4d0223f --- /dev/null +++ b/pandasaurus_cxg/graph_generator/graph_generator_utils.py @@ -0,0 +1,54 @@ +import networkx as nx +from rdflib import Graph, URIRef + + +def add_edge(nx_graph, subject, predicate, obj): + edge_data = {"label": str(predicate).split("/")[-1]} + nx_graph.add_edge( + str(subject), + str(obj), + **edge_data, + ) + + +def add_outgoing_edges_to_subgraph(graph, predicate_uri=None): + """ + Add all outgoing edges of a node in the graph to the subgraph. + + Parameters: + graph (Graph): The RDF graph containing the triples. + predicate_uri (URIRef or None): The predicate to filter triples (optional). + + Returns: + rdflib.Graph: The subgraph containing the outgoing edges of the nodes. + """ + subgraph = Graph() + for s, p, o in graph.triples((None, predicate_uri, None)): + subgraph.add((s, p, o)) + + return subgraph + + +def find_and_rotate_center_layout(graph): + """ + Find and rotate the center of the hierarchical tree layout. + + Parameters: + graph (nx.Graph or nx.DiGraph): The graph to be visualized. + + Returns: + dict: Rotated layout positions. + """ + # Layout the graph as a hierarchical tree + pos = nx.drawing.nx_agraph.graphviz_layout(graph, prog="dot") + # Find the center of the layout + x_sum, y_sum = 0, 0 + num_nodes = len(pos) + for x, y in pos.values(): + x_sum += x + y_sum += y + x_center = x_sum / num_nodes + y_center = y_sum / num_nodes + # Reflect the positions with respect to the center to rotate by 180 degrees + rotated_pos = {node: (2 * x_center - x, 2 * y_center - y) for node, (x, y) in pos.items()} + return rotated_pos diff --git a/pandasaurus_cxg/utils/logging_config.py b/pandasaurus_cxg/utils/logging_config.py new file mode 100644 index 0000000..327855a --- /dev/null +++ b/pandasaurus_cxg/utils/logging_config.py @@ -0,0 +1,31 @@ +import logging + + +# Create a filter to exclude ERROR log records +class NoErrorFilter(logging.Filter): + def filter(self, record): + return record.levelno != logging.ERROR + + +def configure_logger(): + logger = logging.getLogger(__name__) + logger.setLevel(logging.INFO) + logger.propagate = False + + # Create a console handler and set the level to INFO + info = logging.StreamHandler() + info.setLevel(logging.INFO) + # Create a console handler and set the level to ERROR + error = logging.StreamHandler() + error.setLevel(logging.ERROR) + + # Create a formatter and set the format for log messages + formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") + info.setFormatter(formatter) + error.setFormatter(formatter) + error.addFilter(NoErrorFilter()) + # Add the console handler to the logger + logger.addHandler(info) + logger.addHandler(error) + + return logger From 7930f81a624a8a0da039d41c9698c761db196927 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 4 Aug 2023 13:14:46 +0100 Subject: [PATCH 24/27] Refactored edge_data generation --- pandasaurus_cxg/graph_generator/graph_generator_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator_utils.py b/pandasaurus_cxg/graph_generator/graph_generator_utils.py index 4d0223f..fae9ae7 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator_utils.py +++ b/pandasaurus_cxg/graph_generator/graph_generator_utils.py @@ -3,7 +3,7 @@ def add_edge(nx_graph, subject, predicate, obj): - edge_data = {"label": str(predicate).split("/")[-1]} + edge_data = {"label": str(predicate).split("#")[-1] if "#" in predicate else str(predicate).split("/")[-1]} nx_graph.add_edge( str(subject), str(obj), From dc71801e7d525032a284e9e9a5066f957ac221d3 Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Fri, 4 Aug 2023 13:15:13 +0100 Subject: [PATCH 25/27] Fixed issues in nx_graph generation --- pandasaurus_cxg/graph_generator/graph_generator.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 968d486..0354e55 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -240,9 +240,9 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: nx_graph = nx.DiGraph() for s, p, o in subgraph: if isinstance(o, URIRef) and p != RDF.type: - add_edge(nx_graph, o, p, s) + add_edge(nx_graph, s, p, o) elif p != RDF.type: - nx_graph.add_node(str(s).split("/")[-1], label=str(o)) + nx_graph.add_node(str(s), label=str(o)) # Apply transitive reduction to remove redundancy transitive_reduction_graph = nx.transitive_reduction(nx_graph) @@ -277,6 +277,7 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: font_color="red", ) plt.show() + plt.savefig("xx.png") def transitive_reduction(self, predicate_list: List[str], file_path: str, _format: str = "xml"): graph = Graph().parse(file_path, format="ttl") if file_path else self.graph @@ -311,9 +312,9 @@ def transitive_reduction(self, predicate_list: List[str], file_path: str, _forma if invalid_predicates: error_msg = ( - f"The predicate '{invalid_predicates[0]}' do not exist in the graph" + f"The predicate '{invalid_predicates[0]}' does not exist in the graph" if len(invalid_predicates) == 1 - else f"The predicates {' ,'.join(invalid_predicates)} does not exist in the graph" + else f"The predicates {' ,'.join(invalid_predicates)} do not exist in the graph" ) logger.error(error_msg) From b5427b72abd7c0b57c63e8fef107a04ed488779b Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Tue, 8 Aug 2023 16:05:56 +0100 Subject: [PATCH 26/27] Refactored logging configuration, and added add_label_to_terms method --- .../graph_generator/graph_generator.py | 74 +++++++++++++++++-- 1 file changed, 67 insertions(+), 7 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 0354e55..57024c8 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -1,24 +1,26 @@ -import logging +import textwrap import uuid from enum import Enum -from typing import List, Optional +from typing import Dict, List, Optional import matplotlib.pyplot as plt import networkx as nx import pandas as pd from rdflib import OWL, RDF, RDFS, BNode, Graph, Literal, Namespace, URIRef +from rdflib.plugins.sparql import prepareQuery from pandasaurus_cxg.anndata_enricher import AnndataEnricher from pandasaurus_cxg.graph_generator.graph_generator_utils import ( add_edge, + add_node, add_outgoing_edges_to_subgraph, find_and_rotate_center_layout, ) -from pandasaurus_cxg.utils.logging_config import configure_logger from pandasaurus_cxg.utils.exceptions import ( InvalidGraphFormat, MissingEnrichmentProcess, ) +from pandasaurus_cxg.utils.logging_config import configure_logger # Set up logger logger = configure_logger() @@ -122,6 +124,8 @@ def generate_rdf_graph(self): continue self.graph.add((resource, self.ns[k], Literal(v))) + self.add_label_to_terms() + # add relationship between each resource based on their predicate in the co_annotation_report subcluster = self.ns["subcluster_of"] self.graph.add((subcluster, RDF.type, OWL.ObjectProperty)) @@ -241,8 +245,8 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: for s, p, o in subgraph: if isinstance(o, URIRef) and p != RDF.type: add_edge(nx_graph, s, p, o) - elif p != RDF.type: - nx_graph.add_node(str(s), label=str(o)) + elif p == RDFS.label: + add_node(nx_graph, s, p, o, {}) # Apply transitive reduction to remove redundancy transitive_reduction_graph = nx.transitive_reduction(nx_graph) @@ -256,12 +260,15 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: # Plot the graph as a hierarchical tree node_labels = nx.get_node_attributes(transitive_reduction_graph, "label") + node_labels = { + node: "\n".join(textwrap.wrap(label, width=10)) for node, label in node_labels.items() + } nx.draw( transitive_reduction_graph, pos, with_labels=True, labels=node_labels, - node_size=1000, + node_size=2000, node_color="skyblue", font_size=8, font_weight="bold", @@ -277,7 +284,6 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: font_color="red", ) plt.show() - plt.savefig("xx.png") def transitive_reduction(self, predicate_list: List[str], file_path: str, _format: str = "xml"): graph = Graph().parse(file_path, format="ttl") if file_path else self.graph @@ -318,6 +324,60 @@ def transitive_reduction(self, predicate_list: List[str], file_path: str, _forma ) logger.error(error_msg) + def add_label_to_terms(self, graph_: Graph = None): + graph = graph_ if graph_ else self.graph + # TODO have a better way to handle priority assignment and have an auto default assignment + priority = { + "subclass.l3": 1, + "subclass.l2": 2, + "subclass.full": 3, + "subclass.l1": 4, + "cell_type": 5, + "class": 6, + } + unique_subjects_query = ( + "SELECT DISTINCT ?subject WHERE { ?subject ?predicate ?object FILTER (isIRI(?subject))}" + ) + properties_query = prepareQuery( + "SELECT ?predicate ?object WHERE { ?subject ?predicate ?object. filter (isLiteral(?object) && ?predicate != rdfs:label)}" + ) + for result in graph.query(unique_subjects_query): + resource = result.subject + label_field = (None, 0) + for properties_result in graph.query( + properties_query, initBindings={"subject": result.subject}, initNs={"rdfs": RDFS} + ): + predicate = properties_result.predicate + object_ = properties_result.object + priority_value = priority.get(str(predicate).split("/")[-1], 0) + if priority_value > label_field[1]: + label_field = [str(object_), priority_value] + if label_field[0]: + graph.add((resource, RDFS.label, Literal(label_field[0]))) + + def set_default_priority(self) -> Dict[str, int]: + """ + Retrieve distinct predicates associated with non-label literal objects in the RDF graph. + + This function prepares and executes a SPARQL query to find predicates that are associated + with triples where the object is a literal and the predicate is not 'rdfs:label'. + + Returns: + A dictionary containing the distinct non-label literal predicates as keys and their + corresponding order index (starting from 1) as values. + """ + # TODO This will be refactored + sparql_query = prepareQuery( + """ + SELECT DISTINCT ?predicate + WHERE { + ?subject ?predicate ?object. FILTER(isLiteral(?object) && ?predicate != rdfs:label) + } + """ + ) + results = self.graph.query(sparql_query, initNs={"rdfs": RDFS}) + return {str(result["predicate"]): i + 1 for i, result in enumerate(results)} + class RDFFormat(Enum): RDF_XML = "xml" From 026071e320b841f42e7169ed62ca4601351cefcf Mon Sep 17 00:00:00 2001 From: Ugur Bayindir Date: Tue, 8 Aug 2023 16:10:15 +0100 Subject: [PATCH 27/27] Added add_node method --- pandasaurus_cxg/graph_generator/graph_generator.py | 2 +- .../graph_generator/graph_generator_utils.py | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pandasaurus_cxg/graph_generator/graph_generator.py b/pandasaurus_cxg/graph_generator/graph_generator.py index 57024c8..64bb703 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator.py +++ b/pandasaurus_cxg/graph_generator/graph_generator.py @@ -246,7 +246,7 @@ def visualize_rdf_graph(self, start_node: List[str], predicate: str, file_path: if isinstance(o, URIRef) and p != RDF.type: add_edge(nx_graph, s, p, o) elif p == RDFS.label: - add_node(nx_graph, s, p, o, {}) + add_node(nx_graph, s, o) # Apply transitive reduction to remove redundancy transitive_reduction_graph = nx.transitive_reduction(nx_graph) diff --git a/pandasaurus_cxg/graph_generator/graph_generator_utils.py b/pandasaurus_cxg/graph_generator/graph_generator_utils.py index fae9ae7..14e4d99 100644 --- a/pandasaurus_cxg/graph_generator/graph_generator_utils.py +++ b/pandasaurus_cxg/graph_generator/graph_generator_utils.py @@ -1,9 +1,15 @@ +from typing import Dict + import networkx as nx from rdflib import Graph, URIRef def add_edge(nx_graph, subject, predicate, obj): - edge_data = {"label": str(predicate).split("#")[-1] if "#" in predicate else str(predicate).split("/")[-1]} + edge_data = { + "label": str(predicate).split("#")[-1] + if "#" in predicate + else str(predicate).split("/")[-1] + } nx_graph.add_edge( str(subject), str(obj), @@ -11,6 +17,10 @@ def add_edge(nx_graph, subject, predicate, obj): ) +def add_node(nx_graph, subject, obj): + nx_graph.add_node(str(subject), label=str(obj)) + + def add_outgoing_edges_to_subgraph(graph, predicate_uri=None): """ Add all outgoing edges of a node in the graph to the subgraph.