Source code for icdcodex.hierarchy

"""deserialize icd hierarchies computed in datacleaning.py"""

from typing import Optional, Sequence, Tuple
import json
from datetime import datetime
import networkx as nx
from . import data

try:
    import importlib.resources as importlib_resources
except ModuleNotFoundError:
    import importlib_resources


[docs] def icd9() -> Tuple[nx.Graph, Sequence[str]]: """deserialize icd9 hierarchy Returns: Tuple[nx.Graph, Sequence[str]]: ICD9 hierarchy and codes """ with importlib_resources.open_text(data, "icd-9-hierarchy.json") as f: hierarchy = json.load(f) return ( nx.readwrite.json_graph.tree_graph(hierarchy["tree"]), hierarchy["codes"], )
[docs] def icd10cm(version: Optional[str] = None) -> Tuple[nx.Graph, Sequence[str]]: """deserialize icd-10-cm hierarchy Args: version (str, optional): icd-10-cm version, including 2019 to 2024. If None, use the system year. Defaults to None. Returns: Tuple[nx.Graph, Sequence[str]]: ICD-10-CM hierarchy and codes """ if version is None: version = str(datetime.now().year) if version not in ["2019", "2020", "2021", "2022", "2023", "2024", "2025"]: raise ValueError( f"icd-10-cm available from 2019 to 2025, but got {version}. If you want to use " f"a more recent version, please open a GitHub issue at https://github.com/icd-codex/icd-codex" ) with importlib_resources.open_text(data, f"icd-10-{version}-hierarchy.json") as f: hierarchy = json.loads(f.read()) return ( nx.readwrite.json_graph.tree_graph(hierarchy["tree"]), hierarchy["codes"], )