"""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"],
)